[{"data":1,"prerenderedAt":177328},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2026-05-24-c-xue-xi\u002Fch1-ji-ben-ren-shi":3,"wiki-doc-nav":5127},{"id":4,"title":5,"body":6,"description":69,"extension":5121,"meta":5122,"navigation":2362,"path":5123,"seo":5124,"stem":5125,"__hash__":5126},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":8,"toc":5093},"minimark",[9,13,18,22,26,39,43,48,51,54,57,60,63,100,104,107,110,113,116,169,173,192,194,208,211,219,222,1085,1092,1109,1113,1204,1208,1214,1303,1307,1345,1349,1413,1417,1421,1428,1439,1443,1448,1452,1457,1461,1466,1470,1474,1479,1749,1754,1892,1897,2154,2157,2165,2169,2174,2277,2280,2587,2596,2697,2700,2703,2706,2709,2969,2974,3114,3117,3296,3299,3427,3430,3582,3586,3591,3594,3605,3613,3616,3723,3727,3731,3736,3786,3791,3796,3820,3825,3878,3881,3886,4063,4068,4353,4358,4755,4759,4764,4821,4826,4834,4837,4977,4980,5089],[10,11,5],"h1",{"id":12},"_1基础入门",[14,15,17],"h2",{"id":16},"_11注释","1.1注释",[19,20,21],"p",{},"\u002F\u002F或者\u002F* *\u002F",[14,23,25],{"id":24},"_12命名","1.2命名",[27,28,29,33,36],"ol",{},[30,31,32],"li",{},"字母数字下划线",[30,34,35],{},"开头必须是字母或_",[30,37,38],{},"不能使用关键词",[14,40,42],{"id":41},"_13数据类型","1.3数据类型",[44,45,47],"h3",{"id":46},"_131整形","1.3.1整形",[19,49,50],{},"short 短整形 2",[19,52,53],{},"int 整形 4",[19,55,56],{},"long 长整形 win4 linux32位4 linux64位8",[19,58,59],{},"long long 长长整形 8",[19,61,62],{},"利用sizeof可以求数据类型占用的内存空间大小",[64,65,70],"pre",{"className":66,"code":67,"language":68,"meta":69,"style":69},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++","",[71,72,73,92],"code",{"__ignoreMap":69},[74,75,78,82,86,89],"span",{"class":76,"line":77},"line",1,[74,79,81],{"class":80},"szBVR","sizeof",[74,83,85],{"class":84},"sVt8B","(",[74,87,88],{"class":80},"int",[74,90,91],{"class":84},")\n",[74,93,95,97],{"class":76,"line":94},2,[74,96,81],{"class":80},[74,98,99],{"class":84},"(num)\n",[44,101,103],{"id":102},"_132浮点型","1.3.2浮点型",[19,105,106],{},"float 单精度 4节 7位有效数字",[19,108,109],{},"double 双精度 8节 15-16有效数字",[19,111,112],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,114,115],{},"注意点：",[64,117,119],{"className":66,"code":118,"language":68,"meta":69,"style":69},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[71,120,121,146],{"__ignoreMap":69},[74,122,123,126,129,132,136,139,142],{"class":76,"line":77},[74,124,125],{"class":80},"float",[74,127,128],{"class":84}," f1",[74,130,131],{"class":80},"=",[74,133,135],{"class":134},"sj4cs","3.14",[74,137,138],{"class":80},"f",[74,140,141],{"class":84},";",[74,143,145],{"class":144},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[74,147,148,150,153,155,158,161,164,166],{"class":76,"line":94},[74,149,125],{"class":80},[74,151,152],{"class":84}," f2",[74,154,131],{"class":80},[74,156,157],{"class":134},"3",[74,159,160],{"class":80},"e",[74,162,163],{"class":134},"2",[74,165,141],{"class":84},[74,167,168],{"class":144}," \u002F\u002F科学记数法\n",[44,170,172],{"id":171},"_133字符型","1.3.3字符型",[64,174,176],{"className":66,"code":175,"language":68,"meta":69,"style":69},"char ch='a'\n",[71,177,178],{"__ignoreMap":69},[74,179,180,183,186,188],{"class":76,"line":77},[74,181,182],{"class":80},"char",[74,184,185],{"class":84}," ch",[74,187,131],{"class":80},[74,189,191],{"class":190},"sZZnC","'a'\n",[19,193,115],{},[27,195,196,199,202,205],{},[30,197,198],{},"在显示字符型变量时，只能单引号，双引号x",[30,200,201],{},"单引号内只能一个字符，不能字符串",[30,203,204],{},"c和c++字符型变量只占用一个字符",[30,206,207],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,209,210],{},"ASCII码大致由以下两部分组成：",[27,212,213,216],{},[30,214,215],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[30,217,218],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,220,221],{},"ASCII码表格：",[223,224,225,269],"table",{},[226,227,228],"thead",{},[229,230,231,239,244,248,253,257,261,265],"tr",{},[232,233,234,238],"th",{},[235,236,237],"strong",{},"ASCII","值",[232,240,241],{},[235,242,243],{},"控制字符",[232,245,246,238],{},[235,247,237],{},[232,249,250],{},[235,251,252],{},"字符",[232,254,255,238],{},[235,256,237],{},[232,258,259],{},[235,260,252],{},[232,262,263,238],{},[235,264,237],{},[232,266,267],{},[235,268,252],{},[270,271,272,299,325,350,375,401,426,451,477,502,528,554,580,605,631,657,683,707,732,757,782,807,832,857,882,907,932,958,983,1008,1033,1059],"tbody",{},[229,273,274,278,281,284,287,290,293,296],{},[275,276,277],"td",{},"0",[275,279,280],{},"NUT",[275,282,283],{},"32",[275,285,286],{},"(space)",[275,288,289],{},"64",[275,291,292],{},"@",[275,294,295],{},"96",[275,297,298],{},"、",[229,300,301,304,307,310,313,316,319,322],{},[275,302,303],{},"1",[275,305,306],{},"SOH",[275,308,309],{},"33",[275,311,312],{},"!",[275,314,315],{},"65",[275,317,318],{},"A",[275,320,321],{},"97",[275,323,324],{},"a",[229,326,327,329,332,335,338,341,344,347],{},[275,328,163],{},[275,330,331],{},"STX",[275,333,334],{},"34",[275,336,337],{},"\"",[275,339,340],{},"66",[275,342,343],{},"B",[275,345,346],{},"98",[275,348,349],{},"b",[229,351,352,354,357,360,363,366,369,372],{},[275,353,157],{},[275,355,356],{},"ETX",[275,358,359],{},"35",[275,361,362],{},"#",[275,364,365],{},"67",[275,367,368],{},"C",[275,370,371],{},"99",[275,373,374],{},"c",[229,376,377,380,383,386,389,392,395,398],{},[275,378,379],{},"4",[275,381,382],{},"EOT",[275,384,385],{},"36",[275,387,388],{},"$",[275,390,391],{},"68",[275,393,394],{},"D",[275,396,397],{},"100",[275,399,400],{},"d",[229,402,403,406,409,412,415,418,421,424],{},[275,404,405],{},"5",[275,407,408],{},"ENQ",[275,410,411],{},"37",[275,413,414],{},"%",[275,416,417],{},"69",[275,419,420],{},"E",[275,422,423],{},"101",[275,425,160],{},[229,427,428,431,434,437,440,443,446,449],{},[275,429,430],{},"6",[275,432,433],{},"ACK",[275,435,436],{},"38",[275,438,439],{},"&",[275,441,442],{},"70",[275,444,445],{},"F",[275,447,448],{},"102",[275,450,138],{},[229,452,453,456,459,462,465,468,471,474],{},[275,454,455],{},"7",[275,457,458],{},"BEL",[275,460,461],{},"39",[275,463,464],{},",",[275,466,467],{},"71",[275,469,470],{},"G",[275,472,473],{},"103",[275,475,476],{},"g",[229,478,479,482,485,488,490,493,496,499],{},[275,480,481],{},"8",[275,483,484],{},"BS",[275,486,487],{},"40",[275,489,85],{},[275,491,492],{},"72",[275,494,495],{},"H",[275,497,498],{},"104",[275,500,501],{},"h",[229,503,504,507,510,513,516,519,522,525],{},[275,505,506],{},"9",[275,508,509],{},"HT",[275,511,512],{},"41",[275,514,515],{},")",[275,517,518],{},"73",[275,520,521],{},"I",[275,523,524],{},"105",[275,526,527],{},"i",[229,529,530,533,536,539,542,545,548,551],{},[275,531,532],{},"10",[275,534,535],{},"LF",[275,537,538],{},"42",[275,540,541],{},"*",[275,543,544],{},"74",[275,546,547],{},"J",[275,549,550],{},"106",[275,552,553],{},"j",[229,555,556,559,562,565,568,571,574,577],{},[275,557,558],{},"11",[275,560,561],{},"VT",[275,563,564],{},"43",[275,566,567],{},"+",[275,569,570],{},"75",[275,572,573],{},"K",[275,575,576],{},"107",[275,578,579],{},"k",[229,581,582,585,588,591,593,596,599,602],{},[275,583,584],{},"12",[275,586,587],{},"FF",[275,589,590],{},"44",[275,592,464],{},[275,594,595],{},"76",[275,597,598],{},"L",[275,600,601],{},"108",[275,603,604],{},"l",[229,606,607,610,613,616,619,622,625,628],{},[275,608,609],{},"13",[275,611,612],{},"CR",[275,614,615],{},"45",[275,617,618],{},"-",[275,620,621],{},"77",[275,623,624],{},"M",[275,626,627],{},"109",[275,629,630],{},"m",[229,632,633,636,639,642,645,648,651,654],{},[275,634,635],{},"14",[275,637,638],{},"SO",[275,640,641],{},"46",[275,643,644],{},".",[275,646,647],{},"78",[275,649,650],{},"N",[275,652,653],{},"110",[275,655,656],{},"n",[229,658,659,662,665,668,671,674,677,680],{},[275,660,661],{},"15",[275,663,664],{},"SI",[275,666,667],{},"47",[275,669,670],{},"\u002F",[275,672,673],{},"79",[275,675,676],{},"O",[275,678,679],{},"111",[275,681,682],{},"o",[229,684,685,688,691,694,696,699,702,705],{},[275,686,687],{},"16",[275,689,690],{},"DLE",[275,692,693],{},"48",[275,695,277],{},[275,697,698],{},"80",[275,700,701],{},"P",[275,703,704],{},"112",[275,706,19],{},[229,708,709,712,715,718,720,723,726,729],{},[275,710,711],{},"17",[275,713,714],{},"DCI",[275,716,717],{},"49",[275,719,303],{},[275,721,722],{},"81",[275,724,725],{},"Q",[275,727,728],{},"113",[275,730,731],{},"q",[229,733,734,737,740,743,745,748,751,754],{},[275,735,736],{},"18",[275,738,739],{},"DC2",[275,741,742],{},"50",[275,744,163],{},[275,746,747],{},"82",[275,749,750],{},"R",[275,752,753],{},"114",[275,755,756],{},"r",[229,758,759,762,765,768,770,773,776,779],{},[275,760,761],{},"19",[275,763,764],{},"DC3",[275,766,767],{},"51",[275,769,157],{},[275,771,772],{},"83",[275,774,775],{},"S",[275,777,778],{},"115",[275,780,781],{},"s",[229,783,784,787,790,793,795,798,801,804],{},[275,785,786],{},"20",[275,788,789],{},"DC4",[275,791,792],{},"52",[275,794,379],{},[275,796,797],{},"84",[275,799,800],{},"T",[275,802,803],{},"116",[275,805,806],{},"t",[229,808,809,812,815,818,820,823,826,829],{},[275,810,811],{},"21",[275,813,814],{},"NAK",[275,816,817],{},"53",[275,819,405],{},[275,821,822],{},"85",[275,824,825],{},"U",[275,827,828],{},"117",[275,830,831],{},"u",[229,833,834,837,840,843,845,848,851,854],{},[275,835,836],{},"22",[275,838,839],{},"SYN",[275,841,842],{},"54",[275,844,430],{},[275,846,847],{},"86",[275,849,850],{},"V",[275,852,853],{},"118",[275,855,856],{},"v",[229,858,859,862,865,868,870,873,876,879],{},[275,860,861],{},"23",[275,863,864],{},"TB",[275,866,867],{},"55",[275,869,455],{},[275,871,872],{},"87",[275,874,875],{},"W",[275,877,878],{},"119",[275,880,881],{},"w",[229,883,884,887,890,893,895,898,901,904],{},[275,885,886],{},"24",[275,888,889],{},"CAN",[275,891,892],{},"56",[275,894,481],{},[275,896,897],{},"88",[275,899,900],{},"X",[275,902,903],{},"120",[275,905,906],{},"x",[229,908,909,912,915,918,920,923,926,929],{},[275,910,911],{},"25",[275,913,914],{},"EM",[275,916,917],{},"57",[275,919,506],{},[275,921,922],{},"89",[275,924,925],{},"Y",[275,927,928],{},"121",[275,930,931],{},"y",[229,933,934,937,940,943,946,949,952,955],{},[275,935,936],{},"26",[275,938,939],{},"SUB",[275,941,942],{},"58",[275,944,945],{},":",[275,947,948],{},"90",[275,950,951],{},"Z",[275,953,954],{},"122",[275,956,957],{},"z",[229,959,960,963,966,969,971,974,977,980],{},[275,961,962],{},"27",[275,964,965],{},"ESC",[275,967,968],{},"59",[275,970,141],{},[275,972,973],{},"91",[275,975,976],{},"[",[275,978,979],{},"123",[275,981,982],{},"{",[229,984,985,988,991,994,997,1000,1002,1005],{},[275,986,987],{},"28",[275,989,990],{},"FS",[275,992,993],{},"60",[275,995,996],{},"\u003C",[275,998,999],{},"92",[275,1001,670],{},[275,1003,1004],{},"124",[275,1006,1007],{},"|",[229,1009,1010,1013,1016,1019,1021,1024,1027,1030],{},[275,1011,1012],{},"29",[275,1014,1015],{},"GS",[275,1017,1018],{},"61",[275,1020,131],{},[275,1022,1023],{},"93",[275,1025,1026],{},"]",[275,1028,1029],{},"125",[275,1031,1032],{},"}",[229,1034,1035,1038,1041,1044,1047,1050,1053,1056],{},[275,1036,1037],{},"30",[275,1039,1040],{},"RS",[275,1042,1043],{},"62",[275,1045,1046],{},">",[275,1048,1049],{},"94",[275,1051,1052],{},"^",[275,1054,1055],{},"126",[275,1057,1058],{},"`",[229,1060,1061,1064,1067,1070,1073,1076,1079,1082],{},[275,1062,1063],{},"31",[275,1065,1066],{},"US",[275,1068,1069],{},"63",[275,1071,1072],{},"?",[275,1074,1075],{},"95",[275,1077,1078],{},"_",[275,1080,1081],{},"127",[275,1083,1084],{},"DEL",[19,1086,1087,1088,1091],{},"ASCII 码大致由以下",[235,1089,1090],{},"两部分组","成：",[1093,1094,1095,1102],"ul",{},[30,1096,1097,1098,1101],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[235,1099,1100],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[30,1103,1104,1105,1108],{},"ASCII 打印字符：数字 ",[235,1106,1107],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[44,1110,1112],{"id":1111},"_134转义字符","1.3.4转义字符",[64,1114,1116],{"className":66,"code":1115,"language":68,"meta":69,"style":69},"\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",[71,1117,1118,1123,1139,1154,1160,1174,1180],{"__ignoreMap":69},[74,1119,1120],{"class":76,"line":77},[74,1121,1122],{"class":144},"\u002F\u002F换行符\n",[74,1124,1125,1128,1131,1134,1136],{"class":76,"line":94},[74,1126,1127],{"class":84},"cout ",[74,1129,1130],{"class":80},"\u003C\u003C",[74,1132,1133],{"class":190},"\"hello world\u002Fn\"",[74,1135,141],{"class":84},[74,1137,1138],{"class":144}," \u002F\u002F就等同于如下：\n",[74,1140,1142,1144,1146,1149,1151],{"class":76,"line":1141},3,[74,1143,1127],{"class":84},[74,1145,1130],{"class":80},[74,1147,1148],{"class":190},"\"hello world\"",[74,1150,1130],{"class":80},[74,1152,1153],{"class":84},"endl;\n",[74,1155,1157],{"class":76,"line":1156},4,[74,1158,1159],{"class":144},"\u002F\u002F反斜杠\n",[74,1161,1163,1165,1167,1170,1172],{"class":76,"line":1162},5,[74,1164,1127],{"class":84},[74,1166,1130],{"class":80},[74,1168,1169],{"class":190},"\"\u002F\u002F\"",[74,1171,1130],{"class":80},[74,1173,1153],{"class":84},[74,1175,1177],{"class":76,"line":1176},6,[74,1178,1179],{"class":144},"\u002F\u002F水平制表符\n",[74,1181,1183,1185,1187,1190,1193,1196,1198,1201],{"class":76,"line":1182},7,[74,1184,1127],{"class":84},[74,1186,1130],{"class":80},[74,1188,1189],{"class":190},"\"aaaa",[74,1191,1192],{"class":134},"\\t",[74,1194,1195],{"class":190},"helloworld\"",[74,1197,1130],{"class":80},[74,1199,1200],{"class":84},"endl;",[74,1202,1203],{"class":144}," \u002F\u002F输出窗口时有对齐效果\n",[44,1205,1207],{"id":1206},"_135字符串型","1.3.5字符串型",[19,1209,1210,1211,1213],{},"char 变量名",[74,1212],{},"=\"字符串值\"",[64,1215,1217],{"className":66,"code":1216,"language":68,"meta":69,"style":69},"\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",[71,1218,1219,1224,1229,1234,1239,1253,1266,1271,1277,1289],{"__ignoreMap":69},[74,1220,1221],{"class":76,"line":77},[74,1222,1223],{"class":144},"\u002F\u002Fc风格字符串\n",[74,1225,1226],{"class":76,"line":94},[74,1227,1228],{"class":144},"\u002F\u002F注意事项：\n",[74,1230,1231],{"class":76,"line":1141},[74,1232,1233],{"class":144},"\u002F\u002F1.char字符串名[]\n",[74,1235,1236],{"class":76,"line":1156},[74,1237,1238],{"class":144},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[74,1240,1241,1243,1246,1248,1250],{"class":76,"line":1162},[74,1242,182],{"class":80},[74,1244,1245],{"class":84}," str[]",[74,1247,131],{"class":80},[74,1249,1148],{"class":190},[74,1251,1252],{"class":84},";\n",[74,1254,1255,1257,1259,1262,1264],{"class":76,"line":1176},[74,1256,1127],{"class":84},[74,1258,1130],{"class":80},[74,1260,1261],{"class":84},"str",[74,1263,1130],{"class":80},[74,1265,1153],{"class":84},[74,1267,1268],{"class":76,"line":1182},[74,1269,1270],{"class":144},"\u002F\u002Fc++风格字符串\n",[74,1272,1274],{"class":76,"line":1273},8,[74,1275,1276],{"class":144},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[74,1278,1280,1283,1285,1287],{"class":76,"line":1279},9,[74,1281,1282],{"class":84},"string str2",[74,1284,131],{"class":80},[74,1286,1148],{"class":190},[74,1288,1252],{"class":84},[74,1290,1292,1294,1296,1299,1301],{"class":76,"line":1291},10,[74,1293,1127],{"class":84},[74,1295,1130],{"class":80},[74,1297,1298],{"class":84},"str2",[74,1300,1130],{"class":80},[74,1302,1153],{"class":84},[44,1304,1306],{"id":1305},"_136布尔类型bool","1.3.6布尔类型bool",[64,1308,1310],{"className":66,"code":1309,"language":68,"meta":69,"style":69},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[71,1311,1312,1327],{"__ignoreMap":69},[74,1313,1314,1317,1320,1322,1325],{"class":76,"line":77},[74,1315,1316],{"class":80},"bool",[74,1318,1319],{"class":84}," flag",[74,1321,131],{"class":80},[74,1323,1324],{"class":134},"true",[74,1326,1252],{"class":84},[74,1328,1329,1332,1335,1338,1340,1342],{"class":76,"line":94},[74,1330,1331],{"class":84},"cout",[74,1333,1334],{"class":80},"\u003C\u003Csizeof",[74,1336,1337],{"class":84},"(flag)",[74,1339,1130],{"class":80},[74,1341,1200],{"class":84},[74,1343,1344],{"class":144}," \u002F\u002F查看布尔占内存空间\n",[14,1346,1348],{"id":1347},"_14键盘输入cin","1.4键盘输入cin",[64,1350,1352],{"className":66,"code":1351,"language":68,"meta":69,"style":69},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[71,1353,1354,1367,1384,1395],{"__ignoreMap":69},[74,1355,1356,1358,1361,1363,1365],{"class":76,"line":77},[74,1357,88],{"class":80},[74,1359,1360],{"class":84}," a",[74,1362,131],{"class":80},[74,1364,277],{"class":134},[74,1366,1252],{"class":84},[74,1368,1369,1371,1373,1376,1378,1380,1382],{"class":76,"line":94},[74,1370,1331],{"class":84},[74,1372,1130],{"class":80},[74,1374,1375],{"class":190},"\"请给整型变量a赋值\"",[74,1377,1130],{"class":80},[74,1379,324],{"class":84},[74,1381,1130],{"class":80},[74,1383,1153],{"class":84},[74,1385,1386,1389,1392],{"class":76,"line":1141},[74,1387,1388],{"class":84},"cin ",[74,1390,1391],{"class":80},">>",[74,1393,1394],{"class":84}," a;\n",[74,1396,1397,1399,1401,1404,1407,1409,1411],{"class":76,"line":1156},[74,1398,1127],{"class":84},[74,1400,1130],{"class":80},[74,1402,1403],{"class":190}," \"整型变量a=\"",[74,1405,1406],{"class":80}," \u003C\u003C",[74,1408,324],{"class":84},[74,1410,1130],{"class":80},[74,1412,1153],{"class":84},[14,1414,1416],{"id":1415},"_15运算符","1.5运算符",[44,1418,1420],{"id":1419},"_151算术运算符","1.5.1算术运算符",[19,1422,1423,1427],{},[1424,1425],"img",{"alt":69,"src":1426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[27,1429,1430,1433,1436],{},[30,1431,1432],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[30,1434,1435],{},"两个小数不可以做取模运算",[30,1437,1438],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[44,1440,1442],{"id":1441},"_152赋值运算符","1.5.2赋值运算符",[19,1444,1445],{},[1424,1446],{"alt":69,"src":1447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[44,1449,1451],{"id":1450},"_153比较运算符","1.5.3比较运算符",[19,1453,1454],{},[1424,1455],{"alt":69,"src":1456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[44,1458,1460],{"id":1459},"_154逻辑运算符","1.5.4逻辑运算符",[19,1462,1463],{},[1424,1464],{"alt":69,"src":1465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1467,1469],{"id":1468},"_16程序流程结构","1.6程序流程结构",[44,1471,1473],{"id":1472},"_161选择结构","1.6.1选择结构",[27,1475,1476],{},[30,1477,1478],{},"if语句\n单行、多行、多条件if语句",[64,1480,1482],{"className":66,"code":1481,"language":68,"meta":69,"style":69},"\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",[71,1483,1484,1489,1504,1509,1523,1528,1533,1542,1555,1559,1572,1577,1583,1588,1602,1607,1613,1634,1639,1653,1658,1687,1692,1709,1714,1719,1724,1738,1743],{"__ignoreMap":69},[74,1485,1486],{"class":76,"line":77},[74,1487,1488],{"class":144},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[74,1490,1491,1494,1497,1499,1502],{"class":76,"line":94},[74,1492,1493],{"class":80},"if",[74,1495,1496],{"class":84},"(score",[74,1498,1046],{"class":80},[74,1500,1501],{"class":134},"600",[74,1503,91],{"class":84},[74,1505,1506],{"class":76,"line":1141},[74,1507,1508],{"class":84},"{\n",[74,1510,1511,1514,1516,1519,1521],{"class":76,"line":1156},[74,1512,1513],{"class":84},"    cout",[74,1515,1130],{"class":80},[74,1517,1518],{"class":190},"'这是单行if语句'",[74,1520,1130],{"class":80},[74,1522,1153],{"class":84},[74,1524,1525],{"class":76,"line":1162},[74,1526,1527],{"class":84},"}\n",[74,1529,1530],{"class":76,"line":1176},[74,1531,1532],{"class":144},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[74,1534,1535,1537,1539],{"class":76,"line":1182},[74,1536,1388],{"class":84},[74,1538,1391],{"class":80},[74,1540,1541],{"class":84}," score\n",[74,1543,1544,1546,1548,1551,1553],{"class":76,"line":1273},[74,1545,1493],{"class":80},[74,1547,1496],{"class":84},[74,1549,1550],{"class":80},"\u003C=",[74,1552,1501],{"class":134},[74,1554,91],{"class":84},[74,1556,1557],{"class":76,"line":1279},[74,1558,1508],{"class":84},[74,1560,1561,1563,1565,1568,1570],{"class":76,"line":1291},[74,1562,1513],{"class":84},[74,1564,1391],{"class":80},[74,1566,1567],{"class":190},"\"小于等于600\"",[74,1569,1130],{"class":80},[74,1571,1153],{"class":84},[74,1573,1575],{"class":76,"line":1574},11,[74,1576,1527],{"class":84},[74,1578,1580],{"class":76,"line":1579},12,[74,1581,1582],{"class":80},"else\n",[74,1584,1586],{"class":76,"line":1585},13,[74,1587,1508],{"class":84},[74,1589,1591,1593,1595,1598,1600],{"class":76,"line":1590},14,[74,1592,1513],{"class":84},[74,1594,1391],{"class":80},[74,1596,1597],{"class":190},"\"大于600\"",[74,1599,1391],{"class":80},[74,1601,1153],{"class":84},[74,1603,1605],{"class":76,"line":1604},15,[74,1606,1527],{"class":84},[74,1608,1610],{"class":76,"line":1609},16,[74,1611,1612],{"class":144},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[74,1614,1616,1618,1621,1623,1625,1628,1630,1632],{"class":76,"line":1615},17,[74,1617,1493],{"class":80},[74,1619,1620],{"class":84}," (",[74,1622,277],{"class":134},[74,1624,996],{"class":80},[74,1626,1627],{"class":84},"num",[74,1629,996],{"class":80},[74,1631,397],{"class":134},[74,1633,91],{"class":84},[74,1635,1637],{"class":76,"line":1636},18,[74,1638,1508],{"class":84},[74,1640,1642,1644,1646,1649,1651],{"class":76,"line":1641},19,[74,1643,1513],{"class":84},[74,1645,1130],{"class":80},[74,1647,1648],{"class":190},"\"小于100\"",[74,1650,1130],{"class":80},[74,1652,1153],{"class":84},[74,1654,1656],{"class":76,"line":1655},20,[74,1657,1527],{"class":84},[74,1659,1661,1664,1667,1670,1673,1675,1678,1680,1682,1685],{"class":76,"line":1660},21,[74,1662,1663],{"class":80},"else",[74,1665,1666],{"class":80}," if",[74,1668,1669],{"class":84}," (nmu",[74,1671,1672],{"class":80},">=",[74,1674,397],{"class":134},[74,1676,1677],{"class":80},"&&",[74,1679,1627],{"class":84},[74,1681,996],{"class":80},[74,1683,1684],{"class":134},"200",[74,1686,91],{"class":84},[74,1688,1690],{"class":76,"line":1689},22,[74,1691,1508],{"class":84},[74,1693,1695,1697,1699,1702,1704,1706],{"class":76,"line":1694},23,[74,1696,1513],{"class":84},[74,1698,1130],{"class":80},[74,1700,1701],{"class":190},"\"不小于100且小于200\"",[74,1703,1130],{"class":80},[74,1705,1200],{"class":84},[74,1707,1708],{"class":144}," \u002F\u002F可以无限else if,python中是elif：\n",[74,1710,1712],{"class":76,"line":1711},24,[74,1713,1527],{"class":84},[74,1715,1717],{"class":76,"line":1716},25,[74,1718,1582],{"class":80},[74,1720,1722],{"class":76,"line":1721},26,[74,1723,1508],{"class":84},[74,1725,1727,1729,1731,1734,1736],{"class":76,"line":1726},27,[74,1728,1513],{"class":84},[74,1730,1130],{"class":80},[74,1732,1733],{"class":190},"\"不小于200\"",[74,1735,1130],{"class":80},[74,1737,1153],{"class":84},[74,1739,1741],{"class":76,"line":1740},28,[74,1742,1527],{"class":84},[74,1744,1746],{"class":76,"line":1745},29,[74,1747,1748],{"class":144},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[27,1750,1751],{"start":94},[30,1752,1753],{},"三目运算符",[64,1755,1757],{"className":66,"code":1756,"language":68,"meta":69,"style":69},"\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",[71,1758,1759,1764,1769,1795,1817,1834,1839,1862,1877],{"__ignoreMap":69},[74,1760,1761],{"class":76,"line":77},[74,1762,1763],{"class":144},"\u002F\u002F创建三个变量a,b,c\n",[74,1765,1766],{"class":76,"line":94},[74,1767,1768],{"class":144},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[74,1770,1771,1773,1775,1777,1779,1782,1784,1786,1789,1791,1793],{"class":76,"line":1141},[74,1772,88],{"class":80},[74,1774,1360],{"class":84},[74,1776,131],{"class":80},[74,1778,786],{"class":134},[74,1780,1781],{"class":84},",b",[74,1783,131],{"class":80},[74,1785,532],{"class":134},[74,1787,1788],{"class":84},",c",[74,1790,131],{"class":80},[74,1792,277],{"class":134},[74,1794,1252],{"class":84},[74,1796,1797,1799,1801,1804,1806,1808,1810,1812,1814],{"class":76,"line":1156},[74,1798,374],{"class":84},[74,1800,131],{"class":80},[74,1802,1803],{"class":84},"(a",[74,1805,1046],{"class":80},[74,1807,349],{"class":84},[74,1809,1072],{"class":80},[74,1811,324],{"class":84},[74,1813,945],{"class":80},[74,1815,1816],{"class":84},"b)\n",[74,1818,1819,1821,1823,1826,1828,1830,1832],{"class":76,"line":1162},[74,1820,1331],{"class":84},[74,1822,1130],{"class":80},[74,1824,1825],{"class":190},"\"c=\"",[74,1827,1130],{"class":80},[74,1829,374],{"class":84},[74,1831,1130],{"class":80},[74,1833,1153],{"class":84},[74,1835,1836],{"class":76,"line":1176},[74,1837,1838],{"class":144},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[74,1840,1841,1843,1845,1847,1849,1851,1853,1856,1858,1860],{"class":76,"line":1182},[74,1842,1803],{"class":84},[74,1844,1046],{"class":80},[74,1846,349],{"class":84},[74,1848,1072],{"class":80},[74,1850,324],{"class":84},[74,1852,945],{"class":80},[74,1854,1855],{"class":84},"b)",[74,1857,131],{"class":80},[74,1859,397],{"class":134},[74,1861,1252],{"class":84},[74,1863,1864,1866,1868,1870,1872,1874],{"class":76,"line":1273},[74,1865,1331],{"class":84},[74,1867,1130],{"class":80},[74,1869,324],{"class":84},[74,1871,1130],{"class":80},[74,1873,1200],{"class":84},[74,1875,1876],{"class":144}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[74,1878,1879,1881,1883,1885,1887,1889],{"class":76,"line":1279},[74,1880,1331],{"class":84},[74,1882,1130],{"class":80},[74,1884,349],{"class":84},[74,1886,1130],{"class":80},[74,1888,1200],{"class":84},[74,1890,1891],{"class":144}," \u002F\u002F10   a>b,b还是原值\n",[27,1893,1894],{"start":1141},[30,1895,1896],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[64,1898,1900],{"className":66,"code":1899,"language":68,"meta":69,"style":69},"\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",[71,1901,1902,1907,1915,1929,1939,1943,1957,1970,1980,1988,1993,2018,2039,2061,2082,2104,2125,2145,2150],{"__ignoreMap":69},[74,1903,1904],{"class":76,"line":77},[74,1905,1906],{"class":144},"\u002F\u002F案例-电影打分\n",[74,1908,1909,1912],{"class":76,"line":94},[74,1910,1911],{"class":80},"#include",[74,1913,1914],{"class":190},"\u003Ciostream>\n",[74,1916,1917,1920,1923,1927],{"class":76,"line":1141},[74,1918,1919],{"class":80},"using",[74,1921,1922],{"class":80}," namespace",[74,1924,1926],{"class":1925},"sScJk"," std",[74,1928,1252],{"class":84},[74,1930,1931,1933,1936],{"class":76,"line":1156},[74,1932,88],{"class":80},[74,1934,1935],{"class":1925}," main",[74,1937,1938],{"class":84},"()\n",[74,1940,1941],{"class":76,"line":1162},[74,1942,1508],{"class":84},[74,1944,1945,1948,1951,1953,1955],{"class":76,"line":1176},[74,1946,1947],{"class":80},"    int",[74,1949,1950],{"class":84}," score",[74,1952,131],{"class":80},[74,1954,277],{"class":134},[74,1956,1252],{"class":84},[74,1958,1959,1961,1963,1966,1968],{"class":76,"line":1182},[74,1960,1513],{"class":84},[74,1962,1130],{"class":80},[74,1964,1965],{"class":190},"\"电影打分：\"",[74,1967,1130],{"class":80},[74,1969,1153],{"class":84},[74,1971,1972,1975,1977],{"class":76,"line":1273},[74,1973,1974],{"class":84},"    cin",[74,1976,1391],{"class":80},[74,1978,1979],{"class":84},"score;\n",[74,1981,1982,1985],{"class":76,"line":1279},[74,1983,1984],{"class":80},"    switch",[74,1986,1987],{"class":84},"(score)\n",[74,1989,1990],{"class":76,"line":1291},[74,1991,1992],{"class":84},"    {\n",[74,1994,1995,1998,2001,2004,2006,2009,2011,2013,2016],{"class":76,"line":1574},[74,1996,1997],{"class":80},"        case",[74,1999,2000],{"class":134}," 10",[74,2002,2003],{"class":84},":cout",[74,2005,1130],{"class":80},[74,2007,2008],{"class":190},"\"经典\"",[74,2010,1130],{"class":80},[74,2012,1200],{"class":84},[74,2014,2015],{"class":80},"break",[74,2017,1252],{"class":84},[74,2019,2020,2022,2025,2027,2029,2031,2033,2035,2037],{"class":76,"line":1579},[74,2021,1997],{"class":80},[74,2023,2024],{"class":134}," 9",[74,2026,2003],{"class":84},[74,2028,1130],{"class":80},[74,2030,2008],{"class":190},[74,2032,1130],{"class":80},[74,2034,1200],{"class":84},[74,2036,2015],{"class":80},[74,2038,1252],{"class":84},[74,2040,2041,2043,2046,2048,2050,2053,2055,2057,2059],{"class":76,"line":1585},[74,2042,1997],{"class":80},[74,2044,2045],{"class":134}," 8",[74,2047,2003],{"class":84},[74,2049,1130],{"class":80},[74,2051,2052],{"class":190},"\"非常好\"",[74,2054,1130],{"class":80},[74,2056,1200],{"class":84},[74,2058,2015],{"class":80},[74,2060,1252],{"class":84},[74,2062,2063,2065,2068,2070,2072,2074,2076,2078,2080],{"class":76,"line":1590},[74,2064,1997],{"class":80},[74,2066,2067],{"class":134}," 7",[74,2069,2003],{"class":84},[74,2071,1130],{"class":80},[74,2073,2052],{"class":190},[74,2075,1130],{"class":80},[74,2077,1200],{"class":84},[74,2079,2015],{"class":80},[74,2081,1252],{"class":84},[74,2083,2084,2086,2089,2091,2093,2096,2098,2100,2102],{"class":76,"line":1604},[74,2085,1997],{"class":80},[74,2087,2088],{"class":134}," 6",[74,2090,2003],{"class":84},[74,2092,1130],{"class":80},[74,2094,2095],{"class":190},"\"一般\"",[74,2097,1130],{"class":80},[74,2099,1200],{"class":84},[74,2101,2015],{"class":80},[74,2103,1252],{"class":84},[74,2105,2106,2108,2111,2113,2115,2117,2119,2121,2123],{"class":76,"line":1609},[74,2107,1997],{"class":80},[74,2109,2110],{"class":134}," 5",[74,2112,2003],{"class":84},[74,2114,1130],{"class":80},[74,2116,2095],{"class":190},[74,2118,1130],{"class":80},[74,2120,1200],{"class":84},[74,2122,2015],{"class":80},[74,2124,1252],{"class":84},[74,2126,2127,2130,2132,2134,2137,2139,2141,2143],{"class":76,"line":1615},[74,2128,2129],{"class":80},"        default",[74,2131,2003],{"class":84},[74,2133,1130],{"class":80},[74,2135,2136],{"class":190},"\"烂片\"",[74,2138,1130],{"class":80},[74,2140,1200],{"class":84},[74,2142,2015],{"class":80},[74,2144,1252],{"class":84},[74,2146,2147],{"class":76,"line":1636},[74,2148,2149],{"class":84},"    }\n",[74,2151,2152],{"class":76,"line":1641},[74,2153,1527],{"class":84},[19,2155,2156],{},"if和switch区别：",[1093,2158,2159,2162],{},[30,2160,2161],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[30,2163,2164],{},"switch优点：结构清晰，执行效率高",[44,2166,2168],{"id":2167},"_162循环结构","1.6.2循环结构",[27,2170,2171],{},[30,2172,2173],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[64,2175,2177],{"className":66,"code":2176,"language":68,"meta":69,"style":69},"\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",[71,2178,2179,2184,2192,2196,2209,2223,2227,2247,2257,2261,2273],{"__ignoreMap":69},[74,2180,2181],{"class":76,"line":77},[74,2182,2183],{"class":144},"\u002F\u002F打印0-9数字\n",[74,2185,2186,2188,2190],{"class":76,"line":94},[74,2187,88],{"class":80},[74,2189,1935],{"class":1925},[74,2191,1938],{"class":84},[74,2193,2194],{"class":76,"line":1141},[74,2195,1508],{"class":84},[74,2197,2198,2200,2203,2205,2207],{"class":76,"line":1156},[74,2199,1947],{"class":80},[74,2201,2202],{"class":84}," num",[74,2204,131],{"class":80},[74,2206,277],{"class":134},[74,2208,1252],{"class":84},[74,2210,2211,2214,2217,2219,2221],{"class":76,"line":1162},[74,2212,2213],{"class":80},"    while",[74,2215,2216],{"class":84},"(num",[74,2218,996],{"class":80},[74,2220,532],{"class":134},[74,2222,91],{"class":84},[74,2224,2225],{"class":76,"line":1176},[74,2226,1992],{"class":84},[74,2228,2229,2232,2235,2237,2239,2241,2244],{"class":76,"line":1182},[74,2230,2231],{"class":1925},"       std",[74,2233,2234],{"class":84},"::cout",[74,2236,1130],{"class":80},[74,2238,1627],{"class":84},[74,2240,1130],{"class":80},[74,2242,2243],{"class":1925},"std",[74,2245,2246],{"class":84},"::endl;\n",[74,2248,2249,2252,2255],{"class":76,"line":1273},[74,2250,2251],{"class":84},"        num",[74,2253,2254],{"class":80},"++",[74,2256,1252],{"class":84},[74,2258,2259],{"class":76,"line":1279},[74,2260,2149],{"class":84},[74,2262,2263,2266,2268,2271],{"class":76,"line":1291},[74,2264,2265],{"class":1925},"    system",[74,2267,85],{"class":84},[74,2269,2270],{"class":190},"\"pause\"",[74,2272,91],{"class":84},[74,2274,2275],{"class":76,"line":1574},[74,2276,1527],{"class":84},[19,2278,2279],{},"注意：写好循环条件，避免死循环情况",[64,2281,2283],{"className":66,"code":2282,"language":68,"meta":69,"style":69},"\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",[71,2284,2285,2290,2297,2304,2314,2322,2326,2331,2358,2364,2369,2377,2404,2409,2414,2427,2437,2441,2451,2456,2469,2474,2488,2493,2508,2512,2525,2529,2534,2538,2552,2560,2565,2571,2577,2582],{"__ignoreMap":69},[74,2286,2287],{"class":76,"line":77},[74,2288,2289],{"class":144},"\u002F\u002F循环结构-猜数字\n",[74,2291,2292,2294],{"class":76,"line":94},[74,2293,1911],{"class":80},[74,2295,2296],{"class":190}," \u003Ciostream>\n",[74,2298,2299,2301],{"class":76,"line":1141},[74,2300,1911],{"class":80},[74,2302,2303],{"class":190}," \u003Cctime>\n",[74,2305,2306,2308,2310,2312],{"class":76,"line":1156},[74,2307,1919],{"class":80},[74,2309,1922],{"class":80},[74,2311,1926],{"class":1925},[74,2313,1252],{"class":84},[74,2315,2316,2318,2320],{"class":76,"line":1162},[74,2317,88],{"class":80},[74,2319,1935],{"class":1925},[74,2321,1938],{"class":84},[74,2323,2324],{"class":76,"line":1176},[74,2325,1508],{"class":84},[74,2327,2328],{"class":76,"line":1182},[74,2329,2330],{"class":144},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[74,2332,2333,2336,2339,2342,2345,2347,2350,2352,2355],{"class":76,"line":1273},[74,2334,2335],{"class":1925},"    srand",[74,2337,2338],{"class":84},"((",[74,2340,2341],{"class":80},"unsigned",[74,2343,2344],{"class":80}," int",[74,2346,515],{"class":84},[74,2348,2349],{"class":1925},"time",[74,2351,85],{"class":84},[74,2353,2354],{"class":134},"NULL",[74,2356,2357],{"class":84},"));\n",[74,2359,2360],{"class":76,"line":1279},[74,2361,2363],{"emptyLinePlaceholder":2362},true,"\n",[74,2365,2366],{"class":76,"line":1291},[74,2367,2368],{"class":144},"    \u002F\u002F1.系统生成随机数\n",[74,2370,2371,2374],{"class":76,"line":1574},[74,2372,2373],{"class":144},"    \u002F\u002Frand()%100",[74,2375,2376],{"class":144}," \u002F\u002F生成0-99的随机数\n",[74,2378,2379,2381,2383,2385,2388,2391,2393,2395,2397,2399,2401],{"class":76,"line":1579},[74,2380,1947],{"class":80},[74,2382,2202],{"class":84},[74,2384,131],{"class":80},[74,2386,2387],{"class":1925},"rand",[74,2389,2390],{"class":84},"()",[74,2392,414],{"class":80},[74,2394,397],{"class":134},[74,2396,567],{"class":80},[74,2398,303],{"class":134},[74,2400,141],{"class":84},[74,2402,2403],{"class":144}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[74,2405,2406],{"class":76,"line":1585},[74,2407,2408],{"class":144},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[74,2410,2411],{"class":76,"line":1590},[74,2412,2413],{"class":144},"    \u002F\u002F2.玩家猜测\n",[74,2415,2416,2418,2421,2423,2425],{"class":76,"line":1604},[74,2417,1947],{"class":80},[74,2419,2420],{"class":84}," val",[74,2422,131],{"class":80},[74,2424,277],{"class":134},[74,2426,1252],{"class":84},[74,2428,2429,2431,2433,2435],{"class":76,"line":1609},[74,2430,2213],{"class":80},[74,2432,1620],{"class":84},[74,2434,303],{"class":134},[74,2436,91],{"class":84},[74,2438,2439],{"class":76,"line":1615},[74,2440,1992],{"class":84},[74,2442,2443,2446,2448],{"class":76,"line":1636},[74,2444,2445],{"class":84},"        cin",[74,2447,1391],{"class":80},[74,2449,2450],{"class":84},"val;\n",[74,2452,2453],{"class":76,"line":1641},[74,2454,2455],{"class":144},"        \u002F\u002F3.判断玩家猜测\n",[74,2457,2458,2461,2464,2466],{"class":76,"line":1655},[74,2459,2460],{"class":80},"        if",[74,2462,2463],{"class":84},"(val",[74,2465,996],{"class":80},[74,2467,2468],{"class":84},"num) \n",[74,2470,2471],{"class":76,"line":1660},[74,2472,2473],{"class":84},"        {\n",[74,2475,2476,2479,2481,2484,2486],{"class":76,"line":1689},[74,2477,2478],{"class":84},"            cout",[74,2480,1130],{"class":80},[74,2482,2483],{"class":190},"\"猜小了！\"",[74,2485,1130],{"class":80},[74,2487,1153],{"class":84},[74,2489,2490],{"class":76,"line":1694},[74,2491,2492],{"class":84},"        }\n",[74,2494,2495,2498,2500,2503,2505],{"class":76,"line":1711},[74,2496,2497],{"class":80},"        else",[74,2499,1666],{"class":80},[74,2501,2502],{"class":84}," (val",[74,2504,1046],{"class":80},[74,2506,2507],{"class":84},"num)\n",[74,2509,2510],{"class":76,"line":1716},[74,2511,2473],{"class":84},[74,2513,2514,2516,2518,2521,2523],{"class":76,"line":1721},[74,2515,2478],{"class":84},[74,2517,1130],{"class":80},[74,2519,2520],{"class":190},"\"猜大了！\"",[74,2522,1130],{"class":80},[74,2524,1153],{"class":84},[74,2526,2527],{"class":76,"line":1726},[74,2528,2492],{"class":84},[74,2530,2531],{"class":76,"line":1740},[74,2532,2533],{"class":80},"        else\n",[74,2535,2536],{"class":76,"line":1745},[74,2537,2473],{"class":84},[74,2539,2541,2543,2545,2548,2550],{"class":76,"line":2540},30,[74,2542,2478],{"class":84},[74,2544,1130],{"class":80},[74,2546,2547],{"class":190},"\"猜对了！\"",[74,2549,1130],{"class":80},[74,2551,1153],{"class":84},[74,2553,2555,2558],{"class":76,"line":2554},31,[74,2556,2557],{"class":80},"            break",[74,2559,1252],{"class":84},[74,2561,2563],{"class":76,"line":2562},32,[74,2564,2492],{"class":84},[74,2566,2568],{"class":76,"line":2567},33,[74,2569,2570],{"class":144},"        \u002F\u002F猜对 退出游戏\n",[74,2572,2574],{"class":76,"line":2573},34,[74,2575,2576],{"class":144},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[74,2578,2580],{"class":76,"line":2579},35,[74,2581,2149],{"class":84},[74,2583,2585],{"class":76,"line":2584},36,[74,2586,1527],{"class":84},[27,2588,2589],{"start":94},[30,2590,2591,2592,2595],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[235,2593,2594],{},"do...while会先执行一次循环语句","，在判断循环语句",[64,2597,2599],{"className":66,"code":2598,"language":68,"meta":69,"style":69},"\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",[71,2600,2601,2606,2614,2618,2630,2638,2642,2659,2666,2670,2683,2693],{"__ignoreMap":69},[74,2602,2603],{"class":76,"line":77},[74,2604,2605],{"class":144},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[74,2607,2608,2610,2612],{"class":76,"line":94},[74,2609,88],{"class":80},[74,2611,1935],{"class":1925},[74,2613,1938],{"class":84},[74,2615,2616],{"class":76,"line":1141},[74,2617,1508],{"class":84},[74,2619,2620,2622,2624,2626,2628],{"class":76,"line":1156},[74,2621,1947],{"class":80},[74,2623,2202],{"class":84},[74,2625,131],{"class":80},[74,2627,277],{"class":134},[74,2629,1252],{"class":84},[74,2631,2632,2635],{"class":76,"line":1162},[74,2633,2634],{"class":80},"    do",[74,2636,2637],{"class":84}," \n",[74,2639,2640],{"class":76,"line":1176},[74,2641,1992],{"class":84},[74,2643,2644,2647,2649,2651,2653,2655,2657],{"class":76,"line":1182},[74,2645,2646],{"class":1925},"        std",[74,2648,2234],{"class":84},[74,2650,1130],{"class":80},[74,2652,1627],{"class":84},[74,2654,1130],{"class":80},[74,2656,2243],{"class":1925},[74,2658,2246],{"class":84},[74,2660,2661,2663],{"class":76,"line":1273},[74,2662,2251],{"class":84},[74,2664,2665],{"class":80},"++\n",[74,2667,2668],{"class":76,"line":1279},[74,2669,2149],{"class":84},[74,2671,2672,2674,2676,2678,2680],{"class":76,"line":1291},[74,2673,2213],{"class":80},[74,2675,2216],{"class":84},[74,2677,996],{"class":80},[74,2679,532],{"class":134},[74,2681,2682],{"class":84},");\n",[74,2684,2685,2687,2689,2691],{"class":76,"line":1574},[74,2686,2265],{"class":1925},[74,2688,85],{"class":84},[74,2690,2270],{"class":190},[74,2692,2682],{"class":84},[74,2694,2695],{"class":76,"line":1579},[74,2696,1527],{"class":84},[19,2698,2699],{},"案例-水仙花数",[19,2701,2702],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,2704,2705],{},"例如：1^3+5^3+3^3=153",[19,2707,2708],{},"请用do...while语句，求出所有3位数的水仙花数",[64,2710,2712],{"className":66,"code":2711,"language":68,"meta":69,"style":69},"#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",[71,2713,2714,2720,2730,2738,2742,2747,2759,2765,2769,2774,2790,2806,2822,2837,2856,2871,2919,2923,2935,2939,2947,2951,2965],{"__ignoreMap":69},[74,2715,2716,2718],{"class":76,"line":77},[74,2717,1911],{"class":80},[74,2719,2296],{"class":190},[74,2721,2722,2724,2726,2728],{"class":76,"line":94},[74,2723,1919],{"class":80},[74,2725,1922],{"class":80},[74,2727,1926],{"class":1925},[74,2729,1252],{"class":84},[74,2731,2732,2734,2736],{"class":76,"line":1141},[74,2733,88],{"class":80},[74,2735,1935],{"class":1925},[74,2737,1938],{"class":84},[74,2739,2740],{"class":76,"line":1156},[74,2741,1508],{"class":84},[74,2743,2744],{"class":76,"line":1162},[74,2745,2746],{"class":144},"    \u002F\u002F1.先打印所有三位数字\n",[74,2748,2749,2751,2753,2755,2757],{"class":76,"line":1176},[74,2750,1947],{"class":80},[74,2752,2202],{"class":84},[74,2754,131],{"class":80},[74,2756,397],{"class":134},[74,2758,1252],{"class":84},[74,2760,2761,2763],{"class":76,"line":1182},[74,2762,2634],{"class":80},[74,2764,2637],{"class":84},[74,2766,2767],{"class":76,"line":1273},[74,2768,1992],{"class":84},[74,2770,2771],{"class":76,"line":1279},[74,2772,2773],{"class":144},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[74,2775,2776,2779,2781,2783,2785,2787],{"class":76,"line":1291},[74,2777,2778],{"class":80},"        int",[74,2780,1360],{"class":84},[74,2782,131],{"class":80},[74,2784,277],{"class":134},[74,2786,141],{"class":84},[74,2788,2789],{"class":144}," \u002F\u002F个位\n",[74,2791,2792,2794,2797,2799,2801,2803],{"class":76,"line":1574},[74,2793,2778],{"class":80},[74,2795,2796],{"class":84}," b",[74,2798,131],{"class":80},[74,2800,277],{"class":134},[74,2802,141],{"class":84},[74,2804,2805],{"class":144}," \u002F\u002F十位\n",[74,2807,2808,2810,2813,2815,2817,2819],{"class":76,"line":1579},[74,2809,2778],{"class":80},[74,2811,2812],{"class":84}," c",[74,2814,131],{"class":80},[74,2816,277],{"class":134},[74,2818,141],{"class":84},[74,2820,2821],{"class":144}," \u002F\u002F百位\n",[74,2823,2824,2827,2829,2831,2833,2835],{"class":76,"line":1585},[74,2825,2826],{"class":84},"        a",[74,2828,131],{"class":80},[74,2830,1627],{"class":84},[74,2832,414],{"class":80},[74,2834,532],{"class":134},[74,2836,1252],{"class":84},[74,2838,2839,2842,2844,2846,2848,2850,2852,2854],{"class":76,"line":1590},[74,2840,2841],{"class":84},"        b",[74,2843,131],{"class":80},[74,2845,1627],{"class":84},[74,2847,670],{"class":80},[74,2849,532],{"class":134},[74,2851,414],{"class":80},[74,2853,532],{"class":134},[74,2855,1252],{"class":84},[74,2857,2858,2861,2863,2865,2867,2869],{"class":76,"line":1604},[74,2859,2860],{"class":84},"        c",[74,2862,131],{"class":80},[74,2864,1627],{"class":84},[74,2866,670],{"class":80},[74,2868,397],{"class":134},[74,2870,1252],{"class":84},[74,2872,2873,2875,2877,2879,2881,2883,2885,2887,2889,2891,2893,2895,2897,2899,2901,2903,2905,2907,2910,2913,2916],{"class":76,"line":1609},[74,2874,2460],{"class":80},[74,2876,1803],{"class":84},[74,2878,541],{"class":80},[74,2880,324],{"class":84},[74,2882,541],{"class":80},[74,2884,324],{"class":84},[74,2886,567],{"class":80},[74,2888,349],{"class":84},[74,2890,541],{"class":80},[74,2892,349],{"class":84},[74,2894,541],{"class":80},[74,2896,349],{"class":84},[74,2898,567],{"class":80},[74,2900,374],{"class":84},[74,2902,541],{"class":80},[74,2904,374],{"class":84},[74,2906,541],{"class":80},[74,2908,2909],{"class":84},"c ",[74,2911,2912],{"class":80},"==",[74,2914,2915],{"class":84}," num)",[74,2917,2918],{"class":144}," \u002F\u002F如果是水仙花数，才打印\n",[74,2920,2921],{"class":76,"line":1615},[74,2922,2473],{"class":84},[74,2924,2925,2927,2929,2931,2933],{"class":76,"line":1636},[74,2926,2478],{"class":84},[74,2928,1130],{"class":80},[74,2930,1627],{"class":84},[74,2932,1130],{"class":80},[74,2934,1153],{"class":84},[74,2936,2937],{"class":76,"line":1641},[74,2938,2492],{"class":84},[74,2940,2941,2943,2945],{"class":76,"line":1655},[74,2942,2251],{"class":84},[74,2944,2254],{"class":80},[74,2946,1252],{"class":84},[74,2948,2949],{"class":76,"line":1660},[74,2950,2149],{"class":84},[74,2952,2953,2955,2958,2960,2963],{"class":76,"line":1689},[74,2954,2213],{"class":80},[74,2956,2957],{"class":84}," (num ",[74,2959,996],{"class":80},[74,2961,2962],{"class":134}," 1000",[74,2964,2682],{"class":84},[74,2966,2967],{"class":76,"line":1694},[74,2968,1527],{"class":84},[27,2970,2971],{"start":1141},[30,2972,2973],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[64,2975,2977],{"className":66,"code":2976,"language":68,"meta":69,"style":69},"\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",[71,2978,2979,2984,3013,3017,3029,3033,3038,3049,3056,3060,3074,3078,3085,3089,3101,3110],{"__ignoreMap":69},[74,2980,2981],{"class":76,"line":77},[74,2982,2983],{"class":144},"\u002F\u002F从数字0-9打印\n",[74,2985,2986,2989,2991,2993,2996,2998,3000,3003,3005,3007,3009,3011],{"class":76,"line":94},[74,2987,2988],{"class":80},"for",[74,2990,85],{"class":84},[74,2992,88],{"class":80},[74,2994,2995],{"class":84}," i",[74,2997,131],{"class":80},[74,2999,277],{"class":134},[74,3001,3002],{"class":84},";i",[74,3004,996],{"class":80},[74,3006,532],{"class":134},[74,3008,3002],{"class":84},[74,3010,2254],{"class":80},[74,3012,91],{"class":84},[74,3014,3015],{"class":76,"line":1141},[74,3016,1508],{"class":84},[74,3018,3019,3021,3023,3025,3027],{"class":76,"line":1156},[74,3020,1513],{"class":84},[74,3022,1130],{"class":80},[74,3024,527],{"class":84},[74,3026,1130],{"class":80},[74,3028,1153],{"class":84},[74,3030,3031],{"class":76,"line":1162},[74,3032,1527],{"class":84},[74,3034,3035],{"class":76,"line":1176},[74,3036,3037],{"class":144},"\u002F\u002F上式可以进行拆分\n",[74,3039,3040,3042,3044,3046],{"class":76,"line":1182},[74,3041,88],{"class":80},[74,3043,2995],{"class":84},[74,3045,131],{"class":80},[74,3047,3048],{"class":134},"0\n",[74,3050,3051,3053],{"class":76,"line":1273},[74,3052,2988],{"class":80},[74,3054,3055],{"class":84},"(;;;)\n",[74,3057,3058],{"class":76,"line":1279},[74,3059,1508],{"class":84},[74,3061,3062,3065,3068,3070,3072],{"class":76,"line":1291},[74,3063,3064],{"class":80},"    if",[74,3066,3067],{"class":84},"(i",[74,3069,1672],{"class":80},[74,3071,532],{"class":134},[74,3073,91],{"class":84},[74,3075,3076],{"class":76,"line":1574},[74,3077,1992],{"class":84},[74,3079,3080,3083],{"class":76,"line":1579},[74,3081,3082],{"class":80},"        break",[74,3084,1252],{"class":84},[74,3086,3087],{"class":76,"line":1585},[74,3088,2149],{"class":84},[74,3090,3091,3093,3095,3097,3099],{"class":76,"line":1590},[74,3092,1513],{"class":84},[74,3094,1130],{"class":80},[74,3096,527],{"class":84},[74,3098,1130],{"class":80},[74,3100,1153],{"class":84},[74,3102,3103,3106,3108],{"class":76,"line":1604},[74,3104,3105],{"class":84},"    i",[74,3107,2254],{"class":80},[74,3109,1252],{"class":84},[74,3111,3112],{"class":76,"line":1609},[74,3113,1527],{"class":84},[19,3115,3116],{},"小练习",[64,3118,3120],{"className":66,"code":3119,"language":68,"meta":69,"style":69},"#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",[71,3121,3122,3128,3138,3146,3150,3155,3160,3188,3192,3197,3202,3243,3247,3260,3264,3268,3272,3284,3288,3292],{"__ignoreMap":69},[74,3123,3124,3126],{"class":76,"line":77},[74,3125,1911],{"class":80},[74,3127,1914],{"class":190},[74,3129,3130,3132,3134,3136],{"class":76,"line":94},[74,3131,1919],{"class":80},[74,3133,1922],{"class":80},[74,3135,1926],{"class":1925},[74,3137,1252],{"class":84},[74,3139,3140,3142,3144],{"class":76,"line":1141},[74,3141,88],{"class":80},[74,3143,1935],{"class":1925},[74,3145,1938],{"class":84},[74,3147,3148],{"class":76,"line":1156},[74,3149,1508],{"class":84},[74,3151,3152],{"class":76,"line":1162},[74,3153,3154],{"class":144},"    \u002F\u002F敲桌子案例\n",[74,3156,3157],{"class":76,"line":1176},[74,3158,3159],{"class":144},"    \u002F\u002F1.先输出1-100的数字\n",[74,3161,3162,3165,3167,3169,3171,3173,3175,3178,3180,3182,3184,3186],{"class":76,"line":1182},[74,3163,3164],{"class":80},"    for",[74,3166,85],{"class":84},[74,3168,88],{"class":80},[74,3170,2995],{"class":84},[74,3172,131],{"class":80},[74,3174,303],{"class":134},[74,3176,3177],{"class":84},"; i",[74,3179,1550],{"class":80},[74,3181,397],{"class":134},[74,3183,3177],{"class":84},[74,3185,2254],{"class":80},[74,3187,91],{"class":84},[74,3189,3190],{"class":76,"line":1273},[74,3191,1992],{"class":84},[74,3193,3194],{"class":76,"line":1279},[74,3195,3196],{"class":144},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[74,3198,3199],{"class":76,"line":1291},[74,3200,3201],{"class":144},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[74,3203,3204,3206,3208,3210,3212,3214,3216,3219,3221,3223,3225,3227,3229,3231,3233,3235,3237,3239,3241],{"class":76,"line":1574},[74,3205,2460],{"class":80},[74,3207,3067],{"class":84},[74,3209,414],{"class":80},[74,3211,455],{"class":134},[74,3213,2912],{"class":80},[74,3215,277],{"class":134},[74,3217,3218],{"class":80}," ||",[74,3220,2995],{"class":84},[74,3222,414],{"class":80},[74,3224,532],{"class":134},[74,3226,2912],{"class":80},[74,3228,455],{"class":134},[74,3230,3218],{"class":80},[74,3232,2995],{"class":84},[74,3234,670],{"class":80},[74,3236,532],{"class":134},[74,3238,2912],{"class":80},[74,3240,455],{"class":134},[74,3242,91],{"class":84},[74,3244,3245],{"class":76,"line":1579},[74,3246,2473],{"class":84},[74,3248,3249,3251,3253,3256,3258],{"class":76,"line":1585},[74,3250,2478],{"class":84},[74,3252,1130],{"class":80},[74,3254,3255],{"class":190},"\"敲桌子\"",[74,3257,1130],{"class":80},[74,3259,1153],{"class":84},[74,3261,3262],{"class":76,"line":1590},[74,3263,2492],{"class":84},[74,3265,3266],{"class":76,"line":1604},[74,3267,2533],{"class":80},[74,3269,3270],{"class":76,"line":1609},[74,3271,2473],{"class":84},[74,3273,3274,3276,3278,3280,3282],{"class":76,"line":1615},[74,3275,2478],{"class":84},[74,3277,1130],{"class":80},[74,3279,527],{"class":84},[74,3281,1130],{"class":80},[74,3283,1153],{"class":84},[74,3285,3286],{"class":76,"line":1636},[74,3287,2492],{"class":84},[74,3289,3290],{"class":76,"line":1641},[74,3291,2149],{"class":84},[74,3293,3294],{"class":76,"line":1655},[74,3295,1527],{"class":84},[19,3297,3298],{},"嵌套实现星图",[64,3300,3302],{"className":66,"code":3301,"language":68,"meta":69,"style":69},"#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",[71,3303,3304,3310,3320,3328,3332,3358,3362,3391,3395,3406,3410,3419,3423],{"__ignoreMap":69},[74,3305,3306,3308],{"class":76,"line":77},[74,3307,1911],{"class":80},[74,3309,1914],{"class":190},[74,3311,3312,3314,3316,3318],{"class":76,"line":94},[74,3313,1919],{"class":80},[74,3315,1922],{"class":80},[74,3317,1926],{"class":1925},[74,3319,1252],{"class":84},[74,3321,3322,3324,3326],{"class":76,"line":1141},[74,3323,88],{"class":80},[74,3325,1935],{"class":1925},[74,3327,1938],{"class":84},[74,3329,3330],{"class":76,"line":1156},[74,3331,1508],{"class":84},[74,3333,3334,3336,3338,3340,3342,3344,3346,3348,3350,3352,3354,3356],{"class":76,"line":1162},[74,3335,3164],{"class":80},[74,3337,1620],{"class":84},[74,3339,88],{"class":80},[74,3341,2995],{"class":84},[74,3343,131],{"class":80},[74,3345,277],{"class":134},[74,3347,3002],{"class":84},[74,3349,996],{"class":80},[74,3351,532],{"class":134},[74,3353,3002],{"class":84},[74,3355,2254],{"class":80},[74,3357,91],{"class":84},[74,3359,3360],{"class":76,"line":1176},[74,3361,1992],{"class":84},[74,3363,3364,3367,3369,3371,3374,3376,3378,3381,3383,3385,3387,3389],{"class":76,"line":1182},[74,3365,3366],{"class":80},"        for",[74,3368,1620],{"class":84},[74,3370,88],{"class":80},[74,3372,3373],{"class":84}," j",[74,3375,131],{"class":80},[74,3377,277],{"class":134},[74,3379,3380],{"class":84},";j",[74,3382,996],{"class":80},[74,3384,532],{"class":134},[74,3386,3380],{"class":84},[74,3388,2254],{"class":80},[74,3390,91],{"class":84},[74,3392,3393],{"class":76,"line":1273},[74,3394,2473],{"class":84},[74,3396,3397,3399,3401,3404],{"class":76,"line":1279},[74,3398,2478],{"class":84},[74,3400,1130],{"class":80},[74,3402,3403],{"class":190},"\"*\"",[74,3405,1252],{"class":84},[74,3407,3408],{"class":76,"line":1291},[74,3409,2492],{"class":84},[74,3411,3412,3415,3417],{"class":76,"line":1574},[74,3413,3414],{"class":84},"        cout",[74,3416,1130],{"class":80},[74,3418,1153],{"class":84},[74,3420,3421],{"class":76,"line":1579},[74,3422,2149],{"class":84},[74,3424,3425],{"class":76,"line":1585},[74,3426,1527],{"class":84},[19,3428,3429],{},"乘法口诀表",[64,3431,3433],{"className":66,"code":3432,"language":68,"meta":69,"style":69},"#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",[71,3434,3435,3441,3451,3459,3463,3489,3493,3518,3522,3562,3566,3574,3578],{"__ignoreMap":69},[74,3436,3437,3439],{"class":76,"line":77},[74,3438,1911],{"class":80},[74,3440,2296],{"class":190},[74,3442,3443,3445,3447,3449],{"class":76,"line":94},[74,3444,1919],{"class":80},[74,3446,1922],{"class":80},[74,3448,1926],{"class":1925},[74,3450,1252],{"class":84},[74,3452,3453,3455,3457],{"class":76,"line":1141},[74,3454,88],{"class":80},[74,3456,1935],{"class":1925},[74,3458,1938],{"class":84},[74,3460,3461],{"class":76,"line":1156},[74,3462,1508],{"class":84},[74,3464,3465,3467,3469,3471,3473,3475,3477,3479,3481,3483,3485,3487],{"class":76,"line":1162},[74,3466,3164],{"class":80},[74,3468,85],{"class":84},[74,3470,88],{"class":80},[74,3472,2995],{"class":84},[74,3474,131],{"class":80},[74,3476,303],{"class":134},[74,3478,3002],{"class":84},[74,3480,996],{"class":80},[74,3482,532],{"class":134},[74,3484,3002],{"class":84},[74,3486,2254],{"class":80},[74,3488,91],{"class":84},[74,3490,3491],{"class":76,"line":1176},[74,3492,1992],{"class":84},[74,3494,3495,3497,3499,3501,3503,3505,3507,3509,3511,3514,3516],{"class":76,"line":1182},[74,3496,3366],{"class":80},[74,3498,85],{"class":84},[74,3500,88],{"class":80},[74,3502,3373],{"class":84},[74,3504,131],{"class":80},[74,3506,303],{"class":134},[74,3508,3380],{"class":84},[74,3510,1550],{"class":80},[74,3512,3513],{"class":84},"i;j",[74,3515,2254],{"class":80},[74,3517,91],{"class":84},[74,3519,3520],{"class":76,"line":1273},[74,3521,2473],{"class":84},[74,3523,3524,3526,3528,3530,3532,3534,3536,3538,3540,3543,3545,3547,3549,3551,3553,3556,3558,3560],{"class":76,"line":1279},[74,3525,2478],{"class":84},[74,3527,1130],{"class":80},[74,3529,553],{"class":84},[74,3531,1130],{"class":80},[74,3533,3403],{"class":190},[74,3535,1130],{"class":80},[74,3537,527],{"class":84},[74,3539,1130],{"class":80},[74,3541,3542],{"class":190},"\"=\"",[74,3544,1130],{"class":80},[74,3546,527],{"class":84},[74,3548,541],{"class":80},[74,3550,553],{"class":84},[74,3552,1130],{"class":80},[74,3554,3555],{"class":190},"'",[74,3557,1192],{"class":134},[74,3559,3555],{"class":190},[74,3561,1252],{"class":84},[74,3563,3564],{"class":76,"line":1291},[74,3565,2492],{"class":84},[74,3567,3568,3570,3572],{"class":76,"line":1574},[74,3569,3414],{"class":84},[74,3571,1130],{"class":80},[74,3573,1153],{"class":84},[74,3575,3576],{"class":76,"line":1579},[74,3577,2149],{"class":84},[74,3579,3580],{"class":76,"line":1585},[74,3581,1527],{"class":84},[44,3583,3585],{"id":3584},"_163跳出语句","1.6.3跳出语句",[27,3587,3588],{},[30,3589,3590],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,3592,3593],{},"break使用时机：",[1093,3595,3596,3599,3602],{},[30,3597,3598],{},"出现在switch条件语句中，作用是终止case并跳出switch",[30,3600,3601],{},"出现在循环结构中，作用是跳出当前的循环结构",[30,3603,3604],{},"出现在嵌套循环中，跳出最近的内层循环语句",[27,3606,3607,3610],{"start":94},[30,3608,3609],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[30,3611,3612],{},"goto语句\n语法：goto 标记;",[19,3614,3615],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[64,3617,3619],{"className":66,"code":3618,"language":68,"meta":69,"style":69},"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",[71,3620,3621,3629,3633,3646,3656,3669,3682,3695,3703,3719],{"__ignoreMap":69},[74,3622,3623,3625,3627],{"class":76,"line":77},[74,3624,88],{"class":80},[74,3626,1935],{"class":1925},[74,3628,1938],{"class":84},[74,3630,3631],{"class":76,"line":94},[74,3632,1508],{"class":84},[74,3634,3635,3637,3639,3642,3644],{"class":76,"line":1141},[74,3636,1513],{"class":84},[74,3638,1130],{"class":80},[74,3640,3641],{"class":190},"\"1\"",[74,3643,1130],{"class":80},[74,3645,1153],{"class":84},[74,3647,3648,3651,3654],{"class":76,"line":1156},[74,3649,3650],{"class":80},"    goto",[74,3652,3653],{"class":1925}," FLAG",[74,3655,1252],{"class":84},[74,3657,3658,3660,3662,3665,3667],{"class":76,"line":1162},[74,3659,1513],{"class":84},[74,3661,1130],{"class":80},[74,3663,3664],{"class":190},"\"2\"",[74,3666,1130],{"class":80},[74,3668,1153],{"class":84},[74,3670,3671,3673,3675,3678,3680],{"class":76,"line":1176},[74,3672,1513],{"class":84},[74,3674,1130],{"class":80},[74,3676,3677],{"class":190},"\"3\"",[74,3679,1130],{"class":80},[74,3681,1153],{"class":84},[74,3683,3684,3686,3688,3691,3693],{"class":76,"line":1182},[74,3685,1513],{"class":84},[74,3687,1130],{"class":80},[74,3689,3690],{"class":190},"\"4\"",[74,3692,1130],{"class":80},[74,3694,1153],{"class":84},[74,3696,3697,3700],{"class":76,"line":1273},[74,3698,3699],{"class":1925},"    FLAG",[74,3701,3702],{"class":84},":\n",[74,3704,3705,3707,3709,3712,3714,3716],{"class":76,"line":1279},[74,3706,1513],{"class":84},[74,3708,1130],{"class":80},[74,3710,3711],{"class":190},"\"5\"",[74,3713,1130],{"class":80},[74,3715,1200],{"class":84},[74,3717,3718],{"class":144},"\u002F\u002F跳过了2,3,4,直接到5\n",[74,3720,3721],{"class":76,"line":1291},[74,3722,1527],{"class":84},[14,3724,3726],{"id":3725},"_17数组","1.7数组",[44,3728,3730],{"id":3729},"_171一维数组","1.7.1一维数组",[27,3732,3733],{},[30,3734,3735],{},"一维数组定义方式",[223,3737,3738,3748],{},[226,3739,3740],{},[229,3741,3742,3745],{},[232,3743,3744],{},"方式",[232,3746,3747],{},"注意事项",[270,3749,3750,3764,3774],{},[229,3751,3752,3758],{},[275,3753,3754,3755,141],{},"数据类型 数组名",[74,3756,3757],{},"数组长度",[275,3759,3760,3761,3763],{},"这种方式是先定义再arr",[74,3762,527],{},"赋值",[229,3765,3766,3771],{},[275,3767,3754,3768,3770],{},[74,3769,3757],{},"={值1,值2....};",[275,3772,3773],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[229,3775,3776,3780],{},[275,3777,3754,3778,3770],{},[74,3779],{},[275,3781,3782,3783,3785],{},"int arr",[74,3784],{},";这是不正确的，按照这样的方式定义必须有初始长度",[27,3787,3788],{"start":94},[30,3789,3790],{},"一维数组数组名\n用途：",[1093,3792,3793],{},[30,3794,3795],{},"1.可以统计整个数组在内存中的长度：",[64,3797,3799],{"className":66,"code":3798,"language":68,"meta":69,"style":69},"sizeof(arr);\nsizeof(arr[0]);\n",[71,3800,3801,3808],{"__ignoreMap":69},[74,3802,3803,3805],{"class":76,"line":77},[74,3804,81],{"class":80},[74,3806,3807],{"class":84},"(arr);\n",[74,3809,3810,3812,3815,3817],{"class":76,"line":94},[74,3811,81],{"class":80},[74,3813,3814],{"class":84},"(arr[",[74,3816,277],{"class":134},[74,3818,3819],{"class":84},"]);\n",[1093,3821,3822],{},[30,3823,3824],{},"2.可以获取数组在内存中的首地址:",[64,3826,3828],{"className":66,"code":3827,"language":68,"meta":69,"style":69},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[71,3829,3830,3835,3848,3853],{"__ignoreMap":69},[74,3831,3832],{"class":76,"line":77},[74,3833,3834],{"class":144},"\u002F\u002F查看16进制的首地址\n",[74,3836,3837,3839,3841,3844,3846],{"class":76,"line":94},[74,3838,1331],{"class":84},[74,3840,1130],{"class":80},[74,3842,3843],{"class":84},"arr",[74,3845,1130],{"class":80},[74,3847,1153],{"class":84},[74,3849,3850],{"class":76,"line":1141},[74,3851,3852],{"class":144},"\u002F\u002F看10进制数\n",[74,3854,3855,3857,3859,3861,3863,3865,3867,3870,3872,3874,3876],{"class":76,"line":1156},[74,3856,1331],{"class":84},[74,3858,1130],{"class":80},[74,3860,85],{"class":84},[74,3862,88],{"class":80},[74,3864,515],{"class":84},[74,3866,439],{"class":80},[74,3868,3869],{"class":84},"arr[",[74,3871,277],{"class":134},[74,3873,1026],{"class":84},[74,3875,1130],{"class":80},[74,3877,1153],{"class":84},[19,3879,3880],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1093,3882,3883],{},[30,3884,3885],{},"1️⃣五只小猪称体重",[64,3887,3889],{"className":66,"code":3888,"language":68,"meta":69,"style":69},"#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",[71,3890,3891,3897,3907,3915,3919,3959,3972,3998,4002,4014,4018,4028,4032,4036,4049,4059],{"__ignoreMap":69},[74,3892,3893,3895],{"class":76,"line":77},[74,3894,1911],{"class":80},[74,3896,1914],{"class":190},[74,3898,3899,3901,3903,3905],{"class":76,"line":94},[74,3900,1919],{"class":80},[74,3902,1922],{"class":80},[74,3904,1926],{"class":1925},[74,3906,1252],{"class":84},[74,3908,3909,3911,3913],{"class":76,"line":1141},[74,3910,88],{"class":80},[74,3912,1935],{"class":1925},[74,3914,1938],{"class":84},[74,3916,3917],{"class":76,"line":1156},[74,3918,1508],{"class":84},[74,3920,3921,3923,3926,3928,3930,3932,3934,3937,3939,3942,3944,3946,3948,3951,3953,3956],{"class":76,"line":1162},[74,3922,1947],{"class":80},[74,3924,3925],{"class":84}," arr[",[74,3927,405],{"class":134},[74,3929,1026],{"class":84},[74,3931,131],{"class":80},[74,3933,982],{"class":84},[74,3935,3936],{"class":134},"300",[74,3938,464],{"class":84},[74,3940,3941],{"class":134},"350",[74,3943,464],{"class":84},[74,3945,1684],{"class":134},[74,3947,464],{"class":84},[74,3949,3950],{"class":134},"400",[74,3952,464],{"class":84},[74,3954,3955],{"class":134},"250",[74,3957,3958],{"class":84},"};\n",[74,3960,3961,3963,3966,3968,3970],{"class":76,"line":1176},[74,3962,1947],{"class":80},[74,3964,3965],{"class":84}," tmp",[74,3967,131],{"class":80},[74,3969,277],{"class":134},[74,3971,1252],{"class":84},[74,3973,3974,3976,3978,3980,3982,3984,3986,3988,3990,3992,3994,3996],{"class":76,"line":1182},[74,3975,3164],{"class":80},[74,3977,1620],{"class":84},[74,3979,88],{"class":80},[74,3981,2995],{"class":84},[74,3983,131],{"class":80},[74,3985,277],{"class":134},[74,3987,3002],{"class":84},[74,3989,996],{"class":80},[74,3991,405],{"class":134},[74,3993,3002],{"class":84},[74,3995,2254],{"class":80},[74,3997,91],{"class":84},[74,3999,4000],{"class":76,"line":1273},[74,4001,1992],{"class":84},[74,4003,4004,4006,4009,4011],{"class":76,"line":1279},[74,4005,2460],{"class":80},[74,4007,4008],{"class":84},"(tmp",[74,4010,996],{"class":80},[74,4012,4013],{"class":84},"arr[i])\n",[74,4015,4016],{"class":76,"line":1291},[74,4017,2473],{"class":84},[74,4019,4020,4023,4025],{"class":76,"line":1574},[74,4021,4022],{"class":84},"            tmp",[74,4024,131],{"class":80},[74,4026,4027],{"class":84},"arr[i];\n",[74,4029,4030],{"class":76,"line":1579},[74,4031,2492],{"class":84},[74,4033,4034],{"class":76,"line":1585},[74,4035,2149],{"class":84},[74,4037,4038,4040,4042,4045,4047],{"class":76,"line":1590},[74,4039,1513],{"class":84},[74,4041,1130],{"class":80},[74,4043,4044],{"class":84},"tmp",[74,4046,1130],{"class":80},[74,4048,1153],{"class":84},[74,4050,4051,4054,4057],{"class":76,"line":1604},[74,4052,4053],{"class":80},"    return",[74,4055,4056],{"class":134}," 0",[74,4058,1252],{"class":84},[74,4060,4061],{"class":76,"line":1609},[74,4062,1527],{"class":84},[1093,4064,4065],{},[30,4066,4067],{},"2️⃣数组元素逆置",[64,4069,4071],{"className":66,"code":4070,"language":68,"meta":69,"style":69},"\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",[71,4072,4073,4078,4084,4094,4102,4106,4141,4157,4189,4202,4207,4212,4224,4234,4244,4249,4258,4268,4273,4278,4305,4309,4325,4329,4340,4349],{"__ignoreMap":69},[74,4074,4075],{"class":76,"line":77},[74,4076,4077],{"class":144},"\u002F\u002F元素逆置\n",[74,4079,4080,4082],{"class":76,"line":94},[74,4081,1911],{"class":80},[74,4083,1914],{"class":190},[74,4085,4086,4088,4090,4092],{"class":76,"line":1141},[74,4087,1919],{"class":80},[74,4089,1922],{"class":80},[74,4091,1926],{"class":1925},[74,4093,1252],{"class":84},[74,4095,4096,4098,4100],{"class":76,"line":1156},[74,4097,88],{"class":80},[74,4099,1935],{"class":1925},[74,4101,1938],{"class":84},[74,4103,4104],{"class":76,"line":1162},[74,4105,1508],{"class":84},[74,4107,4108,4111,4113,4115,4117,4119,4121,4123,4125,4127,4129,4131,4133,4135,4137,4139],{"class":76,"line":1176},[74,4109,4110],{"class":80},"   int",[74,4112,3925],{"class":84},[74,4114,405],{"class":134},[74,4116,1026],{"class":84},[74,4118,131],{"class":80},[74,4120,982],{"class":84},[74,4122,303],{"class":134},[74,4124,464],{"class":84},[74,4126,163],{"class":134},[74,4128,464],{"class":84},[74,4130,157],{"class":134},[74,4132,464],{"class":84},[74,4134,379],{"class":134},[74,4136,464],{"class":84},[74,4138,405],{"class":134},[74,4140,3958],{"class":84},[74,4142,4143,4145,4148,4150,4152,4154],{"class":76,"line":1182},[74,4144,4110],{"class":80},[74,4146,4147],{"class":84}," start",[74,4149,131],{"class":80},[74,4151,277],{"class":134},[74,4153,141],{"class":84},[74,4155,4156],{"class":144},"\u002F\u002F起始下标\n",[74,4158,4159,4161,4164,4167,4170,4173,4175,4177,4180,4182,4184,4186],{"class":76,"line":1273},[74,4160,4110],{"class":80},[74,4162,4163],{"class":84}," end",[74,4165,4166],{"class":80},"=sizeof",[74,4168,4169],{"class":84},"(arr)",[74,4171,4172],{"class":80},"\u002Fsizeof",[74,4174,3814],{"class":84},[74,4176,277],{"class":134},[74,4178,4179],{"class":84},"])",[74,4181,618],{"class":80},[74,4183,303],{"class":134},[74,4185,141],{"class":84},[74,4187,4188],{"class":144},"\u002F\u002F结束下标\n",[74,4190,4191,4194,4197,4199],{"class":76,"line":1279},[74,4192,4193],{"class":80},"   while",[74,4195,4196],{"class":84}," (start",[74,4198,996],{"class":80},[74,4200,4201],{"class":84},"end)\n",[74,4203,4204],{"class":76,"line":1291},[74,4205,4206],{"class":84},"   {\n",[74,4208,4209],{"class":76,"line":1574},[74,4210,4211],{"class":144},"    \u002F\u002F实现元素互换代码\n",[74,4213,4214,4216,4219,4221],{"class":76,"line":1579},[74,4215,1947],{"class":80},[74,4217,4218],{"class":84}," temp",[74,4220,131],{"class":80},[74,4222,4223],{"class":84},"arr[start];\n",[74,4225,4226,4229,4231],{"class":76,"line":1585},[74,4227,4228],{"class":84},"    arr[start]",[74,4230,131],{"class":80},[74,4232,4233],{"class":84},"arr[end];\n",[74,4235,4236,4239,4241],{"class":76,"line":1590},[74,4237,4238],{"class":84},"    arr[end]",[74,4240,131],{"class":80},[74,4242,4243],{"class":84},"temp;\n",[74,4245,4246],{"class":76,"line":1604},[74,4247,4248],{"class":144},"    \u002F\u002F下标更新\n",[74,4250,4251,4254,4256],{"class":76,"line":1609},[74,4252,4253],{"class":84},"    start",[74,4255,2254],{"class":80},[74,4257,1252],{"class":84},[74,4259,4260,4263,4266],{"class":76,"line":1615},[74,4261,4262],{"class":84},"    end",[74,4264,4265],{"class":80},"--",[74,4267,1252],{"class":84},[74,4269,4270],{"class":76,"line":1636},[74,4271,4272],{"class":84},"   }\n",[74,4274,4275],{"class":76,"line":1641},[74,4276,4277],{"class":144},"   \u002F\u002F输出逆置后的数组\n",[74,4279,4280,4283,4285,4287,4289,4291,4293,4295,4297,4299,4301,4303],{"class":76,"line":1655},[74,4281,4282],{"class":80},"   for",[74,4284,1620],{"class":84},[74,4286,88],{"class":80},[74,4288,2995],{"class":84},[74,4290,131],{"class":80},[74,4292,277],{"class":134},[74,4294,3002],{"class":84},[74,4296,996],{"class":80},[74,4298,405],{"class":134},[74,4300,3002],{"class":84},[74,4302,2254],{"class":80},[74,4304,91],{"class":84},[74,4306,4307],{"class":76,"line":1660},[74,4308,4206],{"class":84},[74,4310,4311,4313,4315,4318,4320,4323],{"class":76,"line":1689},[74,4312,1513],{"class":84},[74,4314,1130],{"class":80},[74,4316,4317],{"class":84},"arr[i]",[74,4319,1130],{"class":80},[74,4321,4322],{"class":190},"\" \"",[74,4324,1252],{"class":84},[74,4326,4327],{"class":76,"line":1694},[74,4328,4272],{"class":84},[74,4330,4331,4334,4336,4338],{"class":76,"line":1711},[74,4332,4333],{"class":1925},"   system",[74,4335,85],{"class":84},[74,4337,2270],{"class":190},[74,4339,2682],{"class":84},[74,4341,4342,4345,4347],{"class":76,"line":1716},[74,4343,4344],{"class":80},"   return",[74,4346,4056],{"class":134},[74,4348,1252],{"class":84},[74,4350,4351],{"class":76,"line":1721},[74,4352,1527],{"class":84},[1093,4354,4355],{},[30,4356,4357],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[64,4359,4361],{"className":66,"code":4360,"language":68,"meta":69,"style":69},"\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",[71,4362,4363,4368,4374,4384,4392,4396,4448,4461,4487,4491,4505,4509,4514,4519,4549,4553,4558,4592,4596,4601,4621,4626,4638,4654,4669,4674,4678,4682,4695,4721,4725,4739,4743,4751],{"__ignoreMap":69},[74,4364,4365],{"class":76,"line":77},[74,4366,4367],{"class":144},"\u002F\u002F冒泡排序,升序\n",[74,4369,4370,4372],{"class":76,"line":94},[74,4371,1911],{"class":80},[74,4373,1914],{"class":190},[74,4375,4376,4378,4380,4382],{"class":76,"line":1141},[74,4377,1919],{"class":80},[74,4379,1922],{"class":80},[74,4381,1926],{"class":1925},[74,4383,1252],{"class":84},[74,4385,4386,4388,4390],{"class":76,"line":1156},[74,4387,88],{"class":80},[74,4389,1935],{"class":1925},[74,4391,1938],{"class":84},[74,4393,4394],{"class":76,"line":1162},[74,4395,1508],{"class":84},[74,4397,4398,4400,4402,4404,4407,4409,4412,4414,4416,4418,4420,4422,4424,4426,4428,4430,4432,4434,4436,4438,4440,4442,4444,4446],{"class":76,"line":1176},[74,4399,1947],{"class":80},[74,4401,3925],{"class":84},[74,4403,506],{"class":134},[74,4405,4406],{"class":84},"] ",[74,4408,131],{"class":80},[74,4410,4411],{"class":84}," {",[74,4413,379],{"class":134},[74,4415,464],{"class":84},[74,4417,163],{"class":134},[74,4419,464],{"class":84},[74,4421,481],{"class":134},[74,4423,464],{"class":84},[74,4425,277],{"class":134},[74,4427,464],{"class":84},[74,4429,405],{"class":134},[74,4431,464],{"class":84},[74,4433,455],{"class":134},[74,4435,464],{"class":84},[74,4437,303],{"class":134},[74,4439,464],{"class":84},[74,4441,157],{"class":134},[74,4443,464],{"class":84},[74,4445,506],{"class":134},[74,4447,3958],{"class":84},[74,4449,4450,4452,4454,4457,4459],{"class":76,"line":1182},[74,4451,1513],{"class":84},[74,4453,1130],{"class":80},[74,4455,4456],{"class":190},"\"排序前：\"",[74,4458,1130],{"class":80},[74,4460,1153],{"class":84},[74,4462,4463,4465,4467,4469,4471,4473,4475,4477,4479,4481,4483,4485],{"class":76,"line":1273},[74,4464,3164],{"class":80},[74,4466,1620],{"class":84},[74,4468,88],{"class":80},[74,4470,2995],{"class":84},[74,4472,131],{"class":80},[74,4474,277],{"class":134},[74,4476,3002],{"class":84},[74,4478,996],{"class":80},[74,4480,506],{"class":134},[74,4482,3002],{"class":84},[74,4484,2254],{"class":80},[74,4486,91],{"class":84},[74,4488,4489],{"class":76,"line":1279},[74,4490,1992],{"class":84},[74,4492,4493,4495,4497,4499,4501,4503],{"class":76,"line":1291},[74,4494,3414],{"class":84},[74,4496,1130],{"class":80},[74,4498,4317],{"class":84},[74,4500,1130],{"class":80},[74,4502,4322],{"class":190},[74,4504,1252],{"class":84},[74,4506,4507],{"class":76,"line":1574},[74,4508,2149],{"class":84},[74,4510,4511],{"class":76,"line":1579},[74,4512,4513],{"class":144},"    \u002F\u002F开始冒泡排序\n",[74,4515,4516],{"class":76,"line":1585},[74,4517,4518],{"class":144},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[74,4520,4521,4523,4525,4527,4529,4531,4533,4535,4537,4539,4541,4543,4545,4547],{"class":76,"line":1590},[74,4522,3164],{"class":80},[74,4524,1620],{"class":84},[74,4526,88],{"class":80},[74,4528,2995],{"class":84},[74,4530,131],{"class":80},[74,4532,277],{"class":134},[74,4534,3002],{"class":84},[74,4536,996],{"class":80},[74,4538,506],{"class":134},[74,4540,618],{"class":80},[74,4542,303],{"class":134},[74,4544,3002],{"class":84},[74,4546,2254],{"class":80},[74,4548,91],{"class":84},[74,4550,4551],{"class":76,"line":1604},[74,4552,1992],{"class":84},[74,4554,4555],{"class":76,"line":1609},[74,4556,4557],{"class":144},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[74,4559,4560,4562,4564,4566,4568,4570,4572,4574,4576,4578,4580,4582,4584,4586,4588,4590],{"class":76,"line":1615},[74,4561,3366],{"class":80},[74,4563,1620],{"class":84},[74,4565,88],{"class":80},[74,4567,3373],{"class":84},[74,4569,131],{"class":80},[74,4571,277],{"class":134},[74,4573,3380],{"class":84},[74,4575,996],{"class":80},[74,4577,506],{"class":134},[74,4579,618],{"class":80},[74,4581,527],{"class":84},[74,4583,618],{"class":80},[74,4585,303],{"class":134},[74,4587,3380],{"class":84},[74,4589,2254],{"class":80},[74,4591,91],{"class":84},[74,4593,4594],{"class":76,"line":1636},[74,4595,2473],{"class":84},[74,4597,4598],{"class":76,"line":1641},[74,4599,4600],{"class":144},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[74,4602,4603,4606,4609,4611,4614,4616,4618],{"class":76,"line":1655},[74,4604,4605],{"class":80},"            if",[74,4607,4608],{"class":84},"(arr[j]",[74,4610,1046],{"class":80},[74,4612,4613],{"class":84},"arr[j",[74,4615,567],{"class":80},[74,4617,303],{"class":134},[74,4619,4620],{"class":84},"])\n",[74,4622,4623],{"class":76,"line":1660},[74,4624,4625],{"class":84},"            {\n",[74,4627,4628,4631,4633,4635],{"class":76,"line":1689},[74,4629,4630],{"class":80},"                int",[74,4632,4218],{"class":84},[74,4634,131],{"class":80},[74,4636,4637],{"class":84},"arr[j];\n",[74,4639,4640,4643,4645,4647,4649,4651],{"class":76,"line":1694},[74,4641,4642],{"class":84},"                arr[j]",[74,4644,131],{"class":80},[74,4646,4613],{"class":84},[74,4648,567],{"class":80},[74,4650,303],{"class":134},[74,4652,4653],{"class":84},"];\n",[74,4655,4656,4659,4661,4663,4665,4667],{"class":76,"line":1711},[74,4657,4658],{"class":84},"                arr[j",[74,4660,567],{"class":80},[74,4662,303],{"class":134},[74,4664,1026],{"class":84},[74,4666,131],{"class":80},[74,4668,4243],{"class":84},[74,4670,4671],{"class":76,"line":1716},[74,4672,4673],{"class":84},"            }\n",[74,4675,4676],{"class":76,"line":1721},[74,4677,2492],{"class":84},[74,4679,4680],{"class":76,"line":1726},[74,4681,2149],{"class":84},[74,4683,4684,4686,4688,4691,4693],{"class":76,"line":1740},[74,4685,1513],{"class":84},[74,4687,1130],{"class":80},[74,4689,4690],{"class":190},"\"排序后：\"",[74,4692,1130],{"class":80},[74,4694,1153],{"class":84},[74,4696,4697,4699,4701,4703,4705,4707,4709,4711,4713,4715,4717,4719],{"class":76,"line":1745},[74,4698,3164],{"class":80},[74,4700,1620],{"class":84},[74,4702,88],{"class":80},[74,4704,2995],{"class":84},[74,4706,131],{"class":80},[74,4708,277],{"class":134},[74,4710,3002],{"class":84},[74,4712,996],{"class":80},[74,4714,506],{"class":134},[74,4716,3002],{"class":84},[74,4718,2254],{"class":80},[74,4720,91],{"class":84},[74,4722,4723],{"class":76,"line":2540},[74,4724,1992],{"class":84},[74,4726,4727,4729,4731,4733,4735,4737],{"class":76,"line":2554},[74,4728,3414],{"class":84},[74,4730,1130],{"class":80},[74,4732,4317],{"class":84},[74,4734,1130],{"class":80},[74,4736,4322],{"class":190},[74,4738,1252],{"class":84},[74,4740,4741],{"class":76,"line":2562},[74,4742,2149],{"class":84},[74,4744,4745,4747,4749],{"class":76,"line":2567},[74,4746,4053],{"class":80},[74,4748,4056],{"class":134},[74,4750,1252],{"class":84},[74,4752,4753],{"class":76,"line":2573},[74,4754,1527],{"class":84},[44,4756,4758],{"id":4757},"_172二维数组","1.7.2二维数组",[27,4760,4761],{},[30,4762,4763],{},"二维数组的四种定义方式",[223,4765,4766,4775],{},[226,4767,4768],{},[229,4769,4770,4773],{},[232,4771,4772],{},"序号",[232,4774,3744],{},[270,4776,4777,4787,4796,4805,4814],{},[229,4778,4779,4781],{},[275,4780,303],{},[275,4782,4783,4784,141],{},"数据类型 数组名[行数]",[74,4785,4786],{},"列数",[229,4788,4789,4791],{},[275,4790,163],{},[275,4792,4783,4793,4795],{},[74,4794,4786],{},"={ {数据1,数据2}，{数据3，数据4}... }",[229,4797,4798,4800],{},[275,4799,157],{},[275,4801,4783,4802,4804],{},[74,4803,4786],{},"={数据1,数据2,数据3...}",[229,4806,4807,4809],{},[275,4808,379],{},[275,4810,4811,4812,4804],{},"数据类型 数组名[]",[74,4813,4786],{},[229,4815,4816,4819],{},[275,4817,4818],{},"注意：不能只省略列数",[275,4820],{},[27,4822,4823],{"start":94},[30,4824,4825],{},"二维数组数组名",[1093,4827,4828,4831],{},[30,4829,4830],{},"1.查看二维数组所占内存空间",[30,4832,4833],{},"2.获取二维数组首地址",[19,4835,4836],{},"已知二维数组，求二维数组的行数与列数",[64,4838,4840],{"className":66,"code":4839,"language":68,"meta":69,"style":69},"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",[71,4841,4842,4850,4854,4872,4876,4894,4910,4915,4940,4973],{"__ignoreMap":69},[74,4843,4844,4846,4848],{"class":76,"line":77},[74,4845,88],{"class":80},[74,4847,1935],{"class":1925},[74,4849,1938],{"class":84},[74,4851,4852],{"class":76,"line":94},[74,4853,1508],{"class":84},[74,4855,4856,4858,4860,4862,4865,4867,4869],{"class":76,"line":1141},[74,4857,1947],{"class":80},[74,4859,3925],{"class":84},[74,4861,163],{"class":134},[74,4863,4864],{"class":84},"][",[74,4866,157],{"class":134},[74,4868,1026],{"class":84},[74,4870,4871],{"class":80},"=\n",[74,4873,4874],{"class":76,"line":1156},[74,4875,1992],{"class":84},[74,4877,4878,4881,4883,4885,4887,4889,4891],{"class":76,"line":1162},[74,4879,4880],{"class":84},"        {",[74,4882,303],{"class":134},[74,4884,464],{"class":84},[74,4886,163],{"class":134},[74,4888,464],{"class":84},[74,4890,157],{"class":134},[74,4892,4893],{"class":84},"},\n",[74,4895,4896,4898,4900,4902,4904,4906,4908],{"class":76,"line":1176},[74,4897,4880],{"class":84},[74,4899,379],{"class":134},[74,4901,464],{"class":84},[74,4903,405],{"class":134},[74,4905,464],{"class":84},[74,4907,430],{"class":134},[74,4909,1527],{"class":84},[74,4911,4912],{"class":76,"line":1182},[74,4913,4914],{"class":84},"    };\n",[74,4916,4917,4919,4921,4924,4926,4928,4930,4932,4934,4936,4938],{"class":76,"line":1273},[74,4918,1513],{"class":84},[74,4920,1130],{"class":80},[74,4922,4923],{"class":190},"\"二维数组的行数\"",[74,4925,1334],{"class":80},[74,4927,4169],{"class":84},[74,4929,4172],{"class":80},[74,4931,3814],{"class":84},[74,4933,277],{"class":134},[74,4935,4179],{"class":84},[74,4937,1130],{"class":80},[74,4939,1153],{"class":84},[74,4941,4942,4944,4946,4949,4951,4953,4955,4957,4959,4961,4963,4965,4967,4969,4971],{"class":76,"line":1279},[74,4943,1513],{"class":84},[74,4945,1130],{"class":80},[74,4947,4948],{"class":190},"\"二维数组的列数\"",[74,4950,1334],{"class":80},[74,4952,3814],{"class":84},[74,4954,277],{"class":134},[74,4956,4179],{"class":84},[74,4958,4172],{"class":80},[74,4960,3814],{"class":84},[74,4962,277],{"class":134},[74,4964,4864],{"class":84},[74,4966,277],{"class":134},[74,4968,4179],{"class":84},[74,4970,1130],{"class":80},[74,4972,1153],{"class":84},[74,4974,4975],{"class":76,"line":1291},[74,4976,1527],{"class":84},[19,4978,4979],{},"查看二维数组首地址",[64,4981,4983],{"className":66,"code":4982,"language":68,"meta":69,"style":69},"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",[71,4984,4985,5002,5028,5053],{"__ignoreMap":69},[74,4986,4987,4989,4991,4994,4996,4998,5000],{"class":76,"line":77},[74,4988,1331],{"class":84},[74,4990,1130],{"class":80},[74,4992,4993],{"class":190},"\"二维数组首地址：\"",[74,4995,1130],{"class":80},[74,4997,3843],{"class":84},[74,4999,1130],{"class":80},[74,5001,1153],{"class":84},[74,5003,5004,5006,5008,5011,5013,5015,5017,5020,5022,5024,5026],{"class":76,"line":94},[74,5005,1331],{"class":84},[74,5007,1130],{"class":80},[74,5009,5010],{"class":190},"\"二维数组第一行的首地址：\"",[74,5012,1130],{"class":80},[74,5014,85],{"class":84},[74,5016,88],{"class":80},[74,5018,5019],{"class":84},")arr[",[74,5021,277],{"class":134},[74,5023,1026],{"class":84},[74,5025,1130],{"class":80},[74,5027,1153],{"class":84},[74,5029,5030,5032,5034,5037,5039,5041,5043,5045,5047,5049,5051],{"class":76,"line":1141},[74,5031,1331],{"class":84},[74,5033,1130],{"class":80},[74,5035,5036],{"class":190},"\"二维数组第二行的首地址：\"",[74,5038,1130],{"class":80},[74,5040,85],{"class":84},[74,5042,88],{"class":80},[74,5044,5019],{"class":84},[74,5046,303],{"class":134},[74,5048,1026],{"class":84},[74,5050,1130],{"class":80},[74,5052,1153],{"class":84},[74,5054,5055,5057,5059,5062,5064,5066,5068,5070,5072,5074,5076,5078,5080,5082,5084,5086],{"class":76,"line":1156},[74,5056,1331],{"class":84},[74,5058,1130],{"class":80},[74,5060,5061],{"class":190},"\"二维数组第一个元素的首地址:\"",[74,5063,1130],{"class":80},[74,5065,85],{"class":84},[74,5067,88],{"class":80},[74,5069,515],{"class":84},[74,5071,439],{"class":80},[74,5073,3869],{"class":84},[74,5075,277],{"class":134},[74,5077,4864],{"class":84},[74,5079,277],{"class":134},[74,5081,1026],{"class":84},[74,5083,1130],{"class":80},[74,5085,1200],{"class":84},[74,5087,5088],{"class":144},"\u002F\u002F对于数，要加取址符\n",[5090,5091,5092],"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":69,"searchDepth":94,"depth":94,"links":5094},[5095,5096,5097,5105,5106,5112,5117],{"id":16,"depth":94,"text":17},{"id":24,"depth":94,"text":25},{"id":41,"depth":94,"text":42,"children":5098},[5099,5100,5101,5102,5103,5104],{"id":46,"depth":1141,"text":47},{"id":102,"depth":1141,"text":103},{"id":171,"depth":1141,"text":172},{"id":1111,"depth":1141,"text":1112},{"id":1206,"depth":1141,"text":1207},{"id":1305,"depth":1141,"text":1306},{"id":1347,"depth":94,"text":1348},{"id":1415,"depth":94,"text":1416,"children":5107},[5108,5109,5110,5111],{"id":1419,"depth":1141,"text":1420},{"id":1441,"depth":1141,"text":1442},{"id":1450,"depth":1141,"text":1451},{"id":1459,"depth":1141,"text":1460},{"id":1468,"depth":94,"text":1469,"children":5113},[5114,5115,5116],{"id":1472,"depth":1141,"text":1473},{"id":2167,"depth":1141,"text":2168},{"id":3584,"depth":1141,"text":3585},{"id":3725,"depth":94,"text":3726,"children":5118},[5119,5120],{"id":3729,"depth":1141,"text":3730},{"id":4757,"depth":1141,"text":4758},"md",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":5,"description":69},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",[5128,9441,10549,11969,14958,16309,17798,18887,27650,27663,28262,28288,28412,28653,28718,28736,28749,28796,28920,29089,29288,29468,29673,29809,29904,29941,29954,30264,31005,31713,31734,32754,34385,34536,34549,34561,34862,54674,54689,54706,54739,57611,80959,97104,97125,97238,97359,98129,98792,99153,99191,99297,99397,99440,99466,99527,101181,101282,101307,101798,102298,103378,103661,104403,104905,104917,106933,108597,110100,111798,113715,115634,117656,121126,121558,122021,122770,125714,126062,126084,126440,129747,129759,130162,130185,130332,130499,130704,131005,131562,132219,134150,135748,136397,137891,139322,140557,142251,144003,146413,146529,147464,147675,148560,149795,150023,150036,151191,153603,155971,159292,161769,163413,165190,167203,170255,172435,174962,177156],{"id":4,"title":5,"body":5129,"description":69,"extension":5121,"meta":9439,"navigation":2362,"path":5123,"seo":9440,"stem":5125,"__hash__":5126},{"type":7,"value":5130,"toc":9411},[5131,5133,5135,5137,5139,5147,5149,5151,5153,5155,5157,5159,5161,5181,5183,5185,5187,5189,5191,5229,5231,5245,5247,5257,5259,5265,5267,5883,5887,5897,5899,5969,5971,5975,6049,6051,6081,6083,6139,6141,6143,6147,6155,6157,6161,6163,6167,6169,6173,6175,6177,6181,6403,6407,6533,6537,6761,6763,6769,6771,6775,6865,6867,7125,7131,7225,7227,7229,7231,7233,7475,7479,7607,7609,7779,7781,7903,7905,8053,8055,8059,8061,8069,8075,8077,8173,8175,8177,8181,8221,8225,8229,8249,8253,8301,8303,8307,8469,8473,8725,8729,9105,9107,9111,9161,9165,9171,9173,9305,9307,9409],[10,5132,5],{"id":12},[14,5134,17],{"id":16},[19,5136,21],{},[14,5138,25],{"id":24},[27,5140,5141,5143,5145],{},[30,5142,32],{},[30,5144,35],{},[30,5146,38],{},[14,5148,42],{"id":41},[44,5150,47],{"id":46},[19,5152,50],{},[19,5154,53],{},[19,5156,56],{},[19,5158,59],{},[19,5160,62],{},[64,5162,5163],{"className":66,"code":67,"language":68,"meta":69,"style":69},[71,5164,5165,5175],{"__ignoreMap":69},[74,5166,5167,5169,5171,5173],{"class":76,"line":77},[74,5168,81],{"class":80},[74,5170,85],{"class":84},[74,5172,88],{"class":80},[74,5174,91],{"class":84},[74,5176,5177,5179],{"class":76,"line":94},[74,5178,81],{"class":80},[74,5180,99],{"class":84},[44,5182,103],{"id":102},[19,5184,106],{},[19,5186,109],{},[19,5188,112],{},[19,5190,115],{},[64,5192,5193],{"className":66,"code":118,"language":68,"meta":69,"style":69},[71,5194,5195,5211],{"__ignoreMap":69},[74,5196,5197,5199,5201,5203,5205,5207,5209],{"class":76,"line":77},[74,5198,125],{"class":80},[74,5200,128],{"class":84},[74,5202,131],{"class":80},[74,5204,135],{"class":134},[74,5206,138],{"class":80},[74,5208,141],{"class":84},[74,5210,145],{"class":144},[74,5212,5213,5215,5217,5219,5221,5223,5225,5227],{"class":76,"line":94},[74,5214,125],{"class":80},[74,5216,152],{"class":84},[74,5218,131],{"class":80},[74,5220,157],{"class":134},[74,5222,160],{"class":80},[74,5224,163],{"class":134},[74,5226,141],{"class":84},[74,5228,168],{"class":144},[44,5230,172],{"id":171},[64,5232,5233],{"className":66,"code":175,"language":68,"meta":69,"style":69},[71,5234,5235],{"__ignoreMap":69},[74,5236,5237,5239,5241,5243],{"class":76,"line":77},[74,5238,182],{"class":80},[74,5240,185],{"class":84},[74,5242,131],{"class":80},[74,5244,191],{"class":190},[19,5246,115],{},[27,5248,5249,5251,5253,5255],{},[30,5250,198],{},[30,5252,201],{},[30,5254,204],{},[30,5256,207],{},[19,5258,210],{},[27,5260,5261,5263],{},[30,5262,215],{},[30,5264,218],{},[19,5266,221],{},[223,5268,5269,5305],{},[226,5270,5271],{},[229,5272,5273,5277,5281,5285,5289,5293,5297,5301],{},[232,5274,5275,238],{},[235,5276,237],{},[232,5278,5279],{},[235,5280,243],{},[232,5282,5283,238],{},[235,5284,237],{},[232,5286,5287],{},[235,5288,252],{},[232,5290,5291,238],{},[235,5292,237],{},[232,5294,5295],{},[235,5296,252],{},[232,5298,5299,238],{},[235,5300,237],{},[232,5302,5303],{},[235,5304,252],{},[270,5306,5307,5325,5343,5361,5379,5397,5415,5433,5451,5469,5487,5505,5523,5541,5559,5577,5595,5613,5631,5649,5667,5685,5703,5721,5739,5757,5775,5793,5811,5829,5847,5865],{},[229,5308,5309,5311,5313,5315,5317,5319,5321,5323],{},[275,5310,277],{},[275,5312,280],{},[275,5314,283],{},[275,5316,286],{},[275,5318,289],{},[275,5320,292],{},[275,5322,295],{},[275,5324,298],{},[229,5326,5327,5329,5331,5333,5335,5337,5339,5341],{},[275,5328,303],{},[275,5330,306],{},[275,5332,309],{},[275,5334,312],{},[275,5336,315],{},[275,5338,318],{},[275,5340,321],{},[275,5342,324],{},[229,5344,5345,5347,5349,5351,5353,5355,5357,5359],{},[275,5346,163],{},[275,5348,331],{},[275,5350,334],{},[275,5352,337],{},[275,5354,340],{},[275,5356,343],{},[275,5358,346],{},[275,5360,349],{},[229,5362,5363,5365,5367,5369,5371,5373,5375,5377],{},[275,5364,157],{},[275,5366,356],{},[275,5368,359],{},[275,5370,362],{},[275,5372,365],{},[275,5374,368],{},[275,5376,371],{},[275,5378,374],{},[229,5380,5381,5383,5385,5387,5389,5391,5393,5395],{},[275,5382,379],{},[275,5384,382],{},[275,5386,385],{},[275,5388,388],{},[275,5390,391],{},[275,5392,394],{},[275,5394,397],{},[275,5396,400],{},[229,5398,5399,5401,5403,5405,5407,5409,5411,5413],{},[275,5400,405],{},[275,5402,408],{},[275,5404,411],{},[275,5406,414],{},[275,5408,417],{},[275,5410,420],{},[275,5412,423],{},[275,5414,160],{},[229,5416,5417,5419,5421,5423,5425,5427,5429,5431],{},[275,5418,430],{},[275,5420,433],{},[275,5422,436],{},[275,5424,439],{},[275,5426,442],{},[275,5428,445],{},[275,5430,448],{},[275,5432,138],{},[229,5434,5435,5437,5439,5441,5443,5445,5447,5449],{},[275,5436,455],{},[275,5438,458],{},[275,5440,461],{},[275,5442,464],{},[275,5444,467],{},[275,5446,470],{},[275,5448,473],{},[275,5450,476],{},[229,5452,5453,5455,5457,5459,5461,5463,5465,5467],{},[275,5454,481],{},[275,5456,484],{},[275,5458,487],{},[275,5460,85],{},[275,5462,492],{},[275,5464,495],{},[275,5466,498],{},[275,5468,501],{},[229,5470,5471,5473,5475,5477,5479,5481,5483,5485],{},[275,5472,506],{},[275,5474,509],{},[275,5476,512],{},[275,5478,515],{},[275,5480,518],{},[275,5482,521],{},[275,5484,524],{},[275,5486,527],{},[229,5488,5489,5491,5493,5495,5497,5499,5501,5503],{},[275,5490,532],{},[275,5492,535],{},[275,5494,538],{},[275,5496,541],{},[275,5498,544],{},[275,5500,547],{},[275,5502,550],{},[275,5504,553],{},[229,5506,5507,5509,5511,5513,5515,5517,5519,5521],{},[275,5508,558],{},[275,5510,561],{},[275,5512,564],{},[275,5514,567],{},[275,5516,570],{},[275,5518,573],{},[275,5520,576],{},[275,5522,579],{},[229,5524,5525,5527,5529,5531,5533,5535,5537,5539],{},[275,5526,584],{},[275,5528,587],{},[275,5530,590],{},[275,5532,464],{},[275,5534,595],{},[275,5536,598],{},[275,5538,601],{},[275,5540,604],{},[229,5542,5543,5545,5547,5549,5551,5553,5555,5557],{},[275,5544,609],{},[275,5546,612],{},[275,5548,615],{},[275,5550,618],{},[275,5552,621],{},[275,5554,624],{},[275,5556,627],{},[275,5558,630],{},[229,5560,5561,5563,5565,5567,5569,5571,5573,5575],{},[275,5562,635],{},[275,5564,638],{},[275,5566,641],{},[275,5568,644],{},[275,5570,647],{},[275,5572,650],{},[275,5574,653],{},[275,5576,656],{},[229,5578,5579,5581,5583,5585,5587,5589,5591,5593],{},[275,5580,661],{},[275,5582,664],{},[275,5584,667],{},[275,5586,670],{},[275,5588,673],{},[275,5590,676],{},[275,5592,679],{},[275,5594,682],{},[229,5596,5597,5599,5601,5603,5605,5607,5609,5611],{},[275,5598,687],{},[275,5600,690],{},[275,5602,693],{},[275,5604,277],{},[275,5606,698],{},[275,5608,701],{},[275,5610,704],{},[275,5612,19],{},[229,5614,5615,5617,5619,5621,5623,5625,5627,5629],{},[275,5616,711],{},[275,5618,714],{},[275,5620,717],{},[275,5622,303],{},[275,5624,722],{},[275,5626,725],{},[275,5628,728],{},[275,5630,731],{},[229,5632,5633,5635,5637,5639,5641,5643,5645,5647],{},[275,5634,736],{},[275,5636,739],{},[275,5638,742],{},[275,5640,163],{},[275,5642,747],{},[275,5644,750],{},[275,5646,753],{},[275,5648,756],{},[229,5650,5651,5653,5655,5657,5659,5661,5663,5665],{},[275,5652,761],{},[275,5654,764],{},[275,5656,767],{},[275,5658,157],{},[275,5660,772],{},[275,5662,775],{},[275,5664,778],{},[275,5666,781],{},[229,5668,5669,5671,5673,5675,5677,5679,5681,5683],{},[275,5670,786],{},[275,5672,789],{},[275,5674,792],{},[275,5676,379],{},[275,5678,797],{},[275,5680,800],{},[275,5682,803],{},[275,5684,806],{},[229,5686,5687,5689,5691,5693,5695,5697,5699,5701],{},[275,5688,811],{},[275,5690,814],{},[275,5692,817],{},[275,5694,405],{},[275,5696,822],{},[275,5698,825],{},[275,5700,828],{},[275,5702,831],{},[229,5704,5705,5707,5709,5711,5713,5715,5717,5719],{},[275,5706,836],{},[275,5708,839],{},[275,5710,842],{},[275,5712,430],{},[275,5714,847],{},[275,5716,850],{},[275,5718,853],{},[275,5720,856],{},[229,5722,5723,5725,5727,5729,5731,5733,5735,5737],{},[275,5724,861],{},[275,5726,864],{},[275,5728,867],{},[275,5730,455],{},[275,5732,872],{},[275,5734,875],{},[275,5736,878],{},[275,5738,881],{},[229,5740,5741,5743,5745,5747,5749,5751,5753,5755],{},[275,5742,886],{},[275,5744,889],{},[275,5746,892],{},[275,5748,481],{},[275,5750,897],{},[275,5752,900],{},[275,5754,903],{},[275,5756,906],{},[229,5758,5759,5761,5763,5765,5767,5769,5771,5773],{},[275,5760,911],{},[275,5762,914],{},[275,5764,917],{},[275,5766,506],{},[275,5768,922],{},[275,5770,925],{},[275,5772,928],{},[275,5774,931],{},[229,5776,5777,5779,5781,5783,5785,5787,5789,5791],{},[275,5778,936],{},[275,5780,939],{},[275,5782,942],{},[275,5784,945],{},[275,5786,948],{},[275,5788,951],{},[275,5790,954],{},[275,5792,957],{},[229,5794,5795,5797,5799,5801,5803,5805,5807,5809],{},[275,5796,962],{},[275,5798,965],{},[275,5800,968],{},[275,5802,141],{},[275,5804,973],{},[275,5806,976],{},[275,5808,979],{},[275,5810,982],{},[229,5812,5813,5815,5817,5819,5821,5823,5825,5827],{},[275,5814,987],{},[275,5816,990],{},[275,5818,993],{},[275,5820,996],{},[275,5822,999],{},[275,5824,670],{},[275,5826,1004],{},[275,5828,1007],{},[229,5830,5831,5833,5835,5837,5839,5841,5843,5845],{},[275,5832,1012],{},[275,5834,1015],{},[275,5836,1018],{},[275,5838,131],{},[275,5840,1023],{},[275,5842,1026],{},[275,5844,1029],{},[275,5846,1032],{},[229,5848,5849,5851,5853,5855,5857,5859,5861,5863],{},[275,5850,1037],{},[275,5852,1040],{},[275,5854,1043],{},[275,5856,1046],{},[275,5858,1049],{},[275,5860,1052],{},[275,5862,1055],{},[275,5864,1058],{},[229,5866,5867,5869,5871,5873,5875,5877,5879,5881],{},[275,5868,1063],{},[275,5870,1066],{},[275,5872,1069],{},[275,5874,1072],{},[275,5876,1075],{},[275,5878,1078],{},[275,5880,1081],{},[275,5882,1084],{},[19,5884,1087,5885,1091],{},[235,5886,1090],{},[1093,5888,5889,5893],{},[30,5890,1097,5891,1101],{},[235,5892,1100],{},[30,5894,1104,5895,1108],{},[235,5896,1107],{},[44,5898,1112],{"id":1111},[64,5900,5901],{"className":66,"code":1115,"language":68,"meta":69,"style":69},[71,5902,5903,5907,5919,5931,5935,5947,5951],{"__ignoreMap":69},[74,5904,5905],{"class":76,"line":77},[74,5906,1122],{"class":144},[74,5908,5909,5911,5913,5915,5917],{"class":76,"line":94},[74,5910,1127],{"class":84},[74,5912,1130],{"class":80},[74,5914,1133],{"class":190},[74,5916,141],{"class":84},[74,5918,1138],{"class":144},[74,5920,5921,5923,5925,5927,5929],{"class":76,"line":1141},[74,5922,1127],{"class":84},[74,5924,1130],{"class":80},[74,5926,1148],{"class":190},[74,5928,1130],{"class":80},[74,5930,1153],{"class":84},[74,5932,5933],{"class":76,"line":1156},[74,5934,1159],{"class":144},[74,5936,5937,5939,5941,5943,5945],{"class":76,"line":1162},[74,5938,1127],{"class":84},[74,5940,1130],{"class":80},[74,5942,1169],{"class":190},[74,5944,1130],{"class":80},[74,5946,1153],{"class":84},[74,5948,5949],{"class":76,"line":1176},[74,5950,1179],{"class":144},[74,5952,5953,5955,5957,5959,5961,5963,5965,5967],{"class":76,"line":1182},[74,5954,1127],{"class":84},[74,5956,1130],{"class":80},[74,5958,1189],{"class":190},[74,5960,1192],{"class":134},[74,5962,1195],{"class":190},[74,5964,1130],{"class":80},[74,5966,1200],{"class":84},[74,5968,1203],{"class":144},[44,5970,1207],{"id":1206},[19,5972,1210,5973,1213],{},[74,5974],{},[64,5976,5977],{"className":66,"code":1216,"language":68,"meta":69,"style":69},[71,5978,5979,5983,5987,5991,5995,6007,6019,6023,6027,6037],{"__ignoreMap":69},[74,5980,5981],{"class":76,"line":77},[74,5982,1223],{"class":144},[74,5984,5985],{"class":76,"line":94},[74,5986,1228],{"class":144},[74,5988,5989],{"class":76,"line":1141},[74,5990,1233],{"class":144},[74,5992,5993],{"class":76,"line":1156},[74,5994,1238],{"class":144},[74,5996,5997,5999,6001,6003,6005],{"class":76,"line":1162},[74,5998,182],{"class":80},[74,6000,1245],{"class":84},[74,6002,131],{"class":80},[74,6004,1148],{"class":190},[74,6006,1252],{"class":84},[74,6008,6009,6011,6013,6015,6017],{"class":76,"line":1176},[74,6010,1127],{"class":84},[74,6012,1130],{"class":80},[74,6014,1261],{"class":84},[74,6016,1130],{"class":80},[74,6018,1153],{"class":84},[74,6020,6021],{"class":76,"line":1182},[74,6022,1270],{"class":144},[74,6024,6025],{"class":76,"line":1273},[74,6026,1276],{"class":144},[74,6028,6029,6031,6033,6035],{"class":76,"line":1279},[74,6030,1282],{"class":84},[74,6032,131],{"class":80},[74,6034,1148],{"class":190},[74,6036,1252],{"class":84},[74,6038,6039,6041,6043,6045,6047],{"class":76,"line":1291},[74,6040,1127],{"class":84},[74,6042,1130],{"class":80},[74,6044,1298],{"class":84},[74,6046,1130],{"class":80},[74,6048,1153],{"class":84},[44,6050,1306],{"id":1305},[64,6052,6053],{"className":66,"code":1309,"language":68,"meta":69,"style":69},[71,6054,6055,6067],{"__ignoreMap":69},[74,6056,6057,6059,6061,6063,6065],{"class":76,"line":77},[74,6058,1316],{"class":80},[74,6060,1319],{"class":84},[74,6062,131],{"class":80},[74,6064,1324],{"class":134},[74,6066,1252],{"class":84},[74,6068,6069,6071,6073,6075,6077,6079],{"class":76,"line":94},[74,6070,1331],{"class":84},[74,6072,1334],{"class":80},[74,6074,1337],{"class":84},[74,6076,1130],{"class":80},[74,6078,1200],{"class":84},[74,6080,1344],{"class":144},[14,6082,1348],{"id":1347},[64,6084,6085],{"className":66,"code":1351,"language":68,"meta":69,"style":69},[71,6086,6087,6099,6115,6123],{"__ignoreMap":69},[74,6088,6089,6091,6093,6095,6097],{"class":76,"line":77},[74,6090,88],{"class":80},[74,6092,1360],{"class":84},[74,6094,131],{"class":80},[74,6096,277],{"class":134},[74,6098,1252],{"class":84},[74,6100,6101,6103,6105,6107,6109,6111,6113],{"class":76,"line":94},[74,6102,1331],{"class":84},[74,6104,1130],{"class":80},[74,6106,1375],{"class":190},[74,6108,1130],{"class":80},[74,6110,324],{"class":84},[74,6112,1130],{"class":80},[74,6114,1153],{"class":84},[74,6116,6117,6119,6121],{"class":76,"line":1141},[74,6118,1388],{"class":84},[74,6120,1391],{"class":80},[74,6122,1394],{"class":84},[74,6124,6125,6127,6129,6131,6133,6135,6137],{"class":76,"line":1156},[74,6126,1127],{"class":84},[74,6128,1130],{"class":80},[74,6130,1403],{"class":190},[74,6132,1406],{"class":80},[74,6134,324],{"class":84},[74,6136,1130],{"class":80},[74,6138,1153],{"class":84},[14,6140,1416],{"id":1415},[44,6142,1420],{"id":1419},[19,6144,6145,1427],{},[1424,6146],{"alt":69,"src":1426},[27,6148,6149,6151,6153],{},[30,6150,1432],{},[30,6152,1435],{},[30,6154,1438],{},[44,6156,1442],{"id":1441},[19,6158,6159],{},[1424,6160],{"alt":69,"src":1447},[44,6162,1451],{"id":1450},[19,6164,6165],{},[1424,6166],{"alt":69,"src":1456},[44,6168,1460],{"id":1459},[19,6170,6171],{},[1424,6172],{"alt":69,"src":1465},[14,6174,1469],{"id":1468},[44,6176,1473],{"id":1472},[27,6178,6179],{},[30,6180,1478],{},[64,6182,6183],{"className":66,"code":1481,"language":68,"meta":69,"style":69},[71,6184,6185,6189,6201,6205,6217,6221,6225,6233,6245,6249,6261,6265,6269,6273,6285,6289,6293,6311,6315,6327,6331,6353,6357,6371,6375,6379,6383,6395,6399],{"__ignoreMap":69},[74,6186,6187],{"class":76,"line":77},[74,6188,1488],{"class":144},[74,6190,6191,6193,6195,6197,6199],{"class":76,"line":94},[74,6192,1493],{"class":80},[74,6194,1496],{"class":84},[74,6196,1046],{"class":80},[74,6198,1501],{"class":134},[74,6200,91],{"class":84},[74,6202,6203],{"class":76,"line":1141},[74,6204,1508],{"class":84},[74,6206,6207,6209,6211,6213,6215],{"class":76,"line":1156},[74,6208,1513],{"class":84},[74,6210,1130],{"class":80},[74,6212,1518],{"class":190},[74,6214,1130],{"class":80},[74,6216,1153],{"class":84},[74,6218,6219],{"class":76,"line":1162},[74,6220,1527],{"class":84},[74,6222,6223],{"class":76,"line":1176},[74,6224,1532],{"class":144},[74,6226,6227,6229,6231],{"class":76,"line":1182},[74,6228,1388],{"class":84},[74,6230,1391],{"class":80},[74,6232,1541],{"class":84},[74,6234,6235,6237,6239,6241,6243],{"class":76,"line":1273},[74,6236,1493],{"class":80},[74,6238,1496],{"class":84},[74,6240,1550],{"class":80},[74,6242,1501],{"class":134},[74,6244,91],{"class":84},[74,6246,6247],{"class":76,"line":1279},[74,6248,1508],{"class":84},[74,6250,6251,6253,6255,6257,6259],{"class":76,"line":1291},[74,6252,1513],{"class":84},[74,6254,1391],{"class":80},[74,6256,1567],{"class":190},[74,6258,1130],{"class":80},[74,6260,1153],{"class":84},[74,6262,6263],{"class":76,"line":1574},[74,6264,1527],{"class":84},[74,6266,6267],{"class":76,"line":1579},[74,6268,1582],{"class":80},[74,6270,6271],{"class":76,"line":1585},[74,6272,1508],{"class":84},[74,6274,6275,6277,6279,6281,6283],{"class":76,"line":1590},[74,6276,1513],{"class":84},[74,6278,1391],{"class":80},[74,6280,1597],{"class":190},[74,6282,1391],{"class":80},[74,6284,1153],{"class":84},[74,6286,6287],{"class":76,"line":1604},[74,6288,1527],{"class":84},[74,6290,6291],{"class":76,"line":1609},[74,6292,1612],{"class":144},[74,6294,6295,6297,6299,6301,6303,6305,6307,6309],{"class":76,"line":1615},[74,6296,1493],{"class":80},[74,6298,1620],{"class":84},[74,6300,277],{"class":134},[74,6302,996],{"class":80},[74,6304,1627],{"class":84},[74,6306,996],{"class":80},[74,6308,397],{"class":134},[74,6310,91],{"class":84},[74,6312,6313],{"class":76,"line":1636},[74,6314,1508],{"class":84},[74,6316,6317,6319,6321,6323,6325],{"class":76,"line":1641},[74,6318,1513],{"class":84},[74,6320,1130],{"class":80},[74,6322,1648],{"class":190},[74,6324,1130],{"class":80},[74,6326,1153],{"class":84},[74,6328,6329],{"class":76,"line":1655},[74,6330,1527],{"class":84},[74,6332,6333,6335,6337,6339,6341,6343,6345,6347,6349,6351],{"class":76,"line":1660},[74,6334,1663],{"class":80},[74,6336,1666],{"class":80},[74,6338,1669],{"class":84},[74,6340,1672],{"class":80},[74,6342,397],{"class":134},[74,6344,1677],{"class":80},[74,6346,1627],{"class":84},[74,6348,996],{"class":80},[74,6350,1684],{"class":134},[74,6352,91],{"class":84},[74,6354,6355],{"class":76,"line":1689},[74,6356,1508],{"class":84},[74,6358,6359,6361,6363,6365,6367,6369],{"class":76,"line":1694},[74,6360,1513],{"class":84},[74,6362,1130],{"class":80},[74,6364,1701],{"class":190},[74,6366,1130],{"class":80},[74,6368,1200],{"class":84},[74,6370,1708],{"class":144},[74,6372,6373],{"class":76,"line":1711},[74,6374,1527],{"class":84},[74,6376,6377],{"class":76,"line":1716},[74,6378,1582],{"class":80},[74,6380,6381],{"class":76,"line":1721},[74,6382,1508],{"class":84},[74,6384,6385,6387,6389,6391,6393],{"class":76,"line":1726},[74,6386,1513],{"class":84},[74,6388,1130],{"class":80},[74,6390,1733],{"class":190},[74,6392,1130],{"class":80},[74,6394,1153],{"class":84},[74,6396,6397],{"class":76,"line":1740},[74,6398,1527],{"class":84},[74,6400,6401],{"class":76,"line":1745},[74,6402,1748],{"class":144},[27,6404,6405],{"start":94},[30,6406,1753],{},[64,6408,6409],{"className":66,"code":1756,"language":68,"meta":69,"style":69},[71,6410,6411,6415,6419,6443,6463,6479,6483,6505,6519],{"__ignoreMap":69},[74,6412,6413],{"class":76,"line":77},[74,6414,1763],{"class":144},[74,6416,6417],{"class":76,"line":94},[74,6418,1768],{"class":144},[74,6420,6421,6423,6425,6427,6429,6431,6433,6435,6437,6439,6441],{"class":76,"line":1141},[74,6422,88],{"class":80},[74,6424,1360],{"class":84},[74,6426,131],{"class":80},[74,6428,786],{"class":134},[74,6430,1781],{"class":84},[74,6432,131],{"class":80},[74,6434,532],{"class":134},[74,6436,1788],{"class":84},[74,6438,131],{"class":80},[74,6440,277],{"class":134},[74,6442,1252],{"class":84},[74,6444,6445,6447,6449,6451,6453,6455,6457,6459,6461],{"class":76,"line":1156},[74,6446,374],{"class":84},[74,6448,131],{"class":80},[74,6450,1803],{"class":84},[74,6452,1046],{"class":80},[74,6454,349],{"class":84},[74,6456,1072],{"class":80},[74,6458,324],{"class":84},[74,6460,945],{"class":80},[74,6462,1816],{"class":84},[74,6464,6465,6467,6469,6471,6473,6475,6477],{"class":76,"line":1162},[74,6466,1331],{"class":84},[74,6468,1130],{"class":80},[74,6470,1825],{"class":190},[74,6472,1130],{"class":80},[74,6474,374],{"class":84},[74,6476,1130],{"class":80},[74,6478,1153],{"class":84},[74,6480,6481],{"class":76,"line":1176},[74,6482,1838],{"class":144},[74,6484,6485,6487,6489,6491,6493,6495,6497,6499,6501,6503],{"class":76,"line":1182},[74,6486,1803],{"class":84},[74,6488,1046],{"class":80},[74,6490,349],{"class":84},[74,6492,1072],{"class":80},[74,6494,324],{"class":84},[74,6496,945],{"class":80},[74,6498,1855],{"class":84},[74,6500,131],{"class":80},[74,6502,397],{"class":134},[74,6504,1252],{"class":84},[74,6506,6507,6509,6511,6513,6515,6517],{"class":76,"line":1273},[74,6508,1331],{"class":84},[74,6510,1130],{"class":80},[74,6512,324],{"class":84},[74,6514,1130],{"class":80},[74,6516,1200],{"class":84},[74,6518,1876],{"class":144},[74,6520,6521,6523,6525,6527,6529,6531],{"class":76,"line":1279},[74,6522,1331],{"class":84},[74,6524,1130],{"class":80},[74,6526,349],{"class":84},[74,6528,1130],{"class":80},[74,6530,1200],{"class":84},[74,6532,1891],{"class":144},[27,6534,6535],{"start":1141},[30,6536,1896],{},[64,6538,6539],{"className":66,"code":1899,"language":68,"meta":69,"style":69},[71,6540,6541,6545,6551,6561,6569,6573,6585,6597,6605,6611,6615,6635,6655,6675,6695,6715,6735,6753,6757],{"__ignoreMap":69},[74,6542,6543],{"class":76,"line":77},[74,6544,1906],{"class":144},[74,6546,6547,6549],{"class":76,"line":94},[74,6548,1911],{"class":80},[74,6550,1914],{"class":190},[74,6552,6553,6555,6557,6559],{"class":76,"line":1141},[74,6554,1919],{"class":80},[74,6556,1922],{"class":80},[74,6558,1926],{"class":1925},[74,6560,1252],{"class":84},[74,6562,6563,6565,6567],{"class":76,"line":1156},[74,6564,88],{"class":80},[74,6566,1935],{"class":1925},[74,6568,1938],{"class":84},[74,6570,6571],{"class":76,"line":1162},[74,6572,1508],{"class":84},[74,6574,6575,6577,6579,6581,6583],{"class":76,"line":1176},[74,6576,1947],{"class":80},[74,6578,1950],{"class":84},[74,6580,131],{"class":80},[74,6582,277],{"class":134},[74,6584,1252],{"class":84},[74,6586,6587,6589,6591,6593,6595],{"class":76,"line":1182},[74,6588,1513],{"class":84},[74,6590,1130],{"class":80},[74,6592,1965],{"class":190},[74,6594,1130],{"class":80},[74,6596,1153],{"class":84},[74,6598,6599,6601,6603],{"class":76,"line":1273},[74,6600,1974],{"class":84},[74,6602,1391],{"class":80},[74,6604,1979],{"class":84},[74,6606,6607,6609],{"class":76,"line":1279},[74,6608,1984],{"class":80},[74,6610,1987],{"class":84},[74,6612,6613],{"class":76,"line":1291},[74,6614,1992],{"class":84},[74,6616,6617,6619,6621,6623,6625,6627,6629,6631,6633],{"class":76,"line":1574},[74,6618,1997],{"class":80},[74,6620,2000],{"class":134},[74,6622,2003],{"class":84},[74,6624,1130],{"class":80},[74,6626,2008],{"class":190},[74,6628,1130],{"class":80},[74,6630,1200],{"class":84},[74,6632,2015],{"class":80},[74,6634,1252],{"class":84},[74,6636,6637,6639,6641,6643,6645,6647,6649,6651,6653],{"class":76,"line":1579},[74,6638,1997],{"class":80},[74,6640,2024],{"class":134},[74,6642,2003],{"class":84},[74,6644,1130],{"class":80},[74,6646,2008],{"class":190},[74,6648,1130],{"class":80},[74,6650,1200],{"class":84},[74,6652,2015],{"class":80},[74,6654,1252],{"class":84},[74,6656,6657,6659,6661,6663,6665,6667,6669,6671,6673],{"class":76,"line":1585},[74,6658,1997],{"class":80},[74,6660,2045],{"class":134},[74,6662,2003],{"class":84},[74,6664,1130],{"class":80},[74,6666,2052],{"class":190},[74,6668,1130],{"class":80},[74,6670,1200],{"class":84},[74,6672,2015],{"class":80},[74,6674,1252],{"class":84},[74,6676,6677,6679,6681,6683,6685,6687,6689,6691,6693],{"class":76,"line":1590},[74,6678,1997],{"class":80},[74,6680,2067],{"class":134},[74,6682,2003],{"class":84},[74,6684,1130],{"class":80},[74,6686,2052],{"class":190},[74,6688,1130],{"class":80},[74,6690,1200],{"class":84},[74,6692,2015],{"class":80},[74,6694,1252],{"class":84},[74,6696,6697,6699,6701,6703,6705,6707,6709,6711,6713],{"class":76,"line":1604},[74,6698,1997],{"class":80},[74,6700,2088],{"class":134},[74,6702,2003],{"class":84},[74,6704,1130],{"class":80},[74,6706,2095],{"class":190},[74,6708,1130],{"class":80},[74,6710,1200],{"class":84},[74,6712,2015],{"class":80},[74,6714,1252],{"class":84},[74,6716,6717,6719,6721,6723,6725,6727,6729,6731,6733],{"class":76,"line":1609},[74,6718,1997],{"class":80},[74,6720,2110],{"class":134},[74,6722,2003],{"class":84},[74,6724,1130],{"class":80},[74,6726,2095],{"class":190},[74,6728,1130],{"class":80},[74,6730,1200],{"class":84},[74,6732,2015],{"class":80},[74,6734,1252],{"class":84},[74,6736,6737,6739,6741,6743,6745,6747,6749,6751],{"class":76,"line":1615},[74,6738,2129],{"class":80},[74,6740,2003],{"class":84},[74,6742,1130],{"class":80},[74,6744,2136],{"class":190},[74,6746,1130],{"class":80},[74,6748,1200],{"class":84},[74,6750,2015],{"class":80},[74,6752,1252],{"class":84},[74,6754,6755],{"class":76,"line":1636},[74,6756,2149],{"class":84},[74,6758,6759],{"class":76,"line":1641},[74,6760,1527],{"class":84},[19,6762,2156],{},[1093,6764,6765,6767],{},[30,6766,2161],{},[30,6768,2164],{},[44,6770,2168],{"id":2167},[27,6772,6773],{},[30,6774,2173],{},[64,6776,6777],{"className":66,"code":2176,"language":68,"meta":69,"style":69},[71,6778,6779,6783,6791,6795,6807,6819,6823,6839,6847,6851,6861],{"__ignoreMap":69},[74,6780,6781],{"class":76,"line":77},[74,6782,2183],{"class":144},[74,6784,6785,6787,6789],{"class":76,"line":94},[74,6786,88],{"class":80},[74,6788,1935],{"class":1925},[74,6790,1938],{"class":84},[74,6792,6793],{"class":76,"line":1141},[74,6794,1508],{"class":84},[74,6796,6797,6799,6801,6803,6805],{"class":76,"line":1156},[74,6798,1947],{"class":80},[74,6800,2202],{"class":84},[74,6802,131],{"class":80},[74,6804,277],{"class":134},[74,6806,1252],{"class":84},[74,6808,6809,6811,6813,6815,6817],{"class":76,"line":1162},[74,6810,2213],{"class":80},[74,6812,2216],{"class":84},[74,6814,996],{"class":80},[74,6816,532],{"class":134},[74,6818,91],{"class":84},[74,6820,6821],{"class":76,"line":1176},[74,6822,1992],{"class":84},[74,6824,6825,6827,6829,6831,6833,6835,6837],{"class":76,"line":1182},[74,6826,2231],{"class":1925},[74,6828,2234],{"class":84},[74,6830,1130],{"class":80},[74,6832,1627],{"class":84},[74,6834,1130],{"class":80},[74,6836,2243],{"class":1925},[74,6838,2246],{"class":84},[74,6840,6841,6843,6845],{"class":76,"line":1273},[74,6842,2251],{"class":84},[74,6844,2254],{"class":80},[74,6846,1252],{"class":84},[74,6848,6849],{"class":76,"line":1279},[74,6850,2149],{"class":84},[74,6852,6853,6855,6857,6859],{"class":76,"line":1291},[74,6854,2265],{"class":1925},[74,6856,85],{"class":84},[74,6858,2270],{"class":190},[74,6860,91],{"class":84},[74,6862,6863],{"class":76,"line":1574},[74,6864,1527],{"class":84},[19,6866,2279],{},[64,6868,6869],{"className":66,"code":2282,"language":68,"meta":69,"style":69},[71,6870,6871,6875,6881,6887,6897,6905,6909,6913,6933,6937,6941,6947,6971,6975,6979,6991,7001,7005,7013,7017,7027,7031,7043,7047,7059,7063,7075,7079,7083,7087,7099,7105,7109,7113,7117,7121],{"__ignoreMap":69},[74,6872,6873],{"class":76,"line":77},[74,6874,2289],{"class":144},[74,6876,6877,6879],{"class":76,"line":94},[74,6878,1911],{"class":80},[74,6880,2296],{"class":190},[74,6882,6883,6885],{"class":76,"line":1141},[74,6884,1911],{"class":80},[74,6886,2303],{"class":190},[74,6888,6889,6891,6893,6895],{"class":76,"line":1156},[74,6890,1919],{"class":80},[74,6892,1922],{"class":80},[74,6894,1926],{"class":1925},[74,6896,1252],{"class":84},[74,6898,6899,6901,6903],{"class":76,"line":1162},[74,6900,88],{"class":80},[74,6902,1935],{"class":1925},[74,6904,1938],{"class":84},[74,6906,6907],{"class":76,"line":1176},[74,6908,1508],{"class":84},[74,6910,6911],{"class":76,"line":1182},[74,6912,2330],{"class":144},[74,6914,6915,6917,6919,6921,6923,6925,6927,6929,6931],{"class":76,"line":1273},[74,6916,2335],{"class":1925},[74,6918,2338],{"class":84},[74,6920,2341],{"class":80},[74,6922,2344],{"class":80},[74,6924,515],{"class":84},[74,6926,2349],{"class":1925},[74,6928,85],{"class":84},[74,6930,2354],{"class":134},[74,6932,2357],{"class":84},[74,6934,6935],{"class":76,"line":1279},[74,6936,2363],{"emptyLinePlaceholder":2362},[74,6938,6939],{"class":76,"line":1291},[74,6940,2368],{"class":144},[74,6942,6943,6945],{"class":76,"line":1574},[74,6944,2373],{"class":144},[74,6946,2376],{"class":144},[74,6948,6949,6951,6953,6955,6957,6959,6961,6963,6965,6967,6969],{"class":76,"line":1579},[74,6950,1947],{"class":80},[74,6952,2202],{"class":84},[74,6954,131],{"class":80},[74,6956,2387],{"class":1925},[74,6958,2390],{"class":84},[74,6960,414],{"class":80},[74,6962,397],{"class":134},[74,6964,567],{"class":80},[74,6966,303],{"class":134},[74,6968,141],{"class":84},[74,6970,2403],{"class":144},[74,6972,6973],{"class":76,"line":1585},[74,6974,2408],{"class":144},[74,6976,6977],{"class":76,"line":1590},[74,6978,2413],{"class":144},[74,6980,6981,6983,6985,6987,6989],{"class":76,"line":1604},[74,6982,1947],{"class":80},[74,6984,2420],{"class":84},[74,6986,131],{"class":80},[74,6988,277],{"class":134},[74,6990,1252],{"class":84},[74,6992,6993,6995,6997,6999],{"class":76,"line":1609},[74,6994,2213],{"class":80},[74,6996,1620],{"class":84},[74,6998,303],{"class":134},[74,7000,91],{"class":84},[74,7002,7003],{"class":76,"line":1615},[74,7004,1992],{"class":84},[74,7006,7007,7009,7011],{"class":76,"line":1636},[74,7008,2445],{"class":84},[74,7010,1391],{"class":80},[74,7012,2450],{"class":84},[74,7014,7015],{"class":76,"line":1641},[74,7016,2455],{"class":144},[74,7018,7019,7021,7023,7025],{"class":76,"line":1655},[74,7020,2460],{"class":80},[74,7022,2463],{"class":84},[74,7024,996],{"class":80},[74,7026,2468],{"class":84},[74,7028,7029],{"class":76,"line":1660},[74,7030,2473],{"class":84},[74,7032,7033,7035,7037,7039,7041],{"class":76,"line":1689},[74,7034,2478],{"class":84},[74,7036,1130],{"class":80},[74,7038,2483],{"class":190},[74,7040,1130],{"class":80},[74,7042,1153],{"class":84},[74,7044,7045],{"class":76,"line":1694},[74,7046,2492],{"class":84},[74,7048,7049,7051,7053,7055,7057],{"class":76,"line":1711},[74,7050,2497],{"class":80},[74,7052,1666],{"class":80},[74,7054,2502],{"class":84},[74,7056,1046],{"class":80},[74,7058,2507],{"class":84},[74,7060,7061],{"class":76,"line":1716},[74,7062,2473],{"class":84},[74,7064,7065,7067,7069,7071,7073],{"class":76,"line":1721},[74,7066,2478],{"class":84},[74,7068,1130],{"class":80},[74,7070,2520],{"class":190},[74,7072,1130],{"class":80},[74,7074,1153],{"class":84},[74,7076,7077],{"class":76,"line":1726},[74,7078,2492],{"class":84},[74,7080,7081],{"class":76,"line":1740},[74,7082,2533],{"class":80},[74,7084,7085],{"class":76,"line":1745},[74,7086,2473],{"class":84},[74,7088,7089,7091,7093,7095,7097],{"class":76,"line":2540},[74,7090,2478],{"class":84},[74,7092,1130],{"class":80},[74,7094,2547],{"class":190},[74,7096,1130],{"class":80},[74,7098,1153],{"class":84},[74,7100,7101,7103],{"class":76,"line":2554},[74,7102,2557],{"class":80},[74,7104,1252],{"class":84},[74,7106,7107],{"class":76,"line":2562},[74,7108,2492],{"class":84},[74,7110,7111],{"class":76,"line":2567},[74,7112,2570],{"class":144},[74,7114,7115],{"class":76,"line":2573},[74,7116,2576],{"class":144},[74,7118,7119],{"class":76,"line":2579},[74,7120,2149],{"class":84},[74,7122,7123],{"class":76,"line":2584},[74,7124,1527],{"class":84},[27,7126,7127],{"start":94},[30,7128,2591,7129,2595],{},[235,7130,2594],{},[64,7132,7133],{"className":66,"code":2598,"language":68,"meta":69,"style":69},[71,7134,7135,7139,7147,7151,7163,7169,7173,7189,7195,7199,7211,7221],{"__ignoreMap":69},[74,7136,7137],{"class":76,"line":77},[74,7138,2605],{"class":144},[74,7140,7141,7143,7145],{"class":76,"line":94},[74,7142,88],{"class":80},[74,7144,1935],{"class":1925},[74,7146,1938],{"class":84},[74,7148,7149],{"class":76,"line":1141},[74,7150,1508],{"class":84},[74,7152,7153,7155,7157,7159,7161],{"class":76,"line":1156},[74,7154,1947],{"class":80},[74,7156,2202],{"class":84},[74,7158,131],{"class":80},[74,7160,277],{"class":134},[74,7162,1252],{"class":84},[74,7164,7165,7167],{"class":76,"line":1162},[74,7166,2634],{"class":80},[74,7168,2637],{"class":84},[74,7170,7171],{"class":76,"line":1176},[74,7172,1992],{"class":84},[74,7174,7175,7177,7179,7181,7183,7185,7187],{"class":76,"line":1182},[74,7176,2646],{"class":1925},[74,7178,2234],{"class":84},[74,7180,1130],{"class":80},[74,7182,1627],{"class":84},[74,7184,1130],{"class":80},[74,7186,2243],{"class":1925},[74,7188,2246],{"class":84},[74,7190,7191,7193],{"class":76,"line":1273},[74,7192,2251],{"class":84},[74,7194,2665],{"class":80},[74,7196,7197],{"class":76,"line":1279},[74,7198,2149],{"class":84},[74,7200,7201,7203,7205,7207,7209],{"class":76,"line":1291},[74,7202,2213],{"class":80},[74,7204,2216],{"class":84},[74,7206,996],{"class":80},[74,7208,532],{"class":134},[74,7210,2682],{"class":84},[74,7212,7213,7215,7217,7219],{"class":76,"line":1574},[74,7214,2265],{"class":1925},[74,7216,85],{"class":84},[74,7218,2270],{"class":190},[74,7220,2682],{"class":84},[74,7222,7223],{"class":76,"line":1579},[74,7224,1527],{"class":84},[19,7226,2699],{},[19,7228,2702],{},[19,7230,2705],{},[19,7232,2708],{},[64,7234,7235],{"className":66,"code":2711,"language":68,"meta":69,"style":69},[71,7236,7237,7243,7253,7261,7265,7269,7281,7287,7291,7295,7309,7323,7337,7351,7369,7383,7427,7431,7443,7447,7455,7459,7471],{"__ignoreMap":69},[74,7238,7239,7241],{"class":76,"line":77},[74,7240,1911],{"class":80},[74,7242,2296],{"class":190},[74,7244,7245,7247,7249,7251],{"class":76,"line":94},[74,7246,1919],{"class":80},[74,7248,1922],{"class":80},[74,7250,1926],{"class":1925},[74,7252,1252],{"class":84},[74,7254,7255,7257,7259],{"class":76,"line":1141},[74,7256,88],{"class":80},[74,7258,1935],{"class":1925},[74,7260,1938],{"class":84},[74,7262,7263],{"class":76,"line":1156},[74,7264,1508],{"class":84},[74,7266,7267],{"class":76,"line":1162},[74,7268,2746],{"class":144},[74,7270,7271,7273,7275,7277,7279],{"class":76,"line":1176},[74,7272,1947],{"class":80},[74,7274,2202],{"class":84},[74,7276,131],{"class":80},[74,7278,397],{"class":134},[74,7280,1252],{"class":84},[74,7282,7283,7285],{"class":76,"line":1182},[74,7284,2634],{"class":80},[74,7286,2637],{"class":84},[74,7288,7289],{"class":76,"line":1273},[74,7290,1992],{"class":84},[74,7292,7293],{"class":76,"line":1279},[74,7294,2773],{"class":144},[74,7296,7297,7299,7301,7303,7305,7307],{"class":76,"line":1291},[74,7298,2778],{"class":80},[74,7300,1360],{"class":84},[74,7302,131],{"class":80},[74,7304,277],{"class":134},[74,7306,141],{"class":84},[74,7308,2789],{"class":144},[74,7310,7311,7313,7315,7317,7319,7321],{"class":76,"line":1574},[74,7312,2778],{"class":80},[74,7314,2796],{"class":84},[74,7316,131],{"class":80},[74,7318,277],{"class":134},[74,7320,141],{"class":84},[74,7322,2805],{"class":144},[74,7324,7325,7327,7329,7331,7333,7335],{"class":76,"line":1579},[74,7326,2778],{"class":80},[74,7328,2812],{"class":84},[74,7330,131],{"class":80},[74,7332,277],{"class":134},[74,7334,141],{"class":84},[74,7336,2821],{"class":144},[74,7338,7339,7341,7343,7345,7347,7349],{"class":76,"line":1585},[74,7340,2826],{"class":84},[74,7342,131],{"class":80},[74,7344,1627],{"class":84},[74,7346,414],{"class":80},[74,7348,532],{"class":134},[74,7350,1252],{"class":84},[74,7352,7353,7355,7357,7359,7361,7363,7365,7367],{"class":76,"line":1590},[74,7354,2841],{"class":84},[74,7356,131],{"class":80},[74,7358,1627],{"class":84},[74,7360,670],{"class":80},[74,7362,532],{"class":134},[74,7364,414],{"class":80},[74,7366,532],{"class":134},[74,7368,1252],{"class":84},[74,7370,7371,7373,7375,7377,7379,7381],{"class":76,"line":1604},[74,7372,2860],{"class":84},[74,7374,131],{"class":80},[74,7376,1627],{"class":84},[74,7378,670],{"class":80},[74,7380,397],{"class":134},[74,7382,1252],{"class":84},[74,7384,7385,7387,7389,7391,7393,7395,7397,7399,7401,7403,7405,7407,7409,7411,7413,7415,7417,7419,7421,7423,7425],{"class":76,"line":1609},[74,7386,2460],{"class":80},[74,7388,1803],{"class":84},[74,7390,541],{"class":80},[74,7392,324],{"class":84},[74,7394,541],{"class":80},[74,7396,324],{"class":84},[74,7398,567],{"class":80},[74,7400,349],{"class":84},[74,7402,541],{"class":80},[74,7404,349],{"class":84},[74,7406,541],{"class":80},[74,7408,349],{"class":84},[74,7410,567],{"class":80},[74,7412,374],{"class":84},[74,7414,541],{"class":80},[74,7416,374],{"class":84},[74,7418,541],{"class":80},[74,7420,2909],{"class":84},[74,7422,2912],{"class":80},[74,7424,2915],{"class":84},[74,7426,2918],{"class":144},[74,7428,7429],{"class":76,"line":1615},[74,7430,2473],{"class":84},[74,7432,7433,7435,7437,7439,7441],{"class":76,"line":1636},[74,7434,2478],{"class":84},[74,7436,1130],{"class":80},[74,7438,1627],{"class":84},[74,7440,1130],{"class":80},[74,7442,1153],{"class":84},[74,7444,7445],{"class":76,"line":1641},[74,7446,2492],{"class":84},[74,7448,7449,7451,7453],{"class":76,"line":1655},[74,7450,2251],{"class":84},[74,7452,2254],{"class":80},[74,7454,1252],{"class":84},[74,7456,7457],{"class":76,"line":1660},[74,7458,2149],{"class":84},[74,7460,7461,7463,7465,7467,7469],{"class":76,"line":1689},[74,7462,2213],{"class":80},[74,7464,2957],{"class":84},[74,7466,996],{"class":80},[74,7468,2962],{"class":134},[74,7470,2682],{"class":84},[74,7472,7473],{"class":76,"line":1694},[74,7474,1527],{"class":84},[27,7476,7477],{"start":1141},[30,7478,2973],{},[64,7480,7481],{"className":66,"code":2976,"language":68,"meta":69,"style":69},[71,7482,7483,7487,7513,7517,7529,7533,7537,7547,7553,7557,7569,7573,7579,7583,7595,7603],{"__ignoreMap":69},[74,7484,7485],{"class":76,"line":77},[74,7486,2983],{"class":144},[74,7488,7489,7491,7493,7495,7497,7499,7501,7503,7505,7507,7509,7511],{"class":76,"line":94},[74,7490,2988],{"class":80},[74,7492,85],{"class":84},[74,7494,88],{"class":80},[74,7496,2995],{"class":84},[74,7498,131],{"class":80},[74,7500,277],{"class":134},[74,7502,3002],{"class":84},[74,7504,996],{"class":80},[74,7506,532],{"class":134},[74,7508,3002],{"class":84},[74,7510,2254],{"class":80},[74,7512,91],{"class":84},[74,7514,7515],{"class":76,"line":1141},[74,7516,1508],{"class":84},[74,7518,7519,7521,7523,7525,7527],{"class":76,"line":1156},[74,7520,1513],{"class":84},[74,7522,1130],{"class":80},[74,7524,527],{"class":84},[74,7526,1130],{"class":80},[74,7528,1153],{"class":84},[74,7530,7531],{"class":76,"line":1162},[74,7532,1527],{"class":84},[74,7534,7535],{"class":76,"line":1176},[74,7536,3037],{"class":144},[74,7538,7539,7541,7543,7545],{"class":76,"line":1182},[74,7540,88],{"class":80},[74,7542,2995],{"class":84},[74,7544,131],{"class":80},[74,7546,3048],{"class":134},[74,7548,7549,7551],{"class":76,"line":1273},[74,7550,2988],{"class":80},[74,7552,3055],{"class":84},[74,7554,7555],{"class":76,"line":1279},[74,7556,1508],{"class":84},[74,7558,7559,7561,7563,7565,7567],{"class":76,"line":1291},[74,7560,3064],{"class":80},[74,7562,3067],{"class":84},[74,7564,1672],{"class":80},[74,7566,532],{"class":134},[74,7568,91],{"class":84},[74,7570,7571],{"class":76,"line":1574},[74,7572,1992],{"class":84},[74,7574,7575,7577],{"class":76,"line":1579},[74,7576,3082],{"class":80},[74,7578,1252],{"class":84},[74,7580,7581],{"class":76,"line":1585},[74,7582,2149],{"class":84},[74,7584,7585,7587,7589,7591,7593],{"class":76,"line":1590},[74,7586,1513],{"class":84},[74,7588,1130],{"class":80},[74,7590,527],{"class":84},[74,7592,1130],{"class":80},[74,7594,1153],{"class":84},[74,7596,7597,7599,7601],{"class":76,"line":1604},[74,7598,3105],{"class":84},[74,7600,2254],{"class":80},[74,7602,1252],{"class":84},[74,7604,7605],{"class":76,"line":1609},[74,7606,1527],{"class":84},[19,7608,3116],{},[64,7610,7611],{"className":66,"code":3119,"language":68,"meta":69,"style":69},[71,7612,7613,7619,7629,7637,7641,7645,7649,7675,7679,7683,7687,7727,7731,7743,7747,7751,7755,7767,7771,7775],{"__ignoreMap":69},[74,7614,7615,7617],{"class":76,"line":77},[74,7616,1911],{"class":80},[74,7618,1914],{"class":190},[74,7620,7621,7623,7625,7627],{"class":76,"line":94},[74,7622,1919],{"class":80},[74,7624,1922],{"class":80},[74,7626,1926],{"class":1925},[74,7628,1252],{"class":84},[74,7630,7631,7633,7635],{"class":76,"line":1141},[74,7632,88],{"class":80},[74,7634,1935],{"class":1925},[74,7636,1938],{"class":84},[74,7638,7639],{"class":76,"line":1156},[74,7640,1508],{"class":84},[74,7642,7643],{"class":76,"line":1162},[74,7644,3154],{"class":144},[74,7646,7647],{"class":76,"line":1176},[74,7648,3159],{"class":144},[74,7650,7651,7653,7655,7657,7659,7661,7663,7665,7667,7669,7671,7673],{"class":76,"line":1182},[74,7652,3164],{"class":80},[74,7654,85],{"class":84},[74,7656,88],{"class":80},[74,7658,2995],{"class":84},[74,7660,131],{"class":80},[74,7662,303],{"class":134},[74,7664,3177],{"class":84},[74,7666,1550],{"class":80},[74,7668,397],{"class":134},[74,7670,3177],{"class":84},[74,7672,2254],{"class":80},[74,7674,91],{"class":84},[74,7676,7677],{"class":76,"line":1273},[74,7678,1992],{"class":84},[74,7680,7681],{"class":76,"line":1279},[74,7682,3196],{"class":144},[74,7684,7685],{"class":76,"line":1291},[74,7686,3201],{"class":144},[74,7688,7689,7691,7693,7695,7697,7699,7701,7703,7705,7707,7709,7711,7713,7715,7717,7719,7721,7723,7725],{"class":76,"line":1574},[74,7690,2460],{"class":80},[74,7692,3067],{"class":84},[74,7694,414],{"class":80},[74,7696,455],{"class":134},[74,7698,2912],{"class":80},[74,7700,277],{"class":134},[74,7702,3218],{"class":80},[74,7704,2995],{"class":84},[74,7706,414],{"class":80},[74,7708,532],{"class":134},[74,7710,2912],{"class":80},[74,7712,455],{"class":134},[74,7714,3218],{"class":80},[74,7716,2995],{"class":84},[74,7718,670],{"class":80},[74,7720,532],{"class":134},[74,7722,2912],{"class":80},[74,7724,455],{"class":134},[74,7726,91],{"class":84},[74,7728,7729],{"class":76,"line":1579},[74,7730,2473],{"class":84},[74,7732,7733,7735,7737,7739,7741],{"class":76,"line":1585},[74,7734,2478],{"class":84},[74,7736,1130],{"class":80},[74,7738,3255],{"class":190},[74,7740,1130],{"class":80},[74,7742,1153],{"class":84},[74,7744,7745],{"class":76,"line":1590},[74,7746,2492],{"class":84},[74,7748,7749],{"class":76,"line":1604},[74,7750,2533],{"class":80},[74,7752,7753],{"class":76,"line":1609},[74,7754,2473],{"class":84},[74,7756,7757,7759,7761,7763,7765],{"class":76,"line":1615},[74,7758,2478],{"class":84},[74,7760,1130],{"class":80},[74,7762,527],{"class":84},[74,7764,1130],{"class":80},[74,7766,1153],{"class":84},[74,7768,7769],{"class":76,"line":1636},[74,7770,2492],{"class":84},[74,7772,7773],{"class":76,"line":1641},[74,7774,2149],{"class":84},[74,7776,7777],{"class":76,"line":1655},[74,7778,1527],{"class":84},[19,7780,3298],{},[64,7782,7783],{"className":66,"code":3301,"language":68,"meta":69,"style":69},[71,7784,7785,7791,7801,7809,7813,7839,7843,7869,7873,7883,7887,7895,7899],{"__ignoreMap":69},[74,7786,7787,7789],{"class":76,"line":77},[74,7788,1911],{"class":80},[74,7790,1914],{"class":190},[74,7792,7793,7795,7797,7799],{"class":76,"line":94},[74,7794,1919],{"class":80},[74,7796,1922],{"class":80},[74,7798,1926],{"class":1925},[74,7800,1252],{"class":84},[74,7802,7803,7805,7807],{"class":76,"line":1141},[74,7804,88],{"class":80},[74,7806,1935],{"class":1925},[74,7808,1938],{"class":84},[74,7810,7811],{"class":76,"line":1156},[74,7812,1508],{"class":84},[74,7814,7815,7817,7819,7821,7823,7825,7827,7829,7831,7833,7835,7837],{"class":76,"line":1162},[74,7816,3164],{"class":80},[74,7818,1620],{"class":84},[74,7820,88],{"class":80},[74,7822,2995],{"class":84},[74,7824,131],{"class":80},[74,7826,277],{"class":134},[74,7828,3002],{"class":84},[74,7830,996],{"class":80},[74,7832,532],{"class":134},[74,7834,3002],{"class":84},[74,7836,2254],{"class":80},[74,7838,91],{"class":84},[74,7840,7841],{"class":76,"line":1176},[74,7842,1992],{"class":84},[74,7844,7845,7847,7849,7851,7853,7855,7857,7859,7861,7863,7865,7867],{"class":76,"line":1182},[74,7846,3366],{"class":80},[74,7848,1620],{"class":84},[74,7850,88],{"class":80},[74,7852,3373],{"class":84},[74,7854,131],{"class":80},[74,7856,277],{"class":134},[74,7858,3380],{"class":84},[74,7860,996],{"class":80},[74,7862,532],{"class":134},[74,7864,3380],{"class":84},[74,7866,2254],{"class":80},[74,7868,91],{"class":84},[74,7870,7871],{"class":76,"line":1273},[74,7872,2473],{"class":84},[74,7874,7875,7877,7879,7881],{"class":76,"line":1279},[74,7876,2478],{"class":84},[74,7878,1130],{"class":80},[74,7880,3403],{"class":190},[74,7882,1252],{"class":84},[74,7884,7885],{"class":76,"line":1291},[74,7886,2492],{"class":84},[74,7888,7889,7891,7893],{"class":76,"line":1574},[74,7890,3414],{"class":84},[74,7892,1130],{"class":80},[74,7894,1153],{"class":84},[74,7896,7897],{"class":76,"line":1579},[74,7898,2149],{"class":84},[74,7900,7901],{"class":76,"line":1585},[74,7902,1527],{"class":84},[19,7904,3429],{},[64,7906,7907],{"className":66,"code":3432,"language":68,"meta":69,"style":69},[71,7908,7909,7915,7925,7933,7937,7963,7967,7991,7995,8033,8037,8045,8049],{"__ignoreMap":69},[74,7910,7911,7913],{"class":76,"line":77},[74,7912,1911],{"class":80},[74,7914,2296],{"class":190},[74,7916,7917,7919,7921,7923],{"class":76,"line":94},[74,7918,1919],{"class":80},[74,7920,1922],{"class":80},[74,7922,1926],{"class":1925},[74,7924,1252],{"class":84},[74,7926,7927,7929,7931],{"class":76,"line":1141},[74,7928,88],{"class":80},[74,7930,1935],{"class":1925},[74,7932,1938],{"class":84},[74,7934,7935],{"class":76,"line":1156},[74,7936,1508],{"class":84},[74,7938,7939,7941,7943,7945,7947,7949,7951,7953,7955,7957,7959,7961],{"class":76,"line":1162},[74,7940,3164],{"class":80},[74,7942,85],{"class":84},[74,7944,88],{"class":80},[74,7946,2995],{"class":84},[74,7948,131],{"class":80},[74,7950,303],{"class":134},[74,7952,3002],{"class":84},[74,7954,996],{"class":80},[74,7956,532],{"class":134},[74,7958,3002],{"class":84},[74,7960,2254],{"class":80},[74,7962,91],{"class":84},[74,7964,7965],{"class":76,"line":1176},[74,7966,1992],{"class":84},[74,7968,7969,7971,7973,7975,7977,7979,7981,7983,7985,7987,7989],{"class":76,"line":1182},[74,7970,3366],{"class":80},[74,7972,85],{"class":84},[74,7974,88],{"class":80},[74,7976,3373],{"class":84},[74,7978,131],{"class":80},[74,7980,303],{"class":134},[74,7982,3380],{"class":84},[74,7984,1550],{"class":80},[74,7986,3513],{"class":84},[74,7988,2254],{"class":80},[74,7990,91],{"class":84},[74,7992,7993],{"class":76,"line":1273},[74,7994,2473],{"class":84},[74,7996,7997,7999,8001,8003,8005,8007,8009,8011,8013,8015,8017,8019,8021,8023,8025,8027,8029,8031],{"class":76,"line":1279},[74,7998,2478],{"class":84},[74,8000,1130],{"class":80},[74,8002,553],{"class":84},[74,8004,1130],{"class":80},[74,8006,3403],{"class":190},[74,8008,1130],{"class":80},[74,8010,527],{"class":84},[74,8012,1130],{"class":80},[74,8014,3542],{"class":190},[74,8016,1130],{"class":80},[74,8018,527],{"class":84},[74,8020,541],{"class":80},[74,8022,553],{"class":84},[74,8024,1130],{"class":80},[74,8026,3555],{"class":190},[74,8028,1192],{"class":134},[74,8030,3555],{"class":190},[74,8032,1252],{"class":84},[74,8034,8035],{"class":76,"line":1291},[74,8036,2492],{"class":84},[74,8038,8039,8041,8043],{"class":76,"line":1574},[74,8040,3414],{"class":84},[74,8042,1130],{"class":80},[74,8044,1153],{"class":84},[74,8046,8047],{"class":76,"line":1579},[74,8048,2149],{"class":84},[74,8050,8051],{"class":76,"line":1585},[74,8052,1527],{"class":84},[44,8054,3585],{"id":3584},[27,8056,8057],{},[30,8058,3590],{},[19,8060,3593],{},[1093,8062,8063,8065,8067],{},[30,8064,3598],{},[30,8066,3601],{},[30,8068,3604],{},[27,8070,8071,8073],{"start":94},[30,8072,3609],{},[30,8074,3612],{},[19,8076,3615],{},[64,8078,8079],{"className":66,"code":3618,"language":68,"meta":69,"style":69},[71,8080,8081,8089,8093,8105,8113,8125,8137,8149,8155,8169],{"__ignoreMap":69},[74,8082,8083,8085,8087],{"class":76,"line":77},[74,8084,88],{"class":80},[74,8086,1935],{"class":1925},[74,8088,1938],{"class":84},[74,8090,8091],{"class":76,"line":94},[74,8092,1508],{"class":84},[74,8094,8095,8097,8099,8101,8103],{"class":76,"line":1141},[74,8096,1513],{"class":84},[74,8098,1130],{"class":80},[74,8100,3641],{"class":190},[74,8102,1130],{"class":80},[74,8104,1153],{"class":84},[74,8106,8107,8109,8111],{"class":76,"line":1156},[74,8108,3650],{"class":80},[74,8110,3653],{"class":1925},[74,8112,1252],{"class":84},[74,8114,8115,8117,8119,8121,8123],{"class":76,"line":1162},[74,8116,1513],{"class":84},[74,8118,1130],{"class":80},[74,8120,3664],{"class":190},[74,8122,1130],{"class":80},[74,8124,1153],{"class":84},[74,8126,8127,8129,8131,8133,8135],{"class":76,"line":1176},[74,8128,1513],{"class":84},[74,8130,1130],{"class":80},[74,8132,3677],{"class":190},[74,8134,1130],{"class":80},[74,8136,1153],{"class":84},[74,8138,8139,8141,8143,8145,8147],{"class":76,"line":1182},[74,8140,1513],{"class":84},[74,8142,1130],{"class":80},[74,8144,3690],{"class":190},[74,8146,1130],{"class":80},[74,8148,1153],{"class":84},[74,8150,8151,8153],{"class":76,"line":1273},[74,8152,3699],{"class":1925},[74,8154,3702],{"class":84},[74,8156,8157,8159,8161,8163,8165,8167],{"class":76,"line":1279},[74,8158,1513],{"class":84},[74,8160,1130],{"class":80},[74,8162,3711],{"class":190},[74,8164,1130],{"class":80},[74,8166,1200],{"class":84},[74,8168,3718],{"class":144},[74,8170,8171],{"class":76,"line":1291},[74,8172,1527],{"class":84},[14,8174,3726],{"id":3725},[44,8176,3730],{"id":3729},[27,8178,8179],{},[30,8180,3735],{},[223,8182,8183,8191],{},[226,8184,8185],{},[229,8186,8187,8189],{},[232,8188,3744],{},[232,8190,3747],{},[270,8192,8193,8203,8211],{},[229,8194,8195,8199],{},[275,8196,3754,8197,141],{},[74,8198,3757],{},[275,8200,3760,8201,3763],{},[74,8202,527],{},[229,8204,8205,8209],{},[275,8206,3754,8207,3770],{},[74,8208,3757],{},[275,8210,3773],{},[229,8212,8213,8217],{},[275,8214,3754,8215,3770],{},[74,8216],{},[275,8218,3782,8219,3785],{},[74,8220],{},[27,8222,8223],{"start":94},[30,8224,3790],{},[1093,8226,8227],{},[30,8228,3795],{},[64,8230,8231],{"className":66,"code":3798,"language":68,"meta":69,"style":69},[71,8232,8233,8239],{"__ignoreMap":69},[74,8234,8235,8237],{"class":76,"line":77},[74,8236,81],{"class":80},[74,8238,3807],{"class":84},[74,8240,8241,8243,8245,8247],{"class":76,"line":94},[74,8242,81],{"class":80},[74,8244,3814],{"class":84},[74,8246,277],{"class":134},[74,8248,3819],{"class":84},[1093,8250,8251],{},[30,8252,3824],{},[64,8254,8255],{"className":66,"code":3827,"language":68,"meta":69,"style":69},[71,8256,8257,8261,8273,8277],{"__ignoreMap":69},[74,8258,8259],{"class":76,"line":77},[74,8260,3834],{"class":144},[74,8262,8263,8265,8267,8269,8271],{"class":76,"line":94},[74,8264,1331],{"class":84},[74,8266,1130],{"class":80},[74,8268,3843],{"class":84},[74,8270,1130],{"class":80},[74,8272,1153],{"class":84},[74,8274,8275],{"class":76,"line":1141},[74,8276,3852],{"class":144},[74,8278,8279,8281,8283,8285,8287,8289,8291,8293,8295,8297,8299],{"class":76,"line":1156},[74,8280,1331],{"class":84},[74,8282,1130],{"class":80},[74,8284,85],{"class":84},[74,8286,88],{"class":80},[74,8288,515],{"class":84},[74,8290,439],{"class":80},[74,8292,3869],{"class":84},[74,8294,277],{"class":134},[74,8296,1026],{"class":84},[74,8298,1130],{"class":80},[74,8300,1153],{"class":84},[19,8302,3880],{},[1093,8304,8305],{},[30,8306,3885],{},[64,8308,8309],{"className":66,"code":3888,"language":68,"meta":69,"style":69},[71,8310,8311,8317,8327,8335,8339,8373,8385,8411,8415,8425,8429,8437,8441,8445,8457,8465],{"__ignoreMap":69},[74,8312,8313,8315],{"class":76,"line":77},[74,8314,1911],{"class":80},[74,8316,1914],{"class":190},[74,8318,8319,8321,8323,8325],{"class":76,"line":94},[74,8320,1919],{"class":80},[74,8322,1922],{"class":80},[74,8324,1926],{"class":1925},[74,8326,1252],{"class":84},[74,8328,8329,8331,8333],{"class":76,"line":1141},[74,8330,88],{"class":80},[74,8332,1935],{"class":1925},[74,8334,1938],{"class":84},[74,8336,8337],{"class":76,"line":1156},[74,8338,1508],{"class":84},[74,8340,8341,8343,8345,8347,8349,8351,8353,8355,8357,8359,8361,8363,8365,8367,8369,8371],{"class":76,"line":1162},[74,8342,1947],{"class":80},[74,8344,3925],{"class":84},[74,8346,405],{"class":134},[74,8348,1026],{"class":84},[74,8350,131],{"class":80},[74,8352,982],{"class":84},[74,8354,3936],{"class":134},[74,8356,464],{"class":84},[74,8358,3941],{"class":134},[74,8360,464],{"class":84},[74,8362,1684],{"class":134},[74,8364,464],{"class":84},[74,8366,3950],{"class":134},[74,8368,464],{"class":84},[74,8370,3955],{"class":134},[74,8372,3958],{"class":84},[74,8374,8375,8377,8379,8381,8383],{"class":76,"line":1176},[74,8376,1947],{"class":80},[74,8378,3965],{"class":84},[74,8380,131],{"class":80},[74,8382,277],{"class":134},[74,8384,1252],{"class":84},[74,8386,8387,8389,8391,8393,8395,8397,8399,8401,8403,8405,8407,8409],{"class":76,"line":1182},[74,8388,3164],{"class":80},[74,8390,1620],{"class":84},[74,8392,88],{"class":80},[74,8394,2995],{"class":84},[74,8396,131],{"class":80},[74,8398,277],{"class":134},[74,8400,3002],{"class":84},[74,8402,996],{"class":80},[74,8404,405],{"class":134},[74,8406,3002],{"class":84},[74,8408,2254],{"class":80},[74,8410,91],{"class":84},[74,8412,8413],{"class":76,"line":1273},[74,8414,1992],{"class":84},[74,8416,8417,8419,8421,8423],{"class":76,"line":1279},[74,8418,2460],{"class":80},[74,8420,4008],{"class":84},[74,8422,996],{"class":80},[74,8424,4013],{"class":84},[74,8426,8427],{"class":76,"line":1291},[74,8428,2473],{"class":84},[74,8430,8431,8433,8435],{"class":76,"line":1574},[74,8432,4022],{"class":84},[74,8434,131],{"class":80},[74,8436,4027],{"class":84},[74,8438,8439],{"class":76,"line":1579},[74,8440,2492],{"class":84},[74,8442,8443],{"class":76,"line":1585},[74,8444,2149],{"class":84},[74,8446,8447,8449,8451,8453,8455],{"class":76,"line":1590},[74,8448,1513],{"class":84},[74,8450,1130],{"class":80},[74,8452,4044],{"class":84},[74,8454,1130],{"class":80},[74,8456,1153],{"class":84},[74,8458,8459,8461,8463],{"class":76,"line":1604},[74,8460,4053],{"class":80},[74,8462,4056],{"class":134},[74,8464,1252],{"class":84},[74,8466,8467],{"class":76,"line":1609},[74,8468,1527],{"class":84},[1093,8470,8471],{},[30,8472,4067],{},[64,8474,8475],{"className":66,"code":4070,"language":68,"meta":69,"style":69},[71,8476,8477,8481,8487,8497,8505,8509,8543,8557,8583,8593,8597,8601,8611,8619,8627,8631,8639,8647,8651,8655,8681,8685,8699,8703,8713,8721],{"__ignoreMap":69},[74,8478,8479],{"class":76,"line":77},[74,8480,4077],{"class":144},[74,8482,8483,8485],{"class":76,"line":94},[74,8484,1911],{"class":80},[74,8486,1914],{"class":190},[74,8488,8489,8491,8493,8495],{"class":76,"line":1141},[74,8490,1919],{"class":80},[74,8492,1922],{"class":80},[74,8494,1926],{"class":1925},[74,8496,1252],{"class":84},[74,8498,8499,8501,8503],{"class":76,"line":1156},[74,8500,88],{"class":80},[74,8502,1935],{"class":1925},[74,8504,1938],{"class":84},[74,8506,8507],{"class":76,"line":1162},[74,8508,1508],{"class":84},[74,8510,8511,8513,8515,8517,8519,8521,8523,8525,8527,8529,8531,8533,8535,8537,8539,8541],{"class":76,"line":1176},[74,8512,4110],{"class":80},[74,8514,3925],{"class":84},[74,8516,405],{"class":134},[74,8518,1026],{"class":84},[74,8520,131],{"class":80},[74,8522,982],{"class":84},[74,8524,303],{"class":134},[74,8526,464],{"class":84},[74,8528,163],{"class":134},[74,8530,464],{"class":84},[74,8532,157],{"class":134},[74,8534,464],{"class":84},[74,8536,379],{"class":134},[74,8538,464],{"class":84},[74,8540,405],{"class":134},[74,8542,3958],{"class":84},[74,8544,8545,8547,8549,8551,8553,8555],{"class":76,"line":1182},[74,8546,4110],{"class":80},[74,8548,4147],{"class":84},[74,8550,131],{"class":80},[74,8552,277],{"class":134},[74,8554,141],{"class":84},[74,8556,4156],{"class":144},[74,8558,8559,8561,8563,8565,8567,8569,8571,8573,8575,8577,8579,8581],{"class":76,"line":1273},[74,8560,4110],{"class":80},[74,8562,4163],{"class":84},[74,8564,4166],{"class":80},[74,8566,4169],{"class":84},[74,8568,4172],{"class":80},[74,8570,3814],{"class":84},[74,8572,277],{"class":134},[74,8574,4179],{"class":84},[74,8576,618],{"class":80},[74,8578,303],{"class":134},[74,8580,141],{"class":84},[74,8582,4188],{"class":144},[74,8584,8585,8587,8589,8591],{"class":76,"line":1279},[74,8586,4193],{"class":80},[74,8588,4196],{"class":84},[74,8590,996],{"class":80},[74,8592,4201],{"class":84},[74,8594,8595],{"class":76,"line":1291},[74,8596,4206],{"class":84},[74,8598,8599],{"class":76,"line":1574},[74,8600,4211],{"class":144},[74,8602,8603,8605,8607,8609],{"class":76,"line":1579},[74,8604,1947],{"class":80},[74,8606,4218],{"class":84},[74,8608,131],{"class":80},[74,8610,4223],{"class":84},[74,8612,8613,8615,8617],{"class":76,"line":1585},[74,8614,4228],{"class":84},[74,8616,131],{"class":80},[74,8618,4233],{"class":84},[74,8620,8621,8623,8625],{"class":76,"line":1590},[74,8622,4238],{"class":84},[74,8624,131],{"class":80},[74,8626,4243],{"class":84},[74,8628,8629],{"class":76,"line":1604},[74,8630,4248],{"class":144},[74,8632,8633,8635,8637],{"class":76,"line":1609},[74,8634,4253],{"class":84},[74,8636,2254],{"class":80},[74,8638,1252],{"class":84},[74,8640,8641,8643,8645],{"class":76,"line":1615},[74,8642,4262],{"class":84},[74,8644,4265],{"class":80},[74,8646,1252],{"class":84},[74,8648,8649],{"class":76,"line":1636},[74,8650,4272],{"class":84},[74,8652,8653],{"class":76,"line":1641},[74,8654,4277],{"class":144},[74,8656,8657,8659,8661,8663,8665,8667,8669,8671,8673,8675,8677,8679],{"class":76,"line":1655},[74,8658,4282],{"class":80},[74,8660,1620],{"class":84},[74,8662,88],{"class":80},[74,8664,2995],{"class":84},[74,8666,131],{"class":80},[74,8668,277],{"class":134},[74,8670,3002],{"class":84},[74,8672,996],{"class":80},[74,8674,405],{"class":134},[74,8676,3002],{"class":84},[74,8678,2254],{"class":80},[74,8680,91],{"class":84},[74,8682,8683],{"class":76,"line":1660},[74,8684,4206],{"class":84},[74,8686,8687,8689,8691,8693,8695,8697],{"class":76,"line":1689},[74,8688,1513],{"class":84},[74,8690,1130],{"class":80},[74,8692,4317],{"class":84},[74,8694,1130],{"class":80},[74,8696,4322],{"class":190},[74,8698,1252],{"class":84},[74,8700,8701],{"class":76,"line":1694},[74,8702,4272],{"class":84},[74,8704,8705,8707,8709,8711],{"class":76,"line":1711},[74,8706,4333],{"class":1925},[74,8708,85],{"class":84},[74,8710,2270],{"class":190},[74,8712,2682],{"class":84},[74,8714,8715,8717,8719],{"class":76,"line":1716},[74,8716,4344],{"class":80},[74,8718,4056],{"class":134},[74,8720,1252],{"class":84},[74,8722,8723],{"class":76,"line":1721},[74,8724,1527],{"class":84},[1093,8726,8727],{},[30,8728,4357],{},[64,8730,8731],{"className":66,"code":4360,"language":68,"meta":69,"style":69},[71,8732,8733,8737,8743,8753,8761,8765,8815,8827,8853,8857,8871,8875,8879,8883,8913,8917,8921,8955,8959,8963,8979,8983,8993,9007,9021,9025,9029,9033,9045,9071,9075,9089,9093,9101],{"__ignoreMap":69},[74,8734,8735],{"class":76,"line":77},[74,8736,4367],{"class":144},[74,8738,8739,8741],{"class":76,"line":94},[74,8740,1911],{"class":80},[74,8742,1914],{"class":190},[74,8744,8745,8747,8749,8751],{"class":76,"line":1141},[74,8746,1919],{"class":80},[74,8748,1922],{"class":80},[74,8750,1926],{"class":1925},[74,8752,1252],{"class":84},[74,8754,8755,8757,8759],{"class":76,"line":1156},[74,8756,88],{"class":80},[74,8758,1935],{"class":1925},[74,8760,1938],{"class":84},[74,8762,8763],{"class":76,"line":1162},[74,8764,1508],{"class":84},[74,8766,8767,8769,8771,8773,8775,8777,8779,8781,8783,8785,8787,8789,8791,8793,8795,8797,8799,8801,8803,8805,8807,8809,8811,8813],{"class":76,"line":1176},[74,8768,1947],{"class":80},[74,8770,3925],{"class":84},[74,8772,506],{"class":134},[74,8774,4406],{"class":84},[74,8776,131],{"class":80},[74,8778,4411],{"class":84},[74,8780,379],{"class":134},[74,8782,464],{"class":84},[74,8784,163],{"class":134},[74,8786,464],{"class":84},[74,8788,481],{"class":134},[74,8790,464],{"class":84},[74,8792,277],{"class":134},[74,8794,464],{"class":84},[74,8796,405],{"class":134},[74,8798,464],{"class":84},[74,8800,455],{"class":134},[74,8802,464],{"class":84},[74,8804,303],{"class":134},[74,8806,464],{"class":84},[74,8808,157],{"class":134},[74,8810,464],{"class":84},[74,8812,506],{"class":134},[74,8814,3958],{"class":84},[74,8816,8817,8819,8821,8823,8825],{"class":76,"line":1182},[74,8818,1513],{"class":84},[74,8820,1130],{"class":80},[74,8822,4456],{"class":190},[74,8824,1130],{"class":80},[74,8826,1153],{"class":84},[74,8828,8829,8831,8833,8835,8837,8839,8841,8843,8845,8847,8849,8851],{"class":76,"line":1273},[74,8830,3164],{"class":80},[74,8832,1620],{"class":84},[74,8834,88],{"class":80},[74,8836,2995],{"class":84},[74,8838,131],{"class":80},[74,8840,277],{"class":134},[74,8842,3002],{"class":84},[74,8844,996],{"class":80},[74,8846,506],{"class":134},[74,8848,3002],{"class":84},[74,8850,2254],{"class":80},[74,8852,91],{"class":84},[74,8854,8855],{"class":76,"line":1279},[74,8856,1992],{"class":84},[74,8858,8859,8861,8863,8865,8867,8869],{"class":76,"line":1291},[74,8860,3414],{"class":84},[74,8862,1130],{"class":80},[74,8864,4317],{"class":84},[74,8866,1130],{"class":80},[74,8868,4322],{"class":190},[74,8870,1252],{"class":84},[74,8872,8873],{"class":76,"line":1574},[74,8874,2149],{"class":84},[74,8876,8877],{"class":76,"line":1579},[74,8878,4513],{"class":144},[74,8880,8881],{"class":76,"line":1585},[74,8882,4518],{"class":144},[74,8884,8885,8887,8889,8891,8893,8895,8897,8899,8901,8903,8905,8907,8909,8911],{"class":76,"line":1590},[74,8886,3164],{"class":80},[74,8888,1620],{"class":84},[74,8890,88],{"class":80},[74,8892,2995],{"class":84},[74,8894,131],{"class":80},[74,8896,277],{"class":134},[74,8898,3002],{"class":84},[74,8900,996],{"class":80},[74,8902,506],{"class":134},[74,8904,618],{"class":80},[74,8906,303],{"class":134},[74,8908,3002],{"class":84},[74,8910,2254],{"class":80},[74,8912,91],{"class":84},[74,8914,8915],{"class":76,"line":1604},[74,8916,1992],{"class":84},[74,8918,8919],{"class":76,"line":1609},[74,8920,4557],{"class":144},[74,8922,8923,8925,8927,8929,8931,8933,8935,8937,8939,8941,8943,8945,8947,8949,8951,8953],{"class":76,"line":1615},[74,8924,3366],{"class":80},[74,8926,1620],{"class":84},[74,8928,88],{"class":80},[74,8930,3373],{"class":84},[74,8932,131],{"class":80},[74,8934,277],{"class":134},[74,8936,3380],{"class":84},[74,8938,996],{"class":80},[74,8940,506],{"class":134},[74,8942,618],{"class":80},[74,8944,527],{"class":84},[74,8946,618],{"class":80},[74,8948,303],{"class":134},[74,8950,3380],{"class":84},[74,8952,2254],{"class":80},[74,8954,91],{"class":84},[74,8956,8957],{"class":76,"line":1636},[74,8958,2473],{"class":84},[74,8960,8961],{"class":76,"line":1641},[74,8962,4600],{"class":144},[74,8964,8965,8967,8969,8971,8973,8975,8977],{"class":76,"line":1655},[74,8966,4605],{"class":80},[74,8968,4608],{"class":84},[74,8970,1046],{"class":80},[74,8972,4613],{"class":84},[74,8974,567],{"class":80},[74,8976,303],{"class":134},[74,8978,4620],{"class":84},[74,8980,8981],{"class":76,"line":1660},[74,8982,4625],{"class":84},[74,8984,8985,8987,8989,8991],{"class":76,"line":1689},[74,8986,4630],{"class":80},[74,8988,4218],{"class":84},[74,8990,131],{"class":80},[74,8992,4637],{"class":84},[74,8994,8995,8997,8999,9001,9003,9005],{"class":76,"line":1694},[74,8996,4642],{"class":84},[74,8998,131],{"class":80},[74,9000,4613],{"class":84},[74,9002,567],{"class":80},[74,9004,303],{"class":134},[74,9006,4653],{"class":84},[74,9008,9009,9011,9013,9015,9017,9019],{"class":76,"line":1711},[74,9010,4658],{"class":84},[74,9012,567],{"class":80},[74,9014,303],{"class":134},[74,9016,1026],{"class":84},[74,9018,131],{"class":80},[74,9020,4243],{"class":84},[74,9022,9023],{"class":76,"line":1716},[74,9024,4673],{"class":84},[74,9026,9027],{"class":76,"line":1721},[74,9028,2492],{"class":84},[74,9030,9031],{"class":76,"line":1726},[74,9032,2149],{"class":84},[74,9034,9035,9037,9039,9041,9043],{"class":76,"line":1740},[74,9036,1513],{"class":84},[74,9038,1130],{"class":80},[74,9040,4690],{"class":190},[74,9042,1130],{"class":80},[74,9044,1153],{"class":84},[74,9046,9047,9049,9051,9053,9055,9057,9059,9061,9063,9065,9067,9069],{"class":76,"line":1745},[74,9048,3164],{"class":80},[74,9050,1620],{"class":84},[74,9052,88],{"class":80},[74,9054,2995],{"class":84},[74,9056,131],{"class":80},[74,9058,277],{"class":134},[74,9060,3002],{"class":84},[74,9062,996],{"class":80},[74,9064,506],{"class":134},[74,9066,3002],{"class":84},[74,9068,2254],{"class":80},[74,9070,91],{"class":84},[74,9072,9073],{"class":76,"line":2540},[74,9074,1992],{"class":84},[74,9076,9077,9079,9081,9083,9085,9087],{"class":76,"line":2554},[74,9078,3414],{"class":84},[74,9080,1130],{"class":80},[74,9082,4317],{"class":84},[74,9084,1130],{"class":80},[74,9086,4322],{"class":190},[74,9088,1252],{"class":84},[74,9090,9091],{"class":76,"line":2562},[74,9092,2149],{"class":84},[74,9094,9095,9097,9099],{"class":76,"line":2567},[74,9096,4053],{"class":80},[74,9098,4056],{"class":134},[74,9100,1252],{"class":84},[74,9102,9103],{"class":76,"line":2573},[74,9104,1527],{"class":84},[44,9106,4758],{"id":4757},[27,9108,9109],{},[30,9110,4763],{},[223,9112,9113,9121],{},[226,9114,9115],{},[229,9116,9117,9119],{},[232,9118,4772],{},[232,9120,3744],{},[270,9122,9123,9131,9139,9147,9155],{},[229,9124,9125,9127],{},[275,9126,303],{},[275,9128,4783,9129,141],{},[74,9130,4786],{},[229,9132,9133,9135],{},[275,9134,163],{},[275,9136,4783,9137,4795],{},[74,9138,4786],{},[229,9140,9141,9143],{},[275,9142,157],{},[275,9144,4783,9145,4804],{},[74,9146,4786],{},[229,9148,9149,9151],{},[275,9150,379],{},[275,9152,4811,9153,4804],{},[74,9154,4786],{},[229,9156,9157,9159],{},[275,9158,4818],{},[275,9160],{},[27,9162,9163],{"start":94},[30,9164,4825],{},[1093,9166,9167,9169],{},[30,9168,4830],{},[30,9170,4833],{},[19,9172,4836],{},[64,9174,9175],{"className":66,"code":4839,"language":68,"meta":69,"style":69},[71,9176,9177,9185,9189,9205,9209,9225,9241,9245,9269,9301],{"__ignoreMap":69},[74,9178,9179,9181,9183],{"class":76,"line":77},[74,9180,88],{"class":80},[74,9182,1935],{"class":1925},[74,9184,1938],{"class":84},[74,9186,9187],{"class":76,"line":94},[74,9188,1508],{"class":84},[74,9190,9191,9193,9195,9197,9199,9201,9203],{"class":76,"line":1141},[74,9192,1947],{"class":80},[74,9194,3925],{"class":84},[74,9196,163],{"class":134},[74,9198,4864],{"class":84},[74,9200,157],{"class":134},[74,9202,1026],{"class":84},[74,9204,4871],{"class":80},[74,9206,9207],{"class":76,"line":1156},[74,9208,1992],{"class":84},[74,9210,9211,9213,9215,9217,9219,9221,9223],{"class":76,"line":1162},[74,9212,4880],{"class":84},[74,9214,303],{"class":134},[74,9216,464],{"class":84},[74,9218,163],{"class":134},[74,9220,464],{"class":84},[74,9222,157],{"class":134},[74,9224,4893],{"class":84},[74,9226,9227,9229,9231,9233,9235,9237,9239],{"class":76,"line":1176},[74,9228,4880],{"class":84},[74,9230,379],{"class":134},[74,9232,464],{"class":84},[74,9234,405],{"class":134},[74,9236,464],{"class":84},[74,9238,430],{"class":134},[74,9240,1527],{"class":84},[74,9242,9243],{"class":76,"line":1182},[74,9244,4914],{"class":84},[74,9246,9247,9249,9251,9253,9255,9257,9259,9261,9263,9265,9267],{"class":76,"line":1273},[74,9248,1513],{"class":84},[74,9250,1130],{"class":80},[74,9252,4923],{"class":190},[74,9254,1334],{"class":80},[74,9256,4169],{"class":84},[74,9258,4172],{"class":80},[74,9260,3814],{"class":84},[74,9262,277],{"class":134},[74,9264,4179],{"class":84},[74,9266,1130],{"class":80},[74,9268,1153],{"class":84},[74,9270,9271,9273,9275,9277,9279,9281,9283,9285,9287,9289,9291,9293,9295,9297,9299],{"class":76,"line":1279},[74,9272,1513],{"class":84},[74,9274,1130],{"class":80},[74,9276,4948],{"class":190},[74,9278,1334],{"class":80},[74,9280,3814],{"class":84},[74,9282,277],{"class":134},[74,9284,4179],{"class":84},[74,9286,4172],{"class":80},[74,9288,3814],{"class":84},[74,9290,277],{"class":134},[74,9292,4864],{"class":84},[74,9294,277],{"class":134},[74,9296,4179],{"class":84},[74,9298,1130],{"class":80},[74,9300,1153],{"class":84},[74,9302,9303],{"class":76,"line":1291},[74,9304,1527],{"class":84},[19,9306,4979],{},[64,9308,9309],{"className":66,"code":4982,"language":68,"meta":69,"style":69},[71,9310,9311,9327,9351,9375],{"__ignoreMap":69},[74,9312,9313,9315,9317,9319,9321,9323,9325],{"class":76,"line":77},[74,9314,1331],{"class":84},[74,9316,1130],{"class":80},[74,9318,4993],{"class":190},[74,9320,1130],{"class":80},[74,9322,3843],{"class":84},[74,9324,1130],{"class":80},[74,9326,1153],{"class":84},[74,9328,9329,9331,9333,9335,9337,9339,9341,9343,9345,9347,9349],{"class":76,"line":94},[74,9330,1331],{"class":84},[74,9332,1130],{"class":80},[74,9334,5010],{"class":190},[74,9336,1130],{"class":80},[74,9338,85],{"class":84},[74,9340,88],{"class":80},[74,9342,5019],{"class":84},[74,9344,277],{"class":134},[74,9346,1026],{"class":84},[74,9348,1130],{"class":80},[74,9350,1153],{"class":84},[74,9352,9353,9355,9357,9359,9361,9363,9365,9367,9369,9371,9373],{"class":76,"line":1141},[74,9354,1331],{"class":84},[74,9356,1130],{"class":80},[74,9358,5036],{"class":190},[74,9360,1130],{"class":80},[74,9362,85],{"class":84},[74,9364,88],{"class":80},[74,9366,5019],{"class":84},[74,9368,303],{"class":134},[74,9370,1026],{"class":84},[74,9372,1130],{"class":80},[74,9374,1153],{"class":84},[74,9376,9377,9379,9381,9383,9385,9387,9389,9391,9393,9395,9397,9399,9401,9403,9405,9407],{"class":76,"line":1156},[74,9378,1331],{"class":84},[74,9380,1130],{"class":80},[74,9382,5061],{"class":190},[74,9384,1130],{"class":80},[74,9386,85],{"class":84},[74,9388,88],{"class":80},[74,9390,515],{"class":84},[74,9392,439],{"class":80},[74,9394,3869],{"class":84},[74,9396,277],{"class":134},[74,9398,4864],{"class":84},[74,9400,277],{"class":134},[74,9402,1026],{"class":84},[74,9404,1130],{"class":80},[74,9406,1200],{"class":84},[74,9408,5088],{"class":144},[5090,9410,5092],{},{"title":69,"searchDepth":94,"depth":94,"links":9412},[9413,9414,9415,9423,9424,9430,9435],{"id":16,"depth":94,"text":17},{"id":24,"depth":94,"text":25},{"id":41,"depth":94,"text":42,"children":9416},[9417,9418,9419,9420,9421,9422],{"id":46,"depth":1141,"text":47},{"id":102,"depth":1141,"text":103},{"id":171,"depth":1141,"text":172},{"id":1111,"depth":1141,"text":1112},{"id":1206,"depth":1141,"text":1207},{"id":1305,"depth":1141,"text":1306},{"id":1347,"depth":94,"text":1348},{"id":1415,"depth":94,"text":1416,"children":9425},[9426,9427,9428,9429],{"id":1419,"depth":1141,"text":1420},{"id":1441,"depth":1141,"text":1442},{"id":1450,"depth":1141,"text":1451},{"id":1459,"depth":1141,"text":1460},{"id":1468,"depth":94,"text":1469,"children":9431},[9432,9433,9434],{"id":1472,"depth":1141,"text":1473},{"id":2167,"depth":1141,"text":2168},{"id":3584,"depth":1141,"text":3585},{"id":3725,"depth":94,"text":3726,"children":9436},[9437,9438],{"id":3729,"depth":1141,"text":3730},{"id":4757,"depth":1141,"text":4758},{},{"title":5,"description":69},{"id":9442,"title":9443,"body":9444,"description":69,"extension":5121,"meta":10544,"navigation":2362,"path":10545,"seo":10546,"stem":10547,"__hash__":10548},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":9445,"toc":10536},[9446,9449,9453,9461,9469,9472,9538,9542,9545,9621,9625,9628,9631,9634,9847,9851,9856,9920,9925,9992,9997,10088,10091,10196,10200,10203,10209,10353,10357,10360,10374,10377,10422,10425,10533],[10,9447,9443],{"id":9448},"_2函数",[14,9450,9452],{"id":9451},"_21函数概述","2.1函数概述",[27,9454,9455,9458],{},[30,9456,9457],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[30,9459,9460],{},"语法：",[64,9462,9467],{"className":9463,"code":9465,"language":9466,"meta":69},[9464],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[71,9468,9465],{"__ignoreMap":69},[19,9470,9471],{},"小案例",[64,9473,9475],{"className":66,"code":9474,"language":68,"meta":69,"style":69},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[71,9476,9477,9482,9506,9510,9527,9534],{"__ignoreMap":69},[74,9478,9479],{"class":76,"line":77},[74,9480,9481],{"class":144},"\u002F\u002Fnum1,num2形参\n",[74,9483,9484,9486,9489,9491,9493,9497,9499,9501,9504],{"class":76,"line":94},[74,9485,88],{"class":80},[74,9487,9488],{"class":1925}," add",[74,9490,85],{"class":84},[74,9492,88],{"class":80},[74,9494,9496],{"class":9495},"s4XuR"," num1",[74,9498,464],{"class":84},[74,9500,88],{"class":80},[74,9502,9503],{"class":9495}," num2",[74,9505,91],{"class":84},[74,9507,9508],{"class":76,"line":1141},[74,9509,1508],{"class":84},[74,9511,9512,9514,9517,9519,9522,9524],{"class":76,"line":1156},[74,9513,1947],{"class":80},[74,9515,9516],{"class":84}," sum",[74,9518,131],{"class":80},[74,9520,9521],{"class":84},"num1",[74,9523,567],{"class":80},[74,9525,9526],{"class":84},"num2;\n",[74,9528,9529,9531],{"class":76,"line":1162},[74,9530,4053],{"class":80},[74,9532,9533],{"class":84}," sum;\n",[74,9535,9536],{"class":76,"line":1176},[74,9537,1527],{"class":84},[14,9539,9541],{"id":9540},"_22函数调用","2.2函数调用",[19,9543,9544],{},"调用刚刚写的求和函数",[64,9546,9548],{"className":66,"code":9547,"language":68,"meta":69,"style":69},"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",[71,9549,9550,9558,9562,9567,9579,9591,9600,9605,9617],{"__ignoreMap":69},[74,9551,9552,9554,9556],{"class":76,"line":77},[74,9553,88],{"class":80},[74,9555,1935],{"class":1925},[74,9557,1938],{"class":84},[74,9559,9560],{"class":76,"line":94},[74,9561,1508],{"class":84},[74,9563,9564],{"class":76,"line":1141},[74,9565,9566],{"class":144},"    \u002F\u002Fa,b实参\n",[74,9568,9569,9571,9573,9575,9577],{"class":76,"line":1156},[74,9570,1947],{"class":80},[74,9572,1360],{"class":84},[74,9574,131],{"class":80},[74,9576,277],{"class":134},[74,9578,1252],{"class":84},[74,9580,9581,9583,9585,9587,9589],{"class":76,"line":1162},[74,9582,1947],{"class":80},[74,9584,2796],{"class":84},[74,9586,131],{"class":80},[74,9588,277],{"class":134},[74,9590,1252],{"class":84},[74,9592,9593,9595,9597],{"class":76,"line":1176},[74,9594,1974],{"class":84},[74,9596,1391],{"class":80},[74,9598,9599],{"class":84},"a,b;\n",[74,9601,9602],{"class":76,"line":1182},[74,9603,9604],{"class":144},"    \u002F\u002F调用函数时，实参值传给了形参\n",[74,9606,9607,9609,9611,9614],{"class":76,"line":1273},[74,9608,1513],{"class":84},[74,9610,1130],{"class":80},[74,9612,9613],{"class":1925},"add",[74,9615,9616],{"class":84},"(a,b);\n",[74,9618,9619],{"class":76,"line":1279},[74,9620,1527],{"class":84},[14,9622,9624],{"id":9623},"_23值传递","2.3值传递",[19,9626,9627],{},"值传递就是函数调用时实参将数值传给形参",[19,9629,9630],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,9632,9633],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[64,9635,9637],{"className":66,"code":9636,"language":68,"meta":69,"style":69},"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",[71,9638,9639,9661,9665,9678,9695,9713,9724,9733,9742,9755,9771,9787,9796,9800,9808,9812,9824,9836,9843],{"__ignoreMap":69},[74,9640,9641,9644,9647,9649,9651,9653,9655,9657,9659],{"class":76,"line":77},[74,9642,9643],{"class":80},"void",[74,9645,9646],{"class":1925}," swap",[74,9648,85],{"class":84},[74,9650,88],{"class":80},[74,9652,9496],{"class":9495},[74,9654,464],{"class":84},[74,9656,88],{"class":80},[74,9658,9503],{"class":9495},[74,9660,91],{"class":84},[74,9662,9663],{"class":76,"line":94},[74,9664,1508],{"class":84},[74,9666,9667,9669,9671,9674,9676],{"class":76,"line":1141},[74,9668,1513],{"class":84},[74,9670,1130],{"class":80},[74,9672,9673],{"class":190},"\"交换前：\"",[74,9675,1130],{"class":80},[74,9677,1153],{"class":84},[74,9679,9680,9682,9684,9687,9689,9691,9693],{"class":76,"line":1156},[74,9681,1513],{"class":84},[74,9683,1130],{"class":80},[74,9685,9686],{"class":190},"\"num1=\"",[74,9688,1130],{"class":80},[74,9690,9521],{"class":84},[74,9692,1130],{"class":80},[74,9694,1153],{"class":84},[74,9696,9697,9699,9701,9704,9706,9709,9711],{"class":76,"line":1162},[74,9698,1513],{"class":84},[74,9700,1130],{"class":80},[74,9702,9703],{"class":190},"\"num2=\"",[74,9705,1130],{"class":80},[74,9707,9708],{"class":84},"num2",[74,9710,1130],{"class":80},[74,9712,1153],{"class":84},[74,9714,9715,9717,9719,9721],{"class":76,"line":1176},[74,9716,1947],{"class":80},[74,9718,4218],{"class":84},[74,9720,131],{"class":80},[74,9722,9723],{"class":84},"num1;\n",[74,9725,9726,9729,9731],{"class":76,"line":1182},[74,9727,9728],{"class":84},"    num1",[74,9730,131],{"class":80},[74,9732,9526],{"class":84},[74,9734,9735,9738,9740],{"class":76,"line":1273},[74,9736,9737],{"class":84},"    num2",[74,9739,131],{"class":80},[74,9741,4243],{"class":84},[74,9743,9744,9746,9748,9751,9753],{"class":76,"line":1279},[74,9745,1513],{"class":84},[74,9747,1130],{"class":80},[74,9749,9750],{"class":190},"\"交换后：\"",[74,9752,1130],{"class":80},[74,9754,1153],{"class":84},[74,9756,9757,9759,9761,9763,9765,9767,9769],{"class":76,"line":1291},[74,9758,1513],{"class":84},[74,9760,1130],{"class":80},[74,9762,9686],{"class":190},[74,9764,1130],{"class":80},[74,9766,9521],{"class":84},[74,9768,1130],{"class":80},[74,9770,1153],{"class":84},[74,9772,9773,9775,9777,9779,9781,9783,9785],{"class":76,"line":1574},[74,9774,1513],{"class":84},[74,9776,1130],{"class":80},[74,9778,9703],{"class":190},[74,9780,1130],{"class":80},[74,9782,9708],{"class":84},[74,9784,1130],{"class":80},[74,9786,1153],{"class":84},[74,9788,9789,9791,9793],{"class":76,"line":1579},[74,9790,4053],{"class":80},[74,9792,141],{"class":84},[74,9794,9795],{"class":144},"\u002F\u002F或者不写\n",[74,9797,9798],{"class":76,"line":1585},[74,9799,1527],{"class":84},[74,9801,9802,9804,9806],{"class":76,"line":1590},[74,9803,88],{"class":80},[74,9805,1935],{"class":1925},[74,9807,1938],{"class":84},[74,9809,9810],{"class":76,"line":1604},[74,9811,1508],{"class":84},[74,9813,9814,9816,9818,9820,9822],{"class":76,"line":1609},[74,9815,1947],{"class":80},[74,9817,1360],{"class":84},[74,9819,131],{"class":80},[74,9821,532],{"class":134},[74,9823,1252],{"class":84},[74,9825,9826,9828,9830,9832,9834],{"class":76,"line":1615},[74,9827,1947],{"class":80},[74,9829,2796],{"class":84},[74,9831,131],{"class":80},[74,9833,786],{"class":134},[74,9835,1252],{"class":84},[74,9837,9838,9841],{"class":76,"line":1636},[74,9839,9840],{"class":1925},"    swap",[74,9842,9616],{"class":84},[74,9844,9845],{"class":76,"line":1641},[74,9846,1527],{"class":84},[14,9848,9850],{"id":9849},"_24函数的常见形式","2.4函数的常见形式",[27,9852,9853],{},[30,9854,9855],{},"无参无返",[64,9857,9859],{"className":66,"code":9858,"language":68,"meta":69,"style":69},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[71,9860,9861,9870,9874,9887,9891,9899,9903,9908,9916],{"__ignoreMap":69},[74,9862,9863,9865,9868],{"class":76,"line":77},[74,9864,9643],{"class":80},[74,9866,9867],{"class":1925}," test01",[74,9869,1938],{"class":84},[74,9871,9872],{"class":76,"line":94},[74,9873,1508],{"class":84},[74,9875,9876,9878,9880,9883,9885],{"class":76,"line":1141},[74,9877,1513],{"class":84},[74,9879,1130],{"class":80},[74,9881,9882],{"class":190},"\"你好\"",[74,9884,1130],{"class":80},[74,9886,1153],{"class":84},[74,9888,9889],{"class":76,"line":1156},[74,9890,1527],{"class":84},[74,9892,9893,9895,9897],{"class":76,"line":1162},[74,9894,88],{"class":80},[74,9896,1935],{"class":1925},[74,9898,1938],{"class":84},[74,9900,9901],{"class":76,"line":1176},[74,9902,1508],{"class":84},[74,9904,9905],{"class":76,"line":1182},[74,9906,9907],{"class":144},"    \u002F\u002F函数调用\n",[74,9909,9910,9913],{"class":76,"line":1273},[74,9911,9912],{"class":1925},"    test01",[74,9914,9915],{"class":84},"();\n",[74,9917,9918],{"class":76,"line":1279},[74,9919,1527],{"class":84},[27,9921,9922],{"start":94},[30,9923,9924],{},"有参无返",[64,9926,9928],{"className":66,"code":9927,"language":68,"meta":69,"style":69},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[71,9929,9930,9945,9949,9961,9965,9973,9977,9988],{"__ignoreMap":69},[74,9931,9932,9934,9937,9939,9941,9943],{"class":76,"line":77},[74,9933,9643],{"class":80},[74,9935,9936],{"class":1925}," test02",[74,9938,85],{"class":84},[74,9940,88],{"class":80},[74,9942,1360],{"class":9495},[74,9944,91],{"class":84},[74,9946,9947],{"class":76,"line":94},[74,9948,1508],{"class":84},[74,9950,9951,9953,9955,9957,9959],{"class":76,"line":1141},[74,9952,1513],{"class":84},[74,9954,1130],{"class":80},[74,9956,9882],{"class":190},[74,9958,1130],{"class":80},[74,9960,1153],{"class":84},[74,9962,9963],{"class":76,"line":1156},[74,9964,1527],{"class":84},[74,9966,9967,9969,9971],{"class":76,"line":1162},[74,9968,88],{"class":80},[74,9970,1935],{"class":1925},[74,9972,1938],{"class":84},[74,9974,9975],{"class":76,"line":1176},[74,9976,1508],{"class":84},[74,9978,9979,9982,9984,9986],{"class":76,"line":1182},[74,9980,9981],{"class":1925},"    test02",[74,9983,85],{"class":84},[74,9985,397],{"class":134},[74,9987,2682],{"class":84},[74,9989,9990],{"class":76,"line":1273},[74,9991,1527],{"class":84},[27,9993,9994],{"start":1141},[30,9995,9996],{},"无参有返",[64,9998,10000],{"className":66,"code":9999,"language":68,"meta":69,"style":69},"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",[71,10001,10002,10011,10015,10027,10036,10040,10048,10052,10065,10084],{"__ignoreMap":69},[74,10003,10004,10006,10009],{"class":76,"line":77},[74,10005,88],{"class":80},[74,10007,10008],{"class":1925}," test03",[74,10010,1938],{"class":84},[74,10012,10013],{"class":76,"line":94},[74,10014,1508],{"class":84},[74,10016,10017,10019,10021,10023,10025],{"class":76,"line":1141},[74,10018,1513],{"class":84},[74,10020,1130],{"class":80},[74,10022,9882],{"class":190},[74,10024,1130],{"class":80},[74,10026,1153],{"class":84},[74,10028,10029,10031,10034],{"class":76,"line":1156},[74,10030,4053],{"class":80},[74,10032,10033],{"class":134}," 100",[74,10035,1252],{"class":84},[74,10037,10038],{"class":76,"line":1162},[74,10039,1527],{"class":84},[74,10041,10042,10044,10046],{"class":76,"line":1176},[74,10043,88],{"class":80},[74,10045,1935],{"class":1925},[74,10047,1938],{"class":84},[74,10049,10050],{"class":76,"line":1182},[74,10051,1508],{"class":84},[74,10053,10054,10056,10058,10060,10063],{"class":76,"line":1273},[74,10055,1947],{"class":80},[74,10057,9496],{"class":84},[74,10059,131],{"class":80},[74,10061,10062],{"class":1925},"test03",[74,10064,9915],{"class":84},[74,10066,10067,10069,10071,10073,10075,10077,10079,10081],{"class":76,"line":1279},[74,10068,1513],{"class":84},[74,10070,1130],{"class":80},[74,10072,9686],{"class":190},[74,10074,1130],{"class":80},[74,10076,9521],{"class":84},[74,10078,1130],{"class":80},[74,10080,1200],{"class":84},[74,10082,10083],{"class":144}," \u002F\u002F100\n",[74,10085,10086],{"class":76,"line":1291},[74,10087,1527],{"class":84},[19,10089,10090],{},"4.有参有返",[64,10092,10094],{"className":66,"code":10093,"language":68,"meta":69,"style":69},"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",[71,10095,10096,10111,10115,10128,10134,10138,10147,10151,10163,10177,10192],{"__ignoreMap":69},[74,10097,10098,10100,10103,10105,10107,10109],{"class":76,"line":77},[74,10099,88],{"class":80},[74,10101,10102],{"class":1925}," test04",[74,10104,85],{"class":84},[74,10106,88],{"class":80},[74,10108,1360],{"class":9495},[74,10110,91],{"class":84},[74,10112,10113],{"class":76,"line":94},[74,10114,1508],{"class":84},[74,10116,10117,10119,10121,10124,10126],{"class":76,"line":1141},[74,10118,1513],{"class":84},[74,10120,1130],{"class":80},[74,10122,10123],{"class":190},"\"hello\"",[74,10125,1130],{"class":80},[74,10127,1153],{"class":84},[74,10129,10130,10132],{"class":76,"line":1156},[74,10131,4053],{"class":80},[74,10133,1394],{"class":84},[74,10135,10136],{"class":76,"line":1162},[74,10137,1527],{"class":84},[74,10139,10140,10142,10145],{"class":76,"line":1176},[74,10141,88],{"class":80},[74,10143,10144],{"class":1925}," mian",[74,10146,1938],{"class":84},[74,10148,10149],{"class":76,"line":1182},[74,10150,1508],{"class":84},[74,10152,10153,10155,10157,10159,10161],{"class":76,"line":1273},[74,10154,1947],{"class":80},[74,10156,2796],{"class":84},[74,10158,131],{"class":80},[74,10160,303],{"class":134},[74,10162,1252],{"class":84},[74,10164,10165,10167,10169,10171,10174],{"class":76,"line":1279},[74,10166,1947],{"class":80},[74,10168,2812],{"class":84},[74,10170,131],{"class":80},[74,10172,10173],{"class":1925},"test04",[74,10175,10176],{"class":84},"(b);\n",[74,10178,10179,10181,10183,10185,10187,10189],{"class":76,"line":1291},[74,10180,1513],{"class":84},[74,10182,1130],{"class":80},[74,10184,374],{"class":84},[74,10186,1130],{"class":80},[74,10188,1200],{"class":84},[74,10190,10191],{"class":144}," \u002F\u002F1\n",[74,10193,10194],{"class":76,"line":1574},[74,10195,1527],{"class":84},[14,10197,10199],{"id":10198},"_25函数的声明","2.5函数的声明",[19,10201,10202],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,10204,10205,10206],{},"函数的",[235,10207,10208],{},"声明可以多次，但是函数的定义只能有一次",[64,10210,10212],{"className":66,"code":10211,"language":68,"meta":69,"style":69},"\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",[71,10213,10214,10219,10224,10249,10258,10262,10274,10286,10302,10306,10326,10330,10349],{"__ignoreMap":69},[74,10215,10216],{"class":76,"line":77},[74,10217,10218],{"class":144},"\u002F\u002F函数声明\n",[74,10220,10221],{"class":76,"line":94},[74,10222,10223],{"class":144},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[74,10225,10226,10228,10231,10233,10235,10237,10239,10241,10243,10246],{"class":76,"line":1141},[74,10227,88],{"class":80},[74,10229,10230],{"class":1925}," max",[74,10232,85],{"class":84},[74,10234,88],{"class":80},[74,10236,1360],{"class":9495},[74,10238,464],{"class":84},[74,10240,88],{"class":80},[74,10242,2796],{"class":9495},[74,10244,10245],{"class":84},");",[74,10247,10248],{"class":144},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[74,10250,10251,10253,10255],{"class":76,"line":1156},[74,10252,88],{"class":80},[74,10254,1935],{"class":1925},[74,10256,10257],{"class":84},"() \n",[74,10259,10260],{"class":76,"line":1162},[74,10261,1508],{"class":84},[74,10263,10264,10266,10268,10270,10272],{"class":76,"line":1176},[74,10265,1947],{"class":80},[74,10267,1360],{"class":84},[74,10269,131],{"class":80},[74,10271,532],{"class":134},[74,10273,1252],{"class":84},[74,10275,10276,10278,10280,10282,10284],{"class":76,"line":1182},[74,10277,1947],{"class":80},[74,10279,2796],{"class":84},[74,10281,131],{"class":80},[74,10283,786],{"class":134},[74,10285,1252],{"class":84},[74,10287,10288,10290,10292,10295,10298,10300],{"class":76,"line":1273},[74,10289,1513],{"class":84},[74,10291,1130],{"class":80},[74,10293,10294],{"class":1925},"max",[74,10296,10297],{"class":84},"(a,b)",[74,10299,1130],{"class":80},[74,10301,1153],{"class":84},[74,10303,10304],{"class":76,"line":1279},[74,10305,1527],{"class":84},[74,10307,10308,10310,10312,10314,10316,10318,10320,10322,10324],{"class":76,"line":1291},[74,10309,88],{"class":80},[74,10311,10230],{"class":1925},[74,10313,85],{"class":84},[74,10315,88],{"class":80},[74,10317,1360],{"class":9495},[74,10319,464],{"class":84},[74,10321,88],{"class":80},[74,10323,2796],{"class":9495},[74,10325,91],{"class":84},[74,10327,10328],{"class":76,"line":1574},[74,10329,1508],{"class":84},[74,10331,10332,10334,10336,10338,10340,10342,10344,10346],{"class":76,"line":1579},[74,10333,4053],{"class":80},[74,10335,1360],{"class":84},[74,10337,1046],{"class":80},[74,10339,349],{"class":84},[74,10341,1072],{"class":80},[74,10343,324],{"class":84},[74,10345,945],{"class":80},[74,10347,10348],{"class":84},"b;\n",[74,10350,10351],{"class":76,"line":1585},[74,10352,1527],{"class":84},[14,10354,10356],{"id":10355},"_26函数的分文件编写","2.6函数的分文件编写",[19,10358,10359],{},"4个步骤：",[1093,10361,10362,10365,10368,10371],{},[30,10363,10364],{},"1.创建后缀名为.h的头文件",[30,10366,10367],{},"2.创建后缀名为.cpp的源文件",[30,10369,10370],{},"3.在头文件中写函数的定义",[30,10372,10373],{},"4.在源文件中写函数的定义\n示例：",[19,10375,10376],{},"头文件：swap.h",[64,10378,10380],{"className":66,"code":10379,"language":68,"meta":69,"style":69},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[71,10381,10382,10388,10398,10402],{"__ignoreMap":69},[74,10383,10384,10386],{"class":76,"line":77},[74,10385,1911],{"class":80},[74,10387,1914],{"class":190},[74,10389,10390,10392,10394,10396],{"class":76,"line":94},[74,10391,1919],{"class":80},[74,10393,1922],{"class":80},[74,10395,1926],{"class":1925},[74,10397,1252],{"class":84},[74,10399,10400],{"class":76,"line":1141},[74,10401,10218],{"class":144},[74,10403,10404,10406,10408,10410,10412,10414,10416,10418,10420],{"class":76,"line":1156},[74,10405,9643],{"class":80},[74,10407,9646],{"class":1925},[74,10409,85],{"class":84},[74,10411,88],{"class":80},[74,10413,1360],{"class":9495},[74,10415,464],{"class":84},[74,10417,88],{"class":80},[74,10419,2796],{"class":9495},[74,10421,2682],{"class":84},[19,10423,10424],{},"源文件：swap.cpp",[64,10426,10428],{"className":66,"code":10427,"language":68,"meta":69,"style":69},"#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",[71,10429,10430,10437,10442,10462,10466,10477,10486,10495,10512,10529],{"__ignoreMap":69},[74,10431,10432,10434],{"class":76,"line":77},[74,10433,1911],{"class":80},[74,10435,10436],{"class":190}," \"swap.h\"\n",[74,10438,10439],{"class":76,"line":94},[74,10440,10441],{"class":144},"\u002F\u002F函数的定义\n",[74,10443,10444,10446,10448,10450,10452,10454,10456,10458,10460],{"class":76,"line":1141},[74,10445,9643],{"class":80},[74,10447,9646],{"class":1925},[74,10449,85],{"class":84},[74,10451,88],{"class":80},[74,10453,1360],{"class":9495},[74,10455,464],{"class":84},[74,10457,88],{"class":80},[74,10459,2796],{"class":9495},[74,10461,91],{"class":84},[74,10463,10464],{"class":76,"line":1156},[74,10465,1508],{"class":84},[74,10467,10468,10470,10472,10474],{"class":76,"line":1162},[74,10469,1947],{"class":80},[74,10471,4218],{"class":84},[74,10473,131],{"class":80},[74,10475,10476],{"class":84},"a;\n",[74,10478,10479,10482,10484],{"class":76,"line":1176},[74,10480,10481],{"class":84},"    a",[74,10483,131],{"class":80},[74,10485,10348],{"class":84},[74,10487,10488,10491,10493],{"class":76,"line":1182},[74,10489,10490],{"class":84},"    b",[74,10492,131],{"class":80},[74,10494,4243],{"class":84},[74,10496,10497,10499,10501,10504,10506,10508,10510],{"class":76,"line":1273},[74,10498,1513],{"class":84},[74,10500,1130],{"class":80},[74,10502,10503],{"class":190},"\"a=\"",[74,10505,1130],{"class":80},[74,10507,324],{"class":84},[74,10509,1130],{"class":80},[74,10511,1153],{"class":84},[74,10513,10514,10516,10518,10521,10523,10525,10527],{"class":76,"line":1279},[74,10515,1513],{"class":84},[74,10517,1130],{"class":80},[74,10519,10520],{"class":190},"\"b=\"",[74,10522,1130],{"class":80},[74,10524,349],{"class":84},[74,10526,1130],{"class":80},[74,10528,1153],{"class":84},[74,10530,10531],{"class":76,"line":1291},[74,10532,1527],{"class":84},[5090,10534,10535],{},"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":69,"searchDepth":94,"depth":94,"links":10537},[10538,10539,10540,10541,10542,10543],{"id":9451,"depth":94,"text":9452},{"id":9540,"depth":94,"text":9541},{"id":9623,"depth":94,"text":9624},{"id":9849,"depth":94,"text":9850},{"id":10198,"depth":94,"text":10199},{"id":10355,"depth":94,"text":10356},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":9443,"description":69},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":10550,"title":10551,"body":10552,"description":10559,"extension":5121,"meta":11964,"navigation":2362,"path":11965,"seo":11966,"stem":11967,"__hash__":11968},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":10553,"toc":11954},[10554,10557,10560,10564,10726,10730,10733,10736,10739,10742,10882,10886,10889,10892,10895,10960,10964,10969,11036,11039,11043,11046,11057,11062,11082,11085,11090,11109,11112,11116,11135,11138,11142,11377,11381,11384,11387,11390,11552,11555,11559,11562,11568,11951],[10,10555,10551],{"id":10556},"_3指针",[19,10558,10559],{},"通过指针保存一个地址，指针就是个地址",[14,10561,10563],{"id":10562},"_31定义指针","3.1定义指针",[64,10565,10567],{"className":66,"code":10566,"language":68,"meta":69,"style":69},"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",[71,10568,10569,10577,10581,10586,10598,10603,10611,10621,10639,10659,10663,10668,10673,10678,10692,10708,10722],{"__ignoreMap":69},[74,10570,10571,10573,10575],{"class":76,"line":77},[74,10572,88],{"class":80},[74,10574,1935],{"class":1925},[74,10576,1938],{"class":84},[74,10578,10579],{"class":76,"line":94},[74,10580,1508],{"class":84},[74,10582,10583],{"class":76,"line":1141},[74,10584,10585],{"class":144},"    \u002F\u002F1.定义指针\n",[74,10587,10588,10590,10592,10594,10596],{"class":76,"line":1156},[74,10589,1947],{"class":80},[74,10591,1360],{"class":84},[74,10593,131],{"class":80},[74,10595,532],{"class":134},[74,10597,1252],{"class":84},[74,10599,10600],{"class":76,"line":1162},[74,10601,10602],{"class":144},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[74,10604,10605,10608],{"class":76,"line":1176},[74,10606,10607],{"class":80},"    int*",[74,10609,10610],{"class":84},"p;\n",[74,10612,10613,10616,10619],{"class":76,"line":1182},[74,10614,10615],{"class":84},"    p",[74,10617,10618],{"class":80},"=&",[74,10620,10476],{"class":84},[74,10622,10623,10625,10627,10630,10633,10635,10637],{"class":76,"line":1273},[74,10624,1513],{"class":84},[74,10626,1130],{"class":80},[74,10628,10629],{"class":190},"\"a的地址为：\"",[74,10631,10632],{"class":80},"\u003C\u003C&",[74,10634,324],{"class":84},[74,10636,1130],{"class":80},[74,10638,1153],{"class":84},[74,10640,10641,10643,10645,10648,10650,10652,10654,10656],{"class":76,"line":1279},[74,10642,1513],{"class":84},[74,10644,1130],{"class":80},[74,10646,10647],{"class":190},"\"指针p为：\"",[74,10649,1130],{"class":80},[74,10651,19],{"class":84},[74,10653,1130],{"class":80},[74,10655,1200],{"class":84},[74,10657,10658],{"class":144},"\u002F\u002F指针p表示的就是a的地址\n",[74,10660,10661],{"class":76,"line":1291},[74,10662,2363],{"emptyLinePlaceholder":2362},[74,10664,10665],{"class":76,"line":1574},[74,10666,10667],{"class":144},"    \u002F\u002F2.使用指针\n",[74,10669,10670],{"class":76,"line":1579},[74,10671,10672],{"class":144},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[74,10674,10675],{"class":76,"line":1585},[74,10676,10677],{"class":144},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[74,10679,10680,10683,10685,10687,10690],{"class":76,"line":1590},[74,10681,10682],{"class":80},"    *",[74,10684,19],{"class":84},[74,10686,131],{"class":80},[74,10688,10689],{"class":134},"1000",[74,10691,1252],{"class":84},[74,10693,10694,10696,10699,10701,10703,10705],{"class":76,"line":1604},[74,10695,1513],{"class":84},[74,10697,10698],{"class":80},"\u003C\u003C*",[74,10700,19],{"class":84},[74,10702,1130],{"class":80},[74,10704,1200],{"class":84},[74,10706,10707],{"class":144},"\u002F\u002F1000\n",[74,10709,10710,10712,10714,10716,10718,10720],{"class":76,"line":1609},[74,10711,1513],{"class":84},[74,10713,1130],{"class":80},[74,10715,324],{"class":84},[74,10717,1130],{"class":80},[74,10719,1200],{"class":84},[74,10721,10707],{"class":144},[74,10723,10724],{"class":76,"line":1615},[74,10725,1527],{"class":84},[14,10727,10729],{"id":10728},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,10731,10732],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,10734,10735],{},"在32位操作系统下：占用4个字节空间",[19,10737,10738],{},"在64位操作系统下：占用8个字节空间",[19,10740,10741],{},"上方是不管啥数据类型的",[64,10743,10745],{"className":66,"code":10744,"language":68,"meta":69,"style":69},"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",[71,10746,10747,10755,10759,10764,10776,10781,10786,10791,10804,10826,10852,10878],{"__ignoreMap":69},[74,10748,10749,10751,10753],{"class":76,"line":77},[74,10750,88],{"class":80},[74,10752,1935],{"class":1925},[74,10754,1938],{"class":84},[74,10756,10757],{"class":76,"line":94},[74,10758,1508],{"class":84},[74,10760,10761],{"class":76,"line":1141},[74,10762,10763],{"class":144},"    \u002F\u002F指针所占内存空间\n",[74,10765,10766,10768,10770,10772,10774],{"class":76,"line":1156},[74,10767,1947],{"class":80},[74,10769,1360],{"class":84},[74,10771,131],{"class":80},[74,10773,532],{"class":134},[74,10775,1252],{"class":84},[74,10777,10778],{"class":76,"line":1162},[74,10779,10780],{"class":144},"    \u002F\u002Fint *p;\n",[74,10782,10783],{"class":76,"line":1176},[74,10784,10785],{"class":144},"    \u002F\u002Fp=&a;\n",[74,10787,10788],{"class":76,"line":1182},[74,10789,10790],{"class":144},"    \u002F\u002F上述可以写为以下：\n",[74,10792,10793,10795,10798,10800,10802],{"class":76,"line":1273},[74,10794,1947],{"class":80},[74,10796,10797],{"class":80}," *",[74,10799,19],{"class":84},[74,10801,10618],{"class":80},[74,10803,10476],{"class":84},[74,10805,10806,10809,10811,10814,10816,10819,10821,10823],{"class":76,"line":1279},[74,10807,10808],{"class":84},"    cout ",[74,10810,1130],{"class":80},[74,10812,10813],{"class":190},"\"sizeof(int *)\"",[74,10815,1334],{"class":80},[74,10817,10818],{"class":84},"(p)",[74,10820,1130],{"class":80},[74,10822,1200],{"class":84},[74,10824,10825],{"class":144},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[74,10827,10828,10830,10832,10834,10836,10838,10840,10842,10844,10846,10849],{"class":76,"line":1291},[74,10829,10808],{"class":84},[74,10831,1130],{"class":80},[74,10833,10813],{"class":190},[74,10835,1334],{"class":80},[74,10837,85],{"class":84},[74,10839,88],{"class":80},[74,10841,10797],{"class":80},[74,10843,515],{"class":84},[74,10845,1130],{"class":80},[74,10847,10848],{"class":84},"endl",[74,10850,10851],{"class":144},"  \u002F\u002F4字节(32位的话)\n",[74,10853,10854,10856,10858,10861,10863,10865,10867,10869,10871,10873,10875],{"class":76,"line":1574},[74,10855,10808],{"class":84},[74,10857,1130],{"class":80},[74,10859,10860],{"class":190},"\"sizeof(char *)\"",[74,10862,1334],{"class":80},[74,10864,85],{"class":84},[74,10866,182],{"class":80},[74,10868,10797],{"class":80},[74,10870,515],{"class":84},[74,10872,1130],{"class":80},[74,10874,1200],{"class":84},[74,10876,10877],{"class":144}," \u002F\u002F4字节(32位的话)\n",[74,10879,10880],{"class":76,"line":1579},[74,10881,1527],{"class":84},[14,10883,10885],{"id":10884},"_33空指针","3.3空指针",[19,10887,10888],{},"空指针：指针变量指向内存中编号为0的空间",[19,10890,10891],{},"用途：初始化指针变量",[19,10893,10894],{},"注意：空指针指向的内存是不可以访问的",[64,10896,10898],{"className":66,"code":10897,"language":68,"meta":69,"style":69},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[71,10899,10900,10908,10912,10917,10931,10936,10951,10956],{"__ignoreMap":69},[74,10901,10902,10904,10906],{"class":76,"line":77},[74,10903,88],{"class":80},[74,10905,1935],{"class":1925},[74,10907,1938],{"class":84},[74,10909,10910],{"class":76,"line":94},[74,10911,1508],{"class":84},[74,10913,10914],{"class":76,"line":1141},[74,10915,10916],{"class":144},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[74,10918,10919,10921,10923,10925,10927,10929],{"class":76,"line":1156},[74,10920,1947],{"class":80},[74,10922,10797],{"class":80},[74,10924,19],{"class":84},[74,10926,131],{"class":80},[74,10928,2354],{"class":134},[74,10930,1252],{"class":84},[74,10932,10933],{"class":76,"line":1162},[74,10934,10935],{"class":144},"    \u002F\u002F2.空指针不能进行访问\n",[74,10937,10938,10940,10942,10944,10946,10948],{"class":76,"line":1176},[74,10939,10682],{"class":80},[74,10941,19],{"class":84},[74,10943,131],{"class":80},[74,10945,397],{"class":134},[74,10947,141],{"class":84},[74,10949,10950],{"class":144},"\u002F\u002F直接报错，压根不能访问\n",[74,10952,10953],{"class":76,"line":1182},[74,10954,10955],{"class":144},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[74,10957,10958],{"class":76,"line":1273},[74,10959,1527],{"class":84},[14,10961,10963],{"id":10962},"_34野指针","3.4野指针",[19,10965,10966],{},[235,10967,10968],{},"指针变量指向非法的内存空间",[64,10970,10972],{"className":66,"code":10971,"language":68,"meta":69,"style":69},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[71,10973,10974,10982,10986,11015,11020,11032],{"__ignoreMap":69},[74,10975,10976,10978,10980],{"class":76,"line":77},[74,10977,88],{"class":80},[74,10979,1935],{"class":1925},[74,10981,1938],{"class":84},[74,10983,10984],{"class":76,"line":94},[74,10985,1508],{"class":84},[74,10987,10988,10990,10992,10994,10996,10998,11000,11002,11004,11007,11010,11012],{"class":76,"line":1141},[74,10989,1947],{"class":80},[74,10991,10797],{"class":80},[74,10993,19],{"class":84},[74,10995,131],{"class":80},[74,10997,85],{"class":84},[74,10999,88],{"class":80},[74,11001,10797],{"class":80},[74,11003,515],{"class":84},[74,11005,11006],{"class":80},"0x",[74,11008,11009],{"class":134},"1100",[74,11011,141],{"class":84},[74,11013,11014],{"class":144}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[74,11016,11017],{"class":76,"line":1156},[74,11018,11019],{"class":144},"    \u002F\u002F访问野指针报错\n",[74,11021,11022,11024,11026,11028,11030],{"class":76,"line":1162},[74,11023,1513],{"class":84},[74,11025,10698],{"class":80},[74,11027,19],{"class":84},[74,11029,1130],{"class":80},[74,11031,1153],{"class":84},[74,11033,11034],{"class":76,"line":1176},[74,11035,1527],{"class":84},[19,11037,11038],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,11040,11042],{"id":11041},"_35const修饰指针","3.5const修饰指针",[19,11044,11045],{},"三种情况：",[1093,11047,11048,11051,11054],{},[30,11049,11050],{},"const修饰指针 常量指针",[30,11052,11053],{},"const修饰常量 指针常量",[30,11055,11056],{},"const即修饰指针，又修饰常量",[27,11058,11059],{},[30,11060,11061],{},"常量指针",[64,11063,11065],{"className":66,"code":11064,"language":68,"meta":69,"style":69},"const int *p=&a;\n",[71,11066,11067],{"__ignoreMap":69},[74,11068,11069,11072,11074,11076,11078,11080],{"class":76,"line":77},[74,11070,11071],{"class":80},"const",[74,11073,2344],{"class":80},[74,11075,10797],{"class":80},[74,11077,19],{"class":84},[74,11079,10618],{"class":80},[74,11081,10476],{"class":84},[19,11083,11084],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[27,11086,11087],{"start":94},[30,11088,11089],{},"指针常量",[64,11091,11093],{"className":66,"code":11092,"language":68,"meta":69,"style":69},"int *const p=&a;\n",[71,11094,11095],{"__ignoreMap":69},[74,11096,11097,11099,11102,11105,11107],{"class":76,"line":77},[74,11098,88],{"class":80},[74,11100,11101],{"class":80}," *const",[74,11103,11104],{"class":84}," p",[74,11106,10618],{"class":80},[74,11108,10476],{"class":84},[19,11110,11111],{},"指针的指向不可以改，指针指向的值可以改",[27,11113,11114],{"start":1141},[30,11115,11056],{},[64,11117,11119],{"className":66,"code":11118,"language":68,"meta":69,"style":69},"const int *const p=&a;\n",[71,11120,11121],{"__ignoreMap":69},[74,11122,11123,11125,11127,11129,11131,11133],{"class":76,"line":77},[74,11124,11071],{"class":80},[74,11126,2344],{"class":80},[74,11128,11101],{"class":80},[74,11130,11104],{"class":84},[74,11132,10618],{"class":80},[74,11134,10476],{"class":84},[19,11136,11137],{},"指针的指向和指针指向的值都不可以改变",[14,11139,11141],{"id":11140},"_36指针和数组","3.6指针和数组",[64,11143,11145],{"className":66,"code":11144,"language":68,"meta":69,"style":69},"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",[71,11146,11147,11155,11159,11164,11218,11239,11255,11271,11282,11299,11304,11318,11344,11348,11360,11369,11373],{"__ignoreMap":69},[74,11148,11149,11151,11153],{"class":76,"line":77},[74,11150,88],{"class":80},[74,11152,1935],{"class":1925},[74,11154,1938],{"class":84},[74,11156,11157],{"class":76,"line":94},[74,11158,1508],{"class":84},[74,11160,11161],{"class":76,"line":1141},[74,11162,11163],{"class":144},"    \u002F\u002F利用指针访问数组中的元素\n",[74,11165,11166,11168,11170,11172,11174,11176,11178,11180,11182,11184,11186,11188,11190,11192,11194,11196,11198,11200,11202,11204,11206,11208,11210,11212,11214,11216],{"class":76,"line":1156},[74,11167,1947],{"class":80},[74,11169,3925],{"class":84},[74,11171,532],{"class":134},[74,11173,1026],{"class":84},[74,11175,131],{"class":80},[74,11177,982],{"class":84},[74,11179,303],{"class":134},[74,11181,464],{"class":84},[74,11183,163],{"class":134},[74,11185,464],{"class":84},[74,11187,157],{"class":134},[74,11189,464],{"class":84},[74,11191,379],{"class":134},[74,11193,464],{"class":84},[74,11195,405],{"class":134},[74,11197,464],{"class":84},[74,11199,430],{"class":134},[74,11201,464],{"class":84},[74,11203,455],{"class":134},[74,11205,464],{"class":84},[74,11207,481],{"class":134},[74,11209,464],{"class":84},[74,11211,506],{"class":134},[74,11213,464],{"class":84},[74,11215,532],{"class":134},[74,11217,3958],{"class":84},[74,11219,11220,11222,11224,11227,11229,11231,11233,11235,11237],{"class":76,"line":1162},[74,11221,1513],{"class":84},[74,11223,1130],{"class":80},[74,11225,11226],{"class":190},"\"数组的第一个元素为：\"",[74,11228,1130],{"class":80},[74,11230,3869],{"class":84},[74,11232,277],{"class":134},[74,11234,1026],{"class":84},[74,11236,1130],{"class":80},[74,11238,1153],{"class":84},[74,11240,11241,11243,11245,11247,11249,11252],{"class":76,"line":1176},[74,11242,1947],{"class":80},[74,11244,10797],{"class":80},[74,11246,19],{"class":84},[74,11248,131],{"class":80},[74,11250,11251],{"class":84},"arr;",[74,11253,11254],{"class":144},"\u002F\u002F注意数才要加取地址符号&\n",[74,11256,11257,11259,11261,11263,11265,11267,11269],{"class":76,"line":1182},[74,11258,1513],{"class":84},[74,11260,1130],{"class":80},[74,11262,11226],{"class":190},[74,11264,10698],{"class":80},[74,11266,19],{"class":84},[74,11268,1130],{"class":80},[74,11270,1153],{"class":84},[74,11272,11273,11275,11277,11279],{"class":76,"line":1273},[74,11274,10615],{"class":84},[74,11276,2254],{"class":80},[74,11278,141],{"class":84},[74,11280,11281],{"class":144}," \u002F\u002F让指针向后偏移4个字节\n",[74,11283,11284,11286,11288,11291,11293,11295,11297],{"class":76,"line":1279},[74,11285,1513],{"class":84},[74,11287,1130],{"class":80},[74,11289,11290],{"class":190},"\"数组的第二个元素为：\"",[74,11292,10698],{"class":80},[74,11294,19],{"class":84},[74,11296,1130],{"class":80},[74,11298,1153],{"class":84},[74,11300,11301],{"class":76,"line":1291},[74,11302,11303],{"class":144},"    \u002F\u002F利用指针遍历数组\n",[74,11305,11306,11308,11310,11313,11315],{"class":76,"line":1574},[74,11307,1947],{"class":80},[74,11309,10797],{"class":80},[74,11311,11312],{"class":84},"p2",[74,11314,131],{"class":80},[74,11316,11317],{"class":84},"arr;\n",[74,11319,11320,11322,11324,11326,11328,11330,11332,11334,11336,11338,11340,11342],{"class":76,"line":1579},[74,11321,3164],{"class":80},[74,11323,1620],{"class":84},[74,11325,88],{"class":80},[74,11327,2995],{"class":84},[74,11329,131],{"class":80},[74,11331,277],{"class":134},[74,11333,3002],{"class":84},[74,11335,996],{"class":80},[74,11337,532],{"class":134},[74,11339,3002],{"class":84},[74,11341,2254],{"class":80},[74,11343,91],{"class":84},[74,11345,11346],{"class":76,"line":1585},[74,11347,1992],{"class":84},[74,11349,11350,11352,11354,11356,11358],{"class":76,"line":1590},[74,11351,3414],{"class":84},[74,11353,10698],{"class":80},[74,11355,11312],{"class":84},[74,11357,1130],{"class":80},[74,11359,1153],{"class":84},[74,11361,11362,11365,11367],{"class":76,"line":1604},[74,11363,11364],{"class":84},"        p2",[74,11366,2254],{"class":80},[74,11368,1252],{"class":84},[74,11370,11371],{"class":76,"line":1609},[74,11372,2149],{"class":84},[74,11374,11375],{"class":76,"line":1615},[74,11376,1527],{"class":84},[14,11378,11380],{"id":11379},"_37指针和函数","3.7指针和函数",[19,11382,11383],{},"利用指针做函数参数，可以修改实参的值",[19,11385,11386],{},"值传递：只改变形参，不改变实参",[19,11388,11389],{},"地址传递：",[64,11391,11393],{"className":66,"code":11392,"language":68,"meta":69,"style":69},"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",[71,11394,11395,11420,11424,11436,11447,11457,11461,11469,11473,11485,11497,11502,11518,11533,11548],{"__ignoreMap":69},[74,11396,11397,11399,11401,11403,11405,11407,11410,11412,11414,11416,11418],{"class":76,"line":77},[74,11398,9643],{"class":80},[74,11400,9646],{"class":1925},[74,11402,85],{"class":84},[74,11404,88],{"class":80},[74,11406,10797],{"class":80},[74,11408,11409],{"class":9495},"p1",[74,11411,464],{"class":84},[74,11413,88],{"class":80},[74,11415,10797],{"class":80},[74,11417,11312],{"class":9495},[74,11419,91],{"class":84},[74,11421,11422],{"class":76,"line":94},[74,11423,1508],{"class":84},[74,11425,11426,11428,11430,11433],{"class":76,"line":1141},[74,11427,1947],{"class":80},[74,11429,4218],{"class":84},[74,11431,11432],{"class":80},"=*",[74,11434,11435],{"class":84},"p1;\n",[74,11437,11438,11440,11442,11444],{"class":76,"line":1156},[74,11439,10682],{"class":80},[74,11441,11409],{"class":84},[74,11443,11432],{"class":80},[74,11445,11446],{"class":84},"p2;\n",[74,11448,11449,11451,11453,11455],{"class":76,"line":1162},[74,11450,10682],{"class":80},[74,11452,11312],{"class":84},[74,11454,131],{"class":80},[74,11456,4243],{"class":84},[74,11458,11459],{"class":76,"line":1176},[74,11460,1527],{"class":84},[74,11462,11463,11465,11467],{"class":76,"line":1182},[74,11464,88],{"class":80},[74,11466,1935],{"class":1925},[74,11468,1938],{"class":84},[74,11470,11471],{"class":76,"line":1273},[74,11472,1508],{"class":84},[74,11474,11475,11477,11479,11481,11483],{"class":76,"line":1279},[74,11476,1947],{"class":80},[74,11478,1360],{"class":84},[74,11480,131],{"class":80},[74,11482,532],{"class":134},[74,11484,1252],{"class":84},[74,11486,11487,11489,11491,11493,11495],{"class":76,"line":1291},[74,11488,1947],{"class":80},[74,11490,2796],{"class":84},[74,11492,131],{"class":80},[74,11494,786],{"class":134},[74,11496,1252],{"class":84},[74,11498,11499],{"class":76,"line":1574},[74,11500,11501],{"class":144},"    \u002F\u002F地址传递\n",[74,11503,11504,11506,11508,11510,11513,11515],{"class":76,"line":1579},[74,11505,9840],{"class":1925},[74,11507,85],{"class":84},[74,11509,439],{"class":80},[74,11511,11512],{"class":84},"a,",[74,11514,439],{"class":80},[74,11516,11517],{"class":84},"b);\n",[74,11519,11520,11522,11524,11526,11528,11530],{"class":76,"line":1585},[74,11521,1513],{"class":84},[74,11523,1130],{"class":80},[74,11525,324],{"class":84},[74,11527,1130],{"class":80},[74,11529,1200],{"class":84},[74,11531,11532],{"class":144},"\u002F\u002F20\n",[74,11534,11535,11537,11539,11541,11543,11545],{"class":76,"line":1590},[74,11536,1513],{"class":84},[74,11538,1130],{"class":80},[74,11540,349],{"class":84},[74,11542,1130],{"class":80},[74,11544,1200],{"class":84},[74,11546,11547],{"class":144},"\u002F\u002F10\n",[74,11549,11550],{"class":76,"line":1604},[74,11551,1527],{"class":84},[19,11553,11554],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,11556,11558],{"id":11557},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,11560,11561],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,11563,11564,11565,11567],{},"例如数组：int arr",[74,11566,532],{},"={4,3,6,9,1,2,10,8,7,5}",[64,11569,11571],{"className":66,"code":11570,"language":68,"meta":69,"style":69},"#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",[71,11572,11573,11579,11589,11613,11617,11648,11652,11686,11690,11708,11712,11723,11738,11753,11757,11761,11765,11769,11773,11781,11785,11790,11844,11856,11868,11873,11881,11885,11890,11915,11919,11934,11943,11947],{"__ignoreMap":69},[74,11574,11575,11577],{"class":76,"line":77},[74,11576,1911],{"class":80},[74,11578,1914],{"class":190},[74,11580,11581,11583,11585,11587],{"class":76,"line":94},[74,11582,1919],{"class":80},[74,11584,1922],{"class":80},[74,11586,1926],{"class":1925},[74,11588,1252],{"class":84},[74,11590,11591,11593,11596,11598,11600,11602,11604,11606,11608,11611],{"class":76,"line":1141},[74,11592,9643],{"class":80},[74,11594,11595],{"class":1925}," bubbleSort",[74,11597,85],{"class":84},[74,11599,88],{"class":80},[74,11601,10797],{"class":80},[74,11603,19],{"class":9495},[74,11605,464],{"class":84},[74,11607,88],{"class":80},[74,11609,11610],{"class":9495}," len",[74,11612,91],{"class":84},[74,11614,11615],{"class":76,"line":1156},[74,11616,1508],{"class":84},[74,11618,11619,11621,11623,11625,11627,11629,11631,11633,11635,11638,11640,11642,11644,11646],{"class":76,"line":1162},[74,11620,3164],{"class":80},[74,11622,85],{"class":84},[74,11624,88],{"class":80},[74,11626,2995],{"class":84},[74,11628,131],{"class":80},[74,11630,277],{"class":134},[74,11632,3002],{"class":84},[74,11634,996],{"class":80},[74,11636,11637],{"class":84},"len",[74,11639,618],{"class":80},[74,11641,303],{"class":134},[74,11643,3002],{"class":84},[74,11645,2254],{"class":80},[74,11647,91],{"class":84},[74,11649,11650],{"class":76,"line":1176},[74,11651,1992],{"class":84},[74,11653,11654,11656,11658,11660,11662,11664,11666,11668,11670,11672,11674,11676,11678,11680,11682,11684],{"class":76,"line":1182},[74,11655,3366],{"class":80},[74,11657,85],{"class":84},[74,11659,88],{"class":80},[74,11661,3373],{"class":84},[74,11663,131],{"class":80},[74,11665,277],{"class":134},[74,11667,3380],{"class":84},[74,11669,996],{"class":80},[74,11671,11637],{"class":84},[74,11673,618],{"class":80},[74,11675,527],{"class":84},[74,11677,618],{"class":80},[74,11679,303],{"class":134},[74,11681,3380],{"class":84},[74,11683,2254],{"class":80},[74,11685,91],{"class":84},[74,11687,11688],{"class":76,"line":1273},[74,11689,2473],{"class":84},[74,11691,11692,11694,11697,11699,11702,11704,11706],{"class":76,"line":1279},[74,11693,4605],{"class":80},[74,11695,11696],{"class":84},"(p[j]",[74,11698,1046],{"class":80},[74,11700,11701],{"class":84},"p[j",[74,11703,567],{"class":80},[74,11705,303],{"class":134},[74,11707,4620],{"class":84},[74,11709,11710],{"class":76,"line":1291},[74,11711,4625],{"class":84},[74,11713,11714,11716,11718,11720],{"class":76,"line":1574},[74,11715,4630],{"class":80},[74,11717,4218],{"class":84},[74,11719,131],{"class":80},[74,11721,11722],{"class":84},"p[j];\n",[74,11724,11725,11728,11730,11732,11734,11736],{"class":76,"line":1579},[74,11726,11727],{"class":84},"                p[j]",[74,11729,131],{"class":80},[74,11731,11701],{"class":84},[74,11733,567],{"class":80},[74,11735,303],{"class":134},[74,11737,4653],{"class":84},[74,11739,11740,11743,11745,11747,11749,11751],{"class":76,"line":1585},[74,11741,11742],{"class":84},"                p[j",[74,11744,567],{"class":80},[74,11746,303],{"class":134},[74,11748,1026],{"class":84},[74,11750,131],{"class":80},[74,11752,4243],{"class":84},[74,11754,11755],{"class":76,"line":1590},[74,11756,4673],{"class":84},[74,11758,11759],{"class":76,"line":1604},[74,11760,2492],{"class":84},[74,11762,11763],{"class":76,"line":1609},[74,11764,2149],{"class":84},[74,11766,11767],{"class":76,"line":1615},[74,11768,1527],{"class":84},[74,11770,11771],{"class":76,"line":1636},[74,11772,2363],{"emptyLinePlaceholder":2362},[74,11774,11775,11777,11779],{"class":76,"line":1641},[74,11776,88],{"class":80},[74,11778,1935],{"class":1925},[74,11780,1938],{"class":84},[74,11782,11783],{"class":76,"line":1655},[74,11784,1508],{"class":84},[74,11786,11787],{"class":76,"line":1660},[74,11788,11789],{"class":144},"    \u002F\u002F 1.创建数组\n",[74,11791,11792,11794,11796,11798,11800,11802,11804,11806,11808,11810,11812,11814,11816,11818,11820,11822,11824,11826,11828,11830,11832,11834,11836,11838,11840,11842],{"class":76,"line":1689},[74,11793,1947],{"class":80},[74,11795,3925],{"class":84},[74,11797,532],{"class":134},[74,11799,1026],{"class":84},[74,11801,131],{"class":80},[74,11803,982],{"class":84},[74,11805,379],{"class":134},[74,11807,464],{"class":84},[74,11809,157],{"class":134},[74,11811,464],{"class":84},[74,11813,430],{"class":134},[74,11815,464],{"class":84},[74,11817,506],{"class":134},[74,11819,464],{"class":84},[74,11821,303],{"class":134},[74,11823,464],{"class":84},[74,11825,163],{"class":134},[74,11827,464],{"class":84},[74,11829,532],{"class":134},[74,11831,464],{"class":84},[74,11833,481],{"class":134},[74,11835,464],{"class":84},[74,11837,455],{"class":134},[74,11839,464],{"class":84},[74,11841,405],{"class":134},[74,11843,3958],{"class":84},[74,11845,11846,11848,11850,11852,11854],{"class":76,"line":1694},[74,11847,1947],{"class":80},[74,11849,11610],{"class":84},[74,11851,131],{"class":80},[74,11853,532],{"class":134},[74,11855,1252],{"class":84},[74,11857,11858,11860,11862,11864,11866],{"class":76,"line":1711},[74,11859,1947],{"class":80},[74,11861,10797],{"class":80},[74,11863,19],{"class":84},[74,11865,131],{"class":80},[74,11867,11317],{"class":84},[74,11869,11870],{"class":76,"line":1716},[74,11871,11872],{"class":144},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[74,11874,11875,11878],{"class":76,"line":1721},[74,11876,11877],{"class":1925},"    bubbleSort",[74,11879,11880],{"class":84},"(p,len);\n",[74,11882,11883],{"class":76,"line":1726},[74,11884,2363],{"emptyLinePlaceholder":2362},[74,11886,11887],{"class":76,"line":1740},[74,11888,11889],{"class":144},"    \u002F\u002F 3.打印排序后的数组\n",[74,11891,11892,11894,11896,11898,11900,11902,11904,11906,11908,11911,11913],{"class":76,"line":1745},[74,11893,3164],{"class":80},[74,11895,1620],{"class":84},[74,11897,88],{"class":80},[74,11899,2995],{"class":84},[74,11901,131],{"class":80},[74,11903,277],{"class":134},[74,11905,3177],{"class":84},[74,11907,996],{"class":80},[74,11909,11910],{"class":84},"len; i",[74,11912,2254],{"class":80},[74,11914,91],{"class":84},[74,11916,11917],{"class":76,"line":2540},[74,11918,1992],{"class":84},[74,11920,11921,11923,11925,11927,11929,11932],{"class":76,"line":2554},[74,11922,3414],{"class":84},[74,11924,10698],{"class":80},[74,11926,19],{"class":84},[74,11928,1130],{"class":80},[74,11930,11931],{"class":190},"\"\"",[74,11933,1252],{"class":84},[74,11935,11936,11939,11941],{"class":76,"line":2562},[74,11937,11938],{"class":84},"        p",[74,11940,2254],{"class":80},[74,11942,1252],{"class":84},[74,11944,11945],{"class":76,"line":2567},[74,11946,2149],{"class":84},[74,11948,11949],{"class":76,"line":2573},[74,11950,1527],{"class":84},[5090,11952,11953],{},"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":69,"searchDepth":94,"depth":94,"links":11955},[11956,11957,11958,11959,11960,11961,11962,11963],{"id":10562,"depth":94,"text":10563},{"id":10728,"depth":94,"text":10729},{"id":10884,"depth":94,"text":10885},{"id":10962,"depth":94,"text":10963},{"id":11041,"depth":94,"text":11042},{"id":11140,"depth":94,"text":11141},{"id":11379,"depth":94,"text":11380},{"id":11557,"depth":94,"text":11558},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":10551,"description":10559},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":11970,"title":11971,"body":11972,"description":11979,"extension":5121,"meta":14953,"navigation":2362,"path":14954,"seo":14955,"stem":14956,"__hash__":14957},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":11973,"toc":14944},[11974,11977,11980,11984,11987,11990,12001,12339,12342,12346,12349,12356,12611,12615,12618,12621,12776,12780,12783,12786,12992,12996,12999,13302,13305,13313,13317,13320,13471,13473,13484,13541,13545,13550,14207,14215,14218,14312,14315,14935,14941],[10,11975,11971],{"id":11976},"_4结构体",[19,11978,11979],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,11981,11983],{"id":11982},"_41结构体定义与使用","4.1结构体定义与使用",[19,11985,11986],{},"语法：struct 结构体名 {结构体成员列表}；",[19,11988,11989],{},"通过结构体创建变量的方式：",[1093,11991,11992,11995,11998],{},[30,11993,11994],{},"struct 结构体名 变量名",[30,11996,11997],{},"struct 结构体名 变量名={成员1值，成员2值...}",[30,11999,12000],{},"定义结构体时顺便创建变量",[64,12002,12004],{"className":66,"code":12003,"language":68,"meta":69,"style":69},"#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",[71,12005,12006,12012,12022,12029,12034,12042,12046,12051,12055,12060,12065,12070,12077,12082,12089,12093,12100,12104,12108,12112,12116,12120,12124,12130,12134,12140,12148,12156,12160,12165,12170,12181,12186,12198,12209,12220,12225,12249,12254,12260,12287,12292,12298,12310,12322,12334],{"__ignoreMap":69},[74,12007,12008,12010],{"class":76,"line":77},[74,12009,1911],{"class":80},[74,12011,1914],{"class":190},[74,12013,12014,12016,12018,12020],{"class":76,"line":94},[74,12015,1919],{"class":80},[74,12017,1922],{"class":80},[74,12019,1926],{"class":1925},[74,12021,1252],{"class":84},[74,12023,12024,12026],{"class":76,"line":1141},[74,12025,1911],{"class":80},[74,12027,12028],{"class":190},"\u003Cstring>\n",[74,12030,12031],{"class":76,"line":1156},[74,12032,12033],{"class":144},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[74,12035,12036,12039],{"class":76,"line":1162},[74,12037,12038],{"class":80},"struct",[74,12040,12041],{"class":1925}," Student\n",[74,12043,12044],{"class":76,"line":1176},[74,12045,1508],{"class":84},[74,12047,12048],{"class":76,"line":1182},[74,12049,12050],{"class":144},"    \u002F\u002F成员列表\n",[74,12052,12053],{"class":76,"line":1273},[74,12054,2363],{"emptyLinePlaceholder":2362},[74,12056,12057],{"class":76,"line":1279},[74,12058,12059],{"class":144},"    \u002F\u002F姓名\n",[74,12061,12062],{"class":76,"line":1291},[74,12063,12064],{"class":84},"    string name;\n",[74,12066,12067],{"class":76,"line":1574},[74,12068,12069],{"class":144},"    \u002F\u002F年龄\n",[74,12071,12072,12074],{"class":76,"line":1579},[74,12073,1947],{"class":80},[74,12075,12076],{"class":84}," age;\n",[74,12078,12079],{"class":76,"line":1585},[74,12080,12081],{"class":144},"    \u002F\u002F分数\n",[74,12083,12084,12086],{"class":76,"line":1590},[74,12085,1947],{"class":80},[74,12087,12088],{"class":84}," score;\n",[74,12090,12091],{"class":76,"line":1604},[74,12092,3958],{"class":84},[74,12094,12095,12097],{"class":76,"line":1609},[74,12096,12038],{"class":80},[74,12098,12099],{"class":1925}," School\n",[74,12101,12102],{"class":76,"line":1615},[74,12103,1508],{"class":84},[74,12105,12106],{"class":76,"line":1636},[74,12107,12050],{"class":144},[74,12109,12110],{"class":76,"line":1641},[74,12111,2363],{"emptyLinePlaceholder":2362},[74,12113,12114],{"class":76,"line":1655},[74,12115,12059],{"class":144},[74,12117,12118],{"class":76,"line":1660},[74,12119,12064],{"class":84},[74,12121,12122],{"class":76,"line":1689},[74,12123,12069],{"class":144},[74,12125,12126,12128],{"class":76,"line":1694},[74,12127,1947],{"class":80},[74,12129,12076],{"class":84},[74,12131,12132],{"class":76,"line":1711},[74,12133,12081],{"class":144},[74,12135,12136,12138],{"class":76,"line":1716},[74,12137,1947],{"class":80},[74,12139,12088],{"class":84},[74,12141,12142,12145],{"class":76,"line":1721},[74,12143,12144],{"class":84},"} s3;",[74,12146,12147],{"class":144}," \u002F\u002F创建结构体时就创建了变量\n",[74,12149,12150,12152,12154],{"class":76,"line":1726},[74,12151,88],{"class":80},[74,12153,1935],{"class":1925},[74,12155,1938],{"class":84},[74,12157,12158],{"class":76,"line":1740},[74,12159,1508],{"class":84},[74,12161,12162],{"class":76,"line":1745},[74,12163,12164],{"class":144},"    \u002F\u002F2.通过学生类型创建具体学生\n",[74,12166,12167],{"class":76,"line":2540},[74,12168,12169],{"class":144},"    \u002F\u002F2.1 struct Student s1;\n",[74,12171,12172,12175,12178],{"class":76,"line":2554},[74,12173,12174],{"class":80},"    struct",[74,12176,12177],{"class":1925}," Student",[74,12179,12180],{"class":84}," s1;\n",[74,12182,12183],{"class":76,"line":2562},[74,12184,12185],{"class":144},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[74,12187,12188,12191,12193,12196],{"class":76,"line":2567},[74,12189,12190],{"class":84},"    s1.name",[74,12192,131],{"class":80},[74,12194,12195],{"class":190},"\"张三\"",[74,12197,1252],{"class":84},[74,12199,12200,12203,12205,12207],{"class":76,"line":2573},[74,12201,12202],{"class":84},"    s1.age",[74,12204,131],{"class":80},[74,12206,736],{"class":134},[74,12208,1252],{"class":84},[74,12210,12211,12214,12216,12218],{"class":76,"line":2579},[74,12212,12213],{"class":84},"    s1.score",[74,12215,131],{"class":80},[74,12217,340],{"class":134},[74,12219,1252],{"class":84},[74,12221,12222],{"class":76,"line":2584},[74,12223,12224],{"class":144},"    \u002F\u002F输出结果\n",[74,12226,12228,12230,12232,12235,12237,12240,12242,12245,12247],{"class":76,"line":12227},37,[74,12229,1513],{"class":84},[74,12231,1130],{"class":80},[74,12233,12234],{"class":84},"s1.name",[74,12236,1130],{"class":80},[74,12238,12239],{"class":84},"s1.age",[74,12241,1130],{"class":80},[74,12243,12244],{"class":84},"s1.score",[74,12246,1130],{"class":80},[74,12248,1153],{"class":84},[74,12250,12252],{"class":76,"line":12251},38,[74,12253,2363],{"emptyLinePlaceholder":2362},[74,12255,12257],{"class":76,"line":12256},39,[74,12258,12259],{"class":144},"    \u002F\u002F2.2 struct Student s2={...}\n",[74,12261,12263,12265,12267,12270,12272,12274,12277,12279,12281,12283,12285],{"class":76,"line":12262},40,[74,12264,12174],{"class":80},[74,12266,12177],{"class":1925},[74,12268,12269],{"class":84}," s2",[74,12271,131],{"class":80},[74,12273,982],{"class":84},[74,12275,12276],{"class":190},"\"王五\"",[74,12278,464],{"class":84},[74,12280,736],{"class":134},[74,12282,464],{"class":84},[74,12284,340],{"class":134},[74,12286,3958],{"class":84},[74,12288,12290],{"class":76,"line":12289},41,[74,12291,2363],{"emptyLinePlaceholder":2362},[74,12293,12295],{"class":76,"line":12294},42,[74,12296,12297],{"class":144},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[74,12299,12301,12304,12306,12308],{"class":76,"line":12300},43,[74,12302,12303],{"class":84},"    s3.name",[74,12305,131],{"class":80},[74,12307,3641],{"class":190},[74,12309,1252],{"class":84},[74,12311,12313,12316,12318,12320],{"class":76,"line":12312},44,[74,12314,12315],{"class":84},"    s3.age",[74,12317,131],{"class":80},[74,12319,736],{"class":134},[74,12321,1252],{"class":84},[74,12323,12325,12328,12330,12332],{"class":76,"line":12324},45,[74,12326,12327],{"class":84},"    s3.score",[74,12329,131],{"class":80},[74,12331,786],{"class":134},[74,12333,1252],{"class":84},[74,12335,12337],{"class":76,"line":12336},46,[74,12338,1527],{"class":84},[19,12340,12341],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,12343,12345],{"id":12344},"_42结构体数组","4.2结构体数组",[19,12347,12348],{},"将自定义的结构体放入到数组中方便维护",[19,12350,12351,12352,12355],{},"语法：struct 结构体名 数组名",[74,12353,12354],{},"元素个数","={ {}，{},...{} };",[64,12357,12359],{"className":66,"code":12358,"language":68,"meta":69,"style":69},"#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",[71,12360,12361,12367,12377,12383,12388,12394,12398,12402,12408,12414,12418,12422,12430,12434,12439,12454,12458,12474,12490,12494,12499,12515,12530,12545,12550,12576,12580,12603,12607],{"__ignoreMap":69},[74,12362,12363,12365],{"class":76,"line":77},[74,12364,1911],{"class":80},[74,12366,1914],{"class":190},[74,12368,12369,12371,12373,12375],{"class":76,"line":94},[74,12370,1919],{"class":80},[74,12372,1922],{"class":80},[74,12374,1926],{"class":1925},[74,12376,1252],{"class":84},[74,12378,12379,12381],{"class":76,"line":1141},[74,12380,1911],{"class":80},[74,12382,12028],{"class":190},[74,12384,12385],{"class":76,"line":1156},[74,12386,12387],{"class":144},"\u002F\u002F1.定义结构体\n",[74,12389,12390,12392],{"class":76,"line":1162},[74,12391,12038],{"class":80},[74,12393,12041],{"class":1925},[74,12395,12396],{"class":76,"line":1176},[74,12397,1508],{"class":84},[74,12399,12400],{"class":76,"line":1182},[74,12401,12064],{"class":84},[74,12403,12404,12406],{"class":76,"line":1273},[74,12405,1947],{"class":80},[74,12407,12076],{"class":84},[74,12409,12410,12412],{"class":76,"line":1279},[74,12411,1947],{"class":80},[74,12413,12088],{"class":84},[74,12415,12416],{"class":76,"line":1291},[74,12417,2363],{"emptyLinePlaceholder":2362},[74,12419,12420],{"class":76,"line":1574},[74,12421,3958],{"class":84},[74,12423,12424,12426,12428],{"class":76,"line":1579},[74,12425,88],{"class":80},[74,12427,1935],{"class":1925},[74,12429,1938],{"class":84},[74,12431,12432],{"class":76,"line":1585},[74,12433,1508],{"class":84},[74,12435,12436],{"class":76,"line":1590},[74,12437,12438],{"class":144},"    \u002F\u002F2.创建结构体数组\n",[74,12440,12441,12443,12445,12448,12450,12452],{"class":76,"line":1604},[74,12442,12174],{"class":80},[74,12444,12177],{"class":1925},[74,12446,12447],{"class":84}," stuArray[",[74,12449,163],{"class":134},[74,12451,1026],{"class":84},[74,12453,4871],{"class":80},[74,12455,12456],{"class":76,"line":1609},[74,12457,1992],{"class":84},[74,12459,12460,12462,12464,12466,12468,12470,12472],{"class":76,"line":1615},[74,12461,4880],{"class":84},[74,12463,12195],{"class":190},[74,12465,464],{"class":84},[74,12467,736],{"class":134},[74,12469,464],{"class":84},[74,12471,397],{"class":134},[74,12473,4893],{"class":84},[74,12475,12476,12478,12480,12482,12484,12486,12488],{"class":76,"line":1636},[74,12477,4880],{"class":84},[74,12479,3641],{"class":190},[74,12481,464],{"class":84},[74,12483,661],{"class":134},[74,12485,464],{"class":84},[74,12487,661],{"class":134},[74,12489,1527],{"class":84},[74,12491,12492],{"class":76,"line":1641},[74,12493,2149],{"class":84},[74,12495,12496],{"class":76,"line":1655},[74,12497,12498],{"class":144},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[74,12500,12501,12504,12506,12509,12511,12513],{"class":76,"line":1660},[74,12502,12503],{"class":84},"    stuArray[",[74,12505,303],{"class":134},[74,12507,12508],{"class":84},"].name",[74,12510,131],{"class":80},[74,12512,3664],{"class":190},[74,12514,1252],{"class":84},[74,12516,12517,12519,12521,12524,12526,12528],{"class":76,"line":1689},[74,12518,12503],{"class":84},[74,12520,303],{"class":134},[74,12522,12523],{"class":84},"].age",[74,12525,131],{"class":80},[74,12527,163],{"class":134},[74,12529,1252],{"class":84},[74,12531,12532,12534,12536,12539,12541,12543],{"class":76,"line":1694},[74,12533,12503],{"class":84},[74,12535,303],{"class":134},[74,12537,12538],{"class":84},"].score",[74,12540,131],{"class":80},[74,12542,163],{"class":134},[74,12544,1252],{"class":84},[74,12546,12547],{"class":76,"line":1711},[74,12548,12549],{"class":144},"    \u002F\u002F4.遍历结构体数组\n",[74,12551,12552,12554,12556,12558,12560,12562,12564,12566,12568,12570,12572,12574],{"class":76,"line":1716},[74,12553,3164],{"class":80},[74,12555,1620],{"class":84},[74,12557,88],{"class":80},[74,12559,2995],{"class":84},[74,12561,131],{"class":80},[74,12563,277],{"class":134},[74,12565,3002],{"class":84},[74,12567,996],{"class":80},[74,12569,163],{"class":134},[74,12571,3002],{"class":84},[74,12573,2254],{"class":80},[74,12575,91],{"class":84},[74,12577,12578],{"class":76,"line":1721},[74,12579,1992],{"class":84},[74,12581,12582,12584,12586,12589,12591,12594,12596,12599,12601],{"class":76,"line":1726},[74,12583,3414],{"class":84},[74,12585,1130],{"class":80},[74,12587,12588],{"class":84},"stuArray[i].name",[74,12590,1130],{"class":80},[74,12592,12593],{"class":84},"stuArray[i].age",[74,12595,1130],{"class":80},[74,12597,12598],{"class":84},"stuArray[i].score",[74,12600,1130],{"class":80},[74,12602,1153],{"class":84},[74,12604,12605],{"class":76,"line":1740},[74,12606,2149],{"class":84},[74,12608,12609],{"class":76,"line":1745},[74,12610,1527],{"class":84},[14,12612,12614],{"id":12613},"_43结构体指针","4.3结构体指针",[19,12616,12617],{},"作用：通过指针访问结构体中的成员",[19,12619,12620],{},"利用操作符->可以通过结构体指针访问结构体属性",[64,12622,12624],{"className":66,"code":12623,"language":68,"meta":69,"style":69},"#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",[71,12625,12626,12632,12642,12648,12652,12658,12662,12666,12672,12678,12682,12690,12694,12699,12724,12729,12744,12749,12772],{"__ignoreMap":69},[74,12627,12628,12630],{"class":76,"line":77},[74,12629,1911],{"class":80},[74,12631,1914],{"class":190},[74,12633,12634,12636,12638,12640],{"class":76,"line":94},[74,12635,1919],{"class":80},[74,12637,1922],{"class":80},[74,12639,1926],{"class":1925},[74,12641,1252],{"class":84},[74,12643,12644,12646],{"class":76,"line":1141},[74,12645,1911],{"class":80},[74,12647,12028],{"class":190},[74,12649,12650],{"class":76,"line":1156},[74,12651,12387],{"class":144},[74,12653,12654,12656],{"class":76,"line":1162},[74,12655,12038],{"class":80},[74,12657,12041],{"class":1925},[74,12659,12660],{"class":76,"line":1176},[74,12661,1508],{"class":84},[74,12663,12664],{"class":76,"line":1182},[74,12665,12064],{"class":84},[74,12667,12668,12670],{"class":76,"line":1273},[74,12669,1947],{"class":80},[74,12671,12076],{"class":84},[74,12673,12674,12676],{"class":76,"line":1279},[74,12675,1947],{"class":80},[74,12677,12088],{"class":84},[74,12679,12680],{"class":76,"line":1291},[74,12681,3958],{"class":84},[74,12683,12684,12686,12688],{"class":76,"line":1574},[74,12685,88],{"class":80},[74,12687,1935],{"class":1925},[74,12689,1938],{"class":84},[74,12691,12692],{"class":76,"line":1579},[74,12693,1508],{"class":84},[74,12695,12696],{"class":76,"line":1585},[74,12697,12698],{"class":144},"    \u002F\u002F创建学生结构体变量\n",[74,12700,12701,12703,12705,12708,12710,12712,12714,12716,12718,12720,12722],{"class":76,"line":1590},[74,12702,12174],{"class":80},[74,12704,12177],{"class":1925},[74,12706,12707],{"class":84}," s",[74,12709,131],{"class":80},[74,12711,982],{"class":84},[74,12713,12195],{"class":190},[74,12715,464],{"class":84},[74,12717,736],{"class":134},[74,12719,464],{"class":84},[74,12721,1684],{"class":134},[74,12723,3958],{"class":84},[74,12725,12726],{"class":76,"line":1604},[74,12727,12728],{"class":144},"    \u002F\u002F通过指针指向结构体变量\n",[74,12730,12731,12733,12735,12737,12739,12741],{"class":76,"line":1609},[74,12732,12174],{"class":80},[74,12734,12177],{"class":1925},[74,12736,10797],{"class":80},[74,12738,19],{"class":84},[74,12740,10618],{"class":80},[74,12742,12743],{"class":84},"s\n",[74,12745,12746],{"class":76,"line":1615},[74,12747,12748],{"class":144},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[74,12750,12751,12753,12755,12758,12760,12763,12765,12768,12770],{"class":76,"line":1636},[74,12752,1513],{"class":84},[74,12754,1130],{"class":80},[74,12756,12757],{"class":84},"p->name",[74,12759,1130],{"class":80},[74,12761,12762],{"class":84},"p->age",[74,12764,1130],{"class":80},[74,12766,12767],{"class":84},"p->score",[74,12769,1130],{"class":80},[74,12771,1153],{"class":84},[74,12773,12774],{"class":76,"line":1641},[74,12775,1527],{"class":84},[14,12777,12779],{"id":12778},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,12781,12782],{},"作用：结构体中的成员可以是另一个结构体",[19,12784,12785],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[64,12787,12789],{"className":66,"code":12788,"language":68,"meta":69,"style":69},"#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",[71,12790,12791,12797,12807,12813,12818,12826,12830,12834,12840,12846,12850,12855,12862,12866,12873,12877,12883,12888,12892,12900,12904,12909,12914,12919,12930,12942,12953,12966,12977,12988],{"__ignoreMap":69},[74,12792,12793,12795],{"class":76,"line":77},[74,12794,1911],{"class":80},[74,12796,1914],{"class":190},[74,12798,12799,12801,12803,12805],{"class":76,"line":94},[74,12800,1919],{"class":80},[74,12802,1922],{"class":80},[74,12804,1926],{"class":1925},[74,12806,1252],{"class":84},[74,12808,12809,12811],{"class":76,"line":1141},[74,12810,1911],{"class":80},[74,12812,12028],{"class":190},[74,12814,12815],{"class":76,"line":1156},[74,12816,12817],{"class":144},"\u002F\u002F定义学生结构体\n",[74,12819,12820,12822,12824],{"class":76,"line":1162},[74,12821,12038],{"class":80},[74,12823,12177],{"class":1925},[74,12825,2637],{"class":84},[74,12827,12828],{"class":76,"line":1176},[74,12829,1508],{"class":84},[74,12831,12832],{"class":76,"line":1182},[74,12833,12064],{"class":84},[74,12835,12836,12838],{"class":76,"line":1273},[74,12837,1947],{"class":80},[74,12839,12076],{"class":84},[74,12841,12842,12844],{"class":76,"line":1279},[74,12843,1947],{"class":80},[74,12845,12088],{"class":84},[74,12847,12848],{"class":76,"line":1291},[74,12849,1527],{"class":84},[74,12851,12852],{"class":76,"line":1574},[74,12853,12854],{"class":144},"\u002F\u002F定义老师结构体\n",[74,12856,12857,12859],{"class":76,"line":1579},[74,12858,12038],{"class":80},[74,12860,12861],{"class":1925}," Teacher\n",[74,12863,12864],{"class":76,"line":1585},[74,12865,1508],{"class":84},[74,12867,12868,12870],{"class":76,"line":1590},[74,12869,1947],{"class":80},[74,12871,12872],{"class":84}," id;\n",[74,12874,12875],{"class":76,"line":1604},[74,12876,12064],{"class":84},[74,12878,12879,12881],{"class":76,"line":1609},[74,12880,1947],{"class":80},[74,12882,12076],{"class":84},[74,12884,12885],{"class":76,"line":1615},[74,12886,12887],{"class":84},"    Student stu;\n",[74,12889,12890],{"class":76,"line":1636},[74,12891,1527],{"class":84},[74,12893,12894,12896,12898],{"class":76,"line":1641},[74,12895,88],{"class":80},[74,12897,1935],{"class":1925},[74,12899,10257],{"class":84},[74,12901,12902],{"class":76,"line":1655},[74,12903,1508],{"class":84},[74,12905,12906],{"class":76,"line":1660},[74,12907,12908],{"class":144},"    \u002F\u002F结构体嵌套结构体\n",[74,12910,12911],{"class":76,"line":1689},[74,12912,12913],{"class":144},"    \u002F\u002F创建老师\n",[74,12915,12916],{"class":76,"line":1694},[74,12917,12918],{"class":84},"    Teacher t;\n",[74,12920,12921,12924,12926,12928],{"class":76,"line":1711},[74,12922,12923],{"class":84},"    t.id",[74,12925,131],{"class":80},[74,12927,397],{"class":134},[74,12929,1252],{"class":84},[74,12931,12932,12935,12937,12940],{"class":76,"line":1716},[74,12933,12934],{"class":84},"    t.name",[74,12936,131],{"class":80},[74,12938,12939],{"class":190},"\"老王\"",[74,12941,1252],{"class":84},[74,12943,12944,12947,12949,12951],{"class":76,"line":1721},[74,12945,12946],{"class":84},"    t.age",[74,12948,131],{"class":80},[74,12950,736],{"class":134},[74,12952,1252],{"class":84},[74,12954,12955,12958,12960,12963],{"class":76,"line":1726},[74,12956,12957],{"class":84},"    t.stu.name",[74,12959,131],{"class":80},[74,12961,12962],{"class":190},"\"小王\"",[74,12964,12965],{"class":84},"；\n",[74,12967,12968,12971,12973,12975],{"class":76,"line":1740},[74,12969,12970],{"class":84},"    t.stu.age",[74,12972,131],{"class":80},[74,12974,786],{"class":134},[74,12976,1252],{"class":84},[74,12978,12979,12982,12984,12986],{"class":76,"line":1745},[74,12980,12981],{"class":84},"    t.stu.score",[74,12983,131],{"class":80},[74,12985,430],{"class":134},[74,12987,1252],{"class":84},[74,12989,12990],{"class":76,"line":2540},[74,12991,1527],{"class":84},[14,12993,12995],{"id":12994},"_45结构体做函数参数","4.5结构体做函数参数",[19,12997,12998],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[64,13000,13002],{"className":66,"code":13001,"language":68,"meta":69,"style":69},"#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",[71,13003,13004,13010,13020,13026,13032,13036,13040,13046,13052,13056,13061,13066,13083,13087,13120,13124,13129,13148,13152,13183,13187,13195,13199,13208,13220,13232,13244,13257,13265,13278,13290,13298],{"__ignoreMap":69},[74,13005,13006,13008],{"class":76,"line":77},[74,13007,1911],{"class":80},[74,13009,1914],{"class":190},[74,13011,13012,13014,13016,13018],{"class":76,"line":94},[74,13013,1919],{"class":80},[74,13015,1922],{"class":80},[74,13017,1926],{"class":1925},[74,13019,1252],{"class":84},[74,13021,13022,13024],{"class":76,"line":1141},[74,13023,1911],{"class":80},[74,13025,12028],{"class":190},[74,13027,13028,13030],{"class":76,"line":1156},[74,13029,12038],{"class":80},[74,13031,12041],{"class":1925},[74,13033,13034],{"class":76,"line":1162},[74,13035,1508],{"class":84},[74,13037,13038],{"class":76,"line":1176},[74,13039,12064],{"class":84},[74,13041,13042,13044],{"class":76,"line":1182},[74,13043,1947],{"class":80},[74,13045,12076],{"class":84},[74,13047,13048,13050],{"class":76,"line":1273},[74,13049,1947],{"class":80},[74,13051,12088],{"class":84},[74,13053,13054],{"class":76,"line":1279},[74,13055,3958],{"class":84},[74,13057,13058],{"class":76,"line":1291},[74,13059,13060],{"class":144},"\u002F\u002F打印学生信息的函数\n",[74,13062,13063],{"class":76,"line":1574},[74,13064,13065],{"class":144},"\u002F\u002F值传递\n",[74,13067,13068,13070,13073,13075,13077,13079,13081],{"class":76,"line":1579},[74,13069,9643],{"class":80},[74,13071,13072],{"class":1925}," printStudent1",[74,13074,85],{"class":84},[74,13076,12038],{"class":80},[74,13078,12177],{"class":1925},[74,13080,12707],{"class":9495},[74,13082,91],{"class":84},[74,13084,13085],{"class":76,"line":1585},[74,13086,1508],{"class":84},[74,13088,13089,13091,13093,13096,13098,13101,13103,13106,13108,13110,13112,13115,13117],{"class":76,"line":1590},[74,13090,10808],{"class":84},[74,13092,1130],{"class":80},[74,13094,13095],{"class":84}," s.name ",[74,13097,1130],{"class":80},[74,13099,13100],{"class":190}," \" \"",[74,13102,1406],{"class":80},[74,13104,13105],{"class":84}," s.age ",[74,13107,1130],{"class":80},[74,13109,13100],{"class":190},[74,13111,1406],{"class":80},[74,13113,13114],{"class":84}," s.score ",[74,13116,1130],{"class":80},[74,13118,13119],{"class":84}," endl;\n",[74,13121,13122],{"class":76,"line":1604},[74,13123,1527],{"class":84},[74,13125,13126],{"class":76,"line":1609},[74,13127,13128],{"class":144},"\u002F\u002F地址传递\n",[74,13130,13131,13133,13136,13138,13140,13142,13144,13146],{"class":76,"line":1615},[74,13132,9643],{"class":80},[74,13134,13135],{"class":1925}," printStudent2",[74,13137,85],{"class":84},[74,13139,12038],{"class":80},[74,13141,12177],{"class":1925},[74,13143,10797],{"class":80},[74,13145,781],{"class":9495},[74,13147,91],{"class":84},[74,13149,13150],{"class":76,"line":1636},[74,13151,1508],{"class":84},[74,13153,13154,13156,13158,13161,13163,13165,13167,13170,13172,13174,13176,13179,13181],{"class":76,"line":1641},[74,13155,10808],{"class":84},[74,13157,1130],{"class":80},[74,13159,13160],{"class":84}," s->name ",[74,13162,1130],{"class":80},[74,13164,13100],{"class":190},[74,13166,1406],{"class":80},[74,13168,13169],{"class":84}," s->age ",[74,13171,1130],{"class":80},[74,13173,13100],{"class":190},[74,13175,1406],{"class":80},[74,13177,13178],{"class":84}," s->score ",[74,13180,1130],{"class":80},[74,13182,13119],{"class":84},[74,13184,13185],{"class":76,"line":1655},[74,13186,1527],{"class":84},[74,13188,13189,13191,13193],{"class":76,"line":1660},[74,13190,88],{"class":80},[74,13192,1935],{"class":1925},[74,13194,1938],{"class":84},[74,13196,13197],{"class":76,"line":1689},[74,13198,1508],{"class":84},[74,13200,13201,13203,13205],{"class":76,"line":1694},[74,13202,12174],{"class":80},[74,13204,12177],{"class":1925},[74,13206,13207],{"class":84}," s;\n",[74,13209,13210,13213,13215,13218],{"class":76,"line":1711},[74,13211,13212],{"class":84},"    s.name ",[74,13214,131],{"class":80},[74,13216,13217],{"class":190}," \"张三\"",[74,13219,1252],{"class":84},[74,13221,13222,13225,13227,13230],{"class":76,"line":1716},[74,13223,13224],{"class":84},"    s.age ",[74,13226,131],{"class":80},[74,13228,13229],{"class":134}," 20",[74,13231,1252],{"class":84},[74,13233,13234,13237,13239,13242],{"class":76,"line":1721},[74,13235,13236],{"class":84},"    s.score ",[74,13238,131],{"class":80},[74,13240,13241],{"class":134}," 85",[74,13243,1252],{"class":84},[74,13245,13246,13248,13250,13253,13255],{"class":76,"line":1726},[74,13247,1513],{"class":84},[74,13249,1130],{"class":80},[74,13251,13252],{"class":190},"\"值传递:\"",[74,13254,1130],{"class":80},[74,13256,1153],{"class":84},[74,13258,13259,13262],{"class":76,"line":1740},[74,13260,13261],{"class":1925},"    printStudent1",[74,13263,13264],{"class":84},"(s);\n",[74,13266,13267,13269,13271,13274,13276],{"class":76,"line":1745},[74,13268,1513],{"class":84},[74,13270,1130],{"class":80},[74,13272,13273],{"class":190},"\"地址传递:\"",[74,13275,1130],{"class":80},[74,13277,1153],{"class":84},[74,13279,13280,13283,13285,13287],{"class":76,"line":2540},[74,13281,13282],{"class":1925},"    printStudent2",[74,13284,85],{"class":84},[74,13286,439],{"class":80},[74,13288,13289],{"class":84},"s); \n",[74,13291,13292,13294,13296],{"class":76,"line":2554},[74,13293,4053],{"class":80},[74,13295,4056],{"class":134},[74,13297,1252],{"class":84},[74,13299,13300],{"class":76,"line":2562},[74,13301,1527],{"class":84},[19,13303,13304],{},"注意：",[1093,13306,13307,13310],{},[30,13308,13309],{},"1.先定义结构体，不要在函数中写结构体的定义",[30,13311,13312],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,13314,13316],{"id":13315},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,13318,13319],{},"用const防止误操作",[64,13321,13323],{"className":66,"code":13322,"language":68,"meta":69,"style":69},"#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",[71,13324,13325,13331,13341,13347,13352,13356,13360,13366,13372,13376,13392,13396,13419,13423,13431,13435,13456,13463,13467],{"__ignoreMap":69},[74,13326,13327,13329],{"class":76,"line":77},[74,13328,1911],{"class":80},[74,13330,1914],{"class":190},[74,13332,13333,13335,13337,13339],{"class":76,"line":94},[74,13334,1919],{"class":80},[74,13336,1922],{"class":80},[74,13338,1926],{"class":1925},[74,13340,1252],{"class":84},[74,13342,13343,13345],{"class":76,"line":1141},[74,13344,1911],{"class":80},[74,13346,12028],{"class":190},[74,13348,13349],{"class":76,"line":1156},[74,13350,13351],{"class":84},"sctuct Student\n",[74,13353,13354],{"class":76,"line":1162},[74,13355,1508],{"class":84},[74,13357,13358],{"class":76,"line":1176},[74,13359,12064],{"class":84},[74,13361,13362,13364],{"class":76,"line":1182},[74,13363,1947],{"class":80},[74,13365,12076],{"class":84},[74,13367,13368,13370],{"class":76,"line":1273},[74,13369,1947],{"class":80},[74,13371,12088],{"class":84},[74,13373,13374],{"class":76,"line":1279},[74,13375,3958],{"class":84},[74,13377,13378,13380,13383,13385,13388,13390],{"class":76,"line":1291},[74,13379,9643],{"class":80},[74,13381,13382],{"class":1925}," printStudents",[74,13384,85],{"class":84},[74,13386,13387],{"class":1925},"student",[74,13389,12707],{"class":9495},[74,13391,91],{"class":84},[74,13393,13394],{"class":76,"line":1574},[74,13395,1508],{"class":84},[74,13397,13398,13400,13402,13405,13407,13410,13412,13415,13417],{"class":76,"line":1579},[74,13399,1513],{"class":84},[74,13401,1130],{"class":80},[74,13403,13404],{"class":84},"s.name",[74,13406,1130],{"class":80},[74,13408,13409],{"class":84},"s.age",[74,13411,1130],{"class":80},[74,13413,13414],{"class":84},"s.score",[74,13416,1130],{"class":80},[74,13418,1153],{"class":84},[74,13420,13421],{"class":76,"line":1585},[74,13422,1527],{"class":84},[74,13424,13425,13427,13429],{"class":76,"line":1590},[74,13426,88],{"class":80},[74,13428,1935],{"class":1925},[74,13430,10257],{"class":84},[74,13432,13433],{"class":76,"line":1604},[74,13434,1508],{"class":84},[74,13436,13437,13440,13442,13444,13446,13448,13450,13452,13454],{"class":76,"line":1609},[74,13438,13439],{"class":84},"    Student s",[74,13441,131],{"class":80},[74,13443,982],{"class":84},[74,13445,12195],{"class":190},[74,13447,464],{"class":84},[74,13449,736],{"class":134},[74,13451,464],{"class":84},[74,13453,736],{"class":134},[74,13455,3958],{"class":84},[74,13457,13458,13461],{"class":76,"line":1615},[74,13459,13460],{"class":1925},"    printStudent",[74,13462,13264],{"class":84},[74,13464,13465],{"class":76,"line":1636},[74,13466,2363],{"emptyLinePlaceholder":2362},[74,13468,13469],{"class":76,"line":1641},[74,13470,1527],{"class":84},[19,13472,13304],{},[1093,13474,13475,13478,13481],{},[30,13476,13477],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[30,13479,13480],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[30,13482,13483],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[64,13485,13487],{"className":66,"code":13486,"language":68,"meta":69,"style":69},"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",[71,13488,13489,13508,13512,13517,13537],{"__ignoreMap":69},[74,13490,13491,13493,13495,13497,13499,13502,13504,13506],{"class":76,"line":77},[74,13492,9643],{"class":80},[74,13494,13382],{"class":1925},[74,13496,85],{"class":84},[74,13498,11071],{"class":80},[74,13500,13501],{"class":1925}," student",[74,13503,10797],{"class":80},[74,13505,781],{"class":9495},[74,13507,91],{"class":84},[74,13509,13510],{"class":76,"line":94},[74,13511,1508],{"class":84},[74,13513,13514],{"class":76,"line":1141},[74,13515,13516],{"class":144},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[74,13518,13519,13521,13523,13525,13527,13529,13531,13533,13535],{"class":76,"line":1156},[74,13520,1513],{"class":84},[74,13522,1130],{"class":80},[74,13524,13404],{"class":84},[74,13526,1130],{"class":80},[74,13528,13409],{"class":84},[74,13530,1130],{"class":80},[74,13532,13414],{"class":84},[74,13534,1130],{"class":80},[74,13536,1153],{"class":84},[74,13538,13539],{"class":76,"line":1162},[74,13540,1527],{"class":84},[14,13542,13544],{"id":13543},"_47案例","4.7案例",[27,13546,13547],{},[30,13548,13549],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[64,13551,13553],{"className":66,"code":13552,"language":68,"meta":69,"style":69},"#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",[71,13554,13555,13561,13571,13577,13584,13588,13594,13598,13603,13609,13615,13619,13623,13629,13633,13638,13643,13656,13660,13665,13691,13695,13707,13734,13738,13750,13760,13764,13769,13798,13802,13814,13823,13850,13861,13871,13875,13879,13883,13888,13912,13916,13940,13944,13963,13989,13993,14018,14041,14065,14070,14075,14080,14089,14094,14100,14121,14127,14141,14147,14174,14183,14189,14197,14202],{"__ignoreMap":69},[74,13556,13557,13559],{"class":76,"line":77},[74,13558,1911],{"class":80},[74,13560,1914],{"class":190},[74,13562,13563,13565,13567,13569],{"class":76,"line":94},[74,13564,1919],{"class":80},[74,13566,1922],{"class":80},[74,13568,1926],{"class":1925},[74,13570,1252],{"class":84},[74,13572,13573,13575],{"class":76,"line":1141},[74,13574,1911],{"class":80},[74,13576,12028],{"class":190},[74,13578,13579,13581],{"class":76,"line":1156},[74,13580,1911],{"class":80},[74,13582,13583],{"class":190},"\u003Cctime>\n",[74,13585,13586],{"class":76,"line":1162},[74,13587,12817],{"class":144},[74,13589,13590,13592],{"class":76,"line":1176},[74,13591,12038],{"class":80},[74,13593,12041],{"class":1925},[74,13595,13596],{"class":76,"line":1182},[74,13597,1508],{"class":84},[74,13599,13600],{"class":76,"line":1273},[74,13601,13602],{"class":84},"    string sName;\n",[74,13604,13605,13607],{"class":76,"line":1279},[74,13606,1947],{"class":80},[74,13608,12076],{"class":84},[74,13610,13611,13613],{"class":76,"line":1291},[74,13612,1947],{"class":80},[74,13614,12088],{"class":84},[74,13616,13617],{"class":76,"line":1574},[74,13618,3958],{"class":84},[74,13620,13621],{"class":76,"line":1579},[74,13622,12854],{"class":144},[74,13624,13625,13627],{"class":76,"line":1585},[74,13626,12038],{"class":80},[74,13628,12861],{"class":1925},[74,13630,13631],{"class":76,"line":1590},[74,13632,1508],{"class":84},[74,13634,13635],{"class":76,"line":1604},[74,13636,13637],{"class":84},"    string tName;\n",[74,13639,13640],{"class":76,"line":1609},[74,13641,13642],{"class":144},"    \u002F\u002F学生数组\n",[74,13644,13645,13647,13649,13652,13654],{"class":76,"line":1615},[74,13646,12174],{"class":80},[74,13648,12177],{"class":1925},[74,13650,13651],{"class":84}," sArray[",[74,13653,405],{"class":134},[74,13655,4653],{"class":84},[74,13657,13658],{"class":76,"line":1636},[74,13659,3958],{"class":84},[74,13661,13662],{"class":76,"line":1641},[74,13663,13664],{"class":144},"\u002F\u002F给老师和学生赋值的函数\n",[74,13666,13667,13669,13672,13674,13676,13679,13682,13685,13687,13689],{"class":76,"line":1655},[74,13668,9643],{"class":80},[74,13670,13671],{"class":1925}," allocateSpace",[74,13673,85],{"class":84},[74,13675,12038],{"class":80},[74,13677,13678],{"class":1925}," Teacher",[74,13680,13681],{"class":9495}," tArray",[74,13683,13684],{"class":84},"[],",[74,13686,88],{"class":80},[74,13688,11610],{"class":9495},[74,13690,91],{"class":84},[74,13692,13693],{"class":76,"line":1660},[74,13694,1508],{"class":84},[74,13696,13697,13700,13702,13705],{"class":76,"line":1689},[74,13698,13699],{"class":84},"    string nameSeed",[74,13701,131],{"class":80},[74,13703,13704],{"class":190},"\"ABCDE\"",[74,13706,1252],{"class":84},[74,13708,13709,13711,13713,13715,13718,13720,13722,13725,13727,13730,13732],{"class":76,"line":1694},[74,13710,3164],{"class":80},[74,13712,1620],{"class":84},[74,13714,88],{"class":80},[74,13716,13717],{"class":84}," i ",[74,13719,131],{"class":80},[74,13721,4056],{"class":134},[74,13723,13724],{"class":84},"; i ",[74,13726,996],{"class":80},[74,13728,13729],{"class":84}," len; i",[74,13731,2254],{"class":80},[74,13733,91],{"class":84},[74,13735,13736],{"class":76,"line":1711},[74,13737,1992],{"class":84},[74,13739,13740,13743,13745,13748],{"class":76,"line":1716},[74,13741,13742],{"class":84},"        tArray[i].tName ",[74,13744,131],{"class":80},[74,13746,13747],{"class":190}," \"Teacher_\"",[74,13749,1252],{"class":84},[74,13751,13752,13754,13757],{"class":76,"line":1721},[74,13753,13742],{"class":84},[74,13755,13756],{"class":80},"+=",[74,13758,13759],{"class":84},"nameSeed[i];\n",[74,13761,13762],{"class":76,"line":1726},[74,13763,2363],{"emptyLinePlaceholder":2362},[74,13765,13766],{"class":76,"line":1740},[74,13767,13768],{"class":144},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[74,13770,13771,13773,13775,13777,13780,13782,13784,13787,13789,13791,13794,13796],{"class":76,"line":1745},[74,13772,3366],{"class":80},[74,13774,1620],{"class":84},[74,13776,88],{"class":80},[74,13778,13779],{"class":84}," j ",[74,13781,131],{"class":80},[74,13783,4056],{"class":134},[74,13785,13786],{"class":84},"; j ",[74,13788,996],{"class":80},[74,13790,2110],{"class":134},[74,13792,13793],{"class":84},"; j",[74,13795,2254],{"class":80},[74,13797,91],{"class":84},[74,13799,13800],{"class":76,"line":2540},[74,13801,2473],{"class":84},[74,13803,13804,13807,13809,13812],{"class":76,"line":2554},[74,13805,13806],{"class":84},"            tArray[i].sArray[j].sName ",[74,13808,131],{"class":80},[74,13810,13811],{"class":190}," \"Student_\"",[74,13813,1252],{"class":84},[74,13815,13816,13818,13820],{"class":76,"line":2562},[74,13817,13806],{"class":84},[74,13819,13756],{"class":80},[74,13821,13822],{"class":84}," nameSeed[j];\n",[74,13824,13825,13828,13831,13833,13835,13837,13839,13841,13843,13845,13847],{"class":76,"line":2567},[74,13826,13827],{"class":80},"            int",[74,13829,13830],{"class":84}," random",[74,13832,131],{"class":80},[74,13834,2387],{"class":1925},[74,13836,2390],{"class":84},[74,13838,414],{"class":80},[74,13840,993],{"class":134},[74,13842,567],{"class":80},[74,13844,487],{"class":134},[74,13846,141],{"class":84},[74,13848,13849],{"class":144},"\u002F\u002F40~99\n",[74,13851,13852,13855,13857,13859],{"class":76,"line":2573},[74,13853,13854],{"class":84},"            tArray[i].sArray[j].age ",[74,13856,131],{"class":80},[74,13858,13229],{"class":134},[74,13860,1252],{"class":84},[74,13862,13863,13866,13868],{"class":76,"line":2579},[74,13864,13865],{"class":84},"            tArray[i].sArray[j].score ",[74,13867,131],{"class":80},[74,13869,13870],{"class":84}," random;\n",[74,13872,13873],{"class":76,"line":2584},[74,13874,2492],{"class":84},[74,13876,13877],{"class":76,"line":12227},[74,13878,2149],{"class":84},[74,13880,13881],{"class":76,"line":12251},[74,13882,1527],{"class":84},[74,13884,13885],{"class":76,"line":12256},[74,13886,13887],{"class":144},"\u002F\u002F打印所有信息的函数\n",[74,13889,13890,13892,13895,13897,13899,13901,13903,13906,13908,13910],{"class":76,"line":12262},[74,13891,9643],{"class":80},[74,13893,13894],{"class":1925}," printInfo",[74,13896,85],{"class":84},[74,13898,12038],{"class":80},[74,13900,13678],{"class":1925},[74,13902,13681],{"class":9495},[74,13904,13905],{"class":84},"[], ",[74,13907,88],{"class":80},[74,13909,11610],{"class":9495},[74,13911,91],{"class":84},[74,13913,13914],{"class":76,"line":12289},[74,13915,1508],{"class":84},[74,13917,13918,13920,13922,13924,13926,13928,13930,13932,13934,13936,13938],{"class":76,"line":12294},[74,13919,3164],{"class":80},[74,13921,1620],{"class":84},[74,13923,88],{"class":80},[74,13925,13717],{"class":84},[74,13927,131],{"class":80},[74,13929,4056],{"class":134},[74,13931,13724],{"class":84},[74,13933,996],{"class":80},[74,13935,13729],{"class":84},[74,13937,2254],{"class":80},[74,13939,91],{"class":84},[74,13941,13942],{"class":76,"line":12300},[74,13943,1992],{"class":84},[74,13945,13946,13949,13951,13954,13956,13959,13961],{"class":76,"line":12312},[74,13947,13948],{"class":84},"        cout ",[74,13950,1130],{"class":80},[74,13952,13953],{"class":190}," \"Teacher: \"",[74,13955,1406],{"class":80},[74,13957,13958],{"class":84}," tArray[i].tName ",[74,13960,1130],{"class":80},[74,13962,13119],{"class":84},[74,13964,13965,13967,13969,13971,13973,13975,13977,13979,13981,13983,13985,13987],{"class":76,"line":12324},[74,13966,3366],{"class":80},[74,13968,1620],{"class":84},[74,13970,88],{"class":80},[74,13972,13779],{"class":84},[74,13974,131],{"class":80},[74,13976,4056],{"class":134},[74,13978,13786],{"class":84},[74,13980,996],{"class":80},[74,13982,2110],{"class":134},[74,13984,13793],{"class":84},[74,13986,2254],{"class":80},[74,13988,91],{"class":84},[74,13990,13991],{"class":76,"line":12336},[74,13992,2473],{"class":84},[74,13994,13996,13999,14001,14004,14006,14009,14011,14014,14016],{"class":76,"line":13995},47,[74,13997,13998],{"class":84},"            cout ",[74,14000,1130],{"class":80},[74,14002,14003],{"class":190}," \"",[74,14005,1192],{"class":134},[74,14007,14008],{"class":190},"Student: \"",[74,14010,1406],{"class":80},[74,14012,14013],{"class":84}," tArray[i].sArray[j].sName",[74,14015,1130],{"class":80},[74,14017,1153],{"class":84},[74,14019,14021,14023,14025,14027,14029,14032,14034,14037,14039],{"class":76,"line":14020},48,[74,14022,13998],{"class":84},[74,14024,1130],{"class":80},[74,14026,14003],{"class":190},[74,14028,1192],{"class":134},[74,14030,14031],{"class":190},"Age: \"",[74,14033,1406],{"class":80},[74,14035,14036],{"class":84}," tArray[i].sArray[j].age ",[74,14038,1130],{"class":80},[74,14040,13119],{"class":84},[74,14042,14044,14046,14048,14050,14052,14055,14057,14060,14062],{"class":76,"line":14043},49,[74,14045,13998],{"class":84},[74,14047,1130],{"class":80},[74,14049,14003],{"class":190},[74,14051,1192],{"class":134},[74,14053,14054],{"class":190},"Score: \"",[74,14056,1406],{"class":80},[74,14058,14059],{"class":84}," tArray[i].sArray[j].score ",[74,14061,1130],{"class":80},[74,14063,14064],{"class":84}," endl;   \n",[74,14066,14068],{"class":76,"line":14067},50,[74,14069,2492],{"class":84},[74,14071,14073],{"class":76,"line":14072},51,[74,14074,2149],{"class":84},[74,14076,14078],{"class":76,"line":14077},52,[74,14079,1527],{"class":84},[74,14081,14083,14085,14087],{"class":76,"line":14082},53,[74,14084,88],{"class":80},[74,14086,1935],{"class":1925},[74,14088,1938],{"class":84},[74,14090,14092],{"class":76,"line":14091},54,[74,14093,1508],{"class":84},[74,14095,14097],{"class":76,"line":14096},55,[74,14098,14099],{"class":144},"    \u002F\u002F随机数种子\n",[74,14101,14103,14105,14107,14109,14111,14113,14115,14117,14119],{"class":76,"line":14102},56,[74,14104,2335],{"class":1925},[74,14106,2338],{"class":84},[74,14108,2341],{"class":80},[74,14110,2344],{"class":80},[74,14112,515],{"class":84},[74,14114,2349],{"class":1925},[74,14116,85],{"class":84},[74,14118,2354],{"class":134},[74,14120,2357],{"class":84},[74,14122,14124],{"class":76,"line":14123},57,[74,14125,14126],{"class":144},"    \u002F\u002F1.创建3名老师的数组\n",[74,14128,14130,14132,14134,14137,14139],{"class":76,"line":14129},58,[74,14131,12174],{"class":80},[74,14133,13678],{"class":1925},[74,14135,14136],{"class":84}," tArray[",[74,14138,157],{"class":134},[74,14140,4653],{"class":84},[74,14142,14144],{"class":76,"line":14143},59,[74,14145,14146],{"class":144},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[74,14148,14150,14152,14155,14157,14160,14163,14165,14167,14170,14172],{"class":76,"line":14149},60,[74,14151,1947],{"class":80},[74,14153,14154],{"class":84}," len ",[74,14156,131],{"class":80},[74,14158,14159],{"class":80}," sizeof",[74,14161,14162],{"class":84},"(tArray) ",[74,14164,670],{"class":80},[74,14166,14159],{"class":80},[74,14168,14169],{"class":84},"(tArray[",[74,14171,277],{"class":134},[74,14173,3819],{"class":84},[74,14175,14177,14180],{"class":76,"line":14176},61,[74,14178,14179],{"class":1925},"    allocateSpace",[74,14181,14182],{"class":84},"(tArray, len);\n",[74,14184,14186],{"class":76,"line":14185},62,[74,14187,14188],{"class":144},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[74,14190,14192,14195],{"class":76,"line":14191},63,[74,14193,14194],{"class":1925},"    printInfo",[74,14196,14182],{"class":84},[74,14198,14200],{"class":76,"line":14199},64,[74,14201,2363],{"emptyLinePlaceholder":2362},[74,14203,14205],{"class":76,"line":14204},65,[74,14206,1527],{"class":84},[27,14208,14209],{"start":94},[30,14210,14211,14214],{},[235,14212,14213],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,14216,14217],{},"五名英雄信息如下：",[64,14219,14223],{"className":14220,"code":14221,"language":14222,"meta":69,"style":69},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[71,14224,14225,14243,14260,14277,14294],{"__ignoreMap":69},[74,14226,14227,14229,14232,14234,14236,14238,14241],{"class":76,"line":77},[74,14228,4880],{"class":84},[74,14230,14231],{"class":190},"\"刘备\"",[74,14233,464],{"class":84},[74,14235,861],{"class":134},[74,14237,464],{"class":84},[74,14239,14240],{"class":190},"\"男\"",[74,14242,4893],{"class":84},[74,14244,14245,14247,14250,14252,14254,14256,14258],{"class":76,"line":94},[74,14246,4880],{"class":84},[74,14248,14249],{"class":190},"\"关羽\"",[74,14251,464],{"class":84},[74,14253,836],{"class":134},[74,14255,464],{"class":84},[74,14257,14240],{"class":190},[74,14259,4893],{"class":84},[74,14261,14262,14264,14267,14269,14271,14273,14275],{"class":76,"line":1141},[74,14263,4880],{"class":84},[74,14265,14266],{"class":190},"\"张飞\"",[74,14268,464],{"class":84},[74,14270,786],{"class":134},[74,14272,464],{"class":84},[74,14274,14240],{"class":190},[74,14276,4893],{"class":84},[74,14278,14279,14281,14284,14286,14288,14290,14292],{"class":76,"line":1156},[74,14280,4880],{"class":84},[74,14282,14283],{"class":190},"\"赵云\"",[74,14285,464],{"class":84},[74,14287,811],{"class":134},[74,14289,464],{"class":84},[74,14291,14240],{"class":190},[74,14293,4893],{"class":84},[74,14295,14296,14298,14301,14303,14305,14307,14310],{"class":76,"line":1162},[74,14297,4880],{"class":84},[74,14299,14300],{"class":190},"\"貂蝉\"",[74,14302,464],{"class":84},[74,14304,761],{"class":134},[74,14306,464],{"class":84},[74,14308,14309],{"class":190},"\"女\"",[74,14311,4893],{"class":84},[19,14313,14314],{},"代码：",[64,14316,14318],{"className":66,"code":14317,"language":68,"meta":69,"style":69},"#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",[71,14319,14320,14326,14336,14342,14349,14353,14357,14363,14368,14372,14377,14400,14404,14429,14433,14466,14471,14500,14505,14520,14546,14566,14571,14576,14580,14584,14589,14611,14615,14639,14643,14705,14709,14713,14721,14725,14730,14741,14745,14761,14777,14793,14809,14825,14829,14849,14871,14876,14889,14896,14901,14907,14912,14925,14931],{"__ignoreMap":69},[74,14321,14322,14324],{"class":76,"line":77},[74,14323,1911],{"class":80},[74,14325,1914],{"class":190},[74,14327,14328,14330,14332,14334],{"class":76,"line":94},[74,14329,1919],{"class":80},[74,14331,1922],{"class":80},[74,14333,1926],{"class":1925},[74,14335,1252],{"class":84},[74,14337,14338,14340],{"class":76,"line":1141},[74,14339,1911],{"class":80},[74,14341,12028],{"class":190},[74,14343,14344,14346],{"class":76,"line":1156},[74,14345,12038],{"class":80},[74,14347,14348],{"class":1925}," Sanguo\n",[74,14350,14351],{"class":76,"line":1162},[74,14352,1508],{"class":84},[74,14354,14355],{"class":76,"line":1176},[74,14356,12064],{"class":84},[74,14358,14359,14361],{"class":76,"line":1182},[74,14360,1947],{"class":80},[74,14362,12076],{"class":84},[74,14364,14365],{"class":76,"line":1273},[74,14366,14367],{"class":84},"    string gender;\n",[74,14369,14370],{"class":76,"line":1279},[74,14371,3958],{"class":84},[74,14373,14374],{"class":76,"line":1291},[74,14375,14376],{"class":144},"\u002F\u002F定义排序函数\n",[74,14378,14379,14381,14383,14385,14388,14390,14392,14394,14396,14398],{"class":76,"line":1574},[74,14380,9643],{"class":80},[74,14382,11595],{"class":1925},[74,14384,85],{"class":84},[74,14386,14387],{"class":1925},"Sanguo",[74,14389,10797],{"class":80},[74,14391,781],{"class":9495},[74,14393,464],{"class":84},[74,14395,88],{"class":80},[74,14397,11610],{"class":9495},[74,14399,91],{"class":84},[74,14401,14402],{"class":76,"line":1579},[74,14403,1508],{"class":84},[74,14405,14406,14408,14410,14412,14414,14416,14418,14420,14422,14425,14427],{"class":76,"line":1585},[74,14407,3164],{"class":80},[74,14409,85],{"class":84},[74,14411,88],{"class":80},[74,14413,2995],{"class":84},[74,14415,131],{"class":80},[74,14417,277],{"class":134},[74,14419,3002],{"class":84},[74,14421,996],{"class":80},[74,14423,14424],{"class":84},"len;i",[74,14426,2254],{"class":80},[74,14428,91],{"class":84},[74,14430,14431],{"class":76,"line":1590},[74,14432,1992],{"class":84},[74,14434,14435,14438,14440,14442,14444,14446,14448,14450,14452,14454,14456,14458,14460,14462,14464],{"class":76,"line":1604},[74,14436,14437],{"class":80},"     for",[74,14439,1620],{"class":84},[74,14441,88],{"class":80},[74,14443,3373],{"class":84},[74,14445,131],{"class":80},[74,14447,277],{"class":134},[74,14449,3380],{"class":84},[74,14451,996],{"class":80},[74,14453,11637],{"class":84},[74,14455,618],{"class":80},[74,14457,303],{"class":134},[74,14459,618],{"class":80},[74,14461,3513],{"class":84},[74,14463,2254],{"class":80},[74,14465,91],{"class":84},[74,14467,14468],{"class":76,"line":1609},[74,14469,14470],{"class":84},"     {\n",[74,14472,14473,14476,14479,14481,14484,14486,14489,14491,14493,14495,14497],{"class":76,"line":1615},[74,14474,14475],{"class":80},"         if",[74,14477,14478],{"class":84}," ((s",[74,14480,567],{"class":80},[74,14482,14483],{"class":84},"j)->age ",[74,14485,1046],{"class":80},[74,14487,14488],{"class":84}," (s",[74,14490,567],{"class":80},[74,14492,553],{"class":84},[74,14494,567],{"class":80},[74,14496,303],{"class":134},[74,14498,14499],{"class":84},")->age)\n",[74,14501,14502],{"class":76,"line":1636},[74,14503,14504],{"class":84},"         {\n",[74,14506,14507,14510,14512,14515,14517],{"class":76,"line":1641},[74,14508,14509],{"class":84},"             Sanguo temp",[74,14511,11432],{"class":80},[74,14513,14514],{"class":84},"(s",[74,14516,567],{"class":80},[74,14518,14519],{"class":84},"j);\n",[74,14521,14522,14525,14527,14529,14532,14534,14536,14538,14540,14542,14544],{"class":76,"line":1655},[74,14523,14524],{"class":80},"             *",[74,14526,14514],{"class":84},[74,14528,567],{"class":80},[74,14530,14531],{"class":84},"j)",[74,14533,11432],{"class":80},[74,14535,14514],{"class":84},[74,14537,567],{"class":80},[74,14539,553],{"class":84},[74,14541,567],{"class":80},[74,14543,303],{"class":134},[74,14545,2682],{"class":84},[74,14547,14548,14550,14552,14554,14556,14558,14560,14562,14564],{"class":76,"line":1660},[74,14549,14524],{"class":80},[74,14551,14514],{"class":84},[74,14553,567],{"class":80},[74,14555,553],{"class":84},[74,14557,567],{"class":80},[74,14559,303],{"class":134},[74,14561,515],{"class":84},[74,14563,131],{"class":80},[74,14565,4243],{"class":84},[74,14567,14568],{"class":76,"line":1689},[74,14569,14570],{"class":84},"         }\n",[74,14572,14573],{"class":76,"line":1694},[74,14574,14575],{"class":84},"     }\n",[74,14577,14578],{"class":76,"line":1711},[74,14579,2149],{"class":84},[74,14581,14582],{"class":76,"line":1716},[74,14583,1527],{"class":84},[74,14585,14586],{"class":76,"line":1721},[74,14587,14588],{"class":144},"\u002F\u002F定义打印函数\n",[74,14590,14591,14593,14595,14597,14599,14601,14603,14605,14607,14609],{"class":76,"line":1726},[74,14592,9643],{"class":80},[74,14594,13894],{"class":1925},[74,14596,85],{"class":84},[74,14598,14387],{"class":1925},[74,14600,10797],{"class":80},[74,14602,781],{"class":9495},[74,14604,464],{"class":84},[74,14606,88],{"class":80},[74,14608,11610],{"class":9495},[74,14610,91],{"class":84},[74,14612,14613],{"class":76,"line":1740},[74,14614,1508],{"class":84},[74,14616,14617,14619,14621,14623,14625,14627,14629,14631,14633,14635,14637],{"class":76,"line":1745},[74,14618,3164],{"class":80},[74,14620,1620],{"class":84},[74,14622,88],{"class":80},[74,14624,2995],{"class":84},[74,14626,131],{"class":80},[74,14628,277],{"class":134},[74,14630,3002],{"class":84},[74,14632,996],{"class":80},[74,14634,14424],{"class":84},[74,14636,2254],{"class":80},[74,14638,91],{"class":84},[74,14640,14641],{"class":76,"line":2540},[74,14642,1992],{"class":84},[74,14644,14645,14647,14649,14651,14653,14656,14658,14660,14662,14665,14667,14669,14671,14674,14676,14678,14680,14683,14685,14687,14689,14692,14694,14696,14698,14701,14703],{"class":76,"line":2554},[74,14646,3414],{"class":84},[74,14648,1130],{"class":80},[74,14650,337],{"class":190},[74,14652,1192],{"class":134},[74,14654,14655],{"class":190},"姓名：\"",[74,14657,1130],{"class":80},[74,14659,14514],{"class":84},[74,14661,567],{"class":80},[74,14663,14664],{"class":84},"i)->name",[74,14666,1130],{"class":80},[74,14668,337],{"class":190},[74,14670,1192],{"class":134},[74,14672,14673],{"class":190},"年龄：\"",[74,14675,1130],{"class":80},[74,14677,14514],{"class":84},[74,14679,567],{"class":80},[74,14681,14682],{"class":84},"i)->age",[74,14684,1130],{"class":80},[74,14686,337],{"class":190},[74,14688,1192],{"class":134},[74,14690,14691],{"class":190},"性别：\"",[74,14693,1130],{"class":80},[74,14695,14514],{"class":84},[74,14697,567],{"class":80},[74,14699,14700],{"class":84},"i)->gender",[74,14702,1130],{"class":80},[74,14704,1153],{"class":84},[74,14706,14707],{"class":76,"line":2562},[74,14708,2149],{"class":84},[74,14710,14711],{"class":76,"line":2567},[74,14712,1527],{"class":84},[74,14714,14715,14717,14719],{"class":76,"line":2573},[74,14716,88],{"class":80},[74,14718,1935],{"class":1925},[74,14720,1938],{"class":84},[74,14722,14723],{"class":76,"line":2579},[74,14724,1508],{"class":84},[74,14726,14727],{"class":76,"line":2584},[74,14728,14729],{"class":144},"    \u002F\u002F定义结构体变量\n",[74,14731,14732,14735,14737,14739],{"class":76,"line":12227},[74,14733,14734],{"class":84},"    Sanguo s1[",[74,14736,405],{"class":134},[74,14738,1026],{"class":84},[74,14740,4871],{"class":80},[74,14742,14743],{"class":76,"line":12251},[74,14744,1992],{"class":84},[74,14746,14747,14749,14751,14753,14755,14757,14759],{"class":76,"line":12256},[74,14748,4880],{"class":84},[74,14750,14231],{"class":190},[74,14752,464],{"class":84},[74,14754,861],{"class":134},[74,14756,464],{"class":84},[74,14758,14240],{"class":190},[74,14760,4893],{"class":84},[74,14762,14763,14765,14767,14769,14771,14773,14775],{"class":76,"line":12262},[74,14764,4880],{"class":84},[74,14766,14249],{"class":190},[74,14768,464],{"class":84},[74,14770,836],{"class":134},[74,14772,464],{"class":84},[74,14774,14240],{"class":190},[74,14776,4893],{"class":84},[74,14778,14779,14781,14783,14785,14787,14789,14791],{"class":76,"line":12289},[74,14780,4880],{"class":84},[74,14782,14266],{"class":190},[74,14784,464],{"class":84},[74,14786,786],{"class":134},[74,14788,464],{"class":84},[74,14790,14240],{"class":190},[74,14792,4893],{"class":84},[74,14794,14795,14797,14799,14801,14803,14805,14807],{"class":76,"line":12294},[74,14796,4880],{"class":84},[74,14798,14283],{"class":190},[74,14800,464],{"class":84},[74,14802,811],{"class":134},[74,14804,464],{"class":84},[74,14806,14240],{"class":190},[74,14808,4893],{"class":84},[74,14810,14811,14813,14815,14817,14819,14821,14823],{"class":76,"line":12300},[74,14812,4880],{"class":84},[74,14814,14300],{"class":190},[74,14816,464],{"class":84},[74,14818,761],{"class":134},[74,14820,464],{"class":84},[74,14822,14309],{"class":190},[74,14824,4893],{"class":84},[74,14826,14827],{"class":76,"line":12312},[74,14828,4914],{"class":84},[74,14830,14831,14833,14835,14837,14840,14842,14845,14847],{"class":76,"line":12324},[74,14832,1947],{"class":80},[74,14834,11610],{"class":84},[74,14836,4166],{"class":80},[74,14838,14839],{"class":84},"(s1)",[74,14841,4172],{"class":80},[74,14843,14844],{"class":84},"(s1[",[74,14846,277],{"class":134},[74,14848,3819],{"class":84},[74,14850,14851,14854,14856,14859,14861,14864,14867,14869],{"class":76,"line":12336},[74,14852,14853],{"class":84},"    Sanguo ",[74,14855,541],{"class":80},[74,14857,14858],{"class":84},"s ",[74,14860,131],{"class":80},[74,14862,14863],{"class":80}," &",[74,14865,14866],{"class":84},"s1[",[74,14868,277],{"class":134},[74,14870,4653],{"class":84},[74,14872,14873],{"class":76,"line":13995},[74,14874,14875],{"class":144},"    \u002F\u002F排序前：\n",[74,14877,14878,14880,14882,14885,14887],{"class":76,"line":14020},[74,14879,10808],{"class":84},[74,14881,1130],{"class":80},[74,14883,14884],{"class":190}," \"排序前：\"",[74,14886,1406],{"class":80},[74,14888,13119],{"class":84},[74,14890,14891,14893],{"class":76,"line":14043},[74,14892,14194],{"class":1925},[74,14894,14895],{"class":84},"(s,len);\n",[74,14897,14898],{"class":76,"line":14067},[74,14899,14900],{"class":144},"    \u002F\u002F调用排序函数\n",[74,14902,14903,14905],{"class":76,"line":14072},[74,14904,11877],{"class":1925},[74,14906,14895],{"class":84},[74,14908,14909],{"class":76,"line":14077},[74,14910,14911],{"class":144},"    \u002F\u002F排序后\n",[74,14913,14914,14916,14918,14921,14923],{"class":76,"line":14082},[74,14915,10808],{"class":84},[74,14917,1130],{"class":80},[74,14919,14920],{"class":190}," \"排序后：\"",[74,14922,1406],{"class":80},[74,14924,13119],{"class":84},[74,14926,14927,14929],{"class":76,"line":14091},[74,14928,14194],{"class":1925},[74,14930,14895],{"class":84},[74,14932,14933],{"class":76,"line":14096},[74,14934,1527],{"class":84},[19,14936,14937,14938,14940],{},"注意：使用指针时直接用传首地址**&s",[74,14939,277],{},"**",[5090,14942,14943],{},"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":69,"searchDepth":94,"depth":94,"links":14945},[14946,14947,14948,14949,14950,14951,14952],{"id":11982,"depth":94,"text":11983},{"id":12344,"depth":94,"text":12345},{"id":12613,"depth":94,"text":12614},{"id":12778,"depth":94,"text":12779},{"id":12994,"depth":94,"text":12995},{"id":13315,"depth":94,"text":13316},{"id":13543,"depth":94,"text":13544},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":11971,"description":11979},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":14959,"title":14960,"body":14961,"description":69,"extension":5121,"meta":16304,"navigation":2362,"path":16305,"seo":16306,"stem":16307,"__hash__":16308},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":14962,"toc":16298},[14963,14966,14970,14976,14990,14995,14998,15002,15009,15015,15018,15025,15031,15036,15039,15042,15045,15609,15612,15626,15630,15635,15651,15791,15794,15800,15803,15808,15816,15924,15927,15932,15935,15940,15943,15949,15952,16295],[10,14964,14960],{"id":14965},"_5程序内存模型",[14,14967,14969],{"id":14968},"_51内存分区模型","5.1内存分区模型",[19,14971,14972,14973],{},"C++程序在执行时，将内存大方向划分为",[235,14974,14975],{},"4个区域",[1093,14977,14978,14981,14984,14987],{},[30,14979,14980],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[30,14982,14983],{},"全局区：存放全局变量和静态变量以及常量",[30,14985,14986],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[30,14988,14989],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,14991,14992],{},[235,14993,14994],{},"内存四区意义：",[19,14996,14997],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[44,14999,15001],{"id":15000},"_511程序运行前","5.1.1程序运行前",[19,15003,15004,15005,15008],{},"​\t在程序编译后，生成了exe可执行程序，",[235,15006,15007],{},"未执行该程序前","分为两个区域",[19,15010,15011,15012],{},"​\t",[235,15013,15014],{},"代码区：",[19,15016,15017],{},"​\t\t存放 CPU 执行的机器指令",[19,15019,15020,15021,15024],{},"​\t\t代码区是",[235,15022,15023],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,15026,15020,15027,15030],{},[235,15028,15029],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,15032,15011,15033],{},[235,15034,15035],{},"全局区：",[19,15037,15038],{},"​\t\t全局变量和静态变量存放在此.",[19,15040,15041],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,15043,15044],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[64,15046,15048],{"className":66,"code":15047,"language":68,"meta":69,"style":69},"\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",[71,15049,15050,15055,15068,15081,15085,15090,15105,15120,15124,15133,15137,15142,15155,15168,15172,15177,15203,15229,15233,15260,15286,15290,15295,15311,15326,15330,15356,15382,15386,15411,15436,15440,15466,15492,15496,15512,15527,15553,15579,15583,15593,15597,15605],{"__ignoreMap":69},[74,15051,15052],{"class":76,"line":77},[74,15053,15054],{"class":144},"\u002F\u002F全局变量\n",[74,15056,15057,15059,15062,15064,15066],{"class":76,"line":94},[74,15058,88],{"class":80},[74,15060,15061],{"class":84}," g_a ",[74,15063,131],{"class":80},[74,15065,2000],{"class":134},[74,15067,1252],{"class":84},[74,15069,15070,15072,15075,15077,15079],{"class":76,"line":1141},[74,15071,88],{"class":80},[74,15073,15074],{"class":84}," g_b ",[74,15076,131],{"class":80},[74,15078,2000],{"class":134},[74,15080,1252],{"class":84},[74,15082,15083],{"class":76,"line":1156},[74,15084,2363],{"emptyLinePlaceholder":2362},[74,15086,15087],{"class":76,"line":1162},[74,15088,15089],{"class":144},"\u002F\u002F全局常量\n",[74,15091,15092,15094,15096,15099,15101,15103],{"class":76,"line":1176},[74,15093,11071],{"class":80},[74,15095,2344],{"class":80},[74,15097,15098],{"class":84}," c_g_a ",[74,15100,131],{"class":80},[74,15102,2000],{"class":134},[74,15104,1252],{"class":84},[74,15106,15107,15109,15111,15114,15116,15118],{"class":76,"line":1182},[74,15108,11071],{"class":80},[74,15110,2344],{"class":80},[74,15112,15113],{"class":84}," c_g_b ",[74,15115,131],{"class":80},[74,15117,2000],{"class":134},[74,15119,1252],{"class":84},[74,15121,15122],{"class":76,"line":1273},[74,15123,2363],{"emptyLinePlaceholder":2362},[74,15125,15126,15128,15130],{"class":76,"line":1279},[74,15127,88],{"class":80},[74,15129,1935],{"class":1925},[74,15131,15132],{"class":84},"() {\n",[74,15134,15135],{"class":76,"line":1291},[74,15136,2363],{"emptyLinePlaceholder":2362},[74,15138,15139],{"class":76,"line":1574},[74,15140,15141],{"class":144},"    \u002F\u002F局部变量\n",[74,15143,15144,15146,15149,15151,15153],{"class":76,"line":1579},[74,15145,1947],{"class":80},[74,15147,15148],{"class":84}," a ",[74,15150,131],{"class":80},[74,15152,2000],{"class":134},[74,15154,1252],{"class":84},[74,15156,15157,15159,15162,15164,15166],{"class":76,"line":1585},[74,15158,1947],{"class":80},[74,15160,15161],{"class":84}," b ",[74,15163,131],{"class":80},[74,15165,2000],{"class":134},[74,15167,1252],{"class":84},[74,15169,15170],{"class":76,"line":1590},[74,15171,2363],{"emptyLinePlaceholder":2362},[74,15173,15174],{"class":76,"line":1604},[74,15175,15176],{"class":144},"    \u002F\u002F打印地址\n",[74,15178,15179,15181,15183,15186,15188,15190,15192,15194,15196,15199,15201],{"class":76,"line":1609},[74,15180,10808],{"class":84},[74,15182,1130],{"class":80},[74,15184,15185],{"class":190}," \"局部变量a地址为： \"",[74,15187,1406],{"class":80},[74,15189,1620],{"class":84},[74,15191,88],{"class":80},[74,15193,515],{"class":84},[74,15195,439],{"class":80},[74,15197,15198],{"class":84},"a ",[74,15200,1130],{"class":80},[74,15202,13119],{"class":84},[74,15204,15205,15207,15209,15212,15214,15216,15218,15220,15222,15225,15227],{"class":76,"line":1615},[74,15206,10808],{"class":84},[74,15208,1130],{"class":80},[74,15210,15211],{"class":190}," \"局部变量b地址为： \"",[74,15213,1406],{"class":80},[74,15215,1620],{"class":84},[74,15217,88],{"class":80},[74,15219,515],{"class":84},[74,15221,439],{"class":80},[74,15223,15224],{"class":84},"b ",[74,15226,1130],{"class":80},[74,15228,13119],{"class":84},[74,15230,15231],{"class":76,"line":1636},[74,15232,2363],{"emptyLinePlaceholder":2362},[74,15234,15235,15237,15239,15242,15244,15247,15249,15251,15253,15256,15258],{"class":76,"line":1641},[74,15236,10808],{"class":84},[74,15238,1130],{"class":80},[74,15240,15241],{"class":190}," \"全局变量g_a地址为： \"",[74,15243,1406],{"class":80},[74,15245,15246],{"class":84},"  (",[74,15248,88],{"class":80},[74,15250,515],{"class":84},[74,15252,439],{"class":80},[74,15254,15255],{"class":84},"g_a ",[74,15257,1130],{"class":80},[74,15259,13119],{"class":84},[74,15261,15262,15264,15266,15269,15271,15273,15275,15277,15279,15282,15284],{"class":76,"line":1655},[74,15263,10808],{"class":84},[74,15265,1130],{"class":80},[74,15267,15268],{"class":190}," \"全局变量g_b地址为： \"",[74,15270,1406],{"class":80},[74,15272,15246],{"class":84},[74,15274,88],{"class":80},[74,15276,515],{"class":84},[74,15278,439],{"class":80},[74,15280,15281],{"class":84},"g_b ",[74,15283,1130],{"class":80},[74,15285,13119],{"class":84},[74,15287,15288],{"class":76,"line":1660},[74,15289,2363],{"emptyLinePlaceholder":2362},[74,15291,15292],{"class":76,"line":1689},[74,15293,15294],{"class":144},"    \u002F\u002F静态变量\n",[74,15296,15297,15300,15302,15305,15307,15309],{"class":76,"line":1694},[74,15298,15299],{"class":80},"    static",[74,15301,2344],{"class":80},[74,15303,15304],{"class":84}," s_a ",[74,15306,131],{"class":80},[74,15308,2000],{"class":134},[74,15310,1252],{"class":84},[74,15312,15313,15315,15317,15320,15322,15324],{"class":76,"line":1711},[74,15314,15299],{"class":80},[74,15316,2344],{"class":80},[74,15318,15319],{"class":84}," s_b ",[74,15321,131],{"class":80},[74,15323,2000],{"class":134},[74,15325,1252],{"class":84},[74,15327,15328],{"class":76,"line":1716},[74,15329,2363],{"emptyLinePlaceholder":2362},[74,15331,15332,15334,15336,15339,15341,15343,15345,15347,15349,15352,15354],{"class":76,"line":1721},[74,15333,10808],{"class":84},[74,15335,1130],{"class":80},[74,15337,15338],{"class":190}," \"静态变量s_a地址为： \"",[74,15340,1406],{"class":80},[74,15342,1620],{"class":84},[74,15344,88],{"class":80},[74,15346,515],{"class":84},[74,15348,439],{"class":80},[74,15350,15351],{"class":84},"s_a ",[74,15353,1130],{"class":80},[74,15355,13119],{"class":84},[74,15357,15358,15360,15362,15365,15367,15369,15371,15373,15375,15378,15380],{"class":76,"line":1726},[74,15359,10808],{"class":84},[74,15361,1130],{"class":80},[74,15363,15364],{"class":190}," \"静态变量s_b地址为： \"",[74,15366,1406],{"class":80},[74,15368,1620],{"class":84},[74,15370,88],{"class":80},[74,15372,515],{"class":84},[74,15374,439],{"class":80},[74,15376,15377],{"class":84},"s_b ",[74,15379,1130],{"class":80},[74,15381,13119],{"class":84},[74,15383,15384],{"class":76,"line":1740},[74,15385,2363],{"emptyLinePlaceholder":2362},[74,15387,15388,15390,15392,15395,15397,15399,15401,15403,15405,15407,15409],{"class":76,"line":1745},[74,15389,10808],{"class":84},[74,15391,1130],{"class":80},[74,15393,15394],{"class":190}," \"字符串常量地址为： \"",[74,15396,1406],{"class":80},[74,15398,1620],{"class":84},[74,15400,88],{"class":80},[74,15402,515],{"class":84},[74,15404,439],{"class":80},[74,15406,1148],{"class":190},[74,15408,1406],{"class":80},[74,15410,13119],{"class":84},[74,15412,15413,15415,15417,15419,15421,15423,15425,15427,15429,15432,15434],{"class":76,"line":2540},[74,15414,10808],{"class":84},[74,15416,1130],{"class":80},[74,15418,15394],{"class":190},[74,15420,1406],{"class":80},[74,15422,1620],{"class":84},[74,15424,88],{"class":80},[74,15426,515],{"class":84},[74,15428,439],{"class":80},[74,15430,15431],{"class":190},"\"hello world1\"",[74,15433,1406],{"class":80},[74,15435,13119],{"class":84},[74,15437,15438],{"class":76,"line":2554},[74,15439,2363],{"emptyLinePlaceholder":2362},[74,15441,15442,15444,15446,15449,15451,15453,15455,15457,15459,15462,15464],{"class":76,"line":2562},[74,15443,10808],{"class":84},[74,15445,1130],{"class":80},[74,15447,15448],{"class":190}," \"全局常量c_g_a地址为： \"",[74,15450,1406],{"class":80},[74,15452,1620],{"class":84},[74,15454,88],{"class":80},[74,15456,515],{"class":84},[74,15458,439],{"class":80},[74,15460,15461],{"class":84},"c_g_a ",[74,15463,1130],{"class":80},[74,15465,13119],{"class":84},[74,15467,15468,15470,15472,15475,15477,15479,15481,15483,15485,15488,15490],{"class":76,"line":2567},[74,15469,10808],{"class":84},[74,15471,1130],{"class":80},[74,15473,15474],{"class":190}," \"全局常量c_g_b地址为： \"",[74,15476,1406],{"class":80},[74,15478,1620],{"class":84},[74,15480,88],{"class":80},[74,15482,515],{"class":84},[74,15484,439],{"class":80},[74,15486,15487],{"class":84},"c_g_b ",[74,15489,1130],{"class":80},[74,15491,13119],{"class":84},[74,15493,15494],{"class":76,"line":2573},[74,15495,2363],{"emptyLinePlaceholder":2362},[74,15497,15498,15501,15503,15506,15508,15510],{"class":76,"line":2579},[74,15499,15500],{"class":80},"    const",[74,15502,2344],{"class":80},[74,15504,15505],{"class":84}," c_l_a ",[74,15507,131],{"class":80},[74,15509,2000],{"class":134},[74,15511,1252],{"class":84},[74,15513,15514,15516,15518,15521,15523,15525],{"class":76,"line":2584},[74,15515,15500],{"class":80},[74,15517,2344],{"class":80},[74,15519,15520],{"class":84}," c_l_b ",[74,15522,131],{"class":80},[74,15524,2000],{"class":134},[74,15526,1252],{"class":84},[74,15528,15529,15531,15533,15536,15538,15540,15542,15544,15546,15549,15551],{"class":76,"line":12227},[74,15530,10808],{"class":84},[74,15532,1130],{"class":80},[74,15534,15535],{"class":190}," \"局部常量c_l_a地址为： \"",[74,15537,1406],{"class":80},[74,15539,1620],{"class":84},[74,15541,88],{"class":80},[74,15543,515],{"class":84},[74,15545,439],{"class":80},[74,15547,15548],{"class":84},"c_l_a ",[74,15550,1130],{"class":80},[74,15552,13119],{"class":84},[74,15554,15555,15557,15559,15562,15564,15566,15568,15570,15572,15575,15577],{"class":76,"line":12251},[74,15556,10808],{"class":84},[74,15558,1130],{"class":80},[74,15560,15561],{"class":190}," \"局部常量c_l_b地址为： \"",[74,15563,1406],{"class":80},[74,15565,1620],{"class":84},[74,15567,88],{"class":80},[74,15569,515],{"class":84},[74,15571,439],{"class":80},[74,15573,15574],{"class":84},"c_l_b ",[74,15576,1130],{"class":80},[74,15578,13119],{"class":84},[74,15580,15581],{"class":76,"line":12256},[74,15582,2363],{"emptyLinePlaceholder":2362},[74,15584,15585,15587,15589,15591],{"class":76,"line":12262},[74,15586,2265],{"class":1925},[74,15588,85],{"class":84},[74,15590,2270],{"class":190},[74,15592,2682],{"class":84},[74,15594,15595],{"class":76,"line":12289},[74,15596,2363],{"emptyLinePlaceholder":2362},[74,15598,15599,15601,15603],{"class":76,"line":12294},[74,15600,4053],{"class":80},[74,15602,4056],{"class":134},[74,15604,1252],{"class":84},[74,15606,15607],{"class":76,"line":12300},[74,15608,1527],{"class":84},[19,15610,15611],{},"总结：",[1093,15613,15614,15617,15620,15623],{},[30,15615,15616],{},"c++中程序运行前分为全局区和代码区",[30,15618,15619],{},"代码区特点是共享和只读",[30,15621,15622],{},"全局区中存放全局变量、静态变量、常量",[30,15624,15625],{},"常量区中存放const修饰的全局常量和字符串常量",[44,15627,15629],{"id":15628},"_512程序运行后","5.1.2程序运行后",[27,15631,15632],{},[30,15633,15634],{},"栈区：",[1093,15636,15637,15644],{},[30,15638,15639,15640,15643],{},"由编译器自动分配释放, 存放",[235,15641,15642],{},"函数的参数值,局部变量","等",[30,15645,15646,15647,15650],{},"注意事项：",[235,15648,15649],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[64,15652,15654],{"className":66,"code":15653,"language":68,"meta":69,"style":69},"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",[71,15655,15656,15667,15671,15686,15698,15702,15706,15714,15719,15734,15752,15769,15779,15787],{"__ignoreMap":69},[74,15657,15658,15660,15662,15665],{"class":76,"line":77},[74,15659,88],{"class":80},[74,15661,10797],{"class":80},[74,15663,15664],{"class":1925}," func",[74,15666,1938],{"class":84},[74,15668,15669],{"class":76,"line":94},[74,15670,1508],{"class":84},[74,15672,15673,15675,15677,15679,15681,15683],{"class":76,"line":1141},[74,15674,1947],{"class":80},[74,15676,15148],{"class":84},[74,15678,131],{"class":80},[74,15680,2000],{"class":134},[74,15682,141],{"class":84},[74,15684,15685],{"class":144}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[74,15687,15688,15690,15692,15695],{"class":76,"line":1156},[74,15689,4053],{"class":80},[74,15691,14863],{"class":80},[74,15693,15694],{"class":84},"a;",[74,15696,15697],{"class":144}," \u002F\u002F放回局部变量的地址\n",[74,15699,15700],{"class":76,"line":1162},[74,15701,1527],{"class":84},[74,15703,15704],{"class":76,"line":1176},[74,15705,2363],{"emptyLinePlaceholder":2362},[74,15707,15708,15710,15712],{"class":76,"line":1182},[74,15709,88],{"class":80},[74,15711,1935],{"class":1925},[74,15713,15132],{"class":84},[74,15715,15716],{"class":76,"line":1273},[74,15717,15718],{"class":144},"    \u002F\u002F接受func的返回值\n",[74,15720,15721,15723,15725,15728,15730,15732],{"class":76,"line":1279},[74,15722,1947],{"class":80},[74,15724,10797],{"class":80},[74,15726,15727],{"class":84},"p ",[74,15729,131],{"class":80},[74,15731,15664],{"class":1925},[74,15733,9915],{"class":84},[74,15735,15736,15738,15740,15742,15744,15746,15749],{"class":76,"line":1291},[74,15737,10808],{"class":84},[74,15739,1130],{"class":80},[74,15741,10797],{"class":80},[74,15743,15727],{"class":84},[74,15745,1130],{"class":80},[74,15747,15748],{"class":84}," endl;",[74,15750,15751],{"class":144}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[74,15753,15754,15756,15758,15760,15762,15764,15766],{"class":76,"line":1574},[74,15755,10808],{"class":84},[74,15757,1130],{"class":80},[74,15759,10797],{"class":80},[74,15761,15727],{"class":84},[74,15763,1130],{"class":80},[74,15765,15748],{"class":84},[74,15767,15768],{"class":144}," \u002F\u002F第二次这个数据不再保留\n",[74,15770,15771,15773,15775,15777],{"class":76,"line":1579},[74,15772,2265],{"class":1925},[74,15774,85],{"class":84},[74,15776,2270],{"class":190},[74,15778,2682],{"class":84},[74,15780,15781,15783,15785],{"class":76,"line":1585},[74,15782,4053],{"class":80},[74,15784,4056],{"class":134},[74,15786,1252],{"class":84},[74,15788,15789],{"class":76,"line":1590},[74,15790,1527],{"class":84},[19,15792,15793],{},"输出结果：",[19,15795,15796],{},[1424,15797],{"alt":15798,"src":15799},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,15801,15802],{},"总结：不要返回局部变量的地址",[27,15804,15805],{"start":94},[30,15806,15807],{},"堆区",[1093,15809,15810,15813],{},[30,15811,15812],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[30,15814,15815],{},"在c++中主要利用new在堆区开辟内存",[64,15817,15819],{"className":66,"code":15818,"language":68,"meta":69,"style":69},"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",[71,15820,15821,15836,15840,15845,15866,15873,15877,15885,15889,15894,15908,15920],{"__ignoreMap":69},[74,15822,15823,15825,15828,15831,15833],{"class":76,"line":77},[74,15824,88],{"class":80},[74,15826,15827],{"class":80},"  *",[74,15829,15830],{"class":1925},"func",[74,15832,2390],{"class":84},[74,15834,15835],{"class":144},"  \u002F\u002F函数返回指针\n",[74,15837,15838],{"class":76,"line":94},[74,15839,1508],{"class":84},[74,15841,15842],{"class":76,"line":1141},[74,15843,15844],{"class":144},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[74,15846,15847,15849,15851,15853,15855,15858,15860,15862,15864],{"class":76,"line":1156},[74,15848,4110],{"class":80},[74,15850,10797],{"class":80},[74,15852,19],{"class":84},[74,15854,131],{"class":80},[74,15856,15857],{"class":80}," new",[74,15859,2344],{"class":80},[74,15861,85],{"class":84},[74,15863,532],{"class":134},[74,15865,2682],{"class":84},[74,15867,15868,15870],{"class":76,"line":1162},[74,15869,4344],{"class":80},[74,15871,15872],{"class":84}," p;\n",[74,15874,15875],{"class":76,"line":1176},[74,15876,1527],{"class":84},[74,15878,15879,15881,15883],{"class":76,"line":1182},[74,15880,88],{"class":80},[74,15882,1935],{"class":1925},[74,15884,1938],{"class":84},[74,15886,15887],{"class":76,"line":1273},[74,15888,1508],{"class":84},[74,15890,15891],{"class":76,"line":1279},[74,15892,15893],{"class":144},"    \u002F\u002F在堆区开辟数据\n",[74,15895,15896,15898,15900,15902,15904,15906],{"class":76,"line":1291},[74,15897,1947],{"class":80},[74,15899,10797],{"class":80},[74,15901,19],{"class":84},[74,15903,131],{"class":80},[74,15905,15830],{"class":1925},[74,15907,9915],{"class":84},[74,15909,15910,15912,15914,15916,15918],{"class":76,"line":1574},[74,15911,1513],{"class":84},[74,15913,10698],{"class":80},[74,15915,19],{"class":84},[74,15917,1130],{"class":80},[74,15919,1153],{"class":84},[74,15921,15922],{"class":76,"line":1579},[74,15923,1527],{"class":84},[19,15925,15926],{},"图片展示：",[19,15928,15929],{},[1424,15930],{"alt":15798,"src":15931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,15933,15934],{},"堆区内存由程序员管生死！！！",[27,15936,15937],{"start":1141},[30,15938,15939],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,15941,15942],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,15944,15945,15946],{},"​语法：",[71,15947,15948],{}," new 数据类型",[19,15950,15951],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[64,15953,15955],{"className":66,"code":15954,"language":68,"meta":69,"style":69},"\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",[71,15956,15957,15962,15972,15976,15981,15986,16008,16012,16020,16024,16038,16050,16062,16074,16079,16084,16095,16099,16104,16112,16116,16121,16143,16169,16173,16191,16195,16221,16225,16237,16241,16246,16251,16259,16263,16267,16275,16279,16285,16291],{"__ignoreMap":69},[74,15958,15959],{"class":76,"line":77},[74,15960,15961],{"class":144},"\u002F\u002F1.new的基本语法\n",[74,15963,15964,15966,15968,15970],{"class":76,"line":94},[74,15965,88],{"class":80},[74,15967,10797],{"class":80},[74,15969,15830],{"class":1925},[74,15971,1938],{"class":84},[74,15973,15974],{"class":76,"line":1141},[74,15975,1508],{"class":84},[74,15977,15978],{"class":76,"line":1156},[74,15979,15980],{"class":144},"    \u002F\u002F在堆区创建整型数据\n",[74,15982,15983],{"class":76,"line":1162},[74,15984,15985],{"class":144},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[74,15987,15988,15990,15992,15994,15997,15999,16001,16003,16005],{"class":76,"line":1176},[74,15989,1947],{"class":80},[74,15991,10797],{"class":80},[74,15993,19],{"class":84},[74,15995,15996],{"class":80},"=new",[74,15998,2344],{"class":80},[74,16000,85],{"class":84},[74,16002,532],{"class":134},[74,16004,10245],{"class":84},[74,16006,16007],{"class":144},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[74,16009,16010],{"class":76,"line":1182},[74,16011,1527],{"class":84},[74,16013,16014,16016,16018],{"class":76,"line":1273},[74,16015,9643],{"class":80},[74,16017,9867],{"class":1925},[74,16019,1938],{"class":84},[74,16021,16022],{"class":76,"line":1279},[74,16023,1508],{"class":84},[74,16025,16026,16028,16030,16032,16034,16036],{"class":76,"line":1291},[74,16027,1947],{"class":80},[74,16029,10797],{"class":80},[74,16031,19],{"class":84},[74,16033,131],{"class":80},[74,16035,15830],{"class":1925},[74,16037,9915],{"class":84},[74,16039,16040,16042,16044,16046,16048],{"class":76,"line":1574},[74,16041,1513],{"class":84},[74,16043,10698],{"class":80},[74,16045,19],{"class":84},[74,16047,1130],{"class":80},[74,16049,1153],{"class":84},[74,16051,16052,16054,16056,16058,16060],{"class":76,"line":1579},[74,16053,1513],{"class":84},[74,16055,10698],{"class":80},[74,16057,19],{"class":84},[74,16059,1130],{"class":80},[74,16061,1153],{"class":84},[74,16063,16064,16066,16068,16070,16072],{"class":76,"line":1585},[74,16065,1513],{"class":84},[74,16067,10698],{"class":80},[74,16069,19],{"class":84},[74,16071,1130],{"class":80},[74,16073,1153],{"class":84},[74,16075,16076],{"class":76,"line":1590},[74,16077,16078],{"class":144},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[74,16080,16081],{"class":76,"line":1604},[74,16082,16083],{"class":144},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[74,16085,16086,16089,16092],{"class":76,"line":1609},[74,16087,16088],{"class":80},"    delete",[74,16090,16091],{"class":84}," p;",[74,16093,16094],{"class":144},"\u002F\u002F删除这块地址\n",[74,16096,16097],{"class":76,"line":1615},[74,16098,1527],{"class":84},[74,16100,16101],{"class":76,"line":1636},[74,16102,16103],{"class":144},"\u002F\u002F2.在堆区利用new开辟数组\n",[74,16105,16106,16108,16110],{"class":76,"line":1641},[74,16107,9643],{"class":80},[74,16109,9936],{"class":1925},[74,16111,1938],{"class":84},[74,16113,16114],{"class":76,"line":1655},[74,16115,1508],{"class":84},[74,16117,16118],{"class":76,"line":1660},[74,16119,16120],{"class":144},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[74,16122,16123,16125,16127,16129,16131,16133,16135,16137,16140],{"class":76,"line":1689},[74,16124,1947],{"class":80},[74,16126,10797],{"class":80},[74,16128,3843],{"class":84},[74,16130,15996],{"class":80},[74,16132,2344],{"class":80},[74,16134,976],{"class":84},[74,16136,532],{"class":134},[74,16138,16139],{"class":84},"];",[74,16141,16142],{"class":144},"\u002F\u002F10代表数组有10个元素\n",[74,16144,16145,16147,16149,16151,16153,16155,16157,16159,16161,16163,16165,16167],{"class":76,"line":1694},[74,16146,3164],{"class":80},[74,16148,1620],{"class":84},[74,16150,88],{"class":80},[74,16152,2995],{"class":84},[74,16154,131],{"class":80},[74,16156,277],{"class":134},[74,16158,3002],{"class":84},[74,16160,996],{"class":80},[74,16162,532],{"class":134},[74,16164,3002],{"class":84},[74,16166,2254],{"class":80},[74,16168,91],{"class":84},[74,16170,16171],{"class":76,"line":1711},[74,16172,1992],{"class":84},[74,16174,16175,16178,16180,16182,16184,16186,16188],{"class":76,"line":1716},[74,16176,16177],{"class":84},"        arr[i]",[74,16179,131],{"class":80},[74,16181,527],{"class":84},[74,16183,567],{"class":80},[74,16185,397],{"class":134},[74,16187,141],{"class":84},[74,16189,16190],{"class":144},"\u002F\u002F给10个元素赋值100～109\n",[74,16192,16193],{"class":76,"line":1721},[74,16194,2149],{"class":84},[74,16196,16197,16199,16201,16203,16205,16207,16209,16211,16213,16215,16217,16219],{"class":76,"line":1726},[74,16198,3164],{"class":80},[74,16200,1620],{"class":84},[74,16202,88],{"class":80},[74,16204,2995],{"class":84},[74,16206,131],{"class":80},[74,16208,277],{"class":134},[74,16210,3002],{"class":84},[74,16212,996],{"class":80},[74,16214,532],{"class":134},[74,16216,3002],{"class":84},[74,16218,2254],{"class":80},[74,16220,91],{"class":84},[74,16222,16223],{"class":76,"line":1740},[74,16224,1992],{"class":84},[74,16226,16227,16229,16231,16233,16235],{"class":76,"line":1745},[74,16228,3414],{"class":84},[74,16230,1130],{"class":80},[74,16232,4317],{"class":84},[74,16234,1130],{"class":80},[74,16236,1153],{"class":84},[74,16238,16239],{"class":76,"line":2540},[74,16240,2149],{"class":84},[74,16242,16243],{"class":76,"line":2554},[74,16244,16245],{"class":144},"    \u002F\u002F释放堆区数组\n",[74,16247,16248],{"class":76,"line":2562},[74,16249,16250],{"class":144},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[74,16252,16253,16256],{"class":76,"line":2567},[74,16254,16255],{"class":80},"    delete[]",[74,16257,16258],{"class":84}," arr;\n",[74,16260,16261],{"class":76,"line":2573},[74,16262,1527],{"class":84},[74,16264,16265],{"class":76,"line":2579},[74,16266,2363],{"emptyLinePlaceholder":2362},[74,16268,16269,16271,16273],{"class":76,"line":2584},[74,16270,88],{"class":80},[74,16272,1935],{"class":1925},[74,16274,1938],{"class":84},[74,16276,16277],{"class":76,"line":12227},[74,16278,1508],{"class":84},[74,16280,16281,16283],{"class":76,"line":12251},[74,16282,9912],{"class":1925},[74,16284,9915],{"class":84},[74,16286,16287,16289],{"class":76,"line":12256},[74,16288,9981],{"class":1925},[74,16290,9915],{"class":84},[74,16292,16293],{"class":76,"line":12262},[74,16294,1527],{"class":84},[5090,16296,16297],{},"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":69,"searchDepth":94,"depth":94,"links":16299},[16300],{"id":14968,"depth":94,"text":14969,"children":16301},[16302,16303],{"id":15000,"depth":1141,"text":15001},{"id":15628,"depth":1141,"text":15629},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":14960,"description":69},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":16310,"title":16311,"body":16312,"description":69,"extension":5121,"meta":17793,"navigation":2362,"path":17794,"seo":17795,"stem":17796,"__hash__":17797},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":16313,"toc":17785},[16314,16317,16321,16324,16327,16496,16500,16505,16522,16527,16679,16683,16686,16689,17083,17087,17090,17095,17098,17410,17414,17420,17580,17582,17590,17594,17597,17604,17782],[10,16315,16311],{"id":16316},"_6引用",[14,16318,16320],{"id":16319},"_61引用基本用法","6.1引用基本用法",[19,16322,16323],{},"引用的本质：给变量起别名",[19,16325,16326],{},"语法：数据类型 &别名=原名",[64,16328,16330],{"className":66,"code":16329,"language":68,"meta":69,"style":69},"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",[71,16331,16332,16340,16344,16356,16368,16372,16391,16410,16414,16425,16429,16448,16466,16470,16480,16484,16492],{"__ignoreMap":69},[74,16333,16334,16336,16338],{"class":76,"line":77},[74,16335,88],{"class":80},[74,16337,1935],{"class":1925},[74,16339,15132],{"class":84},[74,16341,16342],{"class":76,"line":94},[74,16343,2363],{"emptyLinePlaceholder":2362},[74,16345,16346,16348,16350,16352,16354],{"class":76,"line":1141},[74,16347,1947],{"class":80},[74,16349,15148],{"class":84},[74,16351,131],{"class":80},[74,16353,2000],{"class":134},[74,16355,1252],{"class":84},[74,16357,16358,16360,16362,16364,16366],{"class":76,"line":1156},[74,16359,1947],{"class":80},[74,16361,14863],{"class":80},[74,16363,15224],{"class":84},[74,16365,131],{"class":80},[74,16367,1394],{"class":84},[74,16369,16370],{"class":76,"line":1162},[74,16371,2363],{"emptyLinePlaceholder":2362},[74,16373,16374,16376,16378,16381,16383,16385,16387,16389],{"class":76,"line":1176},[74,16375,10808],{"class":84},[74,16377,1130],{"class":80},[74,16379,16380],{"class":190}," \"a = \"",[74,16382,1406],{"class":80},[74,16384,15148],{"class":84},[74,16386,1130],{"class":80},[74,16388,15748],{"class":84},[74,16390,11547],{"class":144},[74,16392,16393,16395,16397,16400,16402,16404,16406,16408],{"class":76,"line":1182},[74,16394,10808],{"class":84},[74,16396,1130],{"class":80},[74,16398,16399],{"class":190}," \"b = \"",[74,16401,1406],{"class":80},[74,16403,15161],{"class":84},[74,16405,1130],{"class":80},[74,16407,15748],{"class":84},[74,16409,11547],{"class":144},[74,16411,16412],{"class":76,"line":1273},[74,16413,2363],{"emptyLinePlaceholder":2362},[74,16415,16416,16419,16421,16423],{"class":76,"line":1279},[74,16417,16418],{"class":84},"    b ",[74,16420,131],{"class":80},[74,16422,10033],{"class":134},[74,16424,1252],{"class":84},[74,16426,16427],{"class":76,"line":1291},[74,16428,2363],{"emptyLinePlaceholder":2362},[74,16430,16431,16433,16435,16437,16439,16441,16443,16445],{"class":76,"line":1574},[74,16432,10808],{"class":84},[74,16434,1130],{"class":80},[74,16436,16380],{"class":190},[74,16438,1406],{"class":80},[74,16440,15148],{"class":84},[74,16442,1130],{"class":80},[74,16444,15748],{"class":84},[74,16446,16447],{"class":144},"\u002F\u002F100\n",[74,16449,16450,16452,16454,16456,16458,16460,16462,16464],{"class":76,"line":1579},[74,16451,10808],{"class":84},[74,16453,1130],{"class":80},[74,16455,16399],{"class":190},[74,16457,1406],{"class":80},[74,16459,15161],{"class":84},[74,16461,1130],{"class":80},[74,16463,15748],{"class":84},[74,16465,16447],{"class":144},[74,16467,16468],{"class":76,"line":1585},[74,16469,2363],{"emptyLinePlaceholder":2362},[74,16471,16472,16474,16476,16478],{"class":76,"line":1590},[74,16473,2265],{"class":1925},[74,16475,85],{"class":84},[74,16477,2270],{"class":190},[74,16479,2682],{"class":84},[74,16481,16482],{"class":76,"line":1604},[74,16483,2363],{"emptyLinePlaceholder":2362},[74,16485,16486,16488,16490],{"class":76,"line":1609},[74,16487,4053],{"class":80},[74,16489,4056],{"class":134},[74,16491,1252],{"class":84},[74,16493,16494],{"class":76,"line":1615},[74,16495,1527],{"class":84},[14,16497,16499],{"id":16498},"_62引用的注意事项","6.2引用的注意事项",[27,16501,16502],{},[30,16503,16504],{},"引用必须要初始化",[64,16506,16508],{"className":66,"code":16507,"language":68,"meta":69,"style":69},"int &b;\u002F\u002F非常错误！\n",[71,16509,16510],{"__ignoreMap":69},[74,16511,16512,16514,16516,16519],{"class":76,"line":77},[74,16513,88],{"class":80},[74,16515,14863],{"class":80},[74,16517,16518],{"class":84},"b;",[74,16520,16521],{"class":144},"\u002F\u002F非常错误！\n",[27,16523,16524],{"start":94},[30,16525,16526],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[64,16528,16530],{"className":66,"code":16529,"language":68,"meta":69,"style":69},"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",[71,16531,16532,16540,16552,16564,16572,16588,16601,16619,16637,16657,16667,16675],{"__ignoreMap":69},[74,16533,16534,16536,16538],{"class":76,"line":77},[74,16535,88],{"class":80},[74,16537,1935],{"class":1925},[74,16539,15132],{"class":84},[74,16541,16542,16544,16546,16548,16550],{"class":76,"line":94},[74,16543,1947],{"class":80},[74,16545,15148],{"class":84},[74,16547,131],{"class":80},[74,16549,2000],{"class":134},[74,16551,1252],{"class":84},[74,16553,16554,16556,16558,16560,16562],{"class":76,"line":1141},[74,16555,1947],{"class":80},[74,16557,15161],{"class":84},[74,16559,131],{"class":80},[74,16561,13229],{"class":134},[74,16563,1252],{"class":84},[74,16565,16566,16569],{"class":76,"line":1156},[74,16567,16568],{"class":144},"    \u002F\u002Fint &c;",[74,16570,16571],{"class":144}," \u002F\u002F错误，引用必须初始化\n",[74,16573,16574,16576,16578,16580,16582,16585],{"class":76,"line":1162},[74,16575,1947],{"class":80},[74,16577,14863],{"class":80},[74,16579,2909],{"class":84},[74,16581,131],{"class":80},[74,16583,16584],{"class":84}," a;",[74,16586,16587],{"class":144}," \u002F\u002F一旦初始化后，就不可以更改\n",[74,16589,16590,16593,16595,16598],{"class":76,"line":1176},[74,16591,16592],{"class":84},"    c ",[74,16594,131],{"class":80},[74,16596,16597],{"class":84}," b;",[74,16599,16600],{"class":144}," \u002F\u002F这是赋值操作，不是更改引用\n",[74,16602,16603,16605,16607,16609,16611,16613,16615,16617],{"class":76,"line":1182},[74,16604,10808],{"class":84},[74,16606,1130],{"class":80},[74,16608,16380],{"class":190},[74,16610,1406],{"class":80},[74,16612,15148],{"class":84},[74,16614,1130],{"class":80},[74,16616,15748],{"class":84},[74,16618,11532],{"class":144},[74,16620,16621,16623,16625,16627,16629,16631,16633,16635],{"class":76,"line":1273},[74,16622,10808],{"class":84},[74,16624,1130],{"class":80},[74,16626,16399],{"class":190},[74,16628,1406],{"class":80},[74,16630,15161],{"class":84},[74,16632,1130],{"class":80},[74,16634,15748],{"class":84},[74,16636,11532],{"class":144},[74,16638,16639,16641,16643,16646,16648,16651,16653,16655],{"class":76,"line":1279},[74,16640,10808],{"class":84},[74,16642,1130],{"class":80},[74,16644,16645],{"class":190}," \"c = \"",[74,16647,1406],{"class":80},[74,16649,16650],{"class":84}," c ",[74,16652,1130],{"class":80},[74,16654,15748],{"class":84},[74,16656,11532],{"class":144},[74,16658,16659,16661,16663,16665],{"class":76,"line":1291},[74,16660,2265],{"class":1925},[74,16662,85],{"class":84},[74,16664,2270],{"class":190},[74,16666,2682],{"class":84},[74,16668,16669,16671,16673],{"class":76,"line":1574},[74,16670,4053],{"class":80},[74,16672,4056],{"class":134},[74,16674,1252],{"class":84},[74,16676,16677],{"class":76,"line":1579},[74,16678,1527],{"class":84},[14,16680,16682],{"id":16681},"_63引用做函数参数","6.3引用做函数参数",[19,16684,16685],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,16687,16688],{},"优点：可以简化指针修改实参",[64,16690,16692],{"className":66,"code":16691,"language":68,"meta":69,"style":69},"\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",[71,16693,16694,16699,16722,16733,16743,16752,16756,16760,16765,16787,16799,16811,16821,16825,16829,16834,16856,16866,16874,16882,16886,16890,16898,16902,16914,16926,16930,16941,16967,16971,16991,17015,17019,17029,17053,17057,17067,17071,17079],{"__ignoreMap":69},[74,16695,16696],{"class":76,"line":77},[74,16697,16698],{"class":144},"\u002F\u002F1. 值传递\n",[74,16700,16701,16703,16706,16708,16710,16712,16715,16717,16719],{"class":76,"line":94},[74,16702,9643],{"class":80},[74,16704,16705],{"class":1925}," mySwap01",[74,16707,85],{"class":84},[74,16709,88],{"class":80},[74,16711,1360],{"class":9495},[74,16713,16714],{"class":84},", ",[74,16716,88],{"class":80},[74,16718,2796],{"class":9495},[74,16720,16721],{"class":84},") {\n",[74,16723,16724,16726,16729,16731],{"class":76,"line":1141},[74,16725,1947],{"class":80},[74,16727,16728],{"class":84}," temp ",[74,16730,131],{"class":80},[74,16732,1394],{"class":84},[74,16734,16735,16738,16740],{"class":76,"line":1156},[74,16736,16737],{"class":84},"    a ",[74,16739,131],{"class":80},[74,16741,16742],{"class":84}," b;\n",[74,16744,16745,16747,16749],{"class":76,"line":1162},[74,16746,16418],{"class":84},[74,16748,131],{"class":80},[74,16750,16751],{"class":84}," temp;\n",[74,16753,16754],{"class":76,"line":1176},[74,16755,1527],{"class":84},[74,16757,16758],{"class":76,"line":1182},[74,16759,2363],{"emptyLinePlaceholder":2362},[74,16761,16762],{"class":76,"line":1273},[74,16763,16764],{"class":144},"\u002F\u002F2. 地址传递\n",[74,16766,16767,16769,16772,16774,16777,16779,16781,16783,16785],{"class":76,"line":1279},[74,16768,9643],{"class":80},[74,16770,16771],{"class":1925}," mySwap02",[74,16773,85],{"class":84},[74,16775,16776],{"class":80},"int*",[74,16778,1360],{"class":9495},[74,16780,16714],{"class":84},[74,16782,16776],{"class":80},[74,16784,2796],{"class":9495},[74,16786,16721],{"class":84},[74,16788,16789,16791,16793,16795,16797],{"class":76,"line":1291},[74,16790,1947],{"class":80},[74,16792,16728],{"class":84},[74,16794,131],{"class":80},[74,16796,10797],{"class":80},[74,16798,10476],{"class":84},[74,16800,16801,16803,16805,16807,16809],{"class":76,"line":1574},[74,16802,10682],{"class":80},[74,16804,15198],{"class":84},[74,16806,131],{"class":80},[74,16808,10797],{"class":80},[74,16810,10348],{"class":84},[74,16812,16813,16815,16817,16819],{"class":76,"line":1579},[74,16814,10682],{"class":80},[74,16816,15224],{"class":84},[74,16818,131],{"class":80},[74,16820,16751],{"class":84},[74,16822,16823],{"class":76,"line":1585},[74,16824,1527],{"class":84},[74,16826,16827],{"class":76,"line":1590},[74,16828,2363],{"emptyLinePlaceholder":2362},[74,16830,16831],{"class":76,"line":1604},[74,16832,16833],{"class":144},"\u002F\u002F3. 引用传递\n",[74,16835,16836,16838,16841,16843,16846,16848,16850,16852,16854],{"class":76,"line":1609},[74,16837,9643],{"class":80},[74,16839,16840],{"class":1925}," mySwap03",[74,16842,85],{"class":84},[74,16844,16845],{"class":80},"int&",[74,16847,1360],{"class":9495},[74,16849,16714],{"class":84},[74,16851,16845],{"class":80},[74,16853,2796],{"class":9495},[74,16855,16721],{"class":84},[74,16857,16858,16860,16862,16864],{"class":76,"line":1615},[74,16859,1947],{"class":80},[74,16861,16728],{"class":84},[74,16863,131],{"class":80},[74,16865,1394],{"class":84},[74,16867,16868,16870,16872],{"class":76,"line":1636},[74,16869,16737],{"class":84},[74,16871,131],{"class":80},[74,16873,16742],{"class":84},[74,16875,16876,16878,16880],{"class":76,"line":1641},[74,16877,16418],{"class":84},[74,16879,131],{"class":80},[74,16881,16751],{"class":84},[74,16883,16884],{"class":76,"line":1655},[74,16885,1527],{"class":84},[74,16887,16888],{"class":76,"line":1660},[74,16889,2363],{"emptyLinePlaceholder":2362},[74,16891,16892,16894,16896],{"class":76,"line":1689},[74,16893,88],{"class":80},[74,16895,1935],{"class":1925},[74,16897,15132],{"class":84},[74,16899,16900],{"class":76,"line":1694},[74,16901,2363],{"emptyLinePlaceholder":2362},[74,16903,16904,16906,16908,16910,16912],{"class":76,"line":1711},[74,16905,1947],{"class":80},[74,16907,15148],{"class":84},[74,16909,131],{"class":80},[74,16911,2000],{"class":134},[74,16913,1252],{"class":84},[74,16915,16916,16918,16920,16922,16924],{"class":76,"line":1716},[74,16917,1947],{"class":80},[74,16919,15161],{"class":84},[74,16921,131],{"class":80},[74,16923,13229],{"class":134},[74,16925,1252],{"class":84},[74,16927,16928],{"class":76,"line":1721},[74,16929,2363],{"emptyLinePlaceholder":2362},[74,16931,16932,16935,16938],{"class":76,"line":1726},[74,16933,16934],{"class":1925},"    mySwap01",[74,16936,16937],{"class":84},"(a, b);",[74,16939,16940],{"class":144},"\u002F\u002F值传递，形参不会修饰实参\n",[74,16942,16943,16945,16947,16950,16952,16954,16956,16959,16961,16963,16965],{"class":76,"line":1740},[74,16944,10808],{"class":84},[74,16946,1130],{"class":80},[74,16948,16949],{"class":190}," \"a:\"",[74,16951,1406],{"class":80},[74,16953,15148],{"class":84},[74,16955,1130],{"class":80},[74,16957,16958],{"class":190}," \" b:\"",[74,16960,1406],{"class":80},[74,16962,15161],{"class":84},[74,16964,1130],{"class":80},[74,16966,13119],{"class":84},[74,16968,16969],{"class":76,"line":1745},[74,16970,2363],{"emptyLinePlaceholder":2362},[74,16972,16973,16976,16978,16980,16983,16985,16988],{"class":76,"line":2540},[74,16974,16975],{"class":1925},"    mySwap02",[74,16977,85],{"class":84},[74,16979,439],{"class":80},[74,16981,16982],{"class":84},"a, ",[74,16984,439],{"class":80},[74,16986,16987],{"class":84},"b);",[74,16989,16990],{"class":144},"\u002F\u002F地址传递，形参会修饰实参\n",[74,16992,16993,16995,16997,16999,17001,17003,17005,17007,17009,17011,17013],{"class":76,"line":2554},[74,16994,10808],{"class":84},[74,16996,1130],{"class":80},[74,16998,16949],{"class":190},[74,17000,1406],{"class":80},[74,17002,15148],{"class":84},[74,17004,1130],{"class":80},[74,17006,16958],{"class":190},[74,17008,1406],{"class":80},[74,17010,15161],{"class":84},[74,17012,1130],{"class":80},[74,17014,13119],{"class":84},[74,17016,17017],{"class":76,"line":2562},[74,17018,2363],{"emptyLinePlaceholder":2362},[74,17020,17021,17024,17026],{"class":76,"line":2567},[74,17022,17023],{"class":1925},"    mySwap03",[74,17025,16937],{"class":84},[74,17027,17028],{"class":144},"\u002F\u002F引用传递，形参会修饰实参\n",[74,17030,17031,17033,17035,17037,17039,17041,17043,17045,17047,17049,17051],{"class":76,"line":2573},[74,17032,10808],{"class":84},[74,17034,1130],{"class":80},[74,17036,16949],{"class":190},[74,17038,1406],{"class":80},[74,17040,15148],{"class":84},[74,17042,1130],{"class":80},[74,17044,16958],{"class":190},[74,17046,1406],{"class":80},[74,17048,15161],{"class":84},[74,17050,1130],{"class":80},[74,17052,13119],{"class":84},[74,17054,17055],{"class":76,"line":2579},[74,17056,2363],{"emptyLinePlaceholder":2362},[74,17058,17059,17061,17063,17065],{"class":76,"line":2584},[74,17060,2265],{"class":1925},[74,17062,85],{"class":84},[74,17064,2270],{"class":190},[74,17066,2682],{"class":84},[74,17068,17069],{"class":76,"line":12227},[74,17070,2363],{"emptyLinePlaceholder":2362},[74,17072,17073,17075,17077],{"class":76,"line":12251},[74,17074,4053],{"class":80},[74,17076,4056],{"class":134},[74,17078,1252],{"class":84},[74,17080,17081],{"class":76,"line":12256},[74,17082,1527],{"class":84},[14,17084,17086],{"id":17085},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,17088,17089],{},"作用：引用是可以作为函数的返回值存在的",[19,17091,13304,17092],{},[235,17093,17094],{},"不要返回局部变量引用",[19,17096,17097],{},"用法：函数调用作为左值",[64,17099,17101],{"className":14220,"code":17100,"language":14222,"meta":69,"style":69},"\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",[71,17102,17103,17108,17116,17131,17137,17141,17145,17150,17158,17175,17181,17185,17189,17197,17201,17206,17220,17240,17259,17263,17268,17281,17301,17319,17323,17339,17343,17362,17380,17384,17394,17398,17406],{"__ignoreMap":69},[74,17104,17105],{"class":76,"line":77},[74,17106,17107],{"class":144},"\u002F\u002F返回局部变量引用\n",[74,17109,17110,17112,17114],{"class":76,"line":94},[74,17111,16845],{"class":80},[74,17113,9867],{"class":1925},[74,17115,15132],{"class":84},[74,17117,17118,17120,17122,17124,17126,17128],{"class":76,"line":1141},[74,17119,1947],{"class":80},[74,17121,15148],{"class":84},[74,17123,131],{"class":80},[74,17125,2000],{"class":134},[74,17127,141],{"class":84},[74,17129,17130],{"class":144}," \u002F\u002F局部变量\n",[74,17132,17133,17135],{"class":76,"line":1156},[74,17134,4053],{"class":80},[74,17136,1394],{"class":84},[74,17138,17139],{"class":76,"line":1162},[74,17140,1527],{"class":84},[74,17142,17143],{"class":76,"line":1176},[74,17144,2363],{"emptyLinePlaceholder":2362},[74,17146,17147],{"class":76,"line":1182},[74,17148,17149],{"class":144},"\u002F\u002F返回静态变量引用\n",[74,17151,17152,17154,17156],{"class":76,"line":1273},[74,17153,16845],{"class":80},[74,17155,9936],{"class":1925},[74,17157,15132],{"class":84},[74,17159,17160,17162,17164,17166,17168,17170,17172],{"class":76,"line":1279},[74,17161,15299],{"class":80},[74,17163,2344],{"class":80},[74,17165,15148],{"class":84},[74,17167,131],{"class":80},[74,17169,13229],{"class":134},[74,17171,141],{"class":84},[74,17173,17174],{"class":144},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[74,17176,17177,17179],{"class":76,"line":1291},[74,17178,4053],{"class":80},[74,17180,1394],{"class":84},[74,17182,17183],{"class":76,"line":1574},[74,17184,1527],{"class":84},[74,17186,17187],{"class":76,"line":1579},[74,17188,2363],{"emptyLinePlaceholder":2362},[74,17190,17191,17193,17195],{"class":76,"line":1585},[74,17192,88],{"class":80},[74,17194,1935],{"class":1925},[74,17196,15132],{"class":84},[74,17198,17199],{"class":76,"line":1590},[74,17200,2363],{"emptyLinePlaceholder":2362},[74,17202,17203],{"class":76,"line":1604},[74,17204,17205],{"class":144},"    \u002F\u002F不能返回局部变量的引用\n",[74,17207,17208,17211,17214,17216,17218],{"class":76,"line":1609},[74,17209,17210],{"class":80},"    int&",[74,17212,17213],{"class":84}," ref ",[74,17215,131],{"class":80},[74,17217,9867],{"class":1925},[74,17219,9915],{"class":84},[74,17221,17222,17224,17226,17229,17231,17233,17235,17237],{"class":76,"line":1615},[74,17223,10808],{"class":84},[74,17225,1130],{"class":80},[74,17227,17228],{"class":190}," \"ref = \"",[74,17230,1406],{"class":80},[74,17232,17213],{"class":84},[74,17234,1130],{"class":80},[74,17236,15748],{"class":84},[74,17238,17239],{"class":144},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[74,17241,17242,17244,17246,17248,17250,17252,17254,17256],{"class":76,"line":1636},[74,17243,10808],{"class":84},[74,17245,1130],{"class":80},[74,17247,17228],{"class":190},[74,17249,1406],{"class":80},[74,17251,17213],{"class":84},[74,17253,1130],{"class":80},[74,17255,15748],{"class":84},[74,17257,17258],{"class":144},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[74,17260,17261],{"class":76,"line":1641},[74,17262,2363],{"emptyLinePlaceholder":2362},[74,17264,17265],{"class":76,"line":1655},[74,17266,17267],{"class":144},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[74,17269,17270,17272,17275,17277,17279],{"class":76,"line":1660},[74,17271,17210],{"class":80},[74,17273,17274],{"class":84}," ref2 ",[74,17276,131],{"class":80},[74,17278,9936],{"class":1925},[74,17280,9915],{"class":84},[74,17282,17283,17285,17287,17290,17292,17294,17296,17298],{"class":76,"line":1689},[74,17284,10808],{"class":84},[74,17286,1130],{"class":80},[74,17288,17289],{"class":190}," \"ref2 = \"",[74,17291,1406],{"class":80},[74,17293,17274],{"class":84},[74,17295,1130],{"class":80},[74,17297,15748],{"class":84},[74,17299,17300],{"class":144}," \u002F\u002F20\n",[74,17302,17303,17305,17307,17309,17311,17313,17315,17317],{"class":76,"line":1694},[74,17304,10808],{"class":84},[74,17306,1130],{"class":80},[74,17308,17289],{"class":190},[74,17310,1406],{"class":80},[74,17312,17274],{"class":84},[74,17314,1130],{"class":80},[74,17316,15748],{"class":84},[74,17318,17300],{"class":144},[74,17320,17321],{"class":76,"line":1711},[74,17322,2363],{"emptyLinePlaceholder":2362},[74,17324,17325,17327,17330,17332,17334,17336],{"class":76,"line":1716},[74,17326,9981],{"class":1925},[74,17328,17329],{"class":84},"() ",[74,17331,131],{"class":80},[74,17333,2962],{"class":134},[74,17335,141],{"class":84},[74,17337,17338],{"class":144},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[74,17340,17341],{"class":76,"line":1721},[74,17342,2363],{"emptyLinePlaceholder":2362},[74,17344,17345,17347,17349,17351,17353,17355,17357,17359],{"class":76,"line":1726},[74,17346,10808],{"class":84},[74,17348,1130],{"class":80},[74,17350,17289],{"class":190},[74,17352,1406],{"class":80},[74,17354,17274],{"class":84},[74,17356,1130],{"class":80},[74,17358,15748],{"class":84},[74,17360,17361],{"class":144}," \u002F\u002F1000\n",[74,17363,17364,17366,17368,17370,17372,17374,17376,17378],{"class":76,"line":1740},[74,17365,10808],{"class":84},[74,17367,1130],{"class":80},[74,17369,17289],{"class":190},[74,17371,1406],{"class":80},[74,17373,17274],{"class":84},[74,17375,1130],{"class":80},[74,17377,15748],{"class":84},[74,17379,17361],{"class":144},[74,17381,17382],{"class":76,"line":1745},[74,17383,2363],{"emptyLinePlaceholder":2362},[74,17385,17386,17388,17390,17392],{"class":76,"line":2540},[74,17387,2265],{"class":1925},[74,17389,85],{"class":84},[74,17391,2270],{"class":190},[74,17393,2682],{"class":84},[74,17395,17396],{"class":76,"line":2554},[74,17397,2363],{"emptyLinePlaceholder":2362},[74,17399,17400,17402,17404],{"class":76,"line":2562},[74,17401,4053],{"class":80},[74,17403,4056],{"class":134},[74,17405,1252],{"class":84},[74,17407,17408],{"class":76,"line":2567},[74,17409,1527],{"class":84},[14,17411,17413],{"id":17412},"_65引用的本质","6.5引用的本质",[19,17415,17416,17417],{},"本质：",[235,17418,17419],{},"引用的本质在c++内部实现是一个指针常量.",[64,17421,17423],{"className":66,"code":17422,"language":68,"meta":69,"style":69},"\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",[71,17424,17425,17430,17446,17460,17464,17473,17485,17490,17495,17506,17519,17523,17539,17556,17560,17568,17576],{"__ignoreMap":69},[74,17426,17427],{"class":76,"line":77},[74,17428,17429],{"class":144},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[74,17431,17432,17434,17436,17438,17440,17443],{"class":76,"line":94},[74,17433,9643],{"class":80},[74,17435,15664],{"class":1925},[74,17437,85],{"class":84},[74,17439,16845],{"class":80},[74,17441,17442],{"class":9495}," ref",[74,17444,17445],{"class":84},"){\n",[74,17447,17448,17451,17453,17455,17457],{"class":76,"line":1141},[74,17449,17450],{"class":84},"    ref ",[74,17452,131],{"class":80},[74,17454,10033],{"class":134},[74,17456,141],{"class":84},[74,17458,17459],{"class":144}," \u002F\u002F ref是引用，转换为*ref = 100\n",[74,17461,17462],{"class":76,"line":1156},[74,17463,1527],{"class":84},[74,17465,17466,17468,17470],{"class":76,"line":1162},[74,17467,88],{"class":80},[74,17469,1935],{"class":1925},[74,17471,17472],{"class":84},"(){\n",[74,17474,17475,17477,17479,17481,17483],{"class":76,"line":1176},[74,17476,1947],{"class":80},[74,17478,15148],{"class":84},[74,17480,131],{"class":80},[74,17482,2000],{"class":134},[74,17484,1252],{"class":84},[74,17486,17487],{"class":76,"line":1182},[74,17488,17489],{"class":84},"    \n",[74,17491,17492],{"class":76,"line":1273},[74,17493,17494],{"class":144},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[74,17496,17497,17499,17501,17503],{"class":76,"line":1279},[74,17498,17210],{"class":80},[74,17500,17213],{"class":84},[74,17502,131],{"class":80},[74,17504,17505],{"class":84}," a; \n",[74,17507,17508,17510,17512,17514,17516],{"class":76,"line":1291},[74,17509,17450],{"class":84},[74,17511,131],{"class":80},[74,17513,13229],{"class":134},[74,17515,141],{"class":84},[74,17517,17518],{"class":144}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[74,17520,17521],{"class":76,"line":1574},[74,17522,17489],{"class":84},[74,17524,17525,17527,17529,17531,17533,17535,17537],{"class":76,"line":1579},[74,17526,10808],{"class":84},[74,17528,1130],{"class":80},[74,17530,16949],{"class":190},[74,17532,1406],{"class":80},[74,17534,15148],{"class":84},[74,17536,1130],{"class":80},[74,17538,13119],{"class":84},[74,17540,17541,17543,17545,17548,17550,17552,17554],{"class":76,"line":1585},[74,17542,10808],{"class":84},[74,17544,1130],{"class":80},[74,17546,17547],{"class":190}," \"ref:\"",[74,17549,1406],{"class":80},[74,17551,17213],{"class":84},[74,17553,1130],{"class":80},[74,17555,13119],{"class":84},[74,17557,17558],{"class":76,"line":1590},[74,17559,17489],{"class":84},[74,17561,17562,17565],{"class":76,"line":1604},[74,17563,17564],{"class":1925},"    func",[74,17566,17567],{"class":84},"(a);\n",[74,17569,17570,17572,17574],{"class":76,"line":1609},[74,17571,4053],{"class":80},[74,17573,4056],{"class":134},[74,17575,1252],{"class":84},[74,17577,17578],{"class":76,"line":1615},[74,17579,1527],{"class":84},[19,17581,15611],{},[27,17583,17584,17587],{},[30,17585,17586],{},"引用的本质，就是一个指针常量",[30,17588,17589],{},"引用一旦初始化，就不可以发生改变",[14,17591,17593],{"id":17592},"_66常量引用","6.6常量引用",[19,17595,17596],{},"作用：常量引用主要用来修饰形参",[19,17598,17599,17600,17603],{},"在函数形参列表中，可以加",[235,17601,17602],{},"const修饰形参","，防止形参改变实参",[64,17605,17607],{"className":66,"code":17606,"language":68,"meta":69,"style":69},"\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",[71,17608,17609,17614,17619,17638,17643,17656,17660,17664,17672,17676,17681,17686,17700,17704,17712,17724,17728,17733,17745,17752,17756,17766,17770,17778],{"__ignoreMap":69},[74,17610,17611],{"class":76,"line":77},[74,17612,17613],{"class":144},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[74,17615,17616],{"class":76,"line":94},[74,17617,17618],{"class":144},"\u002F\u002F加上const就不能修改实参的\n",[74,17620,17621,17623,17626,17628,17630,17633,17636],{"class":76,"line":1141},[74,17622,9643],{"class":80},[74,17624,17625],{"class":1925}," showValue",[74,17627,85],{"class":84},[74,17629,11071],{"class":80},[74,17631,17632],{"class":80}," int&",[74,17634,17635],{"class":9495}," v",[74,17637,16721],{"class":84},[74,17639,17640],{"class":76,"line":1156},[74,17641,17642],{"class":144},"    \u002F\u002Fv += 100;\n",[74,17644,17645,17647,17649,17652,17654],{"class":76,"line":1162},[74,17646,10808],{"class":84},[74,17648,1130],{"class":80},[74,17650,17651],{"class":84}," v ",[74,17653,1130],{"class":80},[74,17655,13119],{"class":84},[74,17657,17658],{"class":76,"line":1176},[74,17659,1527],{"class":84},[74,17661,17662],{"class":76,"line":1182},[74,17663,2363],{"emptyLinePlaceholder":2362},[74,17665,17666,17668,17670],{"class":76,"line":1273},[74,17667,88],{"class":80},[74,17669,1935],{"class":1925},[74,17671,15132],{"class":84},[74,17673,17674],{"class":76,"line":1279},[74,17675,2363],{"emptyLinePlaceholder":2362},[74,17677,17678],{"class":76,"line":1291},[74,17679,17680],{"class":144},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[74,17682,17683],{"class":76,"line":1574},[74,17684,17685],{"class":144},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[74,17687,17688,17690,17692,17694,17696,17698],{"class":76,"line":1579},[74,17689,15500],{"class":80},[74,17691,17632],{"class":80},[74,17693,17213],{"class":84},[74,17695,131],{"class":80},[74,17697,2000],{"class":134},[74,17699,1252],{"class":84},[74,17701,17702],{"class":76,"line":1585},[74,17703,2363],{"emptyLinePlaceholder":2362},[74,17705,17706,17709],{"class":76,"line":1590},[74,17707,17708],{"class":144},"    \u002F\u002Fref = 100;",[74,17710,17711],{"class":144},"  \u002F\u002F加入const后不可以修改变量\n",[74,17713,17714,17716,17718,17720,17722],{"class":76,"line":1604},[74,17715,10808],{"class":84},[74,17717,1130],{"class":80},[74,17719,17213],{"class":84},[74,17721,1130],{"class":80},[74,17723,13119],{"class":84},[74,17725,17726],{"class":76,"line":1609},[74,17727,2363],{"emptyLinePlaceholder":2362},[74,17729,17730],{"class":76,"line":1615},[74,17731,17732],{"class":144},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[74,17734,17735,17737,17739,17741,17743],{"class":76,"line":1636},[74,17736,1947],{"class":80},[74,17738,15148],{"class":84},[74,17740,131],{"class":80},[74,17742,2000],{"class":134},[74,17744,1252],{"class":84},[74,17746,17747,17750],{"class":76,"line":1641},[74,17748,17749],{"class":1925},"    showValue",[74,17751,17567],{"class":84},[74,17753,17754],{"class":76,"line":1655},[74,17755,2363],{"emptyLinePlaceholder":2362},[74,17757,17758,17760,17762,17764],{"class":76,"line":1660},[74,17759,2265],{"class":1925},[74,17761,85],{"class":84},[74,17763,2270],{"class":190},[74,17765,2682],{"class":84},[74,17767,17768],{"class":76,"line":1689},[74,17769,2363],{"emptyLinePlaceholder":2362},[74,17771,17772,17774,17776],{"class":76,"line":1694},[74,17773,4053],{"class":80},[74,17775,4056],{"class":134},[74,17777,1252],{"class":84},[74,17779,17780],{"class":76,"line":1711},[74,17781,1527],{"class":84},[5090,17783,17784],{},"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":69,"searchDepth":94,"depth":94,"links":17786},[17787,17788,17789,17790,17791,17792],{"id":16319,"depth":94,"text":16320},{"id":16498,"depth":94,"text":16499},{"id":16681,"depth":94,"text":16682},{"id":17085,"depth":94,"text":17086},{"id":17412,"depth":94,"text":17413},{"id":17592,"depth":94,"text":17593},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":16311,"description":69},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":17799,"title":17800,"body":17801,"description":69,"extension":5121,"meta":18882,"navigation":2362,"path":18883,"seo":18884,"stem":18885,"__hash__":18886},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":17802,"toc":18874},[17803,17806,17810,17813,17818,18050,18052,18063,18067,18070,18078,18182,18185,18189,18192,18196,18199,18204,18226,18232,18559,18562,18566,18574,18871],[10,17804,17800],{"id":17805},"_7函数高级部分",[14,17807,17809],{"id":17808},"_71函数默认参数","7.1函数默认参数",[19,17811,17812],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,17814,9460,17815],{},[71,17816,17817],{}," 返回值类型  函数名 （参数= 默认值）{}",[64,17819,17821],{"className":66,"code":17820,"language":68,"meta":69,"style":69},"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",[71,17822,17823,17858,17873,17877,17881,17886,17891,17920,17940,17950,17954,17958,17966,17970,17998,18020,18024,18034,18038,18046],{"__ignoreMap":69},[74,17824,17825,17827,17829,17831,17833,17835,17837,17839,17841,17844,17846,17848,17850,17852,17854,17856],{"class":76,"line":77},[74,17826,88],{"class":80},[74,17828,15664],{"class":1925},[74,17830,85],{"class":84},[74,17832,88],{"class":80},[74,17834,1360],{"class":9495},[74,17836,16714],{"class":84},[74,17838,88],{"class":80},[74,17840,2796],{"class":9495},[74,17842,17843],{"class":80}," =",[74,17845,2000],{"class":134},[74,17847,16714],{"class":84},[74,17849,88],{"class":80},[74,17851,2812],{"class":9495},[74,17853,17843],{"class":80},[74,17855,2000],{"class":134},[74,17857,16721],{"class":84},[74,17859,17860,17862,17864,17866,17868,17870],{"class":76,"line":94},[74,17861,4053],{"class":80},[74,17863,15148],{"class":84},[74,17865,567],{"class":80},[74,17867,15161],{"class":84},[74,17869,567],{"class":80},[74,17871,17872],{"class":84}," c;\n",[74,17874,17875],{"class":76,"line":1141},[74,17876,1527],{"class":84},[74,17878,17879],{"class":76,"line":1156},[74,17880,2363],{"emptyLinePlaceholder":2362},[74,17882,17883],{"class":76,"line":1162},[74,17884,17885],{"class":144},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[74,17887,17888],{"class":76,"line":1176},[74,17889,17890],{"class":144},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[74,17892,17893,17895,17898,17900,17902,17904,17906,17908,17910,17912,17914,17916,17918],{"class":76,"line":1182},[74,17894,88],{"class":80},[74,17896,17897],{"class":1925}," func2",[74,17899,85],{"class":84},[74,17901,88],{"class":80},[74,17903,1360],{"class":9495},[74,17905,17843],{"class":80},[74,17907,2000],{"class":134},[74,17909,16714],{"class":84},[74,17911,88],{"class":80},[74,17913,2796],{"class":9495},[74,17915,17843],{"class":80},[74,17917,2000],{"class":134},[74,17919,2682],{"class":84},[74,17921,17922,17924,17926,17928,17930,17932,17934,17936,17938],{"class":76,"line":1273},[74,17923,88],{"class":80},[74,17925,17897],{"class":1925},[74,17927,85],{"class":84},[74,17929,88],{"class":80},[74,17931,1360],{"class":9495},[74,17933,16714],{"class":84},[74,17935,88],{"class":80},[74,17937,2796],{"class":9495},[74,17939,16721],{"class":84},[74,17941,17942,17944,17946,17948],{"class":76,"line":1279},[74,17943,4053],{"class":80},[74,17945,15148],{"class":84},[74,17947,567],{"class":80},[74,17949,16742],{"class":84},[74,17951,17952],{"class":76,"line":1291},[74,17953,1527],{"class":84},[74,17955,17956],{"class":76,"line":1574},[74,17957,2363],{"emptyLinePlaceholder":2362},[74,17959,17960,17962,17964],{"class":76,"line":1579},[74,17961,88],{"class":80},[74,17963,1935],{"class":1925},[74,17965,15132],{"class":84},[74,17967,17968],{"class":76,"line":1585},[74,17969,2363],{"emptyLinePlaceholder":2362},[74,17971,17972,17974,17976,17979,17981,17983,17985,17987,17989,17991,17994,17996],{"class":76,"line":1590},[74,17973,10808],{"class":84},[74,17975,1130],{"class":80},[74,17977,17978],{"class":190}," \"ret = \"",[74,17980,1406],{"class":80},[74,17982,15664],{"class":1925},[74,17984,85],{"class":84},[74,17986,786],{"class":134},[74,17988,16714],{"class":84},[74,17990,786],{"class":134},[74,17992,17993],{"class":84},") ",[74,17995,1130],{"class":80},[74,17997,13119],{"class":84},[74,17999,18000,18002,18004,18006,18008,18010,18012,18014,18016,18018],{"class":76,"line":1604},[74,18001,10808],{"class":84},[74,18003,1130],{"class":80},[74,18005,17978],{"class":190},[74,18007,1406],{"class":80},[74,18009,15664],{"class":1925},[74,18011,85],{"class":84},[74,18013,397],{"class":134},[74,18015,17993],{"class":84},[74,18017,1130],{"class":80},[74,18019,13119],{"class":84},[74,18021,18022],{"class":76,"line":1609},[74,18023,2363],{"emptyLinePlaceholder":2362},[74,18025,18026,18028,18030,18032],{"class":76,"line":1615},[74,18027,2265],{"class":1925},[74,18029,85],{"class":84},[74,18031,2270],{"class":190},[74,18033,2682],{"class":84},[74,18035,18036],{"class":76,"line":1636},[74,18037,2363],{"emptyLinePlaceholder":2362},[74,18039,18040,18042,18044],{"class":76,"line":1641},[74,18041,4053],{"class":80},[74,18043,4056],{"class":134},[74,18045,1252],{"class":84},[74,18047,18048],{"class":76,"line":1655},[74,18049,1527],{"class":84},[19,18051,15611],{},[27,18053,18054,18057,18060],{},[30,18055,18056],{},"我传就用我；没传就用你",[30,18058,18059],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[30,18061,18062],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,18064,18066],{"id":18065},"_72函数的占位参数","7.2函数的占位参数",[19,18068,18069],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,18071,18072,18074,18075],{},[235,18073,9460],{}," ",[71,18076,18077],{},"返回值类型 函数名 (数据类型){}",[64,18079,18081],{"className":66,"code":18080,"language":68,"meta":69,"style":69},"\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",[71,18082,18083,18088,18106,18119,18123,18131,18135,18152,18156,18166,18170,18178],{"__ignoreMap":69},[74,18084,18085],{"class":76,"line":77},[74,18086,18087],{"class":144},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[74,18089,18090,18092,18094,18096,18098,18100,18102,18104],{"class":76,"line":94},[74,18091,9643],{"class":80},[74,18093,15664],{"class":1925},[74,18095,85],{"class":84},[74,18097,88],{"class":80},[74,18099,1360],{"class":9495},[74,18101,16714],{"class":84},[74,18103,88],{"class":80},[74,18105,16721],{"class":84},[74,18107,18108,18110,18112,18115,18117],{"class":76,"line":1141},[74,18109,10808],{"class":84},[74,18111,1130],{"class":80},[74,18113,18114],{"class":190}," \"this is func\"",[74,18116,1406],{"class":80},[74,18118,13119],{"class":84},[74,18120,18121],{"class":76,"line":1156},[74,18122,1527],{"class":84},[74,18124,18125,18127,18129],{"class":76,"line":1162},[74,18126,88],{"class":80},[74,18128,1935],{"class":1925},[74,18130,15132],{"class":84},[74,18132,18133],{"class":76,"line":1176},[74,18134,2363],{"emptyLinePlaceholder":2362},[74,18136,18137,18139,18141,18143,18145,18147,18149],{"class":76,"line":1182},[74,18138,17564],{"class":1925},[74,18140,85],{"class":84},[74,18142,532],{"class":134},[74,18144,464],{"class":84},[74,18146,532],{"class":134},[74,18148,10245],{"class":84},[74,18150,18151],{"class":144}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[74,18153,18154],{"class":76,"line":1273},[74,18155,2363],{"emptyLinePlaceholder":2362},[74,18157,18158,18160,18162,18164],{"class":76,"line":1279},[74,18159,2265],{"class":1925},[74,18161,85],{"class":84},[74,18163,2270],{"class":190},[74,18165,2682],{"class":84},[74,18167,18168],{"class":76,"line":1291},[74,18169,2363],{"emptyLinePlaceholder":2362},[74,18171,18172,18174,18176],{"class":76,"line":1574},[74,18173,4053],{"class":80},[74,18175,4056],{"class":134},[74,18177,1252],{"class":84},[74,18179,18180],{"class":76,"line":1579},[74,18181,1527],{"class":84},[19,18183,18184],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,18186,18188],{"id":18187},"_73函数重载","7.3函数重载",[19,18190,18191],{},"意思是函数名是可以相同的",[44,18193,18195],{"id":18194},"_731基本语法","7.3.1基本语法",[19,18197,18198],{},"作用：函数名可以相同，提高复用性",[19,18200,18201],{},[235,18202,18203],{},"函数重载满足条件：",[1093,18205,18206,18209,18212],{},[30,18207,18208],{},"同一个作用域下",[30,18210,18211],{},"函数名称相同",[30,18213,18214,18215,18218,18219,18222,18223],{},"函数参数",[235,18216,18217],{},"类型不同","  或者 ",[235,18220,18221],{},"个数不同"," 或者 ",[235,18224,18225],{},"顺序不同",[19,18227,18228,18231],{},[235,18229,18230],{},"注意:","  函数的返回值不可以作为函数重载的条件",[64,18233,18235],{"className":14220,"code":18234,"language":14222,"meta":69,"style":69},"\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",[71,18236,18237,18242,18250,18254,18267,18271,18285,18289,18302,18306,18321,18325,18338,18342,18363,18367,18380,18384,18404,18408,18421,18425,18429,18434,18439,18444,18449,18454,18458,18462,18470,18474,18480,18490,18500,18514,18529,18533,18543,18547,18555],{"__ignoreMap":69},[74,18238,18239],{"class":76,"line":77},[74,18240,18241],{"class":144},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[74,18243,18244,18246,18248],{"class":76,"line":94},[74,18245,9643],{"class":80},[74,18247,15664],{"class":1925},[74,18249,1938],{"class":84},[74,18251,18252],{"class":76,"line":1141},[74,18253,1508],{"class":84},[74,18255,18256,18258,18260,18263,18265],{"class":76,"line":1156},[74,18257,10808],{"class":84},[74,18259,1130],{"class":80},[74,18261,18262],{"class":190}," \"func 的调用！\"",[74,18264,1406],{"class":80},[74,18266,13119],{"class":84},[74,18268,18269],{"class":76,"line":1162},[74,18270,1527],{"class":84},[74,18272,18273,18275,18277,18279,18281,18283],{"class":76,"line":1176},[74,18274,9643],{"class":80},[74,18276,15664],{"class":1925},[74,18278,85],{"class":84},[74,18280,88],{"class":80},[74,18282,1360],{"class":9495},[74,18284,91],{"class":84},[74,18286,18287],{"class":76,"line":1182},[74,18288,1508],{"class":84},[74,18290,18291,18293,18295,18298,18300],{"class":76,"line":1273},[74,18292,10808],{"class":84},[74,18294,1130],{"class":80},[74,18296,18297],{"class":190}," \"func (int a) 的调用！\"",[74,18299,1406],{"class":80},[74,18301,13119],{"class":84},[74,18303,18304],{"class":76,"line":1279},[74,18305,1527],{"class":84},[74,18307,18308,18310,18312,18314,18317,18319],{"class":76,"line":1291},[74,18309,9643],{"class":80},[74,18311,15664],{"class":1925},[74,18313,85],{"class":84},[74,18315,18316],{"class":80},"double",[74,18318,1360],{"class":9495},[74,18320,91],{"class":84},[74,18322,18323],{"class":76,"line":1574},[74,18324,1508],{"class":84},[74,18326,18327,18329,18331,18334,18336],{"class":76,"line":1579},[74,18328,10808],{"class":84},[74,18330,1130],{"class":80},[74,18332,18333],{"class":190}," \"func (double a)的调用！\"",[74,18335,1406],{"class":80},[74,18337,13119],{"class":84},[74,18339,18340],{"class":76,"line":1585},[74,18341,1527],{"class":84},[74,18343,18344,18346,18348,18350,18352,18354,18357,18359,18361],{"class":76,"line":1590},[74,18345,9643],{"class":80},[74,18347,15664],{"class":1925},[74,18349,85],{"class":84},[74,18351,88],{"class":80},[74,18353,1360],{"class":9495},[74,18355,18356],{"class":84}," ,",[74,18358,18316],{"class":80},[74,18360,2796],{"class":9495},[74,18362,91],{"class":84},[74,18364,18365],{"class":76,"line":1604},[74,18366,1508],{"class":84},[74,18368,18369,18371,18373,18376,18378],{"class":76,"line":1609},[74,18370,10808],{"class":84},[74,18372,1130],{"class":80},[74,18374,18375],{"class":190}," \"func (int a ,double b) 的调用！\"",[74,18377,1406],{"class":80},[74,18379,13119],{"class":84},[74,18381,18382],{"class":76,"line":1615},[74,18383,1527],{"class":84},[74,18385,18386,18388,18390,18392,18394,18396,18398,18400,18402],{"class":76,"line":1636},[74,18387,9643],{"class":80},[74,18389,15664],{"class":1925},[74,18391,85],{"class":84},[74,18393,18316],{"class":80},[74,18395,1360],{"class":9495},[74,18397,18356],{"class":84},[74,18399,88],{"class":80},[74,18401,2796],{"class":9495},[74,18403,91],{"class":84},[74,18405,18406],{"class":76,"line":1641},[74,18407,1508],{"class":84},[74,18409,18410,18412,18414,18417,18419],{"class":76,"line":1655},[74,18411,10808],{"class":84},[74,18413,1130],{"class":80},[74,18415,18416],{"class":190}," \"func (double a ,int b)的调用！\"",[74,18418,1406],{"class":80},[74,18420,13119],{"class":84},[74,18422,18423],{"class":76,"line":1660},[74,18424,1527],{"class":84},[74,18426,18427],{"class":76,"line":1689},[74,18428,2363],{"emptyLinePlaceholder":2362},[74,18430,18431],{"class":76,"line":1694},[74,18432,18433],{"class":144},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[74,18435,18436],{"class":76,"line":1711},[74,18437,18438],{"class":144},"\u002F\u002Fint func(double a, int b)\n",[74,18440,18441],{"class":76,"line":1716},[74,18442,18443],{"class":144},"\u002F\u002F{\n",[74,18445,18446],{"class":76,"line":1721},[74,18447,18448],{"class":144},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[74,18450,18451],{"class":76,"line":1726},[74,18452,18453],{"class":144},"\u002F\u002F}\n",[74,18455,18456],{"class":76,"line":1740},[74,18457,2363],{"emptyLinePlaceholder":2362},[74,18459,18460],{"class":76,"line":1745},[74,18461,2363],{"emptyLinePlaceholder":2362},[74,18463,18464,18466,18468],{"class":76,"line":2540},[74,18465,88],{"class":80},[74,18467,1935],{"class":1925},[74,18469,15132],{"class":84},[74,18471,18472],{"class":76,"line":2554},[74,18473,2363],{"emptyLinePlaceholder":2362},[74,18475,18476,18478],{"class":76,"line":2562},[74,18477,17564],{"class":1925},[74,18479,9915],{"class":84},[74,18481,18482,18484,18486,18488],{"class":76,"line":2567},[74,18483,17564],{"class":1925},[74,18485,85],{"class":84},[74,18487,532],{"class":134},[74,18489,2682],{"class":84},[74,18491,18492,18494,18496,18498],{"class":76,"line":2573},[74,18493,17564],{"class":1925},[74,18495,85],{"class":84},[74,18497,135],{"class":134},[74,18499,2682],{"class":84},[74,18501,18502,18504,18506,18508,18510,18512],{"class":76,"line":2579},[74,18503,17564],{"class":1925},[74,18505,85],{"class":84},[74,18507,532],{"class":134},[74,18509,464],{"class":84},[74,18511,135],{"class":134},[74,18513,2682],{"class":84},[74,18515,18516,18518,18520,18522,18525,18527],{"class":76,"line":2584},[74,18517,17564],{"class":1925},[74,18519,85],{"class":84},[74,18521,135],{"class":134},[74,18523,18524],{"class":84}," , ",[74,18526,532],{"class":134},[74,18528,2682],{"class":84},[74,18530,18531],{"class":76,"line":12227},[74,18532,17489],{"class":84},[74,18534,18535,18537,18539,18541],{"class":76,"line":12251},[74,18536,2265],{"class":1925},[74,18538,85],{"class":84},[74,18540,2270],{"class":190},[74,18542,2682],{"class":84},[74,18544,18545],{"class":76,"line":12256},[74,18546,2363],{"emptyLinePlaceholder":2362},[74,18548,18549,18551,18553],{"class":76,"line":12262},[74,18550,4053],{"class":80},[74,18552,4056],{"class":134},[74,18554,1252],{"class":84},[74,18556,18557],{"class":76,"line":12289},[74,18558,1527],{"class":84},[19,18560,18561],{},"重点：函数返回值不可以作为函数重载条件！",[44,18563,18565],{"id":18564},"_732注意事项","7.3.2注意事项",[1093,18567,18568,18571],{},[30,18569,18570],{},"引用作为重载条件!!!",[30,18572,18573],{},"函数重载碰到函数默认参数",[64,18575,18577],{"className":66,"code":18576,"language":68,"meta":69,"style":69},"\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",[71,18578,18579,18584,18589,18593,18609,18613,18626,18630,18634,18652,18656,18669,18673,18677,18681,18686,18690,18714,18718,18731,18735,18739,18753,18757,18770,18774,18778,18786,18790,18802,18812,18825,18829,18833,18841,18845,18855,18859,18867],{"__ignoreMap":69},[74,18580,18581],{"class":76,"line":77},[74,18582,18583],{"class":144},"\u002F\u002F函数重载注意事项\n",[74,18585,18586],{"class":76,"line":94},[74,18587,18588],{"class":144},"\u002F\u002F1、引用作为重载条件\n",[74,18590,18591],{"class":76,"line":1141},[74,18592,2363],{"emptyLinePlaceholder":2362},[74,18594,18595,18597,18599,18601,18603,18605,18607],{"class":76,"line":1156},[74,18596,9643],{"class":80},[74,18598,15664],{"class":1925},[74,18600,85],{"class":84},[74,18602,88],{"class":80},[74,18604,14863],{"class":80},[74,18606,324],{"class":9495},[74,18608,91],{"class":84},[74,18610,18611],{"class":76,"line":1162},[74,18612,1508],{"class":84},[74,18614,18615,18617,18619,18622,18624],{"class":76,"line":1176},[74,18616,10808],{"class":84},[74,18618,1130],{"class":80},[74,18620,18621],{"class":190}," \"func (int &a) 调用 \"",[74,18623,1406],{"class":80},[74,18625,13119],{"class":84},[74,18627,18628],{"class":76,"line":1182},[74,18629,1527],{"class":84},[74,18631,18632],{"class":76,"line":1273},[74,18633,2363],{"emptyLinePlaceholder":2362},[74,18635,18636,18638,18640,18642,18644,18646,18648,18650],{"class":76,"line":1279},[74,18637,9643],{"class":80},[74,18639,15664],{"class":1925},[74,18641,85],{"class":84},[74,18643,11071],{"class":80},[74,18645,2344],{"class":80},[74,18647,14863],{"class":80},[74,18649,324],{"class":9495},[74,18651,91],{"class":84},[74,18653,18654],{"class":76,"line":1291},[74,18655,1508],{"class":84},[74,18657,18658,18660,18662,18665,18667],{"class":76,"line":1574},[74,18659,10808],{"class":84},[74,18661,1130],{"class":80},[74,18663,18664],{"class":190}," \"func (const int &a) 调用 \"",[74,18666,1406],{"class":80},[74,18668,13119],{"class":84},[74,18670,18671],{"class":76,"line":1579},[74,18672,1527],{"class":84},[74,18674,18675],{"class":76,"line":1585},[74,18676,2363],{"emptyLinePlaceholder":2362},[74,18678,18679],{"class":76,"line":1590},[74,18680,2363],{"emptyLinePlaceholder":2362},[74,18682,18683],{"class":76,"line":1604},[74,18684,18685],{"class":144},"\u002F\u002F2、函数重载碰到函数默认参数\n",[74,18687,18688],{"class":76,"line":1609},[74,18689,2363],{"emptyLinePlaceholder":2362},[74,18691,18692,18694,18696,18698,18700,18702,18704,18706,18708,18710,18712],{"class":76,"line":1615},[74,18693,9643],{"class":80},[74,18695,17897],{"class":1925},[74,18697,85],{"class":84},[74,18699,88],{"class":80},[74,18701,1360],{"class":9495},[74,18703,16714],{"class":84},[74,18705,88],{"class":80},[74,18707,2796],{"class":9495},[74,18709,17843],{"class":80},[74,18711,2000],{"class":134},[74,18713,91],{"class":84},[74,18715,18716],{"class":76,"line":1636},[74,18717,1508],{"class":84},[74,18719,18720,18722,18724,18727,18729],{"class":76,"line":1641},[74,18721,10808],{"class":84},[74,18723,1130],{"class":80},[74,18725,18726],{"class":190}," \"func2(int a, int b = 10) 调用\"",[74,18728,1406],{"class":80},[74,18730,13119],{"class":84},[74,18732,18733],{"class":76,"line":1655},[74,18734,1527],{"class":84},[74,18736,18737],{"class":76,"line":1660},[74,18738,2363],{"emptyLinePlaceholder":2362},[74,18740,18741,18743,18745,18747,18749,18751],{"class":76,"line":1689},[74,18742,9643],{"class":80},[74,18744,17897],{"class":1925},[74,18746,85],{"class":84},[74,18748,88],{"class":80},[74,18750,1360],{"class":9495},[74,18752,91],{"class":84},[74,18754,18755],{"class":76,"line":1694},[74,18756,1508],{"class":84},[74,18758,18759,18761,18763,18766,18768],{"class":76,"line":1711},[74,18760,10808],{"class":84},[74,18762,1130],{"class":80},[74,18764,18765],{"class":190}," \"func2(int a) 调用\"",[74,18767,1406],{"class":80},[74,18769,13119],{"class":84},[74,18771,18772],{"class":76,"line":1716},[74,18773,1527],{"class":84},[74,18775,18776],{"class":76,"line":1721},[74,18777,2363],{"emptyLinePlaceholder":2362},[74,18779,18780,18782,18784],{"class":76,"line":1726},[74,18781,88],{"class":80},[74,18783,1935],{"class":1925},[74,18785,15132],{"class":84},[74,18787,18788],{"class":76,"line":1740},[74,18789,17489],{"class":84},[74,18791,18792,18794,18796,18798,18800],{"class":76,"line":1745},[74,18793,1947],{"class":80},[74,18795,15148],{"class":84},[74,18797,131],{"class":80},[74,18799,2000],{"class":134},[74,18801,1252],{"class":84},[74,18803,18804,18806,18809],{"class":76,"line":2540},[74,18805,17564],{"class":1925},[74,18807,18808],{"class":84},"(a);",[74,18810,18811],{"class":144}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[74,18813,18814,18816,18818,18820,18822],{"class":76,"line":2554},[74,18815,17564],{"class":1925},[74,18817,85],{"class":84},[74,18819,532],{"class":134},[74,18821,10245],{"class":84},[74,18823,18824],{"class":144},"\u002F\u002F调用有const   10是个常量\n",[74,18826,18827],{"class":76,"line":2562},[74,18828,2363],{"emptyLinePlaceholder":2362},[74,18830,18831],{"class":76,"line":2567},[74,18832,2363],{"emptyLinePlaceholder":2362},[74,18834,18835,18838],{"class":76,"line":2573},[74,18836,18837],{"class":144},"    \u002F\u002Ffunc2(10);",[74,18839,18840],{"class":144}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[74,18842,18843],{"class":76,"line":2579},[74,18844,2363],{"emptyLinePlaceholder":2362},[74,18846,18847,18849,18851,18853],{"class":76,"line":2584},[74,18848,2265],{"class":1925},[74,18850,85],{"class":84},[74,18852,2270],{"class":190},[74,18854,2682],{"class":84},[74,18856,18857],{"class":76,"line":12227},[74,18858,2363],{"emptyLinePlaceholder":2362},[74,18860,18861,18863,18865],{"class":76,"line":12251},[74,18862,4053],{"class":80},[74,18864,4056],{"class":134},[74,18866,1252],{"class":84},[74,18868,18869],{"class":76,"line":12256},[74,18870,1527],{"class":84},[5090,18872,18873],{},"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":69,"searchDepth":94,"depth":94,"links":18875},[18876,18877,18878],{"id":17808,"depth":94,"text":17809},{"id":18065,"depth":94,"text":18066},{"id":18187,"depth":94,"text":18188,"children":18879},[18880,18881],{"id":18194,"depth":1141,"text":18195},{"id":18564,"depth":1141,"text":18565},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":17800,"description":69},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":18888,"title":18889,"body":18890,"description":27644,"extension":5121,"meta":27645,"navigation":2362,"path":27646,"seo":27647,"stem":27648,"__hash__":27649},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":18891,"toc":27625},[18892,18895,18901,18908,18913,18916,18919,18922,18926,18930,18933,18936,18944,18949,18952,18959,18964,19123,19126,19379,19382,19385,19388,19393,19396,19399,19410,19415,19651,19655,19665,19668,19676,19823,19827,19830,19833,19837,20282,20286,20294,20302,21214,21221,21226,21854,21857,21860,21863,21982,21985,22072,22075,22201,22204,22298,22301,22654,22658,22666,22670,22677,22680,22683,22694,22700,22705,22717,22725,22745,22753,22770,22956,22959,22963,22966,22969,22972,22975,22978,22981,22984,23444,23450,23454,23457,23468,24055,24058,24547,24551,24554,24557,24560,24563,24566,24574,24970,24974,24977,24980,25427,25430,25433,25438,25441,25446,25449,25453,25456,25458,25464,25467,25773,25783,25824,25828,25831,25833,25866,25869,26176,26178,26193,26196,26219,26228,26234,26237,26241,26244,26247,26252,26263,26268,26276,26281,26411,26414,26417,26592,26597,26809,26813,26816,26930,26935,27174,27178,27182,27185,27188,27193,27298,27301,27304,27307,27311,27422,27425,27428,27433,27485,27488,27491,27496,27542,27545,27550,27618,27620,27623],[10,18893,18889],{"id":18894},"_8类和对象",[19,18896,18897,18898],{},"C++面向对象的三大特性为",[235,18899,18900],{},"封装、继承、多态",[19,18902,18903,18904,18907],{},"C++认为",[235,18905,18906],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,18909,18910],{},[235,18911,18912],{},"例如：",[19,18914,18915],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,18917,18918],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,18920,18921],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,18923,18925],{"id":18924},"_81封装","8.1封装",[44,18927,18929],{"id":18928},"_811封装的意义","8.1.1封装的意义",[19,18931,18932],{},"封装是C++面向对象三大特性之一",[19,18934,18935],{},"封装的意义：",[1093,18937,18938,18941],{},[30,18939,18940],{},"将属性和行为作为一个整体，表现生活中的事物",[30,18942,18943],{},"将属性和行为加以权限控制",[19,18945,18946],{},[235,18947,18948],{},"封装意义一：",[19,18950,18951],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,18953,18954,18074,18956],{},[235,18955,9460],{},[71,18957,18958],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[27,18960,18961],{},[30,18962,18963],{},"**示例1：**设计一个圆类，求圆的周长",[64,18965,18967],{"className":66,"code":18966,"language":68,"meta":69,"style":69},"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",[71,18968,18969,18977,18981,18986,18991,18996,19001,19008,19013,19023,19027,19045,19049,19053,19061,19065,19070,19075,19080,19085,19096,19119],{"__ignoreMap":69},[74,18970,18971,18974],{"class":76,"line":77},[74,18972,18973],{"class":80},"class",[74,18975,18976],{"class":1925}," Circle\n",[74,18978,18979],{"class":76,"line":94},[74,18980,1508],{"class":84},[74,18982,18983],{"class":76,"line":1141},[74,18984,18985],{"class":144},"    \u002F\u002F访问权限\n",[74,18987,18988],{"class":76,"line":1156},[74,18989,18990],{"class":144},"    \u002F\u002F公共权限\n",[74,18992,18993],{"class":76,"line":1162},[74,18994,18995],{"class":80},"public:\n",[74,18997,18998],{"class":76,"line":1176},[74,18999,19000],{"class":144},"    \u002F\u002F属性\n",[74,19002,19003,19005],{"class":76,"line":1182},[74,19004,1947],{"class":80},[74,19006,19007],{"class":84}," m_r;\n",[74,19009,19010],{"class":76,"line":1273},[74,19011,19012],{"class":144},"    \u002F\u002F行为\n",[74,19014,19015,19018,19021],{"class":76,"line":1279},[74,19016,19017],{"class":80},"    double",[74,19019,19020],{"class":1925}," calculateZC",[74,19022,1938],{"class":84},[74,19024,19025],{"class":76,"line":1291},[74,19026,1992],{"class":84},[74,19028,19029,19032,19035,19037,19040,19042],{"class":76,"line":1574},[74,19030,19031],{"class":80},"        return",[74,19033,19034],{"class":134}," 2",[74,19036,541],{"class":80},[74,19038,19039],{"class":84},"PI",[74,19041,541],{"class":80},[74,19043,19044],{"class":84},"m_r;\n",[74,19046,19047],{"class":76,"line":1579},[74,19048,2149],{"class":84},[74,19050,19051],{"class":76,"line":1585},[74,19052,3958],{"class":84},[74,19054,19055,19057,19059],{"class":76,"line":1590},[74,19056,88],{"class":80},[74,19058,1935],{"class":1925},[74,19060,1938],{"class":84},[74,19062,19063],{"class":76,"line":1604},[74,19064,1508],{"class":84},[74,19066,19067],{"class":76,"line":1609},[74,19068,19069],{"class":144},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[74,19071,19072],{"class":76,"line":1615},[74,19073,19074],{"class":144},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[74,19076,19077],{"class":76,"line":1636},[74,19078,19079],{"class":84},"    Circle c1;\n",[74,19081,19082],{"class":76,"line":1641},[74,19083,19084],{"class":144},"    \u002F\u002F给圆对象 的属性进行赋值\n",[74,19086,19087,19090,19092,19094],{"class":76,"line":1655},[74,19088,19089],{"class":84},"    c1.m_r",[74,19091,131],{"class":80},[74,19093,532],{"class":134},[74,19095,1252],{"class":84},[74,19097,19098,19100,19102,19105,19107,19110,19113,19115,19117],{"class":76,"line":1660},[74,19099,1513],{"class":84},[74,19101,1130],{"class":80},[74,19103,19104],{"class":190},"\"圆的周长\"",[74,19106,1130],{"class":80},[74,19108,19109],{"class":84},"c1.",[74,19111,19112],{"class":1925},"calculateZC",[74,19114,2390],{"class":84},[74,19116,1130],{"class":80},[74,19118,1153],{"class":84},[74,19120,19121],{"class":76,"line":1689},[74,19122,1527],{"class":84},[19,19124,19125],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[64,19127,19129],{"className":66,"code":19128,"language":68,"meta":69,"style":69},"#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",[71,19130,19131,19137,19147,19153,19159,19163,19167,19172,19179,19184,19202,19206,19216,19220,19225,19241,19245,19255,19259,19264,19272,19276,19308,19312,19316,19324,19328,19333,19338,19352,19366,19375],{"__ignoreMap":69},[74,19132,19133,19135],{"class":76,"line":77},[74,19134,1911],{"class":80},[74,19136,1914],{"class":190},[74,19138,19139,19141,19143,19145],{"class":76,"line":94},[74,19140,1919],{"class":80},[74,19142,1922],{"class":80},[74,19144,1926],{"class":1925},[74,19146,1252],{"class":84},[74,19148,19149,19151],{"class":76,"line":1141},[74,19150,1911],{"class":80},[74,19152,12028],{"class":190},[74,19154,19155,19157],{"class":76,"line":1156},[74,19156,18973],{"class":80},[74,19158,12041],{"class":1925},[74,19160,19161],{"class":76,"line":1162},[74,19162,1508],{"class":84},[74,19164,19165],{"class":76,"line":1176},[74,19166,18995],{"class":80},[74,19168,19169],{"class":76,"line":1182},[74,19170,19171],{"class":84},"    string m_name;\n",[74,19173,19174,19176],{"class":76,"line":1273},[74,19175,1947],{"class":80},[74,19177,19178],{"class":84}," m_id;\n",[74,19180,19181],{"class":76,"line":1279},[74,19182,19183],{"class":144},"    \u002F\u002F赋值姓名\n",[74,19185,19186,19189,19192,19194,19197,19200],{"class":76,"line":1291},[74,19187,19188],{"class":80},"    void",[74,19190,19191],{"class":1925}," setName",[74,19193,85],{"class":84},[74,19195,19196],{"class":1925},"string",[74,19198,19199],{"class":9495}," name",[74,19201,91],{"class":84},[74,19203,19204],{"class":76,"line":1574},[74,19205,1992],{"class":84},[74,19207,19208,19211,19213],{"class":76,"line":1579},[74,19209,19210],{"class":84},"        m_name",[74,19212,131],{"class":80},[74,19214,19215],{"class":84},"name;\n",[74,19217,19218],{"class":76,"line":1585},[74,19219,2149],{"class":84},[74,19221,19222],{"class":76,"line":1590},[74,19223,19224],{"class":144},"    \u002F\u002F赋值学号\n",[74,19226,19227,19229,19232,19234,19236,19239],{"class":76,"line":1604},[74,19228,19188],{"class":80},[74,19230,19231],{"class":1925}," setId",[74,19233,85],{"class":84},[74,19235,88],{"class":80},[74,19237,19238],{"class":9495}," id",[74,19240,91],{"class":84},[74,19242,19243],{"class":76,"line":1609},[74,19244,1992],{"class":84},[74,19246,19247,19250,19252],{"class":76,"line":1615},[74,19248,19249],{"class":84},"        m_id",[74,19251,131],{"class":80},[74,19253,19254],{"class":84},"id;\n",[74,19256,19257],{"class":76,"line":1636},[74,19258,2149],{"class":84},[74,19260,19261],{"class":76,"line":1641},[74,19262,19263],{"class":144},"    \u002F\u002F打印学生信息\n",[74,19265,19266,19268,19270],{"class":76,"line":1655},[74,19267,19188],{"class":80},[74,19269,13894],{"class":1925},[74,19271,1938],{"class":84},[74,19273,19274],{"class":76,"line":1660},[74,19275,1992],{"class":84},[74,19277,19278,19280,19282,19285,19287,19290,19292,19294,19296,19299,19301,19304,19306],{"class":76,"line":1689},[74,19279,3414],{"class":84},[74,19281,1130],{"class":80},[74,19283,19284],{"class":190},"\"姓名：\"",[74,19286,1130],{"class":80},[74,19288,19289],{"class":84},"m_name",[74,19291,1130],{"class":80},[74,19293,4322],{"class":190},[74,19295,1130],{"class":80},[74,19297,19298],{"class":190},"\"学号：\"",[74,19300,1130],{"class":80},[74,19302,19303],{"class":84},"m_id",[74,19305,1130],{"class":80},[74,19307,1153],{"class":84},[74,19309,19310],{"class":76,"line":1694},[74,19311,2149],{"class":84},[74,19313,19314],{"class":76,"line":1711},[74,19315,3958],{"class":84},[74,19317,19318,19320,19322],{"class":76,"line":1716},[74,19319,88],{"class":80},[74,19321,1935],{"class":1925},[74,19323,1938],{"class":84},[74,19325,19326],{"class":76,"line":1721},[74,19327,1508],{"class":84},[74,19329,19330],{"class":76,"line":1726},[74,19331,19332],{"class":144},"    \u002F\u002F实例化\n",[74,19334,19335],{"class":76,"line":1740},[74,19336,19337],{"class":84},"    Student s1;\n",[74,19339,19340,19343,19346,19348,19350],{"class":76,"line":1745},[74,19341,19342],{"class":84},"    s1.",[74,19344,19345],{"class":1925},"setName",[74,19347,85],{"class":84},[74,19349,12195],{"class":190},[74,19351,2682],{"class":84},[74,19353,19354,19356,19359,19361,19364],{"class":76,"line":2540},[74,19355,19342],{"class":84},[74,19357,19358],{"class":1925},"setId",[74,19360,85],{"class":84},[74,19362,19363],{"class":134},"123456",[74,19365,2682],{"class":84},[74,19367,19368,19370,19373],{"class":76,"line":2554},[74,19369,19342],{"class":84},[74,19371,19372],{"class":1925},"printInfo",[74,19374,9915],{"class":84},[74,19376,19377],{"class":76,"line":2562},[74,19378,1527],{"class":84},[19,19380,19381],{},"类中的属性和行为统称为成员",[19,19383,19384],{},"属性：成员属性(成员变量)",[19,19386,19387],{},"方法：成员函数(成员方法)",[19,19389,19390],{},[235,19391,19392],{},"封装意义二：",[19,19394,19395],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,19397,19398],{},"访问权限有三种：",[27,19400,19401,19404,19407],{},[30,19402,19403],{},"public        公共权限",[30,19405,19406],{},"protected 保护权限",[30,19408,19409],{},"private      私有权限",[19,19411,19412],{},[235,19413,19414],{},"示例：",[64,19416,19418],{"className":14220,"code":19417,"language":14222,"meta":69,"style":69},"\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",[71,19419,19420,19425,19430,19435,19440,19444,19451,19455,19460,19464,19469,19473,19478,19483,19488,19492,19497,19502,19509,19513,19517,19525,19529,19540,19552,19564,19568,19572,19576,19584,19588,19593,19605,19613,19621,19625,19635,19639,19647],{"__ignoreMap":69},[74,19421,19422],{"class":76,"line":77},[74,19423,19424],{"class":144},"\u002F\u002F三种权限\n",[74,19426,19427],{"class":76,"line":94},[74,19428,19429],{"class":144},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[74,19431,19432],{"class":76,"line":1141},[74,19433,19434],{"class":144},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[74,19436,19437],{"class":76,"line":1156},[74,19438,19439],{"class":144},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[74,19441,19442],{"class":76,"line":1162},[74,19443,2363],{"emptyLinePlaceholder":2362},[74,19445,19446,19448],{"class":76,"line":1176},[74,19447,18973],{"class":80},[74,19449,19450],{"class":1925}," Person\n",[74,19452,19453],{"class":76,"line":1182},[74,19454,1508],{"class":84},[74,19456,19457],{"class":76,"line":1273},[74,19458,19459],{"class":144},"    \u002F\u002F姓名  公共权限\n",[74,19461,19462],{"class":76,"line":1279},[74,19463,18995],{"class":80},[74,19465,19466],{"class":76,"line":1291},[74,19467,19468],{"class":84},"    string m_Name;\n",[74,19470,19471],{"class":76,"line":1574},[74,19472,2363],{"emptyLinePlaceholder":2362},[74,19474,19475],{"class":76,"line":1579},[74,19476,19477],{"class":144},"    \u002F\u002F汽车  保护权限\n",[74,19479,19480],{"class":76,"line":1585},[74,19481,19482],{"class":80},"protected:\n",[74,19484,19485],{"class":76,"line":1590},[74,19486,19487],{"class":84},"    string m_Car;\n",[74,19489,19490],{"class":76,"line":1604},[74,19491,2363],{"emptyLinePlaceholder":2362},[74,19493,19494],{"class":76,"line":1609},[74,19495,19496],{"class":144},"    \u002F\u002F银行卡密码  私有权限\n",[74,19498,19499],{"class":76,"line":1615},[74,19500,19501],{"class":80},"private:\n",[74,19503,19504,19506],{"class":76,"line":1636},[74,19505,1947],{"class":80},[74,19507,19508],{"class":84}," m_Password;\n",[74,19510,19511],{"class":76,"line":1641},[74,19512,2363],{"emptyLinePlaceholder":2362},[74,19514,19515],{"class":76,"line":1655},[74,19516,18995],{"class":80},[74,19518,19519,19521,19523],{"class":76,"line":1660},[74,19520,19188],{"class":80},[74,19522,15664],{"class":1925},[74,19524,1938],{"class":84},[74,19526,19527],{"class":76,"line":1689},[74,19528,1992],{"class":84},[74,19530,19531,19534,19536,19538],{"class":76,"line":1694},[74,19532,19533],{"class":84},"        m_Name ",[74,19535,131],{"class":80},[74,19537,13217],{"class":190},[74,19539,1252],{"class":84},[74,19541,19542,19545,19547,19550],{"class":76,"line":1711},[74,19543,19544],{"class":84},"        m_Car ",[74,19546,131],{"class":80},[74,19548,19549],{"class":190}," \"拖拉机\"",[74,19551,1252],{"class":84},[74,19553,19554,19557,19559,19562],{"class":76,"line":1716},[74,19555,19556],{"class":84},"        m_Password ",[74,19558,131],{"class":80},[74,19560,19561],{"class":134}," 123456",[74,19563,1252],{"class":84},[74,19565,19566],{"class":76,"line":1721},[74,19567,2149],{"class":84},[74,19569,19570],{"class":76,"line":1726},[74,19571,3958],{"class":84},[74,19573,19574],{"class":76,"line":1740},[74,19575,2363],{"emptyLinePlaceholder":2362},[74,19577,19578,19580,19582],{"class":76,"line":1745},[74,19579,88],{"class":80},[74,19581,1935],{"class":1925},[74,19583,15132],{"class":84},[74,19585,19586],{"class":76,"line":2540},[74,19587,2363],{"emptyLinePlaceholder":2362},[74,19589,19590],{"class":76,"line":2554},[74,19591,19592],{"class":84},"    Person p;\n",[74,19594,19595,19598,19600,19603],{"class":76,"line":2562},[74,19596,19597],{"class":84},"    p.m_Name ",[74,19599,131],{"class":80},[74,19601,19602],{"class":190}," \"李四\"",[74,19604,1252],{"class":84},[74,19606,19607,19610],{"class":76,"line":2567},[74,19608,19609],{"class":144},"    \u002F\u002Fp.m_Car = \"奔驰\";",[74,19611,19612],{"class":144},"  \u002F\u002F保护权限类外访问不到\n",[74,19614,19615,19618],{"class":76,"line":2573},[74,19616,19617],{"class":144},"    \u002F\u002Fp.m_Password = 123;",[74,19619,19620],{"class":144}," \u002F\u002F私有权限类外访问不到\n",[74,19622,19623],{"class":76,"line":2579},[74,19624,2363],{"emptyLinePlaceholder":2362},[74,19626,19627,19629,19631,19633],{"class":76,"line":2584},[74,19628,2265],{"class":1925},[74,19630,85],{"class":84},[74,19632,2270],{"class":190},[74,19634,2682],{"class":84},[74,19636,19637],{"class":76,"line":12227},[74,19638,2363],{"emptyLinePlaceholder":2362},[74,19640,19641,19643,19645],{"class":76,"line":12251},[74,19642,4053],{"class":80},[74,19644,4056],{"class":134},[74,19646,1252],{"class":84},[74,19648,19649],{"class":76,"line":12256},[74,19650,1527],{"class":84},[44,19652,19654],{"id":19653},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,19656,19657,19658,19661,19662],{},"在C++中 struct和class唯一的",[235,19659,19660],{},"区别","就在于 ",[235,19663,19664],{},"默认的访问权限不同",[19,19666,19667],{},"区别：",[1093,19669,19670,19673],{},[30,19671,19672],{},"struct 默认权限为公共",[30,19674,19675],{},"class   默认权限为私有",[64,19677,19679],{"className":14220,"code":19678,"language":14222,"meta":69,"style":69},"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",[71,19680,19681,19688,19692,19702,19706,19710,19717,19721,19731,19735,19739,19747,19751,19756,19770,19774,19779,19793,19797,19807,19811,19819],{"__ignoreMap":69},[74,19682,19683,19685],{"class":76,"line":77},[74,19684,18973],{"class":80},[74,19686,19687],{"class":1925}," C1\n",[74,19689,19690],{"class":76,"line":94},[74,19691,1508],{"class":84},[74,19693,19694,19696,19699],{"class":76,"line":1141},[74,19695,1947],{"class":80},[74,19697,19698],{"class":84},"  m_A;",[74,19700,19701],{"class":144}," \u002F\u002F默认是私有权限\n",[74,19703,19704],{"class":76,"line":1156},[74,19705,3958],{"class":84},[74,19707,19708],{"class":76,"line":1162},[74,19709,2363],{"emptyLinePlaceholder":2362},[74,19711,19712,19714],{"class":76,"line":1176},[74,19713,12038],{"class":80},[74,19715,19716],{"class":1925}," C2\n",[74,19718,19719],{"class":76,"line":1182},[74,19720,1508],{"class":84},[74,19722,19723,19725,19728],{"class":76,"line":1273},[74,19724,1947],{"class":80},[74,19726,19727],{"class":84}," m_A;",[74,19729,19730],{"class":144},"  \u002F\u002F默认是公共权限\n",[74,19732,19733],{"class":76,"line":1279},[74,19734,3958],{"class":84},[74,19736,19737],{"class":76,"line":1291},[74,19738,2363],{"emptyLinePlaceholder":2362},[74,19740,19741,19743,19745],{"class":76,"line":1574},[74,19742,88],{"class":80},[74,19744,1935],{"class":1925},[74,19746,15132],{"class":84},[74,19748,19749],{"class":76,"line":1579},[74,19750,2363],{"emptyLinePlaceholder":2362},[74,19752,19753],{"class":76,"line":1585},[74,19754,19755],{"class":84},"    C1 c1;\n",[74,19757,19758,19761,19763,19765,19767],{"class":76,"line":1590},[74,19759,19760],{"class":84},"    c1.m_A ",[74,19762,131],{"class":80},[74,19764,2000],{"class":134},[74,19766,141],{"class":84},[74,19768,19769],{"class":144}," \u002F\u002F错误，访问权限是私有\n",[74,19771,19772],{"class":76,"line":1604},[74,19773,2363],{"emptyLinePlaceholder":2362},[74,19775,19776],{"class":76,"line":1609},[74,19777,19778],{"class":84},"    C2 c2;\n",[74,19780,19781,19784,19786,19788,19790],{"class":76,"line":1615},[74,19782,19783],{"class":84},"    c2.m_A ",[74,19785,131],{"class":80},[74,19787,2000],{"class":134},[74,19789,141],{"class":84},[74,19791,19792],{"class":144}," \u002F\u002F正确，访问权限是公共\n",[74,19794,19795],{"class":76,"line":1636},[74,19796,2363],{"emptyLinePlaceholder":2362},[74,19798,19799,19801,19803,19805],{"class":76,"line":1641},[74,19800,2265],{"class":1925},[74,19802,85],{"class":84},[74,19804,2270],{"class":190},[74,19806,2682],{"class":84},[74,19808,19809],{"class":76,"line":1655},[74,19810,2363],{"emptyLinePlaceholder":2362},[74,19812,19813,19815,19817],{"class":76,"line":1660},[74,19814,4053],{"class":80},[74,19816,4056],{"class":134},[74,19818,1252],{"class":84},[74,19820,19821],{"class":76,"line":1689},[74,19822,1527],{"class":84},[44,19824,19826],{"id":19825},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,19828,19829],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,19831,19832],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,19834,19835],{},[235,19836,19414],{},[64,19838,19840],{"className":14220,"code":19839,"language":14222,"meta":69,"style":69},"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",[71,19841,19842,19852,19856,19860,19865,19879,19888,19892,19902,19906,19913,19917,19921,19925,19930,19939,19946,19950,19955,19971,19994,20007,20014,20018,20027,20031,20035,20040,20056,20066,20070,20074,20078,20086,20090,20100,20104,20112,20116,20120,20128,20132,20136,20141,20154,20177,20181,20186,20199,20221,20225,20230,20244,20252,20256,20266,20270,20278],{"__ignoreMap":69},[74,19843,19844,19846,19849],{"class":76,"line":77},[74,19845,18973],{"class":80},[74,19847,19848],{"class":1925}," Person",[74,19850,19851],{"class":84}," {\n",[74,19853,19854],{"class":76,"line":94},[74,19855,18995],{"class":80},[74,19857,19858],{"class":76,"line":1141},[74,19859,2363],{"emptyLinePlaceholder":2362},[74,19861,19862],{"class":76,"line":1156},[74,19863,19864],{"class":144},"    \u002F\u002F姓名设置可读可写\n",[74,19866,19867,19869,19871,19873,19875,19877],{"class":76,"line":1162},[74,19868,19188],{"class":80},[74,19870,19191],{"class":1925},[74,19872,85],{"class":84},[74,19874,19196],{"class":1925},[74,19876,19199],{"class":9495},[74,19878,16721],{"class":84},[74,19880,19881,19883,19885],{"class":76,"line":1176},[74,19882,19533],{"class":84},[74,19884,131],{"class":80},[74,19886,19887],{"class":84}," name;\n",[74,19889,19890],{"class":76,"line":1182},[74,19891,2149],{"class":84},[74,19893,19894,19897,19900],{"class":76,"line":1273},[74,19895,19896],{"class":1925},"    string",[74,19898,19899],{"class":1925}," getName",[74,19901,1938],{"class":84},[74,19903,19904],{"class":76,"line":1279},[74,19905,1992],{"class":84},[74,19907,19908,19910],{"class":76,"line":1291},[74,19909,19031],{"class":80},[74,19911,19912],{"class":84}," m_Name;\n",[74,19914,19915],{"class":76,"line":1574},[74,19916,2149],{"class":84},[74,19918,19919],{"class":76,"line":1579},[74,19920,2363],{"emptyLinePlaceholder":2362},[74,19922,19923],{"class":76,"line":1585},[74,19924,2363],{"emptyLinePlaceholder":2362},[74,19926,19927],{"class":76,"line":1590},[74,19928,19929],{"class":144},"    \u002F\u002F获取年龄 \n",[74,19931,19932,19934,19937],{"class":76,"line":1604},[74,19933,1947],{"class":80},[74,19935,19936],{"class":1925}," getAge",[74,19938,15132],{"class":84},[74,19940,19941,19943],{"class":76,"line":1609},[74,19942,19031],{"class":80},[74,19944,19945],{"class":84}," m_Age;\n",[74,19947,19948],{"class":76,"line":1615},[74,19949,2149],{"class":84},[74,19951,19952],{"class":76,"line":1636},[74,19953,19954],{"class":144},"    \u002F\u002F设置年龄\n",[74,19956,19957,19959,19962,19964,19966,19969],{"class":76,"line":1641},[74,19958,19188],{"class":80},[74,19960,19961],{"class":1925}," setAge",[74,19963,85],{"class":84},[74,19965,88],{"class":80},[74,19967,19968],{"class":9495}," age",[74,19970,16721],{"class":84},[74,19972,19973,19975,19978,19980,19982,19984,19987,19989,19992],{"class":76,"line":1655},[74,19974,2460],{"class":80},[74,19976,19977],{"class":84}," (age ",[74,19979,996],{"class":80},[74,19981,4056],{"class":134},[74,19983,3218],{"class":80},[74,19985,19986],{"class":84}," age ",[74,19988,1046],{"class":80},[74,19990,19991],{"class":134}," 150",[74,19993,16721],{"class":84},[74,19995,19996,19998,20000,20003,20005],{"class":76,"line":1660},[74,19997,13998],{"class":84},[74,19999,1130],{"class":80},[74,20001,20002],{"class":190}," \"你个老妖精!\"",[74,20004,1406],{"class":80},[74,20006,13119],{"class":84},[74,20008,20009,20012],{"class":76,"line":1689},[74,20010,20011],{"class":80},"            return",[74,20013,1252],{"class":84},[74,20015,20016],{"class":76,"line":1694},[74,20017,2492],{"class":84},[74,20019,20020,20023,20025],{"class":76,"line":1711},[74,20021,20022],{"class":84},"        m_Age ",[74,20024,131],{"class":80},[74,20026,12076],{"class":84},[74,20028,20029],{"class":76,"line":1716},[74,20030,2149],{"class":84},[74,20032,20033],{"class":76,"line":1721},[74,20034,2363],{"emptyLinePlaceholder":2362},[74,20036,20037],{"class":76,"line":1726},[74,20038,20039],{"class":144},"    \u002F\u002F情人设置为只写\n",[74,20041,20042,20044,20047,20049,20051,20054],{"class":76,"line":1740},[74,20043,19188],{"class":80},[74,20045,20046],{"class":1925}," setLover",[74,20048,85],{"class":84},[74,20050,19196],{"class":1925},[74,20052,20053],{"class":9495}," lover",[74,20055,16721],{"class":84},[74,20057,20058,20061,20063],{"class":76,"line":1745},[74,20059,20060],{"class":84},"        m_Lover ",[74,20062,131],{"class":80},[74,20064,20065],{"class":84}," lover;\n",[74,20067,20068],{"class":76,"line":2540},[74,20069,2149],{"class":84},[74,20071,20072],{"class":76,"line":2554},[74,20073,2363],{"emptyLinePlaceholder":2362},[74,20075,20076],{"class":76,"line":2562},[74,20077,19501],{"class":80},[74,20079,20080,20083],{"class":76,"line":2567},[74,20081,20082],{"class":84},"    string m_Name;",[74,20084,20085],{"class":144}," \u002F\u002F可读可写  姓名\n",[74,20087,20088],{"class":76,"line":2573},[74,20089,17489],{"class":84},[74,20091,20092,20094,20097],{"class":76,"line":2579},[74,20093,1947],{"class":80},[74,20095,20096],{"class":84}," m_Age;",[74,20098,20099],{"class":144}," \u002F\u002F只读  年龄\n",[74,20101,20102],{"class":76,"line":2584},[74,20103,2363],{"emptyLinePlaceholder":2362},[74,20105,20106,20109],{"class":76,"line":12227},[74,20107,20108],{"class":84},"    string m_Lover;",[74,20110,20111],{"class":144}," \u002F\u002F只写  情人\n",[74,20113,20114],{"class":76,"line":12251},[74,20115,3958],{"class":84},[74,20117,20118],{"class":76,"line":12256},[74,20119,2363],{"emptyLinePlaceholder":2362},[74,20121,20122,20124,20126],{"class":76,"line":12262},[74,20123,88],{"class":80},[74,20125,1935],{"class":1925},[74,20127,15132],{"class":84},[74,20129,20130],{"class":76,"line":12289},[74,20131,2363],{"emptyLinePlaceholder":2362},[74,20133,20134],{"class":76,"line":12294},[74,20135,19592],{"class":84},[74,20137,20138],{"class":76,"line":12300},[74,20139,20140],{"class":144},"    \u002F\u002F姓名设置\n",[74,20142,20143,20146,20148,20150,20152],{"class":76,"line":12312},[74,20144,20145],{"class":84},"    p.",[74,20147,19345],{"class":1925},[74,20149,85],{"class":84},[74,20151,12195],{"class":190},[74,20153,2682],{"class":84},[74,20155,20156,20158,20160,20163,20165,20168,20171,20173,20175],{"class":76,"line":12324},[74,20157,10808],{"class":84},[74,20159,1130],{"class":80},[74,20161,20162],{"class":190}," \"姓名： \"",[74,20164,1406],{"class":80},[74,20166,20167],{"class":84}," p.",[74,20169,20170],{"class":1925},"getName",[74,20172,17329],{"class":84},[74,20174,1130],{"class":80},[74,20176,13119],{"class":84},[74,20178,20179],{"class":76,"line":12336},[74,20180,2363],{"emptyLinePlaceholder":2362},[74,20182,20183],{"class":76,"line":13995},[74,20184,20185],{"class":144},"    \u002F\u002F年龄设置\n",[74,20187,20188,20190,20193,20195,20197],{"class":76,"line":14020},[74,20189,20145],{"class":84},[74,20191,20192],{"class":1925},"setAge",[74,20194,85],{"class":84},[74,20196,742],{"class":134},[74,20198,2682],{"class":84},[74,20200,20201,20203,20205,20208,20210,20212,20215,20217,20219],{"class":76,"line":14043},[74,20202,10808],{"class":84},[74,20204,1130],{"class":80},[74,20206,20207],{"class":190}," \"年龄： \"",[74,20209,1406],{"class":80},[74,20211,20167],{"class":84},[74,20213,20214],{"class":1925},"getAge",[74,20216,17329],{"class":84},[74,20218,1130],{"class":80},[74,20220,13119],{"class":84},[74,20222,20223],{"class":76,"line":14067},[74,20224,2363],{"emptyLinePlaceholder":2362},[74,20226,20227],{"class":76,"line":14072},[74,20228,20229],{"class":144},"    \u002F\u002F情人设置\n",[74,20231,20232,20234,20237,20239,20242],{"class":76,"line":14077},[74,20233,20145],{"class":84},[74,20235,20236],{"class":1925},"setLover",[74,20238,85],{"class":84},[74,20240,20241],{"class":190},"\"苍井\"",[74,20243,2682],{"class":84},[74,20245,20246,20249],{"class":76,"line":14082},[74,20247,20248],{"class":144},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[74,20250,20251],{"class":144},"  \u002F\u002F只写属性，不可以读取\n",[74,20253,20254],{"class":76,"line":14091},[74,20255,2363],{"emptyLinePlaceholder":2362},[74,20257,20258,20260,20262,20264],{"class":76,"line":14096},[74,20259,2265],{"class":1925},[74,20261,85],{"class":84},[74,20263,2270],{"class":190},[74,20265,2682],{"class":84},[74,20267,20268],{"class":76,"line":14102},[74,20269,2363],{"emptyLinePlaceholder":2362},[74,20271,20272,20274,20276],{"class":76,"line":14123},[74,20273,4053],{"class":80},[74,20275,4056],{"class":134},[74,20277,1252],{"class":84},[74,20279,20280],{"class":76,"line":14129},[74,20281,1527],{"class":84},[44,20283,20285],{"id":20284},"_814封装案例","8.1.4封装案例",[27,20287,20288],{},[30,20289,20290,20293],{},[235,20291,20292],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1093,20295,20296,20299],{},[30,20297,20298],{},"求出立方体的面积和体积",[30,20300,20301],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[64,20303,20305],{"className":66,"code":20304,"language":68,"meta":69,"style":69},"#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",[71,20306,20307,20313,20323,20330,20334,20338,20343,20373,20377,20387,20397,20407,20411,20420,20424,20460,20464,20473,20477,20493,20497,20502,20511,20515,20522,20526,20535,20539,20546,20550,20559,20563,20570,20574,20579,20596,20600,20646,20650,20659,20663,20667,20671,20680,20684,20688,20693,20697,20703,20709,20715,20719,20723,20728,20750,20754,20808,20812,20820,20824,20829,20834,20847,20854,20870,20881,20887,20910,20916,20939,20953,20973,20979,20990,21013,21035,21040,21046,21060,21073,21078,21092,21097,21103,21108,21122,21127,21132,21146,21158,21163,21176,21181,21186,21191,21204,21209],{"__ignoreMap":69},[74,20308,20309,20311],{"class":76,"line":77},[74,20310,1911],{"class":80},[74,20312,1914],{"class":190},[74,20314,20315,20317,20319,20321],{"class":76,"line":94},[74,20316,1919],{"class":80},[74,20318,1922],{"class":80},[74,20320,1926],{"class":1925},[74,20322,1252],{"class":84},[74,20324,20325,20327],{"class":76,"line":1141},[74,20326,18973],{"class":80},[74,20328,20329],{"class":1925}," Cube\n",[74,20331,20332],{"class":76,"line":1156},[74,20333,1508],{"class":84},[74,20335,20336],{"class":76,"line":1162},[74,20337,18995],{"class":80},[74,20339,20340],{"class":76,"line":1176},[74,20341,20342],{"class":144},"    \u002F\u002F输入长宽高\n",[74,20344,20345,20347,20350,20352,20354,20357,20359,20361,20364,20366,20368,20371],{"class":76,"line":1182},[74,20346,19188],{"class":80},[74,20348,20349],{"class":1925}," setLwh",[74,20351,85],{"class":84},[74,20353,88],{"class":80},[74,20355,20356],{"class":9495}," l",[74,20358,464],{"class":84},[74,20360,88],{"class":80},[74,20362,20363],{"class":9495}," w",[74,20365,464],{"class":84},[74,20367,88],{"class":80},[74,20369,20370],{"class":9495}," h",[74,20372,91],{"class":84},[74,20374,20375],{"class":76,"line":1273},[74,20376,1992],{"class":84},[74,20378,20379,20382,20384],{"class":76,"line":1279},[74,20380,20381],{"class":84},"        m_L",[74,20383,131],{"class":80},[74,20385,20386],{"class":84},"l;\n",[74,20388,20389,20392,20394],{"class":76,"line":1291},[74,20390,20391],{"class":84},"        m_W",[74,20393,131],{"class":80},[74,20395,20396],{"class":84},"w;\n",[74,20398,20399,20402,20404],{"class":76,"line":1574},[74,20400,20401],{"class":84},"        m_H",[74,20403,131],{"class":80},[74,20405,20406],{"class":84},"h;\n",[74,20408,20409],{"class":76,"line":1579},[74,20410,2149],{"class":84},[74,20412,20413,20415,20418],{"class":76,"line":1585},[74,20414,1947],{"class":80},[74,20416,20417],{"class":1925}," mianji",[74,20419,1938],{"class":84},[74,20421,20422],{"class":76,"line":1590},[74,20423,1992],{"class":84},[74,20425,20426,20428,20430,20432,20435,20437,20440,20442,20445,20447,20450,20452,20455,20457],{"class":76,"line":1604},[74,20427,19031],{"class":80},[74,20429,19034],{"class":134},[74,20431,541],{"class":80},[74,20433,20434],{"class":84},"(m_L",[74,20436,541],{"class":80},[74,20438,20439],{"class":84},"m_W ",[74,20441,567],{"class":80},[74,20443,20444],{"class":84}," m_L",[74,20446,541],{"class":80},[74,20448,20449],{"class":84},"m_H ",[74,20451,567],{"class":80},[74,20453,20454],{"class":84}," m_W",[74,20456,541],{"class":80},[74,20458,20459],{"class":84},"m_H);\n",[74,20461,20462],{"class":76,"line":1609},[74,20463,2149],{"class":84},[74,20465,20466,20468,20471],{"class":76,"line":1615},[74,20467,1947],{"class":80},[74,20469,20470],{"class":1925}," tiji",[74,20472,1938],{"class":84},[74,20474,20475],{"class":76,"line":1636},[74,20476,1992],{"class":84},[74,20478,20479,20481,20483,20485,20488,20490],{"class":76,"line":1641},[74,20480,19031],{"class":80},[74,20482,20444],{"class":84},[74,20484,541],{"class":80},[74,20486,20487],{"class":84},"m_W",[74,20489,541],{"class":80},[74,20491,20492],{"class":84},"m_H;\n",[74,20494,20495],{"class":76,"line":1655},[74,20496,2149],{"class":84},[74,20498,20499],{"class":76,"line":1660},[74,20500,20501],{"class":144},"    \u002F\u002F获取长宽高\n",[74,20503,20504,20506,20509],{"class":76,"line":1689},[74,20505,1947],{"class":80},[74,20507,20508],{"class":1925}," getLength",[74,20510,1938],{"class":84},[74,20512,20513],{"class":76,"line":1694},[74,20514,1992],{"class":84},[74,20516,20517,20519],{"class":76,"line":1711},[74,20518,19031],{"class":80},[74,20520,20521],{"class":84}," m_L;\n",[74,20523,20524],{"class":76,"line":1716},[74,20525,2149],{"class":84},[74,20527,20528,20530,20533],{"class":76,"line":1721},[74,20529,1947],{"class":80},[74,20531,20532],{"class":1925}," getWidth",[74,20534,1938],{"class":84},[74,20536,20537],{"class":76,"line":1726},[74,20538,1992],{"class":84},[74,20540,20541,20543],{"class":76,"line":1740},[74,20542,19031],{"class":80},[74,20544,20545],{"class":84}," m_W;\n",[74,20547,20548],{"class":76,"line":1745},[74,20549,2149],{"class":84},[74,20551,20552,20554,20557],{"class":76,"line":2540},[74,20553,1947],{"class":80},[74,20555,20556],{"class":1925}," getHeight",[74,20558,1938],{"class":84},[74,20560,20561],{"class":76,"line":2554},[74,20562,1992],{"class":84},[74,20564,20565,20567],{"class":76,"line":2562},[74,20566,19031],{"class":80},[74,20568,20569],{"class":84}," m_H;\n",[74,20571,20572],{"class":76,"line":2567},[74,20573,2149],{"class":84},[74,20575,20576],{"class":76,"line":2573},[74,20577,20578],{"class":144},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[74,20580,20581,20584,20587,20589,20592,20594],{"class":76,"line":2579},[74,20582,20583],{"class":80},"    bool",[74,20585,20586],{"class":1925}," isEqual",[74,20588,85],{"class":84},[74,20590,20591],{"class":1925},"Cube",[74,20593,2812],{"class":9495},[74,20595,91],{"class":84},[74,20597,20598],{"class":76,"line":2584},[74,20599,1992],{"class":84},[74,20601,20602,20604,20607,20610,20612,20614,20617,20619,20622,20625,20627,20629,20632,20634,20636,20639,20641,20643],{"class":76,"line":12227},[74,20603,2460],{"class":80},[74,20605,20606],{"class":84}," (c.",[74,20608,20609],{"class":1925},"getLength",[74,20611,17329],{"class":84},[74,20613,2912],{"class":80},[74,20615,20616],{"class":84}," m_L ",[74,20618,1677],{"class":80},[74,20620,20621],{"class":84}," c.",[74,20623,20624],{"class":1925},"getWidth",[74,20626,17329],{"class":84},[74,20628,2912],{"class":80},[74,20630,20631],{"class":84}," m_W ",[74,20633,1677],{"class":80},[74,20635,20621],{"class":84},[74,20637,20638],{"class":1925},"getHeight",[74,20640,17329],{"class":84},[74,20642,2912],{"class":80},[74,20644,20645],{"class":84}," m_H)\n",[74,20647,20648],{"class":76,"line":12251},[74,20649,2473],{"class":84},[74,20651,20652,20654,20657],{"class":76,"line":12256},[74,20653,20011],{"class":80},[74,20655,20656],{"class":134}," true",[74,20658,1252],{"class":84},[74,20660,20661],{"class":76,"line":12262},[74,20662,2492],{"class":84},[74,20664,20665],{"class":76,"line":12289},[74,20666,2533],{"class":80},[74,20668,20669],{"class":76,"line":12294},[74,20670,2473],{"class":84},[74,20672,20673,20675,20678],{"class":76,"line":12300},[74,20674,20011],{"class":80},[74,20676,20677],{"class":134}," false",[74,20679,1252],{"class":84},[74,20681,20682],{"class":76,"line":12312},[74,20683,2492],{"class":84},[74,20685,20686],{"class":76,"line":12324},[74,20687,2149],{"class":84},[74,20689,20690],{"class":76,"line":12336},[74,20691,20692],{"class":144},"    \u002F\u002F私有属性\n",[74,20694,20695],{"class":76,"line":13995},[74,20696,19501],{"class":80},[74,20698,20699,20701],{"class":76,"line":14020},[74,20700,1947],{"class":80},[74,20702,20521],{"class":84},[74,20704,20705,20707],{"class":76,"line":14043},[74,20706,1947],{"class":80},[74,20708,20545],{"class":84},[74,20710,20711,20713],{"class":76,"line":14067},[74,20712,1947],{"class":80},[74,20714,20569],{"class":84},[74,20716,20717],{"class":76,"line":14072},[74,20718,2363],{"emptyLinePlaceholder":2362},[74,20720,20721],{"class":76,"line":14077},[74,20722,3958],{"class":84},[74,20724,20725],{"class":76,"line":14082},[74,20726,20727],{"class":144},"\u002F\u002F全局函数判断两个立方体是否相等\n",[74,20729,20730,20732,20734,20736,20738,20741,20743,20745,20748],{"class":76,"line":14091},[74,20731,1316],{"class":80},[74,20733,20586],{"class":1925},[74,20735,85],{"class":84},[74,20737,20591],{"class":1925},[74,20739,20740],{"class":9495}," c1",[74,20742,464],{"class":84},[74,20744,20591],{"class":1925},[74,20746,20747],{"class":9495}," c2",[74,20749,91],{"class":84},[74,20751,20752],{"class":76,"line":14096},[74,20753,1508],{"class":84},[74,20755,20756,20758,20761,20763,20765,20767,20770,20772,20775,20777,20779,20781,20783,20785,20787,20789,20791,20793,20795,20797,20799,20801,20803,20805],{"class":76,"line":14102},[74,20757,4053],{"class":80},[74,20759,20760],{"class":84}," (c1.",[74,20762,20609],{"class":1925},[74,20764,17329],{"class":84},[74,20766,2912],{"class":80},[74,20768,20769],{"class":84}," c2.",[74,20771,20609],{"class":1925},[74,20773,20774],{"class":84},"()) ",[74,20776,1677],{"class":80},[74,20778,20760],{"class":84},[74,20780,20624],{"class":1925},[74,20782,17329],{"class":84},[74,20784,2912],{"class":80},[74,20786,20769],{"class":84},[74,20788,20624],{"class":1925},[74,20790,20774],{"class":84},[74,20792,1677],{"class":80},[74,20794,20760],{"class":84},[74,20796,20638],{"class":1925},[74,20798,17329],{"class":84},[74,20800,2912],{"class":80},[74,20802,20769],{"class":84},[74,20804,20638],{"class":1925},[74,20806,20807],{"class":84},"());\n",[74,20809,20810],{"class":76,"line":14123},[74,20811,1527],{"class":84},[74,20813,20814,20816,20818],{"class":76,"line":14129},[74,20815,88],{"class":80},[74,20817,1935],{"class":1925},[74,20819,1938],{"class":84},[74,20821,20822],{"class":76,"line":14143},[74,20823,1508],{"class":84},[74,20825,20826],{"class":76,"line":14149},[74,20827,20828],{"class":84},"    Cube c1;\n",[74,20830,20831],{"class":76,"line":14176},[74,20832,20833],{"class":144},"    \u002F\u002F输入立方体的长宽高\n",[74,20835,20836,20838,20840,20843,20845],{"class":76,"line":14185},[74,20837,1513],{"class":84},[74,20839,1130],{"class":80},[74,20841,20842],{"class":190},"\"请输入第一个立方体的长、宽、高：\"",[74,20844,1130],{"class":80},[74,20846,1153],{"class":84},[74,20848,20849,20851],{"class":76,"line":14191},[74,20850,1947],{"class":80},[74,20852,20853],{"class":84}," l,w,h,l1,w1,h1;\n",[74,20855,20856,20858,20860,20862,20864,20866,20868],{"class":76,"line":14199},[74,20857,1974],{"class":84},[74,20859,1391],{"class":80},[74,20861,604],{"class":84},[74,20863,1391],{"class":80},[74,20865,881],{"class":84},[74,20867,1391],{"class":80},[74,20869,20406],{"class":84},[74,20871,20872,20875,20878],{"class":76,"line":14204},[74,20873,20874],{"class":84},"    c1.",[74,20876,20877],{"class":1925},"setLwh",[74,20879,20880],{"class":84},"(l,w,h);\n",[74,20882,20884],{"class":76,"line":20883},66,[74,20885,20886],{"class":144},"    \u002F\u002F面积\n",[74,20888,20890,20892,20894,20897,20899,20901,20904,20906,20908],{"class":76,"line":20889},67,[74,20891,1513],{"class":84},[74,20893,1130],{"class":80},[74,20895,20896],{"class":190},"\"立方体的表面积为：\"",[74,20898,1130],{"class":80},[74,20900,19109],{"class":84},[74,20902,20903],{"class":1925},"mianji",[74,20905,2390],{"class":84},[74,20907,1130],{"class":80},[74,20909,1153],{"class":84},[74,20911,20913],{"class":76,"line":20912},68,[74,20914,20915],{"class":144},"    \u002F\u002F体积\n",[74,20917,20919,20921,20923,20926,20928,20930,20933,20935,20937],{"class":76,"line":20918},69,[74,20920,1513],{"class":84},[74,20922,1130],{"class":80},[74,20924,20925],{"class":190},"\"立方体的体积为：\"",[74,20927,1130],{"class":80},[74,20929,19109],{"class":84},[74,20931,20932],{"class":1925},"tiji",[74,20934,2390],{"class":84},[74,20936,1130],{"class":80},[74,20938,1153],{"class":84},[74,20940,20942,20944,20946,20949,20951],{"class":76,"line":20941},70,[74,20943,1513],{"class":84},[74,20945,1130],{"class":80},[74,20947,20948],{"class":190},"\"请输入第二个立方体的长、宽、高：\"",[74,20950,1130],{"class":80},[74,20952,1153],{"class":84},[74,20954,20956,20958,20960,20963,20965,20968,20970],{"class":76,"line":20955},71,[74,20957,1974],{"class":84},[74,20959,1391],{"class":80},[74,20961,20962],{"class":84},"l1",[74,20964,1391],{"class":80},[74,20966,20967],{"class":84},"w1",[74,20969,1391],{"class":80},[74,20971,20972],{"class":84},"h1;\n",[74,20974,20976],{"class":76,"line":20975},72,[74,20977,20978],{"class":84},"    Cube c2;\n",[74,20980,20982,20985,20987],{"class":76,"line":20981},73,[74,20983,20984],{"class":84},"    c2.",[74,20986,20877],{"class":1925},[74,20988,20989],{"class":84},"(l1,w1,h1);\n",[74,20991,20993,20995,20997,21000,21002,21005,21007,21009,21011],{"class":76,"line":20992},74,[74,20994,1513],{"class":84},[74,20996,1130],{"class":80},[74,20998,20999],{"class":190},"\"第二个立方体的表面积为：\"",[74,21001,1130],{"class":80},[74,21003,21004],{"class":84},"c2.",[74,21006,20903],{"class":1925},[74,21008,2390],{"class":84},[74,21010,1130],{"class":80},[74,21012,1153],{"class":84},[74,21014,21016,21018,21020,21023,21025,21027,21029,21031,21033],{"class":76,"line":21015},75,[74,21017,1513],{"class":84},[74,21019,1130],{"class":80},[74,21021,21022],{"class":190},"\"第二个立方体的体积为：\"",[74,21024,1130],{"class":80},[74,21026,21004],{"class":84},[74,21028,20932],{"class":1925},[74,21030,2390],{"class":84},[74,21032,1130],{"class":80},[74,21034,1153],{"class":84},[74,21036,21038],{"class":76,"line":21037},76,[74,21039,2363],{"emptyLinePlaceholder":2362},[74,21041,21043],{"class":76,"line":21042},77,[74,21044,21045],{"class":144},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[74,21047,21049,21051,21053,21056,21058],{"class":76,"line":21048},78,[74,21050,1513],{"class":84},[74,21052,1130],{"class":80},[74,21054,21055],{"class":190},"\"内部函数判断结果：\"",[74,21057,1130],{"class":80},[74,21059,1153],{"class":84},[74,21061,21063,21065,21067,21070],{"class":76,"line":21062},79,[74,21064,3064],{"class":80},[74,21066,20760],{"class":84},[74,21068,21069],{"class":1925},"isEqual",[74,21071,21072],{"class":84},"(c2))\n",[74,21074,21076],{"class":76,"line":21075},80,[74,21077,1992],{"class":84},[74,21079,21081,21083,21085,21088,21090],{"class":76,"line":21080},81,[74,21082,3414],{"class":84},[74,21084,1130],{"class":80},[74,21086,21087],{"class":190},"\"两个立方体相等\"",[74,21089,1130],{"class":80},[74,21091,1153],{"class":84},[74,21093,21095],{"class":76,"line":21094},82,[74,21096,2149],{"class":84},[74,21098,21100],{"class":76,"line":21099},83,[74,21101,21102],{"class":80},"    else\n",[74,21104,21106],{"class":76,"line":21105},84,[74,21107,1992],{"class":84},[74,21109,21111,21113,21115,21118,21120],{"class":76,"line":21110},85,[74,21112,3414],{"class":84},[74,21114,1130],{"class":80},[74,21116,21117],{"class":190},"\"两个立方体不相等\"",[74,21119,1130],{"class":80},[74,21121,1153],{"class":84},[74,21123,21125],{"class":76,"line":21124},86,[74,21126,2149],{"class":84},[74,21128,21130],{"class":76,"line":21129},87,[74,21131,2363],{"emptyLinePlaceholder":2362},[74,21133,21135,21137,21139,21142,21144],{"class":76,"line":21134},88,[74,21136,1513],{"class":84},[74,21138,1130],{"class":80},[74,21140,21141],{"class":190},"\"全局函数判断结果：\"",[74,21143,1130],{"class":80},[74,21145,1153],{"class":84},[74,21147,21149,21151,21153,21155],{"class":76,"line":21148},89,[74,21150,3064],{"class":80},[74,21152,1620],{"class":84},[74,21154,21069],{"class":1925},[74,21156,21157],{"class":84},"(c1, c2))\n",[74,21159,21161],{"class":76,"line":21160},90,[74,21162,1992],{"class":84},[74,21164,21166,21168,21170,21172,21174],{"class":76,"line":21165},91,[74,21167,3414],{"class":84},[74,21169,1130],{"class":80},[74,21171,21087],{"class":190},[74,21173,1130],{"class":80},[74,21175,1153],{"class":84},[74,21177,21179],{"class":76,"line":21178},92,[74,21180,2149],{"class":84},[74,21182,21184],{"class":76,"line":21183},93,[74,21185,21102],{"class":80},[74,21187,21189],{"class":76,"line":21188},94,[74,21190,1992],{"class":84},[74,21192,21194,21196,21198,21200,21202],{"class":76,"line":21193},95,[74,21195,3414],{"class":84},[74,21197,1130],{"class":80},[74,21199,21117],{"class":190},[74,21201,1130],{"class":80},[74,21203,1153],{"class":84},[74,21205,21207],{"class":76,"line":21206},96,[74,21208,2149],{"class":84},[74,21210,21212],{"class":76,"line":21211},97,[74,21213,1527],{"class":84},[27,21215,21216],{"start":94},[30,21217,21218],{},[235,21219,21220],{},"练习案例2：点和圆的关系",[1093,21222,21223],{},[30,21224,21225],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[64,21227,21229],{"className":66,"code":21228,"language":68,"meta":69,"style":69},"#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",[71,21230,21231,21237,21247,21254,21261,21265,21269,21274,21308,21313,21329,21343,21347,21351,21358,21365,21369,21375,21379,21383,21387,21409,21432,21437,21451,21466,21470,21474,21480,21485,21490,21494,21520,21524,21554,21582,21610,21627,21631,21644,21648,21652,21656,21669,21673,21677,21685,21689,21693,21697,21702,21706,21717,21724,21733,21743,21754,21761,21774,21785,21795,21806,21813,21827,21832,21842,21850],{"__ignoreMap":69},[74,21232,21233,21235],{"class":76,"line":77},[74,21234,1911],{"class":80},[74,21236,1914],{"class":190},[74,21238,21239,21241,21243,21245],{"class":76,"line":94},[74,21240,1919],{"class":80},[74,21242,1922],{"class":80},[74,21244,1926],{"class":1925},[74,21246,1252],{"class":84},[74,21248,21249,21251],{"class":76,"line":1141},[74,21250,1911],{"class":80},[74,21252,21253],{"class":190},"\u003Ccmath>\n",[74,21255,21256,21258],{"class":76,"line":1156},[74,21257,18973],{"class":80},[74,21259,21260],{"class":1925}," Point\n",[74,21262,21263],{"class":76,"line":1162},[74,21264,1508],{"class":84},[74,21266,21267],{"class":76,"line":1176},[74,21268,18995],{"class":80},[74,21270,21271],{"class":76,"line":1182},[74,21272,21273],{"class":144},"    \u002F\u002F赋值\n",[74,21275,21276,21278,21281,21283,21285,21288,21290,21292,21295,21298,21300,21303,21305],{"class":76,"line":1273},[74,21277,19188],{"class":80},[74,21279,21280],{"class":1925}," setPoint",[74,21282,85],{"class":84},[74,21284,18316],{"class":80},[74,21286,21287],{"class":9495}," x",[74,21289,16714],{"class":84},[74,21291,18316],{"class":80},[74,21293,21294],{"class":9495}," y",[74,21296,21297],{"class":84},") { m_x ",[74,21299,131],{"class":80},[74,21301,21302],{"class":84}," x; m_y ",[74,21304,131],{"class":80},[74,21306,21307],{"class":84}," y; }\n",[74,21309,21310],{"class":76,"line":1279},[74,21311,21312],{"class":144},"    \u002F\u002F获取坐标\n",[74,21314,21315,21317,21320,21323,21326],{"class":76,"line":1291},[74,21316,19017],{"class":80},[74,21318,21319],{"class":1925}," getX",[74,21321,21322],{"class":84},"() { ",[74,21324,21325],{"class":80},"return",[74,21327,21328],{"class":84}," m_x; }\n",[74,21330,21331,21333,21336,21338,21340],{"class":76,"line":1574},[74,21332,19017],{"class":80},[74,21334,21335],{"class":1925}," getY",[74,21337,21322],{"class":84},[74,21339,21325],{"class":80},[74,21341,21342],{"class":84}," m_y; }\n",[74,21344,21345],{"class":76,"line":1579},[74,21346,2363],{"emptyLinePlaceholder":2362},[74,21348,21349],{"class":76,"line":1585},[74,21350,19501],{"class":80},[74,21352,21353,21355],{"class":76,"line":1590},[74,21354,19017],{"class":80},[74,21356,21357],{"class":84}," m_x;\n",[74,21359,21360,21362],{"class":76,"line":1604},[74,21361,19017],{"class":80},[74,21363,21364],{"class":84}," m_y;\n",[74,21366,21367],{"class":76,"line":1609},[74,21368,3958],{"class":84},[74,21370,21371,21373],{"class":76,"line":1615},[74,21372,18973],{"class":80},[74,21374,18976],{"class":1925},[74,21376,21377],{"class":76,"line":1636},[74,21378,1508],{"class":84},[74,21380,21381],{"class":76,"line":1641},[74,21382,18995],{"class":80},[74,21384,21385],{"class":76,"line":1655},[74,21386,21273],{"class":144},[74,21388,21389,21391,21394,21396,21398,21401,21404,21406],{"class":76,"line":1660},[74,21390,19188],{"class":80},[74,21392,21393],{"class":1925}," setRadius",[74,21395,85],{"class":84},[74,21397,18316],{"class":80},[74,21399,21400],{"class":9495}," r",[74,21402,21403],{"class":84},") { m_r ",[74,21405,131],{"class":80},[74,21407,21408],{"class":84}," r; }\n",[74,21410,21411,21413,21416,21418,21421,21424,21427,21429],{"class":76,"line":1689},[74,21412,19188],{"class":80},[74,21414,21415],{"class":1925}," setCenter",[74,21417,85],{"class":84},[74,21419,21420],{"class":1925},"Point",[74,21422,21423],{"class":9495}," center",[74,21425,21426],{"class":84},") { m_center ",[74,21428,131],{"class":80},[74,21430,21431],{"class":84}," center; }\n",[74,21433,21434],{"class":76,"line":1694},[74,21435,21436],{"class":144},"    \u002F\u002F获取属性\n",[74,21438,21439,21441,21444,21446,21448],{"class":76,"line":1711},[74,21440,19017],{"class":80},[74,21442,21443],{"class":1925}," getRadius",[74,21445,21322],{"class":84},[74,21447,21325],{"class":80},[74,21449,21450],{"class":84}," m_r; }\n",[74,21452,21453,21456,21459,21461,21463],{"class":76,"line":1716},[74,21454,21455],{"class":1925},"    Point",[74,21457,21458],{"class":1925}," getCenter",[74,21460,21322],{"class":84},[74,21462,21325],{"class":80},[74,21464,21465],{"class":84}," m_center; }\n",[74,21467,21468],{"class":76,"line":1721},[74,21469,2363],{"emptyLinePlaceholder":2362},[74,21471,21472],{"class":76,"line":1726},[74,21473,19501],{"class":80},[74,21475,21476,21478],{"class":76,"line":1740},[74,21477,19017],{"class":80},[74,21479,19007],{"class":84},[74,21481,21482],{"class":76,"line":1745},[74,21483,21484],{"class":144},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[74,21486,21487],{"class":76,"line":2540},[74,21488,21489],{"class":84},"    Point m_center;\n",[74,21491,21492],{"class":76,"line":2554},[74,21493,3958],{"class":84},[74,21495,21496,21498,21501,21503,21506,21508,21510,21512,21514,21516,21518],{"class":76,"line":2562},[74,21497,9643],{"class":80},[74,21499,21500],{"class":1925}," isInCircle",[74,21502,85],{"class":84},[74,21504,21505],{"class":1925},"Circle",[74,21507,14863],{"class":80},[74,21509,374],{"class":9495},[74,21511,464],{"class":84},[74,21513,21420],{"class":1925},[74,21515,14863],{"class":80},[74,21517,19],{"class":9495},[74,21519,91],{"class":84},[74,21521,21522],{"class":76,"line":2567},[74,21523,1508],{"class":84},[74,21525,21526,21528,21531,21533,21535,21538,21541,21544,21546,21548,21550,21552],{"class":76,"line":2573},[74,21527,19017],{"class":80},[74,21529,21530],{"class":84}," dx ",[74,21532,131],{"class":80},[74,21534,20621],{"class":84},[74,21536,21537],{"class":1925},"getCenter",[74,21539,21540],{"class":84},"().",[74,21542,21543],{"class":1925},"getX",[74,21545,17329],{"class":84},[74,21547,618],{"class":80},[74,21549,20167],{"class":84},[74,21551,21543],{"class":1925},[74,21553,9915],{"class":84},[74,21555,21556,21558,21561,21563,21565,21567,21569,21572,21574,21576,21578,21580],{"class":76,"line":2579},[74,21557,19017],{"class":80},[74,21559,21560],{"class":84}," dy ",[74,21562,131],{"class":80},[74,21564,20621],{"class":84},[74,21566,21537],{"class":1925},[74,21568,21540],{"class":84},[74,21570,21571],{"class":1925},"getY",[74,21573,17329],{"class":84},[74,21575,618],{"class":80},[74,21577,20167],{"class":84},[74,21579,21571],{"class":1925},[74,21581,9915],{"class":84},[74,21583,21584,21586,21589,21591,21594,21597,21599,21601,21603,21605,21607],{"class":76,"line":2584},[74,21585,19017],{"class":80},[74,21587,21588],{"class":84}," distance ",[74,21590,131],{"class":80},[74,21592,21593],{"class":1925}," sqrt",[74,21595,21596],{"class":84},"(dx ",[74,21598,541],{"class":80},[74,21600,21530],{"class":84},[74,21602,567],{"class":80},[74,21604,21560],{"class":84},[74,21606,541],{"class":80},[74,21608,21609],{"class":84}," dy);\n",[74,21611,21612,21614,21617,21619,21621,21624],{"class":76,"line":12227},[74,21613,3064],{"class":80},[74,21615,21616],{"class":84}," (distance ",[74,21618,996],{"class":80},[74,21620,20621],{"class":84},[74,21622,21623],{"class":1925},"getRadius",[74,21625,21626],{"class":84},"())\n",[74,21628,21629],{"class":76,"line":12251},[74,21630,1992],{"class":84},[74,21632,21633,21635,21637,21640,21642],{"class":76,"line":12256},[74,21634,13948],{"class":84},[74,21636,1130],{"class":80},[74,21638,21639],{"class":190}," \"点在圆内\"",[74,21641,1406],{"class":80},[74,21643,13119],{"class":84},[74,21645,21646],{"class":76,"line":12262},[74,21647,2149],{"class":84},[74,21649,21650],{"class":76,"line":12289},[74,21651,21102],{"class":80},[74,21653,21654],{"class":76,"line":12294},[74,21655,1992],{"class":84},[74,21657,21658,21660,21662,21665,21667],{"class":76,"line":12300},[74,21659,13948],{"class":84},[74,21661,1130],{"class":80},[74,21663,21664],{"class":190}," \"点在圆外\"",[74,21666,1406],{"class":80},[74,21668,13119],{"class":84},[74,21670,21671],{"class":76,"line":12312},[74,21672,2149],{"class":84},[74,21674,21675],{"class":76,"line":12324},[74,21676,1527],{"class":84},[74,21678,21679,21681,21683],{"class":76,"line":12336},[74,21680,88],{"class":80},[74,21682,1935],{"class":1925},[74,21684,1938],{"class":84},[74,21686,21687],{"class":76,"line":13995},[74,21688,1508],{"class":84},[74,21690,21691],{"class":76,"line":14020},[74,21692,19332],{"class":144},[74,21694,21695],{"class":76,"line":14043},[74,21696,19079],{"class":84},[74,21698,21699],{"class":76,"line":14067},[74,21700,21701],{"class":84},"    Point p1;\n",[74,21703,21704],{"class":76,"line":14072},[74,21705,21273],{"class":144},[74,21707,21708,21710,21712,21715],{"class":76,"line":14077},[74,21709,1513],{"class":84},[74,21711,1130],{"class":80},[74,21713,21714],{"class":190},"\"请输入圆的半径：\"",[74,21716,1252],{"class":84},[74,21718,21719,21721],{"class":76,"line":14082},[74,21720,19017],{"class":80},[74,21722,21723],{"class":84}," r;\n",[74,21725,21726,21728,21730],{"class":76,"line":14091},[74,21727,1974],{"class":84},[74,21729,1391],{"class":80},[74,21731,21732],{"class":84},"r;\n",[74,21734,21735,21737,21740],{"class":76,"line":14096},[74,21736,20874],{"class":84},[74,21738,21739],{"class":1925},"setRadius",[74,21741,21742],{"class":84},"(r);\n",[74,21744,21745,21747,21749,21752],{"class":76,"line":14102},[74,21746,1513],{"class":84},[74,21748,1130],{"class":80},[74,21750,21751],{"class":190},"\"请输入圆心坐标：\"",[74,21753,1252],{"class":84},[74,21755,21756,21758],{"class":76,"line":14123},[74,21757,19017],{"class":80},[74,21759,21760],{"class":84}," x, y;\n",[74,21762,21763,21765,21767,21769,21771],{"class":76,"line":14129},[74,21764,1974],{"class":84},[74,21766,1391],{"class":80},[74,21768,906],{"class":84},[74,21770,1391],{"class":80},[74,21772,21773],{"class":84},"y;\n",[74,21775,21776,21779,21782],{"class":76,"line":14143},[74,21777,21778],{"class":84},"    p1.",[74,21780,21781],{"class":1925},"setPoint",[74,21783,21784],{"class":84},"(x, y);\n",[74,21786,21787,21789,21792],{"class":76,"line":14149},[74,21788,20874],{"class":84},[74,21790,21791],{"class":1925},"setCenter",[74,21793,21794],{"class":84},"(p1);\n",[74,21796,21797,21799,21801,21804],{"class":76,"line":14176},[74,21798,1513],{"class":84},[74,21800,1130],{"class":80},[74,21802,21803],{"class":190},"\"请输入测试点坐标：\"",[74,21805,1252],{"class":84},[74,21807,21808,21810],{"class":76,"line":14185},[74,21809,19017],{"class":80},[74,21811,21812],{"class":84}," x1, y1;\n",[74,21814,21815,21817,21819,21822,21824],{"class":76,"line":14191},[74,21816,1974],{"class":84},[74,21818,1391],{"class":80},[74,21820,21821],{"class":84},"x1",[74,21823,1391],{"class":80},[74,21825,21826],{"class":84},"y1;\n",[74,21828,21829],{"class":76,"line":14199},[74,21830,21831],{"class":84},"    Point p2;\n",[74,21833,21834,21837,21839],{"class":76,"line":14204},[74,21835,21836],{"class":84},"    p2.",[74,21838,21781],{"class":1925},[74,21840,21841],{"class":84},"(x1, y1);\n",[74,21843,21844,21847],{"class":76,"line":20883},[74,21845,21846],{"class":1925},"    isInCircle",[74,21848,21849],{"class":84},"(c1, p2);\n",[74,21851,21852],{"class":76,"line":20889},[74,21853,1527],{"class":84},[19,21855,21856],{},"在类中可以让另一个类作为本来的成员",[19,21858,21859],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,21861,21862],{},"创建point.h",[64,21864,21866],{"className":66,"code":21865,"language":68,"meta":69,"style":69},"#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",[71,21867,21868,21879,21885,21895,21901,21905,21910,21914,21918,21938,21942,21950,21958,21962,21966,21972,21978],{"__ignoreMap":69},[74,21869,21870,21873,21876],{"class":76,"line":77},[74,21871,21872],{"class":80},"#pragma",[74,21874,21875],{"class":1925}," once",[74,21877,21878],{"class":144}," \u002F\u002F防止头文件重复包含\n",[74,21880,21881,21883],{"class":76,"line":94},[74,21882,1911],{"class":80},[74,21884,1914],{"class":190},[74,21886,21887,21889,21891,21893],{"class":76,"line":1141},[74,21888,1919],{"class":80},[74,21890,1922],{"class":80},[74,21892,1926],{"class":1925},[74,21894,1252],{"class":84},[74,21896,21897,21899],{"class":76,"line":1156},[74,21898,18973],{"class":80},[74,21900,21260],{"class":1925},[74,21902,21903],{"class":76,"line":1162},[74,21904,1508],{"class":84},[74,21906,21907],{"class":76,"line":1176},[74,21908,21909],{"class":144},"\u002F\u002F做好声明与变量定义就可以\n",[74,21911,21912],{"class":76,"line":1182},[74,21913,18995],{"class":80},[74,21915,21916],{"class":76,"line":1273},[74,21917,21273],{"class":144},[74,21919,21920,21922,21924,21926,21928,21930,21932,21934,21936],{"class":76,"line":1279},[74,21921,19188],{"class":80},[74,21923,21280],{"class":1925},[74,21925,85],{"class":84},[74,21927,18316],{"class":80},[74,21929,21287],{"class":9495},[74,21931,16714],{"class":84},[74,21933,18316],{"class":80},[74,21935,21294],{"class":9495},[74,21937,2682],{"class":84},[74,21939,21940],{"class":76,"line":1291},[74,21941,21312],{"class":144},[74,21943,21944,21946,21948],{"class":76,"line":1574},[74,21945,19017],{"class":80},[74,21947,21319],{"class":1925},[74,21949,9915],{"class":84},[74,21951,21952,21954,21956],{"class":76,"line":1579},[74,21953,19017],{"class":80},[74,21955,21335],{"class":1925},[74,21957,9915],{"class":84},[74,21959,21960],{"class":76,"line":1585},[74,21961,2363],{"emptyLinePlaceholder":2362},[74,21963,21964],{"class":76,"line":1590},[74,21965,19501],{"class":80},[74,21967,21968,21970],{"class":76,"line":1604},[74,21969,19017],{"class":80},[74,21971,21357],{"class":84},[74,21973,21974,21976],{"class":76,"line":1609},[74,21975,19017],{"class":80},[74,21977,21364],{"class":84},[74,21979,21980],{"class":76,"line":1615},[74,21981,3958],{"class":84},[19,21983,21984],{},"创建point.cpp",[64,21986,21988],{"className":66,"code":21987,"language":68,"meta":69,"style":69},"#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",[71,21989,21990,21997,22002,22036,22040,22056],{"__ignoreMap":69},[74,21991,21992,21994],{"class":76,"line":77},[74,21993,1911],{"class":80},[74,21995,21996],{"class":190},"\u003Cpoint.h>\n",[74,21998,21999],{"class":76,"line":94},[74,22000,22001],{"class":144},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[74,22003,22004,22006,22009,22012,22014,22016,22018,22020,22022,22024,22026,22028,22030,22032,22034],{"class":76,"line":1141},[74,22005,19188],{"class":80},[74,22007,22008],{"class":1925}," Point",[74,22010,22011],{"class":84},"::",[74,22013,21781],{"class":1925},[74,22015,85],{"class":84},[74,22017,18316],{"class":80},[74,22019,21287],{"class":9495},[74,22021,16714],{"class":84},[74,22023,18316],{"class":80},[74,22025,21294],{"class":9495},[74,22027,21297],{"class":84},[74,22029,131],{"class":80},[74,22031,21302],{"class":84},[74,22033,131],{"class":80},[74,22035,21307],{"class":84},[74,22037,22038],{"class":76,"line":1156},[74,22039,21312],{"class":144},[74,22041,22042,22044,22046,22048,22050,22052,22054],{"class":76,"line":1162},[74,22043,19017],{"class":80},[74,22045,22008],{"class":1925},[74,22047,22011],{"class":84},[74,22049,21543],{"class":1925},[74,22051,21322],{"class":84},[74,22053,21325],{"class":80},[74,22055,21328],{"class":84},[74,22057,22058,22060,22062,22064,22066,22068,22070],{"class":76,"line":1176},[74,22059,19017],{"class":80},[74,22061,22008],{"class":1925},[74,22063,22011],{"class":84},[74,22065,21571],{"class":1925},[74,22067,21322],{"class":84},[74,22069,21325],{"class":80},[74,22071,21342],{"class":84},[19,22073,22074],{},"创建circle.h",[64,22076,22078],{"className":66,"code":22077,"language":68,"meta":69,"style":69},"#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",[71,22079,22080,22087,22093,22103,22109,22115,22119,22123,22127,22141,22155,22159,22167,22175,22179,22183,22189,22193,22197],{"__ignoreMap":69},[74,22081,22082,22084],{"class":76,"line":77},[74,22083,21872],{"class":80},[74,22085,22086],{"class":1925}," once\n",[74,22088,22089,22091],{"class":76,"line":94},[74,22090,1911],{"class":80},[74,22092,1914],{"class":190},[74,22094,22095,22097,22099,22101],{"class":76,"line":1141},[74,22096,1919],{"class":80},[74,22098,1922],{"class":80},[74,22100,1926],{"class":1925},[74,22102,1252],{"class":84},[74,22104,22105,22107],{"class":76,"line":1156},[74,22106,1911],{"class":80},[74,22108,21996],{"class":190},[74,22110,22111,22113],{"class":76,"line":1162},[74,22112,18973],{"class":80},[74,22114,18976],{"class":1925},[74,22116,22117],{"class":76,"line":1176},[74,22118,1508],{"class":84},[74,22120,22121],{"class":76,"line":1182},[74,22122,18995],{"class":80},[74,22124,22125],{"class":76,"line":1273},[74,22126,21273],{"class":144},[74,22128,22129,22131,22133,22135,22137,22139],{"class":76,"line":1279},[74,22130,19188],{"class":80},[74,22132,21393],{"class":1925},[74,22134,85],{"class":84},[74,22136,18316],{"class":80},[74,22138,21400],{"class":9495},[74,22140,2682],{"class":84},[74,22142,22143,22145,22147,22149,22151,22153],{"class":76,"line":1291},[74,22144,19188],{"class":80},[74,22146,21415],{"class":1925},[74,22148,85],{"class":84},[74,22150,21420],{"class":1925},[74,22152,21423],{"class":9495},[74,22154,2682],{"class":84},[74,22156,22157],{"class":76,"line":1574},[74,22158,21436],{"class":144},[74,22160,22161,22163,22165],{"class":76,"line":1579},[74,22162,19017],{"class":80},[74,22164,21443],{"class":1925},[74,22166,9915],{"class":84},[74,22168,22169,22171,22173],{"class":76,"line":1585},[74,22170,21455],{"class":1925},[74,22172,21458],{"class":1925},[74,22174,9915],{"class":84},[74,22176,22177],{"class":76,"line":1590},[74,22178,2363],{"emptyLinePlaceholder":2362},[74,22180,22181],{"class":76,"line":1604},[74,22182,19501],{"class":80},[74,22184,22185,22187],{"class":76,"line":1609},[74,22186,19017],{"class":80},[74,22188,19007],{"class":84},[74,22190,22191],{"class":76,"line":1615},[74,22192,21484],{"class":144},[74,22194,22195],{"class":76,"line":1636},[74,22196,21489],{"class":84},[74,22198,22199],{"class":76,"line":1641},[74,22200,3958],{"class":84},[19,22202,22203],{},"创建circle.cpp",[64,22205,22207],{"className":66,"code":22206,"language":68,"meta":69,"style":69},"#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",[71,22208,22209,22216,22239,22261,22266,22282],{"__ignoreMap":69},[74,22210,22211,22213],{"class":76,"line":77},[74,22212,1911],{"class":80},[74,22214,22215],{"class":190},"\u003Ccircle.h>\n",[74,22217,22218,22220,22223,22225,22227,22229,22231,22233,22235,22237],{"class":76,"line":94},[74,22219,9643],{"class":80},[74,22221,22222],{"class":1925}," Circle",[74,22224,22011],{"class":84},[74,22226,21739],{"class":1925},[74,22228,85],{"class":84},[74,22230,18316],{"class":80},[74,22232,21400],{"class":9495},[74,22234,21403],{"class":84},[74,22236,131],{"class":80},[74,22238,21408],{"class":84},[74,22240,22241,22243,22245,22247,22249,22251,22253,22255,22257,22259],{"class":76,"line":1141},[74,22242,9643],{"class":80},[74,22244,22222],{"class":1925},[74,22246,22011],{"class":84},[74,22248,21791],{"class":1925},[74,22250,85],{"class":84},[74,22252,21420],{"class":1925},[74,22254,21423],{"class":9495},[74,22256,21426],{"class":84},[74,22258,131],{"class":80},[74,22260,21431],{"class":84},[74,22262,22263],{"class":76,"line":1156},[74,22264,22265],{"class":144},"\u002F\u002F获取属性\n",[74,22267,22268,22270,22272,22274,22276,22278,22280],{"class":76,"line":1162},[74,22269,18316],{"class":80},[74,22271,22222],{"class":1925},[74,22273,22011],{"class":84},[74,22275,21623],{"class":1925},[74,22277,21322],{"class":84},[74,22279,21325],{"class":80},[74,22281,21450],{"class":84},[74,22283,22284,22286,22288,22290,22292,22294,22296],{"class":76,"line":1176},[74,22285,21420],{"class":1925},[74,22287,22222],{"class":1925},[74,22289,22011],{"class":84},[74,22291,21537],{"class":1925},[74,22293,21322],{"class":84},[74,22295,21325],{"class":80},[74,22297,21465],{"class":84},[19,22299,22300],{},"使用封装的类",[64,22302,22304],{"className":66,"code":22303,"language":68,"meta":69,"style":69},"#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",[71,22305,22306,22312,22322,22328,22334,22358,22362,22388,22414,22438,22452,22456,22468,22472,22476,22480,22492,22496,22500,22508,22512,22516,22520,22524,22528,22538,22544,22552,22560,22570,22576,22588,22596,22604,22614,22620,22632,22636,22644,22650],{"__ignoreMap":69},[74,22307,22308,22310],{"class":76,"line":77},[74,22309,1911],{"class":80},[74,22311,1914],{"class":190},[74,22313,22314,22316,22318,22320],{"class":76,"line":94},[74,22315,1919],{"class":80},[74,22317,1922],{"class":80},[74,22319,1926],{"class":1925},[74,22321,1252],{"class":84},[74,22323,22324,22326],{"class":76,"line":1141},[74,22325,1911],{"class":80},[74,22327,22215],{"class":190},[74,22329,22330,22332],{"class":76,"line":1156},[74,22331,1911],{"class":80},[74,22333,21996],{"class":190},[74,22335,22336,22338,22340,22342,22344,22346,22348,22350,22352,22354,22356],{"class":76,"line":1162},[74,22337,9643],{"class":80},[74,22339,21500],{"class":1925},[74,22341,85],{"class":84},[74,22343,21505],{"class":1925},[74,22345,14863],{"class":80},[74,22347,374],{"class":9495},[74,22349,464],{"class":84},[74,22351,21420],{"class":1925},[74,22353,14863],{"class":80},[74,22355,19],{"class":9495},[74,22357,91],{"class":84},[74,22359,22360],{"class":76,"line":1176},[74,22361,1508],{"class":84},[74,22363,22364,22366,22368,22370,22372,22374,22376,22378,22380,22382,22384,22386],{"class":76,"line":1182},[74,22365,19017],{"class":80},[74,22367,21530],{"class":84},[74,22369,131],{"class":80},[74,22371,20621],{"class":84},[74,22373,21537],{"class":1925},[74,22375,21540],{"class":84},[74,22377,21543],{"class":1925},[74,22379,17329],{"class":84},[74,22381,618],{"class":80},[74,22383,20167],{"class":84},[74,22385,21543],{"class":1925},[74,22387,9915],{"class":84},[74,22389,22390,22392,22394,22396,22398,22400,22402,22404,22406,22408,22410,22412],{"class":76,"line":1273},[74,22391,19017],{"class":80},[74,22393,21560],{"class":84},[74,22395,131],{"class":80},[74,22397,20621],{"class":84},[74,22399,21537],{"class":1925},[74,22401,21540],{"class":84},[74,22403,21571],{"class":1925},[74,22405,17329],{"class":84},[74,22407,618],{"class":80},[74,22409,20167],{"class":84},[74,22411,21571],{"class":1925},[74,22413,9915],{"class":84},[74,22415,22416,22418,22420,22422,22424,22426,22428,22430,22432,22434,22436],{"class":76,"line":1279},[74,22417,19017],{"class":80},[74,22419,21588],{"class":84},[74,22421,131],{"class":80},[74,22423,21593],{"class":1925},[74,22425,21596],{"class":84},[74,22427,541],{"class":80},[74,22429,21530],{"class":84},[74,22431,567],{"class":80},[74,22433,21560],{"class":84},[74,22435,541],{"class":80},[74,22437,21609],{"class":84},[74,22439,22440,22442,22444,22446,22448,22450],{"class":76,"line":1291},[74,22441,3064],{"class":80},[74,22443,21616],{"class":84},[74,22445,996],{"class":80},[74,22447,20621],{"class":84},[74,22449,21623],{"class":1925},[74,22451,21626],{"class":84},[74,22453,22454],{"class":76,"line":1574},[74,22455,1992],{"class":84},[74,22457,22458,22460,22462,22464,22466],{"class":76,"line":1579},[74,22459,13948],{"class":84},[74,22461,1130],{"class":80},[74,22463,21639],{"class":190},[74,22465,1406],{"class":80},[74,22467,13119],{"class":84},[74,22469,22470],{"class":76,"line":1585},[74,22471,2149],{"class":84},[74,22473,22474],{"class":76,"line":1590},[74,22475,21102],{"class":80},[74,22477,22478],{"class":76,"line":1604},[74,22479,1992],{"class":84},[74,22481,22482,22484,22486,22488,22490],{"class":76,"line":1609},[74,22483,13948],{"class":84},[74,22485,1130],{"class":80},[74,22487,21664],{"class":190},[74,22489,1406],{"class":80},[74,22491,13119],{"class":84},[74,22493,22494],{"class":76,"line":1615},[74,22495,2149],{"class":84},[74,22497,22498],{"class":76,"line":1636},[74,22499,1527],{"class":84},[74,22501,22502,22504,22506],{"class":76,"line":1641},[74,22503,88],{"class":80},[74,22505,1935],{"class":1925},[74,22507,1938],{"class":84},[74,22509,22510],{"class":76,"line":1655},[74,22511,1508],{"class":84},[74,22513,22514],{"class":76,"line":1660},[74,22515,19332],{"class":144},[74,22517,22518],{"class":76,"line":1689},[74,22519,19079],{"class":84},[74,22521,22522],{"class":76,"line":1694},[74,22523,21701],{"class":84},[74,22525,22526],{"class":76,"line":1711},[74,22527,21273],{"class":144},[74,22529,22530,22532,22534,22536],{"class":76,"line":1716},[74,22531,1513],{"class":84},[74,22533,1130],{"class":80},[74,22535,21714],{"class":190},[74,22537,1252],{"class":84},[74,22539,22540,22542],{"class":76,"line":1721},[74,22541,19017],{"class":80},[74,22543,21723],{"class":84},[74,22545,22546,22548,22550],{"class":76,"line":1726},[74,22547,1974],{"class":84},[74,22549,1391],{"class":80},[74,22551,21732],{"class":84},[74,22553,22554,22556,22558],{"class":76,"line":1740},[74,22555,20874],{"class":84},[74,22557,21739],{"class":1925},[74,22559,21742],{"class":84},[74,22561,22562,22564,22566,22568],{"class":76,"line":1745},[74,22563,1513],{"class":84},[74,22565,1130],{"class":80},[74,22567,21751],{"class":190},[74,22569,1252],{"class":84},[74,22571,22572,22574],{"class":76,"line":2540},[74,22573,19017],{"class":80},[74,22575,21760],{"class":84},[74,22577,22578,22580,22582,22584,22586],{"class":76,"line":2554},[74,22579,1974],{"class":84},[74,22581,1391],{"class":80},[74,22583,906],{"class":84},[74,22585,1391],{"class":80},[74,22587,21773],{"class":84},[74,22589,22590,22592,22594],{"class":76,"line":2562},[74,22591,21778],{"class":84},[74,22593,21781],{"class":1925},[74,22595,21784],{"class":84},[74,22597,22598,22600,22602],{"class":76,"line":2567},[74,22599,20874],{"class":84},[74,22601,21791],{"class":1925},[74,22603,21794],{"class":84},[74,22605,22606,22608,22610,22612],{"class":76,"line":2573},[74,22607,1513],{"class":84},[74,22609,1130],{"class":80},[74,22611,21803],{"class":190},[74,22613,1252],{"class":84},[74,22615,22616,22618],{"class":76,"line":2579},[74,22617,19017],{"class":80},[74,22619,21812],{"class":84},[74,22621,22622,22624,22626,22628,22630],{"class":76,"line":2584},[74,22623,1974],{"class":84},[74,22625,1391],{"class":80},[74,22627,21821],{"class":84},[74,22629,1391],{"class":80},[74,22631,21826],{"class":84},[74,22633,22634],{"class":76,"line":12227},[74,22635,21831],{"class":84},[74,22637,22638,22640,22642],{"class":76,"line":12251},[74,22639,21836],{"class":84},[74,22641,21781],{"class":1925},[74,22643,21841],{"class":84},[74,22645,22646,22648],{"class":76,"line":12256},[74,22647,21846],{"class":1925},[74,22649,21849],{"class":84},[74,22651,22652],{"class":76,"line":12262},[74,22653,1527],{"class":84},[14,22655,22657],{"id":22656},"_82对象的初始化清理","8.2对象的初始化清理",[1093,22659,22660,22663],{},[30,22661,22662],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[30,22664,22665],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[44,22667,22669],{"id":22668},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,22671,22672,22673,22676],{},"对象的",[235,22674,22675],{},"初始化和清理","也是两个非常重要的安全问题",[19,22678,22679],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,22681,22682],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,22684,22685,22686,22689,22690,22693],{},"c++利用了",[235,22687,22688],{},"构造函数","和",[235,22691,22692],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,22695,22696,22697],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[235,22698,22699],{},"我们不提供构造和析构，编译器会提供",[19,22701,22702],{},[235,22703,22704],{},"编译器提供的构造函数和析构函数是空实现。",[1093,22706,22707,22710],{},[30,22708,22709],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[30,22711,22712,22713,22716],{},"析构函数：主要作用在于对象",[235,22714,22715],{},"销毁前","系统自动调用，执行一些清理工作。",[19,22718,22719,22722],{},[235,22720,22721],{},"构造函数语法：",[71,22723,22724],{},"类名(){}",[27,22726,22727,22730,22733,22736,22739],{},[30,22728,22729],{},"构造函数，没有返回值也不写void",[30,22731,22732],{},"函数名称与类名相同",[30,22734,22735],{},"构造函数可以有参数，因此可以发生重载",[30,22737,22738],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[30,22740,22741,22742,515],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[71,22743,22744],{},"Person(){}",[19,22746,22747,18074,22750],{},[235,22748,22749],{},"析构函数语法：",[71,22751,22752],{},"~类名(){}",[27,22754,22755,22758,22761,22767],{},[30,22756,22757],{},"析构函数，没有返回值也不写void",[30,22759,22760],{},"函数名称与类名相同,在名称前加上符号  ~",[30,22762,22763,22764],{},"析构函数不可以有参数，因此",[235,22765,22766],{},"不可以发生重载",[30,22768,22769],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[64,22771,22773],{"className":66,"code":22772,"language":68,"meta":69,"style":69},"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",[71,22774,22775,22781,22785,22789,22794,22801,22805,22818,22822,22827,22834,22838,22851,22855,22859,22863,22867,22875,22879,22887,22891,22895,22903,22907,22912,22916,22923,22927,22940,22944,22952],{"__ignoreMap":69},[74,22776,22777,22779],{"class":76,"line":77},[74,22778,18973],{"class":80},[74,22780,19450],{"class":1925},[74,22782,22783],{"class":76,"line":94},[74,22784,1508],{"class":84},[74,22786,22787],{"class":76,"line":1141},[74,22788,18995],{"class":80},[74,22790,22791],{"class":76,"line":1156},[74,22792,22793],{"class":144},"    \u002F\u002F构造函数\n",[74,22795,22796,22799],{"class":76,"line":1162},[74,22797,22798],{"class":1925},"    Person",[74,22800,1938],{"class":84},[74,22802,22803],{"class":76,"line":1176},[74,22804,1992],{"class":84},[74,22806,22807,22809,22811,22814,22816],{"class":76,"line":1182},[74,22808,13948],{"class":84},[74,22810,1130],{"class":80},[74,22812,22813],{"class":190}," \"Person的构造函数调用\"",[74,22815,1406],{"class":80},[74,22817,13119],{"class":84},[74,22819,22820],{"class":76,"line":1273},[74,22821,2149],{"class":84},[74,22823,22824],{"class":76,"line":1279},[74,22825,22826],{"class":144},"    \u002F\u002F析构函数\n",[74,22828,22829,22832],{"class":76,"line":1291},[74,22830,22831],{"class":1925},"    ~Person",[74,22833,1938],{"class":84},[74,22835,22836],{"class":76,"line":1574},[74,22837,1992],{"class":84},[74,22839,22840,22842,22844,22847,22849],{"class":76,"line":1579},[74,22841,13948],{"class":84},[74,22843,1130],{"class":80},[74,22845,22846],{"class":190}," \"Person的析构函数调用\"",[74,22848,1406],{"class":80},[74,22850,13119],{"class":84},[74,22852,22853],{"class":76,"line":1585},[74,22854,2149],{"class":84},[74,22856,22857],{"class":76,"line":1590},[74,22858,2363],{"emptyLinePlaceholder":2362},[74,22860,22861],{"class":76,"line":1604},[74,22862,3958],{"class":84},[74,22864,22865],{"class":76,"line":1609},[74,22866,2363],{"emptyLinePlaceholder":2362},[74,22868,22869,22871,22873],{"class":76,"line":1615},[74,22870,9643],{"class":80},[74,22872,9867],{"class":1925},[74,22874,1938],{"class":84},[74,22876,22877],{"class":76,"line":1636},[74,22878,1508],{"class":84},[74,22880,22881,22884],{"class":76,"line":1641},[74,22882,22883],{"class":84},"    Person p;",[74,22885,22886],{"class":144},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[74,22888,22889],{"class":76,"line":1655},[74,22890,1527],{"class":84},[74,22892,22893],{"class":76,"line":1660},[74,22894,2363],{"emptyLinePlaceholder":2362},[74,22896,22897,22899,22901],{"class":76,"line":1689},[74,22898,88],{"class":80},[74,22900,1935],{"class":1925},[74,22902,15132],{"class":84},[74,22904,22905],{"class":76,"line":1694},[74,22906,17489],{"class":84},[74,22908,22909],{"class":76,"line":1711},[74,22910,22911],{"class":144},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[74,22913,22914],{"class":76,"line":1716},[74,22915,2363],{"emptyLinePlaceholder":2362},[74,22917,22918,22920],{"class":76,"line":1721},[74,22919,22883],{"class":84},[74,22921,22922],{"class":144},"\u002F\u002F只有构造函数\n",[74,22924,22925],{"class":76,"line":1726},[74,22926,2363],{"emptyLinePlaceholder":2362},[74,22928,22929,22931,22933,22935,22937],{"class":76,"line":1740},[74,22930,2265],{"class":1925},[74,22932,85],{"class":84},[74,22934,2270],{"class":190},[74,22936,10245],{"class":84},[74,22938,22939],{"class":144},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[74,22941,22942],{"class":76,"line":1745},[74,22943,2363],{"emptyLinePlaceholder":2362},[74,22945,22946,22948,22950],{"class":76,"line":2540},[74,22947,4053],{"class":80},[74,22949,4056],{"class":134},[74,22951,1252],{"class":84},[74,22953,22954],{"class":76,"line":2554},[74,22955,1527],{"class":84},[19,22957,22958],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[44,22960,22962],{"id":22961},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,22964,22965],{},"两种分类方式：",[19,22967,22968],{},"​\t按参数分为： 有参构造和无参构造",[19,22970,22971],{},"​\t按类型分为： 普通构造和拷贝构造",[19,22973,22974],{},"三种调用方式：",[19,22976,22977],{},"​\t括号法",[19,22979,22980],{},"​\t显示法",[19,22982,22983],{},"​\t隐式转换法",[64,22985,22987],{"className":66,"code":22986,"language":68,"meta":69,"style":69},"#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",[71,22988,22989,22995,23005,23010,23015,23020,23025,23029,23037,23041,23045,23049,23055,23059,23072,23076,23088,23092,23101,23114,23118,23122,23128,23132,23145,23149,23154,23170,23174,23179,23188,23201,23205,23211,23215,23220,23228,23232,23237,23241,23249,23253,23258,23263,23268,23273,23278,23282,23287,23292,23297,23302,23306,23311,23316,23332,23344,23349,23353,23358,23363,23368,23372,23377,23391,23404,23408,23416,23420,23426,23432,23440],{"__ignoreMap":69},[74,22990,22991,22993],{"class":76,"line":77},[74,22992,1911],{"class":80},[74,22994,1914],{"class":190},[74,22996,22997,22999,23001,23003],{"class":76,"line":94},[74,22998,1919],{"class":80},[74,23000,1922],{"class":80},[74,23002,1926],{"class":1925},[74,23004,1252],{"class":84},[74,23006,23007],{"class":76,"line":1141},[74,23008,23009],{"class":144},"\u002F\u002F1.构造函数的分类及调用\n",[74,23011,23012],{"class":76,"line":1156},[74,23013,23014],{"class":144},"\u002F\u002F分类\n",[74,23016,23017],{"class":76,"line":1162},[74,23018,23019],{"class":144},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[74,23021,23022],{"class":76,"line":1176},[74,23023,23024],{"class":144},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[74,23026,23027],{"class":76,"line":1182},[74,23028,2363],{"emptyLinePlaceholder":2362},[74,23030,23031,23033,23035],{"class":76,"line":1273},[74,23032,18973],{"class":80},[74,23034,19848],{"class":1925},[74,23036,2637],{"class":84},[74,23038,23039],{"class":76,"line":1279},[74,23040,1508],{"class":84},[74,23042,23043],{"class":76,"line":1291},[74,23044,18995],{"class":80},[74,23046,23047],{"class":76,"line":1574},[74,23048,22793],{"class":144},[74,23050,23051,23053],{"class":76,"line":1579},[74,23052,22798],{"class":1925},[74,23054,1938],{"class":84},[74,23056,23057],{"class":76,"line":1585},[74,23058,1992],{"class":84},[74,23060,23061,23063,23065,23068,23070],{"class":76,"line":1590},[74,23062,3414],{"class":84},[74,23064,1130],{"class":80},[74,23066,23067],{"class":190},"\"Person构造函数无参构造\"",[74,23069,1130],{"class":80},[74,23071,1153],{"class":84},[74,23073,23074],{"class":76,"line":1604},[74,23075,2149],{"class":84},[74,23077,23078,23080,23082,23084,23086],{"class":76,"line":1609},[74,23079,22798],{"class":1925},[74,23081,85],{"class":84},[74,23083,88],{"class":80},[74,23085,1360],{"class":9495},[74,23087,91],{"class":84},[74,23089,23090],{"class":76,"line":1615},[74,23091,1992],{"class":84},[74,23093,23094,23097,23099],{"class":76,"line":1636},[74,23095,23096],{"class":84},"        age",[74,23098,131],{"class":80},[74,23100,10476],{"class":84},[74,23102,23103,23105,23107,23110,23112],{"class":76,"line":1641},[74,23104,3414],{"class":84},[74,23106,1130],{"class":80},[74,23108,23109],{"class":190},"\"Person构造函数有参构造\"",[74,23111,1130],{"class":80},[74,23113,1153],{"class":84},[74,23115,23116],{"class":76,"line":1655},[74,23117,2149],{"class":84},[74,23119,23120],{"class":76,"line":1660},[74,23121,22826],{"class":144},[74,23123,23124,23126],{"class":76,"line":1689},[74,23125,22831],{"class":1925},[74,23127,1938],{"class":84},[74,23129,23130],{"class":76,"line":1694},[74,23131,1992],{"class":84},[74,23133,23134,23136,23138,23141,23143],{"class":76,"line":1711},[74,23135,3414],{"class":84},[74,23137,1130],{"class":80},[74,23139,23140],{"class":190},"\"Person析构函数被调用\"",[74,23142,1130],{"class":80},[74,23144,1153],{"class":84},[74,23146,23147],{"class":76,"line":1716},[74,23148,2149],{"class":84},[74,23150,23151],{"class":76,"line":1721},[74,23152,23153],{"class":144},"    \u002F\u002F拷贝构造函数\n",[74,23155,23156,23158,23160,23162,23164,23166,23168],{"class":76,"line":1726},[74,23157,22798],{"class":1925},[74,23159,85],{"class":84},[74,23161,11071],{"class":80},[74,23163,19848],{"class":1925},[74,23165,14863],{"class":80},[74,23167,19],{"class":9495},[74,23169,91],{"class":84},[74,23171,23172],{"class":76,"line":1740},[74,23173,1992],{"class":84},[74,23175,23176],{"class":76,"line":1745},[74,23177,23178],{"class":144},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[74,23180,23181,23183,23185],{"class":76,"line":2540},[74,23182,23096],{"class":84},[74,23184,131],{"class":80},[74,23186,23187],{"class":84},"p.age;\n",[74,23189,23190,23192,23194,23197,23199],{"class":76,"line":2554},[74,23191,3414],{"class":84},[74,23193,1130],{"class":80},[74,23195,23196],{"class":190},"\"Person拷贝构造函数被调用\"",[74,23198,1130],{"class":80},[74,23200,1153],{"class":84},[74,23202,23203],{"class":76,"line":2562},[74,23204,2149],{"class":84},[74,23206,23207,23209],{"class":76,"line":2567},[74,23208,1947],{"class":80},[74,23210,12076],{"class":84},[74,23212,23213],{"class":76,"line":2573},[74,23214,3958],{"class":84},[74,23216,23217],{"class":76,"line":2579},[74,23218,23219],{"class":144},"\u002F\u002F调用\n",[74,23221,23222,23224,23226],{"class":76,"line":2584},[74,23223,9643],{"class":80},[74,23225,9867],{"class":1925},[74,23227,1938],{"class":84},[74,23229,23230],{"class":76,"line":12227},[74,23231,1508],{"class":84},[74,23233,23234],{"class":76,"line":12251},[74,23235,23236],{"class":144},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[74,23238,23239],{"class":76,"line":12256},[74,23240,1527],{"class":84},[74,23242,23243,23245,23247],{"class":76,"line":12262},[74,23244,9643],{"class":80},[74,23246,9936],{"class":1925},[74,23248,1938],{"class":84},[74,23250,23251],{"class":76,"line":12289},[74,23252,1508],{"class":84},[74,23254,23255],{"class":76,"line":12294},[74,23256,23257],{"class":144},"    \u002F\u002F1.括号法\n",[74,23259,23260],{"class":76,"line":12300},[74,23261,23262],{"class":144},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[74,23264,23265],{"class":76,"line":12312},[74,23266,23267],{"class":144},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[74,23269,23270],{"class":76,"line":12324},[74,23271,23272],{"class":144},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[74,23274,23275],{"class":76,"line":12336},[74,23276,23277],{"class":144},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[74,23279,23280],{"class":76,"line":13995},[74,23281,2363],{"emptyLinePlaceholder":2362},[74,23283,23284],{"class":76,"line":14020},[74,23285,23286],{"class":144},"    \u002F\u002F注意事项\n",[74,23288,23289],{"class":76,"line":14043},[74,23290,23291],{"class":144},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[74,23293,23294],{"class":76,"line":14067},[74,23295,23296],{"class":144},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[74,23298,23299],{"class":76,"line":14072},[74,23300,23301],{"class":144},"    \u002F\u002F Person p4();\n",[74,23303,23304],{"class":76,"line":14077},[74,23305,2363],{"emptyLinePlaceholder":2362},[74,23307,23308],{"class":76,"line":14082},[74,23309,23310],{"class":144},"    \u002F\u002F2.显示法\n",[74,23312,23313],{"class":76,"line":14091},[74,23314,23315],{"class":84},"    Person p1;\n",[74,23317,23318,23321,23323,23326,23328,23330],{"class":76,"line":14096},[74,23319,23320],{"class":84},"    Person p2",[74,23322,131],{"class":80},[74,23324,23325],{"class":1925},"Person",[74,23327,85],{"class":84},[74,23329,532],{"class":134},[74,23331,2682],{"class":84},[74,23333,23334,23337,23339,23341],{"class":76,"line":14102},[74,23335,23336],{"class":84},"    Person p3",[74,23338,131],{"class":80},[74,23340,23325],{"class":1925},[74,23342,23343],{"class":84},"(p2);\n",[74,23345,23346],{"class":76,"line":14123},[74,23347,23348],{"class":144},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[74,23350,23351],{"class":76,"line":14129},[74,23352,2363],{"emptyLinePlaceholder":2362},[74,23354,23355],{"class":76,"line":14143},[74,23356,23357],{"class":144},"    \u002F\u002F 注意事项2\n",[74,23359,23360],{"class":76,"line":14149},[74,23361,23362],{"class":144},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[74,23364,23365],{"class":76,"line":14176},[74,23366,23367],{"class":144},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[74,23369,23370],{"class":76,"line":14185},[74,23371,2363],{"emptyLinePlaceholder":2362},[74,23373,23374],{"class":76,"line":14191},[74,23375,23376],{"class":144},"    \u002F\u002F3.隐士转换法\n",[74,23378,23379,23382,23384,23386,23388],{"class":76,"line":14199},[74,23380,23381],{"class":84},"    Person p4",[74,23383,131],{"class":80},[74,23385,532],{"class":134},[74,23387,141],{"class":84},[74,23389,23390],{"class":144},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[74,23392,23393,23396,23398,23401],{"class":76,"line":14204},[74,23394,23395],{"class":84},"    Person p5",[74,23397,131],{"class":80},[74,23399,23400],{"class":84},"p4;",[74,23402,23403],{"class":144}," \u002F\u002F 这里会调用拷贝构造函数\n",[74,23405,23406],{"class":76,"line":20883},[74,23407,1527],{"class":84},[74,23409,23410,23412,23414],{"class":76,"line":20889},[74,23411,88],{"class":80},[74,23413,1935],{"class":1925},[74,23415,1938],{"class":84},[74,23417,23418],{"class":76,"line":20912},[74,23419,1508],{"class":84},[74,23421,23422,23424],{"class":76,"line":20918},[74,23423,9912],{"class":1925},[74,23425,9915],{"class":84},[74,23427,23428,23430],{"class":76,"line":20941},[74,23429,9981],{"class":1925},[74,23431,9915],{"class":84},[74,23433,23434,23436,23438],{"class":76,"line":20955},[74,23435,4053],{"class":80},[74,23437,4056],{"class":134},[74,23439,1252],{"class":84},[74,23441,23442],{"class":76,"line":20975},[74,23443,1527],{"class":84},[19,23445,23446,23449],{},[235,23447,23448],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[44,23451,23453],{"id":23452},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,23455,23456],{},"C++中拷贝构造函数调用时机通常有三种情况",[1093,23458,23459,23462,23465],{},[30,23460,23461],{},"使用一个已经创建完毕的对象来初始化一个新对象",[30,23463,23464],{},"值传递的方式给函数参数传值",[30,23466,23467],{},"以值方式返回局部对象",[64,23469,23471],{"className":66,"code":23470,"language":68,"meta":69,"style":69},"#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",[71,23472,23473,23479,23489,23493,23498,23502,23507,23512,23517,23523,23527,23531,23537,23541,23554,23558,23563,23575,23579,23587,23600,23604,23608,23624,23628,23637,23650,23654,23660,23664,23676,23680,23686,23690,23694,23702,23706,23719,23727,23745,23749,23754,23759,23774,23778,23791,23795,23803,23807,23811,23819,23823,23828,23837,23841,23845,23870,23880,23884,23892,23896,23907,23932,23936,23940,23944,23952,23956,23961,23966,23973,23978,23983,23988,23993,23997,24002,24006,24011,24015,24020,24025,24029,24033,24038,24043,24051],{"__ignoreMap":69},[74,23474,23475,23477],{"class":76,"line":77},[74,23476,1911],{"class":80},[74,23478,1914],{"class":190},[74,23480,23481,23483,23485,23487],{"class":76,"line":94},[74,23482,1919],{"class":80},[74,23484,1922],{"class":80},[74,23486,1926],{"class":1925},[74,23488,1252],{"class":84},[74,23490,23491],{"class":76,"line":1141},[74,23492,2363],{"emptyLinePlaceholder":2362},[74,23494,23495],{"class":76,"line":1156},[74,23496,23497],{"class":144},"\u002F\u002F拷贝构造函数调用时机\n",[74,23499,23500],{"class":76,"line":1162},[74,23501,2363],{"emptyLinePlaceholder":2362},[74,23503,23504],{"class":76,"line":1176},[74,23505,23506],{"class":144},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[74,23508,23509],{"class":76,"line":1182},[74,23510,23511],{"class":144},"\u002F\u002F2.值传递的方式给函数参数传值\n",[74,23513,23514],{"class":76,"line":1273},[74,23515,23516],{"class":144},"\u002F\u002F3.以值方式返回局部对象\n",[74,23518,23519,23521],{"class":76,"line":1279},[74,23520,18973],{"class":80},[74,23522,19450],{"class":1925},[74,23524,23525],{"class":76,"line":1291},[74,23526,1508],{"class":84},[74,23528,23529],{"class":76,"line":1574},[74,23530,18995],{"class":80},[74,23532,23533,23535],{"class":76,"line":1579},[74,23534,22798],{"class":1925},[74,23536,1938],{"class":84},[74,23538,23539],{"class":76,"line":1585},[74,23540,1992],{"class":84},[74,23542,23543,23545,23547,23550,23552],{"class":76,"line":1590},[74,23544,13948],{"class":84},[74,23546,1130],{"class":80},[74,23548,23549],{"class":190}," \"Person的默认构造函数调用\"",[74,23551,1406],{"class":80},[74,23553,13119],{"class":84},[74,23555,23556],{"class":76,"line":1604},[74,23557,2149],{"class":84},[74,23559,23560],{"class":76,"line":1609},[74,23561,23562],{"class":144},"    \u002F\u002F有参构造\n",[74,23564,23565,23567,23569,23571,23573],{"class":76,"line":1615},[74,23566,22798],{"class":1925},[74,23568,85],{"class":84},[74,23570,88],{"class":80},[74,23572,19968],{"class":9495},[74,23574,91],{"class":84},[74,23576,23577],{"class":76,"line":1636},[74,23578,1992],{"class":84},[74,23580,23581,23583,23585],{"class":76,"line":1641},[74,23582,20022],{"class":84},[74,23584,131],{"class":80},[74,23586,12076],{"class":84},[74,23588,23589,23591,23593,23596,23598],{"class":76,"line":1655},[74,23590,13948],{"class":84},[74,23592,1130],{"class":80},[74,23594,23595],{"class":190}," \"Person的有参构造函数调用\"",[74,23597,1406],{"class":80},[74,23599,13119],{"class":84},[74,23601,23602],{"class":76,"line":1660},[74,23603,2149],{"class":84},[74,23605,23606],{"class":76,"line":1689},[74,23607,23153],{"class":144},[74,23609,23610,23612,23614,23616,23618,23620,23622],{"class":76,"line":1694},[74,23611,22798],{"class":1925},[74,23613,85],{"class":84},[74,23615,11071],{"class":80},[74,23617,19848],{"class":1925},[74,23619,14863],{"class":80},[74,23621,19],{"class":9495},[74,23623,91],{"class":84},[74,23625,23626],{"class":76,"line":1711},[74,23627,1992],{"class":84},[74,23629,23630,23632,23634],{"class":76,"line":1716},[74,23631,20022],{"class":84},[74,23633,131],{"class":80},[74,23635,23636],{"class":84}," p.m_Age;\n",[74,23638,23639,23641,23643,23646,23648],{"class":76,"line":1721},[74,23640,13948],{"class":84},[74,23642,1130],{"class":80},[74,23644,23645],{"class":190}," \"Person的拷贝构造函数调用\"",[74,23647,1406],{"class":80},[74,23649,13119],{"class":84},[74,23651,23652],{"class":76,"line":1726},[74,23653,2149],{"class":84},[74,23655,23656,23658],{"class":76,"line":1740},[74,23657,22831],{"class":1925},[74,23659,1938],{"class":84},[74,23661,23662],{"class":76,"line":1745},[74,23663,1992],{"class":84},[74,23665,23666,23668,23670,23672,23674],{"class":76,"line":2540},[74,23667,13948],{"class":84},[74,23669,1130],{"class":80},[74,23671,22846],{"class":190},[74,23673,1406],{"class":80},[74,23675,13119],{"class":84},[74,23677,23678],{"class":76,"line":2554},[74,23679,2149],{"class":84},[74,23681,23682,23684],{"class":76,"line":2562},[74,23683,1947],{"class":80},[74,23685,19945],{"class":84},[74,23687,23688],{"class":76,"line":2567},[74,23689,3958],{"class":84},[74,23691,23692],{"class":76,"line":2573},[74,23693,23506],{"class":144},[74,23695,23696,23698,23700],{"class":76,"line":2579},[74,23697,9643],{"class":80},[74,23699,9867],{"class":1925},[74,23701,1938],{"class":84},[74,23703,23704],{"class":76,"line":2584},[74,23705,1508],{"class":84},[74,23707,23708,23711,23713,23715,23717],{"class":76,"line":12227},[74,23709,23710],{"class":84},"    Person ",[74,23712,11409],{"class":1925},[74,23714,85],{"class":84},[74,23716,786],{"class":134},[74,23718,2682],{"class":84},[74,23720,23721,23723,23725],{"class":76,"line":12251},[74,23722,23710],{"class":84},[74,23724,11312],{"class":1925},[74,23726,21794],{"class":84},[74,23728,23729,23731,23733,23736,23738,23741,23743],{"class":76,"line":12256},[74,23730,1513],{"class":84},[74,23732,1130],{"class":80},[74,23734,23735],{"class":190},"\"P2的年龄为：\"",[74,23737,1130],{"class":80},[74,23739,23740],{"class":84},"p2.m_Age",[74,23742,1130],{"class":80},[74,23744,1153],{"class":84},[74,23746,23747],{"class":76,"line":12262},[74,23748,1527],{"class":84},[74,23750,23751],{"class":76,"line":12289},[74,23752,23753],{"class":144},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[74,23755,23756],{"class":76,"line":12294},[74,23757,23758],{"class":144},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[74,23760,23761,23763,23766,23768,23770,23772],{"class":76,"line":12300},[74,23762,9643],{"class":80},[74,23764,23765],{"class":1925}," doWork",[74,23767,85],{"class":84},[74,23769,23325],{"class":1925},[74,23771,11104],{"class":9495},[74,23773,91],{"class":84},[74,23775,23776],{"class":76,"line":12312},[74,23777,1508],{"class":84},[74,23779,23780,23782,23784,23787,23789],{"class":76,"line":12324},[74,23781,10808],{"class":84},[74,23783,1130],{"class":80},[74,23785,23786],{"class":190}," \"doWork函数调用\"",[74,23788,1406],{"class":80},[74,23790,13119],{"class":84},[74,23792,23793],{"class":76,"line":12336},[74,23794,1527],{"class":84},[74,23796,23797,23799,23801],{"class":76,"line":13995},[74,23798,9643],{"class":80},[74,23800,9936],{"class":1925},[74,23802,1938],{"class":84},[74,23804,23805],{"class":76,"line":14020},[74,23806,1508],{"class":84},[74,23808,23809],{"class":76,"line":14043},[74,23810,19592],{"class":84},[74,23812,23813,23816],{"class":76,"line":14067},[74,23814,23815],{"class":1925},"    doWork",[74,23817,23818],{"class":84},"(p);\n",[74,23820,23821],{"class":76,"line":14072},[74,23822,1527],{"class":84},[74,23824,23825],{"class":76,"line":14077},[74,23826,23827],{"class":144},"\u002F\u002F 3.以值方式返回局部对象\n",[74,23829,23830,23832,23835],{"class":76,"line":14082},[74,23831,23325],{"class":1925},[74,23833,23834],{"class":1925}," doWork2",[74,23836,1938],{"class":84},[74,23838,23839],{"class":76,"line":14091},[74,23840,1508],{"class":84},[74,23842,23843],{"class":76,"line":14096},[74,23844,23315],{"class":84},[74,23846,23847,23849,23851,23853,23855,23857,23859,23861,23863,23865,23867],{"class":76,"line":14102},[74,23848,1513],{"class":84},[74,23850,1130],{"class":80},[74,23852,85],{"class":84},[74,23854,88],{"class":80},[74,23856,10797],{"class":80},[74,23858,515],{"class":84},[74,23860,439],{"class":80},[74,23862,11409],{"class":84},[74,23864,1130],{"class":80},[74,23866,1200],{"class":84},[74,23868,23869],{"class":144},"\u002F\u002F打印p1的地址\n",[74,23871,23872,23874,23877],{"class":76,"line":14123},[74,23873,4053],{"class":80},[74,23875,23876],{"class":84}," p1;",[74,23878,23879],{"class":144},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[74,23881,23882],{"class":76,"line":14129},[74,23883,1527],{"class":84},[74,23885,23886,23888,23890],{"class":76,"line":14143},[74,23887,9643],{"class":80},[74,23889,10008],{"class":1925},[74,23891,1938],{"class":84},[74,23893,23894],{"class":76,"line":14149},[74,23895,1508],{"class":84},[74,23897,23898,23901,23903,23905],{"class":76,"line":14176},[74,23899,23900],{"class":84},"    Person p ",[74,23902,131],{"class":80},[74,23904,23834],{"class":1925},[74,23906,9915],{"class":84},[74,23908,23909,23911,23913,23915,23917,23919,23921,23923,23925,23927,23929],{"class":76,"line":14185},[74,23910,1513],{"class":84},[74,23912,1130],{"class":80},[74,23914,85],{"class":84},[74,23916,88],{"class":80},[74,23918,10797],{"class":80},[74,23920,515],{"class":84},[74,23922,439],{"class":80},[74,23924,19],{"class":84},[74,23926,1130],{"class":80},[74,23928,1200],{"class":84},[74,23930,23931],{"class":144},"\u002F\u002F打印p的地址\n",[74,23933,23934],{"class":76,"line":14191},[74,23935,1527],{"class":84},[74,23937,23938],{"class":76,"line":14199},[74,23939,2363],{"emptyLinePlaceholder":2362},[74,23941,23942],{"class":76,"line":14204},[74,23943,2363],{"emptyLinePlaceholder":2362},[74,23945,23946,23948,23950],{"class":76,"line":20883},[74,23947,88],{"class":80},[74,23949,1935],{"class":1925},[74,23951,1938],{"class":84},[74,23953,23954],{"class":76,"line":20889},[74,23955,1508],{"class":84},[74,23957,23958],{"class":76,"line":20912},[74,23959,23960],{"class":144},"    \u002F\u002F test01();\n",[74,23962,23963],{"class":76,"line":20918},[74,23964,23965],{"class":144},"    \u002F\u002F test02();\n",[74,23967,23968,23971],{"class":76,"line":20941},[74,23969,23970],{"class":1925},"    test03",[74,23972,9915],{"class":84},[74,23974,23975],{"class":76,"line":20955},[74,23976,23977],{"class":144},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[74,23979,23980],{"class":76,"line":20975},[74,23981,23982],{"class":144},"\u002F\u002F 输出结果如下：\n",[74,23984,23985],{"class":76,"line":20981},[74,23986,23987],{"class":144},"\u002F\u002F Person的默认构造函数调用\n",[74,23989,23990],{"class":76,"line":20992},[74,23991,23992],{"class":144},"\u002F\u002F 0x7fffffffceec\n",[74,23994,23995],{"class":76,"line":21015},[74,23996,23992],{"class":144},[74,23998,23999],{"class":76,"line":21037},[74,24000,24001],{"class":144},"\u002F\u002F Person的析构函数调用\n",[74,24003,24004],{"class":76,"line":21042},[74,24005,2363],{"emptyLinePlaceholder":2362},[74,24007,24008],{"class":76,"line":21048},[74,24009,24010],{"class":144},"\u002F\u002F 之前的输出结果如下：\n",[74,24012,24013],{"class":76,"line":21062},[74,24014,23987],{"class":144},[74,24016,24017],{"class":76,"line":21075},[74,24018,24019],{"class":144},"\u002F\u002F 地址\n",[74,24021,24022],{"class":76,"line":21080},[74,24023,24024],{"class":144},"\u002F\u002F Person的拷贝构造函数调用\n",[74,24026,24027],{"class":76,"line":21094},[74,24028,24001],{"class":144},[74,24030,24031],{"class":76,"line":21099},[74,24032,24019],{"class":144},[74,24034,24035],{"class":76,"line":21105},[74,24036,24037],{"class":144},"\u002F\u002F (这两次输出的地址也是不同的) \n",[74,24039,24040],{"class":76,"line":21110},[74,24041,24042],{"class":144},"\u002F\u002F Person的析构函数调用     \n",[74,24044,24045,24047,24049],{"class":76,"line":21124},[74,24046,4053],{"class":80},[74,24048,4056],{"class":134},[74,24050,1252],{"class":84},[74,24052,24053],{"class":76,"line":21129},[74,24054,1527],{"class":84},[19,24056,24057],{},"简化版理解",[64,24059,24061],{"className":66,"code":24060,"language":68,"meta":69,"style":69},"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",[71,24062,24063,24071,24075,24081,24094,24105,24109,24121,24134,24142,24146,24162,24175,24184,24188,24193,24199,24212,24216,24220,24227,24231,24235,24240,24248,24252,24268,24281,24294,24298,24303,24311,24315,24319,24324,24329,24345,24353,24360,24366,24370,24374,24379,24387,24391,24395,24418,24425,24429,24433,24441,24445,24455,24477,24481,24485,24489,24497,24501,24506,24511,24517,24521,24531,24535,24543],{"__ignoreMap":69},[74,24064,24065,24067,24069],{"class":76,"line":77},[74,24066,18973],{"class":80},[74,24068,19848],{"class":1925},[74,24070,19851],{"class":84},[74,24072,24073],{"class":76,"line":94},[74,24074,18995],{"class":80},[74,24076,24077,24079],{"class":76,"line":1141},[74,24078,22798],{"class":1925},[74,24080,15132],{"class":84},[74,24082,24083,24085,24087,24090,24092],{"class":76,"line":1156},[74,24084,13948],{"class":84},[74,24086,1130],{"class":80},[74,24088,24089],{"class":190}," \"无参构造函数!\"",[74,24091,1406],{"class":80},[74,24093,13119],{"class":84},[74,24095,24096,24099,24101,24103],{"class":76,"line":1162},[74,24097,24098],{"class":84},"        mAge ",[74,24100,131],{"class":80},[74,24102,4056],{"class":134},[74,24104,1252],{"class":84},[74,24106,24107],{"class":76,"line":1176},[74,24108,2149],{"class":84},[74,24110,24111,24113,24115,24117,24119],{"class":76,"line":1182},[74,24112,22798],{"class":1925},[74,24114,85],{"class":84},[74,24116,88],{"class":80},[74,24118,19968],{"class":9495},[74,24120,16721],{"class":84},[74,24122,24123,24125,24127,24130,24132],{"class":76,"line":1273},[74,24124,13948],{"class":84},[74,24126,1130],{"class":80},[74,24128,24129],{"class":190}," \"有参构造函数!\"",[74,24131,1406],{"class":80},[74,24133,13119],{"class":84},[74,24135,24136,24138,24140],{"class":76,"line":1279},[74,24137,24098],{"class":84},[74,24139,131],{"class":80},[74,24141,12076],{"class":84},[74,24143,24144],{"class":76,"line":1291},[74,24145,2149],{"class":84},[74,24147,24148,24150,24152,24154,24156,24158,24160],{"class":76,"line":1574},[74,24149,22798],{"class":1925},[74,24151,85],{"class":84},[74,24153,11071],{"class":80},[74,24155,19848],{"class":1925},[74,24157,439],{"class":80},[74,24159,11104],{"class":9495},[74,24161,16721],{"class":84},[74,24163,24164,24166,24168,24171,24173],{"class":76,"line":1579},[74,24165,13948],{"class":84},[74,24167,1130],{"class":80},[74,24169,24170],{"class":190}," \"拷贝构造函数!\"",[74,24172,1406],{"class":80},[74,24174,13119],{"class":84},[74,24176,24177,24179,24181],{"class":76,"line":1585},[74,24178,24098],{"class":84},[74,24180,131],{"class":80},[74,24182,24183],{"class":84}," p.mAge;\n",[74,24185,24186],{"class":76,"line":1590},[74,24187,2149],{"class":84},[74,24189,24190],{"class":76,"line":1604},[74,24191,24192],{"class":144},"    \u002F\u002F析构函数在释放内存之前调用\n",[74,24194,24195,24197],{"class":76,"line":1609},[74,24196,22831],{"class":1925},[74,24198,15132],{"class":84},[74,24200,24201,24203,24205,24208,24210],{"class":76,"line":1615},[74,24202,13948],{"class":84},[74,24204,1130],{"class":80},[74,24206,24207],{"class":190}," \"析构函数!\"",[74,24209,1406],{"class":80},[74,24211,13119],{"class":84},[74,24213,24214],{"class":76,"line":1636},[74,24215,2149],{"class":84},[74,24217,24218],{"class":76,"line":1641},[74,24219,18995],{"class":80},[74,24221,24222,24224],{"class":76,"line":1655},[74,24223,1947],{"class":80},[74,24225,24226],{"class":84}," mAge;\n",[74,24228,24229],{"class":76,"line":1660},[74,24230,3958],{"class":84},[74,24232,24233],{"class":76,"line":1689},[74,24234,2363],{"emptyLinePlaceholder":2362},[74,24236,24237],{"class":76,"line":1694},[74,24238,24239],{"class":144},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[74,24241,24242,24244,24246],{"class":76,"line":1711},[74,24243,9643],{"class":80},[74,24245,9867],{"class":1925},[74,24247,15132],{"class":84},[74,24249,24250],{"class":76,"line":1716},[74,24251,2363],{"emptyLinePlaceholder":2362},[74,24253,24254,24256,24259,24261,24263,24265],{"class":76,"line":1721},[74,24255,23710],{"class":84},[74,24257,24258],{"class":1925},"man",[74,24260,85],{"class":84},[74,24262,397],{"class":134},[74,24264,10245],{"class":84},[74,24266,24267],{"class":144}," \u002F\u002Fp对象已经创建完毕\n",[74,24269,24270,24272,24275,24278],{"class":76,"line":1726},[74,24271,23710],{"class":84},[74,24273,24274],{"class":1925},"newman",[74,24276,24277],{"class":84},"(man);",[74,24279,24280],{"class":144}," \u002F\u002F调用拷贝构造函数\n",[74,24282,24283,24286,24288,24291],{"class":76,"line":1740},[74,24284,24285],{"class":84},"    Person newman2 ",[74,24287,131],{"class":80},[74,24289,24290],{"class":84}," man;",[74,24292,24293],{"class":144}," \u002F\u002F拷贝构造\n",[74,24295,24296],{"class":76,"line":1745},[74,24297,2363],{"emptyLinePlaceholder":2362},[74,24299,24300],{"class":76,"line":2540},[74,24301,24302],{"class":144},"    \u002F\u002FPerson newman3;\n",[74,24304,24305,24308],{"class":76,"line":2554},[74,24306,24307],{"class":144},"    \u002F\u002Fnewman3 = man;",[74,24309,24310],{"class":144}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[74,24312,24313],{"class":76,"line":2562},[74,24314,1527],{"class":84},[74,24316,24317],{"class":76,"line":2567},[74,24318,2363],{"emptyLinePlaceholder":2362},[74,24320,24321],{"class":76,"line":2573},[74,24322,24323],{"class":144},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[74,24325,24326],{"class":76,"line":2579},[74,24327,24328],{"class":144},"\u002F\u002F相当于Person p1 = p;\n",[74,24330,24331,24333,24335,24337,24339,24342],{"class":76,"line":2584},[74,24332,9643],{"class":80},[74,24334,23765],{"class":1925},[74,24336,85],{"class":84},[74,24338,23325],{"class":1925},[74,24340,24341],{"class":9495}," p1",[74,24343,24344],{"class":84},") {}\n",[74,24346,24347,24349,24351],{"class":76,"line":12227},[74,24348,9643],{"class":80},[74,24350,9936],{"class":1925},[74,24352,15132],{"class":84},[74,24354,24355,24357],{"class":76,"line":12251},[74,24356,22883],{"class":84},[74,24358,24359],{"class":144}," \u002F\u002F无参构造函数\n",[74,24361,24362,24364],{"class":76,"line":12256},[74,24363,23815],{"class":1925},[74,24365,23818],{"class":84},[74,24367,24368],{"class":76,"line":12262},[74,24369,1527],{"class":84},[74,24371,24372],{"class":76,"line":12289},[74,24373,2363],{"emptyLinePlaceholder":2362},[74,24375,24376],{"class":76,"line":12294},[74,24377,24378],{"class":144},"\u002F\u002F3. 以值方式返回局部对象\n",[74,24380,24381,24383,24385],{"class":76,"line":12300},[74,24382,23325],{"class":1925},[74,24384,23834],{"class":1925},[74,24386,1938],{"class":84},[74,24388,24389],{"class":76,"line":12312},[74,24390,1508],{"class":84},[74,24392,24393],{"class":76,"line":12324},[74,24394,23315],{"class":84},[74,24396,24397,24399,24401,24403,24405,24407,24409,24411,24414,24416],{"class":76,"line":12336},[74,24398,10808],{"class":84},[74,24400,1130],{"class":80},[74,24402,1620],{"class":84},[74,24404,88],{"class":80},[74,24406,10797],{"class":80},[74,24408,515],{"class":84},[74,24410,439],{"class":80},[74,24412,24413],{"class":84},"p1 ",[74,24415,1130],{"class":80},[74,24417,13119],{"class":84},[74,24419,24420,24422],{"class":76,"line":13995},[74,24421,4053],{"class":80},[74,24423,24424],{"class":84}," p1;\n",[74,24426,24427],{"class":76,"line":14020},[74,24428,1527],{"class":84},[74,24430,24431],{"class":76,"line":14043},[74,24432,2363],{"emptyLinePlaceholder":2362},[74,24434,24435,24437,24439],{"class":76,"line":14067},[74,24436,9643],{"class":80},[74,24438,10008],{"class":1925},[74,24440,1938],{"class":84},[74,24442,24443],{"class":76,"line":14072},[74,24444,1508],{"class":84},[74,24446,24447,24449,24451,24453],{"class":76,"line":14077},[74,24448,23900],{"class":84},[74,24450,131],{"class":80},[74,24452,23834],{"class":1925},[74,24454,9915],{"class":84},[74,24456,24457,24459,24461,24463,24465,24467,24469,24471,24473,24475],{"class":76,"line":14082},[74,24458,10808],{"class":84},[74,24460,1130],{"class":80},[74,24462,1620],{"class":84},[74,24464,88],{"class":80},[74,24466,10797],{"class":80},[74,24468,515],{"class":84},[74,24470,439],{"class":80},[74,24472,15727],{"class":84},[74,24474,1130],{"class":80},[74,24476,13119],{"class":84},[74,24478,24479],{"class":76,"line":14091},[74,24480,1527],{"class":84},[74,24482,24483],{"class":76,"line":14096},[74,24484,2363],{"emptyLinePlaceholder":2362},[74,24486,24487],{"class":76,"line":14102},[74,24488,2363],{"emptyLinePlaceholder":2362},[74,24490,24491,24493,24495],{"class":76,"line":14123},[74,24492,88],{"class":80},[74,24494,1935],{"class":1925},[74,24496,15132],{"class":84},[74,24498,24499],{"class":76,"line":14129},[74,24500,2363],{"emptyLinePlaceholder":2362},[74,24502,24503],{"class":76,"line":14143},[74,24504,24505],{"class":144},"    \u002F\u002Ftest01();\n",[74,24507,24508],{"class":76,"line":14149},[74,24509,24510],{"class":144},"    \u002F\u002Ftest02();\n",[74,24512,24513,24515],{"class":76,"line":14176},[74,24514,23970],{"class":1925},[74,24516,9915],{"class":84},[74,24518,24519],{"class":76,"line":14185},[74,24520,2363],{"emptyLinePlaceholder":2362},[74,24522,24523,24525,24527,24529],{"class":76,"line":14191},[74,24524,2265],{"class":1925},[74,24526,85],{"class":84},[74,24528,2270],{"class":190},[74,24530,2682],{"class":84},[74,24532,24533],{"class":76,"line":14199},[74,24534,2363],{"emptyLinePlaceholder":2362},[74,24536,24537,24539,24541],{"class":76,"line":14204},[74,24538,4053],{"class":80},[74,24540,4056],{"class":134},[74,24542,1252],{"class":84},[74,24544,24545],{"class":76,"line":20883},[74,24546,1527],{"class":84},[44,24548,24550],{"id":24549},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,24552,24553],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,24555,24556],{},"1．默认构造函数(无参，函数体为空)",[19,24558,24559],{},"2．默认析构函数(无参，函数体为空)",[19,24561,24562],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,24564,24565],{},"构造函数调用规则如下：",[1093,24567,24568,24571],{},[30,24569,24570],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[30,24572,24573],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[64,24575,24577],{"className":66,"code":24576,"language":68,"meta":69,"style":69},"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",[71,24578,24579,24587,24591,24596,24602,24614,24618,24623,24635,24644,24656,24660,24664,24680,24689,24701,24705,24709,24715,24727,24731,24735,24741,24745,24749,24757,24761,24773,24778,24786,24790,24808,24812,24816,24824,24828,24833,24841,24856,24869,24873,24878,24885,24901,24914,24918,24922,24930,24934,24940,24944,24954,24958,24966],{"__ignoreMap":69},[74,24580,24581,24583,24585],{"class":76,"line":77},[74,24582,18973],{"class":80},[74,24584,19848],{"class":1925},[74,24586,19851],{"class":84},[74,24588,24589],{"class":76,"line":94},[74,24590,18995],{"class":80},[74,24592,24593],{"class":76,"line":1141},[74,24594,24595],{"class":144},"    \u002F\u002F无参（默认）构造函数\n",[74,24597,24598,24600],{"class":76,"line":1156},[74,24599,22798],{"class":1925},[74,24601,15132],{"class":84},[74,24603,24604,24606,24608,24610,24612],{"class":76,"line":1162},[74,24605,13948],{"class":84},[74,24607,1130],{"class":80},[74,24609,24089],{"class":190},[74,24611,1406],{"class":80},[74,24613,13119],{"class":84},[74,24615,24616],{"class":76,"line":1176},[74,24617,2149],{"class":84},[74,24619,24620],{"class":76,"line":1182},[74,24621,24622],{"class":144},"    \u002F\u002F有参构造函数\n",[74,24624,24625,24627,24629,24631,24633],{"class":76,"line":1273},[74,24626,22798],{"class":1925},[74,24628,85],{"class":84},[74,24630,88],{"class":80},[74,24632,1360],{"class":9495},[74,24634,16721],{"class":84},[74,24636,24637,24640,24642],{"class":76,"line":1279},[74,24638,24639],{"class":84},"        age ",[74,24641,131],{"class":80},[74,24643,1394],{"class":84},[74,24645,24646,24648,24650,24652,24654],{"class":76,"line":1291},[74,24647,13948],{"class":84},[74,24649,1130],{"class":80},[74,24651,24129],{"class":190},[74,24653,1406],{"class":80},[74,24655,13119],{"class":84},[74,24657,24658],{"class":76,"line":1574},[74,24659,2149],{"class":84},[74,24661,24662],{"class":76,"line":1579},[74,24663,23153],{"class":144},[74,24665,24666,24668,24670,24672,24674,24676,24678],{"class":76,"line":1585},[74,24667,22798],{"class":1925},[74,24669,85],{"class":84},[74,24671,11071],{"class":80},[74,24673,19848],{"class":1925},[74,24675,439],{"class":80},[74,24677,11104],{"class":9495},[74,24679,16721],{"class":84},[74,24681,24682,24684,24686],{"class":76,"line":1590},[74,24683,24639],{"class":84},[74,24685,131],{"class":80},[74,24687,24688],{"class":84}," p.age;\n",[74,24690,24691,24693,24695,24697,24699],{"class":76,"line":1604},[74,24692,13948],{"class":84},[74,24694,1130],{"class":80},[74,24696,24170],{"class":190},[74,24698,1406],{"class":80},[74,24700,13119],{"class":84},[74,24702,24703],{"class":76,"line":1609},[74,24704,2149],{"class":84},[74,24706,24707],{"class":76,"line":1615},[74,24708,22826],{"class":144},[74,24710,24711,24713],{"class":76,"line":1636},[74,24712,22831],{"class":1925},[74,24714,15132],{"class":84},[74,24716,24717,24719,24721,24723,24725],{"class":76,"line":1641},[74,24718,13948],{"class":84},[74,24720,1130],{"class":80},[74,24722,24207],{"class":190},[74,24724,1406],{"class":80},[74,24726,13119],{"class":84},[74,24728,24729],{"class":76,"line":1655},[74,24730,2149],{"class":84},[74,24732,24733],{"class":76,"line":1660},[74,24734,18995],{"class":80},[74,24736,24737,24739],{"class":76,"line":1689},[74,24738,1947],{"class":80},[74,24740,12076],{"class":84},[74,24742,24743],{"class":76,"line":1694},[74,24744,3958],{"class":84},[74,24746,24747],{"class":76,"line":1711},[74,24748,2363],{"emptyLinePlaceholder":2362},[74,24750,24751,24753,24755],{"class":76,"line":1716},[74,24752,9643],{"class":80},[74,24754,9867],{"class":1925},[74,24756,1938],{"class":84},[74,24758,24759],{"class":76,"line":1721},[74,24760,1508],{"class":84},[74,24762,24763,24765,24767,24769,24771],{"class":76,"line":1726},[74,24764,23710],{"class":84},[74,24766,11409],{"class":1925},[74,24768,85],{"class":84},[74,24770,736],{"class":134},[74,24772,2682],{"class":84},[74,24774,24775],{"class":76,"line":1740},[74,24776,24777],{"class":144},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[74,24779,24780,24782,24784],{"class":76,"line":1745},[74,24781,23710],{"class":84},[74,24783,11312],{"class":1925},[74,24785,21794],{"class":84},[74,24787,24788],{"class":76,"line":2540},[74,24789,2363],{"emptyLinePlaceholder":2362},[74,24791,24792,24794,24796,24799,24801,24804,24806],{"class":76,"line":2554},[74,24793,10808],{"class":84},[74,24795,1130],{"class":80},[74,24797,24798],{"class":190}," \"p2的年龄为： \"",[74,24800,1406],{"class":80},[74,24802,24803],{"class":84}," p2.age ",[74,24805,1130],{"class":80},[74,24807,13119],{"class":84},[74,24809,24810],{"class":76,"line":2562},[74,24811,1527],{"class":84},[74,24813,24814],{"class":76,"line":2567},[74,24815,2363],{"emptyLinePlaceholder":2362},[74,24817,24818,24820,24822],{"class":76,"line":2573},[74,24819,9643],{"class":80},[74,24821,9936],{"class":1925},[74,24823,1938],{"class":84},[74,24825,24826],{"class":76,"line":2579},[74,24827,1508],{"class":84},[74,24829,24830],{"class":76,"line":2584},[74,24831,24832],{"class":144},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[74,24834,24835,24838],{"class":76,"line":12227},[74,24836,24837],{"class":84},"    Person p1;",[74,24839,24840],{"class":144}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[74,24842,24843,24845,24847,24849,24851,24853],{"class":76,"line":12251},[74,24844,23710],{"class":84},[74,24846,11312],{"class":1925},[74,24848,85],{"class":84},[74,24850,532],{"class":134},[74,24852,10245],{"class":84},[74,24854,24855],{"class":144}," \u002F\u002F用户提供的有参\n",[74,24857,24858,24860,24863,24866],{"class":76,"line":12256},[74,24859,23710],{"class":84},[74,24861,24862],{"class":1925},"p3",[74,24864,24865],{"class":84},"(p2);",[74,24867,24868],{"class":144}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[74,24870,24871],{"class":76,"line":12262},[74,24872,2363],{"emptyLinePlaceholder":2362},[74,24874,24875],{"class":76,"line":12289},[74,24876,24877],{"class":144},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[74,24879,24880,24883],{"class":76,"line":12294},[74,24881,24882],{"class":84},"    Person p4;",[74,24884,24840],{"class":144},[74,24886,24887,24889,24892,24894,24896,24898],{"class":76,"line":12300},[74,24888,23710],{"class":84},[74,24890,24891],{"class":1925},"p5",[74,24893,85],{"class":84},[74,24895,532],{"class":134},[74,24897,10245],{"class":84},[74,24899,24900],{"class":144}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[74,24902,24903,24905,24908,24911],{"class":76,"line":12312},[74,24904,23710],{"class":84},[74,24906,24907],{"class":1925},"p6",[74,24909,24910],{"class":84},"(p5);",[74,24912,24913],{"class":144}," \u002F\u002F用户自己提供拷贝构造\n",[74,24915,24916],{"class":76,"line":12324},[74,24917,1527],{"class":84},[74,24919,24920],{"class":76,"line":12336},[74,24921,2363],{"emptyLinePlaceholder":2362},[74,24923,24924,24926,24928],{"class":76,"line":13995},[74,24925,88],{"class":80},[74,24927,1935],{"class":1925},[74,24929,15132],{"class":84},[74,24931,24932],{"class":76,"line":14020},[74,24933,2363],{"emptyLinePlaceholder":2362},[74,24935,24936,24938],{"class":76,"line":14043},[74,24937,9912],{"class":1925},[74,24939,9915],{"class":84},[74,24941,24942],{"class":76,"line":14067},[74,24943,2363],{"emptyLinePlaceholder":2362},[74,24945,24946,24948,24950,24952],{"class":76,"line":14072},[74,24947,2265],{"class":1925},[74,24949,85],{"class":84},[74,24951,2270],{"class":190},[74,24953,2682],{"class":84},[74,24955,24956],{"class":76,"line":14077},[74,24957,2363],{"emptyLinePlaceholder":2362},[74,24959,24960,24962,24964],{"class":76,"line":14082},[74,24961,4053],{"class":80},[74,24963,4056],{"class":134},[74,24965,1252],{"class":84},[74,24967,24968],{"class":76,"line":14091},[74,24969,1527],{"class":84},[44,24971,24973],{"id":24972},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,24975,24976],{},"浅拷贝：简单的赋值拷贝操作",[19,24978,24979],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[64,24981,24983],{"className":66,"code":24982,"language":68,"meta":69,"style":69},"#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",[71,24984,24985,24991,25001,25007,25011,25015,25020,25026,25030,25043,25047,25051,25058,25062,25072,25087,25100,25104,25109,25114,25130,25134,25147,25152,25157,25162,25171,25176,25191,25195,25199,25203,25209,25213,25218,25233,25237,25248,25262,25266,25275,25279,25285,25297,25301,25309,25313,25330,25361,25369,25397,25401,25405,25413,25417,25423],{"__ignoreMap":69},[74,24986,24987,24989],{"class":76,"line":77},[74,24988,1911],{"class":80},[74,24990,1914],{"class":190},[74,24992,24993,24995,24997,24999],{"class":76,"line":94},[74,24994,1919],{"class":80},[74,24996,1922],{"class":80},[74,24998,1926],{"class":1925},[74,25000,1252],{"class":84},[74,25002,25003,25005],{"class":76,"line":1141},[74,25004,18973],{"class":80},[74,25006,19450],{"class":1925},[74,25008,25009],{"class":76,"line":1156},[74,25010,1508],{"class":84},[74,25012,25013],{"class":76,"line":1162},[74,25014,18995],{"class":80},[74,25016,25017],{"class":76,"line":1176},[74,25018,25019],{"class":144},"    \u002F\u002F默认构造函数\n",[74,25021,25022,25024],{"class":76,"line":1182},[74,25023,22798],{"class":1925},[74,25025,1938],{"class":84},[74,25027,25028],{"class":76,"line":1273},[74,25029,1992],{"class":84},[74,25031,25032,25034,25036,25039,25041],{"class":76,"line":1279},[74,25033,3414],{"class":84},[74,25035,1130],{"class":80},[74,25037,25038],{"class":190},"\"默认构造函数\"",[74,25040,1130],{"class":80},[74,25042,1153],{"class":84},[74,25044,25045],{"class":76,"line":1291},[74,25046,2149],{"class":84},[74,25048,25049],{"class":76,"line":1574},[74,25050,24622],{"class":144},[74,25052,25053,25055],{"class":76,"line":1579},[74,25054,22831],{"class":1925},[74,25056,25057],{"class":84},"(int age,int height)\n",[74,25059,25060],{"class":76,"line":1585},[74,25061,1992],{"class":84},[74,25063,25064,25067,25069],{"class":76,"line":1590},[74,25065,25066],{"class":84},"        m_Age",[74,25068,131],{"class":80},[74,25070,25071],{"class":84},"age;\n",[74,25073,25074,25077,25079,25081,25084],{"class":76,"line":1604},[74,25075,25076],{"class":84},"        m_Height",[74,25078,15996],{"class":80},[74,25080,2344],{"class":80},[74,25082,25083],{"class":84},"(height);",[74,25085,25086],{"class":144},"\u002F\u002F放到堆区\n",[74,25088,25089,25091,25093,25096,25098],{"class":76,"line":1609},[74,25090,3414],{"class":84},[74,25092,1130],{"class":80},[74,25094,25095],{"class":190},"\"有参构造函数\"",[74,25097,1130],{"class":80},[74,25099,1153],{"class":84},[74,25101,25102],{"class":76,"line":1615},[74,25103,2149],{"class":84},[74,25105,25106],{"class":76,"line":1636},[74,25107,25108],{"class":144},"    \u002F\u002F深拷贝解决上述问题\n",[74,25110,25111],{"class":76,"line":1641},[74,25112,25113],{"class":144},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[74,25115,25116,25118,25120,25122,25124,25126,25128],{"class":76,"line":1655},[74,25117,22798],{"class":1925},[74,25119,85],{"class":84},[74,25121,11071],{"class":80},[74,25123,19848],{"class":1925},[74,25125,14863],{"class":80},[74,25127,19],{"class":9495},[74,25129,91],{"class":84},[74,25131,25132],{"class":76,"line":1660},[74,25133,1992],{"class":84},[74,25135,25136,25138,25140,25143,25145],{"class":76,"line":1689},[74,25137,3414],{"class":84},[74,25139,1130],{"class":80},[74,25141,25142],{"class":190},"\"拷贝构造函数\"",[74,25144,1130],{"class":80},[74,25146,1153],{"class":84},[74,25148,25149],{"class":76,"line":1694},[74,25150,25151],{"class":144},"        \u002F\u002F编译器默认的写如下注释部分\n",[74,25153,25154],{"class":76,"line":1711},[74,25155,25156],{"class":144},"        \u002F\u002Fm_Age=p.m_Age;\n",[74,25158,25159],{"class":76,"line":1716},[74,25160,25161],{"class":144},"        \u002F\u002Fm_Height=p.m_Height;\n",[74,25163,25164,25166,25168],{"class":76,"line":1721},[74,25165,25066],{"class":84},[74,25167,131],{"class":80},[74,25169,25170],{"class":84},"p.m_Age;\n",[74,25172,25173],{"class":76,"line":1726},[74,25174,25175],{"class":144},"        \u002F\u002F深拷贝操作\n",[74,25177,25178,25180,25182,25184,25186,25188],{"class":76,"line":1740},[74,25179,25076],{"class":84},[74,25181,15996],{"class":80},[74,25183,2344],{"class":80},[74,25185,85],{"class":84},[74,25187,541],{"class":80},[74,25189,25190],{"class":84},"p.m_Height);\n",[74,25192,25193],{"class":76,"line":1745},[74,25194,2149],{"class":84},[74,25196,25197],{"class":76,"line":2540},[74,25198,2363],{"emptyLinePlaceholder":2362},[74,25200,25201],{"class":76,"line":2554},[74,25202,22826],{"class":144},[74,25204,25205,25207],{"class":76,"line":2562},[74,25206,22831],{"class":1925},[74,25208,1938],{"class":84},[74,25210,25211],{"class":76,"line":2567},[74,25212,1992],{"class":84},[74,25214,25215],{"class":76,"line":2573},[74,25216,25217],{"class":144},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[74,25219,25220,25222,25225,25228,25231],{"class":76,"line":2579},[74,25221,2460],{"class":80},[74,25223,25224],{"class":84},"(m_Height ",[74,25226,25227],{"class":80},"!=",[74,25229,25230],{"class":134}," NULL",[74,25232,91],{"class":84},[74,25234,25235],{"class":76,"line":2584},[74,25236,2473],{"class":84},[74,25238,25239,25242,25245],{"class":76,"line":12227},[74,25240,25241],{"class":80},"            delete",[74,25243,25244],{"class":84}," m_Height;",[74,25246,25247],{"class":144}," \u002F\u002F释放堆区内存\n",[74,25249,25250,25253,25255,25257,25259],{"class":76,"line":12251},[74,25251,25252],{"class":84},"            m_Height",[74,25254,131],{"class":80},[74,25256,2354],{"class":134},[74,25258,141],{"class":84},[74,25260,25261],{"class":144}," \u002F\u002F防止野指针\n",[74,25263,25264],{"class":76,"line":12256},[74,25265,2492],{"class":84},[74,25267,25268,25270,25272],{"class":76,"line":12262},[74,25269,3414],{"class":84},[74,25271,1130],{"class":80},[74,25273,25274],{"class":190},"\"Person的析构函数调用\"\n",[74,25276,25277],{"class":76,"line":12289},[74,25278,2149],{"class":84},[74,25280,25281,25283],{"class":76,"line":12294},[74,25282,1947],{"class":80},[74,25284,19945],{"class":84},[74,25286,25287,25289,25291,25294],{"class":76,"line":12300},[74,25288,1947],{"class":80},[74,25290,10797],{"class":80},[74,25292,25293],{"class":84},"m_Height;",[74,25295,25296],{"class":144}," \u002F\u002F定义一个指针，指向身高\n",[74,25298,25299],{"class":76,"line":12312},[74,25300,3958],{"class":84},[74,25302,25303,25305,25307],{"class":76,"line":12324},[74,25304,9643],{"class":80},[74,25306,9867],{"class":1925},[74,25308,1938],{"class":84},[74,25310,25311],{"class":76,"line":12336},[74,25312,1508],{"class":84},[74,25314,25315,25317,25319,25321,25323,25325,25328],{"class":76,"line":13995},[74,25316,23710],{"class":84},[74,25318,11409],{"class":1925},[74,25320,85],{"class":84},[74,25322,736],{"class":134},[74,25324,464],{"class":84},[74,25326,25327],{"class":134},"160",[74,25329,2682],{"class":84},[74,25331,25332,25334,25336,25339,25341,25344,25346,25349,25351,25354,25356,25358],{"class":76,"line":14020},[74,25333,1513],{"class":84},[74,25335,1130],{"class":80},[74,25337,25338],{"class":190},"\"p1的年龄为:\"",[74,25340,1130],{"class":80},[74,25342,25343],{"class":84},"p1.m_Age",[74,25345,1130],{"class":80},[74,25347,25348],{"class":190},"\"身高为：\"",[74,25350,10698],{"class":80},[74,25352,25353],{"class":84},"p1.m_Height",[74,25355,1130],{"class":80},[74,25357,1200],{"class":84},[74,25359,25360],{"class":144},"  \u002F\u002F18\n",[74,25362,25363,25365,25367],{"class":76,"line":14043},[74,25364,23710],{"class":84},[74,25366,11312],{"class":1925},[74,25368,21794],{"class":84},[74,25370,25371,25373,25375,25378,25380,25382,25384,25386,25388,25391,25393,25395],{"class":76,"line":14067},[74,25372,1513],{"class":84},[74,25374,1130],{"class":80},[74,25376,25377],{"class":190},"\"p2的年龄为：\"",[74,25379,1130],{"class":80},[74,25381,23740],{"class":84},[74,25383,1130],{"class":80},[74,25385,25348],{"class":190},[74,25387,10698],{"class":80},[74,25389,25390],{"class":84},"p2.m_Height",[74,25392,1130],{"class":80},[74,25394,1200],{"class":84},[74,25396,25360],{"class":144},[74,25398,25399],{"class":76,"line":14072},[74,25400,17489],{"class":84},[74,25402,25403],{"class":76,"line":14077},[74,25404,1527],{"class":84},[74,25406,25407,25409,25411],{"class":76,"line":14082},[74,25408,88],{"class":80},[74,25410,1935],{"class":1925},[74,25412,1938],{"class":84},[74,25414,25415],{"class":76,"line":14091},[74,25416,1508],{"class":84},[74,25418,25419,25421],{"class":76,"line":14096},[74,25420,9912],{"class":1925},[74,25422,9915],{"class":84},[74,25424,25425],{"class":76,"line":14102},[74,25426,1527],{"class":84},[19,25428,25429],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,25431,25432],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,25434,25435],{},[1424,25436],{"alt":69,"src":25437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,25439,25440],{},"浅拷贝问题要使用深拷贝来解决",[19,25442,25443],{},[1424,25444],{"alt":69,"src":25445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,25447,25448],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[44,25450,25452],{"id":25451},"_826初始化列表","8.2.6初始化列表",[19,25454,25455],{},"作用：初始化属性",[19,25457,9460],{},[64,25459,25462],{"className":25460,"code":25461,"language":9466},[9464],"构造函数():属性1(值1),属性2(值2).....{}\n",[71,25463,25461],{"__ignoreMap":69},[19,25465,25466],{},"例子",[64,25468,25470],{"className":66,"code":25469,"language":68,"meta":69,"style":69},"#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",[71,25471,25472,25478,25488,25494,25498,25503,25507,25512,25517,25522,25527,25532,25537,25541,25546,25551,25594,25603,25621,25639,25657,25661,25665,25672,25679,25686,25690,25694,25702,25706,25710,25730,25739,25743,25747,25757,25761,25769],{"__ignoreMap":69},[74,25473,25474,25476],{"class":76,"line":77},[74,25475,1911],{"class":80},[74,25477,1914],{"class":190},[74,25479,25480,25482,25484,25486],{"class":76,"line":94},[74,25481,1919],{"class":80},[74,25483,1922],{"class":80},[74,25485,1926],{"class":1925},[74,25487,1252],{"class":84},[74,25489,25490,25492],{"class":76,"line":1141},[74,25491,18973],{"class":80},[74,25493,19450],{"class":1925},[74,25495,25496],{"class":76,"line":1156},[74,25497,1508],{"class":84},[74,25499,25500],{"class":76,"line":1162},[74,25501,25502],{"class":80},"    public:\n",[74,25504,25505],{"class":76,"line":1176},[74,25506,2363],{"emptyLinePlaceholder":2362},[74,25508,25509],{"class":76,"line":1182},[74,25510,25511],{"class":144},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[74,25513,25514],{"class":76,"line":1273},[74,25515,25516],{"class":144},"    \u002F\u002FPerson(int a, int b, int c) {\n",[74,25518,25519],{"class":76,"line":1279},[74,25520,25521],{"class":144},"    \u002F\u002F  m_A = a;\n",[74,25523,25524],{"class":76,"line":1291},[74,25525,25526],{"class":144},"    \u002F\u002F  m_B = b;\n",[74,25528,25529],{"class":76,"line":1574},[74,25530,25531],{"class":144},"    \u002F\u002F  m_C = c;\n",[74,25533,25534],{"class":76,"line":1579},[74,25535,25536],{"class":144},"    \u002F\u002F}\n",[74,25538,25539],{"class":76,"line":1585},[74,25540,2363],{"emptyLinePlaceholder":2362},[74,25542,25543],{"class":76,"line":1590},[74,25544,25545],{"class":144},"    \u002F\u002F初始化列表方式初始化\n",[74,25547,25548],{"class":76,"line":1604},[74,25549,25550],{"class":144},"    \u002F\u002F使用有参构造函数\n",[74,25552,25553,25555,25557,25559,25561,25563,25565,25567,25569,25571,25573,25576,25579,25582,25585,25588,25591],{"class":76,"line":1609},[74,25554,22798],{"class":1925},[74,25556,85],{"class":84},[74,25558,88],{"class":80},[74,25560,1360],{"class":9495},[74,25562,16714],{"class":84},[74,25564,88],{"class":80},[74,25566,2796],{"class":9495},[74,25568,16714],{"class":84},[74,25570,88],{"class":80},[74,25572,2812],{"class":9495},[74,25574,25575],{"class":84},") :",[74,25577,25578],{"class":1925},"m_A",[74,25580,25581],{"class":84},"(a), ",[74,25583,25584],{"class":1925},"m_B",[74,25586,25587],{"class":84},"(b), ",[74,25589,25590],{"class":1925},"m_C",[74,25592,25593],{"class":84},"(c) {}\n",[74,25595,25596,25598,25601],{"class":76,"line":1615},[74,25597,19188],{"class":80},[74,25599,25600],{"class":1925}," PrintPerson",[74,25602,15132],{"class":84},[74,25604,25605,25607,25609,25612,25614,25617,25619],{"class":76,"line":1636},[74,25606,13948],{"class":84},[74,25608,1130],{"class":80},[74,25610,25611],{"class":190}," \"mA:\"",[74,25613,1406],{"class":80},[74,25615,25616],{"class":84}," m_A ",[74,25618,1130],{"class":80},[74,25620,13119],{"class":84},[74,25622,25623,25625,25627,25630,25632,25635,25637],{"class":76,"line":1641},[74,25624,13948],{"class":84},[74,25626,1130],{"class":80},[74,25628,25629],{"class":190}," \"mB:\"",[74,25631,1406],{"class":80},[74,25633,25634],{"class":84}," m_B ",[74,25636,1130],{"class":80},[74,25638,13119],{"class":84},[74,25640,25641,25643,25645,25648,25650,25653,25655],{"class":76,"line":1655},[74,25642,13948],{"class":84},[74,25644,1130],{"class":80},[74,25646,25647],{"class":190}," \"mC:\"",[74,25649,1406],{"class":80},[74,25651,25652],{"class":84}," m_C ",[74,25654,1130],{"class":80},[74,25656,13119],{"class":84},[74,25658,25659],{"class":76,"line":1660},[74,25660,2149],{"class":84},[74,25662,25663],{"class":76,"line":1689},[74,25664,19501],{"class":80},[74,25666,25667,25669],{"class":76,"line":1694},[74,25668,1947],{"class":80},[74,25670,25671],{"class":84}," m_A;\n",[74,25673,25674,25676],{"class":76,"line":1711},[74,25675,1947],{"class":80},[74,25677,25678],{"class":84}," m_B;\n",[74,25680,25681,25683],{"class":76,"line":1716},[74,25682,1947],{"class":80},[74,25684,25685],{"class":84}," m_C;\n",[74,25687,25688],{"class":76,"line":1721},[74,25689,3958],{"class":84},[74,25691,25692],{"class":76,"line":1726},[74,25693,2363],{"emptyLinePlaceholder":2362},[74,25695,25696,25698,25700],{"class":76,"line":1740},[74,25697,88],{"class":80},[74,25699,1935],{"class":1925},[74,25701,10257],{"class":84},[74,25703,25704],{"class":76,"line":1745},[74,25705,1508],{"class":84},[74,25707,25708],{"class":76,"line":2540},[74,25709,2363],{"emptyLinePlaceholder":2362},[74,25711,25712,25714,25716,25718,25720,25722,25724,25726,25728],{"class":76,"line":2554},[74,25713,23710],{"class":84},[74,25715,19],{"class":1925},[74,25717,85],{"class":84},[74,25719,303],{"class":134},[74,25721,16714],{"class":84},[74,25723,163],{"class":134},[74,25725,16714],{"class":84},[74,25727,157],{"class":134},[74,25729,2682],{"class":84},[74,25731,25732,25734,25737],{"class":76,"line":2562},[74,25733,20145],{"class":84},[74,25735,25736],{"class":1925},"PrintPerson",[74,25738,9915],{"class":84},[74,25740,25741],{"class":76,"line":2567},[74,25742,2363],{"emptyLinePlaceholder":2362},[74,25744,25745],{"class":76,"line":2573},[74,25746,2363],{"emptyLinePlaceholder":2362},[74,25748,25749,25751,25753,25755],{"class":76,"line":2579},[74,25750,2265],{"class":1925},[74,25752,85],{"class":84},[74,25754,2270],{"class":190},[74,25756,2682],{"class":84},[74,25758,25759],{"class":76,"line":2584},[74,25760,2363],{"emptyLinePlaceholder":2362},[74,25762,25763,25765,25767],{"class":76,"line":12227},[74,25764,4053],{"class":80},[74,25766,4056],{"class":134},[74,25768,1252],{"class":84},[74,25770,25771],{"class":76,"line":12251},[74,25772,1527],{"class":84},[19,25774,25775,25776,25779,25780],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[235,25777,25778],{},"参数名就是定义的对象属性","，",[235,25781,25782],{},"属性后面的值为有参构造函数的形参",[64,25784,25786],{"className":66,"code":25785,"language":68,"meta":69,"style":69},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[71,25787,25788],{"__ignoreMap":69},[74,25789,25790,25792,25794,25796,25799,25801,25804,25806,25809,25811,25814,25816,25819,25821],{"class":76,"line":77},[74,25791,23325],{"class":1925},[74,25793,85],{"class":84},[74,25795,88],{"class":80},[74,25797,25798],{"class":84}," a.",[74,25800,88],{"class":80},[74,25802,25803],{"class":84}," b,",[74,25805,88],{"class":80},[74,25807,25808],{"class":84}," b):",[74,25810,25578],{"class":1925},[74,25812,25813],{"class":84},"(a),",[74,25815,25584],{"class":1925},[74,25817,25818],{"class":84},"(c),",[74,25820,25590],{"class":1925},[74,25822,25823],{"class":84},"(b) {}\n",[44,25825,25827],{"id":25826},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,25829,25830],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,25832,18912],{},[64,25834,25836],{"className":66,"code":25835,"language":68,"meta":69,"style":69},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[71,25837,25838,25843,25848,25852,25857,25861],{"__ignoreMap":69},[74,25839,25840],{"class":76,"line":77},[74,25841,25842],{"class":84},"A{};\n",[74,25844,25845],{"class":76,"line":94},[74,25846,25847],{"class":84},"B\n",[74,25849,25850],{"class":76,"line":1141},[74,25851,1508],{"class":84},[74,25853,25854],{"class":76,"line":1156},[74,25855,25856],{"class":84},"    A a;\n",[74,25858,25859],{"class":76,"line":1162},[74,25860,1527],{"class":84},[74,25862,25863],{"class":76,"line":1176},[74,25864,25865],{"class":144},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,25867,25868],{},"案例",[64,25870,25872],{"className":66,"code":25871,"language":68,"meta":69,"style":69},"\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",[71,25873,25874,25879,25886,25890,25895,25900,25914,25918,25928,25939,25943,25950,25954,25967,25971,25976,25981,25985,25991,25995,25999,26003,26034,26038,26049,26053,26059,26063,26076,26080,26084,26088,26093,26098,26102,26110,26114,26131,26150,26154,26162,26166,26172],{"__ignoreMap":69},[74,25875,25876],{"class":76,"line":77},[74,25877,25878],{"class":144},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[74,25880,25881,25883],{"class":76,"line":94},[74,25882,18973],{"class":80},[74,25884,25885],{"class":1925}," Phone\n",[74,25887,25888],{"class":76,"line":1141},[74,25889,1508],{"class":84},[74,25891,25892],{"class":76,"line":1156},[74,25893,25894],{"class":84},"public：\n",[74,25896,25897],{"class":76,"line":1162},[74,25898,25899],{"class":144},"    \u002F\u002F 赋值(构造函数)\n",[74,25901,25902,25905,25907,25909,25912],{"class":76,"line":1176},[74,25903,25904],{"class":1925},"    Phone",[74,25906,85],{"class":84},[74,25908,19196],{"class":1925},[74,25910,25911],{"class":9495}," pName",[74,25913,91],{"class":84},[74,25915,25916],{"class":76,"line":1182},[74,25917,1992],{"class":84},[74,25919,25920,25923,25925],{"class":76,"line":1273},[74,25921,25922],{"class":84},"        m_pName",[74,25924,131],{"class":80},[74,25926,25927],{"class":84},"pName;\n",[74,25929,25930,25932,25934,25937],{"class":76,"line":1279},[74,25931,3414],{"class":84},[74,25933,1130],{"class":80},[74,25935,25936],{"class":190},"\"Phone的构造函数调用\"",[74,25938,1252],{"class":84},[74,25940,25941],{"class":76,"line":1291},[74,25942,2149],{"class":84},[74,25944,25945,25948],{"class":76,"line":1574},[74,25946,25947],{"class":1925},"    ~Phone",[74,25949,1938],{"class":84},[74,25951,25952],{"class":76,"line":1579},[74,25953,1992],{"class":84},[74,25955,25956,25958,25960,25963,25965],{"class":76,"line":1585},[74,25957,3414],{"class":84},[74,25959,1130],{"class":80},[74,25961,25962],{"class":190},"\"Phone析构函数调用\"",[74,25964,1130],{"class":80},[74,25966,1153],{"class":84},[74,25968,25969],{"class":76,"line":1590},[74,25970,2149],{"class":84},[74,25972,25973],{"class":76,"line":1604},[74,25974,25975],{"class":144},"    \u002F\u002F\n",[74,25977,25978],{"class":76,"line":1609},[74,25979,25980],{"class":84},"    string m_PName;\n",[74,25982,25983],{"class":76,"line":1615},[74,25984,3958],{"class":84},[74,25986,25987,25989],{"class":76,"line":1636},[74,25988,18973],{"class":80},[74,25990,19450],{"class":1925},[74,25992,25993],{"class":76,"line":1641},[74,25994,1508],{"class":84},[74,25996,25997],{"class":76,"line":1655},[74,25998,18995],{"class":80},[74,26000,26001],{"class":76,"line":1660},[74,26002,21273],{"class":144},[74,26004,26005,26007,26009,26011,26013,26015,26017,26020,26023,26025,26028,26031],{"class":76,"line":1689},[74,26006,22798],{"class":1925},[74,26008,85],{"class":84},[74,26010,19196],{"class":1925},[74,26012,19199],{"class":9495},[74,26014,464],{"class":84},[74,26016,19196],{"class":1925},[74,26018,26019],{"class":9495}," pname",[74,26021,26022],{"class":84},"):",[74,26024,19289],{"class":1925},[74,26026,26027],{"class":84},"(name),m_phone.",[74,26029,26030],{"class":1925},"m_PName",[74,26032,26033],{"class":84},"(pname) \n",[74,26035,26036],{"class":76,"line":1694},[74,26037,1992],{"class":84},[74,26039,26040,26042,26044,26047],{"class":76,"line":1711},[74,26041,3414],{"class":84},[74,26043,1130],{"class":80},[74,26045,26046],{"class":190},"\"Person的构造函数调用\"",[74,26048,1252],{"class":84},[74,26050,26051],{"class":76,"line":1716},[74,26052,2149],{"class":84},[74,26054,26055,26057],{"class":76,"line":1721},[74,26056,22831],{"class":1925},[74,26058,1938],{"class":84},[74,26060,26061],{"class":76,"line":1726},[74,26062,1992],{"class":84},[74,26064,26065,26067,26069,26072,26074],{"class":76,"line":1740},[74,26066,3414],{"class":84},[74,26068,1130],{"class":80},[74,26070,26071],{"class":190},"\"Person析构函数调用\"",[74,26073,1130],{"class":80},[74,26075,1153],{"class":84},[74,26077,26078],{"class":76,"line":1745},[74,26079,2149],{"class":84},[74,26081,26082],{"class":76,"line":2540},[74,26083,12059],{"class":144},[74,26085,26086],{"class":76,"line":2554},[74,26087,19171],{"class":84},[74,26089,26090],{"class":76,"line":2562},[74,26091,26092],{"class":144},"    \u002F\u002F手机\n",[74,26094,26095],{"class":76,"line":2567},[74,26096,26097],{"class":84},"    Phone m_Phone;\n",[74,26099,26100],{"class":76,"line":2573},[74,26101,3958],{"class":84},[74,26103,26104,26106,26108],{"class":76,"line":2579},[74,26105,9643],{"class":80},[74,26107,9867],{"class":1925},[74,26109,1938],{"class":84},[74,26111,26112],{"class":76,"line":2584},[74,26113,1508],{"class":84},[74,26115,26116,26118,26120,26122,26124,26126,26129],{"class":76,"line":12227},[74,26117,23710],{"class":84},[74,26119,19],{"class":1925},[74,26121,85],{"class":84},[74,26123,12195],{"class":190},[74,26125,464],{"class":84},[74,26127,26128],{"class":190},"\"安卓\"",[74,26130,2682],{"class":84},[74,26132,26133,26135,26137,26140,26142,26145,26147],{"class":76,"line":12251},[74,26134,1513],{"class":84},[74,26136,1130],{"class":80},[74,26138,26139],{"class":84},"p.Name",[74,26141,1130],{"class":80},[74,26143,26144],{"class":190},"\"拿着：\"",[74,26146,1130],{"class":80},[74,26148,26149],{"class":84},"p.m_phone.m_PName;\n",[74,26151,26152],{"class":76,"line":12256},[74,26153,1527],{"class":84},[74,26155,26156,26158,26160],{"class":76,"line":12262},[74,26157,88],{"class":80},[74,26159,1935],{"class":1925},[74,26161,1938],{"class":84},[74,26163,26164],{"class":76,"line":12289},[74,26165,1508],{"class":84},[74,26167,26168,26170],{"class":76,"line":12294},[74,26169,9912],{"class":1925},[74,26171,9915],{"class":84},[74,26173,26174],{"class":76,"line":12300},[74,26175,1527],{"class":84},[19,26177,13304],{},[64,26179,26181],{"className":66,"code":26180,"language":68,"meta":69,"style":69},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[71,26182,26183,26188],{"__ignoreMap":69},[74,26184,26185],{"class":76,"line":77},[74,26186,26187],{"class":144},"    \u002F\u002F不需要写这个：\n",[74,26189,26190],{"class":76,"line":94},[74,26191,26192],{"class":144},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,26194,26195],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[64,26197,26199],{"className":66,"code":26198,"language":68,"meta":69,"style":69},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[71,26200,26201],{"__ignoreMap":69},[74,26202,26203,26205,26208,26210,26213,26216],{"class":76,"line":77},[74,26204,23325],{"class":1925},[74,26206,26207],{"class":84},"(string name.string pname):",[74,26209,19289],{"class":1925},[74,26211,26212],{"class":84},"(name),",[74,26214,26215],{"class":1925},"m_phone",[74,26217,26218],{"class":84},"(pname) {}\n",[19,26220,26221,26222,131,26225],{},"采用的是隐式转换法，实际为如下：\n",[71,26223,26224],{},"m_phone(pname)",[71,26226,26227],{},"Phone m_phone=pname",[19,26229,26230,26233],{},[235,26231,26232],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,26235,26236],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[44,26238,26240],{"id":26239},"_828静态对象","8.2.8静态对象",[19,26242,26243],{},"静态对象在成员对象前static，称为静态对象",[19,26245,26246],{},"静态对象分为两类：",[27,26248,26249],{},[30,26250,26251],{},"静态成员变量",[1093,26253,26254,26257,26260],{},[30,26255,26256],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[30,26258,26259],{},"②在编译阶段分配内存",[30,26261,26262],{},"③类内声明，类外初始化",[27,26264,26265],{"start":94},[30,26266,26267],{},"静态成员函数",[1093,26269,26270,26273],{},[30,26271,26272],{},"①所有对象共享同一个函数",[30,26274,26275],{},"②静态成员函数只能访问静态成员变量",[26277,26278,26280],"h4",{"id":26279},"_8281静态成员变量","8.2.8.1静态成员变量",[64,26282,26284],{"className":66,"code":26283,"language":68,"meta":69,"style":69},"#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",[71,26285,26286,26292,26302,26308,26312,26316,26321,26326,26331,26339,26343,26347,26351,26359,26363,26367,26372,26385,26389,26397,26401,26407],{"__ignoreMap":69},[74,26287,26288,26290],{"class":76,"line":77},[74,26289,1911],{"class":80},[74,26291,1914],{"class":190},[74,26293,26294,26296,26298,26300],{"class":76,"line":94},[74,26295,1919],{"class":80},[74,26297,1922],{"class":80},[74,26299,1926],{"class":1925},[74,26301,1252],{"class":84},[74,26303,26304,26306],{"class":76,"line":1141},[74,26305,18973],{"class":80},[74,26307,19450],{"class":1925},[74,26309,26310],{"class":76,"line":1156},[74,26311,1508],{"class":84},[74,26313,26314],{"class":76,"line":1162},[74,26315,18995],{"class":80},[74,26317,26318],{"class":76,"line":1176},[74,26319,26320],{"class":144},"    \u002F\u002F非静态成员变量\n",[74,26322,26323],{"class":76,"line":1182},[74,26324,26325],{"class":144},"    \u002F\u002F int m_A;\n",[74,26327,26328],{"class":76,"line":1273},[74,26329,26330],{"class":144},"    \u002F\u002F定义静态成员变量\n",[74,26332,26333,26335,26337],{"class":76,"line":1279},[74,26334,15299],{"class":80},[74,26336,2344],{"class":80},[74,26338,25671],{"class":84},[74,26340,26341],{"class":76,"line":1291},[74,26342,2363],{"emptyLinePlaceholder":2362},[74,26344,26345],{"class":76,"line":1574},[74,26346,2363],{"emptyLinePlaceholder":2362},[74,26348,26349],{"class":76,"line":1579},[74,26350,3958],{"class":84},[74,26352,26353,26355,26357],{"class":76,"line":1585},[74,26354,9643],{"class":80},[74,26356,9867],{"class":1925},[74,26358,1938],{"class":84},[74,26360,26361],{"class":76,"line":1590},[74,26362,1508],{"class":84},[74,26364,26365],{"class":76,"line":1604},[74,26366,19592],{"class":84},[74,26368,26369],{"class":76,"line":1609},[74,26370,26371],{"class":144},"    \u002F\u002F输出类成员变量这块内存\n",[74,26373,26374,26376,26378,26381,26383],{"class":76,"line":1615},[74,26375,1513],{"class":84},[74,26377,1130],{"class":80},[74,26379,26380],{"class":84},"p.m_A",[74,26382,1130],{"class":80},[74,26384,1153],{"class":84},[74,26386,26387],{"class":76,"line":1636},[74,26388,1527],{"class":84},[74,26390,26391,26393,26395],{"class":76,"line":1641},[74,26392,88],{"class":80},[74,26394,1935],{"class":1925},[74,26396,1938],{"class":84},[74,26398,26399],{"class":76,"line":1655},[74,26400,1508],{"class":84},[74,26402,26403,26405],{"class":76,"line":1660},[74,26404,9912],{"class":1925},[74,26406,1938],{"class":84},[74,26408,26409],{"class":76,"line":1689},[74,26410,1527],{"class":84},[19,26412,26413],{},"此时输出是报错的：无法解析外部命令",[19,26415,26416],{},"解决这一问题：必须用到类内声明，类外初始化操作",[64,26418,26420],{"className":66,"code":26419,"language":68,"meta":69,"style":69},"#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",[71,26421,26422,26428,26438,26444,26448,26452,26457,26465,26469,26474,26489,26497,26501,26505,26510,26515,26527,26532,26543,26548,26553,26566,26570,26578,26582,26588],{"__ignoreMap":69},[74,26423,26424,26426],{"class":76,"line":77},[74,26425,1911],{"class":80},[74,26427,1914],{"class":190},[74,26429,26430,26432,26434,26436],{"class":76,"line":94},[74,26431,1919],{"class":80},[74,26433,1922],{"class":80},[74,26435,1926],{"class":1925},[74,26437,1252],{"class":84},[74,26439,26440,26442],{"class":76,"line":1141},[74,26441,18973],{"class":80},[74,26443,19450],{"class":1925},[74,26445,26446],{"class":76,"line":1156},[74,26447,1508],{"class":84},[74,26449,26450],{"class":76,"line":1162},[74,26451,18995],{"class":80},[74,26453,26454],{"class":76,"line":1176},[74,26455,26456],{"class":144},"    \u002F\u002F类内声明\n",[74,26458,26459,26461,26463],{"class":76,"line":1182},[74,26460,15299],{"class":80},[74,26462,2344],{"class":80},[74,26464,25671],{"class":84},[74,26466,26467],{"class":76,"line":1273},[74,26468,3958],{"class":84},[74,26470,26471],{"class":76,"line":1279},[74,26472,26473],{"class":144},"\u002F\u002F类外初始化\n",[74,26475,26476,26478,26480,26483,26485,26487],{"class":76,"line":1291},[74,26477,88],{"class":80},[74,26479,19848],{"class":1925},[74,26481,26482],{"class":84},"::m_A",[74,26484,131],{"class":80},[74,26486,532],{"class":134},[74,26488,1252],{"class":84},[74,26490,26491,26493,26495],{"class":76,"line":1574},[74,26492,9643],{"class":80},[74,26494,9867],{"class":1925},[74,26496,1938],{"class":84},[74,26498,26499],{"class":76,"line":1579},[74,26500,1508],{"class":84},[74,26502,26503],{"class":76,"line":1585},[74,26504,19592],{"class":84},[74,26506,26507],{"class":76,"line":1590},[74,26508,26509],{"class":144},"    \u002F\u002F访问变量的原内存空间\n",[74,26511,26512],{"class":76,"line":1604},[74,26513,26514],{"class":144},"    \u002F\u002F100\n",[74,26516,26517,26519,26521,26523,26525],{"class":76,"line":1609},[74,26518,1513],{"class":84},[74,26520,1130],{"class":80},[74,26522,26380],{"class":84},[74,26524,1130],{"class":80},[74,26526,1153],{"class":84},[74,26528,26529],{"class":76,"line":1615},[74,26530,26531],{"class":84},"    Person p2;\n",[74,26533,26534,26537,26539,26541],{"class":76,"line":1636},[74,26535,26536],{"class":84},"    p2.m_A",[74,26538,131],{"class":80},[74,26540,1684],{"class":134},[74,26542,1252],{"class":84},[74,26544,26545],{"class":76,"line":1641},[74,26546,26547],{"class":144},"    \u002F\u002F继续访问这片空间\n",[74,26549,26550],{"class":76,"line":1655},[74,26551,26552],{"class":144},"    \u002F\u002F200\n",[74,26554,26555,26557,26559,26562,26564],{"class":76,"line":1660},[74,26556,1513],{"class":84},[74,26558,1130],{"class":80},[74,26560,26561],{"class":84},"p2.m_A",[74,26563,1130],{"class":80},[74,26565,1153],{"class":84},[74,26567,26568],{"class":76,"line":1689},[74,26569,1527],{"class":84},[74,26571,26572,26574,26576],{"class":76,"line":1694},[74,26573,88],{"class":80},[74,26575,1935],{"class":1925},[74,26577,1938],{"class":84},[74,26579,26580],{"class":76,"line":1711},[74,26581,1508],{"class":84},[74,26583,26584,26586],{"class":76,"line":1716},[74,26585,9912],{"class":1925},[74,26587,9915],{"class":84},[74,26589,26590],{"class":76,"line":1721},[74,26591,1527],{"class":84},[19,26593,26594],{},[235,26595,26596],{},"静态变量的访问",[64,26598,26600],{"className":66,"code":26599,"language":68,"meta":69,"style":69},"#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",[71,26601,26602,26608,26618,26624,26628,26632,26636,26644,26648,26653,26661,26665,26669,26683,26698,26706,26710,26715,26720,26725,26730,26742,26747,26752,26766,26783,26787,26795,26799,26805],{"__ignoreMap":69},[74,26603,26604,26606],{"class":76,"line":77},[74,26605,1911],{"class":80},[74,26607,1914],{"class":190},[74,26609,26610,26612,26614,26616],{"class":76,"line":94},[74,26611,1919],{"class":80},[74,26613,1922],{"class":80},[74,26615,1926],{"class":1925},[74,26617,1252],{"class":84},[74,26619,26620,26622],{"class":76,"line":1141},[74,26621,18973],{"class":80},[74,26623,19450],{"class":1925},[74,26625,26626],{"class":76,"line":1156},[74,26627,1508],{"class":84},[74,26629,26630],{"class":76,"line":1162},[74,26631,18995],{"class":80},[74,26633,26634],{"class":76,"line":1176},[74,26635,26456],{"class":144},[74,26637,26638,26640,26642],{"class":76,"line":1182},[74,26639,15299],{"class":80},[74,26641,2344],{"class":80},[74,26643,25671],{"class":84},[74,26645,26646],{"class":76,"line":1273},[74,26647,19501],{"class":80},[74,26649,26650],{"class":76,"line":1279},[74,26651,26652],{"class":144},"    \u002F\u002F静态成员变量也是有访问权限的\n",[74,26654,26655,26657,26659],{"class":76,"line":1291},[74,26656,15299],{"class":80},[74,26658,2344],{"class":80},[74,26660,25678],{"class":84},[74,26662,26663],{"class":76,"line":1574},[74,26664,3958],{"class":84},[74,26666,26667],{"class":76,"line":1579},[74,26668,26473],{"class":144},[74,26670,26671,26673,26675,26677,26679,26681],{"class":76,"line":1585},[74,26672,88],{"class":80},[74,26674,19848],{"class":1925},[74,26676,26482],{"class":84},[74,26678,131],{"class":80},[74,26680,532],{"class":134},[74,26682,1252],{"class":84},[74,26684,26685,26687,26689,26692,26694,26696],{"class":76,"line":1590},[74,26686,88],{"class":80},[74,26688,19848],{"class":1925},[74,26690,26691],{"class":84},"::m_B",[74,26693,131],{"class":80},[74,26695,786],{"class":134},[74,26697,1252],{"class":84},[74,26699,26700,26702,26704],{"class":76,"line":1604},[74,26701,9643],{"class":80},[74,26703,9936],{"class":1925},[74,26705,1938],{"class":84},[74,26707,26708],{"class":76,"line":1609},[74,26709,1508],{"class":84},[74,26711,26712],{"class":76,"line":1615},[74,26713,26714],{"class":144},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[74,26716,26717],{"class":76,"line":1636},[74,26718,26719],{"class":144},"    \u002F\u002F静态成员变量有两种访问方式：\n",[74,26721,26722],{"class":76,"line":1641},[74,26723,26724],{"class":144},"    \u002F\u002F1.通过对象进行访问\n",[74,26726,26727],{"class":76,"line":1655},[74,26728,26729],{"class":84},"    Person p;  \n",[74,26731,26732,26734,26736,26738,26740],{"class":76,"line":1660},[74,26733,1513],{"class":84},[74,26735,1130],{"class":80},[74,26737,26380],{"class":84},[74,26739,1130],{"class":80},[74,26741,1153],{"class":84},[74,26743,26744],{"class":76,"line":1689},[74,26745,26746],{"class":144},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[74,26748,26749],{"class":76,"line":1694},[74,26750,26751],{"class":144},"    \u002F\u002F2.通过类名进行访问\n",[74,26753,26754,26756,26758,26760,26762,26764],{"class":76,"line":1711},[74,26755,1513],{"class":84},[74,26757,1130],{"class":80},[74,26759,23325],{"class":1925},[74,26761,26482],{"class":84},[74,26763,1130],{"class":80},[74,26765,1153],{"class":84},[74,26767,26768,26770,26772,26774,26776,26778,26780],{"class":76,"line":1716},[74,26769,1513],{"class":84},[74,26771,1130],{"class":80},[74,26773,23325],{"class":1925},[74,26775,26691],{"class":84},[74,26777,1130],{"class":80},[74,26779,1200],{"class":84},[74,26781,26782],{"class":144}," \u002F\u002F没有访问权限，报错\n",[74,26784,26785],{"class":76,"line":1721},[74,26786,1527],{"class":84},[74,26788,26789,26791,26793],{"class":76,"line":1726},[74,26790,88],{"class":80},[74,26792,1935],{"class":1925},[74,26794,1938],{"class":84},[74,26796,26797],{"class":76,"line":1740},[74,26798,1508],{"class":84},[74,26800,26801,26803],{"class":76,"line":1745},[74,26802,9981],{"class":1925},[74,26804,9915],{"class":84},[74,26806,26807],{"class":76,"line":2540},[74,26808,1527],{"class":84},[26277,26810,26812],{"id":26811},"_8282静态成员函数","8.2.8.2静态成员函数",[19,26814,26815],{},"1.静态成员函数定义与访问",[64,26817,26819],{"className":66,"code":26818,"language":68,"meta":69,"style":69},"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",[71,26820,26821,26827,26831,26835,26840,26851,26855,26869,26873,26877,26885,26889,26894,26899,26903,26911,26916,26926],{"__ignoreMap":69},[74,26822,26823,26825],{"class":76,"line":77},[74,26824,18973],{"class":80},[74,26826,19450],{"class":1925},[74,26828,26829],{"class":76,"line":94},[74,26830,1508],{"class":84},[74,26832,26833],{"class":76,"line":1141},[74,26834,18995],{"class":80},[74,26836,26837],{"class":76,"line":1156},[74,26838,26839],{"class":144},"    \u002F\u002F在公共权限下定义静态成员函数\n",[74,26841,26842,26844,26847,26849],{"class":76,"line":1162},[74,26843,15299],{"class":80},[74,26845,26846],{"class":80}," void",[74,26848,15664],{"class":1925},[74,26850,1938],{"class":84},[74,26852,26853],{"class":76,"line":1176},[74,26854,1992],{"class":84},[74,26856,26857,26860,26862,26865,26867],{"class":76,"line":1182},[74,26858,26859],{"class":84},"        coout",[74,26861,1130],{"class":80},[74,26863,26864],{"class":190},"\"静态成员函数的调用\"",[74,26866,1130],{"class":80},[74,26868,1153],{"class":84},[74,26870,26871],{"class":76,"line":1273},[74,26872,2149],{"class":84},[74,26874,26875],{"class":76,"line":1279},[74,26876,3958],{"class":84},[74,26878,26879,26881,26883],{"class":76,"line":1291},[74,26880,9643],{"class":80},[74,26882,9867],{"class":1925},[74,26884,1938],{"class":84},[74,26886,26887],{"class":76,"line":1574},[74,26888,1508],{"class":84},[74,26890,26891],{"class":76,"line":1579},[74,26892,26893],{"class":144},"    \u002F\u002F静态成员函数的调用方式:\n",[74,26895,26896],{"class":76,"line":1585},[74,26897,26898],{"class":144},"    \u002F\u002F1.通过对象访问\n",[74,26900,26901],{"class":76,"line":1590},[74,26902,19592],{"class":84},[74,26904,26905,26907,26909],{"class":76,"line":1604},[74,26906,20145],{"class":84},[74,26908,15830],{"class":1925},[74,26910,9915],{"class":84},[74,26912,26913],{"class":76,"line":1609},[74,26914,26915],{"class":144},"    \u002F\u002F2.通过类名访问\n",[74,26917,26918,26920,26922,26924],{"class":76,"line":1615},[74,26919,22798],{"class":1925},[74,26921,22011],{"class":84},[74,26923,15830],{"class":1925},[74,26925,9915],{"class":84},[74,26927,26928],{"class":76,"line":1636},[74,26929,1527],{"class":84},[27,26931,26932],{"start":94},[30,26933,26934],{},"静态成员函数只能访问静态成员变量",[64,26936,26938],{"className":66,"code":26937,"language":68,"meta":69,"style":69},"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",[71,26939,26940,26946,26950,26954,26958,26968,26972,26986,26991,27003,27007,27018,27028,27032,27036,27040,27050,27054,27067,27071,27075,27079,27083,27097,27105,27109,27113,27117,27121,27129,27133,27143,27148,27152,27160,27164,27170],{"__ignoreMap":69},[74,26941,26942,26944],{"class":76,"line":77},[74,26943,18973],{"class":80},[74,26945,19450],{"class":1925},[74,26947,26948],{"class":76,"line":94},[74,26949,1508],{"class":84},[74,26951,26952],{"class":76,"line":1141},[74,26953,18995],{"class":80},[74,26955,26956],{"class":76,"line":1156},[74,26957,26839],{"class":144},[74,26959,26960,26962,26964,26966],{"class":76,"line":1162},[74,26961,15299],{"class":80},[74,26963,26846],{"class":80},[74,26965,15664],{"class":1925},[74,26967,1938],{"class":84},[74,26969,26970],{"class":76,"line":1176},[74,26971,1992],{"class":84},[74,26973,26974,26977,26979,26981,26983],{"class":76,"line":1182},[74,26975,26976],{"class":84},"        m_A",[74,26978,131],{"class":80},[74,26980,397],{"class":134},[74,26982,141],{"class":84},[74,26984,26985],{"class":144}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[74,26987,26988],{"class":76,"line":1273},[74,26989,26990],{"class":144},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[74,26992,26993,26995,26997,26999,27001],{"class":76,"line":1279},[74,26994,26859],{"class":84},[74,26996,1130],{"class":80},[74,26998,26864],{"class":190},[74,27000,1130],{"class":80},[74,27002,1153],{"class":84},[74,27004,27005],{"class":76,"line":1291},[74,27006,2149],{"class":84},[74,27008,27009,27011,27013,27015],{"class":76,"line":1574},[74,27010,15299],{"class":80},[74,27012,2344],{"class":80},[74,27014,19727],{"class":84},[74,27016,27017],{"class":144}," \u002F\u002F静态成员变量\n",[74,27019,27020,27022,27025],{"class":76,"line":1579},[74,27021,1947],{"class":80},[74,27023,27024],{"class":84}," m_B;",[74,27026,27027],{"class":144}," \u002F\u002F非静态成员变量\n",[74,27029,27030],{"class":76,"line":1585},[74,27031,2363],{"emptyLinePlaceholder":2362},[74,27033,27034],{"class":76,"line":1590},[74,27035,19501],{"class":80},[74,27037,27038],{"class":76,"line":1604},[74,27039,26652],{"class":144},[74,27041,27042,27044,27046,27048],{"class":76,"line":1609},[74,27043,15299],{"class":80},[74,27045,26846],{"class":80},[74,27047,17897],{"class":1925},[74,27049,1938],{"class":84},[74,27051,27052],{"class":76,"line":1615},[74,27053,1992],{"class":84},[74,27055,27056,27058,27060,27063,27065],{"class":76,"line":1636},[74,27057,3414],{"class":84},[74,27059,1130],{"class":80},[74,27061,27062],{"class":190},"\"这是私有权限下的静态函数调用\"",[74,27064,1130],{"class":80},[74,27066,1153],{"class":84},[74,27068,27069],{"class":76,"line":1641},[74,27070,2149],{"class":84},[74,27072,27073],{"class":76,"line":1655},[74,27074,2363],{"emptyLinePlaceholder":2362},[74,27076,27077],{"class":76,"line":1660},[74,27078,2363],{"emptyLinePlaceholder":2362},[74,27080,27081],{"class":76,"line":1689},[74,27082,3958],{"class":84},[74,27084,27085,27087,27089,27091,27093,27095],{"class":76,"line":1694},[74,27086,88],{"class":80},[74,27088,19848],{"class":1925},[74,27090,26482],{"class":84},[74,27092,131],{"class":80},[74,27094,277],{"class":134},[74,27096,1252],{"class":84},[74,27098,27099,27101,27103],{"class":76,"line":1711},[74,27100,9643],{"class":80},[74,27102,9867],{"class":1925},[74,27104,1938],{"class":84},[74,27106,27107],{"class":76,"line":1716},[74,27108,1508],{"class":84},[74,27110,27111],{"class":76,"line":1721},[74,27112,26893],{"class":144},[74,27114,27115],{"class":76,"line":1726},[74,27116,26898],{"class":144},[74,27118,27119],{"class":76,"line":1740},[74,27120,19592],{"class":84},[74,27122,27123,27125,27127],{"class":76,"line":1745},[74,27124,20145],{"class":84},[74,27126,15830],{"class":1925},[74,27128,9915],{"class":84},[74,27130,27131],{"class":76,"line":2540},[74,27132,26915],{"class":144},[74,27134,27135,27137,27139,27141],{"class":76,"line":2554},[74,27136,22798],{"class":1925},[74,27138,22011],{"class":84},[74,27140,15830],{"class":1925},[74,27142,9915],{"class":84},[74,27144,27145],{"class":76,"line":2562},[74,27146,27147],{"class":144},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[74,27149,27150],{"class":76,"line":2567},[74,27151,1527],{"class":84},[74,27153,27154,27156,27158],{"class":76,"line":2573},[74,27155,88],{"class":80},[74,27157,1935],{"class":1925},[74,27159,1938],{"class":84},[74,27161,27162],{"class":76,"line":2579},[74,27163,1508],{"class":84},[74,27165,27166,27168],{"class":76,"line":2584},[74,27167,9912],{"class":1925},[74,27169,9915],{"class":84},[74,27171,27172],{"class":76,"line":12227},[74,27173,1527],{"class":84},[44,27175,27177],{"id":27176},"_83c对象模型和this指针","8.3C++对象模型和this指针",[26277,27179,27181],{"id":27180},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,27183,27184],{},"在c++中，类内的成员变量和成员函数分开存储",[19,27186,27187],{},"只有非静态成员变量才属于类的对象上",[27189,27190,27192],"h5",{"id":27191},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[64,27194,27196],{"className":66,"code":27195,"language":68,"meta":69,"style":69},"#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",[71,27197,27198,27205,27215,27221,27225,27229,27233,27241,27245,27249,27272,27276,27284,27288,27294],{"__ignoreMap":69},[74,27199,27200,27202],{"class":76,"line":77},[74,27201,1911],{"class":80},[74,27203,27204],{"class":190},"\u003Ciostraem>\n",[74,27206,27207,27209,27211,27213],{"class":76,"line":94},[74,27208,1919],{"class":80},[74,27210,1922],{"class":80},[74,27212,1926],{"class":1925},[74,27214,1252],{"class":84},[74,27216,27217,27219],{"class":76,"line":1141},[74,27218,18973],{"class":80},[74,27220,19450],{"class":1925},[74,27222,27223],{"class":76,"line":1156},[74,27224,1508],{"class":84},[74,27226,27227],{"class":76,"line":1162},[74,27228,2363],{"emptyLinePlaceholder":2362},[74,27230,27231],{"class":76,"line":1176},[74,27232,3958],{"class":84},[74,27234,27235,27237,27239],{"class":76,"line":1182},[74,27236,9643],{"class":80},[74,27238,9867],{"class":1925},[74,27240,1938],{"class":84},[74,27242,27243],{"class":76,"line":1273},[74,27244,1508],{"class":84},[74,27246,27247],{"class":76,"line":1279},[74,27248,19592],{"class":84},[74,27250,27251,27253,27255,27258,27260,27263,27265,27267,27269],{"class":76,"line":1291},[74,27252,1513],{"class":84},[74,27254,1130],{"class":80},[74,27256,27257],{"class":190},"\"size of p=\"",[74,27259,1130],{"class":80},[74,27261,27262],{"class":1925},"sizeoif",[74,27264,10818],{"class":84},[74,27266,1130],{"class":80},[74,27268,1200],{"class":84},[74,27270,27271],{"class":144}," \u002F\u002F查看这个空类的占用的内存空间\n",[74,27273,27274],{"class":76,"line":1574},[74,27275,1527],{"class":84},[74,27277,27278,27280,27282],{"class":76,"line":1579},[74,27279,88],{"class":80},[74,27281,1935],{"class":1925},[74,27283,1938],{"class":84},[74,27285,27286],{"class":76,"line":1585},[74,27287,1508],{"class":84},[74,27289,27290,27292],{"class":76,"line":1590},[74,27291,9912],{"class":1925},[74,27293,9915],{"class":84},[74,27295,27296],{"class":76,"line":1604},[74,27297,1527],{"class":84},[19,27299,27300],{},"输出结果为：size of p=1",[19,27302,27303],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,27305,27306],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[27189,27308,27310],{"id":27309},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[64,27312,27314],{"className":66,"code":27313,"language":68,"meta":69,"style":69},"#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",[71,27315,27316,27322,27332,27340,27344,27353,27357,27365,27369,27373,27392,27396,27400,27408,27412,27418],{"__ignoreMap":69},[74,27317,27318,27320],{"class":76,"line":77},[74,27319,1911],{"class":80},[74,27321,1914],{"class":190},[74,27323,27324,27326,27328,27330],{"class":76,"line":94},[74,27325,1919],{"class":80},[74,27327,1922],{"class":80},[74,27329,1926],{"class":1925},[74,27331,1252],{"class":84},[74,27333,27334,27336,27338],{"class":76,"line":1141},[74,27335,18973],{"class":80},[74,27337,19848],{"class":1925},[74,27339,2637],{"class":84},[74,27341,27342],{"class":76,"line":1156},[74,27343,1508],{"class":84},[74,27345,27346,27348,27350],{"class":76,"line":1162},[74,27347,1947],{"class":80},[74,27349,19727],{"class":84},[74,27351,27352],{"class":144},"\u002F\u002F非静态成员变量\n",[74,27354,27355],{"class":76,"line":1176},[74,27356,3958],{"class":84},[74,27358,27359,27361,27363],{"class":76,"line":1182},[74,27360,9643],{"class":80},[74,27362,9867],{"class":1925},[74,27364,1938],{"class":84},[74,27366,27367],{"class":76,"line":1273},[74,27368,1508],{"class":84},[74,27370,27371],{"class":76,"line":1279},[74,27372,19592],{"class":84},[74,27374,27375,27377,27379,27381,27383,27385,27387,27389],{"class":76,"line":1291},[74,27376,1513],{"class":84},[74,27378,1130],{"class":80},[74,27380,27257],{"class":190},[74,27382,1334],{"class":80},[74,27384,10818],{"class":84},[74,27386,1130],{"class":80},[74,27388,1200],{"class":84},[74,27390,27391],{"class":144}," \u002F\u002F查看不是空对象时占用多少内存\n",[74,27393,27394],{"class":76,"line":1574},[74,27395,2363],{"emptyLinePlaceholder":2362},[74,27397,27398],{"class":76,"line":1579},[74,27399,1527],{"class":84},[74,27401,27402,27404,27406],{"class":76,"line":1585},[74,27403,88],{"class":80},[74,27405,1935],{"class":1925},[74,27407,1938],{"class":84},[74,27409,27410],{"class":76,"line":1590},[74,27411,1508],{"class":84},[74,27413,27414,27416],{"class":76,"line":1604},[74,27415,9912],{"class":1925},[74,27417,9915],{"class":84},[74,27419,27420],{"class":76,"line":1609},[74,27421,1527],{"class":84},[19,27423,27424],{},"输出结果：size of p=4",[19,27426,27427],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[27,27429,27430],{},[30,27431,27432],{},"如果加上非静态成员变量，Person类修改如下",[64,27434,27436],{"className":66,"code":27435,"language":68,"meta":69,"style":69},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[71,27437,27438,27444,27448,27454,27462,27466,27471],{"__ignoreMap":69},[74,27439,27440,27442],{"class":76,"line":77},[74,27441,18973],{"class":80},[74,27443,19450],{"class":1925},[74,27445,27446],{"class":76,"line":94},[74,27447,1508],{"class":84},[74,27449,27450,27452],{"class":76,"line":1141},[74,27451,1947],{"class":80},[74,27453,25671],{"class":84},[74,27455,27456,27458,27460],{"class":76,"line":1156},[74,27457,15299],{"class":80},[74,27459,2344],{"class":80},[74,27461,25678],{"class":84},[74,27463,27464],{"class":76,"line":1162},[74,27465,3958],{"class":84},[74,27467,27468],{"class":76,"line":1176},[74,27469,27470],{"class":144},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[74,27472,27473,27475,27477,27479,27481,27483],{"class":76,"line":1182},[74,27474,88],{"class":80},[74,27476,19848],{"class":1925},[74,27478,26691],{"class":84},[74,27480,131],{"class":80},[74,27482,277],{"class":134},[74,27484,1252],{"class":84},[19,27486,27487],{},"输出结果：4",[19,27489,27490],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[27,27492,27493],{"start":94},[30,27494,27495],{},"加上非静态成员函数",[64,27497,27499],{"className":66,"code":27498,"language":68,"meta":69,"style":69},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[71,27500,27501,27508,27512,27518,27526,27530,27534,27538],{"__ignoreMap":69},[74,27502,27503,27505],{"class":76,"line":77},[74,27504,18973],{"class":80},[74,27506,27507],{"class":1925},"  Person\n",[74,27509,27510],{"class":76,"line":94},[74,27511,1508],{"class":84},[74,27513,27514,27516],{"class":76,"line":1141},[74,27515,1947],{"class":80},[74,27517,25671],{"class":84},[74,27519,27520,27522,27524],{"class":76,"line":1156},[74,27521,19188],{"class":80},[74,27523,15664],{"class":1925},[74,27525,1938],{"class":84},[74,27527,27528],{"class":76,"line":1162},[74,27529,1992],{"class":84},[74,27531,27532],{"class":76,"line":1176},[74,27533,2363],{"emptyLinePlaceholder":2362},[74,27535,27536],{"class":76,"line":1182},[74,27537,2149],{"class":84},[74,27539,27540],{"class":76,"line":1273},[74,27541,3958],{"class":84},[19,27543,27544],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[27,27546,27547],{"start":1141},[30,27548,27549],{},"加上静态成员函数",[64,27551,27553],{"className":66,"code":27552,"language":68,"meta":69,"style":69},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[71,27554,27555,27561,27565,27571,27579,27583,27587,27591,27602,27606,27610,27614],{"__ignoreMap":69},[74,27556,27557,27559],{"class":76,"line":77},[74,27558,18973],{"class":80},[74,27560,27507],{"class":1925},[74,27562,27563],{"class":76,"line":94},[74,27564,1508],{"class":84},[74,27566,27567,27569],{"class":76,"line":1141},[74,27568,1947],{"class":80},[74,27570,25671],{"class":84},[74,27572,27573,27575,27577],{"class":76,"line":1156},[74,27574,19188],{"class":80},[74,27576,15664],{"class":1925},[74,27578,1938],{"class":84},[74,27580,27581],{"class":76,"line":1162},[74,27582,1992],{"class":84},[74,27584,27585],{"class":76,"line":1176},[74,27586,2363],{"emptyLinePlaceholder":2362},[74,27588,27589],{"class":76,"line":1182},[74,27590,2149],{"class":84},[74,27592,27593,27595,27597,27600],{"class":76,"line":1273},[74,27594,15299],{"class":80},[74,27596,26846],{"class":80},[74,27598,27599],{"class":1925}," func1",[74,27601,1938],{"class":84},[74,27603,27604],{"class":76,"line":1279},[74,27605,1992],{"class":84},[74,27607,27608],{"class":76,"line":1291},[74,27609,2363],{"emptyLinePlaceholder":2362},[74,27611,27612],{"class":76,"line":1574},[74,27613,2149],{"class":84},[74,27615,27616],{"class":76,"line":1579},[74,27617,3958],{"class":84},[19,27619,27487],{},[19,27621,27622],{},"解释：静态成员函数也不属于类上",[5090,27624,11953],{},{"title":69,"searchDepth":94,"depth":94,"links":27626},[27627,27633],{"id":18924,"depth":94,"text":18925,"children":27628},[27629,27630,27631,27632],{"id":18928,"depth":1141,"text":18929},{"id":19653,"depth":1141,"text":19654},{"id":19825,"depth":1141,"text":19826},{"id":20284,"depth":1141,"text":20285},{"id":22656,"depth":94,"text":22657,"children":27634},[27635,27636,27637,27638,27639,27640,27641,27642,27643],{"id":22668,"depth":1141,"text":22669},{"id":22961,"depth":1141,"text":22962},{"id":23452,"depth":1141,"text":23453},{"id":24549,"depth":1141,"text":24550},{"id":24972,"depth":1141,"text":24973},{"id":25451,"depth":1141,"text":25452},{"id":25826,"depth":1141,"text":25827},{"id":26239,"depth":1141,"text":26240},{"id":27176,"depth":1141,"text":27177},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":18889,"description":27644},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":27651,"title":68,"body":27652,"description":27656,"extension":5121,"meta":27657,"navigation":2362,"path":27659,"seo":27660,"stem":27661,"__hash__":27662},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":27653,"toc":27654},[],{"title":69,"searchDepth":94,"depth":94,"links":27655},[],null,{"category":27658},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":68,"description":27656},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":27664,"title":27665,"body":27666,"description":69,"extension":5121,"meta":28257,"navigation":2362,"path":28258,"seo":28259,"stem":28260,"__hash__":28261},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":27667,"toc":28239},[27668,27671,27675,27678,27681,27684,27702,27707,27710,27713,27716,27719,27724,27727,27732,27735,27738,27742,27745,27748,27754,27757,27775,27779,27783,27786,27791,27794,27798,27801,27814,27817,27821,27824,27827,27830,27855,27858,27867,27878,27893,27925,27929,27936,27944,27948,27951,27954,27959,27963,27966,27969,27974,27977,27981,27984,27987,27992,27995,27999,28004,28008,28075,28079,28082,28085,28088,28091,28094,28100,28121,28124,28138,28147,28151,28154,28157,28162,28165,28170,28175,28178,28181,28186,28191,28194,28199,28204,28207,28212,28217,28220,28223,28228,28231,28236],[10,27669,27665],{"id":27670},"_1强化学习基本认识",[14,27672,27674],{"id":27673},"_11什么是强化学习","1.1.什么是强化学习",[19,27676,27677],{},"强化学习有两部分组成：智能体和环境；",[19,27679,27680],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,27682,27683],{},"强化学习与监督学习的区别:",[27,27685,27686,27689,27692,27695],{},[30,27687,27688],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[30,27690,27691],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[30,27693,27694],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[30,27696,27697,27698,27701],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[235,27699,27700],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,27703,27704],{},[1424,27705],{"alt":69,"src":27706},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,27708,27709],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,27711,27712],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,27714,27715],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,27717,27718],{},"获取奖励",[19,27720,27721],{},[1424,27722],{"alt":69,"src":27723},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,27725,27726],{},"强化学习可以分成标准强化学习和深度强化学习",[19,27728,27729],{},[1424,27730],{"alt":69,"src":27731},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,27733,27734],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,27736,27737],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,27739,27741],{"id":27740},"_12强化学习应用场景","1.2.强化学习应用场景",[19,27743,27744],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,27746,27747],{},"具身智能中的应用",[19,27749,27750,27753],{},[235,27751,27752],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,27755,27756],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,27758,27759,27760,27763,27764,27767,27768,27771,27772],{},"机器人是",[235,27761,27762],{},"躯体","，深度学习是",[235,27765,27766],{},"神经元****网络","，VLA是",[235,27769,27770],{},"通用的行为逻辑","，而强化学习是",[235,27773,27774],{},"教练",[14,27776,27778],{"id":27777},"_13序列决策","1.3.序列决策",[44,27780,27782],{"id":27781},"_131智能体与环境","1.3.1.智能体与环境",[19,27784,27785],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,27787,27788],{},[1424,27789],{"alt":69,"src":27790},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,27792,27793],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[44,27795,27797],{"id":27796},"_132奖励","1.3.2.奖励",[19,27799,27800],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,27802,27803,27804,27813],{},"取某个策略的表现如何。强化学习的目的就是",[235,27805,27806,27807,27812],{},"最大化",[235,27808,27809],{},[235,27810,27811],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,27815,27816],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[44,27818,27820],{"id":27819},"_133序列决策","1.3.3.序列决策",[19,27822,27823],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,27825,27826],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,27828,27829],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,27831,27832,27836,27837,27839,27840,27842,27843,27845,27846,18074,27849,18074,27852],{},[27833,27834,27835],"em",{},"Ht"," = ",[27833,27838,682],{},"1*, a",[27833,27841,303],{},", r",[27833,27844,303],{},", . . . ,* ",[27833,27847,27848],{},"ot",[27833,27850,27851],{},", at ,",[27833,27853,27854],{},"rt",[19,27856,27857],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,27859,27860,27836,27863,1620,27865,515],{},[27833,27861,27862],{},"st",[27833,27864,138],{},[27833,27866,27835],{},[19,27868,27869,27870,27873,27874,27877],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[235,27871,27872],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[235,27875,27876],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,27879,27880,27881,27884,27885,27888,27889,27892],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[235,27882,27883],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[235,27886,27887],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[27833,27890,27891],{},"S, A, T, R, Ω, O, γ",")。",[19,27894,27895,27896,27898,27899,27901,27902,85,27904,27907,27908,27910,27911,85,27914,27917,27918,27920,27921,27924],{},"其中 ",[27833,27897,775],{}," 表示状态空间，为隐变量，",[27833,27900,318],{}," 为动作空间，",[27833,27903,800],{},[27833,27905,27906],{},"s ′ |s, a",") 为状态转移概率，",[27833,27909,750],{}," 为奖励函数，",[27833,27912,27913],{},"Ω",[27833,27915,27916],{},"o|s, a",") 为观测概率，",[27833,27919,676],{}," 为观测空间，",[27833,27922,27923],{},"γ"," 为折扣因子。",[14,27926,27928],{"id":27927},"_14动作空间","1.4.动作空间",[19,27930,27931,27932,27935],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[235,27933,27934],{},"动作空间"," ，动作空间分为:",[27,27937,27938,27941],{},[30,27939,27940],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[30,27942,27943],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,27945,27947],{"id":27946},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,27949,27950],{},"由策略、价值函数、模型三部分组成",[19,27952,27953],{},"这三者组成马尔可夫决策过程",[19,27955,27956],{},[1424,27957],{"alt":69,"src":27958},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[44,27960,27962],{"id":27961},"_151策略","1.5.1.策略",[19,27964,27965],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,27967,27968],{},"策略可分为两种：",[19,27970,27971],{},[1424,27972],{"alt":69,"src":27973},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,27975,27976],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[44,27978,27980],{"id":27979},"_152价值函数","1.5.2.价值函数",[19,27982,27983],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,27985,27986],{},"价值函数中有一个折扣因子，类似于存款利息",[19,27988,27989],{},[1424,27990],{"alt":69,"src":27991},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,27993,27994],{},"进入某个状态采取的最优动作可以通过Q函数得到",[44,27996,27998],{"id":27997},"_153模型","1.5.3.模型",[19,28000,28001],{},[1424,28002],{"alt":69,"src":28003},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,28005,28007],{"id":28006},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[223,28009,28010,28021],{},[226,28011,28012],{},[229,28013,28014,28018],{},[232,28015,28017],{"align":28016},"left","类型",[232,28019,28020],{"align":28016},"特点",[270,28022,28023,28033,28043,28053,28065],{},[229,28024,28025,28030],{},[275,28026,28027],{"align":28016},[235,28028,28029],{},"基于价值的智能体",[275,28031,28032],{"align":28016},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[229,28034,28035,28040],{},[275,28036,28037],{"align":28016},[235,28038,28039],{},"基于策略的智能体",[275,28041,28042],{"align":28016},"直接学习策略，没有学习价值函数",[229,28044,28045,28050],{},[275,28046,28047],{"align":28016},[235,28048,28049],{},"演员-评论员智能体",[275,28051,28052],{"align":28016},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[229,28054,28055,28060],{},[275,28056,28057],{"align":28016},[235,28058,28059],{},"有模型强化学习智能体",[275,28061,28062],{"align":28016},[1424,28063],{"alt":69,"src":28064},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[229,28066,28067,28072],{},[275,28068,28069],{"align":28016},[235,28070,28071],{},"免模型强化学习智能体",[275,28073,28074],{"align":28016},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,28076,28078],{"id":28077},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,28080,28081],{},"学习和规划是序列决策的两个基本问题",[19,28083,28084],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,28086,28087],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,28089,28090],{},"强化学习用到的库：Gym",[19,28092,28093],{},"Gym可以检验强化学习算法的优劣",[19,28095,28096,28099],{},[235,28097,28098],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[64,28101,28105],{"className":28102,"code":28103,"language":28104,"meta":69,"style":69},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[71,28106,28107],{"__ignoreMap":69},[74,28108,28109,28112,28115,28118],{"class":76,"line":77},[74,28110,28111],{"class":1925},"pip",[74,28113,28114],{"class":190}," install",[74,28116,28117],{"class":190}," gym==",[74,28119,28120],{"class":134},"0.25.2\n",[19,28122,28123],{},"显示图形界面需要",[64,28125,28127],{"className":28102,"code":28126,"language":28104,"meta":69,"style":69},"pip install pygame\n",[71,28128,28129],{"__ignoreMap":69},[74,28130,28131,28133,28135],{"class":76,"line":77},[74,28132,28111],{"class":1925},[74,28134,28114],{"class":190},[74,28136,28137],{"class":190}," pygame\n",[19,28139,28140,28141],{},"有关Gym库的相关文档介绍：",[324,28142,28146],{"href":28143,"rel":28144},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[28145],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,28148,28150],{"id":28149},"_18一些补充基础概念","1.8.一些补充基础概念",[19,28152,28153],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,28155,28156],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,28158,28159],{},[1424,28160],{"alt":69,"src":28161},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,28163,28164],{},"折扣率需要自己来设定",[19,28166,28167],{},[1424,28168],{"alt":69,"src":28169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[27,28171,28172],{},[30,28173,28174],{},"状态转移函数：",[19,28176,28177],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,28179,28180],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,28182,28183],{},[1424,28184],{"alt":69,"src":28185},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[27,28187,28188],{"start":94},[30,28189,28190],{},"动作价值函数：",[19,28192,28193],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,28195,28196],{},[1424,28197],{"alt":69,"src":28198},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[27,28200,28201],{"start":1141},[30,28202,28203],{},"最优动作价值函数：",[19,28205,28206],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[19,28208,28209],{},[1424,28210],{"alt":69,"src":28211},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[27,28213,28214],{"start":1156},[30,28215,28216],{},"状态价值函数:",[19,28218,28219],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,28221,28222],{},"它衡量的是“一个具体动作”的长期价值",[19,28224,28225],{},[1424,28226],{"alt":69,"src":28227},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,28229,28230],{},"几个价值函数之间的比较：",[19,28232,28233],{},[1424,28234],{"alt":69,"src":28235},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5090,28237,28238],{},"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":69,"searchDepth":94,"depth":94,"links":28240},[28241,28242,28243,28248,28249,28254,28255,28256],{"id":27673,"depth":94,"text":27674},{"id":27740,"depth":94,"text":27741},{"id":27777,"depth":94,"text":27778,"children":28244},[28245,28246,28247],{"id":27781,"depth":1141,"text":27782},{"id":27796,"depth":1141,"text":27797},{"id":27819,"depth":1141,"text":27820},{"id":27927,"depth":94,"text":27928},{"id":27946,"depth":94,"text":27947,"children":28250},[28251,28252,28253],{"id":27961,"depth":1141,"text":27962},{"id":27979,"depth":1141,"text":27980},{"id":27997,"depth":1141,"text":27998},{"id":28006,"depth":94,"text":28007},{"id":28077,"depth":94,"text":28078},{"id":28149,"depth":94,"text":28150},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":27665,"description":69},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":28263,"title":28264,"body":28265,"description":28272,"extension":5121,"meta":28283,"navigation":2362,"path":28284,"seo":28285,"stem":28286,"__hash__":28287},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":28266,"toc":28281},[28267,28270,28273,28278],[10,28268,28264],{"id":28269},"_2马尔可夫决策过程",[19,28271,28272],{},"这是强化学习的基本框架",[19,28274,28275],{},[1424,28276],{"alt":69,"src":28277},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,28279,28280],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":69,"searchDepth":94,"depth":94,"links":28282},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":28264,"description":28272},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":28289,"title":28290,"body":28291,"description":69,"extension":5121,"meta":28407,"navigation":2362,"path":28408,"seo":28409,"stem":28410,"__hash__":28411},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":28292,"toc":28402},[28293,28296,28300,28303,28308,28313,28316,28321,28324,28329,28332,28336,28341,28344,28349,28354,28359,28362,28366,28371,28374,28379,28384,28389,28394,28397],[10,28294,28290],{"id":28295},"_3动作价值函数",[14,28297,28299],{"id":28298},"_31dqn","3.1.DQN",[19,28301,28302],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,28304,28305],{},[1424,28306],{"alt":69,"src":28307},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,28309,28310],{},[1424,28311],{"alt":69,"src":28312},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,28314,28315],{},"DQN算法的描述：",[19,28317,28318],{},[1424,28319],{"alt":69,"src":28320},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,28322,28323],{},"这里的Dense指的是全连接层",[19,28325,28326],{},[1424,28327],{"alt":69,"src":28328},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,28330,28331],{},"当前观测的状态为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算法",[14,28333,28335],{"id":28334},"_32dqn的举例","3.2.DQN的举例",[19,28337,28338],{},[1424,28339],{"alt":69,"src":28340},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,28342,28343],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,28345,28346],{},[1424,28347],{"alt":69,"src":28348},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,28350,28351],{},[1424,28352],{"alt":69,"src":28353},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,28355,28356],{},[1424,28357],{"alt":69,"src":28358},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,28360,28361],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,28363,28365],{"id":28364},"_33td算法","3.3.TD算法",[19,28367,28368],{},[1424,28369],{"alt":69,"src":28370},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,28372,28373],{},"强化学习TD算法公式的粗略解释：",[19,28375,28376],{},[1424,28377],{"alt":69,"src":28378},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,28380,28381],{},[1424,28382],{"alt":69,"src":28383},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,28385,28386],{},[1424,28387],{"alt":69,"src":28388},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,28390,28391],{},[1424,28392],{"alt":69,"src":28393},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,28395,28396],{},"TD算法总结：",[19,28398,28399],{},[1424,28400],{"alt":69,"src":28401},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":69,"searchDepth":94,"depth":94,"links":28403},[28404,28405,28406],{"id":28298,"depth":94,"text":28299},{"id":28334,"depth":94,"text":28335},{"id":28364,"depth":94,"text":28365},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":28290,"description":69},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":28413,"title":28414,"body":28415,"description":69,"extension":5121,"meta":28648,"navigation":2362,"path":28649,"seo":28650,"stem":28651,"__hash__":28652},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":28416,"toc":28644},[28417,28420,28424,28427,28430,28435,28440,28443,28448,28453,28456,28461,28464,28469,28472,28477,28480,28485,28488,28493,28498,28501,28506,28509,28512,28517,28520,28525,28530,28534,28537,28540,28545,28550,28553,28558,28563,28566,28571,28574,28577,28582,28585,28590,28593,28598,28603,28606,28611,28616,28619,28624,28627,28632,28635],[10,28418,28414],{"id":28419},"_4策略学习",[14,28421,28423],{"id":28422},"_41概念描述","4.1.概念描述",[19,28425,28426],{},"用神经网络（策略网络）近似策略函数",[19,28428,28429],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,28431,28432],{},[1424,28433],{"alt":69,"src":28434},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,28436,28437],{},[1424,28438],{"alt":69,"src":28439},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,28441,28442],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,28444,28445],{},[1424,28446],{"alt":69,"src":28447},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,28449,28450],{},[1424,28451],{"alt":69,"src":28452},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,28454,28455],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,28457,28458],{},[1424,28459],{"alt":69,"src":28460},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,28462,28463],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,28465,28466],{},[1424,28467],{"alt":69,"src":28468},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,28470,28471],{},"改进theta要用到策略梯度算法",[19,28473,28474],{},[1424,28475],{"alt":69,"src":28476},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,28478,28479],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,28481,28482],{},[1424,28483],{"alt":69,"src":28484},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,28486,28487],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,28489,28490],{},[1424,28491],{"alt":69,"src":28492},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,28494,28495],{},[1424,28496],{"alt":69,"src":28497},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,28499,28500],{},"梯度公式总结：",[19,28502,28503],{},[1424,28504],{"alt":69,"src":28505},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,28507,28508],{},"两个公式的分别应用场景：",[19,28510,28511],{},"对于离散的动作：",[19,28513,28514],{},[1424,28515],{"alt":69,"src":28516},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,28518,28519],{},"对于连续的动作：",[19,28521,28522],{},[1424,28523],{"alt":69,"src":28524},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,28526,28527],{},[1424,28528],{"alt":69,"src":28529},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,28531,28533],{"id":28532},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,28535,28536],{},"使用蒙特卡洛来近似计算策略梯度",[19,28538,28539],{},"蒙特卡洛法的解释如下：",[19,28541,28542],{},[1424,28543],{"alt":69,"src":28544},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,28546,28547],{},[1424,28548],{"alt":69,"src":28549},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,28551,28552],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[27,28554,28555],{},[30,28556,28557],{},"方法一：reinforce算法",[19,28559,28560],{},[1424,28561],{"alt":69,"src":28562},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,28564,28565],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[27,28567,28568],{"start":94},[30,28569,28570],{},"方法二：actor-critic算法",[19,28572,28573],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,28575,28576],{},"两个网络的构建：",[19,28578,28579],{},[1424,28580],{"alt":69,"src":28581},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,28583,28584],{},"actor网路：",[19,28586,28587],{},[1424,28588],{"alt":69,"src":28589},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,28591,28592],{},"critic网络",[19,28594,28595],{},[1424,28596],{"alt":69,"src":28597},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[27,28599,28600],{"start":1141},[30,28601,28602],{},"网络的训练",[19,28604,28605],{},"网络描述",[19,28607,28608],{},[1424,28609],{"alt":69,"src":28610},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,28612,28613],{},[1424,28614],{"alt":69,"src":28615},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,28617,28618],{},"TD算法更新梯度：",[19,28620,28621],{},[1424,28622],{"alt":69,"src":28623},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,28625,28626],{},"策略网络更新梯度：",[19,28628,28629],{},[1424,28630],{"alt":69,"src":28631},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,28633,28634],{},"训练整个流程的具体描述：",[19,28636,28637,28640,28641],{},[1424,28638],{"alt":69,"src":28639},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1424,28642],{"alt":69,"src":28643},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":69,"searchDepth":94,"depth":94,"links":28645},[28646,28647],{"id":28422,"depth":94,"text":28423},{"id":28532,"depth":94,"text":28533},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":28414,"description":69},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":28654,"title":28655,"body":28656,"description":28663,"extension":5121,"meta":28713,"navigation":2362,"path":28714,"seo":28715,"stem":28716,"__hash__":28717},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":28657,"toc":28709},[28658,28661,28664,28668,28671,28676,28680,28683,28688,28691,28696,28701,28704],[10,28659,28655],{"id":28660},"_5alphago算法",[19,28662,28663],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,28665,28667],{"id":28666},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,28669,28670],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,28672,28673],{},[1424,28674],{"alt":69,"src":28675},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,28677,28679],{"id":28678},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,28681,28682],{},"采用强化学习的方式训练策略网络",[19,28684,28685],{},[1424,28686],{"alt":69,"src":28687},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,28689,28690],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,28692,28693],{},[1424,28694],{"alt":69,"src":28695},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,28697,28698],{},[1424,28699],{"alt":69,"src":28700},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,28702,28703],{},"强化学习训练策略网络的总结：",[19,28705,28706],{},[1424,28707],{"alt":69,"src":28708},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":69,"searchDepth":94,"depth":94,"links":28710},[28711,28712],{"id":28666,"depth":94,"text":28667},{"id":28678,"depth":94,"text":28679},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":28655,"description":28663},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":28719,"title":28720,"body":28721,"description":28728,"extension":5121,"meta":28731,"navigation":2362,"path":28732,"seo":28733,"stem":28734,"__hash__":28735},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":28722,"toc":28729},[28723,28726],[10,28724,28720],{"id":28725},"_6价值网络",[19,28727,28728],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":69,"searchDepth":94,"depth":94,"links":28730},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":28720,"description":28728},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":28737,"title":28738,"body":28739,"description":28743,"extension":5121,"meta":28744,"navigation":2362,"path":28745,"seo":28746,"stem":28747,"__hash__":28748},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":28740,"toc":28741},[],{"title":69,"searchDepth":94,"depth":94,"links":28742},[],"记录自己的强化学习笔记。",{"category":27658},"\u002Fwiki\u002F2025-12-04",{"title":28738,"description":28743},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":28750,"title":28751,"body":28752,"description":27656,"extension":5121,"meta":28791,"navigation":2362,"path":28792,"seo":28793,"stem":28794,"__hash__":28795},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":28753,"toc":28789},[28754,28757,28760,28766,28769,28775,28778,28783,28786],[10,28755,28751],{"id":28756},"_1-项目概览与官方资源",[19,28758,28759],{},"官方文档：",[19,28761,28762],{},[324,28763,28764],{"href":28764,"rel":28765},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[28145],[19,28767,28768],{},"官方代码仓库：",[19,28770,28771],{},[324,28772,28773],{"href":28773,"rel":28774},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[28145],[19,28776,28777],{},"复现大体流程：",[19,28779,28780],{},[1424,28781],{"alt":69,"src":28782},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,28784,28785],{},"本教程的目标是打通这条链路：",[19,28787,28788],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":69,"searchDepth":94,"depth":94,"links":28790},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":28751,"description":27656},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":28797,"title":28798,"body":28799,"description":27656,"extension":5121,"meta":28915,"navigation":2362,"path":28916,"seo":28917,"stem":28918,"__hash__":28919},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":28800,"toc":28910},[28801,28804,28808,28811,28818,28822,28825,28834,28844,28848,28878,28881,28907],[10,28802,28798],{"id":28803},"_2-环境准备与设备连接",[14,28805,28807],{"id":28806},"_21-系统与环境","2.1 系统与环境",[19,28809,28810],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,28812,28813,28814,28817],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[71,28815,28816],{},"lerobot"," 依赖。",[14,28819,28821],{"id":28820},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,28823,28824],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[64,28826,28828],{"className":28102,"code":28827,"language":28104,"meta":69,"style":69},"lerobot-find-out\n",[71,28829,28830],{"__ignoreMap":69},[74,28831,28832],{"class":76,"line":77},[74,28833,28827],{"class":1925},[19,28835,28836,28837,298,28840,28843],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[71,28838,28839],{},"\u002Fdev\u002FttyACM0",[71,28841,28842],{},"\u002Fdev\u002FttyACM1","）。",[14,28845,28847],{"id":28846},"_23-串口授权","2.3 串口授权",[64,28849,28851],{"className":28102,"code":28850,"language":28104,"meta":69,"style":69},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[71,28852,28853,28867],{"__ignoreMap":69},[74,28854,28855,28858,28861,28864],{"class":76,"line":77},[74,28856,28857],{"class":1925},"sudo",[74,28859,28860],{"class":190}," chmod",[74,28862,28863],{"class":134}," 666",[74,28865,28866],{"class":190}," \u002Fdev\u002FttyACM0\n",[74,28868,28869,28871,28873,28875],{"class":76,"line":94},[74,28870,28857],{"class":1925},[74,28872,28860],{"class":190},[74,28874,28863],{"class":134},[74,28876,28877],{"class":190}," \u002Fdev\u002FttyACM1\n",[19,28879,28880],{},"说明：",[1093,28882,28883,28888,28894,28904],{},[30,28884,28885,28887],{},[71,28886,28857],{},"：以 root 权限执行命令。",[30,28889,28890,28893],{},[71,28891,28892],{},"chmod","：修改设备节点权限。",[30,28895,28896,28899,28900,28903],{},[71,28897,28898],{},"666","：",[71,28901,28902],{},"rw-rw-rw-","，所有用户可读写。",[30,28905,28906],{},"串口号必须替换为你机器上的真实端口。",[5090,28908,28909],{},"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":69,"searchDepth":94,"depth":94,"links":28911},[28912,28913,28914],{"id":28806,"depth":94,"text":28807},{"id":28820,"depth":94,"text":28821},{"id":28846,"depth":94,"text":28847},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":28798,"description":27656},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":28921,"title":28922,"body":28923,"description":27656,"extension":5121,"meta":29084,"navigation":2362,"path":29085,"seo":29086,"stem":29087,"__hash__":29088},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":28924,"toc":29080},[28925,28929,28933,28939,28942,28999,29002,29006,29009,29077],[10,28926,28928],{"id":28927},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,28930,28932],{"id":28931},"_31-配置电机-id","3.1 配置电机 ID",[19,28934,28935,28936,28938],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[71,28937,303],{},"，需要改成机械臂链路里不冲突的编号。",[19,28940,28941],{},"方式一：用 LeRobot 命令逐步写入。",[64,28943,28945],{"className":28102,"code":28944,"language":28104,"meta":69,"style":69},"# 主臂舵机配置 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",[71,28946,28947,28952,28960,28967,28972,28976,28981,28987,28994],{"__ignoreMap":69},[74,28948,28949],{"class":76,"line":77},[74,28950,28951],{"class":144},"# 主臂舵机配置 ID\n",[74,28953,28954,28957],{"class":76,"line":94},[74,28955,28956],{"class":1925},"lerobot-setup-motors",[74,28958,28959],{"class":134}," \\\n",[74,28961,28962,28965],{"class":76,"line":1141},[74,28963,28964],{"class":134},"  --teleop.type=so101_leader",[74,28966,28959],{"class":134},[74,28968,28969],{"class":76,"line":1156},[74,28970,28971],{"class":134},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[74,28973,28974],{"class":76,"line":1162},[74,28975,2363],{"emptyLinePlaceholder":2362},[74,28977,28978],{"class":76,"line":1176},[74,28979,28980],{"class":144},"# 从臂舵机配置 ID\n",[74,28982,28983,28985],{"class":76,"line":1182},[74,28984,28956],{"class":1925},[74,28986,28959],{"class":134},[74,28988,28989,28992],{"class":76,"line":1273},[74,28990,28991],{"class":134},"  --robot.type=so101_follower",[74,28993,28959],{"class":134},[74,28995,28996],{"class":76,"line":1279},[74,28997,28998],{"class":134},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,29000,29001],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,29003,29005],{"id":29004},"_32-机械臂校准","3.2 机械臂校准",[19,29007,29008],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[64,29010,29012],{"className":28102,"code":29011,"language":28104,"meta":69,"style":69},"# 主臂校准\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",[71,29013,29014,29019,29026,29032,29039,29044,29048,29053,29059,29065,29072],{"__ignoreMap":69},[74,29015,29016],{"class":76,"line":77},[74,29017,29018],{"class":144},"# 主臂校准\n",[74,29020,29021,29024],{"class":76,"line":94},[74,29022,29023],{"class":1925},"lerobot-calibrate",[74,29025,28959],{"class":134},[74,29027,29028,29030],{"class":76,"line":1141},[74,29029,28964],{"class":134},[74,29031,28959],{"class":134},[74,29033,29034,29037],{"class":76,"line":1156},[74,29035,29036],{"class":134},"  --teleop.port=\u002Fdev\u002FttyACM0",[74,29038,28959],{"class":134},[74,29040,29041],{"class":76,"line":1162},[74,29042,29043],{"class":134},"  --teleop.id=my_awesome_leader_arm\n",[74,29045,29046],{"class":76,"line":1176},[74,29047,2363],{"emptyLinePlaceholder":2362},[74,29049,29050],{"class":76,"line":1182},[74,29051,29052],{"class":144},"# 从臂校准\n",[74,29054,29055,29057],{"class":76,"line":1273},[74,29056,29023],{"class":1925},[74,29058,28959],{"class":134},[74,29060,29061,29063],{"class":76,"line":1279},[74,29062,28991],{"class":134},[74,29064,28959],{"class":134},[74,29066,29067,29070],{"class":76,"line":1291},[74,29068,29069],{"class":134},"  --robot.port=\u002Fdev\u002FttyACM1",[74,29071,28959],{"class":134},[74,29073,29074],{"class":76,"line":1574},[74,29075,29076],{"class":134},"  --robot.id=my_awesome_follower_arm\n",[5090,29078,29079],{},"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":69,"searchDepth":94,"depth":94,"links":29081},[29082,29083],{"id":28931,"depth":94,"text":28932},{"id":29004,"depth":94,"text":29005},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":28922,"description":27656},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":29090,"title":29091,"body":29092,"description":27656,"extension":5121,"meta":29283,"navigation":2362,"path":29284,"seo":29285,"stem":29286,"__hash__":29287},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":29093,"toc":29279},[29094,29097,29101,29148,29152,29165,29228,29231,29276],[10,29095,29091],{"id":29096},"_4-遥操与相机接入",[14,29098,29100],{"id":29099},"_41-不带相机遥操","4.1 不带相机遥操",[64,29102,29104],{"className":28102,"code":29103,"language":28104,"meta":69,"style":69},"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",[71,29105,29106,29113,29119,29125,29132,29138,29144],{"__ignoreMap":69},[74,29107,29108,29111],{"class":76,"line":77},[74,29109,29110],{"class":1925},"lerobot-teleoperate",[74,29112,28959],{"class":134},[74,29114,29115,29117],{"class":76,"line":94},[74,29116,28991],{"class":134},[74,29118,28959],{"class":134},[74,29120,29121,29123],{"class":76,"line":1141},[74,29122,29069],{"class":134},[74,29124,28959],{"class":134},[74,29126,29127,29130],{"class":76,"line":1156},[74,29128,29129],{"class":134},"  --robot.id=my_awesome_follower_arm",[74,29131,28959],{"class":134},[74,29133,29134,29136],{"class":76,"line":1162},[74,29135,28964],{"class":134},[74,29137,28959],{"class":134},[74,29139,29140,29142],{"class":76,"line":1176},[74,29141,29036],{"class":134},[74,29143,28959],{"class":134},[74,29145,29146],{"class":76,"line":1182},[74,29147,29043],{"class":134},[14,29149,29151],{"id":29150},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[64,29153,29155],{"className":28102,"code":29154,"language":28104,"meta":69,"style":69},"lerobot-find-cameras opencv\n",[71,29156,29157],{"__ignoreMap":69},[74,29158,29159,29162],{"class":76,"line":77},[74,29160,29161],{"class":1925},"lerobot-find-cameras",[74,29163,29164],{"class":190}," opencv\n",[64,29166,29168],{"className":28102,"code":29167,"language":28104,"meta":69,"style":69},"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",[71,29169,29170,29176,29182,29188,29194,29204,29210,29216,29223],{"__ignoreMap":69},[74,29171,29172,29174],{"class":76,"line":77},[74,29173,29110],{"class":1925},[74,29175,28959],{"class":134},[74,29177,29178,29180],{"class":76,"line":94},[74,29179,28991],{"class":134},[74,29181,28959],{"class":134},[74,29183,29184,29186],{"class":76,"line":1141},[74,29185,29069],{"class":134},[74,29187,28959],{"class":134},[74,29189,29190,29192],{"class":76,"line":1156},[74,29191,29129],{"class":134},[74,29193,28959],{"class":134},[74,29195,29196,29199,29202],{"class":76,"line":1162},[74,29197,29198],{"class":134},"  --robot.cameras=",[74,29200,29201],{"class":190},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[74,29203,28959],{"class":134},[74,29205,29206,29208],{"class":76,"line":1176},[74,29207,28964],{"class":134},[74,29209,28959],{"class":134},[74,29211,29212,29214],{"class":76,"line":1182},[74,29213,29036],{"class":134},[74,29215,28959],{"class":134},[74,29217,29218,29221],{"class":76,"line":1273},[74,29219,29220],{"class":134},"  --teleop.id=my_awesome_leader_arm",[74,29222,28959],{"class":134},[74,29224,29225],{"class":76,"line":1279},[74,29226,29227],{"class":134},"  --display_data=true\n",[19,29229,29230],{},"相机参数说明：",[1093,29232,29233,29239,29245,29254,29264,29270],{},[30,29234,29235,29238],{},[71,29236,29237],{},"front","：相机名称。",[30,29240,29241,29244],{},[71,29242,29243],{},"type: opencv","：相机驱动类型。",[30,29246,29247,29250,29251,28843],{},[71,29248,29249],{},"index_or_path","：设备编号或设备路径（如 ",[71,29252,29253],{},"\u002Fdev\u002Fvideo4",[30,29255,29256,29259,29260,29263],{},[71,29257,29258],{},"width"," \u002F ",[71,29261,29262],{},"height","：图像分辨率。",[30,29265,29266,29269],{},[71,29267,29268],{},"fps","：采样帧率。",[30,29271,29272,29275],{},[71,29273,29274],{},"--display_data=true","：启用实时可视化。",[5090,29277,29278],{},"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":69,"searchDepth":94,"depth":94,"links":29280},[29281,29282],{"id":29099,"depth":94,"text":29100},{"id":29150,"depth":94,"text":29151},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":29091,"description":27656},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":29289,"title":29290,"body":29291,"description":27656,"extension":5121,"meta":29463,"navigation":2362,"path":29464,"seo":29465,"stem":29466,"__hash__":29467},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":29292,"toc":29458},[29293,29297,29301,29306,29311,29314,29356,29362,29366,29415,29420,29424,29427,29435,29440,29445,29450,29455],[10,29294,29296],{"id":29295},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,29298,29300],{"id":29299},"_51-生成访问令牌","5.1 生成访问令牌",[19,29302,29303],{},[1424,29304],{"alt":69,"src":29305},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,29307,29308],{},[1424,29309],{"alt":69,"src":29310},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,29312,29313],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[64,29315,29317],{"className":28102,"code":29316,"language":28104,"meta":69,"style":69},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[71,29318,29319,29332],{"__ignoreMap":69},[74,29320,29321,29324,29327,29329],{"class":76,"line":77},[74,29322,29323],{"class":80},"export",[74,29325,29326],{"class":84}," HF_TOKEN",[74,29328,131],{"class":80},[74,29330,29331],{"class":190},"\"your_huggingface_token\"\n",[74,29333,29334,29337,29340,29343,29346,29348,29351,29353],{"class":76,"line":94},[74,29335,29336],{"class":1925},"hf",[74,29338,29339],{"class":190}," auth",[74,29341,29342],{"class":190}," login",[74,29344,29345],{"class":134}," --token",[74,29347,14003],{"class":190},[74,29349,29350],{"class":84},"$HF_TOKEN",[74,29352,337],{"class":190},[74,29354,29355],{"class":134}," --add-to-git-credential\n",[19,29357,29358,29361],{},[71,29359,29360],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,29363,29365],{"id":29364},"_52-验证登录","5.2 验证登录",[64,29367,29369],{"className":28102,"code":29368,"language":28104,"meta":69,"style":69},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[71,29370,29371,29402],{"__ignoreMap":69},[74,29372,29373,29376,29378,29381,29383,29385,29388,29391,29394,29397,29400],{"class":76,"line":77},[74,29374,29375],{"class":84},"HF_USER",[74,29377,131],{"class":80},[74,29379,29380],{"class":84},"$(",[74,29382,29336],{"class":1925},[74,29384,29339],{"class":190},[74,29386,29387],{"class":190}," whoami",[74,29389,29390],{"class":80}," |",[74,29392,29393],{"class":1925}," head",[74,29395,29396],{"class":134}," -n",[74,29398,29399],{"class":134}," 1",[74,29401,91],{"class":84},[74,29403,29404,29407,29409,29412],{"class":76,"line":94},[74,29405,29406],{"class":134},"echo",[74,29408,14003],{"class":190},[74,29410,29411],{"class":84},"$HF_USER",[74,29413,29414],{"class":190},"\"\n",[19,29416,29417],{},[1424,29418],{"alt":69,"src":29419},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,29421,29423],{"id":29422},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,29425,29426],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1093,29428,29429,29432],{},[30,29430,29431],{},"Dataset Repo（用于上传演示数据）",[30,29433,29434],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,29436,29437],{},[1424,29438],{"alt":69,"src":29439},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,29441,29442],{},[1424,29443],{"alt":69,"src":29444},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,29446,29447],{},[1424,29448],{"alt":69,"src":29449},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,29451,29452],{},[1424,29453],{"alt":69,"src":29454},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5090,29456,29457],{},"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":69,"searchDepth":94,"depth":94,"links":29459},[29460,29461,29462],{"id":29299,"depth":94,"text":29300},{"id":29364,"depth":94,"text":29365},{"id":29422,"depth":94,"text":29423},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":29290,"description":27656},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":29469,"title":29470,"body":29471,"description":27656,"extension":5121,"meta":29668,"navigation":2362,"path":29669,"seo":29670,"stem":29671,"__hash__":29672},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":29472,"toc":29663},[29473,29477,29481,29577,29585,29590,29594,29610,29613,29617,29660],[10,29474,29476],{"id":29475},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,29478,29480],{"id":29479},"_61-录制示教数据","6.1 录制示教数据",[64,29482,29484],{"className":28102,"code":29483,"language":28104,"meta":69,"style":69},"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",[71,29485,29486,29493,29499,29505,29511,29520,29526,29532,29538,29545,29555,29562,29572],{"__ignoreMap":69},[74,29487,29488,29491],{"class":76,"line":77},[74,29489,29490],{"class":1925},"lerobot-record",[74,29492,28959],{"class":134},[74,29494,29495,29497],{"class":76,"line":94},[74,29496,28991],{"class":134},[74,29498,28959],{"class":134},[74,29500,29501,29503],{"class":76,"line":1141},[74,29502,29069],{"class":134},[74,29504,28959],{"class":134},[74,29506,29507,29509],{"class":76,"line":1156},[74,29508,29129],{"class":134},[74,29510,28959],{"class":134},[74,29512,29513,29515,29518],{"class":76,"line":1162},[74,29514,29198],{"class":134},[74,29516,29517],{"class":190},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[74,29519,28959],{"class":134},[74,29521,29522,29524],{"class":76,"line":1176},[74,29523,28964],{"class":134},[74,29525,28959],{"class":134},[74,29527,29528,29530],{"class":76,"line":1182},[74,29529,29036],{"class":134},[74,29531,28959],{"class":134},[74,29533,29534,29536],{"class":76,"line":1273},[74,29535,29220],{"class":134},[74,29537,28959],{"class":134},[74,29539,29540,29543],{"class":76,"line":1279},[74,29541,29542],{"class":134},"  --display_data=true",[74,29544,28959],{"class":134},[74,29546,29547,29550,29553],{"class":76,"line":1291},[74,29548,29549],{"class":134},"  --dataset.repo_id=",[74,29551,29552],{"class":190},"\"Embodied-AI-6\u002Fso101_test\"",[74,29554,28959],{"class":134},[74,29556,29557,29560],{"class":76,"line":1574},[74,29558,29559],{"class":134},"  --dataset.num_episodes=10",[74,29561,28959],{"class":134},[74,29563,29564,29567,29570],{"class":76,"line":1579},[74,29565,29566],{"class":134},"  --dataset.single_task=",[74,29568,29569],{"class":190},"\"Grab the green cube\"",[74,29571,28959],{"class":134},[74,29573,29574],{"class":76,"line":1585},[74,29575,29576],{"class":134},"  --resume=true\n",[1093,29578,29579],{},[30,29580,29581,29584],{},[71,29582,29583],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,29586,29587],{},[1424,29588],{"alt":69,"src":29589},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,29591,29593],{"id":29592},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[64,29595,29597],{"className":28102,"code":29596,"language":28104,"meta":69,"style":69},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[71,29598,29599],{"__ignoreMap":69},[74,29600,29601,29604,29607],{"class":76,"line":77},[74,29602,29603],{"class":1925},"rm",[74,29605,29606],{"class":134}," -rf",[74,29608,29609],{"class":190}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,29611,29612],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,29614,29616],{"id":29615},"_63-回放指定-episode","6.3 回放指定 episode",[64,29618,29620],{"className":28102,"code":29619,"language":28104,"meta":69,"style":69},"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",[71,29621,29622,29629,29635,29641,29647,29655],{"__ignoreMap":69},[74,29623,29624,29627],{"class":76,"line":77},[74,29625,29626],{"class":1925},"lerobot-replay",[74,29628,28959],{"class":134},[74,29630,29631,29633],{"class":76,"line":94},[74,29632,28991],{"class":134},[74,29634,28959],{"class":134},[74,29636,29637,29639],{"class":76,"line":1141},[74,29638,29069],{"class":134},[74,29640,28959],{"class":134},[74,29642,29643,29645],{"class":76,"line":1156},[74,29644,29129],{"class":134},[74,29646,28959],{"class":134},[74,29648,29649,29651,29653],{"class":76,"line":1162},[74,29650,29549],{"class":134},[74,29652,29552],{"class":190},[74,29654,28959],{"class":134},[74,29656,29657],{"class":76,"line":1176},[74,29658,29659],{"class":134},"  --dataset.episode=0\n",[5090,29661,29662],{},"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":69,"searchDepth":94,"depth":94,"links":29664},[29665,29666,29667],{"id":29479,"depth":94,"text":29480},{"id":29592,"depth":94,"text":29593},{"id":29615,"depth":94,"text":29616},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":29470,"description":27656},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":29674,"title":29675,"body":29676,"description":27656,"extension":5121,"meta":29804,"navigation":2362,"path":29805,"seo":29806,"stem":29807,"__hash__":29808},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":29677,"toc":29802},[29678,29682,29745,29748,29795,29800],[10,29679,29681],{"id":29680},"_7-act-模型训练","7. ACT 模型训练",[64,29683,29685],{"className":28102,"code":29684,"language":28104,"meta":69,"style":69},"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",[71,29686,29687,29694,29702,29709,29716,29723,29730,29737],{"__ignoreMap":69},[74,29688,29689,29692],{"class":76,"line":77},[74,29690,29691],{"class":1925},"lerobot-train",[74,29693,28959],{"class":134},[74,29695,29696,29698,29700],{"class":76,"line":94},[74,29697,29549],{"class":134},[74,29699,29552],{"class":190},[74,29701,28959],{"class":134},[74,29703,29704,29707],{"class":76,"line":1141},[74,29705,29706],{"class":134},"  --policy.type=act",[74,29708,28959],{"class":134},[74,29710,29711,29714],{"class":76,"line":1156},[74,29712,29713],{"class":134},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[74,29715,28959],{"class":134},[74,29717,29718,29721],{"class":76,"line":1162},[74,29719,29720],{"class":134},"  --job_name=act_so101_test",[74,29722,28959],{"class":134},[74,29724,29725,29728],{"class":76,"line":1176},[74,29726,29727],{"class":134},"  --policy.device=cuda",[74,29729,28959],{"class":134},[74,29731,29732,29735],{"class":76,"line":1182},[74,29733,29734],{"class":134},"  --wandb.enable=false",[74,29736,28959],{"class":134},[74,29738,29739,29742],{"class":76,"line":1273},[74,29740,29741],{"class":134},"  --policy.repo_id=",[74,29743,29744],{"class":190},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,29746,29747],{},"参数说明：",[1093,29749,29750,29756,29762,29768,29774,29783,29789],{},[30,29751,29752,29755],{},[71,29753,29754],{},"--dataset.repo_id","：训练数据集仓库。",[30,29757,29758,29761],{},[71,29759,29760],{},"--policy.type=act","：策略模型类型为 ACT。",[30,29763,29764,29767],{},[71,29765,29766],{},"--output_dir","：本地训练输出目录。",[30,29769,29770,29773],{},[71,29771,29772],{},"--job_name","：训练任务名称。",[30,29775,29776,29779,29780,28843],{},[71,29777,29778],{},"--policy.device","：训练设备（如 ",[71,29781,29782],{},"cuda",[30,29784,29785,29788],{},[71,29786,29787],{},"--wandb.enable","：是否启用 WandB 可视化。",[30,29790,29791,29794],{},[71,29792,29793],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,29796,29797],{},[1424,29798],{"alt":69,"src":29799},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5090,29801,29662],{},{"title":69,"searchDepth":94,"depth":94,"links":29803},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":29675,"description":27656},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":29810,"title":29811,"body":29812,"description":27656,"extension":5121,"meta":29899,"navigation":2362,"path":29900,"seo":29901,"stem":29902,"__hash__":29903},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":29813,"toc":29897},[29814,29817,29820,29887,29895],[10,29815,29811],{"id":29816},"_8-策略部署与自动采集",[19,29818,29819],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[64,29821,29823],{"className":28102,"code":29822,"language":28104,"meta":69,"style":69},"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",[71,29824,29825,29831,29837,29843,29851,29857,29864,29872,29880],{"__ignoreMap":69},[74,29826,29827,29829],{"class":76,"line":77},[74,29828,29490],{"class":1925},[74,29830,28959],{"class":134},[74,29832,29833,29835],{"class":76,"line":94},[74,29834,28991],{"class":134},[74,29836,28959],{"class":134},[74,29838,29839,29841],{"class":76,"line":1141},[74,29840,29069],{"class":134},[74,29842,28959],{"class":134},[74,29844,29845,29847,29849],{"class":76,"line":1156},[74,29846,29198],{"class":134},[74,29848,29517],{"class":190},[74,29850,28959],{"class":134},[74,29852,29853,29855],{"class":76,"line":1162},[74,29854,29129],{"class":134},[74,29856,28959],{"class":134},[74,29858,29859,29862],{"class":76,"line":1176},[74,29860,29861],{"class":134},"  --display_data=false",[74,29863,28959],{"class":134},[74,29865,29866,29868,29870],{"class":76,"line":1182},[74,29867,29549],{"class":134},[74,29869,29552],{"class":190},[74,29871,28959],{"class":134},[74,29873,29874,29876,29878],{"class":76,"line":1273},[74,29875,29566],{"class":134},[74,29877,29569],{"class":190},[74,29879,28959],{"class":134},[74,29881,29882,29885],{"class":76,"line":1279},[74,29883,29884],{"class":134},"  --policy.path=",[74,29886,29744],{"class":190},[1093,29888,29889],{},[30,29890,29891,29894],{},[71,29892,29893],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5090,29896,29662],{},{"title":69,"searchDepth":94,"depth":94,"links":29898},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":29811,"description":27656},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":29905,"title":29906,"body":29907,"description":27656,"extension":5121,"meta":29936,"navigation":2362,"path":29937,"seo":29938,"stem":29939,"__hash__":29940},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":29908,"toc":29934},[29909,29913,29916,29922,29925,29931],[10,29910,29912],{"id":29911},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,29914,29915],{},"项目地址：",[19,29917,29918],{},[324,29919,29920],{"href":29920,"rel":29921},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[28145],[19,29923,29924],{},"参考教程：",[19,29926,29927],{},[324,29928,29929],{"href":29929,"rel":29930},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[28145],[19,29932,29933],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":69,"searchDepth":94,"depth":94,"links":29935},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":29906,"description":27656},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":29942,"title":29943,"body":29944,"description":29948,"extension":5121,"meta":29949,"navigation":2362,"path":29950,"seo":29951,"stem":29952,"__hash__":29953},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":29945,"toc":29946},[],{"title":69,"searchDepth":94,"depth":94,"links":29947},[],"act复现",{"category":27658},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":29943,"description":29948},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":29955,"title":29956,"body":29957,"description":69,"extension":5121,"meta":30259,"navigation":2362,"path":30260,"seo":30261,"stem":30262,"__hash__":30263},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":29958,"toc":30251},[29959,29962,29966,29976,29983,29990,29993,30000,30003,30006,30010,30022,30026,30072,30075,30078,30081,30084,30087,30091,30129,30135,30139,30193,30198,30201,30204,30209,30212,30217,30220,30223,30227,30230,30233,30237],[10,29960,29956],{"id":29961},"_1简介",[44,29963,29965],{"id":29964},"_11什么是-docker","1.1什么是 Docker？",[19,29967,29968,29969,29972,29973],{},"Docker 是一个开源的 ",[235,29970,29971],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[235,29974,29975],{},"一次构建，到处运行。",[19,29977,29978,29979,29982],{},"“ ",[235,29980,29981],{},"一次构建，到处运行"," ”也就是说：",[27,29984,29985],{},[30,29986,29987],{},[235,29988,29989],{},"之前：",[19,29991,29992],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[27,29994,29995],{},[30,29996,29997],{},[235,29998,29999],{},"使用docker后：",[19,30001,30002],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,30004,30005],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[44,30007,30009],{"id":30008},"_12它是怎么工作的","1.2.它是怎么工作的？",[1093,30011,30012,30015],{},[30,30013,30014],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[30,30016,30017,30018,30021],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[235,30019,30020],{},"无论在哪运行都一样稳定"," 。",[44,30023,30025],{"id":30024},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[223,30027,30028,30038],{},[226,30029,30030],{},[229,30031,30032,30035],{},[232,30033,30034],{"align":28016},"概念",[232,30036,30037],{"align":28016},"解释",[270,30039,30040,30048,30056,30064],{},[229,30041,30042,30045],{},[275,30043,30044],{"align":28016},"镜像",[275,30046,30047],{"align":28016},"Image，运行容器的模板，像是一个应用快照",[229,30049,30050,30053],{},[275,30051,30052],{"align":28016},"容器",[275,30054,30055],{"align":28016},"Container，运行中的镜像实例，有自己的文件系统、网络等",[229,30057,30058,30061],{},[275,30059,30060],{"align":28016},"Dockerfile",[275,30062,30063],{"align":28016},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[229,30065,30066,30069],{},[275,30067,30068],{"align":28016},"仓库",[275,30070,30071],{"align":28016},"Registry，存放镜像的地方，比如 Docker Hub",[19,30073,30074],{},"抽象化理解:",[19,30076,30077],{},"Docker镜像≈C++类",[19,30079,30080],{},"Docker容器≈C++类实例(即对象)",[19,30082,30083],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,30085,30086],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[44,30088,30090],{"id":30089},"_14类比理解","1.4.类比理解",[223,30092,30093,30103],{},[226,30094,30095],{},[229,30096,30097,30100],{},[232,30098,30099],{"align":28016},"传统部署",[232,30101,30102],{"align":28016},"Docker部署",[270,30104,30105,30113,30121],{},[229,30106,30107,30110],{},[275,30108,30109],{"align":28016},"手动安装依赖、调试版本不一致问题",[275,30111,30112],{"align":28016},"一次打包环境和代码",[229,30114,30115,30118],{},[275,30116,30117],{"align":28016},"程序“裸奔”跑在系统上",[275,30119,30120],{"align":28016},"程序“穿着容器”隔离运行",[229,30122,30123,30126],{},[275,30124,30125],{"align":28016},"容易“在我电脑上能跑”",[275,30127,30128],{"align":28016},"保证“无论在哪都能跑”",[19,30130,30131,30132],{},"就像快递包裹： ",[235,30133,30134],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[44,30136,30138],{"id":30137},"_15docker-的核心优势","1.5.Docker 的核心优势",[223,30140,30141,30151],{},[226,30142,30143],{},[229,30144,30145,30148],{},[232,30146,30147],{"align":28016},"优势",[232,30149,30150],{"align":28016},"说明",[270,30152,30153,30161,30169,30177,30185],{},[229,30154,30155,30158],{},[275,30156,30157],{"align":28016},"轻量级",[275,30159,30160],{"align":28016},"基于系统内核共享，启动速度快，占资源少",[229,30162,30163,30166],{},[275,30164,30165],{"align":28016},"跨平台",[275,30167,30168],{"align":28016},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[229,30170,30171,30174],{},[275,30172,30173],{"align":28016},"易于迁移部署",[275,30175,30176],{"align":28016},"应用和环境一起封装，不怕依赖不一致",[229,30178,30179,30182],{},[275,30180,30181],{"align":28016},"易于版本控制",[275,30183,30184],{"align":28016},"镜像版本可控，支持回滚",[229,30186,30187,30190],{},[275,30188,30189],{"align":28016},"生态丰富",[275,30191,30192],{"align":28016},"Docker Hub 上有成千上万的现成镜像可用",[27,30194,30195],{},[30,30196,30197],{},"在Linux上可以几乎实现无性能损失。",[19,30199,30200],{},"docker里的发行版和本机共用Linux内核。",[19,30202,30203],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[27,30205,30206],{},[30,30207,30208],{},"可以快速部署在绝大多数Linux发行版",[19,30210,30211],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[27,30213,30214],{},[30,30215,30216],{},"配置环境简单",[19,30218,30219],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,30221,30222],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[27,30224,30225],{},[30,30226,30189],{},[19,30228,30229],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,30231,30232],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[44,30234,30236],{"id":30235},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1093,30238,30239,30242,30245,30248],{},[30,30240,30241],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[30,30243,30244],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[30,30246,30247],{},"微服务架构：每个服务一个容器，灵活组合",[30,30249,30250],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":69,"searchDepth":94,"depth":94,"links":30252},[30253,30254,30255,30256,30257,30258],{"id":29964,"depth":1141,"text":29965},{"id":30008,"depth":1141,"text":30009},{"id":30024,"depth":1141,"text":30025},{"id":30089,"depth":1141,"text":30090},{"id":30137,"depth":1141,"text":30138},{"id":30235,"depth":1141,"text":30236},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":29956,"description":69},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":30265,"title":30266,"body":30267,"description":69,"extension":5121,"meta":31000,"navigation":2362,"path":31001,"seo":31002,"stem":31003,"__hash__":31004},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":30268,"toc":30995},[30269,30272,30276,30279,30282,30288,30294,30298,30307,30310,30367,30370,30421,30424,30507,30510,30547,30551,30562,30575,30582,30585,30665,30668,30718,30721,30744,30748,30755,30758,30774,30780,30783,30799,30805,30808,30824,30838,30844,30864,30870,30873,30885,30891,30894,30908,30914,30917,30937,30942,30945,30948,30952,30955,30958,30961,30968,30971,30974,30977,30982,30987,30992],[10,30270,30266],{"id":30271},"_2安装docker",[44,30273,30275],{"id":30274},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,30277,30278],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,30280,30281],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,30283,30284],{},[324,30285,30286],{"href":30286,"rel":30287},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[28145],[19,30289,30290],{},[324,30291,30292],{"href":30292,"rel":30293},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[28145],[26277,30295,30297],{"id":30296},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,30299,30300,30301,30306],{},"以下内容根据 ",[324,30302,30305],{"href":30303,"rel":30304},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[28145],"官方文档"," 修改而来。",[19,30308,30309],{},"如果你过去安装过 docker，先删掉：",[64,30311,30313],{"className":28102,"code":30312,"language":28104,"meta":69,"style":69},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[71,30314,30315],{"__ignoreMap":69},[74,30316,30317,30319,30322,30325,30328,30331,30334,30337,30340,30343,30346,30349,30352,30355,30358,30361,30364],{"class":76,"line":77},[74,30318,2988],{"class":80},[74,30320,30321],{"class":84}," pkg ",[74,30323,30324],{"class":80},"in",[74,30326,30327],{"class":190}," docker.io",[74,30329,30330],{"class":190}," docker-doc",[74,30332,30333],{"class":190}," docker-compose",[74,30335,30336],{"class":190}," docker-compose-v2",[74,30338,30339],{"class":190}," podman-docker",[74,30341,30342],{"class":190}," containerd",[74,30344,30345],{"class":190}," runc",[74,30347,30348],{"class":84},"; ",[74,30350,30351],{"class":80},"do",[74,30353,30354],{"class":1925}," sudo",[74,30356,30357],{"class":190}," apt-get",[74,30359,30360],{"class":190}," remove",[74,30362,30363],{"class":84}," $pkg; ",[74,30365,30366],{"class":80},"done\n",[19,30368,30369],{},"首先安装依赖和GPG：",[64,30371,30375],{"className":30372,"code":30373,"language":30374,"meta":69,"style":69},"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",[71,30376,30377,30382,30387,30392,30397,30402,30407,30411,30416],{"__ignoreMap":69},[74,30378,30379],{"class":76,"line":77},[74,30380,30381],{},"# Add Docker's official GPG key:\n",[74,30383,30384],{"class":76,"line":94},[74,30385,30386],{},"sudo apt-get update\n",[74,30388,30389],{"class":76,"line":1141},[74,30390,30391],{},"sudo apt-get install ca-certificates curl\n",[74,30393,30394],{"class":76,"line":1156},[74,30395,30396],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[74,30398,30399],{"class":76,"line":1162},[74,30400,30401],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[74,30403,30404],{"class":76,"line":1176},[74,30405,30406],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[74,30408,30409],{"class":76,"line":1182},[74,30410,2363],{"emptyLinePlaceholder":2362},[74,30412,30413],{"class":76,"line":1273},[74,30414,30415],{},"# 如果上面这行报错就弄下面这行\n",[74,30417,30418],{"class":76,"line":1279},[74,30419,30420],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,30422,30423],{},"信任 Docker 的 GPG 公钥并添加仓库：",[64,30425,30427],{"className":28102,"code":30426,"language":28104,"meta":69,"style":69},"# 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",[71,30428,30429,30434,30440,30457,30490],{"__ignoreMap":69},[74,30430,30431],{"class":76,"line":77},[74,30432,30433],{"class":144},"# Add the repository to Apt sources:\n",[74,30435,30436,30438],{"class":76,"line":94},[74,30437,29406],{"class":134},[74,30439,28959],{"class":134},[74,30441,30442,30445,30448,30451,30454],{"class":76,"line":1141},[74,30443,30444],{"class":190},"  \"deb [arch=$(",[74,30446,30447],{"class":1925},"dpkg",[74,30449,30450],{"class":134}," --print-architecture",[74,30452,30453],{"class":190},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[74,30455,30456],{"class":134},"\\\n",[74,30458,30459,30462,30464,30466,30469,30472,30474,30476,30479,30481,30483,30486,30488],{"class":76,"line":1156},[74,30460,30461],{"class":190},"  \"",[74,30463,29380],{"class":84},[74,30465,644],{"class":134},[74,30467,30468],{"class":190}," \u002Fetc\u002Fos-release",[74,30470,30471],{"class":84}," && ",[74,30473,29406],{"class":134},[74,30475,14003],{"class":190},[74,30477,30478],{"class":84},"$VERSION_CODENAME",[74,30480,337],{"class":190},[74,30482,515],{"class":84},[74,30484,30485],{"class":190},"\" stable\"",[74,30487,29390],{"class":80},[74,30489,28959],{"class":134},[74,30491,30492,30495,30498,30501,30504],{"class":76,"line":1162},[74,30493,30494],{"class":1925},"  sudo",[74,30496,30497],{"class":190}," tee",[74,30499,30500],{"class":190}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[74,30502,30503],{"class":80}," >",[74,30505,30506],{"class":190}," \u002Fdev\u002Fnull\n",[19,30508,30509],{},"最后安装",[64,30511,30513],{"className":28102,"code":30512,"language":28104,"meta":69,"style":69},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[71,30514,30515,30524],{"__ignoreMap":69},[74,30516,30517,30519,30521],{"class":76,"line":77},[74,30518,28857],{"class":1925},[74,30520,30357],{"class":190},[74,30522,30523],{"class":190}," update\n",[74,30525,30526,30528,30530,30532,30535,30538,30541,30544],{"class":76,"line":94},[74,30527,28857],{"class":1925},[74,30529,30357],{"class":190},[74,30531,28114],{"class":190},[74,30533,30534],{"class":190}," docker-ce",[74,30536,30537],{"class":190}," docker-ce-cli",[74,30539,30540],{"class":190}," containerd.io",[74,30542,30543],{"class":190}," docker-buildx-plugin",[74,30545,30546],{"class":190}," docker-compose-plugin\n",[26277,30548,30550],{"id":30549},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,30552,30553,30554,30557,30558,30561],{},"查看自己自己包管理工具版本（dnf是 ",[235,30555,30556],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[235,30559,30560],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[64,30563,30565],{"className":28102,"code":30564,"language":28104,"meta":69,"style":69},"dnf --version\n",[71,30566,30567],{"__ignoreMap":69},[74,30568,30569,30572],{"class":76,"line":77},[74,30570,30571],{"class":1925},"dnf",[74,30573,30574],{"class":134}," --version\n",[19,30576,30300,30577,30581],{},[324,30578,30305],{"href":30579,"rel":30580},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[28145]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,30583,30584],{},"如果你之前安装过 docker，请先删掉",[64,30586,30588],{"className":28102,"code":30587,"language":28104,"meta":69,"style":69},"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",[71,30589,30590,30604,30611,30618,30625,30632,30639,30646,30653,30660],{"__ignoreMap":69},[74,30591,30592,30594,30597,30599,30602],{"class":76,"line":77},[74,30593,28857],{"class":1925},[74,30595,30596],{"class":190}," dnf",[74,30598,30360],{"class":190},[74,30600,30601],{"class":190}," docker",[74,30603,28959],{"class":134},[74,30605,30606,30609],{"class":76,"line":94},[74,30607,30608],{"class":190},"                  docker-client",[74,30610,28959],{"class":134},[74,30612,30613,30616],{"class":76,"line":1141},[74,30614,30615],{"class":190},"                  docker-client-latest",[74,30617,28959],{"class":134},[74,30619,30620,30623],{"class":76,"line":1156},[74,30621,30622],{"class":190},"                  docker-common",[74,30624,28959],{"class":134},[74,30626,30627,30630],{"class":76,"line":1162},[74,30628,30629],{"class":190},"                  docker-latest",[74,30631,28959],{"class":134},[74,30633,30634,30637],{"class":76,"line":1176},[74,30635,30636],{"class":190},"                  docker-latest-logrotate",[74,30638,28959],{"class":134},[74,30640,30641,30644],{"class":76,"line":1182},[74,30642,30643],{"class":190},"                  docker-logrotate",[74,30645,28959],{"class":134},[74,30647,30648,30651],{"class":76,"line":1273},[74,30649,30650],{"class":190},"                  docker-selinux",[74,30652,28959],{"class":134},[74,30654,30655,30658],{"class":76,"line":1279},[74,30656,30657],{"class":190},"                  docker-engine-selinux",[74,30659,28959],{"class":134},[74,30661,30662],{"class":76,"line":1291},[74,30663,30664],{"class":190},"                  docker-engine\n",[19,30666,30667],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[64,30669,30671],{"className":28102,"code":30670,"language":28104,"meta":69,"style":69},"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",[71,30672,30673,30687,30702],{"__ignoreMap":69},[74,30674,30675,30677,30679,30682,30684],{"class":76,"line":77},[74,30676,28857],{"class":1925},[74,30678,30596],{"class":190},[74,30680,30681],{"class":134}," -y",[74,30683,28114],{"class":190},[74,30685,30686],{"class":190}," dnf-plugins-core\n",[74,30688,30689,30691,30693,30696,30699],{"class":76,"line":94},[74,30690,28857],{"class":1925},[74,30692,30596],{"class":190},[74,30694,30695],{"class":190}," config-manager",[74,30697,30698],{"class":190}," addrepo",[74,30700,30701],{"class":134}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[74,30703,30704,30706,30709,30712,30715],{"class":76,"line":1141},[74,30705,28857],{"class":1925},[74,30707,30708],{"class":190}," sed",[74,30710,30711],{"class":134}," -i",[74,30713,30714],{"class":190}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[74,30716,30717],{"class":190}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,30719,30720],{},"最后安装：",[64,30722,30724],{"className":28102,"code":30723,"language":28104,"meta":69,"style":69},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[71,30725,30726],{"__ignoreMap":69},[74,30727,30728,30730,30732,30734,30736,30738,30740,30742],{"class":76,"line":77},[74,30729,28857],{"class":1925},[74,30731,30596],{"class":190},[74,30733,28114],{"class":190},[74,30735,30534],{"class":190},[74,30737,30537],{"class":190},[74,30739,30540],{"class":190},[74,30741,30543],{"class":190},[74,30743,30546],{"class":190},[44,30745,30747],{"id":30746},"_22配置环境","2.2.配置环境",[26277,30749,30751,30754],{"id":30750},"_221检查-docker-服务状态",[235,30752,30753],{},"2.2.1.检查 Docker 服务状态"," ：",[19,30756,30757],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[64,30759,30761],{"className":28102,"code":30760,"language":28104,"meta":69,"style":69},"systemctl status docker\n",[71,30762,30763],{"__ignoreMap":69},[74,30764,30765,30768,30771],{"class":76,"line":77},[74,30766,30767],{"class":1925},"systemctl",[74,30769,30770],{"class":190}," status",[74,30772,30773],{"class":190}," docker\n",[26277,30775,30777,30754],{"id":30776},"_222启动-docker-服务",[235,30778,30779],{},"2.2.2.启动 Docker 服务",[19,30781,30782],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[64,30784,30786],{"className":28102,"code":30785,"language":28104,"meta":69,"style":69},"sudo systemctl start docker\n",[71,30787,30788],{"__ignoreMap":69},[74,30789,30790,30792,30795,30797],{"class":76,"line":77},[74,30791,28857],{"class":1925},[74,30793,30794],{"class":190}," systemctl",[74,30796,4147],{"class":190},[74,30798,30773],{"class":190},[26277,30800,30802,30754],{"id":30801},"_223设置-docker-开机自启",[235,30803,30804],{},"2.2.3.设置 Docker 开机自启",[19,30806,30807],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[64,30809,30811],{"className":28102,"code":30810,"language":28104,"meta":69,"style":69},"sudo systemctl enable docker\n",[71,30812,30813],{"__ignoreMap":69},[74,30814,30815,30817,30819,30822],{"class":76,"line":77},[74,30816,28857],{"class":1925},[74,30818,30794],{"class":190},[74,30820,30821],{"class":190}," enable",[74,30823,30773],{"class":190},[26277,30825,30827,18074,30830,18074,30835,30754],{"id":30826},"_224将用户添加到-docker-组",[235,30828,30829],{},"2.2.4.将用户添加到",[235,30831,30832],{},[71,30833,30834],{},"docker",[235,30836,30837],{},"组",[19,30839,30840,30841,30843],{},"使用以下命令将当前用户添加到 ",[71,30842,30834],{}," 组：",[64,30845,30847],{"className":28102,"code":30846,"language":28104,"meta":69,"style":69},"sudo usermod -aG docker $USER\n",[71,30848,30849],{"__ignoreMap":69},[74,30850,30851,30853,30856,30859,30861],{"class":76,"line":77},[74,30852,28857],{"class":1925},[74,30854,30855],{"class":190}," usermod",[74,30857,30858],{"class":134}," -aG",[74,30860,30601],{"class":190},[74,30862,30863],{"class":84}," $USER\n",[26277,30865,30867,30754],{"id":30866},"_225退出并重新登录",[235,30868,30869],{},"2.2.5.退出并重新登录",[19,30871,30872],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[64,30874,30876],{"className":28102,"code":30875,"language":28104,"meta":69,"style":69},"newgrp docker\n",[71,30877,30878],{"__ignoreMap":69},[74,30879,30880,30883],{"class":76,"line":77},[74,30881,30882],{"class":1925},"newgrp",[74,30884,30773],{"class":190},[26277,30886,30888,30754],{"id":30887},"_226重新启动-docker-服务如果需要",[235,30889,30890],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,30892,30893],{},"确保 Docker 服务正在运行，可以使用以下命令：",[64,30895,30896],{"className":28102,"code":30785,"language":28104,"meta":69,"style":69},[71,30897,30898],{"__ignoreMap":69},[74,30899,30900,30902,30904,30906],{"class":76,"line":77},[74,30901,28857],{"class":1925},[74,30903,30794],{"class":190},[74,30905,4147],{"class":190},[74,30907,30773],{"class":190},[26277,30909,30911,30754],{"id":30910},"_227重启电脑后检查-docker-服务状态",[235,30912,30913],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,30915,30916],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[64,30918,30920],{"className":28102,"code":30919,"language":28104,"meta":69,"style":69},"sudo reboot\nsystemctl status docker\n",[71,30921,30922,30929],{"__ignoreMap":69},[74,30923,30924,30926],{"class":76,"line":77},[74,30925,28857],{"class":1925},[74,30927,30928],{"class":190}," reboot\n",[74,30930,30931,30933,30935],{"class":76,"line":94},[74,30932,30767],{"class":1925},[74,30934,30770],{"class":190},[74,30936,30773],{"class":190},[19,30938,30939],{},[1424,30940],{"alt":69,"src":30941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,30943,30944],{},"第三行显示enabled说明开机自启动成功",[19,30946,30947],{},"按q退出",[44,30949,30951],{"id":30950},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,30953,30954],{},"优先使用linux来使用docker是比较好的",[19,30956,30957],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,30959,30960],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,30962,30963,30964],{},"官方下载安装:",[324,30965,30966],{"href":30966,"rel":30967},"https:\u002F\u002Fwww.docker.com\u002F",[28145],[19,30969,30970],{},"Windows的Docker显卡直通与USB直通:",[19,30972,30973],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,30975,30976],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,30978,30979],{},[1424,30980],{"alt":69,"src":30981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,30983,30984],{},[1424,30985],{"alt":69,"src":30986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,30988,30989],{},[1424,30990],{"alt":69,"src":30991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5090,30993,30994],{},"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":69,"searchDepth":94,"depth":94,"links":30996},[30997,30998,30999],{"id":30274,"depth":1141,"text":30275},{"id":30746,"depth":1141,"text":30747},{"id":30950,"depth":1141,"text":30951},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":30266,"description":69},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":31006,"title":31007,"body":31008,"description":31015,"extension":5121,"meta":31708,"navigation":2362,"path":31709,"seo":31710,"stem":31711,"__hash__":31712},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":31009,"toc":31702},[31010,31013,31016,31020,31025,31030,31033,31061,31066,31075,31078,31083,31087,31094,31099,31105,31109,31112,31116,31121,31213,31218,31236,31241,31262,31267,31283,31287,31292,31321,31326,31372,31377,31421,31429,31446,31451,31467,31472,31486,31489,31492,31495,31498,31527,31530,31535,31539,31542,31545,31551,31554,31557,31560,31622,31629,31634,31637,31655,31659,31662,31679,31682,31685,31699],[10,31011,31007],{"id":31012},"_3docker直通",[19,31014,31015],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[44,31017,31019],{"id":31018},"_31usb直通","3.1.USB直通",[19,31021,31022],{},[1424,31023],{"alt":69,"src":31024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[27,31026,31027],{},[30,31028,31029],{},"方法一(不是很推荐新手)：",[19,31031,31032],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[64,31034,31036],{"className":28102,"code":31035,"language":28104,"meta":69,"style":69},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[71,31037,31038,31046,31051],{"__ignoreMap":69},[74,31039,31040,31043],{"class":76,"line":77},[74,31041,31042],{"class":1925},"ls",[74,31044,31045],{"class":190}," \u002Fdev\n",[74,31047,31048],{"class":76,"line":94},[74,31049,31050],{"class":144},"#例如\n",[74,31052,31053,31056,31058],{"class":76,"line":1141},[74,31054,31055],{"class":84},"--device",[74,31057,131],{"class":80},[74,31059,31060],{"class":190},"\u002Fdev\u002Ftty_USB0\n",[27,31062,31063],{"start":94},[30,31064,31065],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[64,31067,31069],{"className":28102,"code":31068,"language":28104,"meta":69,"style":69},"--privileged\n",[71,31070,31071],{"__ignoreMap":69},[74,31072,31073],{"class":76,"line":77},[74,31074,31068],{"class":1925},[19,31076,31077],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,31079,31080],{},[1424,31081],{"alt":69,"src":31082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[44,31084,31086],{"id":31085},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,31088,31089,31090,31093],{},"NVIDIA Container Toolkit使用户 ",[235,31091,31092],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,31095,31096],{},[1424,31097],{"alt":69,"src":31098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,31100,31101],{},[324,31102,31103],{"href":31103,"rel":31104},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[28145],[26277,31106,31108],{"id":31107},"_321安装","3.2.1.安装",[19,31110,31111],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[27189,31113,31115],{"id":31114},"_3211ubuntu","3.2.1.1.Ubuntu",[27,31117,31118],{},[30,31119,31120],{},"配置存储库 并更新",[64,31122,31124],{"className":28102,"code":31123,"language":28104,"meta":69,"style":69},"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",[71,31125,31126,31155,31175,31187,31199,31205],{"__ignoreMap":69},[74,31127,31128,31131,31134,31137,31139,31141,31144,31147,31150,31153],{"class":76,"line":77},[74,31129,31130],{"class":1925},"curl",[74,31132,31133],{"class":134}," -fsSL",[74,31135,31136],{"class":190}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[74,31138,29390],{"class":80},[74,31140,30354],{"class":1925},[74,31142,31143],{"class":190}," gpg",[74,31145,31146],{"class":134}," --dearmor",[74,31148,31149],{"class":134}," -o",[74,31151,31152],{"class":190}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[74,31154,28959],{"class":134},[74,31156,31157,31160,31162,31165,31168,31171,31173],{"class":76,"line":94},[74,31158,31159],{"class":84},"  && ",[74,31161,31130],{"class":1925},[74,31163,31164],{"class":134}," -s",[74,31166,31167],{"class":134}," -L",[74,31169,31170],{"class":190}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[74,31172,29390],{"class":80},[74,31174,28959],{"class":134},[74,31176,31177,31180,31183,31185],{"class":76,"line":1141},[74,31178,31179],{"class":1925},"    sed",[74,31181,31182],{"class":190}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[74,31184,29390],{"class":80},[74,31186,28959],{"class":134},[74,31188,31189,31192,31194,31197],{"class":76,"line":1156},[74,31190,31191],{"class":1925},"    sudo",[74,31193,30497],{"class":190},[74,31195,31196],{"class":190}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[74,31198,28959],{"class":134},[74,31200,31201,31203],{"class":76,"line":1162},[74,31202,31159],{"class":84},[74,31204,30456],{"class":134},[74,31206,31207,31209,31211],{"class":76,"line":1176},[74,31208,31191],{"class":1925},[74,31210,30357],{"class":190},[74,31212,30523],{"class":190},[27,31214,31215],{"start":94},[30,31216,31217],{},"安装nvidia-docker2",[64,31219,31221],{"className":28102,"code":31220,"language":28104,"meta":69,"style":69},"sudo apt-get install -y nvidia-docker2\n",[71,31222,31223],{"__ignoreMap":69},[74,31224,31225,31227,31229,31231,31233],{"class":76,"line":77},[74,31226,28857],{"class":1925},[74,31228,30357],{"class":190},[74,31230,28114],{"class":190},[74,31232,30681],{"class":134},[74,31234,31235],{"class":190}," nvidia-docker2\n",[27,31237,31238],{"start":1141},[30,31239,31240],{},"使用nvidia-ctk命令配置container runtime",[64,31242,31244],{"className":28102,"code":31243,"language":28104,"meta":69,"style":69},"sudo nvidia-ctk runtime configure --runtime=docker\n",[71,31245,31246],{"__ignoreMap":69},[74,31247,31248,31250,31253,31256,31259],{"class":76,"line":77},[74,31249,28857],{"class":1925},[74,31251,31252],{"class":190}," nvidia-ctk",[74,31254,31255],{"class":190}," runtime",[74,31257,31258],{"class":190}," configure",[74,31260,31261],{"class":134}," --runtime=docker\n",[27,31263,31264],{"start":1156},[30,31265,31266],{},"重启docker服务:",[64,31268,31270],{"className":28102,"code":31269,"language":28104,"meta":69,"style":69},"sudo systemctl restart docker\n",[71,31271,31272],{"__ignoreMap":69},[74,31273,31274,31276,31278,31281],{"class":76,"line":77},[74,31275,28857],{"class":1925},[74,31277,30794],{"class":190},[74,31279,31280],{"class":190}," restart",[74,31282,30773],{"class":190},[27189,31284,31286],{"id":31285},"_3212fedora","3.2.1.2.Fedora",[27,31288,31289],{},[30,31290,31291],{},"配置存储库",[64,31293,31295],{"className":28102,"code":31294,"language":28104,"meta":69,"style":69},"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",[71,31296,31297,31312],{"__ignoreMap":69},[74,31298,31299,31301,31303,31305,31308,31310],{"class":76,"line":77},[74,31300,31130],{"class":1925},[74,31302,31164],{"class":134},[74,31304,31167],{"class":134},[74,31306,31307],{"class":190}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[74,31309,29390],{"class":80},[74,31311,28959],{"class":134},[74,31313,31314,31316,31318],{"class":76,"line":94},[74,31315,28857],{"class":1925},[74,31317,30497],{"class":190},[74,31319,31320],{"class":190}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[27,31322,31323],{"start":94},[30,31324,31325],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[64,31327,31329],{"className":28102,"code":31328,"language":28104,"meta":69,"style":69},"# 如果是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",[71,31330,31331,31336,31350,31354,31359],{"__ignoreMap":69},[74,31332,31333],{"class":76,"line":77},[74,31334,31335],{"class":144},"# 如果是RHEL或者Rocky（DNF4）\n",[74,31337,31338,31340,31342,31344,31347],{"class":76,"line":94},[74,31339,28857],{"class":1925},[74,31341,30596],{"class":190},[74,31343,30695],{"class":190},[74,31345,31346],{"class":134}," --add-repo",[74,31348,31349],{"class":190}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[74,31351,31352],{"class":76,"line":1141},[74,31353,2363],{"emptyLinePlaceholder":2362},[74,31355,31356],{"class":76,"line":1156},[74,31357,31358],{"class":144},"# 如果是Feodra41+（DNF5）\n",[74,31360,31361,31363,31365,31367,31369],{"class":76,"line":1162},[74,31362,28857],{"class":1925},[74,31364,30596],{"class":190},[74,31366,30695],{"class":190},[74,31368,30698],{"class":190},[74,31370,31371],{"class":134}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[27,31373,31374],{"start":1141},[30,31375,31376],{},"安装NVIDIA Container Toolki包",[64,31378,31380],{"className":28102,"code":31379,"language":28104,"meta":69,"style":69},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[71,31381,31382,31387,31400,31404,31409],{"__ignoreMap":69},[74,31383,31384],{"class":76,"line":77},[74,31385,31386],{"class":144},"# 如果是RHEL或者Rocky\n",[74,31388,31389,31391,31393,31395,31397],{"class":76,"line":94},[74,31390,28857],{"class":1925},[74,31392,30596],{"class":190},[74,31394,28114],{"class":190},[74,31396,30681],{"class":134},[74,31398,31399],{"class":190}," nvidia-container-toolkit\n",[74,31401,31402],{"class":76,"line":1141},[74,31403,2363],{"emptyLinePlaceholder":2362},[74,31405,31406],{"class":76,"line":1156},[74,31407,31408],{"class":144},"# 如果是Fedora\n",[74,31410,31411,31413,31415,31417,31419],{"class":76,"line":1162},[74,31412,28857],{"class":1925},[74,31414,30596],{"class":190},[74,31416,28114],{"class":190},[74,31418,30681],{"class":134},[74,31420,31399],{"class":190},[27,31422,31423],{"start":1156},[30,31424,31425,31426,31428],{},"安装nvidia-docker2 ： 在Fedora上使用",[71,31427,30571],{},"进行安装",[64,31430,31432],{"className":28102,"code":31431,"language":28104,"meta":69,"style":69},"sudo dnf install -y nvidia-docker2\n",[71,31433,31434],{"__ignoreMap":69},[74,31435,31436,31438,31440,31442,31444],{"class":76,"line":77},[74,31437,28857],{"class":1925},[74,31439,30596],{"class":190},[74,31441,28114],{"class":190},[74,31443,30681],{"class":134},[74,31445,31235],{"class":190},[27,31447,31448],{"start":1162},[30,31449,31450],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[64,31452,31453],{"className":28102,"code":31243,"language":28104,"meta":69,"style":69},[71,31454,31455],{"__ignoreMap":69},[74,31456,31457,31459,31461,31463,31465],{"class":76,"line":77},[74,31458,28857],{"class":1925},[74,31460,31252],{"class":190},[74,31462,31255],{"class":190},[74,31464,31258],{"class":190},[74,31466,31261],{"class":134},[27,31468,31469],{"start":1176},[30,31470,31471],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[64,31473,31474],{"className":28102,"code":31269,"language":28104,"meta":69,"style":69},[71,31475,31476],{"__ignoreMap":69},[74,31477,31478,31480,31482,31484],{"class":76,"line":77},[74,31479,28857],{"class":1925},[74,31481,30794],{"class":190},[74,31483,31280],{"class":190},[74,31485,30773],{"class":190},[19,31487,31488],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,31490,31491],{},"方法：",[19,31493,31494],{},"1️⃣nvidia-smi",[19,31496,31497],{},"2️⃣运行nvidia cuda 容器进行测试",[64,31499,31501],{"className":28102,"code":31500,"language":28104,"meta":69,"style":69},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[71,31502,31503],{"__ignoreMap":69},[74,31504,31505,31507,31509,31512,31515,31518,31521,31524],{"class":76,"line":77},[74,31506,28857],{"class":1925},[74,31508,30601],{"class":190},[74,31510,31511],{"class":190}," run",[74,31513,31514],{"class":134}," --rm",[74,31516,31517],{"class":134}," --gpus",[74,31519,31520],{"class":190}," all",[74,31522,31523],{"class":190}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[74,31525,31526],{"class":190}," nvidia-smi\n",[19,31528,31529],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,31531,31532],{},[1424,31533],{"alt":69,"src":31534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[44,31536,31538],{"id":31537},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,31540,31541],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,31543,31544],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,31546,31547],{},[324,31548,31549],{"href":31549,"rel":31550},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[28145],[19,31552,31553],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,31555,31556],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,31558,31559],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[223,31561,31562,31578],{},[226,31563,31564],{},[229,31565,31566,31569,31572,31575],{},[232,31567,31568],{"align":28016},"镜像类型",[232,31570,31571],{"align":28016},"适用场景",[232,31573,31574],{"align":28016},"示例标签",[232,31576,31577],{"align":28016},"大小",[270,31579,31580,31594,31608],{},[229,31581,31582,31585,31588,31591],{},[275,31583,31584],{"align":28016},"base",[275,31586,31587],{"align":28016},"仅需 CUDA 运行时库",[275,31589,31590],{"align":28016},"12.4.0-base-ubuntu22.04",[275,31592,31593],{"align":28016},"~240MB",[229,31595,31596,31599,31602,31605],{},[275,31597,31598],{"align":28016},"runtime",[275,31600,31601],{"align":28016},"部署编译后的应用（含数学库）",[275,31603,31604],{"align":28016},"12.4.0-runtime-ubuntu22.04",[275,31606,31607],{"align":28016},"~2GB",[229,31609,31610,31613,31616,31619],{},[275,31611,31612],{"align":28016},"devel",[275,31614,31615],{"align":28016},"开发环境（含编译工具）",[275,31617,31618],{"align":28016},"12.4.0-devel-ubuntu22.04",[275,31620,31621],{"align":28016},"~3GB",[19,31623,31624,31625,31628],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[71,31626,31627],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,31630,31631],{},[1424,31632],{"alt":69,"src":31633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,31635,31636],{},"在dockerfile里就可以开头这么写：",[64,31638,31640],{"className":28102,"code":31639,"language":28104,"meta":69,"style":69},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[71,31641,31642,31647],{"__ignoreMap":69},[74,31643,31644],{"class":76,"line":77},[74,31645,31646],{"class":144},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[74,31648,31649,31652],{"class":76,"line":94},[74,31650,31651],{"class":1925},"FROM",[74,31653,31654],{"class":190}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[44,31656,31658],{"id":31657},"_34配置以太网","3.4.配置以太网",[19,31660,31661],{},"指定网络模式",[64,31663,31665],{"className":28102,"code":31664,"language":28104,"meta":69,"style":69},"--net=host \\\n",[71,31666,31667],{"__ignoreMap":69},[74,31668,31669,31672,31674,31677],{"class":76,"line":77},[74,31670,31671],{"class":84},"--net",[74,31673,131],{"class":80},[74,31675,31676],{"class":190},"host",[74,31678,28959],{"class":1925},[19,31680,31681],{},"启动参数里加上这行即可。具体在下方",[19,31683,31684],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1093,31686,31687,31690,31693,31696],{},[30,31688,31689],{},"--net=bridge:默认选项，表示连接到默认的网桥",[30,31691,31692],{},"--net=host:容器使用宿主机的网络",[30,31694,31695],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[30,31697,31698],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5090,31700,31701],{},"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":69,"searchDepth":94,"depth":94,"links":31703},[31704,31705,31706,31707],{"id":31018,"depth":1141,"text":31019},{"id":31085,"depth":1141,"text":31086},{"id":31537,"depth":1141,"text":31538},{"id":31657,"depth":1141,"text":31658},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":31007,"description":31015},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":31714,"title":31715,"body":31716,"description":31723,"extension":5121,"meta":31729,"navigation":2362,"path":31730,"seo":31731,"stem":31732,"__hash__":31733},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":31717,"toc":31727},[31718,31721,31724],[10,31719,31715],{"id":31720},"_4dockerhub换源",[19,31722,31723],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,31725,31726],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":69,"searchDepth":94,"depth":94,"links":31728},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":31715,"description":31723},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":31735,"title":31736,"body":31737,"description":69,"extension":5121,"meta":32749,"navigation":2362,"path":32750,"seo":32751,"stem":32752,"__hash__":32753},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":31738,"toc":32744},[31739,31742,31746,31752,31756,31759,32099,32102,32105,32108,32113,32118,32121,32124,32127,32130,32149,32152,32163,32169,32351,32361,32377,32640,32642,32667,32682,32691,32741],[10,31740,31736],{"id":31741},"_5docker命令学习",[44,31743,31745],{"id":31744},"_51参考文档","5.1.参考文档",[19,31747,31748],{},[324,31749,31750],{"href":31750,"rel":31751},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[28145],[44,31753,31755],{"id":31754},"_52常用命令","5.2.常用命令",[19,31757,31758],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[223,31760,31761,31774],{},[226,31762,31763],{},[229,31764,31765,31768,31771],{},[232,31766,31767],{"align":28016},"命令",[232,31769,31770],{"align":28016},"描述",[232,31772,31773],{"align":28016},"示例",[270,31775,31776,31787,31798,31809,31820,31831,31842,31853,31863,31874,31885,31896,31906,31917,31928,31939,31949,31959,31969,31979,31990,32001,32012,32023,32034,32045,32055,32066,32077,32088],{},[229,31777,31778,31781,31784],{},[275,31779,31780],{"align":28016},"docker run",[275,31782,31783],{"align":28016},"创建并启动一个新的容器。",[275,31785,31786],{"align":28016},"docker run -it ubuntu bash",[229,31788,31789,31792,31795],{},[275,31790,31791],{"align":28016},"docker build",[275,31793,31794],{"align":28016},"通过指定的 Dockerfile 创建一个新的镜像。",[275,31796,31797],{"align":28016},"docker build -t myimage .",[229,31799,31800,31803,31806],{},[275,31801,31802],{"align":28016},"docker pull",[275,31804,31805],{"align":28016},"从 Docker 仓库拉取镜像。",[275,31807,31808],{"align":28016},"docker pull ubuntu",[229,31810,31811,31814,31817],{},[275,31812,31813],{"align":28016},"docker push",[275,31815,31816],{"align":28016},"将本地镜像推送到 Docker 仓库。",[275,31818,31819],{"align":28016},"docker push myimage",[229,31821,31822,31825,31828],{},[275,31823,31824],{"align":28016},"docker stop",[275,31826,31827],{"align":28016},"停止一个正在运行的容器。",[275,31829,31830],{"align":28016},"docker stop container_id",[229,31832,31833,31836,31839],{},[275,31834,31835],{"align":28016},"docker start",[275,31837,31838],{"align":28016},"启动一个已经存在的容器。",[275,31840,31841],{"align":28016},"docker start container_id",[229,31843,31844,31847,31850],{},[275,31845,31846],{"align":28016},"docker restart",[275,31848,31849],{"align":28016},"重新启动容器。",[275,31851,31852],{"align":28016},"docker restart container_id",[229,31854,31855,31858,31861],{},[275,31856,31857],{"align":28016},"docker ps",[275,31859,31860],{"align":28016},"列出当前正在运行的容器。",[275,31862,31857],{"align":28016},[229,31864,31865,31868,31871],{},[275,31866,31867],{"align":28016},"docker rm",[275,31869,31870],{"align":28016},"删除一个或多个停止的容器。",[275,31872,31873],{"align":28016},"docker rm container_id",[229,31875,31876,31879,31882],{},[275,31877,31878],{"align":28016},"docker exec",[275,31880,31881],{"align":28016},"在一个正在运行的容器中执行命令。",[275,31883,31884],{"align":28016},"docker exec -it container_id bash",[229,31886,31887,31890,31893],{},[275,31888,31889],{"align":28016},"docker logs",[275,31891,31892],{"align":28016},"查看容器的日志输出。",[275,31894,31895],{"align":28016},"docker logs container_id",[229,31897,31898,31901,31904],{},[275,31899,31900],{"align":28016},"docker images",[275,31902,31903],{"align":28016},"列出本地所有镜像。",[275,31905,31900],{"align":28016},[229,31907,31908,31911,31914],{},[275,31909,31910],{"align":28016},"docker rmi",[275,31912,31913],{"align":28016},"删除一个或多个镜像。",[275,31915,31916],{"align":28016},"docker rmi myimage",[229,31918,31919,31922,31925],{},[275,31920,31921],{"align":28016},"docker network",[275,31923,31924],{"align":28016},"管理 Docker 网络。",[275,31926,31927],{"align":28016},"docker network ls",[229,31929,31930,31933,31936],{},[275,31931,31932],{"align":28016},"docker volume",[275,31934,31935],{"align":28016},"管理 Docker 数据卷。",[275,31937,31938],{"align":28016},"docker volume ls",[229,31940,31941,31944,31947],{},[275,31942,31943],{"align":28016},"docker-compose up",[275,31945,31946],{"align":28016},"启动 docker-compose.yml 中定义的所有服务。",[275,31948,31943],{"align":28016},[229,31950,31951,31954,31957],{},[275,31952,31953],{"align":28016},"docker-compose down",[275,31955,31956],{"align":28016},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[275,31958,31953],{"align":28016},[229,31960,31961,31964,31967],{},[275,31962,31963],{"align":28016},"docker info",[275,31965,31966],{"align":28016},"显示 Docker 系统的详细信息。",[275,31968,31963],{"align":28016},[229,31970,31971,31974,31977],{},[275,31972,31973],{"align":28016},"docker stats",[275,31975,31976],{"align":28016},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[275,31978,31973],{"align":28016},[229,31980,31981,31984,31987],{},[275,31982,31983],{"align":28016},"docker inspect",[275,31985,31986],{"align":28016},"查看容器或镜像的详细信息（JSON 格式）。",[275,31988,31989],{"align":28016},"docker inspect container_id",[229,31991,31992,31995,31998],{},[275,31993,31994],{"align":28016},"docker save",[275,31996,31997],{"align":28016},"将一个镜像保存为 tar 文件。",[275,31999,32000],{"align":28016},"docker save -o myimage.tar myimage",[229,32002,32003,32006,32009],{},[275,32004,32005],{"align":28016},"docker load",[275,32007,32008],{"align":28016},"从 tar 文件中加载镜像。",[275,32010,32011],{"align":28016},"docker load -i myimage.tar",[229,32013,32014,32017,32020],{},[275,32015,32016],{"align":28016},"docker tag",[275,32018,32019],{"align":28016},"为镜像添加标签（tag）。",[275,32021,32022],{"align":28016},"docker tag myimage myimage:v1",[229,32024,32025,32028,32031],{},[275,32026,32027],{"align":28016},"docker buildx build",[275,32029,32030],{"align":28016},"使用 Buildx 构建多架构镜像。",[275,32032,32033],{"align":28016},"docker buildx build -t myimage .",[229,32035,32036,32039,32042],{},[275,32037,32038],{"align":28016},"docker buildx create",[275,32040,32041],{"align":28016},"创建一个新的 Buildx 构建实例。",[275,32043,32044],{"align":28016},"docker buildx create –use",[229,32046,32047,32050,32053],{},[275,32048,32049],{"align":28016},"docker buildx ls",[275,32051,32052],{"align":28016},"列出所有可用的 Buildx 构建实例。",[275,32054,32049],{"align":28016},[229,32056,32057,32060,32063],{},[275,32058,32059],{"align":28016},"docker buildx use",[275,32061,32062],{"align":28016},"设置当前的 Buildx 构建实例。",[275,32064,32065],{"align":28016},"docker buildx use mybuilder",[229,32067,32068,32071,32074],{},[275,32069,32070],{"align":28016},"docker buildx bake",[275,32072,32073],{"align":28016},"使用 Bake 文件批量构建镜像。",[275,32075,32076],{"align":28016},"docker buildx bake -f bake.hcl",[229,32078,32079,32082,32085],{},[275,32080,32081],{"align":28016},"docker buildx build –push",[275,32083,32084],{"align":28016},"构建镜像并推送到镜像仓库。",[275,32086,32087],{"align":28016},"docker buildx build –push -t myimage .",[229,32089,32090,32093,32096],{},[275,32091,32092],{"align":28016},"docker buildx build –platform",[275,32094,32095],{"align":28016},"构建镜像并为多个平台生成支持。",[275,32097,32098],{"align":28016},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,32100,32101],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,32103,32104],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,32106,32107],{},"docker images 可以查看已经下载的镜像",[19,32109,32110],{},[1424,32111],{"alt":69,"src":32112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,32114,32115],{},[235,32116,32117],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,32119,32120],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,32122,32123],{},"docker container logs 查看容器日志",[19,32125,32126],{},"docker top 查看容器里的进程",[19,32128,32129],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[64,32131,32133],{"className":28102,"code":32132,"language":28104,"meta":69,"style":69},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[71,32134,32135],{"__ignoreMap":69},[74,32136,32137,32140,32143,32146],{"class":76,"line":77},[74,32138,32139],{"class":1925},"如：docker",[74,32141,32142],{"class":190}," cp",[74,32144,32145],{"class":190}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[74,32147,32148],{"class":190}," \u002Fmydata\u002Fnginx\n",[19,32150,32151],{},"docker run时在启动容器的时候会有几个常用的选项：",[1093,32153,32154,32157,32160],{},[30,32155,32156],{},"-d选项：表示后台运行",[30,32158,32159],{},"-P选项：随机端口映射",[30,32161,32162],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[44,32164,32166],{"id":32165},"_53run命令的参数非常重要",[235,32167,32168],{},"5.3.run命令的参数（非常重要）",[223,32170,32171,32184],{},[226,32172,32173],{},[229,32174,32175,32178,32181],{},[232,32176,32177],{"align":28016},"参数\u002F配置",[232,32179,32180],{"align":28016},"功能说明",[232,32182,32183],{"align":28016},"重要性与参考依据",[270,32185,32186,32197,32208,32219,32230,32241,32252,32263,32274,32285,32296,32307,32318,32329,32340],{},[229,32187,32188,32191,32194],{},[275,32189,32190],{"align":28016},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[275,32192,32193],{"align":28016},"指定容器名称，便于后续管理",[275,32195,32196],{"align":28016},"替代随机生成的容器名。",[229,32198,32199,32202,32205],{},[275,32200,32201],{"align":28016},"–gpus all",[275,32203,32204],{"align":28016},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[275,32206,32207],{"align":28016},"用于CUDA加速等GPU依赖任务。",[229,32209,32210,32213,32216],{},[275,32211,32212],{"align":28016},"-e NVIDIA_DRIVER_CAPABILITIES=all",[275,32214,32215],{"align":28016},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[275,32217,32218],{"align":28016},"确保容器内GPU功能完整67。",[229,32220,32221,32224,32227],{},[275,32222,32223],{"align":28016},"-dit",[275,32225,32226],{"align":28016},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[275,32228,32229],{"align":28016},"允许容器在后台运行并支持交互操作。",[229,32231,32232,32235,32238],{},[275,32233,32234],{"align":28016},"–privileged",[275,32236,32237],{"align":28016},"赋予容器完全主机权限（可访问设备、内核模块等）",[275,32239,32240],{"align":28016},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[229,32242,32243,32246,32249],{},[275,32244,32245],{"align":28016},"–net=host",[275,32247,32248],{"align":28016},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[275,32250,32251],{"align":28016},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[229,32253,32254,32257,32260],{},[275,32255,32256],{"align":28016},"–group-add audio–group-add video–group-add dialout",[275,32258,32259],{"align":28016},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[275,32261,32262],{"align":28016},"避免权限问题（如避免无法调用摄像头、麦克风）。",[229,32264,32265,32268,32271],{},[275,32266,32267],{"align":28016},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[275,32269,32270],{"align":28016},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[275,32272,32273],{"align":28016},"支持容器内运行图形界面应用（如OpenCV可视化）。",[229,32275,32276,32279,32282],{},[275,32277,32278],{"align":28016},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[275,32280,32281],{"align":28016},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[275,32283,32284],{"align":28016},"实现容器内图形显示。",[229,32286,32287,32290,32293],{},[275,32288,32289],{"align":28016},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[275,32291,32292],{"align":28016},"挂载X11认证文件（只读）",[275,32294,32295],{"align":28016},"确保容器有权连接宿主机显示服务。",[229,32297,32298,32301,32304],{},[275,32299,32300],{"align":28016},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[275,32302,32303],{"align":28016},"挂载Wayland显示协议相关目录",[275,32305,32306],{"align":28016},"支持Wayland协议的图形显示。",[229,32308,32309,32312,32315],{},[275,32310,32311],{"align":28016},"–ulimit nofile=1024:524288",[275,32313,32314],{"align":28016},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[275,32316,32317],{"align":28016},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[229,32319,32320,32323,32326],{},[275,32321,32322],{"align":28016},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[275,32324,32325],{"align":28016},"挂载宿主机用户目录到容器内同名路径",[275,32327,32328],{"align":28016},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[229,32330,32331,32334,32337],{},[275,32332,32333],{"align":28016},"-w \u002Fhome\u002Ftungchiahui",[275,32335,32336],{"align":28016},"设置容器启动后的默认工作目录",[275,32338,32339],{"align":28016},"直接进入项目路径，方便执行命令2324。",[229,32341,32342,32345,32348],{},[275,32343,32344],{"align":28016},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[275,32346,32347],{"align":28016},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[275,32349,32350],{"align":28016},"提供预配置的深度学习与机器人开发环境。",[19,32352,32353,32354,32356,32357,32360],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[71,32355,28857],{},"加不加",[71,32358,32359],{},"sudo -E","都无所谓。",[19,32362,32363,32364,32366,32367,32369,32370,32373,32374,32376],{},"用户已经被加到docker组了，不用",[71,32365,28857],{},"也行跑，其次，",[71,32368,28857],{},"运行的话，你的",[71,32371,32372],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[71,32375,32372],{},"更不可能变了。",[64,32378,32380],{"className":28102,"code":32379,"language":28104,"meta":69,"style":69},"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",[71,32381,32382,32395,32405,32415,32427,32434,32441,32448,32458,32467,32476,32490,32502,32514,32523,32533,32542,32557,32590,32617,32628,32635],{"__ignoreMap":69},[74,32383,32384,32386,32388,32390,32393],{"class":76,"line":77},[74,32385,28857],{"class":1925},[74,32387,30601],{"class":190},[74,32389,31511],{"class":190},[74,32391,32392],{"class":134}," --name=ros_opencv_cuda",[74,32394,28959],{"class":134},[74,32396,32397,32400,32403],{"class":76,"line":94},[74,32398,32399],{"class":84},"--gpus ",[74,32401,32402],{"class":190},"all",[74,32404,28959],{"class":134},[74,32406,32407,32410,32413],{"class":76,"line":1141},[74,32408,32409],{"class":84},"-e ",[74,32411,32412],{"class":190},"NVIDIA_DRIVER_CAPABILITIES=all",[74,32414,28959],{"class":134},[74,32416,32417,32419,32422,32425],{"class":76,"line":1156},[74,32418,32409],{"class":84},[74,32420,32421],{"class":190},"DISPLAY=",[74,32423,32424],{"class":84},"$DISPLAY ",[74,32426,30456],{"class":134},[74,32428,32429,32432],{"class":76,"line":1162},[74,32430,32431],{"class":84},"-dit ",[74,32433,30456],{"class":134},[74,32435,32436,32439],{"class":76,"line":1176},[74,32437,32438],{"class":84},"--privileged ",[74,32440,30456],{"class":134},[74,32442,32443,32446],{"class":76,"line":1182},[74,32444,32445],{"class":84},"--net=host ",[74,32447,30456],{"class":134},[74,32449,32450,32453,32456],{"class":76,"line":1273},[74,32451,32452],{"class":84},"--group-add ",[74,32454,32455],{"class":190},"audio",[74,32457,28959],{"class":134},[74,32459,32460,32462,32465],{"class":76,"line":1279},[74,32461,32452],{"class":84},[74,32463,32464],{"class":190},"video",[74,32466,28959],{"class":134},[74,32468,32469,32471,32474],{"class":76,"line":1291},[74,32470,32452],{"class":84},[74,32472,32473],{"class":190},"dialout",[74,32475,28959],{"class":134},[74,32477,32478,32480,32483,32485,32488],{"class":76,"line":1574},[74,32479,32409],{"class":84},[74,32481,32482],{"class":190},"XAUTHORITY=",[74,32484,32372],{"class":84},[74,32486,32487],{"class":190},"\u002F.Xauthority",[74,32489,28959],{"class":134},[74,32491,32492,32494,32497,32500],{"class":76,"line":1579},[74,32493,32409],{"class":84},[74,32495,32496],{"class":190},"WAYLAND_DISPLAY=",[74,32498,32499],{"class":84},"$WAYLAND_DISPLAY ",[74,32501,30456],{"class":134},[74,32503,32504,32506,32509,32512],{"class":76,"line":1585},[74,32505,32409],{"class":84},[74,32507,32508],{"class":190},"XDG_RUNTIME_DIR=",[74,32510,32511],{"class":84},"$XDG_RUNTIME_DIR ",[74,32513,30456],{"class":134},[74,32515,32516,32518,32521],{"class":76,"line":1590},[74,32517,32409],{"class":84},[74,32519,32520],{"class":190},"QT_QPA_PLATFORM=xcb",[74,32522,28959],{"class":134},[74,32524,32525,32528,32531],{"class":76,"line":1604},[74,32526,32527],{"class":84},"-v ",[74,32529,32530],{"class":190},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[74,32532,28959],{"class":134},[74,32534,32535,32537,32540],{"class":76,"line":1609},[74,32536,32527],{"class":84},[74,32538,32539],{"class":190},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[74,32541,28959],{"class":134},[74,32543,32544,32547,32550,32552,32555],{"class":76,"line":1615},[74,32545,32546],{"class":84},"-v $HOME",[74,32548,32549],{"class":190},"\u002F.Xauthority:",[74,32551,32372],{"class":84},[74,32553,32554],{"class":190},"\u002F.Xauthority:ro",[74,32556,28959],{"class":134},[74,32558,32559,32561,32564,32566,32569,32572,32574,32577,32579,32581,32583,32585,32588],{"class":76,"line":1636},[74,32560,32527],{"class":84},[74,32562,32563],{"class":190},"\u002Frun\u002Fuser\u002F",[74,32565,29380],{"class":84},[74,32567,32568],{"class":1925},"id",[74,32570,32571],{"class":134}," -u",[74,32573,515],{"class":84},[74,32575,32576],{"class":190},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[74,32578,29380],{"class":84},[74,32580,32568],{"class":1925},[74,32582,32571],{"class":134},[74,32584,515],{"class":84},[74,32586,32587],{"class":190},"\u002Fwayland-0",[74,32589,28959],{"class":134},[74,32591,32592,32594,32596,32598,32600,32602,32604,32607,32609,32611,32613,32615],{"class":76,"line":1641},[74,32593,32527],{"class":84},[74,32595,32563],{"class":190},[74,32597,29380],{"class":84},[74,32599,32568],{"class":1925},[74,32601,32571],{"class":134},[74,32603,515],{"class":84},[74,32605,32606],{"class":190},":\u002Frun\u002Fuser\u002F",[74,32608,29380],{"class":84},[74,32610,32568],{"class":1925},[74,32612,32571],{"class":134},[74,32614,17993],{"class":84},[74,32616,30456],{"class":134},[74,32618,32619,32621,32623,32626],{"class":76,"line":1655},[74,32620,32546],{"class":84},[74,32622,945],{"class":190},[74,32624,32625],{"class":84},"$HOME ",[74,32627,30456],{"class":134},[74,32629,32630,32633],{"class":76,"line":1660},[74,32631,32632],{"class":84},"-w $HOME ",[74,32634,30456],{"class":134},[74,32636,32637],{"class":76,"line":1689},[74,32638,32639],{"class":84},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,32641,13304],{},[27,32643,32644,32652,32655,32658],{},[30,32645,32646,18074,32648,32651],{},[71,32647,32412],{},[71,32649,32650],{},"--gpus all","没有英伟达显卡请注释。",[30,32653,32654],{},"--name后面请自己为容器起名。",[30,32656,32657],{},"最后一行仓库名称请你自己找对应的镜像填上。",[30,32659,32660,32661,32666],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[27833,32662,32663],{},[235,32664,32665],{},"请不要加","。",[64,32668,32670],{"className":28102,"code":32669,"language":28104,"meta":69,"style":69},"--ulimit nofile=1024:524288 \\\n",[71,32671,32672],{"__ignoreMap":69},[74,32673,32674,32677,32680],{"class":76,"line":77},[74,32675,32676],{"class":1925},"--ulimit",[74,32678,32679],{"class":190}," nofile=1024:524288",[74,32681,28959],{"class":134},[19,32683,32684,32685,32690],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[27833,32686,32687],{},[235,32688,32689],{},"不建议","**.**",[64,32692,32694],{"className":28102,"code":32693,"language":28104,"meta":69,"style":69},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[71,32695,32696,32723,32732],{"__ignoreMap":69},[74,32697,32698,32701,32704,32706,32708,32710,32712,32714,32716,32719,32721],{"class":76,"line":77},[74,32699,32700],{"class":1925},"--user",[74,32702,32703],{"class":84}," $(",[74,32705,32568],{"class":1925},[74,32707,32571],{"class":134},[74,32709,515],{"class":84},[74,32711,945],{"class":190},[74,32713,29380],{"class":84},[74,32715,32568],{"class":1925},[74,32717,32718],{"class":134}," -g",[74,32720,17993],{"class":84},[74,32722,30456],{"class":134},[74,32724,32725,32727,32730],{"class":76,"line":94},[74,32726,32527],{"class":84},[74,32728,32729],{"class":190},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[74,32731,28959],{"class":134},[74,32733,32734,32736,32739],{"class":76,"line":1141},[74,32735,32527],{"class":84},[74,32737,32738],{"class":190},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[74,32740,28959],{"class":134},[5090,32742,32743],{},"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":69,"searchDepth":94,"depth":94,"links":32745},[32746,32747,32748],{"id":31744,"depth":1141,"text":31745},{"id":31754,"depth":1141,"text":31755},{"id":32165,"depth":1141,"text":32168},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":31736,"description":69},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":32755,"title":32756,"body":32757,"description":69,"extension":5121,"meta":34380,"navigation":2362,"path":34381,"seo":34382,"stem":34383,"__hash__":34384},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":32758,"toc":34375},[32759,32762,32766,32769,32991,32995,32999,33002,33108,33113,33116,33121,33124,33129,33132,33137,33140,33152,33155,33160,33167,33195,33202,33278,33283,33286,33309,33311,33386,33391,33394,33398,33406,33411,33416,33420,33431,33437,33440,33443,33467,33470,33473,33501,33504,33507,33972,33975,33980,33985,33989,34012,34017,34021,34025,34028,34031,34034,34061,34064,34067,34085,34088,34091,34113,34121,34126,34131,34135,34138,34141,34144,34147,34192,34195,34213,34216,34221,34224,34245,34248,34304,34307,34312,34316,34319,34326,34329,34332,34337,34340,34356,34359,34372],[10,32760,32756],{"id":32761},"_6手动创建docker镜像",[44,32763,32765],{"id":32764},"_61dockerfile","6.1.DockerFile",[19,32767,32768],{},"常用命令：",[223,32770,32771,32782],{},[226,32772,32773],{},[229,32774,32775,32778,32780],{},[232,32776,32777],{"align":28016},"指令",[232,32779,30150],{"align":28016},[232,32781,31773],{"align":28016},[270,32783,32784,32794,32810,32821,32832,32843,32854,32865,32876,32890,32904,32915,32929,32940,32951,32965,32980],{},[229,32785,32786,32788,32791],{},[275,32787,31651],{"align":28016},[275,32789,32790],{"align":28016},"指定基础镜像，是 Dockerfile 的起点",[275,32792,32793],{"align":28016},"FROM ubuntu:22.04",[229,32795,32796,32799,32802],{},[275,32797,32798],{"align":28016},"LABEL",[275,32800,32801],{"align":28016},"添加元数据（如作者、版本等）",[275,32803,32804,32805,32809],{"align":28016},"LABEL maintainer=”",[324,32806,32808],{"href":32807},"mailto:you@example.com","you@example.com","”",[229,32811,32812,32815,32818],{},[275,32813,32814],{"align":28016},"ENV",[275,32816,32817],{"align":28016},"设置环境变量",[275,32819,32820],{"align":28016},"ENV PORT=8080",[229,32822,32823,32826,32829],{},[275,32824,32825],{"align":28016},"ARG",[275,32827,32828],{"align":28016},"构建参数，只在构建期间可用",[275,32830,32831],{"align":28016},"ARG VERSION=1.0",[229,32833,32834,32837,32840],{},[275,32835,32836],{"align":28016},"RUN",[275,32838,32839],{"align":28016},"构建镜像时运行命令",[275,32841,32842],{"align":28016},"RUN apt-get update && apt-get install -y curl",[229,32844,32845,32848,32851],{},[275,32846,32847],{"align":28016},"COPY",[275,32849,32850],{"align":28016},"复制文件到镜像中",[275,32852,32853],{"align":28016},"COPY . \u002Fapp",[229,32855,32856,32859,32862],{},[275,32857,32858],{"align":28016},"ADD",[275,32860,32861],{"align":28016},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[275,32863,32864],{"align":28016},"ADD archive.tar.gz \u002Fdata\u002F",[229,32866,32867,32870,32873],{},[275,32868,32869],{"align":28016},"WORKDIR",[275,32871,32872],{"align":28016},"设置工作目录",[275,32874,32875],{"align":28016},"WORKDIR \u002Fopt",[229,32877,32878,32881,32884],{},[275,32879,32880],{"align":28016},"CMD",[275,32882,32883],{"align":28016},"设置容器启动时默认命令（可被 docker run 覆盖）",[275,32885,32886,32887],{"align":28016},"CMD ",[74,32888,32889],{},"“node”, “index.js”",[229,32891,32892,32895,32898],{},[275,32893,32894],{"align":28016},"ENTRYPOINT",[275,32896,32897],{"align":28016},"设置容器启动时固定命令（通常用于 CLI 工具等）",[275,32899,32900,32901],{"align":28016},"ENTRYPOINT ",[74,32902,32903],{},"“python3”",[229,32905,32906,32909,32912],{},[275,32907,32908],{"align":28016},"EXPOSE",[275,32910,32911],{"align":28016},"声明镜像内服务监听的端口（不会自动映射）",[275,32913,32914],{"align":28016},"EXPOSE 80",[229,32916,32917,32920,32923],{},[275,32918,32919],{"align":28016},"VOLUME",[275,32921,32922],{"align":28016},"声明数据卷挂载点",[275,32924,32925,32926],{"align":28016},"VOLUME ",[74,32927,32928],{},"“\u002Fdata”",[229,32930,32931,32934,32937],{},[275,32932,32933],{"align":28016},"USER",[275,32935,32936],{"align":28016},"设置后续命令执行的用户",[275,32938,32939],{"align":28016},"USER appuser",[229,32941,32942,32945,32948],{},[275,32943,32944],{"align":28016},"ONBUILD",[275,32946,32947],{"align":28016},"当镜像作为其他镜像基础镜像时触发的构建指令",[275,32949,32950],{"align":28016},"ONBUILD COPY . \u002Fsrc",[229,32952,32953,32956,32959],{},[275,32954,32955],{"align":28016},"SHELL",[275,32957,32958],{"align":28016},"更改默认 shell，比如将 sh -c 改为 bash -c",[275,32960,32961,32962],{"align":28016},"SHELL ",[74,32963,32964],{},"“\u002Fbin\u002Fbash”, “-c”",[229,32966,32967,32970,32973],{},[275,32968,32969],{"align":28016},"HEALTHCHECK",[275,32971,32972],{"align":28016},"定义容器运行时的健康检查命令",[275,32974,32975,32976],{"align":28016},"`HEALTHCHECK CMD curl –fail ",[324,32977,32978],{"href":32978,"rel":32979},"http:\u002F\u002Flocalhost:8080",[28145],[229,32981,32982,32985,32988],{},[275,32983,32984],{"align":28016},"STOPSIGNAL",[275,32986,32987],{"align":28016},"容器停止时发送的信号",[275,32989,32990],{"align":28016},"STOPSIGNAL SIGKILL",[44,32992,32994],{"id":32993},"_62自己创建容器","6.2.自己创建容器",[26277,32996,32998],{"id":32997},"_621手动创建","6.2.1.手动创建",[19,33000,33001],{},"在x86电脑上编译x86的：",[64,33003,33005],{"className":28102,"code":33004,"language":28104,"meta":69,"style":69},"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",[71,33006,33007,33023,33027,33040,33044,33057,33061,33074,33078,33091,33095],{"__ignoreMap":69},[74,33008,33009,33011,33014,33017,33020],{"class":76,"line":77},[74,33010,30834],{"class":1925},[74,33012,33013],{"class":190}," build",[74,33015,33016],{"class":134}," -t",[74,33018,33019],{"class":190}," ros-melodic-cuda118-cudnn8-bionic:latest",[74,33021,33022],{"class":190}," .\n",[74,33024,33025],{"class":76,"line":94},[74,33026,2363],{"emptyLinePlaceholder":2362},[74,33028,33029,33031,33033,33035,33038],{"class":76,"line":1141},[74,33030,30834],{"class":1925},[74,33032,33013],{"class":190},[74,33034,33016],{"class":134},[74,33036,33037],{"class":190}," ros-noetic-focal:latest",[74,33039,33022],{"class":190},[74,33041,33042],{"class":76,"line":1156},[74,33043,2363],{"emptyLinePlaceholder":2362},[74,33045,33046,33048,33050,33052,33055],{"class":76,"line":1162},[74,33047,30834],{"class":1925},[74,33049,33013],{"class":190},[74,33051,33016],{"class":134},[74,33053,33054],{"class":190}," ros-humble-jammy:latest",[74,33056,33022],{"class":190},[74,33058,33059],{"class":76,"line":1176},[74,33060,2363],{"emptyLinePlaceholder":2362},[74,33062,33063,33065,33067,33069,33072],{"class":76,"line":1182},[74,33064,30834],{"class":1925},[74,33066,33013],{"class":190},[74,33068,33016],{"class":134},[74,33070,33071],{"class":190}," ros-jazzy-noble:latest",[74,33073,33022],{"class":190},[74,33075,33076],{"class":76,"line":1273},[74,33077,2363],{"emptyLinePlaceholder":2362},[74,33079,33080,33082,33084,33086,33089],{"class":76,"line":1279},[74,33081,30834],{"class":1925},[74,33083,33013],{"class":190},[74,33085,33016],{"class":134},[74,33087,33088],{"class":190}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[74,33090,33022],{"class":190},[74,33092,33093],{"class":76,"line":1291},[74,33094,2363],{"emptyLinePlaceholder":2362},[74,33096,33097,33099,33101,33103,33106],{"class":76,"line":1574},[74,33098,30834],{"class":1925},[74,33100,33013],{"class":190},[74,33102,33016],{"class":134},[74,33104,33105],{"class":190}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[74,33107,33022],{"class":190},[19,33109,33110],{},[1424,33111],{"alt":69,"src":33112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,33114,33115],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,33117,33118],{},[1424,33119],{"alt":69,"src":33120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,33122,33123],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[27,33125,33126],{},[30,33127,33128],{},"创建 Docker Hub 账户",[19,33130,33131],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[27,33133,33134],{"start":94},[30,33135,33136],{},"登录 Docker Hub",[19,33138,33139],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[64,33141,33143],{"className":28102,"code":33142,"language":28104,"meta":69,"style":69},"docker login\n",[71,33144,33145],{"__ignoreMap":69},[74,33146,33147,33149],{"class":76,"line":77},[74,33148,30834],{"class":1925},[74,33150,33151],{"class":190}," login\n",[19,33153,33154],{},"输入你的 Docker Hub 用户名和密码进行验证。",[27,33156,33157],{},[30,33158,33159],{},"为你的镜像打标签",[19,33161,33162,33163,33166],{},"Docker Hub 使用 ",[71,33164,33165],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[64,33168,33170],{"className":28102,"code":33169,"language":28104,"meta":69,"style":69},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[71,33171,33172],{"__ignoreMap":69},[74,33173,33174,33176,33179,33181,33184,33187,33190,33192],{"class":76,"line":77},[74,33175,30834],{"class":1925},[74,33177,33178],{"class":190}," tag",[74,33180,33071],{"class":190},[74,33182,33183],{"class":80}," \u003C",[74,33185,33186],{"class":190},"你的用户",[74,33188,33189],{"class":84},"名",[74,33191,1046],{"class":80},[74,33193,33194],{"class":190},"\u002Fros-jazzy-noble:latest\n",[19,33196,33197,33198,33201],{},"例如，如果你的 Docker Hub 用户名是 ",[71,33199,33200],{},"tungchiahui","，你应该执行：",[64,33203,33205],{"className":28102,"code":33204,"language":28104,"meta":69,"style":69},"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",[71,33206,33207,33218,33222,33233,33237,33248,33252,33263,33267],{"__ignoreMap":69},[74,33208,33209,33211,33213,33215],{"class":76,"line":77},[74,33210,30834],{"class":1925},[74,33212,33178],{"class":190},[74,33214,33037],{"class":190},[74,33216,33217],{"class":190}," tungchiahui\u002Fros-noetic-focal:latest\n",[74,33219,33220],{"class":76,"line":94},[74,33221,2363],{"emptyLinePlaceholder":2362},[74,33223,33224,33226,33228,33230],{"class":76,"line":1141},[74,33225,30834],{"class":1925},[74,33227,33178],{"class":190},[74,33229,33054],{"class":190},[74,33231,33232],{"class":190}," tungchiahui\u002Fros-humble-jammy:latest\n",[74,33234,33235],{"class":76,"line":1156},[74,33236,2363],{"emptyLinePlaceholder":2362},[74,33238,33239,33241,33243,33245],{"class":76,"line":1162},[74,33240,30834],{"class":1925},[74,33242,33178],{"class":190},[74,33244,33071],{"class":190},[74,33246,33247],{"class":190}," tungchiahui\u002Fros-jazzy-noble:latest\n",[74,33249,33250],{"class":76,"line":1176},[74,33251,2363],{"emptyLinePlaceholder":2362},[74,33253,33254,33256,33258,33260],{"class":76,"line":1182},[74,33255,30834],{"class":1925},[74,33257,33178],{"class":190},[74,33259,33088],{"class":190},[74,33261,33262],{"class":190}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[74,33264,33265],{"class":76,"line":1273},[74,33266,2363],{"emptyLinePlaceholder":2362},[74,33268,33269,33271,33273,33275],{"class":76,"line":1279},[74,33270,30834],{"class":1925},[74,33272,33178],{"class":190},[74,33274,33105],{"class":190},[74,33276,33277],{"class":190}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[27,33279,33280],{"start":94},[30,33281,33282],{},"推送镜像到 Docker Hub",[19,33284,33285],{},"使用以下命令将镜像推送到 Docker Hub：",[64,33287,33289],{"className":28102,"code":33288,"language":28104,"meta":69,"style":69},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[71,33290,33291],{"__ignoreMap":69},[74,33292,33293,33295,33298,33300,33302,33304,33306],{"class":76,"line":77},[74,33294,30834],{"class":1925},[74,33296,33297],{"class":190}," push",[74,33299,33183],{"class":80},[74,33301,33186],{"class":190},[74,33303,33189],{"class":84},[74,33305,1046],{"class":80},[74,33307,33308],{"class":190},"\u002Fros-noetic-jazzy-noble:latest\n",[19,33310,18912],{},[64,33312,33314],{"className":28102,"code":33313,"language":28104,"meta":69,"style":69},"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",[71,33315,33316,33324,33328,33336,33340,33348,33352,33361,33365,33373,33377],{"__ignoreMap":69},[74,33317,33318,33320,33322],{"class":76,"line":77},[74,33319,30834],{"class":1925},[74,33321,33297],{"class":190},[74,33323,33217],{"class":190},[74,33325,33326],{"class":76,"line":94},[74,33327,2363],{"emptyLinePlaceholder":2362},[74,33329,33330,33332,33334],{"class":76,"line":1141},[74,33331,30834],{"class":1925},[74,33333,33297],{"class":190},[74,33335,33232],{"class":190},[74,33337,33338],{"class":76,"line":1156},[74,33339,2363],{"emptyLinePlaceholder":2362},[74,33341,33342,33344,33346],{"class":76,"line":1162},[74,33343,30834],{"class":1925},[74,33345,33297],{"class":190},[74,33347,33247],{"class":190},[74,33349,33350],{"class":76,"line":1176},[74,33351,2363],{"emptyLinePlaceholder":2362},[74,33353,33354,33356,33358],{"class":76,"line":1182},[74,33355,30834],{"class":1925},[74,33357,33297],{"class":190},[74,33359,33360],{"class":190}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[74,33362,33363],{"class":76,"line":1273},[74,33364,2363],{"emptyLinePlaceholder":2362},[74,33366,33367,33369,33371],{"class":76,"line":1279},[74,33368,30834],{"class":1925},[74,33370,33297],{"class":190},[74,33372,33277],{"class":190},[74,33374,33375],{"class":76,"line":1291},[74,33376,2363],{"emptyLinePlaceholder":2362},[74,33378,33379,33381,33383],{"class":76,"line":1574},[74,33380,30834],{"class":1925},[74,33382,33297],{"class":190},[74,33384,33385],{"class":190}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[27,33387,33388],{"start":1141},[30,33389,33390],{},"验证推送成功",[19,33392,33393],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,33395,33396],{},[235,33397,3747],{},[1093,33399,33400,33403],{},[30,33401,33402],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[30,33404,33405],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,33407,33408],{},[1424,33409],{"alt":69,"src":33410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,33412,33413],{},[1424,33414],{"alt":69,"src":33415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[26277,33417,33419],{"id":33418},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,33421,33422,33423,33426,33427,33430],{},"如果您想在 ",[235,33424,33425],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[235,33428,33429],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,33432,33433,33434],{},"1. ",[235,33435,33436],{},"启用 Docker 跨平台构建",[19,33438,33439],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,33441,33442],{},"第一步：启用 buildx（只需执行一次）",[64,33444,33446],{"className":28102,"code":33445,"language":28104,"meta":69,"style":69},"docker buildx create --name multiarch_builder --use\n",[71,33447,33448],{"__ignoreMap":69},[74,33449,33450,33452,33455,33458,33461,33464],{"class":76,"line":77},[74,33451,30834],{"class":1925},[74,33453,33454],{"class":190}," buildx",[74,33456,33457],{"class":190}," create",[74,33459,33460],{"class":134}," --name",[74,33462,33463],{"class":190}," multiarch_builder",[74,33465,33466],{"class":134}," --use\n",[19,33468,33469],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,33471,33472],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[64,33474,33476],{"className":28102,"code":33475,"language":28104,"meta":69,"style":69},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[71,33477,33478],{"__ignoreMap":69},[74,33479,33480,33482,33484,33486,33489,33492,33495,33498],{"class":76,"line":77},[74,33481,30834],{"class":1925},[74,33483,31511],{"class":190},[74,33485,31514],{"class":134},[74,33487,33488],{"class":134}," --privileged",[74,33490,33491],{"class":190}," multiarch\u002Fqemu-user-static",[74,33493,33494],{"class":134}," --reset",[74,33496,33497],{"class":134}," -p",[74,33499,33500],{"class":190}," yes\n",[19,33502,33503],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,33505,33506],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[64,33508,33510],{"className":28102,"code":33509,"language":28104,"meta":69,"style":69},"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",[71,33511,33512,33554,33558,33563,33573,33583,33592,33598,33602,33606,33616,33624,33633,33639,33643,33647,33657,33665,33674,33680,33684,33688,33698,33706,33715,33721,33725,33729,33739,33747,33756,33762,33766,33770,33780,33788,33797,33803,33807,33811,33821,33829,33838,33844,33848,33852,33862,33870,33879,33885,33889,33893,33903,33911,33920,33926,33930,33934,33945,33953,33962,33968],{"__ignoreMap":69},[74,33513,33514,33516,33518,33520,33523,33526,33528,33530,33533,33535,33537,33539,33541,33544,33547,33549,33552],{"class":76,"line":77},[74,33515,30834],{"class":1925},[74,33517,33454],{"class":190},[74,33519,33013],{"class":190},[74,33521,33522],{"class":134}," --platform",[74,33524,33525],{"class":190}," linux\u002Famd64,linux\u002Farm64",[74,33527,33016],{"class":134},[74,33529,33183],{"class":80},[74,33531,33532],{"class":190},"你的镜像",[74,33534,33189],{"class":84},[74,33536,1046],{"class":80},[74,33538,945],{"class":190},[74,33540,996],{"class":80},[74,33542,33543],{"class":190},"标",[74,33545,33546],{"class":84},"签",[74,33548,1046],{"class":80},[74,33550,33551],{"class":134}," --push",[74,33553,33022],{"class":190},[74,33555,33556],{"class":76,"line":94},[74,33557,2363],{"emptyLinePlaceholder":2362},[74,33559,33560],{"class":76,"line":1141},[74,33561,33562],{"class":144},"# 例子：\n",[74,33564,33565,33567,33569,33571],{"class":76,"line":1156},[74,33566,30834],{"class":1925},[74,33568,33454],{"class":190},[74,33570,33013],{"class":190},[74,33572,28959],{"class":134},[74,33574,33575,33578,33581],{"class":76,"line":1162},[74,33576,33577],{"class":84},"--platform ",[74,33579,33580],{"class":190},"linux\u002Famd64,linux\u002Farm64",[74,33582,28959],{"class":134},[74,33584,33585,33587,33590],{"class":76,"line":1176},[74,33586,33016],{"class":134},[74,33588,33589],{"class":190}," tungchiahui\u002Fros:noetic-focal",[74,33591,28959],{"class":134},[74,33593,33594,33596],{"class":76,"line":1182},[74,33595,33551],{"class":134},[74,33597,28959],{"class":134},[74,33599,33600],{"class":76,"line":1273},[74,33601,33022],{"class":190},[74,33603,33604],{"class":76,"line":1279},[74,33605,2363],{"emptyLinePlaceholder":2362},[74,33607,33608,33610,33612,33614],{"class":76,"line":1291},[74,33609,30834],{"class":1925},[74,33611,33454],{"class":190},[74,33613,33013],{"class":190},[74,33615,28959],{"class":134},[74,33617,33618,33620,33622],{"class":76,"line":1574},[74,33619,33577],{"class":84},[74,33621,33580],{"class":190},[74,33623,28959],{"class":134},[74,33625,33626,33628,33631],{"class":76,"line":1579},[74,33627,33016],{"class":134},[74,33629,33630],{"class":190}," tungchiahui\u002Fros:humble-jammy",[74,33632,28959],{"class":134},[74,33634,33635,33637],{"class":76,"line":1585},[74,33636,33551],{"class":134},[74,33638,28959],{"class":134},[74,33640,33641],{"class":76,"line":1590},[74,33642,33022],{"class":190},[74,33644,33645],{"class":76,"line":1604},[74,33646,2363],{"emptyLinePlaceholder":2362},[74,33648,33649,33651,33653,33655],{"class":76,"line":1609},[74,33650,30834],{"class":1925},[74,33652,33454],{"class":190},[74,33654,33013],{"class":190},[74,33656,28959],{"class":134},[74,33658,33659,33661,33663],{"class":76,"line":1615},[74,33660,33577],{"class":84},[74,33662,33580],{"class":190},[74,33664,28959],{"class":134},[74,33666,33667,33669,33672],{"class":76,"line":1636},[74,33668,33016],{"class":134},[74,33670,33671],{"class":190}," tungchiahui\u002Fros:jazzy-noble",[74,33673,28959],{"class":134},[74,33675,33676,33678],{"class":76,"line":1641},[74,33677,33551],{"class":134},[74,33679,28959],{"class":134},[74,33681,33682],{"class":76,"line":1655},[74,33683,33022],{"class":190},[74,33685,33686],{"class":76,"line":1660},[74,33687,2363],{"emptyLinePlaceholder":2362},[74,33689,33690,33692,33694,33696],{"class":76,"line":1689},[74,33691,30601],{"class":1925},[74,33693,33454],{"class":190},[74,33695,33013],{"class":190},[74,33697,28959],{"class":134},[74,33699,33700,33702,33704],{"class":76,"line":1694},[74,33701,33577],{"class":84},[74,33703,33580],{"class":190},[74,33705,28959],{"class":134},[74,33707,33708,33710,33713],{"class":76,"line":1711},[74,33709,33016],{"class":134},[74,33711,33712],{"class":190}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[74,33714,28959],{"class":134},[74,33716,33717,33719],{"class":76,"line":1716},[74,33718,33551],{"class":134},[74,33720,28959],{"class":134},[74,33722,33723],{"class":76,"line":1721},[74,33724,33022],{"class":190},[74,33726,33727],{"class":76,"line":1726},[74,33728,2363],{"emptyLinePlaceholder":2362},[74,33730,33731,33733,33735,33737],{"class":76,"line":1740},[74,33732,30834],{"class":1925},[74,33734,33454],{"class":190},[74,33736,33013],{"class":190},[74,33738,28959],{"class":134},[74,33740,33741,33743,33745],{"class":76,"line":1745},[74,33742,33577],{"class":84},[74,33744,33580],{"class":190},[74,33746,28959],{"class":134},[74,33748,33749,33751,33754],{"class":76,"line":2540},[74,33750,33016],{"class":134},[74,33752,33753],{"class":190}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[74,33755,28959],{"class":134},[74,33757,33758,33760],{"class":76,"line":2554},[74,33759,33551],{"class":134},[74,33761,28959],{"class":134},[74,33763,33764],{"class":76,"line":2562},[74,33765,33022],{"class":190},[74,33767,33768],{"class":76,"line":2567},[74,33769,2363],{"emptyLinePlaceholder":2362},[74,33771,33772,33774,33776,33778],{"class":76,"line":2573},[74,33773,30601],{"class":1925},[74,33775,33454],{"class":190},[74,33777,33013],{"class":190},[74,33779,28959],{"class":134},[74,33781,33782,33784,33786],{"class":76,"line":2579},[74,33783,33577],{"class":84},[74,33785,33580],{"class":190},[74,33787,28959],{"class":134},[74,33789,33790,33792,33795],{"class":76,"line":2584},[74,33791,33016],{"class":134},[74,33793,33794],{"class":190}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[74,33796,28959],{"class":134},[74,33798,33799,33801],{"class":76,"line":12227},[74,33800,33551],{"class":134},[74,33802,28959],{"class":134},[74,33804,33805],{"class":76,"line":12251},[74,33806,33022],{"class":190},[74,33808,33809],{"class":76,"line":12256},[74,33810,2363],{"emptyLinePlaceholder":2362},[74,33812,33813,33815,33817,33819],{"class":76,"line":12262},[74,33814,30834],{"class":1925},[74,33816,33454],{"class":190},[74,33818,33013],{"class":190},[74,33820,28959],{"class":134},[74,33822,33823,33825,33827],{"class":76,"line":12289},[74,33824,33577],{"class":84},[74,33826,33580],{"class":190},[74,33828,28959],{"class":134},[74,33830,33831,33833,33836],{"class":76,"line":12294},[74,33832,33016],{"class":134},[74,33834,33835],{"class":190}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[74,33837,28959],{"class":134},[74,33839,33840,33842],{"class":76,"line":12300},[74,33841,33551],{"class":134},[74,33843,28959],{"class":134},[74,33845,33846],{"class":76,"line":12312},[74,33847,33022],{"class":190},[74,33849,33850],{"class":76,"line":12324},[74,33851,2363],{"emptyLinePlaceholder":2362},[74,33853,33854,33856,33858,33860],{"class":76,"line":12336},[74,33855,30834],{"class":1925},[74,33857,33454],{"class":190},[74,33859,33013],{"class":190},[74,33861,28959],{"class":134},[74,33863,33864,33866,33868],{"class":76,"line":13995},[74,33865,33577],{"class":84},[74,33867,33580],{"class":190},[74,33869,28959],{"class":134},[74,33871,33872,33874,33877],{"class":76,"line":14020},[74,33873,33016],{"class":134},[74,33875,33876],{"class":190}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[74,33878,28959],{"class":134},[74,33880,33881,33883],{"class":76,"line":14043},[74,33882,33551],{"class":134},[74,33884,28959],{"class":134},[74,33886,33887],{"class":76,"line":14067},[74,33888,33022],{"class":190},[74,33890,33891],{"class":76,"line":14072},[74,33892,2363],{"emptyLinePlaceholder":2362},[74,33894,33895,33897,33899,33901],{"class":76,"line":14077},[74,33896,30601],{"class":1925},[74,33898,33454],{"class":190},[74,33900,33013],{"class":190},[74,33902,28959],{"class":134},[74,33904,33905,33907,33909],{"class":76,"line":14082},[74,33906,33577],{"class":84},[74,33908,33580],{"class":190},[74,33910,28959],{"class":134},[74,33912,33913,33915,33918],{"class":76,"line":14091},[74,33914,33016],{"class":134},[74,33916,33917],{"class":190}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[74,33919,28959],{"class":134},[74,33921,33922,33924],{"class":76,"line":14096},[74,33923,33551],{"class":134},[74,33925,28959],{"class":134},[74,33927,33928],{"class":76,"line":14102},[74,33929,33022],{"class":190},[74,33931,33932],{"class":76,"line":14123},[74,33933,2363],{"emptyLinePlaceholder":2362},[74,33935,33936,33939,33941,33943],{"class":76,"line":14129},[74,33937,33938],{"class":1925},"  docker",[74,33940,33454],{"class":190},[74,33942,33013],{"class":190},[74,33944,28959],{"class":134},[74,33946,33947,33949,33951],{"class":76,"line":14143},[74,33948,33577],{"class":84},[74,33950,33580],{"class":190},[74,33952,28959],{"class":134},[74,33954,33955,33957,33960],{"class":76,"line":14149},[74,33956,33016],{"class":134},[74,33958,33959],{"class":190}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[74,33961,28959],{"class":134},[74,33963,33964,33966],{"class":76,"line":14176},[74,33965,33551],{"class":134},[74,33967,28959],{"class":134},[74,33969,33970],{"class":76,"line":14185},[74,33971,33022],{"class":190},[19,33973,33974],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,33976,33977],{},[1424,33978],{"alt":69,"src":33979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,33981,33982],{},[1424,33983],{"alt":69,"src":33984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[26277,33986,33988],{"id":33987},"_623清除构建缓存","6.2.3.清除构建缓存",[64,33990,33992],{"className":28102,"code":33991,"language":28104,"meta":69,"style":69},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[71,33993,33994,33999],{"__ignoreMap":69},[74,33995,33996],{"class":76,"line":77},[74,33997,33998],{"class":144},"# 清理BuildKit构建缓存\n",[74,34000,34001,34003,34006,34009],{"class":76,"line":94},[74,34002,30834],{"class":1925},[74,34004,34005],{"class":190}," builder",[74,34007,34008],{"class":190}," prune",[74,34010,34011],{"class":134}," -f\n",[19,34013,34014],{},[1424,34015],{"alt":69,"src":34016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[44,34018,34020],{"id":34019},"_63补充","6.3.补充",[26277,34022,34024],{"id":34023},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,34026,34027],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,34029,34030],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,34032,34033],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[64,34035,34037],{"className":28102,"code":34036,"language":28104,"meta":69,"style":69},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[71,34038,34039,34046],{"__ignoreMap":69},[74,34040,34041,34043],{"class":76,"line":77},[74,34042,31651],{"class":1925},[74,34044,34045],{"class":190}," nginx\n",[74,34047,34048,34050,34053,34056,34058],{"class":76,"line":94},[74,34049,32836],{"class":1925},[74,34051,34052],{"class":190}," echo",[74,34054,34055],{"class":190}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[74,34057,30503],{"class":80},[74,34059,34060],{"class":190}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,34062,34063],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,34065,34066],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[64,34068,34070],{"className":28102,"code":34069,"language":28104,"meta":69,"style":69},"docker build -t nginx:tuling .\n",[71,34071,34072],{"__ignoreMap":69},[74,34073,34074,34076,34078,34080,34083],{"class":76,"line":77},[74,34075,30834],{"class":1925},[74,34077,33013],{"class":190},[74,34079,33016],{"class":134},[74,34081,34082],{"class":190}," nginx:tuling",[74,34084,33022],{"class":190},[19,34086,34087],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,34089,34090],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[64,34092,34094],{"className":28102,"code":34093,"language":28104,"meta":69,"style":69},"docker run -d -p 92:80 nginx:tuling\n",[71,34095,34096],{"__ignoreMap":69},[74,34097,34098,34100,34102,34105,34107,34110],{"class":76,"line":77},[74,34099,30834],{"class":1925},[74,34101,31511],{"class":190},[74,34103,34104],{"class":134}," -d",[74,34106,33497],{"class":134},[74,34108,34109],{"class":190}," 92:80",[74,34111,34112],{"class":190}," nginx:tuling\n",[19,34114,34115,34116],{},"4、访问 ",[324,34117,34120],{"href":34118,"rel":34119},"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",[28145],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,34122,34123],{},[1424,34124],{"alt":69,"src":34125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,34127,34128],{},[1424,34129],{"alt":69,"src":34130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[26277,34132,34134],{"id":34133},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,34136,34137],{},"只需要知道大体流程即可",[19,34139,34140],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,34142,34143],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,34145,34146],{},"2、在Dockerfile中添加以下内容",[64,34148,34150],{"className":30372,"code":34149,"language":30374,"meta":69,"style":69},"# 基于哪个镜像\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",[71,34151,34152,34157,34162,34167,34172,34177,34182,34187],{"__ignoreMap":69},[74,34153,34154],{"class":76,"line":77},[74,34155,34156],{},"# 基于哪个镜像\n",[74,34158,34159],{"class":76,"line":94},[74,34160,34161],{},"From java:8\n",[74,34163,34164],{"class":76,"line":1141},[74,34165,34166],{},"# 复制文件到容器\n",[74,34168,34169],{"class":76,"line":1156},[74,34170,34171],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[74,34173,34174],{"class":76,"line":1162},[74,34175,34176],{},"# 声明需要暴露的端口\n",[74,34178,34179],{"class":76,"line":1176},[74,34180,34181],{},"EXPOSE 8877\n",[74,34183,34184],{"class":76,"line":1182},[74,34185,34186],{},"# 配置容器启动后执行的命令\n",[74,34188,34189],{"class":76,"line":1273},[74,34190,34191],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,34193,34194],{},"3、使用docker build命令构建镜像",[64,34196,34198],{"className":28102,"code":34197,"language":28104,"meta":69,"style":69},"docker build -t tulingmall-member:0.0.5 .\n",[71,34199,34200],{"__ignoreMap":69},[74,34201,34202,34204,34206,34208,34211],{"class":76,"line":77},[74,34203,30834],{"class":1925},[74,34205,33013],{"class":190},[74,34207,33016],{"class":134},[74,34209,34210],{"class":190}," tulingmall-member:0.0.5",[74,34212,33022],{"class":190},[19,34214,34215],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,34217,34218],{},[1424,34219],{"alt":69,"src":34220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,34222,34223],{},"4、启动镜像，加-d可在后台启动",[64,34225,34227],{"className":28102,"code":34226,"language":28104,"meta":69,"style":69},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[71,34228,34229],{"__ignoreMap":69},[74,34230,34231,34233,34235,34237,34239,34242],{"class":76,"line":77},[74,34232,30834],{"class":1925},[74,34234,31511],{"class":190},[74,34236,34104],{"class":134},[74,34238,33497],{"class":134},[74,34240,34241],{"class":190}," 8877:8877",[74,34243,34244],{"class":190}," tulingmall-member:0.0.5\n",[19,34246,34247],{},"加上JVM参数：",[64,34249,34251],{"className":28102,"code":34250,"language":28104,"meta":69,"style":69},"# --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",[71,34252,34253,34258,34273,34283,34292,34299],{"__ignoreMap":69},[74,34254,34255],{"class":76,"line":77},[74,34256,34257],{"class":144},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[74,34259,34260,34262,34264,34267,34269,34271],{"class":76,"line":94},[74,34261,30834],{"class":1925},[74,34263,31511],{"class":190},[74,34265,34266],{"class":134},"  -d",[74,34268,33497],{"class":134},[74,34270,34241],{"class":190},[74,34272,28959],{"class":134},[74,34274,34275,34277,34280],{"class":76,"line":1141},[74,34276,32409],{"class":84},[74,34278,34279],{"class":190},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[74,34281,34282],{"class":134},"  \\\n",[74,34284,34285,34287,34290],{"class":76,"line":1156},[74,34286,32409],{"class":84},[74,34288,34289],{"class":190},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[74,34291,34282],{"class":134},[74,34293,34294,34297],{"class":76,"line":1162},[74,34295,34296],{"class":84},"--cap-add=SYS_PTRACE  ",[74,34298,30456],{"class":134},[74,34300,34301],{"class":76,"line":1176},[74,34302,34303],{"class":84},"tulingmall-member:0.0.5\n",[19,34305,34306],{},"5、访问会员服务接口",[19,34308,34309],{},[1424,34310],{"alt":69,"src":34311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[26277,34313,34315],{"id":34314},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,34317,34318],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,34320,34321,34322],{},"阿里云docker镜像仓库：",[324,34323,34324],{"href":34324,"rel":34325},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[28145],[19,34327,34328],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,34330,34331],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,34333,34334],{},[1424,34335],{"alt":69,"src":34336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,34338,34339],{},"要把镜像推送到镜像仓库",[64,34341,34343],{"className":28102,"code":34342,"language":28104,"meta":69,"style":69},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[71,34344,34345],{"__ignoreMap":69},[74,34346,34347,34349,34351,34353],{"class":76,"line":77},[74,34348,30834],{"class":1925},[74,34350,33178],{"class":190},[74,34352,34210],{"class":190},[74,34354,34355],{"class":190}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,34357,34358],{},"最后将镜像推送到远程仓库",[64,34360,34362],{"className":28102,"code":34361,"language":28104,"meta":69,"style":69},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[71,34363,34364],{"__ignoreMap":69},[74,34365,34366,34368,34370],{"class":76,"line":77},[74,34367,30834],{"class":1925},[74,34369,33297],{"class":190},[74,34371,34355],{"class":190},[5090,34373,34374],{},"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":69,"searchDepth":94,"depth":94,"links":34376},[34377,34378,34379],{"id":32764,"depth":1141,"text":32765},{"id":32993,"depth":1141,"text":32994},{"id":34019,"depth":1141,"text":34020},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":32756,"description":69},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":34386,"title":34387,"body":34388,"description":69,"extension":5121,"meta":34531,"navigation":2362,"path":34532,"seo":34533,"stem":34534,"__hash__":34535},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":34389,"toc":34529},[34390,34393,34398,34403,34406,34411,34416,34419,34424,34429,34432,34437,34440,34443,34446,34449,34452,34455,34475,34497,34500,34503,34523,34526],[10,34391,34387],{"id":34392},"_7vscode远程开发",[27,34394,34395],{},[30,34396,34397],{},"插件1：微软Docker工具",[19,34399,34400],{},[1424,34401],{"alt":69,"src":34402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,34404,34405],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,34407,34408],{},[1424,34409],{"alt":69,"src":34410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[27,34412,34413],{"start":94},[30,34414,34415],{},"插件2：微软Docker远程开发工具",[19,34417,34418],{},"下面这是远程开发的插件。",[19,34420,34421],{},[1424,34422],{"alt":69,"src":34423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,34425,34426],{},[1424,34427],{"alt":69,"src":34428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,34430,34431],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,34433,34434],{},[1424,34435],{"alt":69,"src":34436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,34438,34439],{},"安装完拓展之后，vscode进行链接：",[19,34441,34442],{},"1.按ctrl+shift+p",[19,34444,34445],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,34447,34448],{},"3.选择目前运行的容器",[19,34450,34451],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,34453,34454],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[64,34456,34458],{"className":28102,"code":34457,"language":28104,"meta":69,"style":69},"docker run -v 主机目录:容器目录 image-name\n",[71,34459,34460],{"__ignoreMap":69},[74,34461,34462,34464,34466,34469,34472],{"class":76,"line":77},[74,34463,30834],{"class":1925},[74,34465,31511],{"class":190},[74,34467,34468],{"class":134}," -v",[74,34470,34471],{"class":190}," 主机目录:容器目录",[74,34473,34474],{"class":190}," image-name\n",[64,34476,34478],{"className":28102,"code":34477,"language":28104,"meta":69,"style":69},"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",[71,34479,34480],{"__ignoreMap":69},[74,34481,34482,34484,34486,34489,34491,34494],{"class":76,"line":77},[74,34483,30834],{"class":1925},[74,34485,31511],{"class":190},[74,34487,34488],{"class":134}," -it",[74,34490,34468],{"class":134},[74,34492,34493],{"class":190}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[74,34495,34496],{"class":190}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,34498,34499],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,34501,34502],{},"查看挂载情况：",[64,34504,34506],{"className":28102,"code":34505,"language":28104,"meta":69,"style":69},"mount | grep -i project\n",[71,34507,34508],{"__ignoreMap":69},[74,34509,34510,34513,34515,34518,34520],{"class":76,"line":77},[74,34511,34512],{"class":1925},"mount",[74,34514,29390],{"class":80},[74,34516,34517],{"class":1925}," grep",[74,34519,30711],{"class":134},[74,34521,34522],{"class":190}," project\n",[19,34524,34525],{},"也可以通过ls来进行查看",[5090,34527,34528],{},"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":69,"searchDepth":94,"depth":94,"links":34530},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":34387,"description":69},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":34537,"title":34538,"body":34539,"description":27656,"extension":5121,"meta":34543,"navigation":2362,"path":34545,"seo":34546,"stem":34547,"__hash__":34548},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":34540,"toc":34541},[],{"title":69,"searchDepth":94,"depth":94,"links":34542},[],{"category":34544},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":34538,"description":27656},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":34550,"title":34551,"body":34552,"description":27656,"extension":5121,"meta":34556,"navigation":2362,"path":34557,"seo":34558,"stem":34559,"__hash__":34560},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":34553,"toc":34554},[],{"title":69,"searchDepth":94,"depth":94,"links":34555},[],{"category":34544},"\u002Fwiki\u002F2025-11-10-k8s",{"title":34551,"description":27656},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":34562,"title":34563,"body":34564,"description":27656,"extension":5121,"meta":34857,"navigation":2362,"path":34858,"seo":34859,"stem":34860,"__hash__":34861},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":34565,"toc":34855},[34566,34569,34577,34592,34597,34648,34651,34657,34844,34849,34852],[10,34567,34563],{"id":34568},"_1验证深度学习环境",[19,34570,34571,34572],{},"关于环境的安装，看",[324,34573,34576],{"href":34574,"rel":34575},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[28145],"Pytorch-->深度学习",[19,34578,34579,34580,34583,34584,34587,34588,34591],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[71,34581,34582],{},"pytorch-cuda=12.4"," 是一个“ ",[235,34585,34586],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[235,34589,34590],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,34593,34594],{},[1424,34595],{"alt":69,"src":34596},"\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",[64,34598,34600],{"className":28102,"code":34599,"language":28104,"meta":69,"style":69},"# 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",[71,34601,34602,34607],{"__ignoreMap":69},[74,34603,34604],{"class":76,"line":77},[74,34605,34606],{"class":144},"# CUDA 12.4\n",[74,34608,34609,34612,34614,34617,34620,34623,34626,34629,34631,34634,34637,34640,34643,34645],{"class":76,"line":94},[74,34610,34611],{"class":1925},"conda",[74,34613,28114],{"class":190},[74,34615,34616],{"class":190}," pytorch==",[74,34618,34619],{"class":134},"2.5.1",[74,34621,34622],{"class":190}," torchvision==",[74,34624,34625],{"class":134},"0.20.1",[74,34627,34628],{"class":190}," torchaudio==",[74,34630,34619],{"class":134},[74,34632,34633],{"class":190}," pytorch-cuda=",[74,34635,34636],{"class":134},"12.4",[74,34638,34639],{"class":134}," -c",[74,34641,34642],{"class":190}," pytorch",[74,34644,34639],{"class":134},[74,34646,34647],{"class":190}," nvidia\n",[19,34649,34650],{},"）：",[19,34652,34653],{},[324,34654,34655],{"href":34655,"rel":34656},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[28145],[64,34658,34662],{"className":34659,"code":34660,"language":34661,"meta":69,"style":69},"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",[71,34663,34664,34669,34677,34682,34692,34708,34713,34723,34760,34767,34779,34795,34800,34810,34822,34832],{"__ignoreMap":69},[74,34665,34666],{"class":76,"line":77},[74,34667,34668],{"class":144},"# 对深度学习环境进行测试\n",[74,34670,34671,34674],{"class":76,"line":94},[74,34672,34673],{"class":80},"import",[74,34675,34676],{"class":84}," torch\n",[74,34678,34679],{"class":76,"line":1141},[74,34680,34681],{"class":144},"# 查看cuda是否被激活\n",[74,34683,34684,34687,34689],{"class":76,"line":1156},[74,34685,34686],{"class":84},"flag",[74,34688,131],{"class":80},[74,34690,34691],{"class":84},"torch.cuda.is_available()\n",[74,34693,34694,34697,34699,34702,34705],{"class":76,"line":1162},[74,34695,34696],{"class":134},"print",[74,34698,85],{"class":84},[74,34700,34701],{"class":190},"\"cuda:\"",[74,34703,34704],{"class":84},", flag)   ",[74,34706,34707],{"class":144},"#返回true的话说明被激活\n",[74,34709,34710],{"class":76,"line":1176},[74,34711,34712],{"class":144},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[74,34714,34715,34718,34720],{"class":76,"line":1182},[74,34716,34717],{"class":84},"ngpu",[74,34719,131],{"class":80},[74,34721,34722],{"class":134},"1\n",[74,34724,34725,34728,34730,34733,34736,34738,34741,34744,34747,34749,34751,34753,34755,34758],{"class":76,"line":1273},[74,34726,34727],{"class":84},"device",[74,34729,131],{"class":80},[74,34731,34732],{"class":84},"torch.device(",[74,34734,34735],{"class":190},"\"cuda:0\"",[74,34737,1666],{"class":80},[74,34739,34740],{"class":84},"(torch.cuda.is_available() ",[74,34742,34743],{"class":80},"and",[74,34745,34746],{"class":84}," ngpu",[74,34748,1046],{"class":80},[74,34750,277],{"class":134},[74,34752,17993],{"class":84},[74,34754,1663],{"class":80},[74,34756,34757],{"class":190}," \"cpu\"",[74,34759,91],{"class":84},[74,34761,34762,34764],{"class":76,"line":1279},[74,34763,34696],{"class":134},[74,34765,34766],{"class":84},"(device)\n",[74,34768,34769,34771,34774,34776],{"class":76,"line":1291},[74,34770,34696],{"class":134},[74,34772,34773],{"class":84},"(torch.cuda.get_device_name(",[74,34775,277],{"class":134},[74,34777,34778],{"class":84},"))\n",[74,34780,34781,34783,34786,34788,34790,34792],{"class":76,"line":1574},[74,34782,34696],{"class":134},[74,34784,34785],{"class":84},"(torch.rand(",[74,34787,157],{"class":134},[74,34789,464],{"class":84},[74,34791,157],{"class":134},[74,34793,34794],{"class":84},").cuda())\n",[74,34796,34797],{"class":76,"line":1579},[74,34798,34799],{"class":144},"# 查看cuda和cudnn的版本\n",[74,34801,34802,34805,34807],{"class":76,"line":1585},[74,34803,34804],{"class":84},"cuda_version",[74,34806,131],{"class":80},[74,34808,34809],{"class":84},"torch.version.cuda\n",[74,34811,34812,34814,34816,34819],{"class":76,"line":1590},[74,34813,34696],{"class":134},[74,34815,85],{"class":84},[74,34817,34818],{"class":190},"\"cuda version\"",[74,34820,34821],{"class":84},",cuda_version)\n",[74,34823,34824,34827,34829],{"class":76,"line":1604},[74,34825,34826],{"class":84},"cudnn_version",[74,34828,131],{"class":80},[74,34830,34831],{"class":84},"torch.backends.cudnn.version()\n",[74,34833,34834,34836,34838,34841],{"class":76,"line":1609},[74,34835,34696],{"class":134},[74,34837,85],{"class":84},[74,34839,34840],{"class":190},"\"cudnn version\"",[74,34842,34843],{"class":84},",cudnn_version)\n",[19,34845,34846],{},[1424,34847],{"alt":69,"src":34848},"\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",[19,34850,34851],{},"cuda:0 指的是一块显卡",[5090,34853,34854],{},"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":69,"searchDepth":94,"depth":94,"links":34856},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":34563,"description":27656},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":34863,"title":34864,"body":34865,"description":27656,"extension":5121,"meta":54669,"navigation":2362,"path":54670,"seo":54671,"stem":54672,"__hash__":54673},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":34866,"toc":54663},[34867,34870,34874,34878,34881,34886,34891,34894,34899,34904,34909,34912,34916,34921,34925,34930,34933,34938,34941,34944,34947,34950,34955,34958,34963,34968,34973,34978,34981,34985,34988,34993,35597,35602,35605,35610,35613,35616,36080,36083,36086,36089,36092,38143,38146,38151,38156,38951,38954,38959,39737,39741,41400,41404,42118,42122,42126,42131,42136,42141,42144,42149,42154,42159,42164,42169,42173,42178,43460,43465,43468,43471,43474,43629,43632,43635,44851,44856,45551,45555,45559,45564,45569,45572,45577,45582,45587,45592,45597,45602,45607,45612,45617,45622,45627,45632,45637,45642,45647,45652,45657,45662,45667,45672,45677,45682,45687,45692,45697,45702,45707,45712,45717,45722,45726,45730,45733,47211,47215,48862,48866,49560,49564,49567,49570,50114,50117,50121,50124,51521,51525,51528,52106,53893,53897,53900,54660],[10,34868,34864],{"id":34869},"_2经典神经网络",[44,34871,34873],{"id":34872},"_21lenet与alexnet","2.1.LeNet与AlexNet",[26277,34875,34877],{"id":34876},"_211原理介绍","2.1.1.原理介绍",[19,34879,34880],{},"LeNet-5",[27,34882,34883],{},[30,34884,34885],{},"原理",[19,34887,34888],{},[1424,34889],{"alt":69,"src":34890},"\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",[19,34892,34893],{},"B是batch批次；C是channel通道",[27,34895,34896],{"start":94},[30,34897,34898],{},"网络参数详细",[19,34900,34901],{},[1424,34902],{"alt":69,"src":34903},"\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",[19,34905,34906],{},[1424,34907],{"alt":69,"src":34908},"\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",[19,34910,34911],{},"AlexNet",[27,34913,34914],{},[30,34915,34885],{},[19,34917,34918],{},[1424,34919],{"alt":69,"src":34920},"\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",[27,34922,34923],{"start":94},[30,34924,34898],{},[19,34926,34927],{},[1424,34928],{"alt":69,"src":34929},"\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",[19,34931,34932],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,34934,34935],{},[1424,34936],{"alt":69,"src":34937},"\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",[19,34939,34940],{},"数据处理中的图像增强操作:",[19,34942,34943],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,34945,34946],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,34948,34949],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,34951,34952],{},[1424,34953],{"alt":69,"src":34954},"\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",[19,34956,34957],{},"提升网络精确度的方法：LRN正则化",[19,34959,34960],{},[1424,34961],{"alt":69,"src":34962},"\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",[19,34964,34965],{},[1424,34966],{"alt":69,"src":34967},"\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",[27,34969,34970],{"start":1141},[30,34971,34972],{},"AlexNet的总结",[19,34974,34975],{},[1424,34976],{"alt":69,"src":34977},"\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",[19,34979,34980],{},"比LeNet模型要深一丢丢",[26277,34982,34984],{"id":34983},"_212代码实现","2.1.2.代码实现",[19,34986,34987],{},"（1）LeNet",[27,34989,34990],{},[30,34991,34992],{},"模型搭建",[64,34994,34996],{"className":34659,"code":34995,"language":34661,"meta":69,"style":69},"# 导入库\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",[71,34997,34998,35003,35009,35014,35027,35032,35044,35048,35068,35073,35078,35089,35094,35113,35117,35122,35171,35183,35188,35217,35252,35279,35284,35296,35301,35321,35340,35359,35363,35368,35378,35395,35406,35421,35432,35443,35458,35473,35484,35491,35495,35509,35514,35537,35542,35547,35552,35556,35561,35566,35576],{"__ignoreMap":69},[74,34999,35000],{"class":76,"line":77},[74,35001,35002],{"class":144},"# 导入库\n",[74,35004,35005,35007],{"class":76,"line":94},[74,35006,34673],{"class":80},[74,35008,34676],{"class":84},[74,35010,35011],{"class":76,"line":1141},[74,35012,35013],{"class":144},"# 导入神经网络层\n",[74,35015,35016,35019,35022,35024],{"class":76,"line":1156},[74,35017,35018],{"class":80},"from",[74,35020,35021],{"class":84}," torch ",[74,35023,34673],{"class":80},[74,35025,35026],{"class":84}," nn\n",[74,35028,35029],{"class":76,"line":1162},[74,35030,35031],{"class":144},"# 导入展示神经网络参数的包\n",[74,35033,35034,35036,35039,35041],{"class":76,"line":1176},[74,35035,35018],{"class":80},[74,35037,35038],{"class":84}," torchsummary ",[74,35040,34673],{"class":80},[74,35042,35043],{"class":84}," summary\n",[74,35045,35046],{"class":76,"line":1182},[74,35047,2363],{"emptyLinePlaceholder":2362},[74,35049,35050,35052,35055,35057,35060,35062,35065],{"class":76,"line":1273},[74,35051,18973],{"class":80},[74,35053,35054],{"class":1925}," LeNet",[74,35056,85],{"class":84},[74,35058,35059],{"class":1925},"nn",[74,35061,644],{"class":84},[74,35063,35064],{"class":1925},"Module",[74,35066,35067],{"class":84},"):\n",[74,35069,35070],{"class":76,"line":1279},[74,35071,35072],{"class":144},"    # 模型初始化:\n",[74,35074,35075],{"class":76,"line":1291},[74,35076,35077],{"class":144},"    # 定义一些网络层和激活函数\n",[74,35079,35080,35083,35086],{"class":76,"line":1574},[74,35081,35082],{"class":80},"    def",[74,35084,35085],{"class":134}," __init__",[74,35087,35088],{"class":84},"(self):\n",[74,35090,35091],{"class":76,"line":1579},[74,35092,35093],{"class":144},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[74,35095,35096,35099,35102,35105,35108,35111],{"class":76,"line":1585},[74,35097,35098],{"class":134},"        super",[74,35100,35101],{"class":84},"(LeNet,",[74,35103,35104],{"class":134},"self",[74,35106,35107],{"class":84},").",[74,35109,35110],{"class":134},"__init__",[74,35112,1938],{"class":84},[74,35114,35115],{"class":76,"line":1590},[74,35116,2363],{"emptyLinePlaceholder":2362},[74,35118,35119],{"class":76,"line":1604},[74,35120,35121],{"class":144},"        # 定义网络层\n",[74,35123,35124,35127,35130,35132,35135,35138,35140,35142,35144,35147,35149,35151,35153,35156,35158,35160,35162,35165,35167,35169],{"class":76,"line":1609},[74,35125,35126],{"class":134},"        self",[74,35128,35129],{"class":84},".c1",[74,35131,131],{"class":80},[74,35133,35134],{"class":84},"nn.Conv2d(",[74,35136,35137],{"class":9495},"in_channels",[74,35139,131],{"class":80},[74,35141,303],{"class":134},[74,35143,464],{"class":84},[74,35145,35146],{"class":9495},"out_channels",[74,35148,131],{"class":80},[74,35150,430],{"class":134},[74,35152,464],{"class":84},[74,35154,35155],{"class":9495},"kernel_size",[74,35157,131],{"class":80},[74,35159,405],{"class":134},[74,35161,464],{"class":84},[74,35163,35164],{"class":9495},"padding",[74,35166,131],{"class":80},[74,35168,163],{"class":134},[74,35170,91],{"class":84},[74,35172,35173,35175,35178,35180],{"class":76,"line":1615},[74,35174,35126],{"class":134},[74,35176,35177],{"class":84},".sig",[74,35179,131],{"class":80},[74,35181,35182],{"class":84},"nn.Sigmoid()\n",[74,35184,35185],{"class":76,"line":1636},[74,35186,35187],{"class":144},"        # 定义池化\n",[74,35189,35190,35192,35195,35197,35200,35202,35204,35206,35208,35211,35213,35215],{"class":76,"line":1641},[74,35191,35126],{"class":134},[74,35193,35194],{"class":84},".s2",[74,35196,131],{"class":80},[74,35198,35199],{"class":84},"nn.AvgPool2d(",[74,35201,35155],{"class":9495},[74,35203,131],{"class":80},[74,35205,163],{"class":134},[74,35207,464],{"class":84},[74,35209,35210],{"class":9495},"stride",[74,35212,131],{"class":80},[74,35214,163],{"class":134},[74,35216,91],{"class":84},[74,35218,35219,35221,35224,35226,35228,35230,35232,35234,35236,35238,35240,35242,35244,35246,35248,35250],{"class":76,"line":1655},[74,35220,35126],{"class":134},[74,35222,35223],{"class":84},".c3",[74,35225,131],{"class":80},[74,35227,35134],{"class":84},[74,35229,35137],{"class":9495},[74,35231,131],{"class":80},[74,35233,430],{"class":134},[74,35235,464],{"class":84},[74,35237,35146],{"class":9495},[74,35239,131],{"class":80},[74,35241,687],{"class":134},[74,35243,464],{"class":84},[74,35245,35155],{"class":9495},[74,35247,131],{"class":80},[74,35249,405],{"class":134},[74,35251,91],{"class":84},[74,35253,35254,35256,35259,35261,35263,35265,35267,35269,35271,35273,35275,35277],{"class":76,"line":1660},[74,35255,35126],{"class":134},[74,35257,35258],{"class":84},".s4",[74,35260,131],{"class":80},[74,35262,35199],{"class":84},[74,35264,35155],{"class":9495},[74,35266,131],{"class":80},[74,35268,163],{"class":134},[74,35270,464],{"class":84},[74,35272,35210],{"class":9495},[74,35274,131],{"class":80},[74,35276,163],{"class":134},[74,35278,91],{"class":84},[74,35280,35281],{"class":76,"line":1689},[74,35282,35283],{"class":144},"        # 定义平展层\n",[74,35285,35286,35288,35291,35293],{"class":76,"line":1694},[74,35287,35126],{"class":134},[74,35289,35290],{"class":84},".flatten",[74,35292,131],{"class":80},[74,35294,35295],{"class":84},"nn.Flatten()\n",[74,35297,35298],{"class":76,"line":1711},[74,35299,35300],{"class":144},"        # 定义全连接层\n",[74,35302,35303,35305,35308,35310,35313,35315,35317,35319],{"class":76,"line":1716},[74,35304,35126],{"class":134},[74,35306,35307],{"class":84},".f5",[74,35309,131],{"class":80},[74,35311,35312],{"class":84},"nn.Linear(",[74,35314,3950],{"class":134},[74,35316,464],{"class":84},[74,35318,903],{"class":134},[74,35320,91],{"class":84},[74,35322,35323,35325,35328,35330,35332,35334,35336,35338],{"class":76,"line":1721},[74,35324,35126],{"class":134},[74,35326,35327],{"class":84},".f6",[74,35329,131],{"class":80},[74,35331,35312],{"class":84},[74,35333,903],{"class":134},[74,35335,464],{"class":84},[74,35337,797],{"class":134},[74,35339,91],{"class":84},[74,35341,35342,35344,35347,35349,35351,35353,35355,35357],{"class":76,"line":1726},[74,35343,35126],{"class":134},[74,35345,35346],{"class":84},".f7",[74,35348,131],{"class":80},[74,35350,35312],{"class":84},[74,35352,797],{"class":134},[74,35354,464],{"class":84},[74,35356,532],{"class":134},[74,35358,91],{"class":84},[74,35360,35361],{"class":76,"line":1740},[74,35362,2363],{"emptyLinePlaceholder":2362},[74,35364,35365],{"class":76,"line":1745},[74,35366,35367],{"class":144},"    # 写工具->写前向传播\n",[74,35369,35370,35372,35375],{"class":76,"line":2540},[74,35371,35082],{"class":80},[74,35373,35374],{"class":1925}," forward",[74,35376,35377],{"class":84},"(self,x):\n",[74,35379,35380,35383,35385,35387,35390,35392],{"class":76,"line":2554},[74,35381,35382],{"class":84},"        x",[74,35384,131],{"class":80},[74,35386,35104],{"class":134},[74,35388,35389],{"class":84},".sig(",[74,35391,35104],{"class":134},[74,35393,35394],{"class":84},".c1(x))\n",[74,35396,35397,35399,35401,35403],{"class":76,"line":2562},[74,35398,35382],{"class":84},[74,35400,131],{"class":80},[74,35402,35104],{"class":134},[74,35404,35405],{"class":84},".s2(x)\n",[74,35407,35408,35410,35412,35414,35416,35418],{"class":76,"line":2567},[74,35409,35382],{"class":84},[74,35411,131],{"class":80},[74,35413,35104],{"class":134},[74,35415,35389],{"class":84},[74,35417,35104],{"class":134},[74,35419,35420],{"class":84},".c3(x))\n",[74,35422,35423,35425,35427,35429],{"class":76,"line":2573},[74,35424,35382],{"class":84},[74,35426,131],{"class":80},[74,35428,35104],{"class":134},[74,35430,35431],{"class":84},".s4(x)\n",[74,35433,35434,35436,35438,35440],{"class":76,"line":2579},[74,35435,35382],{"class":84},[74,35437,131],{"class":80},[74,35439,35104],{"class":134},[74,35441,35442],{"class":84},".flatten(x)\n",[74,35444,35445,35447,35449,35451,35453,35455],{"class":76,"line":2584},[74,35446,35382],{"class":84},[74,35448,131],{"class":80},[74,35450,35104],{"class":134},[74,35452,35389],{"class":84},[74,35454,35104],{"class":134},[74,35456,35457],{"class":84},".f5(x))\n",[74,35459,35460,35462,35464,35466,35468,35470],{"class":76,"line":12227},[74,35461,35382],{"class":84},[74,35463,131],{"class":80},[74,35465,35104],{"class":134},[74,35467,35389],{"class":84},[74,35469,35104],{"class":134},[74,35471,35472],{"class":84},".f6(x))\n",[74,35474,35475,35477,35479,35481],{"class":76,"line":12251},[74,35476,35382],{"class":84},[74,35478,131],{"class":80},[74,35480,35104],{"class":134},[74,35482,35483],{"class":84},".f7(x)\n",[74,35485,35486,35488],{"class":76,"line":12256},[74,35487,19031],{"class":80},[74,35489,35490],{"class":84}," x\n",[74,35492,35493],{"class":76,"line":12262},[74,35494,2363],{"emptyLinePlaceholder":2362},[74,35496,35497,35499,35502,35504,35507],{"class":76,"line":12289},[74,35498,1493],{"class":80},[74,35500,35501],{"class":134}," __name__",[74,35503,2912],{"class":80},[74,35505,35506],{"class":190},"\"__main__\"",[74,35508,3702],{"class":84},[74,35510,35511],{"class":76,"line":12294},[74,35512,35513],{"class":144},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[74,35515,35516,35519,35521,35523,35526,35528,35531,35533,35535],{"class":76,"line":12300},[74,35517,35518],{"class":84},"    device",[74,35520,131],{"class":80},[74,35522,34732],{"class":84},[74,35524,35525],{"class":190},"\"cuda\"",[74,35527,1666],{"class":80},[74,35529,35530],{"class":84}," torch.cuda.is_available() ",[74,35532,1663],{"class":80},[74,35534,34757],{"class":190},[74,35536,91],{"class":84},[74,35538,35539],{"class":76,"line":12312},[74,35540,35541],{"class":144},"    # 如果就是想指定用cpu用下方代码:\n",[74,35543,35544],{"class":76,"line":12324},[74,35545,35546],{"class":144},"    # device=\"cpu\"\n",[74,35548,35549],{"class":76,"line":12336},[74,35550,35551],{"class":144},"    # print(device)\n",[74,35553,35554],{"class":76,"line":13995},[74,35555,2363],{"emptyLinePlaceholder":2362},[74,35557,35558],{"class":76,"line":14020},[74,35559,35560],{"class":144},"    # 实例化模型\n",[74,35562,35563],{"class":76,"line":14043},[74,35564,35565],{"class":144},"    # 将模型放到设备中去运行\n",[74,35567,35568,35571,35573],{"class":76,"line":14067},[74,35569,35570],{"class":84},"    model",[74,35572,131],{"class":80},[74,35574,35575],{"class":84},"LeNet().to(device)\n",[74,35577,35578,35581,35584,35586,35588,35590,35592,35594],{"class":76,"line":14072},[74,35579,35580],{"class":134},"    print",[74,35582,35583],{"class":84},"(summary(model,(",[74,35585,303],{"class":134},[74,35587,464],{"class":84},[74,35589,987],{"class":134},[74,35591,464],{"class":84},[74,35593,987],{"class":134},[74,35595,35596],{"class":84},")))\n",[19,35598,35599],{},[1424,35600],{"alt":69,"src":35601},"\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",[19,35603,35604],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[27,35606,35607],{"start":94},[30,35608,35609],{},"训练",[19,35611,35612],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,35614,35615],{},"在训练之前可以将数据展示看一下",[64,35617,35619],{"className":34659,"code":35618,"language":34661,"meta":69,"style":69},"# 建立画图的函数，用于展示数据\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",[71,35620,35621,35626,35631,35643,35655,35668,35673,35685,35690,35702,35707,35719,35723,35727,35748,35760,35765,35786,35797,35801,35806,35824,35835,35840,35851,35856,35867,35871,35876,35891,35904,35909,35914,35927,35940,35953,35958,35962,35967,35987,36004,36024,36037,36050,36060,36075],{"__ignoreMap":69},[74,35622,35623],{"class":76,"line":77},[74,35624,35625],{"class":144},"# 建立画图的函数，用于展示数据\n",[74,35627,35628],{"class":76,"line":94},[74,35629,35630],{"class":144},"# torchvision中包含很多内置的数据集\n",[74,35632,35633,35635,35638,35640],{"class":76,"line":1141},[74,35634,35018],{"class":80},[74,35636,35637],{"class":84}," sklearn.externals.array_api_compat.torch ",[74,35639,34673],{"class":80},[74,35641,35642],{"class":84}," squeeze\n",[74,35644,35645,35647,35650,35652],{"class":76,"line":1156},[74,35646,35018],{"class":80},[74,35648,35649],{"class":84}," torchvision.datasets ",[74,35651,34673],{"class":80},[74,35653,35654],{"class":84}," FashionMNIST\n",[74,35656,35657,35659,35662,35665],{"class":76,"line":1162},[74,35658,34673],{"class":80},[74,35660,35661],{"class":84}," numpy ",[74,35663,35664],{"class":80},"as",[74,35666,35667],{"class":84}," np\n",[74,35669,35670],{"class":76,"line":1176},[74,35671,35672],{"class":144},"# 引入处理数据集的包\n",[74,35674,35675,35677,35680,35682],{"class":76,"line":1182},[74,35676,35018],{"class":80},[74,35678,35679],{"class":84}," torchvision ",[74,35681,34673],{"class":80},[74,35683,35684],{"class":84}," transforms\n",[74,35686,35687],{"class":76,"line":1273},[74,35688,35689],{"class":144},"# 从torch库中引入数据处理的包\n",[74,35691,35692,35694,35697,35699],{"class":76,"line":1279},[74,35693,34673],{"class":80},[74,35695,35696],{"class":84}," torch.utils.data ",[74,35698,35664],{"class":80},[74,35700,35701],{"class":84}," Data\n",[74,35703,35704],{"class":76,"line":1291},[74,35705,35706],{"class":144},"# 导入画图的库\n",[74,35708,35709,35711,35714,35716],{"class":76,"line":1574},[74,35710,34673],{"class":80},[74,35712,35713],{"class":84}," matplotlib.pyplot ",[74,35715,35664],{"class":80},[74,35717,35718],{"class":84}," plt\n",[74,35720,35721],{"class":76,"line":1579},[74,35722,2363],{"emptyLinePlaceholder":2362},[74,35724,35725],{"class":76,"line":1585},[74,35726,2363],{"emptyLinePlaceholder":2362},[74,35728,35729,35732,35734,35737,35740,35742,35745],{"class":76,"line":1590},[74,35730,35731],{"class":84},"train_data",[74,35733,131],{"class":80},[74,35735,35736],{"class":84},"FashionMNIST(",[74,35738,35739],{"class":9495},"root",[74,35741,131],{"class":80},[74,35743,35744],{"class":190},"'.\u002Fdata'",[74,35746,35747],{"class":84},",\n",[74,35749,35750,35753,35755,35758],{"class":76,"line":1604},[74,35751,35752],{"class":9495},"                        train",[74,35754,131],{"class":80},[74,35756,35757],{"class":134},"True",[74,35759,35747],{"class":84},[74,35761,35762],{"class":76,"line":1609},[74,35763,35764],{"class":144},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[74,35766,35767,35770,35772,35775,35778,35780,35783],{"class":76,"line":1615},[74,35768,35769],{"class":9495},"                        transform",[74,35771,131],{"class":80},[74,35773,35774],{"class":84},"transforms.Compose([transforms.Resize(",[74,35776,35777],{"class":9495},"size",[74,35779,131],{"class":80},[74,35781,35782],{"class":134},"224",[74,35784,35785],{"class":84},"),transforms.ToTensor()]),\n",[74,35787,35788,35791,35793,35795],{"class":76,"line":1636},[74,35789,35790],{"class":9495},"                        download",[74,35792,131],{"class":80},[74,35794,35757],{"class":134},[74,35796,91],{"class":84},[74,35798,35799],{"class":76,"line":1641},[74,35800,2363],{"emptyLinePlaceholder":2362},[74,35802,35803],{"class":76,"line":1655},[74,35804,35805],{"class":144},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[74,35807,35808,35811,35813,35816,35819,35821],{"class":76,"line":1660},[74,35809,35810],{"class":84},"train_loader",[74,35812,131],{"class":80},[74,35814,35815],{"class":84},"Data.DataLoader(",[74,35817,35818],{"class":9495},"dataset",[74,35820,131],{"class":80},[74,35822,35823],{"class":84},"train_data,\n",[74,35825,35826,35829,35831,35833],{"class":76,"line":1689},[74,35827,35828],{"class":9495},"                             batch_size",[74,35830,131],{"class":80},[74,35832,289],{"class":134},[74,35834,35747],{"class":84},[74,35836,35837],{"class":76,"line":1694},[74,35838,35839],{"class":144},"                             # 数据是否打乱\n",[74,35841,35842,35845,35847,35849],{"class":76,"line":1711},[74,35843,35844],{"class":9495},"                             shuffle",[74,35846,131],{"class":80},[74,35848,35757],{"class":134},[74,35850,35747],{"class":84},[74,35852,35853],{"class":76,"line":1716},[74,35854,35855],{"class":144},"                             # 规定加载数据的进程\n",[74,35857,35858,35861,35863,35865],{"class":76,"line":1721},[74,35859,35860],{"class":9495},"                             num_workers",[74,35862,131],{"class":80},[74,35864,277],{"class":134},[74,35866,91],{"class":84},[74,35868,35869],{"class":76,"line":1726},[74,35870,2363],{"emptyLinePlaceholder":2362},[74,35872,35873],{"class":76,"line":1740},[74,35874,35875],{"class":144},"# 获得一个batch的数据\n",[74,35877,35878,35880,35883,35885,35888],{"class":76,"line":1745},[74,35879,2988],{"class":80},[74,35881,35882],{"class":84}," step,(b_x,b_y) ",[74,35884,30324],{"class":80},[74,35886,35887],{"class":134}," enumerate",[74,35889,35890],{"class":84},"(train_loader):\n",[74,35892,35893,35895,35898,35900,35902],{"class":76,"line":2540},[74,35894,3064],{"class":80},[74,35896,35897],{"class":84}," step ",[74,35899,1046],{"class":80},[74,35901,4056],{"class":134},[74,35903,3702],{"class":84},[74,35905,35906],{"class":76,"line":2554},[74,35907,35908],{"class":80},"        break\n",[74,35910,35911],{"class":76,"line":2562},[74,35912,35913],{"class":144},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[74,35915,35916,35919,35921,35924],{"class":76,"line":2567},[74,35917,35918],{"class":84},"batch_x",[74,35920,131],{"class":80},[74,35922,35923],{"class":84},"b_x.squeeze().numpy()  ",[74,35925,35926],{"class":144},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[74,35928,35929,35932,35934,35937],{"class":76,"line":2573},[74,35930,35931],{"class":84},"batch_y",[74,35933,131],{"class":80},[74,35935,35936],{"class":84},"b_y.numpy()   ",[74,35938,35939],{"class":144},"#将张量转换成功numpy数组\n",[74,35941,35942,35945,35947,35950],{"class":76,"line":2579},[74,35943,35944],{"class":84},"class_label",[74,35946,131],{"class":80},[74,35948,35949],{"class":84},"train_data.classes  ",[74,35951,35952],{"class":144},"#训练集标签\n",[74,35954,35955],{"class":76,"line":2584},[74,35956,35957],{"class":144},"# print(class_label)\n",[74,35959,35960],{"class":76,"line":12227},[74,35961,2363],{"emptyLinePlaceholder":2362},[74,35963,35964],{"class":76,"line":12251},[74,35965,35966],{"class":144},"# 可视化一个batch的图像\n",[74,35968,35969,35972,35975,35977,35979,35981,35983,35985],{"class":76,"line":12256},[74,35970,35971],{"class":84},"plt.figure(",[74,35973,35974],{"class":9495},"figsize",[74,35976,131],{"class":80},[74,35978,85],{"class":84},[74,35980,584],{"class":134},[74,35982,464],{"class":84},[74,35984,405],{"class":134},[74,35986,34778],{"class":84},[74,35988,35989,35991,35994,35996,35999,36001],{"class":76,"line":12262},[74,35990,2988],{"class":80},[74,35992,35993],{"class":84}," ii ",[74,35995,30324],{"class":80},[74,35997,35998],{"class":84}," np.arange(",[74,36000,11637],{"class":134},[74,36002,36003],{"class":84},"(batch_y)):\n",[74,36005,36006,36009,36011,36013,36015,36018,36020,36022],{"class":76,"line":12289},[74,36007,36008],{"class":84},"    plt.subplot(",[74,36010,379],{"class":134},[74,36012,464],{"class":84},[74,36014,687],{"class":134},[74,36016,36017],{"class":84},",ii ",[74,36019,567],{"class":80},[74,36021,29399],{"class":134},[74,36023,91],{"class":84},[74,36025,36026,36029,36032,36034],{"class":76,"line":12294},[74,36027,36028],{"class":84},"    plt.imshow(batch_x[ii,:,:],",[74,36030,36031],{"class":9495},"cmap",[74,36033,131],{"class":80},[74,36035,36036],{"class":84},"plt.cm.gray)\n",[74,36038,36039,36042,36044,36046,36048],{"class":76,"line":12300},[74,36040,36041],{"class":84},"    plt.title(class_label[batch_y[ii]],",[74,36043,35777],{"class":9495},[74,36045,131],{"class":80},[74,36047,532],{"class":134},[74,36049,91],{"class":84},[74,36051,36052,36055,36058],{"class":76,"line":12312},[74,36053,36054],{"class":84},"    plt.axis(",[74,36056,36057],{"class":190},"\"off\"",[74,36059,91],{"class":84},[74,36061,36062,36065,36068,36070,36073],{"class":76,"line":12324},[74,36063,36064],{"class":84},"    plt.subplots_adjust(",[74,36066,36067],{"class":9495},"wspace",[74,36069,131],{"class":80},[74,36071,36072],{"class":134},"0.05",[74,36074,91],{"class":84},[74,36076,36077],{"class":76,"line":12336},[74,36078,36079],{"class":84},"plt.show()\n",[19,36081,36082],{},"用matplotlib进行展示的过程可以后续再补",[19,36084,36085],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,36087,36088],{},"训练次数就是按照批次过整个训练集数据的次数",[19,36090,36091],{},"模型训练：",[64,36093,36095],{"className":34659,"code":36094,"language":34661,"meta":69,"style":69},"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",[71,36096,36097,36104,36111,36115,36127,36133,36144,36154,36164,36174,36184,36189,36201,36211,36215,36219,36224,36235,36248,36259,36276,36287,36326,36342,36354,36365,36370,36381,36397,36408,36419,36430,36437,36441,36446,36451,36455,36460,36470,36491,36495,36499,36504,36509,36514,36534,36538,36543,36553,36557,36562,36571,36576,36581,36586,36596,36600,36604,36609,36614,36624,36629,36639,36644,36653,36658,36667,36672,36681,36685,36690,36700,36704,36708,36713,36728,36756,36771,36775,36780,36785,36794,36799,36808,36813,36822,36827,36836,36841,36850,36855,36864,36869,36882,36887,36897,36902,36912,36918,36924,36930,36936,36947,36953,36973,36979,36990,36996,37002,37008,37014,37020,37026,37032,37052,37058,37074,37080,37094,37100,37115,37121,37130,37136,37145,37151,37157,37166,37172,37183,37189,37208,37214,37225,37231,37251,37267,37273,37287,37293,37299,37310,37316,37322,37332,37338,37349,37355,37365,37370,37376,37425,37472,37477,37483,37502,37508,37528,37534,37540,37550,37555,37561,37577,37622,37628,37634,37640,37651,37657,37663,37669,37687,37701,37710,37719,37728,37737,37743,37749,37757,37762,37768,37779,37785,37805,37811,37817,37823,37840,37846,37852,37858,37864,37870,37897,37921,37927,37933,37939,37950,37961,37967,37984,38007,38030,38036,38041,38050,38060,38066,38071,38077,38090,38096,38107,38118,38137],{"__ignoreMap":69},[74,36098,36099,36101],{"class":76,"line":77},[74,36100,34673],{"class":80},[74,36102,36103],{"class":84}," copy\n",[74,36105,36106,36108],{"class":76,"line":94},[74,36107,34673],{"class":80},[74,36109,36110],{"class":84}," time\n",[74,36112,36113],{"class":76,"line":1141},[74,36114,2363],{"emptyLinePlaceholder":2362},[74,36116,36117,36119,36122,36124],{"class":76,"line":1156},[74,36118,34673],{"class":80},[74,36120,36121],{"class":84}," pandas ",[74,36123,35664],{"class":80},[74,36125,36126],{"class":84}," pd\n",[74,36128,36129,36131],{"class":76,"line":1162},[74,36130,34673],{"class":80},[74,36132,34676],{"class":84},[74,36134,36135,36137,36139,36141],{"class":76,"line":1176},[74,36136,35018],{"class":80},[74,36138,35696],{"class":84},[74,36140,34673],{"class":80},[74,36142,36143],{"class":84}," Dataset\n",[74,36145,36146,36148,36150,36152],{"class":76,"line":1182},[74,36147,35018],{"class":80},[74,36149,35649],{"class":84},[74,36151,34673],{"class":80},[74,36153,35654],{"class":84},[74,36155,36156,36158,36160,36162],{"class":76,"line":1273},[74,36157,35018],{"class":80},[74,36159,35679],{"class":84},[74,36161,34673],{"class":80},[74,36163,35684],{"class":84},[74,36165,36166,36168,36170,36172],{"class":76,"line":1279},[74,36167,34673],{"class":80},[74,36169,35696],{"class":84},[74,36171,35664],{"class":80},[74,36173,35701],{"class":84},[74,36175,36176,36178,36180,36182],{"class":76,"line":1291},[74,36177,34673],{"class":80},[74,36179,35713],{"class":84},[74,36181,35664],{"class":80},[74,36183,35718],{"class":84},[74,36185,36186],{"class":76,"line":1574},[74,36187,36188],{"class":144},"# 导入模型\n",[74,36190,36191,36193,36196,36198],{"class":76,"line":1579},[74,36192,35018],{"class":80},[74,36194,36195],{"class":84}," model ",[74,36197,34673],{"class":80},[74,36199,36200],{"class":84}," LeNet\n",[74,36202,36203,36205,36207,36209],{"class":76,"line":1585},[74,36204,35018],{"class":80},[74,36206,35021],{"class":84},[74,36208,34673],{"class":80},[74,36210,35026],{"class":84},[74,36212,36213],{"class":76,"line":1590},[74,36214,2363],{"emptyLinePlaceholder":2362},[74,36216,36217],{"class":76,"line":1604},[74,36218,2363],{"emptyLinePlaceholder":2362},[74,36220,36221],{"class":76,"line":1609},[74,36222,36223],{"class":144},"# 处理训练集与验证集函数--->划分数据集\n",[74,36225,36226,36229,36232],{"class":76,"line":1615},[74,36227,36228],{"class":80},"def",[74,36230,36231],{"class":1925}," train_val_data_process",[74,36233,36234],{"class":84},"():\n",[74,36236,36237,36240,36242,36244,36246],{"class":76,"line":1636},[74,36238,36239],{"class":84},"    train_data",[74,36241,131],{"class":80},[74,36243,35736],{"class":84},[74,36245,35744],{"class":190},[74,36247,35747],{"class":84},[74,36249,36250,36253,36255,36257],{"class":76,"line":1641},[74,36251,36252],{"class":9495},"                            train",[74,36254,131],{"class":80},[74,36256,35757],{"class":134},[74,36258,35747],{"class":84},[74,36260,36261,36264,36266,36268,36270,36272,36274],{"class":76,"line":1655},[74,36262,36263],{"class":9495},"                            transform",[74,36265,131],{"class":80},[74,36267,35774],{"class":84},[74,36269,35777],{"class":9495},[74,36271,131],{"class":80},[74,36273,987],{"class":134},[74,36275,35785],{"class":84},[74,36277,36278,36281,36283,36285],{"class":76,"line":1660},[74,36279,36280],{"class":9495},"                            download",[74,36282,131],{"class":80},[74,36284,35757],{"class":134},[74,36286,91],{"class":84},[74,36288,36289,36292,36294,36297,36300,36302,36305,36307,36309,36312,36314,36316,36319,36321,36323],{"class":76,"line":1689},[74,36290,36291],{"class":84},"    train_data,val_data",[74,36293,131],{"class":80},[74,36295,36296],{"class":84},"Data.random_split(train_data,[",[74,36298,36299],{"class":134},"round",[74,36301,85],{"class":84},[74,36303,36304],{"class":134},"0.8",[74,36306,541],{"class":80},[74,36308,11637],{"class":134},[74,36310,36311],{"class":84},"(train_data)),",[74,36313,36299],{"class":134},[74,36315,85],{"class":84},[74,36317,36318],{"class":134},"0.2",[74,36320,541],{"class":80},[74,36322,11637],{"class":134},[74,36324,36325],{"class":84},"(train_data))])\n",[74,36327,36328,36331,36333,36336,36338,36340],{"class":76,"line":1694},[74,36329,36330],{"class":84},"    train_dataloader ",[74,36332,131],{"class":80},[74,36334,36335],{"class":84}," Data.DataLoader(",[74,36337,35818],{"class":9495},[74,36339,131],{"class":80},[74,36341,35823],{"class":84},[74,36343,36344,36347,36349,36352],{"class":76,"line":1711},[74,36345,36346],{"class":9495},"                                       batch_size",[74,36348,131],{"class":80},[74,36350,36351],{"class":134},"128",[74,36353,35747],{"class":84},[74,36355,36356,36359,36361,36363],{"class":76,"line":1716},[74,36357,36358],{"class":9495},"                                       shuffle",[74,36360,131],{"class":80},[74,36362,35757],{"class":134},[74,36364,35747],{"class":84},[74,36366,36367],{"class":76,"line":1721},[74,36368,36369],{"class":144},"                                       # 规定8个进程\n",[74,36371,36372,36375,36377,36379],{"class":76,"line":1726},[74,36373,36374],{"class":9495},"                                       num_workers",[74,36376,131],{"class":80},[74,36378,481],{"class":134},[74,36380,91],{"class":84},[74,36382,36383,36386,36388,36390,36392,36394],{"class":76,"line":1740},[74,36384,36385],{"class":84},"    val_dataloader",[74,36387,131],{"class":80},[74,36389,35815],{"class":84},[74,36391,35818],{"class":9495},[74,36393,131],{"class":80},[74,36395,36396],{"class":84},"val_data,\n",[74,36398,36399,36402,36404,36406],{"class":76,"line":1745},[74,36400,36401],{"class":9495},"                                   batch_size",[74,36403,131],{"class":80},[74,36405,36351],{"class":134},[74,36407,35747],{"class":84},[74,36409,36410,36413,36415,36417],{"class":76,"line":2540},[74,36411,36412],{"class":9495},"                                   shuffle",[74,36414,131],{"class":80},[74,36416,35757],{"class":134},[74,36418,35747],{"class":84},[74,36420,36421,36424,36426,36428],{"class":76,"line":2554},[74,36422,36423],{"class":9495},"                                   num_workers",[74,36425,131],{"class":80},[74,36427,481],{"class":134},[74,36429,91],{"class":84},[74,36431,36432,36434],{"class":76,"line":2562},[74,36433,4053],{"class":80},[74,36435,36436],{"class":84}," train_dataloader,val_dataloader\n",[74,36438,36439],{"class":76,"line":2567},[74,36440,2363],{"emptyLinePlaceholder":2362},[74,36442,36443],{"class":76,"line":2573},[74,36444,36445],{"class":144},"# 验证是否出错\n",[74,36447,36448],{"class":76,"line":2579},[74,36449,36450],{"class":144},"# train_val_data_process()\n",[74,36452,36453],{"class":76,"line":2584},[74,36454,2363],{"emptyLinePlaceholder":2362},[74,36456,36457],{"class":76,"line":12227},[74,36458,36459],{"class":144},"# 定义模型训练函数\n",[74,36461,36462,36464,36467],{"class":76,"line":12251},[74,36463,36228],{"class":80},[74,36465,36466],{"class":1925}," train_model_process",[74,36468,36469],{"class":84},"(model,train_dataloader,val_dataloader,num_epochs):\n",[74,36471,36472,36474,36476,36478,36480,36482,36484,36486,36489],{"class":76,"line":12256},[74,36473,35518],{"class":84},[74,36475,131],{"class":80},[74,36477,34732],{"class":84},[74,36479,35525],{"class":190},[74,36481,1666],{"class":80},[74,36483,35530],{"class":84},[74,36485,1663],{"class":80},[74,36487,36488],{"class":190}," 'cpu'",[74,36490,91],{"class":84},[74,36492,36493],{"class":76,"line":12262},[74,36494,2363],{"emptyLinePlaceholder":2362},[74,36496,36497],{"class":76,"line":12289},[74,36498,2363],{"emptyLinePlaceholder":2362},[74,36500,36501],{"class":76,"line":12294},[74,36502,36503],{"class":144},"    # 定义优化器\n",[74,36505,36506],{"class":76,"line":12300},[74,36507,36508],{"class":144},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[74,36510,36511],{"class":76,"line":12312},[74,36512,36513],{"class":144},"    # lr为学习率\n",[74,36515,36516,36519,36521,36524,36527,36529,36532],{"class":76,"line":12324},[74,36517,36518],{"class":84},"    optimizer",[74,36520,131],{"class":80},[74,36522,36523],{"class":84},"torch.optim.Adam(model.parameters(),",[74,36525,36526],{"class":9495},"lr",[74,36528,131],{"class":80},[74,36530,36531],{"class":134},"0.001",[74,36533,91],{"class":84},[74,36535,36536],{"class":76,"line":12336},[74,36537,2363],{"emptyLinePlaceholder":2362},[74,36539,36540],{"class":76,"line":13995},[74,36541,36542],{"class":144},"    # 定义损失函数使用交叉熵损失函数\n",[74,36544,36545,36548,36550],{"class":76,"line":14020},[74,36546,36547],{"class":84},"    criterion",[74,36549,131],{"class":80},[74,36551,36552],{"class":84},"nn.CrossEntropyLoss()\n",[74,36554,36555],{"class":76,"line":14043},[74,36556,2363],{"emptyLinePlaceholder":2362},[74,36558,36559],{"class":76,"line":14067},[74,36560,36561],{"class":144},"    # 将模型放到GPU中进行训练\n",[74,36563,36564,36566,36568],{"class":76,"line":14072},[74,36565,35570],{"class":84},[74,36567,131],{"class":80},[74,36569,36570],{"class":84},"model.to(device)\n",[74,36572,36573],{"class":76,"line":14077},[74,36574,36575],{"class":144},"    # 复制当前模型的参数\n",[74,36577,36578],{"class":76,"line":14082},[74,36579,36580],{"class":144},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[74,36582,36583],{"class":76,"line":14091},[74,36584,36585],{"class":144},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[74,36587,36588,36591,36593],{"class":76,"line":14096},[74,36589,36590],{"class":84},"    best_model_wts",[74,36592,131],{"class":80},[74,36594,36595],{"class":84},"copy.deepcopy(model.state_dict())\n",[74,36597,36598],{"class":76,"line":14102},[74,36599,2363],{"emptyLinePlaceholder":2362},[74,36601,36602],{"class":76,"line":14123},[74,36603,2363],{"emptyLinePlaceholder":2362},[74,36605,36606],{"class":76,"line":14129},[74,36607,36608],{"class":144},"    # 初始化参数\n",[74,36610,36611],{"class":76,"line":14143},[74,36612,36613],{"class":144},"    # 最高准确度\n",[74,36615,36616,36619,36621],{"class":76,"line":14149},[74,36617,36618],{"class":84},"    best_acc",[74,36620,131],{"class":80},[74,36622,36623],{"class":134},"0.0\n",[74,36625,36626],{"class":76,"line":14176},[74,36627,36628],{"class":144},"    # 训练集损失列表\n",[74,36630,36631,36634,36636],{"class":76,"line":14185},[74,36632,36633],{"class":84},"    train_loss_all",[74,36635,131],{"class":80},[74,36637,36638],{"class":84},"[]\n",[74,36640,36641],{"class":76,"line":14191},[74,36642,36643],{"class":144},"    # 验证集函数列表\n",[74,36645,36646,36649,36651],{"class":76,"line":14199},[74,36647,36648],{"class":84},"    val_loss_all",[74,36650,131],{"class":80},[74,36652,36638],{"class":84},[74,36654,36655],{"class":76,"line":14204},[74,36656,36657],{"class":144},"    # 训练集准确度列表\n",[74,36659,36660,36663,36665],{"class":76,"line":20883},[74,36661,36662],{"class":84},"    train_acc_all",[74,36664,131],{"class":80},[74,36666,36638],{"class":84},[74,36668,36669],{"class":76,"line":20889},[74,36670,36671],{"class":144},"    # 验证集准确度列表\n",[74,36673,36674,36677,36679],{"class":76,"line":20912},[74,36675,36676],{"class":84},"    val_acc_all",[74,36678,131],{"class":80},[74,36680,36638],{"class":84},[74,36682,36683],{"class":76,"line":20918},[74,36684,2363],{"emptyLinePlaceholder":2362},[74,36686,36687],{"class":76,"line":20941},[74,36688,36689],{"class":144},"    # 保存当前时间--->方便看每轮训练的时间\n",[74,36691,36692,36695,36697],{"class":76,"line":20955},[74,36693,36694],{"class":84},"    since",[74,36696,131],{"class":80},[74,36698,36699],{"class":84},"time.time()\n",[74,36701,36702],{"class":76,"line":20975},[74,36703,2363],{"emptyLinePlaceholder":2362},[74,36705,36706],{"class":76,"line":20981},[74,36707,2363],{"emptyLinePlaceholder":2362},[74,36709,36710],{"class":76,"line":20992},[74,36711,36712],{"class":144},"    # 准备工作完成--->开始训练模型\n",[74,36714,36715,36717,36720,36722,36725],{"class":76,"line":21015},[74,36716,3164],{"class":80},[74,36718,36719],{"class":84}," epoch ",[74,36721,30324],{"class":80},[74,36723,36724],{"class":134}," range",[74,36726,36727],{"class":84},"(num_epochs):\n",[74,36729,36730,36733,36735,36738,36741,36743,36745,36747,36750,36752,36754],{"class":76,"line":21037},[74,36731,36732],{"class":134},"        print",[74,36734,85],{"class":84},[74,36736,36737],{"class":190},"\"Epoch ",[74,36739,36740],{"class":134},"{}",[74,36742,670],{"class":190},[74,36744,36740],{"class":134},[74,36746,337],{"class":190},[74,36748,36749],{"class":84},".format(epoch,num_epochs",[74,36751,618],{"class":80},[74,36753,303],{"class":134},[74,36755,34778],{"class":84},[74,36757,36758,36760,36762,36765,36767,36769],{"class":76,"line":21042},[74,36759,36732],{"class":134},[74,36761,85],{"class":84},[74,36763,36764],{"class":190},"\"-\"",[74,36766,541],{"class":80},[74,36768,532],{"class":134},[74,36770,91],{"class":84},[74,36772,36773],{"class":76,"line":21048},[74,36774,2363],{"emptyLinePlaceholder":2362},[74,36776,36777],{"class":76,"line":21062},[74,36778,36779],{"class":144},"        # 初始化参数\n",[74,36781,36782],{"class":76,"line":21075},[74,36783,36784],{"class":144},"        # 训练集损失函数\n",[74,36786,36787,36790,36792],{"class":76,"line":21080},[74,36788,36789],{"class":84},"        train_loss",[74,36791,131],{"class":80},[74,36793,36623],{"class":134},[74,36795,36796],{"class":76,"line":21094},[74,36797,36798],{"class":144},"        # 训练集准确度\n",[74,36800,36801,36804,36806],{"class":76,"line":21099},[74,36802,36803],{"class":84},"        train_corrects",[74,36805,131],{"class":80},[74,36807,3048],{"class":134},[74,36809,36810],{"class":76,"line":21105},[74,36811,36812],{"class":144},"        # 验证集损失函数\n",[74,36814,36815,36818,36820],{"class":76,"line":21110},[74,36816,36817],{"class":84},"        val_loss",[74,36819,131],{"class":80},[74,36821,36623],{"class":134},[74,36823,36824],{"class":76,"line":21124},[74,36825,36826],{"class":144},"        # 验证集准确度\n",[74,36828,36829,36832,36834],{"class":76,"line":21129},[74,36830,36831],{"class":84},"        val_corrects",[74,36833,131],{"class":80},[74,36835,3048],{"class":134},[74,36837,36838],{"class":76,"line":21134},[74,36839,36840],{"class":144},"        # 训练集样本数量\n",[74,36842,36843,36846,36848],{"class":76,"line":21148},[74,36844,36845],{"class":84},"        train_num",[74,36847,131],{"class":80},[74,36849,3048],{"class":134},[74,36851,36852],{"class":76,"line":21160},[74,36853,36854],{"class":144},"        # 验证集样本数量\n",[74,36856,36857,36860,36862],{"class":76,"line":21165},[74,36858,36859],{"class":84},"        val_num",[74,36861,131],{"class":80},[74,36863,3048],{"class":134},[74,36865,36866],{"class":76,"line":21178},[74,36867,36868],{"class":144},"        # 将数据放到设备,并开始训练\n",[74,36870,36871,36873,36875,36877,36879],{"class":76,"line":21183},[74,36872,3366],{"class":80},[74,36874,35882],{"class":84},[74,36876,30324],{"class":80},[74,36878,35887],{"class":134},[74,36880,36881],{"class":84},"(train_dataloader):\n",[74,36883,36884],{"class":76,"line":21188},[74,36885,36886],{"class":144},"            # 将特征放入到训练设备\n",[74,36888,36889,36892,36894],{"class":76,"line":21193},[74,36890,36891],{"class":84},"            b_x",[74,36893,131],{"class":80},[74,36895,36896],{"class":84},"b_x.to(device)\n",[74,36898,36899],{"class":76,"line":21206},[74,36900,36901],{"class":144},"            # 将标签放入到训练设备当中\n",[74,36903,36904,36907,36909],{"class":76,"line":21211},[74,36905,36906],{"class":84},"            b_y",[74,36908,131],{"class":80},[74,36910,36911],{"class":84},"b_y.to(device)\n",[74,36913,36915],{"class":76,"line":36914},98,[74,36916,36917],{"class":144},"            # 设置模型为训练模式\n",[74,36919,36921],{"class":76,"line":36920},99,[74,36922,36923],{"class":84},"            model.train()\n",[74,36925,36927],{"class":76,"line":36926},100,[74,36928,36929],{"class":144},"            # 将数据放到模型当中,开始前向传播\n",[74,36931,36933],{"class":76,"line":36932},101,[74,36934,36935],{"class":144},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[74,36937,36939,36942,36944],{"class":76,"line":36938},102,[74,36940,36941],{"class":84},"            output",[74,36943,131],{"class":80},[74,36945,36946],{"class":84},"model(b_x)\n",[74,36948,36950],{"class":76,"line":36949},103,[74,36951,36952],{"class":144},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[74,36954,36956,36959,36961,36964,36967,36969,36971],{"class":76,"line":36955},104,[74,36957,36958],{"class":84},"            pre_lab",[74,36960,131],{"class":80},[74,36962,36963],{"class":84},"torch.argmax(output,",[74,36965,36966],{"class":9495},"dim",[74,36968,131],{"class":80},[74,36970,303],{"class":134},[74,36972,91],{"class":84},[74,36974,36976],{"class":76,"line":36975},105,[74,36977,36978],{"class":144},"            # 计算每一个batch的损失函数\n",[74,36980,36982,36985,36987],{"class":76,"line":36981},106,[74,36983,36984],{"class":84},"            loss",[74,36986,131],{"class":80},[74,36988,36989],{"class":84},"criterion(output,b_y)\n",[74,36991,36993],{"class":76,"line":36992},107,[74,36994,36995],{"class":144},"            # 将梯度初始化为0\n",[74,36997,36999],{"class":76,"line":36998},108,[74,37000,37001],{"class":84},"            optimizer.zero_grad()\n",[74,37003,37005],{"class":76,"line":37004},109,[74,37006,37007],{"class":144},"            # 梯度置为0后再进行反向传播\n",[74,37009,37011],{"class":76,"line":37010},110,[74,37012,37013],{"class":84},"            loss.backward()\n",[74,37015,37017],{"class":76,"line":37016},111,[74,37018,37019],{"class":144},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[74,37021,37023],{"class":76,"line":37022},112,[74,37024,37025],{"class":84},"            optimizer.step()\n",[74,37027,37029],{"class":76,"line":37028},113,[74,37030,37031],{"class":144},"            # loss.item()指的是batch的平均损失\n",[74,37033,37035,37038,37040,37043,37045,37048,37050],{"class":76,"line":37034},114,[74,37036,37037],{"class":84},"            train_loss",[74,37039,13756],{"class":80},[74,37041,37042],{"class":84},"loss.item()",[74,37044,541],{"class":80},[74,37046,37047],{"class":84},"b_x.size(",[74,37049,277],{"class":134},[74,37051,91],{"class":84},[74,37053,37055],{"class":76,"line":37054},115,[74,37056,37057],{"class":144},"            # 计算每个批次中正确预测的数量\n",[74,37059,37061,37064,37066,37069,37071],{"class":76,"line":37060},116,[74,37062,37063],{"class":84},"            train_corrects",[74,37065,13756],{"class":80},[74,37067,37068],{"class":84},"torch.sum(pre_lab",[74,37070,2912],{"class":80},[74,37072,37073],{"class":84},"b_y.data)\n",[74,37075,37077],{"class":76,"line":37076},117,[74,37078,37079],{"class":144},"            # 计算目前为止一共处理了多少样本\n",[74,37081,37083,37086,37088,37090,37092],{"class":76,"line":37082},118,[74,37084,37085],{"class":84},"            train_num",[74,37087,13756],{"class":80},[74,37089,37047],{"class":84},[74,37091,277],{"class":134},[74,37093,91],{"class":84},[74,37095,37097],{"class":76,"line":37096},119,[74,37098,37099],{"class":144},"        # 验证数据\n",[74,37101,37103,37105,37108,37110,37112],{"class":76,"line":37102},120,[74,37104,3366],{"class":80},[74,37106,37107],{"class":84}," step ,(b_x,b_y) ",[74,37109,30324],{"class":80},[74,37111,35887],{"class":134},[74,37113,37114],{"class":84},"(val_dataloader):\n",[74,37116,37118],{"class":76,"line":37117},121,[74,37119,37120],{"class":144},"            # 将特征放到验证设备当中\n",[74,37122,37124,37126,37128],{"class":76,"line":37123},122,[74,37125,36891],{"class":84},[74,37127,131],{"class":80},[74,37129,36896],{"class":84},[74,37131,37133],{"class":76,"line":37132},123,[74,37134,37135],{"class":144},"            # 将标签放到放到训练设备当中\n",[74,37137,37139,37141,37143],{"class":76,"line":37138},124,[74,37140,36906],{"class":84},[74,37142,131],{"class":80},[74,37144,36911],{"class":84},[74,37146,37148],{"class":76,"line":37147},125,[74,37149,37150],{"class":144},"            # 开启验证模式，设置模型为评估模式\n",[74,37152,37154],{"class":76,"line":37153},126,[74,37155,37156],{"class":84},"            model.eval()\n",[74,37158,37160,37163],{"class":76,"line":37159},127,[74,37161,37162],{"class":80},"            with",[74,37164,37165],{"class":84}," torch.no_grad():\n",[74,37167,37169],{"class":76,"line":37168},128,[74,37170,37171],{"class":144},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[74,37173,37175,37178,37180],{"class":76,"line":37174},129,[74,37176,37177],{"class":84},"                output ",[74,37179,131],{"class":80},[74,37181,37182],{"class":84}," model(b_x)\n",[74,37184,37186],{"class":76,"line":37185},130,[74,37187,37188],{"class":144},"                # 查找每一行中最大值对应的下标\n",[74,37190,37192,37195,37197,37200,37202,37204,37206],{"class":76,"line":37191},131,[74,37193,37194],{"class":84},"                pre_lab ",[74,37196,131],{"class":80},[74,37198,37199],{"class":84}," torch.argmax(output, ",[74,37201,36966],{"class":9495},[74,37203,131],{"class":80},[74,37205,303],{"class":134},[74,37207,91],{"class":84},[74,37209,37211],{"class":76,"line":37210},132,[74,37212,37213],{"class":144},"                # 计算验证集上的当前 batch 损失\n",[74,37215,37217,37220,37222],{"class":76,"line":37216},133,[74,37218,37219],{"class":84},"                val_batch_loss ",[74,37221,131],{"class":80},[74,37223,37224],{"class":84}," criterion(output, b_y)\n",[74,37226,37228],{"class":76,"line":37227},134,[74,37229,37230],{"class":144},"                # 对损失函数进行累加（按样本数加权）\n",[74,37232,37234,37237,37239,37242,37244,37247,37249],{"class":76,"line":37233},135,[74,37235,37236],{"class":84},"                val_loss ",[74,37238,13756],{"class":80},[74,37240,37241],{"class":84}," val_batch_loss.item() ",[74,37243,541],{"class":80},[74,37245,37246],{"class":84}," b_x.size(",[74,37248,277],{"class":134},[74,37250,91],{"class":84},[74,37252,37254,37257,37259,37262,37264],{"class":76,"line":37253},136,[74,37255,37256],{"class":84},"                val_corrects ",[74,37258,13756],{"class":80},[74,37260,37261],{"class":84}," torch.sum(pre_lab ",[74,37263,2912],{"class":80},[74,37265,37266],{"class":84}," b_y.data)\n",[74,37268,37270],{"class":76,"line":37269},137,[74,37271,37272],{"class":144},"                # 当前用于验证的样本数量\n",[74,37274,37276,37279,37281,37283,37285],{"class":76,"line":37275},138,[74,37277,37278],{"class":84},"            val_num ",[74,37280,13756],{"class":80},[74,37282,37246],{"class":84},[74,37284,277],{"class":134},[74,37286,91],{"class":84},[74,37288,37290],{"class":76,"line":37289},139,[74,37291,37292],{"class":144},"        # 计算并保存每一次迭代的loss值和准确率\n",[74,37294,37296],{"class":76,"line":37295},140,[74,37297,37298],{"class":144},"        # 计算并保存训练集的loss值\n",[74,37300,37302,37305,37307],{"class":76,"line":37301},141,[74,37303,37304],{"class":84},"        train_loss_all.append(train_loss",[74,37306,670],{"class":80},[74,37308,37309],{"class":84},"train_num)\n",[74,37311,37313],{"class":76,"line":37312},142,[74,37314,37315],{"class":144},"        # 取双精度\n",[74,37317,37319],{"class":76,"line":37318},143,[74,37320,37321],{"class":144},"        # 计算并保存训练集的准确率\n",[74,37323,37325,37328,37330],{"class":76,"line":37324},144,[74,37326,37327],{"class":84},"        train_acc_all.append(train_corrects.double().item()",[74,37329,670],{"class":80},[74,37331,37309],{"class":84},[74,37333,37335],{"class":76,"line":37334},145,[74,37336,37337],{"class":144},"        # 计算并保存验证集的loss值\n",[74,37339,37341,37344,37346],{"class":76,"line":37340},146,[74,37342,37343],{"class":84},"        val_loss_all.append(val_loss",[74,37345,670],{"class":80},[74,37347,37348],{"class":84},"val_num)\n",[74,37350,37352],{"class":76,"line":37351},147,[74,37353,37354],{"class":144},"        # 计算并保存验证集的准确率\n",[74,37356,37358,37361,37363],{"class":76,"line":37357},148,[74,37359,37360],{"class":84},"        val_acc_all.append(val_corrects.double().item()",[74,37362,670],{"class":80},[74,37364,37348],{"class":84},[74,37366,37368],{"class":76,"line":37367},149,[74,37369,2363],{"emptyLinePlaceholder":2362},[74,37371,37373],{"class":76,"line":37372},150,[74,37374,37375],{"class":144},"        # 打印训练一轮的loss值和准确率\n",[74,37377,37379,37381,37383,37385,37387,37390,37392,37395,37397,37400,37402,37404,37406,37408,37411,37413,37415,37418,37420,37422],{"class":76,"line":37378},151,[74,37380,36732],{"class":134},[74,37382,85],{"class":84},[74,37384,3555],{"class":190},[74,37386,36740],{"class":134},[74,37388,37389],{"class":190},"train loss:",[74,37391,982],{"class":134},[74,37393,37394],{"class":80},":.4f",[74,37396,1032],{"class":134},[74,37398,37399],{"class":190}," train acc:",[74,37401,982],{"class":134},[74,37403,37394],{"class":80},[74,37405,1032],{"class":134},[74,37407,3555],{"class":190},[74,37409,37410],{"class":84},".format(epoch,train_loss_all[",[74,37412,618],{"class":80},[74,37414,303],{"class":134},[74,37416,37417],{"class":84},"],train_acc_all[",[74,37419,618],{"class":80},[74,37421,303],{"class":134},[74,37423,37424],{"class":84},"]))\n",[74,37426,37428,37430,37432,37434,37436,37439,37441,37443,37445,37448,37450,37452,37454,37456,37459,37461,37463,37466,37468,37470],{"class":76,"line":37427},152,[74,37429,36732],{"class":134},[74,37431,85],{"class":84},[74,37433,3555],{"class":190},[74,37435,36740],{"class":134},[74,37437,37438],{"class":190},"val loss:",[74,37440,982],{"class":134},[74,37442,37394],{"class":80},[74,37444,1032],{"class":134},[74,37446,37447],{"class":190}," val acc:",[74,37449,982],{"class":134},[74,37451,37394],{"class":80},[74,37453,1032],{"class":134},[74,37455,3555],{"class":190},[74,37457,37458],{"class":84},".format(epoch,val_loss_all[",[74,37460,618],{"class":80},[74,37462,303],{"class":134},[74,37464,37465],{"class":84},"],val_acc_all[",[74,37467,618],{"class":80},[74,37469,303],{"class":134},[74,37471,37424],{"class":84},[74,37473,37475],{"class":76,"line":37474},153,[74,37476,2363],{"emptyLinePlaceholder":2362},[74,37478,37480],{"class":76,"line":37479},154,[74,37481,37482],{"class":144},"        # 判断准确度--->保存最优模型\n",[74,37484,37486,37488,37491,37493,37495,37497,37499],{"class":76,"line":37485},155,[74,37487,2460],{"class":80},[74,37489,37490],{"class":84}," val_acc_all[",[74,37492,618],{"class":80},[74,37494,303],{"class":134},[74,37496,1026],{"class":84},[74,37498,1046],{"class":80},[74,37500,37501],{"class":84},"best_acc:\n",[74,37503,37505],{"class":76,"line":37504},156,[74,37506,37507],{"class":144},"            # 保存当前模型准确度\n",[74,37509,37511,37514,37516,37518,37521,37523,37525],{"class":76,"line":37510},157,[74,37512,37513],{"class":84},"            best_acc:",[74,37515,125],{"class":134},[74,37517,131],{"class":80},[74,37519,37520],{"class":84},"val_acc_all[",[74,37522,618],{"class":80},[74,37524,303],{"class":134},[74,37526,37527],{"class":84},"]\n",[74,37529,37531],{"class":76,"line":37530},158,[74,37532,37533],{"class":144},"            # 保存当前的准确度\n",[74,37535,37537],{"class":76,"line":37536},159,[74,37538,37539],{"class":144},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[74,37541,37543,37546,37548],{"class":76,"line":37542},160,[74,37544,37545],{"class":84},"            best_model_wts",[74,37547,131],{"class":80},[74,37549,36595],{"class":84},[74,37551,37553],{"class":76,"line":37552},161,[74,37554,2363],{"emptyLinePlaceholder":2362},[74,37556,37558],{"class":76,"line":37557},162,[74,37559,37560],{"class":144},"        # 计算耗时\n",[74,37562,37564,37567,37569,37572,37574],{"class":76,"line":37563},163,[74,37565,37566],{"class":84},"        time_use",[74,37568,131],{"class":80},[74,37570,37571],{"class":84},"time.time()",[74,37573,618],{"class":80},[74,37575,37576],{"class":84},"since\n",[74,37578,37580,37582,37584,37587,37589,37592,37594,37596,37598,37600,37602,37605,37608,37611,37613,37616,37618,37620],{"class":76,"line":37579},164,[74,37581,36732],{"class":134},[74,37583,85],{"class":84},[74,37585,37586],{"class":190},"'训练和验证耗费的时间",[74,37588,982],{"class":134},[74,37590,37591],{"class":80},":.0f",[74,37593,1032],{"class":134},[74,37595,630],{"class":190},[74,37597,982],{"class":134},[74,37599,37591],{"class":80},[74,37601,1032],{"class":134},[74,37603,37604],{"class":190},"s'",[74,37606,37607],{"class":84},".format(time_use",[74,37609,37610],{"class":80},"\u002F\u002F",[74,37612,993],{"class":134},[74,37614,37615],{"class":84},",time_use",[74,37617,414],{"class":80},[74,37619,993],{"class":134},[74,37621,34778],{"class":84},[74,37623,37625],{"class":76,"line":37624},165,[74,37626,37627],{"class":144},"    # 选择最优参数\n",[74,37629,37631],{"class":76,"line":37630},166,[74,37632,37633],{"class":144},"    # 加载最高准确率下的模型参数\n",[74,37635,37637],{"class":76,"line":37636},167,[74,37638,37639],{"class":144},"    # model.load_state_dict(best_model_wts)\n",[74,37641,37643,37646,37649],{"class":76,"line":37642},168,[74,37644,37645],{"class":84},"    torch.save(model.state_dict(best_model_wts), ",[74,37647,37648],{"class":190},"'.\u002Fbest_model.pth'",[74,37650,91],{"class":84},[74,37652,37654],{"class":76,"line":37653},169,[74,37655,37656],{"class":144},"    # 或者写成\n",[74,37658,37660],{"class":76,"line":37659},170,[74,37661,37662],{"class":144},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[74,37664,37666],{"class":76,"line":37665},171,[74,37667,37668],{"class":144},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[74,37670,37672,37675,37677,37680,37683,37685],{"class":76,"line":37671},172,[74,37673,37674],{"class":84},"    train_process",[74,37676,131],{"class":80},[74,37678,37679],{"class":84},"pd.DataFrame(",[74,37681,37682],{"class":9495},"data",[74,37684,131],{"class":80},[74,37686,1508],{"class":84},[74,37688,37690,37693,37695,37698],{"class":76,"line":37689},173,[74,37691,37692],{"class":190},"        \"epoch\"",[74,37694,945],{"class":84},[74,37696,37697],{"class":134},"range",[74,37699,37700],{"class":84},"(num_epochs),\n",[74,37702,37704,37707],{"class":76,"line":37703},174,[74,37705,37706],{"class":190},"        \"train_loss_all\"",[74,37708,37709],{"class":84},":train_loss_all,\n",[74,37711,37713,37716],{"class":76,"line":37712},175,[74,37714,37715],{"class":190},"        \"val_loss_all\"",[74,37717,37718],{"class":84},":val_loss_all,\n",[74,37720,37722,37725],{"class":76,"line":37721},176,[74,37723,37724],{"class":190},"        \"train_acc_all\"",[74,37726,37727],{"class":84},":train_acc_all,\n",[74,37729,37731,37734],{"class":76,"line":37730},177,[74,37732,37733],{"class":190},"        \"val_acc_all\"",[74,37735,37736],{"class":84},":val_acc_all\n",[74,37738,37740],{"class":76,"line":37739},178,[74,37741,37742],{"class":84},"    })\n",[74,37744,37746],{"class":76,"line":37745},179,[74,37747,37748],{"class":144},"    # 返回训练保存的过程\n",[74,37750,37752,37754],{"class":76,"line":37751},180,[74,37753,4053],{"class":80},[74,37755,37756],{"class":84}," train_process\n",[74,37758,37760],{"class":76,"line":37759},181,[74,37761,2363],{"emptyLinePlaceholder":2362},[74,37763,37765],{"class":76,"line":37764},182,[74,37766,37767],{"class":144},"# 将loss值和精度按照图片的形式展示出来\n",[74,37769,37771,37773,37776],{"class":76,"line":37770},183,[74,37772,36228],{"class":80},[74,37774,37775],{"class":1925}," matplot_acc_loss",[74,37777,37778],{"class":84},"(train_process):\n",[74,37780,37782],{"class":76,"line":37781},184,[74,37783,37784],{"class":144},"    # 设置图的大小\n",[74,37786,37788,37791,37793,37795,37797,37799,37801,37803],{"class":76,"line":37787},185,[74,37789,37790],{"class":84},"    plt.figure(",[74,37792,35974],{"class":9495},[74,37794,131],{"class":80},[74,37796,85],{"class":84},[74,37798,584],{"class":134},[74,37800,464],{"class":84},[74,37802,379],{"class":134},[74,37804,34778],{"class":84},[74,37806,37808],{"class":76,"line":37807},186,[74,37809,37810],{"class":144},"    # 设置图中有几张图\n",[74,37812,37814],{"class":76,"line":37813},187,[74,37815,37816],{"class":144},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[74,37818,37820],{"class":76,"line":37819},188,[74,37821,37822],{"class":144},"    # ①loss图\n",[74,37824,37826,37828,37830,37832,37834,37836,37838],{"class":76,"line":37825},189,[74,37827,36008],{"class":84},[74,37829,303],{"class":134},[74,37831,464],{"class":84},[74,37833,163],{"class":134},[74,37835,464],{"class":84},[74,37837,303],{"class":134},[74,37839,91],{"class":84},[74,37841,37843],{"class":76,"line":37842},190,[74,37844,37845],{"class":144},"    # 补充:\n",[74,37847,37849],{"class":76,"line":37848},191,[74,37850,37851],{"class":144},"    # plt.subplot(nrows, ncols, index)\n",[74,37853,37855],{"class":76,"line":37854},192,[74,37856,37857],{"class":144},"    # nrows：行数\n",[74,37859,37861],{"class":76,"line":37860},193,[74,37862,37863],{"class":144},"    # ncols：列数\n",[74,37865,37867],{"class":76,"line":37866},194,[74,37868,37869],{"class":144},"    # index：目前选中第几个子图（从1开始）\n",[74,37871,37873,37876,37879,37882,37885,37887,37890,37892,37895],{"class":76,"line":37872},195,[74,37874,37875],{"class":84},"    plt.plot(train_process[",[74,37877,37878],{"class":190},"\"epoch\"",[74,37880,37881],{"class":84},"],train_process.train_loss_all,",[74,37883,37884],{"class":190},"'ro-'",[74,37886,464],{"class":84},[74,37888,37889],{"class":9495},"label",[74,37891,131],{"class":80},[74,37893,37894],{"class":190},"'train loss'",[74,37896,91],{"class":84},[74,37898,37900,37902,37904,37907,37910,37912,37914,37916,37919],{"class":76,"line":37899},196,[74,37901,37875],{"class":84},[74,37903,37878],{"class":190},[74,37905,37906],{"class":84},"],train_process.val_loss_all,",[74,37908,37909],{"class":190},"'bs--'",[74,37911,464],{"class":84},[74,37913,37889],{"class":9495},[74,37915,131],{"class":80},[74,37917,37918],{"class":190},"'val loss'",[74,37920,91],{"class":84},[74,37922,37924],{"class":76,"line":37923},197,[74,37925,37926],{"class":144},"    # 添加一个图例\n",[74,37928,37930],{"class":76,"line":37929},198,[74,37931,37932],{"class":84},"    plt.legend()\n",[74,37934,37936],{"class":76,"line":37935},199,[74,37937,37938],{"class":144},"    # 给轴添加标签\n",[74,37940,37942,37945,37948],{"class":76,"line":37941},200,[74,37943,37944],{"class":84},"    plt.xlabel(",[74,37946,37947],{"class":190},"'epoch'",[74,37949,91],{"class":84},[74,37951,37953,37956,37959],{"class":76,"line":37952},201,[74,37954,37955],{"class":84},"    plt.ylabel(",[74,37957,37958],{"class":190},"'loss'",[74,37960,91],{"class":84},[74,37962,37964],{"class":76,"line":37963},202,[74,37965,37966],{"class":144},"    # ②准确度图\n",[74,37968,37970,37972,37974,37976,37978,37980,37982],{"class":76,"line":37969},203,[74,37971,36008],{"class":84},[74,37973,303],{"class":134},[74,37975,464],{"class":84},[74,37977,163],{"class":134},[74,37979,464],{"class":84},[74,37981,163],{"class":134},[74,37983,91],{"class":84},[74,37985,37987,37989,37991,37994,37996,37998,38000,38002,38005],{"class":76,"line":37986},204,[74,37988,37875],{"class":84},[74,37990,37878],{"class":190},[74,37992,37993],{"class":84},"],train_process.train_acc_all,",[74,37995,37884],{"class":190},[74,37997,464],{"class":84},[74,37999,37889],{"class":9495},[74,38001,131],{"class":80},[74,38003,38004],{"class":190},"'train acc'",[74,38006,91],{"class":84},[74,38008,38010,38012,38014,38017,38019,38021,38023,38025,38028],{"class":76,"line":38009},205,[74,38011,37875],{"class":84},[74,38013,37878],{"class":190},[74,38015,38016],{"class":84},"],train_process.val_acc_all,",[74,38018,37909],{"class":190},[74,38020,464],{"class":84},[74,38022,37889],{"class":9495},[74,38024,131],{"class":80},[74,38026,38027],{"class":190},"'val acc'",[74,38029,91],{"class":84},[74,38031,38033],{"class":76,"line":38032},206,[74,38034,38035],{"class":144},"    # 添加图例\n",[74,38037,38039],{"class":76,"line":38038},207,[74,38040,37932],{"class":84},[74,38042,38044,38046,38048],{"class":76,"line":38043},208,[74,38045,37944],{"class":84},[74,38047,37878],{"class":190},[74,38049,91],{"class":84},[74,38051,38053,38055,38058],{"class":76,"line":38052},209,[74,38054,37955],{"class":84},[74,38056,38057],{"class":190},"\"acc\"",[74,38059,91],{"class":84},[74,38061,38063],{"class":76,"line":38062},210,[74,38064,38065],{"class":84},"    plt.show()\n",[74,38067,38069],{"class":76,"line":38068},211,[74,38070,2363],{"emptyLinePlaceholder":2362},[74,38072,38074],{"class":76,"line":38073},212,[74,38075,38076],{"class":144},"# 正式开始训练:\n",[74,38078,38080,38082,38084,38086,38088],{"class":76,"line":38079},213,[74,38081,1493],{"class":80},[74,38083,35501],{"class":134},[74,38085,2912],{"class":80},[74,38087,35506],{"class":190},[74,38089,3702],{"class":84},[74,38091,38093],{"class":76,"line":38092},214,[74,38094,38095],{"class":144},"    # 将模型实例化\n",[74,38097,38099,38102,38104],{"class":76,"line":38098},215,[74,38100,38101],{"class":84},"    LeNet",[74,38103,131],{"class":80},[74,38105,38106],{"class":84},"LeNet()\n",[74,38108,38110,38113,38115],{"class":76,"line":38109},216,[74,38111,38112],{"class":84},"    train_dataloader,val_dataloader",[74,38114,131],{"class":80},[74,38116,38117],{"class":84},"train_val_data_process()\n",[74,38119,38121,38123,38125,38128,38131,38133,38135],{"class":76,"line":38120},217,[74,38122,37674],{"class":84},[74,38124,131],{"class":80},[74,38126,38127],{"class":84},"train_model_process(LeNet,train_dataloader,val_dataloader,",[74,38129,38130],{"class":9495},"num_epochs",[74,38132,131],{"class":80},[74,38134,786],{"class":134},[74,38136,91],{"class":84},[74,38138,38140],{"class":76,"line":38139},218,[74,38141,38142],{"class":84},"    matplot_acc_loss(train_process)\n",[19,38144,38145],{},"画图的补充点学习：",[19,38147,38148],{},[1424,38149],{"alt":69,"src":38150},"\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",[27,38152,38153],{"start":1141},[30,38154,38155],{},"测试",[64,38157,38159],{"className":34659,"code":38158,"language":34661,"meta":69,"style":69},"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",[71,38160,38161,38167,38177,38189,38199,38204,38214,38224,38228,38233,38242,38259,38271,38288,38299,38315,38320,38331,38342,38353,38360,38364,38369,38379,38384,38401,38409,38413,38418,38427,38436,38440,38445,38450,38455,38462,38467,38479,38489,38499,38504,38508,38513,38522,38527,38543,38548,38553,38558,38572,38577,38591,38595,38600,38615,38620,38632,38636,38641,38653,38658,38666,38671,38676,38686,38691,38700,38705,38710,38714,38719,38724,38740,38748,38753,38758,38817,38823,38828,38839,38847,38855,38859,38864,38868,38873,38881,38886,38902,38907,38917,38927],{"__ignoreMap":69},[74,38162,38163,38165],{"class":76,"line":77},[74,38164,34673],{"class":80},[74,38166,34676],{"class":84},[74,38168,38169,38171,38173,38175],{"class":76,"line":94},[74,38170,34673],{"class":80},[74,38172,35696],{"class":84},[74,38174,35664],{"class":80},[74,38176,35701],{"class":84},[74,38178,38179,38181,38184,38186],{"class":76,"line":1141},[74,38180,35018],{"class":80},[74,38182,38183],{"class":84}," jupyter_client.consoleapp ",[74,38185,34673],{"class":80},[74,38187,38188],{"class":84}," classes\n",[74,38190,38191,38193,38195,38197],{"class":76,"line":1156},[74,38192,35018],{"class":80},[74,38194,35679],{"class":84},[74,38196,34673],{"class":80},[74,38198,35684],{"class":84},[74,38200,38201],{"class":76,"line":1162},[74,38202,38203],{"class":144},"# 导入数据集\n",[74,38205,38206,38208,38210,38212],{"class":76,"line":1176},[74,38207,35018],{"class":80},[74,38209,35649],{"class":84},[74,38211,34673],{"class":80},[74,38213,35654],{"class":84},[74,38215,38216,38218,38220,38222],{"class":76,"line":1182},[74,38217,35018],{"class":80},[74,38219,36195],{"class":84},[74,38221,34673],{"class":80},[74,38223,36200],{"class":84},[74,38225,38226],{"class":76,"line":1273},[74,38227,2363],{"emptyLinePlaceholder":2362},[74,38229,38230],{"class":76,"line":1279},[74,38231,38232],{"class":144},"# 测试数据处理\n",[74,38234,38235,38237,38240],{"class":76,"line":1291},[74,38236,36228],{"class":80},[74,38238,38239],{"class":1925}," test_data_process",[74,38241,36234],{"class":84},[74,38243,38244,38247,38249,38251,38253,38255,38257],{"class":76,"line":1574},[74,38245,38246],{"class":84},"    test_data",[74,38248,131],{"class":80},[74,38250,35736],{"class":84},[74,38252,35739],{"class":9495},[74,38254,131],{"class":80},[74,38256,35744],{"class":190},[74,38258,35747],{"class":84},[74,38260,38261,38264,38266,38269],{"class":76,"line":1579},[74,38262,38263],{"class":9495},"                           train",[74,38265,131],{"class":80},[74,38267,38268],{"class":134},"False",[74,38270,35747],{"class":84},[74,38272,38273,38276,38278,38280,38282,38284,38286],{"class":76,"line":1585},[74,38274,38275],{"class":9495},"                           transform",[74,38277,131],{"class":80},[74,38279,35774],{"class":84},[74,38281,35777],{"class":9495},[74,38283,131],{"class":80},[74,38285,987],{"class":134},[74,38287,35785],{"class":84},[74,38289,38290,38293,38295,38297],{"class":76,"line":1590},[74,38291,38292],{"class":9495},"                           download",[74,38294,131],{"class":80},[74,38296,35757],{"class":134},[74,38298,91],{"class":84},[74,38300,38301,38304,38306,38308,38310,38312],{"class":76,"line":1604},[74,38302,38303],{"class":84},"    test_dataloader",[74,38305,131],{"class":80},[74,38307,35815],{"class":84},[74,38309,35818],{"class":9495},[74,38311,131],{"class":80},[74,38313,38314],{"class":84},"test_data,\n",[74,38316,38317],{"class":76,"line":1609},[74,38318,38319],{"class":144},"                                    # 这里是一张一张进行测试\n",[74,38321,38322,38325,38327,38329],{"class":76,"line":1615},[74,38323,38324],{"class":9495},"                                    batch_size",[74,38326,131],{"class":80},[74,38328,303],{"class":134},[74,38330,35747],{"class":84},[74,38332,38333,38336,38338,38340],{"class":76,"line":1636},[74,38334,38335],{"class":9495},"                                    shuffle",[74,38337,131],{"class":80},[74,38339,35757],{"class":134},[74,38341,35747],{"class":84},[74,38343,38344,38347,38349,38351],{"class":76,"line":1641},[74,38345,38346],{"class":9495},"                                    num_workers",[74,38348,131],{"class":80},[74,38350,277],{"class":134},[74,38352,91],{"class":84},[74,38354,38355,38357],{"class":76,"line":1655},[74,38356,4053],{"class":80},[74,38358,38359],{"class":84}," test_dataloader\n",[74,38361,38362],{"class":76,"line":1660},[74,38363,2363],{"emptyLinePlaceholder":2362},[74,38365,38366],{"class":76,"line":1689},[74,38367,38368],{"class":144},"# 定义模型测试函数\n",[74,38370,38371,38373,38376],{"class":76,"line":1694},[74,38372,36228],{"class":80},[74,38374,38375],{"class":1925}," test_model_process",[74,38377,38378],{"class":84},"(model,test_dataloader):\n",[74,38380,38381],{"class":76,"line":1711},[74,38382,38383],{"class":144},"    # 将模型放到设备当中，先进行判断\n",[74,38385,38386,38388,38390,38392,38394,38396,38398],{"class":76,"line":1716},[74,38387,35518],{"class":84},[74,38389,131],{"class":80},[74,38391,35525],{"class":190},[74,38393,1666],{"class":80},[74,38395,35530],{"class":84},[74,38397,1663],{"class":80},[74,38399,38400],{"class":190}," \"cpu\"\n",[74,38402,38403,38405,38407],{"class":76,"line":1721},[74,38404,35570],{"class":84},[74,38406,131],{"class":80},[74,38408,36570],{"class":84},[74,38410,38411],{"class":76,"line":1726},[74,38412,2363],{"emptyLinePlaceholder":2362},[74,38414,38415],{"class":76,"line":1740},[74,38416,38417],{"class":144},"    # 设置初始化参数\n",[74,38419,38420,38423,38425],{"class":76,"line":1745},[74,38421,38422],{"class":84},"    test_corrects",[74,38424,131],{"class":80},[74,38426,36623],{"class":134},[74,38428,38429,38432,38434],{"class":76,"line":2540},[74,38430,38431],{"class":84},"    test_num",[74,38433,131],{"class":80},[74,38435,3048],{"class":134},[74,38437,38438],{"class":76,"line":2554},[74,38439,2363],{"emptyLinePlaceholder":2362},[74,38441,38442],{"class":76,"line":2562},[74,38443,38444],{"class":144},"    # 进行模型测试\n",[74,38446,38447],{"class":76,"line":2567},[74,38448,38449],{"class":144},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[74,38451,38452],{"class":76,"line":2573},[74,38453,38454],{"class":144},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[74,38456,38457,38460],{"class":76,"line":2579},[74,38458,38459],{"class":80},"    with",[74,38461,37165],{"class":84},[74,38463,38464],{"class":76,"line":2584},[74,38465,38466],{"class":144},"        # 从数据中进行\n",[74,38468,38469,38471,38474,38476],{"class":76,"line":12227},[74,38470,3366],{"class":80},[74,38472,38473],{"class":84}," test_data_x,test_data_y ",[74,38475,30324],{"class":80},[74,38477,38478],{"class":84}," test_dataloader:\n",[74,38480,38481,38484,38486],{"class":76,"line":12251},[74,38482,38483],{"class":84},"            test_data_x",[74,38485,131],{"class":80},[74,38487,38488],{"class":84},"test_data_x.to(device)\n",[74,38490,38491,38494,38496],{"class":76,"line":12256},[74,38492,38493],{"class":84},"            test_data_y",[74,38495,131],{"class":80},[74,38497,38498],{"class":84},"test_data_y.to(device)\n",[74,38500,38501],{"class":76,"line":12262},[74,38502,38503],{"class":144},"            # 设置为验证模式\n",[74,38505,38506],{"class":76,"line":12289},[74,38507,37156],{"class":84},[74,38509,38510],{"class":76,"line":12294},[74,38511,38512],{"class":144},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[74,38514,38515,38517,38519],{"class":76,"line":12300},[74,38516,36941],{"class":84},[74,38518,131],{"class":80},[74,38520,38521],{"class":84},"model(test_data_x)\n",[74,38523,38524],{"class":76,"line":12312},[74,38525,38526],{"class":144},"            # 查找每一行中最大值对应的下标\n",[74,38528,38529,38531,38533,38535,38537,38539,38541],{"class":76,"line":12324},[74,38530,36958],{"class":84},[74,38532,131],{"class":80},[74,38534,36963],{"class":84},[74,38536,36966],{"class":9495},[74,38538,131],{"class":80},[74,38540,303],{"class":134},[74,38542,91],{"class":84},[74,38544,38545],{"class":76,"line":12336},[74,38546,38547],{"class":144},"            # 计算正确率\n",[74,38549,38550],{"class":76,"line":13995},[74,38551,38552],{"class":144},"            # .data表示是一个不带梯度信息的tensor\n",[74,38554,38555],{"class":76,"line":14020},[74,38556,38557],{"class":144},"            # 如果预测正确，则准确度test_corrects加1\n",[74,38559,38560,38563,38565,38567,38569],{"class":76,"line":14043},[74,38561,38562],{"class":84},"            test_corrects",[74,38564,13756],{"class":80},[74,38566,37068],{"class":84},[74,38568,2912],{"class":80},[74,38570,38571],{"class":84},"test_data_y.data)\n",[74,38573,38574],{"class":76,"line":14067},[74,38575,38576],{"class":144},"            # 将所有的测试样本进行累计\n",[74,38578,38579,38582,38584,38587,38589],{"class":76,"line":14072},[74,38580,38581],{"class":84},"            test_num",[74,38583,13756],{"class":80},[74,38585,38586],{"class":84},"test_data_x.size(",[74,38588,277],{"class":134},[74,38590,91],{"class":84},[74,38592,38593],{"class":76,"line":14077},[74,38594,2363],{"emptyLinePlaceholder":2362},[74,38596,38597],{"class":76,"line":14082},[74,38598,38599],{"class":144},"        # 计算准确度\n",[74,38601,38602,38605,38607,38610,38612],{"class":76,"line":14091},[74,38603,38604],{"class":84},"        test_acc",[74,38606,131],{"class":80},[74,38608,38609],{"class":84},"test_corrects.double().item()",[74,38611,670],{"class":80},[74,38613,38614],{"class":84},"test_num\n",[74,38616,38617],{"class":76,"line":14096},[74,38618,38619],{"class":144},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[74,38621,38622,38624,38626,38629],{"class":76,"line":14102},[74,38623,36732],{"class":134},[74,38625,85],{"class":84},[74,38627,38628],{"class":190},"\"测试的准确率：\"",[74,38630,38631],{"class":84},",test_acc)\n",[74,38633,38634],{"class":76,"line":14123},[74,38635,2363],{"emptyLinePlaceholder":2362},[74,38637,38638],{"class":76,"line":14129},[74,38639,38640],{"class":144},"# 实现模型的测试功能\n",[74,38642,38643,38645,38647,38649,38651],{"class":76,"line":14143},[74,38644,1493],{"class":80},[74,38646,35501],{"class":134},[74,38648,2912],{"class":80},[74,38650,35506],{"class":190},[74,38652,3702],{"class":84},[74,38654,38655],{"class":76,"line":14149},[74,38656,38657],{"class":144},"    # 加载模型\n",[74,38659,38660,38662,38664],{"class":76,"line":14176},[74,38661,35570],{"class":84},[74,38663,131],{"class":80},[74,38665,38106],{"class":84},[74,38667,38668],{"class":76,"line":14185},[74,38669,38670],{"class":144},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[74,38672,38673],{"class":76,"line":14191},[74,38674,38675],{"class":144},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[74,38677,38678,38681,38684],{"class":76,"line":14199},[74,38679,38680],{"class":84},"    model.load_state_dict(torch.load(",[74,38682,38683],{"class":190},"'best_model.pth'",[74,38685,34778],{"class":84},[74,38687,38688],{"class":76,"line":14204},[74,38689,38690],{"class":144},"    # 数据加载\n",[74,38692,38693,38695,38697],{"class":76,"line":20883},[74,38694,38303],{"class":84},[74,38696,131],{"class":80},[74,38698,38699],{"class":84},"test_data_process()\n",[74,38701,38702],{"class":76,"line":20889},[74,38703,38704],{"class":144},"    # 加载模型测试的函数\n",[74,38706,38707],{"class":76,"line":20912},[74,38708,38709],{"class":84},"    test_model_process(model,test_dataloader)\n",[74,38711,38712],{"class":76,"line":20918},[74,38713,2363],{"emptyLinePlaceholder":2362},[74,38715,38716],{"class":76,"line":20941},[74,38717,38718],{"class":144},"    # 验证集推理实现：\n",[74,38720,38721],{"class":76,"line":20955},[74,38722,38723],{"class":144},"    # 加载数据加载的更详细一些\n",[74,38725,38726,38728,38730,38732,38734,38736,38738],{"class":76,"line":20975},[74,38727,35518],{"class":84},[74,38729,131],{"class":80},[74,38731,35525],{"class":190},[74,38733,1666],{"class":80},[74,38735,35530],{"class":84},[74,38737,1663],{"class":80},[74,38739,38400],{"class":190},[74,38741,38742,38744,38746],{"class":76,"line":20981},[74,38743,35570],{"class":84},[74,38745,131],{"class":80},[74,38747,36570],{"class":84},[74,38749,38750],{"class":76,"line":20992},[74,38751,38752],{"class":144},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[74,38754,38755],{"class":76,"line":21015},[74,38756,38757],{"class":144},"    # 顺序不可改变\n",[74,38759,38760,38763,38765,38767,38770,38772,38775,38777,38780,38782,38785,38787,38790,38792,38795,38797,38800,38802,38805,38807,38810,38812,38815],{"class":76,"line":21037},[74,38761,38762],{"class":84},"    classes",[74,38764,131],{"class":80},[74,38766,976],{"class":84},[74,38768,38769],{"class":190},"'T-shirt\u002Ftop'",[74,38771,464],{"class":84},[74,38773,38774],{"class":190},"'Trouser'",[74,38776,464],{"class":84},[74,38778,38779],{"class":190},"'Pullover'",[74,38781,464],{"class":84},[74,38783,38784],{"class":190},"'Dress'",[74,38786,464],{"class":84},[74,38788,38789],{"class":190},"'Coat'",[74,38791,464],{"class":84},[74,38793,38794],{"class":190},"'Sandal'",[74,38796,464],{"class":84},[74,38798,38799],{"class":190},"'Shirt'",[74,38801,464],{"class":84},[74,38803,38804],{"class":190},"'Sneaker'",[74,38806,464],{"class":84},[74,38808,38809],{"class":190},"'Bag'",[74,38811,464],{"class":84},[74,38813,38814],{"class":190},"'Ankle boot'",[74,38816,37527],{"class":84},[74,38818,38819,38821],{"class":76,"line":21042},[74,38820,38459],{"class":80},[74,38822,37165],{"class":84},[74,38824,38825],{"class":76,"line":21048},[74,38826,38827],{"class":144},"        # 将数据和标签都放到设备当中\n",[74,38829,38830,38832,38835,38837],{"class":76,"line":21062},[74,38831,3366],{"class":80},[74,38833,38834],{"class":84}," b_x,b_y ",[74,38836,30324],{"class":80},[74,38838,38478],{"class":84},[74,38840,38841,38843,38845],{"class":76,"line":21075},[74,38842,36891],{"class":84},[74,38844,131],{"class":80},[74,38846,36896],{"class":84},[74,38848,38849,38851,38853],{"class":76,"line":21080},[74,38850,36906],{"class":84},[74,38852,131],{"class":80},[74,38854,36911],{"class":84},[74,38856,38857],{"class":76,"line":21094},[74,38858,2363],{"emptyLinePlaceholder":2362},[74,38860,38861],{"class":76,"line":21099},[74,38862,38863],{"class":144},"            # 设置模型为验证模式\n",[74,38865,38866],{"class":76,"line":21105},[74,38867,37156],{"class":84},[74,38869,38870],{"class":76,"line":21110},[74,38871,38872],{"class":144},"            # 模型推理结果\n",[74,38874,38875,38877,38879],{"class":76,"line":21124},[74,38876,36941],{"class":84},[74,38878,131],{"class":80},[74,38880,36946],{"class":84},[74,38882,38883],{"class":76,"line":21129},[74,38884,38885],{"class":144},"            # 获取最大下标，最大下标就是类别号\n",[74,38887,38888,38890,38892,38894,38896,38898,38900],{"class":76,"line":21134},[74,38889,36958],{"class":84},[74,38891,131],{"class":80},[74,38893,36963],{"class":84},[74,38895,36966],{"class":9495},[74,38897,131],{"class":80},[74,38899,303],{"class":134},[74,38901,91],{"class":84},[74,38903,38904],{"class":76,"line":21148},[74,38905,38906],{"class":144},"            # 取出张量中的数值\n",[74,38908,38909,38912,38914],{"class":76,"line":21160},[74,38910,38911],{"class":84},"            result",[74,38913,131],{"class":80},[74,38915,38916],{"class":84},"pre_lab.item()\n",[74,38918,38919,38922,38924],{"class":76,"line":21165},[74,38920,38921],{"class":84},"            label",[74,38923,131],{"class":80},[74,38925,38926],{"class":84},"b_y.item()\n",[74,38928,38929,38932,38934,38937,38940,38943,38945,38948],{"class":76,"line":21178},[74,38930,38931],{"class":134},"            print",[74,38933,85],{"class":84},[74,38935,38936],{"class":190},"\"预测值：\"",[74,38938,38939],{"class":84},",classes[result],",[74,38941,38942],{"class":190},"\"------\"",[74,38944,464],{"class":84},[74,38946,38947],{"class":190},"\"真实值：\"",[74,38949,38950],{"class":84},",classes[label])\n",[19,38952,38953],{},"（2）AlexNet",[27,38955,38956],{},[30,38957,38958],{},"神经网络构建",[64,38960,38962],{"className":34659,"code":38961,"language":34661,"meta":69,"style":69},"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",[71,38963,38964,38970,38980,38990,39002,39006,39023,39031,39046,39058,39100,39127,39170,39196,39240,39283,39326,39353,39357,39367,39372,39400,39419,39438,39442,39447,39455,39470,39480,39494,39504,39519,39534,39549,39560,39564,39569,39579,39594,39599,39613,39628,39640,39645,39656,39661,39667,39672,39684,39704,39709,39718],{"__ignoreMap":69},[74,38965,38966,38968],{"class":76,"line":77},[74,38967,34673],{"class":80},[74,38969,34676],{"class":84},[74,38971,38972,38974,38976,38978],{"class":76,"line":94},[74,38973,35018],{"class":80},[74,38975,35021],{"class":84},[74,38977,34673],{"class":80},[74,38979,35026],{"class":84},[74,38981,38982,38984,38986,38988],{"class":76,"line":1141},[74,38983,35018],{"class":80},[74,38985,35038],{"class":84},[74,38987,34673],{"class":80},[74,38989,35043],{"class":84},[74,38991,38992,38994,38997,38999],{"class":76,"line":1156},[74,38993,34673],{"class":80},[74,38995,38996],{"class":84}," torch.nn.functional ",[74,38998,35664],{"class":80},[74,39000,39001],{"class":84}," F\n",[74,39003,39004],{"class":76,"line":1162},[74,39005,2363],{"emptyLinePlaceholder":2362},[74,39007,39008,39010,39013,39015,39017,39019,39021],{"class":76,"line":1176},[74,39009,18973],{"class":80},[74,39011,39012],{"class":1925}," AlexNet",[74,39014,85],{"class":84},[74,39016,35059],{"class":1925},[74,39018,644],{"class":84},[74,39020,35064],{"class":1925},[74,39022,35067],{"class":84},[74,39024,39025,39027,39029],{"class":76,"line":1182},[74,39026,35082],{"class":80},[74,39028,35085],{"class":134},[74,39030,35088],{"class":84},[74,39032,39033,39035,39038,39040,39042,39044],{"class":76,"line":1273},[74,39034,35098],{"class":134},[74,39036,39037],{"class":84},"(AlexNet,",[74,39039,35104],{"class":134},[74,39041,35107],{"class":84},[74,39043,35110],{"class":134},[74,39045,1938],{"class":84},[74,39047,39048,39050,39053,39055],{"class":76,"line":1279},[74,39049,35126],{"class":134},[74,39051,39052],{"class":84},".ReLu",[74,39054,131],{"class":80},[74,39056,39057],{"class":84},"nn.ReLU()\n",[74,39059,39060,39062,39064,39066,39068,39070,39072,39074,39076,39078,39080,39082,39084,39086,39088,39090,39092,39094,39096,39098],{"class":76,"line":1291},[74,39061,35126],{"class":134},[74,39063,35129],{"class":84},[74,39065,131],{"class":80},[74,39067,35134],{"class":84},[74,39069,35137],{"class":9495},[74,39071,131],{"class":80},[74,39073,303],{"class":134},[74,39075,464],{"class":84},[74,39077,35146],{"class":9495},[74,39079,131],{"class":80},[74,39081,295],{"class":134},[74,39083,464],{"class":84},[74,39085,35155],{"class":9495},[74,39087,131],{"class":80},[74,39089,558],{"class":134},[74,39091,464],{"class":84},[74,39093,35210],{"class":9495},[74,39095,131],{"class":80},[74,39097,379],{"class":134},[74,39099,91],{"class":84},[74,39101,39102,39104,39106,39108,39111,39113,39115,39117,39119,39121,39123,39125],{"class":76,"line":1574},[74,39103,35126],{"class":134},[74,39105,35194],{"class":84},[74,39107,131],{"class":80},[74,39109,39110],{"class":84},"nn.MaxPool2d(",[74,39112,35155],{"class":9495},[74,39114,131],{"class":80},[74,39116,157],{"class":134},[74,39118,464],{"class":84},[74,39120,35210],{"class":9495},[74,39122,131],{"class":80},[74,39124,163],{"class":134},[74,39126,91],{"class":84},[74,39128,39129,39131,39133,39135,39137,39139,39141,39143,39145,39147,39149,39152,39154,39156,39158,39160,39162,39164,39166,39168],{"class":76,"line":1579},[74,39130,35126],{"class":134},[74,39132,35223],{"class":84},[74,39134,131],{"class":80},[74,39136,35134],{"class":84},[74,39138,35137],{"class":9495},[74,39140,131],{"class":80},[74,39142,295],{"class":134},[74,39144,464],{"class":84},[74,39146,35146],{"class":9495},[74,39148,131],{"class":80},[74,39150,39151],{"class":134},"256",[74,39153,464],{"class":84},[74,39155,35155],{"class":9495},[74,39157,131],{"class":80},[74,39159,405],{"class":134},[74,39161,464],{"class":84},[74,39163,35164],{"class":9495},[74,39165,131],{"class":80},[74,39167,163],{"class":134},[74,39169,91],{"class":84},[74,39171,39172,39174,39176,39178,39180,39182,39184,39186,39188,39190,39192,39194],{"class":76,"line":1585},[74,39173,35126],{"class":134},[74,39175,35258],{"class":84},[74,39177,131],{"class":80},[74,39179,39110],{"class":84},[74,39181,35155],{"class":9495},[74,39183,131],{"class":80},[74,39185,157],{"class":134},[74,39187,464],{"class":84},[74,39189,35210],{"class":9495},[74,39191,131],{"class":80},[74,39193,163],{"class":134},[74,39195,91],{"class":84},[74,39197,39198,39200,39203,39205,39207,39209,39211,39213,39215,39217,39219,39222,39224,39226,39228,39230,39232,39234,39236,39238],{"class":76,"line":1590},[74,39199,35126],{"class":134},[74,39201,39202],{"class":84},".c5",[74,39204,131],{"class":80},[74,39206,35134],{"class":84},[74,39208,35137],{"class":9495},[74,39210,131],{"class":80},[74,39212,39151],{"class":134},[74,39214,464],{"class":84},[74,39216,35146],{"class":9495},[74,39218,131],{"class":80},[74,39220,39221],{"class":134},"384",[74,39223,464],{"class":84},[74,39225,35155],{"class":9495},[74,39227,131],{"class":80},[74,39229,157],{"class":134},[74,39231,464],{"class":84},[74,39233,35164],{"class":9495},[74,39235,131],{"class":80},[74,39237,303],{"class":134},[74,39239,91],{"class":84},[74,39241,39242,39244,39247,39249,39251,39253,39255,39257,39259,39261,39263,39265,39267,39269,39271,39273,39275,39277,39279,39281],{"class":76,"line":1604},[74,39243,35126],{"class":134},[74,39245,39246],{"class":84},".c6",[74,39248,131],{"class":80},[74,39250,35134],{"class":84},[74,39252,35137],{"class":9495},[74,39254,131],{"class":80},[74,39256,39221],{"class":134},[74,39258,464],{"class":84},[74,39260,35146],{"class":9495},[74,39262,131],{"class":80},[74,39264,39221],{"class":134},[74,39266,464],{"class":84},[74,39268,35155],{"class":9495},[74,39270,131],{"class":80},[74,39272,157],{"class":134},[74,39274,464],{"class":84},[74,39276,35164],{"class":9495},[74,39278,131],{"class":80},[74,39280,303],{"class":134},[74,39282,91],{"class":84},[74,39284,39285,39287,39290,39292,39294,39296,39298,39300,39302,39304,39306,39308,39310,39312,39314,39316,39318,39320,39322,39324],{"class":76,"line":1609},[74,39286,35126],{"class":134},[74,39288,39289],{"class":84},".c7",[74,39291,131],{"class":80},[74,39293,35134],{"class":84},[74,39295,35137],{"class":9495},[74,39297,131],{"class":80},[74,39299,39221],{"class":134},[74,39301,464],{"class":84},[74,39303,35146],{"class":9495},[74,39305,131],{"class":80},[74,39307,39151],{"class":134},[74,39309,464],{"class":84},[74,39311,35155],{"class":9495},[74,39313,131],{"class":80},[74,39315,157],{"class":134},[74,39317,464],{"class":84},[74,39319,35164],{"class":9495},[74,39321,131],{"class":80},[74,39323,303],{"class":134},[74,39325,91],{"class":84},[74,39327,39328,39330,39333,39335,39337,39339,39341,39343,39345,39347,39349,39351],{"class":76,"line":1615},[74,39329,35126],{"class":134},[74,39331,39332],{"class":84},".s8",[74,39334,131],{"class":80},[74,39336,39110],{"class":84},[74,39338,35155],{"class":9495},[74,39340,131],{"class":80},[74,39342,157],{"class":134},[74,39344,464],{"class":84},[74,39346,35210],{"class":9495},[74,39348,131],{"class":80},[74,39350,163],{"class":134},[74,39352,91],{"class":84},[74,39354,39355],{"class":76,"line":1636},[74,39356,35283],{"class":144},[74,39358,39359,39361,39363,39365],{"class":76,"line":1641},[74,39360,35126],{"class":134},[74,39362,35290],{"class":84},[74,39364,131],{"class":80},[74,39366,35295],{"class":84},[74,39368,39369],{"class":76,"line":1655},[74,39370,39371],{"class":144},"       # 定义全连接层\n",[74,39373,39374,39376,39379,39381,39383,39385,39387,39389,39391,39393,39395,39398],{"class":76,"line":1660},[74,39375,35126],{"class":134},[74,39377,39378],{"class":84},".f1",[74,39380,131],{"class":80},[74,39382,35312],{"class":84},[74,39384,430],{"class":134},[74,39386,541],{"class":80},[74,39388,430],{"class":134},[74,39390,541],{"class":80},[74,39392,39151],{"class":134},[74,39394,464],{"class":84},[74,39396,39397],{"class":134},"4096",[74,39399,91],{"class":84},[74,39401,39402,39404,39407,39409,39411,39413,39415,39417],{"class":76,"line":1689},[74,39403,35126],{"class":134},[74,39405,39406],{"class":84},".f2",[74,39408,131],{"class":80},[74,39410,35312],{"class":84},[74,39412,39397],{"class":134},[74,39414,464],{"class":84},[74,39416,39397],{"class":134},[74,39418,91],{"class":84},[74,39420,39421,39423,39426,39428,39430,39432,39434,39436],{"class":76,"line":1694},[74,39422,35126],{"class":134},[74,39424,39425],{"class":84},".f3",[74,39427,131],{"class":80},[74,39429,35312],{"class":84},[74,39431,39397],{"class":134},[74,39433,464],{"class":84},[74,39435,532],{"class":134},[74,39437,91],{"class":84},[74,39439,39440],{"class":76,"line":1711},[74,39441,2363],{"emptyLinePlaceholder":2362},[74,39443,39444],{"class":76,"line":1716},[74,39445,39446],{"class":144},"    # 定义前向传播\n",[74,39448,39449,39451,39453],{"class":76,"line":1721},[74,39450,35082],{"class":80},[74,39452,35374],{"class":1925},[74,39454,35377],{"class":84},[74,39456,39457,39459,39461,39463,39466,39468],{"class":76,"line":1726},[74,39458,35382],{"class":84},[74,39460,131],{"class":80},[74,39462,35104],{"class":134},[74,39464,39465],{"class":84},".ReLu(",[74,39467,35104],{"class":134},[74,39469,35394],{"class":84},[74,39471,39472,39474,39476,39478],{"class":76,"line":1740},[74,39473,35382],{"class":84},[74,39475,131],{"class":80},[74,39477,35104],{"class":134},[74,39479,35405],{"class":84},[74,39481,39482,39484,39486,39488,39490,39492],{"class":76,"line":1745},[74,39483,35382],{"class":84},[74,39485,131],{"class":80},[74,39487,35104],{"class":134},[74,39489,39465],{"class":84},[74,39491,35104],{"class":134},[74,39493,35420],{"class":84},[74,39495,39496,39498,39500,39502],{"class":76,"line":2540},[74,39497,35382],{"class":84},[74,39499,131],{"class":80},[74,39501,35104],{"class":134},[74,39503,35431],{"class":84},[74,39505,39506,39508,39510,39512,39514,39516],{"class":76,"line":2554},[74,39507,35382],{"class":84},[74,39509,131],{"class":80},[74,39511,35104],{"class":134},[74,39513,39465],{"class":84},[74,39515,35104],{"class":134},[74,39517,39518],{"class":84},".c5(x))\n",[74,39520,39521,39523,39525,39527,39529,39531],{"class":76,"line":2562},[74,39522,35382],{"class":84},[74,39524,131],{"class":80},[74,39526,35104],{"class":134},[74,39528,39465],{"class":84},[74,39530,35104],{"class":134},[74,39532,39533],{"class":84},".c6(x))\n",[74,39535,39536,39538,39540,39542,39544,39546],{"class":76,"line":2567},[74,39537,35382],{"class":84},[74,39539,131],{"class":80},[74,39541,35104],{"class":134},[74,39543,39465],{"class":84},[74,39545,35104],{"class":134},[74,39547,39548],{"class":84},".c7(x))\n",[74,39550,39551,39553,39555,39557],{"class":76,"line":2573},[74,39552,35382],{"class":84},[74,39554,131],{"class":80},[74,39556,35104],{"class":134},[74,39558,39559],{"class":84},".s8(x)\n",[74,39561,39562],{"class":76,"line":2579},[74,39563,2363],{"emptyLinePlaceholder":2362},[74,39565,39566],{"class":76,"line":2584},[74,39567,39568],{"class":144},"        # 展平加线性全连接层\n",[74,39570,39571,39573,39575,39577],{"class":76,"line":12227},[74,39572,35382],{"class":84},[74,39574,131],{"class":80},[74,39576,35104],{"class":134},[74,39578,35442],{"class":84},[74,39580,39581,39583,39585,39587,39589,39591],{"class":76,"line":12251},[74,39582,35382],{"class":84},[74,39584,131],{"class":80},[74,39586,35104],{"class":134},[74,39588,39465],{"class":84},[74,39590,35104],{"class":134},[74,39592,39593],{"class":84},".f1(x))\n",[74,39595,39596],{"class":76,"line":12256},[74,39597,39598],{"class":144},"        # 还需要dropout对神经元随机进行失活\n",[74,39600,39601,39603,39605,39608,39611],{"class":76,"line":12262},[74,39602,35382],{"class":84},[74,39604,131],{"class":80},[74,39606,39607],{"class":84},"F.dropout(x,",[74,39609,39610],{"class":134},"0.5",[74,39612,91],{"class":84},[74,39614,39615,39617,39619,39621,39623,39625],{"class":76,"line":12289},[74,39616,35382],{"class":84},[74,39618,131],{"class":80},[74,39620,35104],{"class":134},[74,39622,39465],{"class":84},[74,39624,35104],{"class":134},[74,39626,39627],{"class":84},".f2(x))\n",[74,39629,39630,39632,39634,39636,39638],{"class":76,"line":12294},[74,39631,35382],{"class":84},[74,39633,131],{"class":80},[74,39635,39607],{"class":84},[74,39637,39610],{"class":134},[74,39639,91],{"class":84},[74,39641,39642],{"class":76,"line":12300},[74,39643,39644],{"class":144},"        # 直接输出\n",[74,39646,39647,39649,39651,39653],{"class":76,"line":12312},[74,39648,35382],{"class":84},[74,39650,131],{"class":80},[74,39652,35104],{"class":134},[74,39654,39655],{"class":84},".f3(x)\n",[74,39657,39658],{"class":76,"line":12324},[74,39659,39660],{"class":144},"        # 前向传播输出\n",[74,39662,39663,39665],{"class":76,"line":12336},[74,39664,19031],{"class":80},[74,39666,35490],{"class":84},[74,39668,39669],{"class":76,"line":13995},[74,39670,39671],{"class":144},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[74,39673,39674,39676,39678,39680,39682],{"class":76,"line":14020},[74,39675,1493],{"class":80},[74,39677,35501],{"class":134},[74,39679,2912],{"class":80},[74,39681,35506],{"class":190},[74,39683,3702],{"class":84},[74,39685,39686,39688,39690,39692,39694,39696,39698,39700,39702],{"class":76,"line":14043},[74,39687,35518],{"class":84},[74,39689,131],{"class":80},[74,39691,34732],{"class":84},[74,39693,35525],{"class":190},[74,39695,1666],{"class":80},[74,39697,35530],{"class":84},[74,39699,1663],{"class":80},[74,39701,34757],{"class":190},[74,39703,91],{"class":84},[74,39705,39706],{"class":76,"line":14067},[74,39707,39708],{"class":144},"    # 模型实例化，然后将实例化的模型放到设备中\n",[74,39710,39711,39713,39715],{"class":76,"line":14072},[74,39712,35570],{"class":84},[74,39714,131],{"class":80},[74,39716,39717],{"class":84},"AlexNet().to(device)\n",[74,39719,39720,39722,39724,39726,39728,39731,39733,39735],{"class":76,"line":14077},[74,39721,35580],{"class":134},[74,39723,35583],{"class":84},[74,39725,303],{"class":134},[74,39727,464],{"class":84},[74,39729,39730],{"class":134},"227",[74,39732,464],{"class":84},[74,39734,39730],{"class":134},[74,39736,35596],{"class":84},[27,39738,39739],{"start":94},[30,39740,35609],{},[64,39742,39744],{"className":34659,"code":39743,"language":34661,"meta":69,"style":69},"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",[71,39745,39746,39752,39758,39768,39774,39784,39794,39804,39814,39824,39828,39839,39849,39853,39857,39861,39869,39881,39891,39907,39917,39949,39963,39973,39983,39987,39997,40011,40021,40031,40041,40047,40051,40055,40059,40063,40067,40075,40095,40099,40103,40107,40111,40115,40131,40135,40139,40147,40151,40155,40163,40167,40171,40175,40183,40187,40191,40195,40199,40207,40211,40219,40223,40231,40235,40243,40247,40255,40259,40263,40271,40275,40279,40283,40295,40319,40333,40337,40341,40345,40353,40357,40365,40369,40377,40381,40389,40393,40401,40405,40413,40417,40429,40433,40441,40445,40453,40457,40461,40465,40469,40477,40481,40497,40501,40509,40513,40517,40521,40525,40529,40533,40537,40553,40557,40569,40573,40585,40589,40601,40605,40613,40617,40625,40629,40633,40638,40644,40648,40657,40661,40678,40682,40691,40695,40713,40726,40731,40744,40748,40752,40760,40764,40768,40776,40780,40788,40792,40800,40804,40808,40850,40892,40896,40900,40916,40920,40936,40940,40944,40952,40956,40960,40972,41010,41015,41020,41029,41033,41047,41057,41063,41069,41075,41081,41085,41089,41095,41099,41103,41111,41115,41133,41137,41141,41145,41161,41165,41169,41173,41177,41181,41201,41221,41225,41229,41233,41241,41249,41253,41269,41289,41309,41313,41317,41325,41333,41337,41341,41345,41357,41361,41371,41379,41396],{"__ignoreMap":69},[74,39747,39748,39750],{"class":76,"line":77},[74,39749,34673],{"class":80},[74,39751,36103],{"class":84},[74,39753,39754,39756],{"class":76,"line":94},[74,39755,34673],{"class":80},[74,39757,36110],{"class":84},[74,39759,39760,39762,39764,39766],{"class":76,"line":1141},[74,39761,34673],{"class":80},[74,39763,36121],{"class":84},[74,39765,35664],{"class":80},[74,39767,36126],{"class":84},[74,39769,39770,39772],{"class":76,"line":1156},[74,39771,34673],{"class":80},[74,39773,34676],{"class":84},[74,39775,39776,39778,39780,39782],{"class":76,"line":1162},[74,39777,35018],{"class":80},[74,39779,35696],{"class":84},[74,39781,34673],{"class":80},[74,39783,36143],{"class":84},[74,39785,39786,39788,39790,39792],{"class":76,"line":1176},[74,39787,35018],{"class":80},[74,39789,35649],{"class":84},[74,39791,34673],{"class":80},[74,39793,35654],{"class":84},[74,39795,39796,39798,39800,39802],{"class":76,"line":1182},[74,39797,35018],{"class":80},[74,39799,35679],{"class":84},[74,39801,34673],{"class":80},[74,39803,35684],{"class":84},[74,39805,39806,39808,39810,39812],{"class":76,"line":1273},[74,39807,34673],{"class":80},[74,39809,35696],{"class":84},[74,39811,35664],{"class":80},[74,39813,35701],{"class":84},[74,39815,39816,39818,39820,39822],{"class":76,"line":1279},[74,39817,34673],{"class":80},[74,39819,35713],{"class":84},[74,39821,35664],{"class":80},[74,39823,35718],{"class":84},[74,39825,39826],{"class":76,"line":1291},[74,39827,36188],{"class":144},[74,39829,39830,39832,39834,39836],{"class":76,"line":1574},[74,39831,35018],{"class":80},[74,39833,36195],{"class":84},[74,39835,34673],{"class":80},[74,39837,39838],{"class":84}," AlexNet\n",[74,39840,39841,39843,39845,39847],{"class":76,"line":1579},[74,39842,35018],{"class":80},[74,39844,35021],{"class":84},[74,39846,34673],{"class":80},[74,39848,35026],{"class":84},[74,39850,39851],{"class":76,"line":1585},[74,39852,2363],{"emptyLinePlaceholder":2362},[74,39854,39855],{"class":76,"line":1590},[74,39856,2363],{"emptyLinePlaceholder":2362},[74,39858,39859],{"class":76,"line":1604},[74,39860,36223],{"class":144},[74,39862,39863,39865,39867],{"class":76,"line":1609},[74,39864,36228],{"class":80},[74,39866,36231],{"class":1925},[74,39868,36234],{"class":84},[74,39870,39871,39873,39875,39877,39879],{"class":76,"line":1615},[74,39872,36239],{"class":84},[74,39874,131],{"class":80},[74,39876,35736],{"class":84},[74,39878,35744],{"class":190},[74,39880,35747],{"class":84},[74,39882,39883,39885,39887,39889],{"class":76,"line":1636},[74,39884,36252],{"class":9495},[74,39886,131],{"class":80},[74,39888,35757],{"class":134},[74,39890,35747],{"class":84},[74,39892,39893,39895,39897,39899,39901,39903,39905],{"class":76,"line":1641},[74,39894,36263],{"class":9495},[74,39896,131],{"class":80},[74,39898,35774],{"class":84},[74,39900,35777],{"class":9495},[74,39902,131],{"class":80},[74,39904,39730],{"class":134},[74,39906,35785],{"class":84},[74,39908,39909,39911,39913,39915],{"class":76,"line":1655},[74,39910,36280],{"class":9495},[74,39912,131],{"class":80},[74,39914,35757],{"class":134},[74,39916,91],{"class":84},[74,39918,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941,39943,39945,39947],{"class":76,"line":1660},[74,39920,36291],{"class":84},[74,39922,131],{"class":80},[74,39924,36296],{"class":84},[74,39926,36299],{"class":134},[74,39928,85],{"class":84},[74,39930,36304],{"class":134},[74,39932,541],{"class":80},[74,39934,11637],{"class":134},[74,39936,36311],{"class":84},[74,39938,36299],{"class":134},[74,39940,85],{"class":84},[74,39942,36318],{"class":134},[74,39944,541],{"class":80},[74,39946,11637],{"class":134},[74,39948,36325],{"class":84},[74,39950,39951,39953,39955,39957,39959,39961],{"class":76,"line":1689},[74,39952,36330],{"class":84},[74,39954,131],{"class":80},[74,39956,36335],{"class":84},[74,39958,35818],{"class":9495},[74,39960,131],{"class":80},[74,39962,35823],{"class":84},[74,39964,39965,39967,39969,39971],{"class":76,"line":1694},[74,39966,36346],{"class":9495},[74,39968,131],{"class":80},[74,39970,36351],{"class":134},[74,39972,35747],{"class":84},[74,39974,39975,39977,39979,39981],{"class":76,"line":1711},[74,39976,36358],{"class":9495},[74,39978,131],{"class":80},[74,39980,35757],{"class":134},[74,39982,35747],{"class":84},[74,39984,39985],{"class":76,"line":1716},[74,39986,36369],{"class":144},[74,39988,39989,39991,39993,39995],{"class":76,"line":1721},[74,39990,36374],{"class":9495},[74,39992,131],{"class":80},[74,39994,481],{"class":134},[74,39996,91],{"class":84},[74,39998,39999,40001,40003,40005,40007,40009],{"class":76,"line":1726},[74,40000,36385],{"class":84},[74,40002,131],{"class":80},[74,40004,35815],{"class":84},[74,40006,35818],{"class":9495},[74,40008,131],{"class":80},[74,40010,36396],{"class":84},[74,40012,40013,40015,40017,40019],{"class":76,"line":1740},[74,40014,36401],{"class":9495},[74,40016,131],{"class":80},[74,40018,36351],{"class":134},[74,40020,35747],{"class":84},[74,40022,40023,40025,40027,40029],{"class":76,"line":1745},[74,40024,36412],{"class":9495},[74,40026,131],{"class":80},[74,40028,35757],{"class":134},[74,40030,35747],{"class":84},[74,40032,40033,40035,40037,40039],{"class":76,"line":2540},[74,40034,36423],{"class":9495},[74,40036,131],{"class":80},[74,40038,481],{"class":134},[74,40040,91],{"class":84},[74,40042,40043,40045],{"class":76,"line":2554},[74,40044,4053],{"class":80},[74,40046,36436],{"class":84},[74,40048,40049],{"class":76,"line":2562},[74,40050,2363],{"emptyLinePlaceholder":2362},[74,40052,40053],{"class":76,"line":2567},[74,40054,36445],{"class":144},[74,40056,40057],{"class":76,"line":2573},[74,40058,36450],{"class":144},[74,40060,40061],{"class":76,"line":2579},[74,40062,2363],{"emptyLinePlaceholder":2362},[74,40064,40065],{"class":76,"line":2584},[74,40066,36459],{"class":144},[74,40068,40069,40071,40073],{"class":76,"line":12227},[74,40070,36228],{"class":80},[74,40072,36466],{"class":1925},[74,40074,36469],{"class":84},[74,40076,40077,40079,40081,40083,40085,40087,40089,40091,40093],{"class":76,"line":12251},[74,40078,35518],{"class":84},[74,40080,131],{"class":80},[74,40082,34732],{"class":84},[74,40084,35525],{"class":190},[74,40086,1666],{"class":80},[74,40088,35530],{"class":84},[74,40090,1663],{"class":80},[74,40092,36488],{"class":190},[74,40094,91],{"class":84},[74,40096,40097],{"class":76,"line":12256},[74,40098,2363],{"emptyLinePlaceholder":2362},[74,40100,40101],{"class":76,"line":12262},[74,40102,2363],{"emptyLinePlaceholder":2362},[74,40104,40105],{"class":76,"line":12289},[74,40106,36503],{"class":144},[74,40108,40109],{"class":76,"line":12294},[74,40110,36508],{"class":144},[74,40112,40113],{"class":76,"line":12300},[74,40114,36513],{"class":144},[74,40116,40117,40119,40121,40123,40125,40127,40129],{"class":76,"line":12312},[74,40118,36518],{"class":84},[74,40120,131],{"class":80},[74,40122,36523],{"class":84},[74,40124,36526],{"class":9495},[74,40126,131],{"class":80},[74,40128,36531],{"class":134},[74,40130,91],{"class":84},[74,40132,40133],{"class":76,"line":12324},[74,40134,2363],{"emptyLinePlaceholder":2362},[74,40136,40137],{"class":76,"line":12336},[74,40138,36542],{"class":144},[74,40140,40141,40143,40145],{"class":76,"line":13995},[74,40142,36547],{"class":84},[74,40144,131],{"class":80},[74,40146,36552],{"class":84},[74,40148,40149],{"class":76,"line":14020},[74,40150,2363],{"emptyLinePlaceholder":2362},[74,40152,40153],{"class":76,"line":14043},[74,40154,36561],{"class":144},[74,40156,40157,40159,40161],{"class":76,"line":14067},[74,40158,35570],{"class":84},[74,40160,131],{"class":80},[74,40162,36570],{"class":84},[74,40164,40165],{"class":76,"line":14072},[74,40166,36575],{"class":144},[74,40168,40169],{"class":76,"line":14077},[74,40170,36580],{"class":144},[74,40172,40173],{"class":76,"line":14082},[74,40174,36585],{"class":144},[74,40176,40177,40179,40181],{"class":76,"line":14091},[74,40178,36590],{"class":84},[74,40180,131],{"class":80},[74,40182,36595],{"class":84},[74,40184,40185],{"class":76,"line":14096},[74,40186,2363],{"emptyLinePlaceholder":2362},[74,40188,40189],{"class":76,"line":14102},[74,40190,2363],{"emptyLinePlaceholder":2362},[74,40192,40193],{"class":76,"line":14123},[74,40194,36608],{"class":144},[74,40196,40197],{"class":76,"line":14129},[74,40198,36613],{"class":144},[74,40200,40201,40203,40205],{"class":76,"line":14143},[74,40202,36618],{"class":84},[74,40204,131],{"class":80},[74,40206,36623],{"class":134},[74,40208,40209],{"class":76,"line":14149},[74,40210,36628],{"class":144},[74,40212,40213,40215,40217],{"class":76,"line":14176},[74,40214,36633],{"class":84},[74,40216,131],{"class":80},[74,40218,36638],{"class":84},[74,40220,40221],{"class":76,"line":14185},[74,40222,36643],{"class":144},[74,40224,40225,40227,40229],{"class":76,"line":14191},[74,40226,36648],{"class":84},[74,40228,131],{"class":80},[74,40230,36638],{"class":84},[74,40232,40233],{"class":76,"line":14199},[74,40234,36657],{"class":144},[74,40236,40237,40239,40241],{"class":76,"line":14204},[74,40238,36662],{"class":84},[74,40240,131],{"class":80},[74,40242,36638],{"class":84},[74,40244,40245],{"class":76,"line":20883},[74,40246,36671],{"class":144},[74,40248,40249,40251,40253],{"class":76,"line":20889},[74,40250,36676],{"class":84},[74,40252,131],{"class":80},[74,40254,36638],{"class":84},[74,40256,40257],{"class":76,"line":20912},[74,40258,2363],{"emptyLinePlaceholder":2362},[74,40260,40261],{"class":76,"line":20918},[74,40262,36689],{"class":144},[74,40264,40265,40267,40269],{"class":76,"line":20941},[74,40266,36694],{"class":84},[74,40268,131],{"class":80},[74,40270,36699],{"class":84},[74,40272,40273],{"class":76,"line":20955},[74,40274,2363],{"emptyLinePlaceholder":2362},[74,40276,40277],{"class":76,"line":20975},[74,40278,2363],{"emptyLinePlaceholder":2362},[74,40280,40281],{"class":76,"line":20981},[74,40282,36712],{"class":144},[74,40284,40285,40287,40289,40291,40293],{"class":76,"line":20992},[74,40286,3164],{"class":80},[74,40288,36719],{"class":84},[74,40290,30324],{"class":80},[74,40292,36724],{"class":134},[74,40294,36727],{"class":84},[74,40296,40297,40299,40301,40303,40305,40307,40309,40311,40313,40315,40317],{"class":76,"line":21015},[74,40298,36732],{"class":134},[74,40300,85],{"class":84},[74,40302,36737],{"class":190},[74,40304,36740],{"class":134},[74,40306,670],{"class":190},[74,40308,36740],{"class":134},[74,40310,337],{"class":190},[74,40312,36749],{"class":84},[74,40314,618],{"class":80},[74,40316,303],{"class":134},[74,40318,34778],{"class":84},[74,40320,40321,40323,40325,40327,40329,40331],{"class":76,"line":21037},[74,40322,36732],{"class":134},[74,40324,85],{"class":84},[74,40326,36764],{"class":190},[74,40328,541],{"class":80},[74,40330,532],{"class":134},[74,40332,91],{"class":84},[74,40334,40335],{"class":76,"line":21042},[74,40336,2363],{"emptyLinePlaceholder":2362},[74,40338,40339],{"class":76,"line":21048},[74,40340,36779],{"class":144},[74,40342,40343],{"class":76,"line":21062},[74,40344,36784],{"class":144},[74,40346,40347,40349,40351],{"class":76,"line":21075},[74,40348,36789],{"class":84},[74,40350,131],{"class":80},[74,40352,36623],{"class":134},[74,40354,40355],{"class":76,"line":21080},[74,40356,36798],{"class":144},[74,40358,40359,40361,40363],{"class":76,"line":21094},[74,40360,36803],{"class":84},[74,40362,131],{"class":80},[74,40364,3048],{"class":134},[74,40366,40367],{"class":76,"line":21099},[74,40368,36812],{"class":144},[74,40370,40371,40373,40375],{"class":76,"line":21105},[74,40372,36817],{"class":84},[74,40374,131],{"class":80},[74,40376,36623],{"class":134},[74,40378,40379],{"class":76,"line":21110},[74,40380,36826],{"class":144},[74,40382,40383,40385,40387],{"class":76,"line":21124},[74,40384,36831],{"class":84},[74,40386,131],{"class":80},[74,40388,3048],{"class":134},[74,40390,40391],{"class":76,"line":21129},[74,40392,36840],{"class":144},[74,40394,40395,40397,40399],{"class":76,"line":21134},[74,40396,36845],{"class":84},[74,40398,131],{"class":80},[74,40400,3048],{"class":134},[74,40402,40403],{"class":76,"line":21148},[74,40404,36854],{"class":144},[74,40406,40407,40409,40411],{"class":76,"line":21160},[74,40408,36859],{"class":84},[74,40410,131],{"class":80},[74,40412,3048],{"class":134},[74,40414,40415],{"class":76,"line":21165},[74,40416,36868],{"class":144},[74,40418,40419,40421,40423,40425,40427],{"class":76,"line":21178},[74,40420,3366],{"class":80},[74,40422,35882],{"class":84},[74,40424,30324],{"class":80},[74,40426,35887],{"class":134},[74,40428,36881],{"class":84},[74,40430,40431],{"class":76,"line":21183},[74,40432,36886],{"class":144},[74,40434,40435,40437,40439],{"class":76,"line":21188},[74,40436,36891],{"class":84},[74,40438,131],{"class":80},[74,40440,36896],{"class":84},[74,40442,40443],{"class":76,"line":21193},[74,40444,36901],{"class":144},[74,40446,40447,40449,40451],{"class":76,"line":21206},[74,40448,36906],{"class":84},[74,40450,131],{"class":80},[74,40452,36911],{"class":84},[74,40454,40455],{"class":76,"line":21211},[74,40456,36917],{"class":144},[74,40458,40459],{"class":76,"line":36914},[74,40460,36923],{"class":84},[74,40462,40463],{"class":76,"line":36920},[74,40464,36929],{"class":144},[74,40466,40467],{"class":76,"line":36926},[74,40468,36935],{"class":144},[74,40470,40471,40473,40475],{"class":76,"line":36932},[74,40472,36941],{"class":84},[74,40474,131],{"class":80},[74,40476,36946],{"class":84},[74,40478,40479],{"class":76,"line":36938},[74,40480,36952],{"class":144},[74,40482,40483,40485,40487,40489,40491,40493,40495],{"class":76,"line":36949},[74,40484,36958],{"class":84},[74,40486,131],{"class":80},[74,40488,36963],{"class":84},[74,40490,36966],{"class":9495},[74,40492,131],{"class":80},[74,40494,303],{"class":134},[74,40496,91],{"class":84},[74,40498,40499],{"class":76,"line":36955},[74,40500,36978],{"class":144},[74,40502,40503,40505,40507],{"class":76,"line":36975},[74,40504,36984],{"class":84},[74,40506,131],{"class":80},[74,40508,36989],{"class":84},[74,40510,40511],{"class":76,"line":36981},[74,40512,36995],{"class":144},[74,40514,40515],{"class":76,"line":36992},[74,40516,37001],{"class":84},[74,40518,40519],{"class":76,"line":36998},[74,40520,37007],{"class":144},[74,40522,40523],{"class":76,"line":37004},[74,40524,37013],{"class":84},[74,40526,40527],{"class":76,"line":37010},[74,40528,37019],{"class":144},[74,40530,40531],{"class":76,"line":37016},[74,40532,37025],{"class":84},[74,40534,40535],{"class":76,"line":37022},[74,40536,37031],{"class":144},[74,40538,40539,40541,40543,40545,40547,40549,40551],{"class":76,"line":37028},[74,40540,37037],{"class":84},[74,40542,13756],{"class":80},[74,40544,37042],{"class":84},[74,40546,541],{"class":80},[74,40548,37047],{"class":84},[74,40550,277],{"class":134},[74,40552,91],{"class":84},[74,40554,40555],{"class":76,"line":37034},[74,40556,37057],{"class":144},[74,40558,40559,40561,40563,40565,40567],{"class":76,"line":37054},[74,40560,37063],{"class":84},[74,40562,13756],{"class":80},[74,40564,37068],{"class":84},[74,40566,2912],{"class":80},[74,40568,37073],{"class":84},[74,40570,40571],{"class":76,"line":37060},[74,40572,37079],{"class":144},[74,40574,40575,40577,40579,40581,40583],{"class":76,"line":37076},[74,40576,37085],{"class":84},[74,40578,13756],{"class":80},[74,40580,37047],{"class":84},[74,40582,277],{"class":134},[74,40584,91],{"class":84},[74,40586,40587],{"class":76,"line":37082},[74,40588,37099],{"class":144},[74,40590,40591,40593,40595,40597,40599],{"class":76,"line":37096},[74,40592,3366],{"class":80},[74,40594,37107],{"class":84},[74,40596,30324],{"class":80},[74,40598,35887],{"class":134},[74,40600,37114],{"class":84},[74,40602,40603],{"class":76,"line":37102},[74,40604,37120],{"class":144},[74,40606,40607,40609,40611],{"class":76,"line":37117},[74,40608,36891],{"class":84},[74,40610,131],{"class":80},[74,40612,36896],{"class":84},[74,40614,40615],{"class":76,"line":37123},[74,40616,37135],{"class":144},[74,40618,40619,40621,40623],{"class":76,"line":37132},[74,40620,36906],{"class":84},[74,40622,131],{"class":80},[74,40624,36911],{"class":84},[74,40626,40627],{"class":76,"line":37138},[74,40628,37150],{"class":144},[74,40630,40631],{"class":76,"line":37147},[74,40632,37156],{"class":84},[74,40634,40635],{"class":76,"line":37153},[74,40636,40637],{"class":144},"            # 验证时不计算梯度以节省内存\u002F计算\n",[74,40639,40640,40642],{"class":76,"line":37159},[74,40641,37162],{"class":80},[74,40643,37165],{"class":84},[74,40645,40646],{"class":76,"line":37168},[74,40647,37171],{"class":144},[74,40649,40650,40653,40655],{"class":76,"line":37174},[74,40651,40652],{"class":84},"                output",[74,40654,131],{"class":80},[74,40656,36946],{"class":84},[74,40658,40659],{"class":76,"line":37185},[74,40660,37188],{"class":144},[74,40662,40663,40666,40668,40670,40672,40674,40676],{"class":76,"line":37191},[74,40664,40665],{"class":84},"                pre_lab",[74,40667,131],{"class":80},[74,40669,36963],{"class":84},[74,40671,36966],{"class":9495},[74,40673,131],{"class":80},[74,40675,303],{"class":134},[74,40677,91],{"class":84},[74,40679,40680],{"class":76,"line":37210},[74,40681,37213],{"class":144},[74,40683,40684,40687,40689],{"class":76,"line":37216},[74,40685,40686],{"class":84},"                val_batch_loss",[74,40688,131],{"class":80},[74,40690,36989],{"class":84},[74,40692,40693],{"class":76,"line":37227},[74,40694,37230],{"class":144},[74,40696,40697,40700,40702,40705,40707,40709,40711],{"class":76,"line":37233},[74,40698,40699],{"class":84},"                val_loss",[74,40701,13756],{"class":80},[74,40703,40704],{"class":84},"val_batch_loss.item()",[74,40706,541],{"class":80},[74,40708,37047],{"class":84},[74,40710,277],{"class":134},[74,40712,91],{"class":84},[74,40714,40715,40718,40720,40722,40724],{"class":76,"line":37253},[74,40716,40717],{"class":84},"                val_corrects",[74,40719,13756],{"class":80},[74,40721,37068],{"class":84},[74,40723,2912],{"class":80},[74,40725,37073],{"class":84},[74,40727,40728],{"class":76,"line":37269},[74,40729,40730],{"class":144},"            # 当前用于验证的样本数量\n",[74,40732,40733,40736,40738,40740,40742],{"class":76,"line":37275},[74,40734,40735],{"class":84},"            val_num",[74,40737,13756],{"class":80},[74,40739,37047],{"class":84},[74,40741,277],{"class":134},[74,40743,91],{"class":84},[74,40745,40746],{"class":76,"line":37289},[74,40747,37292],{"class":144},[74,40749,40750],{"class":76,"line":37295},[74,40751,37298],{"class":144},[74,40753,40754,40756,40758],{"class":76,"line":37301},[74,40755,37304],{"class":84},[74,40757,670],{"class":80},[74,40759,37309],{"class":84},[74,40761,40762],{"class":76,"line":37312},[74,40763,37315],{"class":144},[74,40765,40766],{"class":76,"line":37318},[74,40767,37321],{"class":144},[74,40769,40770,40772,40774],{"class":76,"line":37324},[74,40771,37327],{"class":84},[74,40773,670],{"class":80},[74,40775,37309],{"class":84},[74,40777,40778],{"class":76,"line":37334},[74,40779,37337],{"class":144},[74,40781,40782,40784,40786],{"class":76,"line":37340},[74,40783,37343],{"class":84},[74,40785,670],{"class":80},[74,40787,37348],{"class":84},[74,40789,40790],{"class":76,"line":37351},[74,40791,37354],{"class":144},[74,40793,40794,40796,40798],{"class":76,"line":37357},[74,40795,37360],{"class":84},[74,40797,670],{"class":80},[74,40799,37348],{"class":84},[74,40801,40802],{"class":76,"line":37367},[74,40803,2363],{"emptyLinePlaceholder":2362},[74,40805,40806],{"class":76,"line":37372},[74,40807,37375],{"class":144},[74,40809,40810,40812,40814,40816,40818,40820,40822,40824,40826,40828,40830,40832,40834,40836,40838,40840,40842,40844,40846,40848],{"class":76,"line":37378},[74,40811,36732],{"class":134},[74,40813,85],{"class":84},[74,40815,3555],{"class":190},[74,40817,36740],{"class":134},[74,40819,37389],{"class":190},[74,40821,982],{"class":134},[74,40823,37394],{"class":80},[74,40825,1032],{"class":134},[74,40827,37399],{"class":190},[74,40829,982],{"class":134},[74,40831,37394],{"class":80},[74,40833,1032],{"class":134},[74,40835,3555],{"class":190},[74,40837,37410],{"class":84},[74,40839,618],{"class":80},[74,40841,303],{"class":134},[74,40843,37417],{"class":84},[74,40845,618],{"class":80},[74,40847,303],{"class":134},[74,40849,37424],{"class":84},[74,40851,40852,40854,40856,40858,40860,40862,40864,40866,40868,40870,40872,40874,40876,40878,40880,40882,40884,40886,40888,40890],{"class":76,"line":37427},[74,40853,36732],{"class":134},[74,40855,85],{"class":84},[74,40857,3555],{"class":190},[74,40859,36740],{"class":134},[74,40861,37438],{"class":190},[74,40863,982],{"class":134},[74,40865,37394],{"class":80},[74,40867,1032],{"class":134},[74,40869,37447],{"class":190},[74,40871,982],{"class":134},[74,40873,37394],{"class":80},[74,40875,1032],{"class":134},[74,40877,3555],{"class":190},[74,40879,37458],{"class":84},[74,40881,618],{"class":80},[74,40883,303],{"class":134},[74,40885,37465],{"class":84},[74,40887,618],{"class":80},[74,40889,303],{"class":134},[74,40891,37424],{"class":84},[74,40893,40894],{"class":76,"line":37474},[74,40895,2363],{"emptyLinePlaceholder":2362},[74,40897,40898],{"class":76,"line":37479},[74,40899,37482],{"class":144},[74,40901,40902,40904,40906,40908,40910,40912,40914],{"class":76,"line":37485},[74,40903,2460],{"class":80},[74,40905,37490],{"class":84},[74,40907,618],{"class":80},[74,40909,303],{"class":134},[74,40911,1026],{"class":84},[74,40913,1046],{"class":80},[74,40915,37501],{"class":84},[74,40917,40918],{"class":76,"line":37504},[74,40919,37507],{"class":144},[74,40921,40922,40924,40926,40928,40930,40932,40934],{"class":76,"line":37510},[74,40923,37513],{"class":84},[74,40925,125],{"class":134},[74,40927,131],{"class":80},[74,40929,37520],{"class":84},[74,40931,618],{"class":80},[74,40933,303],{"class":134},[74,40935,37527],{"class":84},[74,40937,40938],{"class":76,"line":37530},[74,40939,37533],{"class":144},[74,40941,40942],{"class":76,"line":37536},[74,40943,37539],{"class":144},[74,40945,40946,40948,40950],{"class":76,"line":37542},[74,40947,37545],{"class":84},[74,40949,131],{"class":80},[74,40951,36595],{"class":84},[74,40953,40954],{"class":76,"line":37552},[74,40955,2363],{"emptyLinePlaceholder":2362},[74,40957,40958],{"class":76,"line":37557},[74,40959,37560],{"class":144},[74,40961,40962,40964,40966,40968,40970],{"class":76,"line":37563},[74,40963,37566],{"class":84},[74,40965,131],{"class":80},[74,40967,37571],{"class":84},[74,40969,618],{"class":80},[74,40971,37576],{"class":84},[74,40973,40974,40976,40978,40980,40982,40984,40986,40988,40990,40992,40994,40996,40998,41000,41002,41004,41006,41008],{"class":76,"line":37579},[74,40975,36732],{"class":134},[74,40977,85],{"class":84},[74,40979,37586],{"class":190},[74,40981,982],{"class":134},[74,40983,37591],{"class":80},[74,40985,1032],{"class":134},[74,40987,630],{"class":190},[74,40989,982],{"class":134},[74,40991,37591],{"class":80},[74,40993,1032],{"class":134},[74,40995,37604],{"class":190},[74,40997,37607],{"class":84},[74,40999,37610],{"class":80},[74,41001,993],{"class":134},[74,41003,37615],{"class":84},[74,41005,414],{"class":80},[74,41007,993],{"class":134},[74,41009,34778],{"class":84},[74,41011,41012],{"class":76,"line":37624},[74,41013,41014],{"class":144},"    # 选择最优参数并保存\n",[74,41016,41017],{"class":76,"line":37630},[74,41018,41019],{"class":144},"    # 保存最佳模型权重字典\n",[74,41021,41022,41025,41027],{"class":76,"line":37636},[74,41023,41024],{"class":84},"    torch.save(best_model_wts,",[74,41026,37648],{"class":190},[74,41028,91],{"class":84},[74,41030,41031],{"class":76,"line":37642},[74,41032,37668],{"class":144},[74,41034,41035,41037,41039,41041,41043,41045],{"class":76,"line":37653},[74,41036,37674],{"class":84},[74,41038,131],{"class":80},[74,41040,37679],{"class":84},[74,41042,37682],{"class":9495},[74,41044,131],{"class":80},[74,41046,1508],{"class":84},[74,41048,41049,41051,41053,41055],{"class":76,"line":37659},[74,41050,37692],{"class":190},[74,41052,945],{"class":84},[74,41054,37697],{"class":134},[74,41056,37700],{"class":84},[74,41058,41059,41061],{"class":76,"line":37665},[74,41060,37706],{"class":190},[74,41062,37709],{"class":84},[74,41064,41065,41067],{"class":76,"line":37671},[74,41066,37715],{"class":190},[74,41068,37718],{"class":84},[74,41070,41071,41073],{"class":76,"line":37689},[74,41072,37724],{"class":190},[74,41074,37727],{"class":84},[74,41076,41077,41079],{"class":76,"line":37703},[74,41078,37733],{"class":190},[74,41080,37736],{"class":84},[74,41082,41083],{"class":76,"line":37712},[74,41084,37742],{"class":84},[74,41086,41087],{"class":76,"line":37721},[74,41088,37748],{"class":144},[74,41090,41091,41093],{"class":76,"line":37730},[74,41092,4053],{"class":80},[74,41094,37756],{"class":84},[74,41096,41097],{"class":76,"line":37739},[74,41098,2363],{"emptyLinePlaceholder":2362},[74,41100,41101],{"class":76,"line":37745},[74,41102,37767],{"class":144},[74,41104,41105,41107,41109],{"class":76,"line":37751},[74,41106,36228],{"class":80},[74,41108,37775],{"class":1925},[74,41110,37778],{"class":84},[74,41112,41113],{"class":76,"line":37759},[74,41114,37784],{"class":144},[74,41116,41117,41119,41121,41123,41125,41127,41129,41131],{"class":76,"line":37764},[74,41118,37790],{"class":84},[74,41120,35974],{"class":9495},[74,41122,131],{"class":80},[74,41124,85],{"class":84},[74,41126,584],{"class":134},[74,41128,464],{"class":84},[74,41130,379],{"class":134},[74,41132,34778],{"class":84},[74,41134,41135],{"class":76,"line":37770},[74,41136,37810],{"class":144},[74,41138,41139],{"class":76,"line":37781},[74,41140,37816],{"class":144},[74,41142,41143],{"class":76,"line":37787},[74,41144,37822],{"class":144},[74,41146,41147,41149,41151,41153,41155,41157,41159],{"class":76,"line":37807},[74,41148,36008],{"class":84},[74,41150,303],{"class":134},[74,41152,464],{"class":84},[74,41154,163],{"class":134},[74,41156,464],{"class":84},[74,41158,303],{"class":134},[74,41160,91],{"class":84},[74,41162,41163],{"class":76,"line":37813},[74,41164,37845],{"class":144},[74,41166,41167],{"class":76,"line":37819},[74,41168,37851],{"class":144},[74,41170,41171],{"class":76,"line":37825},[74,41172,37857],{"class":144},[74,41174,41175],{"class":76,"line":37842},[74,41176,37863],{"class":144},[74,41178,41179],{"class":76,"line":37848},[74,41180,37869],{"class":144},[74,41182,41183,41185,41187,41189,41191,41193,41195,41197,41199],{"class":76,"line":37854},[74,41184,37875],{"class":84},[74,41186,37878],{"class":190},[74,41188,37881],{"class":84},[74,41190,37884],{"class":190},[74,41192,464],{"class":84},[74,41194,37889],{"class":9495},[74,41196,131],{"class":80},[74,41198,37894],{"class":190},[74,41200,91],{"class":84},[74,41202,41203,41205,41207,41209,41211,41213,41215,41217,41219],{"class":76,"line":37860},[74,41204,37875],{"class":84},[74,41206,37878],{"class":190},[74,41208,37906],{"class":84},[74,41210,37909],{"class":190},[74,41212,464],{"class":84},[74,41214,37889],{"class":9495},[74,41216,131],{"class":80},[74,41218,37918],{"class":190},[74,41220,91],{"class":84},[74,41222,41223],{"class":76,"line":37866},[74,41224,37926],{"class":144},[74,41226,41227],{"class":76,"line":37872},[74,41228,37932],{"class":84},[74,41230,41231],{"class":76,"line":37899},[74,41232,37938],{"class":144},[74,41234,41235,41237,41239],{"class":76,"line":37923},[74,41236,37944],{"class":84},[74,41238,37947],{"class":190},[74,41240,91],{"class":84},[74,41242,41243,41245,41247],{"class":76,"line":37929},[74,41244,37955],{"class":84},[74,41246,37958],{"class":190},[74,41248,91],{"class":84},[74,41250,41251],{"class":76,"line":37935},[74,41252,37966],{"class":144},[74,41254,41255,41257,41259,41261,41263,41265,41267],{"class":76,"line":37941},[74,41256,36008],{"class":84},[74,41258,303],{"class":134},[74,41260,464],{"class":84},[74,41262,163],{"class":134},[74,41264,464],{"class":84},[74,41266,163],{"class":134},[74,41268,91],{"class":84},[74,41270,41271,41273,41275,41277,41279,41281,41283,41285,41287],{"class":76,"line":37952},[74,41272,37875],{"class":84},[74,41274,37878],{"class":190},[74,41276,37993],{"class":84},[74,41278,37884],{"class":190},[74,41280,464],{"class":84},[74,41282,37889],{"class":9495},[74,41284,131],{"class":80},[74,41286,38004],{"class":190},[74,41288,91],{"class":84},[74,41290,41291,41293,41295,41297,41299,41301,41303,41305,41307],{"class":76,"line":37963},[74,41292,37875],{"class":84},[74,41294,37878],{"class":190},[74,41296,38016],{"class":84},[74,41298,37909],{"class":190},[74,41300,464],{"class":84},[74,41302,37889],{"class":9495},[74,41304,131],{"class":80},[74,41306,38027],{"class":190},[74,41308,91],{"class":84},[74,41310,41311],{"class":76,"line":37969},[74,41312,38035],{"class":144},[74,41314,41315],{"class":76,"line":37986},[74,41316,37932],{"class":84},[74,41318,41319,41321,41323],{"class":76,"line":38009},[74,41320,37944],{"class":84},[74,41322,37878],{"class":190},[74,41324,91],{"class":84},[74,41326,41327,41329,41331],{"class":76,"line":38032},[74,41328,37955],{"class":84},[74,41330,38057],{"class":190},[74,41332,91],{"class":84},[74,41334,41335],{"class":76,"line":38038},[74,41336,38065],{"class":84},[74,41338,41339],{"class":76,"line":38043},[74,41340,2363],{"emptyLinePlaceholder":2362},[74,41342,41343],{"class":76,"line":38052},[74,41344,38076],{"class":144},[74,41346,41347,41349,41351,41353,41355],{"class":76,"line":38062},[74,41348,1493],{"class":80},[74,41350,35501],{"class":134},[74,41352,2912],{"class":80},[74,41354,35506],{"class":190},[74,41356,3702],{"class":84},[74,41358,41359],{"class":76,"line":38068},[74,41360,38095],{"class":144},[74,41362,41363,41366,41368],{"class":76,"line":38073},[74,41364,41365],{"class":84},"    AlexNet",[74,41367,131],{"class":80},[74,41369,41370],{"class":84},"AlexNet()\n",[74,41372,41373,41375,41377],{"class":76,"line":38079},[74,41374,38112],{"class":84},[74,41376,131],{"class":80},[74,41378,38117],{"class":84},[74,41380,41381,41383,41385,41388,41390,41392,41394],{"class":76,"line":38092},[74,41382,37674],{"class":84},[74,41384,131],{"class":80},[74,41386,41387],{"class":84},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[74,41389,38130],{"class":9495},[74,41391,131],{"class":80},[74,41393,786],{"class":134},[74,41395,91],{"class":84},[74,41397,41398],{"class":76,"line":38098},[74,41399,38142],{"class":84},[27,41401,41402],{"start":1141},[30,41403,38155],{},[64,41405,41407],{"className":34659,"code":41406,"language":34661,"meta":69,"style":69},"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",[71,41408,41409,41415,41425,41435,41445,41449,41459,41469,41480,41484,41488,41492,41500,41516,41526,41542,41552,41566,41570,41580,41590,41600,41606,41610,41614,41622,41626,41642,41650,41654,41658,41666,41674,41678,41682,41686,41690,41696,41700,41710,41718,41726,41730,41734,41738,41746,41750,41766,41770,41774,41778,41790,41794,41806,41810,41814,41826,41830,41840,41844,41848,41860,41864,41872,41876,41880,41888,41892,41900,41904,41908,41912,41916,41920,41936,41944,41948,41952,42000,42006,42010,42020,42028,42036,42040,42044,42048,42052,42060,42064,42080,42084,42092,42100],{"__ignoreMap":69},[74,41410,41411,41413],{"class":76,"line":77},[74,41412,34673],{"class":80},[74,41414,34676],{"class":84},[74,41416,41417,41419,41421,41423],{"class":76,"line":94},[74,41418,34673],{"class":80},[74,41420,35696],{"class":84},[74,41422,35664],{"class":80},[74,41424,35701],{"class":84},[74,41426,41427,41429,41431,41433],{"class":76,"line":1141},[74,41428,35018],{"class":80},[74,41430,38183],{"class":84},[74,41432,34673],{"class":80},[74,41434,38188],{"class":84},[74,41436,41437,41439,41441,41443],{"class":76,"line":1156},[74,41438,35018],{"class":80},[74,41440,35679],{"class":84},[74,41442,34673],{"class":80},[74,41444,35684],{"class":84},[74,41446,41447],{"class":76,"line":1162},[74,41448,38203],{"class":144},[74,41450,41451,41453,41455,41457],{"class":76,"line":1176},[74,41452,35018],{"class":80},[74,41454,35649],{"class":84},[74,41456,34673],{"class":80},[74,41458,35654],{"class":84},[74,41460,41461,41463,41465,41467],{"class":76,"line":1182},[74,41462,35018],{"class":80},[74,41464,36195],{"class":84},[74,41466,34673],{"class":80},[74,41468,39838],{"class":84},[74,41470,41471,41473,41476,41478],{"class":76,"line":1273},[74,41472,35018],{"class":80},[74,41474,41475],{"class":84}," 练习.AlexNet.model ",[74,41477,34673],{"class":80},[74,41479,39838],{"class":84},[74,41481,41482],{"class":76,"line":1279},[74,41483,2363],{"emptyLinePlaceholder":2362},[74,41485,41486],{"class":76,"line":1291},[74,41487,2363],{"emptyLinePlaceholder":2362},[74,41489,41490],{"class":76,"line":1574},[74,41491,38232],{"class":144},[74,41493,41494,41496,41498],{"class":76,"line":1579},[74,41495,36228],{"class":80},[74,41497,38239],{"class":1925},[74,41499,36234],{"class":84},[74,41501,41502,41504,41506,41508,41510,41512,41514],{"class":76,"line":1585},[74,41503,38246],{"class":84},[74,41505,131],{"class":80},[74,41507,35736],{"class":84},[74,41509,35739],{"class":9495},[74,41511,131],{"class":80},[74,41513,35744],{"class":190},[74,41515,35747],{"class":84},[74,41517,41518,41520,41522,41524],{"class":76,"line":1590},[74,41519,38263],{"class":9495},[74,41521,131],{"class":80},[74,41523,38268],{"class":134},[74,41525,35747],{"class":84},[74,41527,41528,41530,41532,41534,41536,41538,41540],{"class":76,"line":1604},[74,41529,38275],{"class":9495},[74,41531,131],{"class":80},[74,41533,35774],{"class":84},[74,41535,35777],{"class":9495},[74,41537,131],{"class":80},[74,41539,39730],{"class":134},[74,41541,35785],{"class":84},[74,41543,41544,41546,41548,41550],{"class":76,"line":1609},[74,41545,38292],{"class":9495},[74,41547,131],{"class":80},[74,41549,35757],{"class":134},[74,41551,91],{"class":84},[74,41553,41554,41556,41558,41560,41562,41564],{"class":76,"line":1615},[74,41555,38303],{"class":84},[74,41557,131],{"class":80},[74,41559,35815],{"class":84},[74,41561,35818],{"class":9495},[74,41563,131],{"class":80},[74,41565,38314],{"class":84},[74,41567,41568],{"class":76,"line":1636},[74,41569,38319],{"class":144},[74,41571,41572,41574,41576,41578],{"class":76,"line":1641},[74,41573,38324],{"class":9495},[74,41575,131],{"class":80},[74,41577,303],{"class":134},[74,41579,35747],{"class":84},[74,41581,41582,41584,41586,41588],{"class":76,"line":1655},[74,41583,38335],{"class":9495},[74,41585,131],{"class":80},[74,41587,35757],{"class":134},[74,41589,35747],{"class":84},[74,41591,41592,41594,41596,41598],{"class":76,"line":1660},[74,41593,38346],{"class":9495},[74,41595,131],{"class":80},[74,41597,277],{"class":134},[74,41599,91],{"class":84},[74,41601,41602,41604],{"class":76,"line":1689},[74,41603,4053],{"class":80},[74,41605,38359],{"class":84},[74,41607,41608],{"class":76,"line":1694},[74,41609,2363],{"emptyLinePlaceholder":2362},[74,41611,41612],{"class":76,"line":1711},[74,41613,38368],{"class":144},[74,41615,41616,41618,41620],{"class":76,"line":1716},[74,41617,36228],{"class":80},[74,41619,38375],{"class":1925},[74,41621,38378],{"class":84},[74,41623,41624],{"class":76,"line":1721},[74,41625,38383],{"class":144},[74,41627,41628,41630,41632,41634,41636,41638,41640],{"class":76,"line":1726},[74,41629,35518],{"class":84},[74,41631,131],{"class":80},[74,41633,35525],{"class":190},[74,41635,1666],{"class":80},[74,41637,35530],{"class":84},[74,41639,1663],{"class":80},[74,41641,38400],{"class":190},[74,41643,41644,41646,41648],{"class":76,"line":1740},[74,41645,35570],{"class":84},[74,41647,131],{"class":80},[74,41649,36570],{"class":84},[74,41651,41652],{"class":76,"line":1745},[74,41653,2363],{"emptyLinePlaceholder":2362},[74,41655,41656],{"class":76,"line":2540},[74,41657,38417],{"class":144},[74,41659,41660,41662,41664],{"class":76,"line":2554},[74,41661,38422],{"class":84},[74,41663,131],{"class":80},[74,41665,36623],{"class":134},[74,41667,41668,41670,41672],{"class":76,"line":2562},[74,41669,38431],{"class":84},[74,41671,131],{"class":80},[74,41673,3048],{"class":134},[74,41675,41676],{"class":76,"line":2567},[74,41677,2363],{"emptyLinePlaceholder":2362},[74,41679,41680],{"class":76,"line":2573},[74,41681,38444],{"class":144},[74,41683,41684],{"class":76,"line":2579},[74,41685,38449],{"class":144},[74,41687,41688],{"class":76,"line":2584},[74,41689,38454],{"class":144},[74,41691,41692,41694],{"class":76,"line":12227},[74,41693,38459],{"class":80},[74,41695,37165],{"class":84},[74,41697,41698],{"class":76,"line":12251},[74,41699,38466],{"class":144},[74,41701,41702,41704,41706,41708],{"class":76,"line":12256},[74,41703,3366],{"class":80},[74,41705,38473],{"class":84},[74,41707,30324],{"class":80},[74,41709,38478],{"class":84},[74,41711,41712,41714,41716],{"class":76,"line":12262},[74,41713,38483],{"class":84},[74,41715,131],{"class":80},[74,41717,38488],{"class":84},[74,41719,41720,41722,41724],{"class":76,"line":12289},[74,41721,38493],{"class":84},[74,41723,131],{"class":80},[74,41725,38498],{"class":84},[74,41727,41728],{"class":76,"line":12294},[74,41729,38503],{"class":144},[74,41731,41732],{"class":76,"line":12300},[74,41733,37156],{"class":84},[74,41735,41736],{"class":76,"line":12312},[74,41737,38512],{"class":144},[74,41739,41740,41742,41744],{"class":76,"line":12324},[74,41741,36941],{"class":84},[74,41743,131],{"class":80},[74,41745,38521],{"class":84},[74,41747,41748],{"class":76,"line":12336},[74,41749,38526],{"class":144},[74,41751,41752,41754,41756,41758,41760,41762,41764],{"class":76,"line":13995},[74,41753,36958],{"class":84},[74,41755,131],{"class":80},[74,41757,36963],{"class":84},[74,41759,36966],{"class":9495},[74,41761,131],{"class":80},[74,41763,303],{"class":134},[74,41765,91],{"class":84},[74,41767,41768],{"class":76,"line":14020},[74,41769,38547],{"class":144},[74,41771,41772],{"class":76,"line":14043},[74,41773,38552],{"class":144},[74,41775,41776],{"class":76,"line":14067},[74,41777,38557],{"class":144},[74,41779,41780,41782,41784,41786,41788],{"class":76,"line":14072},[74,41781,38562],{"class":84},[74,41783,13756],{"class":80},[74,41785,37068],{"class":84},[74,41787,2912],{"class":80},[74,41789,38571],{"class":84},[74,41791,41792],{"class":76,"line":14077},[74,41793,38576],{"class":144},[74,41795,41796,41798,41800,41802,41804],{"class":76,"line":14082},[74,41797,38581],{"class":84},[74,41799,13756],{"class":80},[74,41801,38586],{"class":84},[74,41803,277],{"class":134},[74,41805,91],{"class":84},[74,41807,41808],{"class":76,"line":14091},[74,41809,2363],{"emptyLinePlaceholder":2362},[74,41811,41812],{"class":76,"line":14096},[74,41813,38599],{"class":144},[74,41815,41816,41818,41820,41822,41824],{"class":76,"line":14102},[74,41817,38604],{"class":84},[74,41819,131],{"class":80},[74,41821,38609],{"class":84},[74,41823,670],{"class":80},[74,41825,38614],{"class":84},[74,41827,41828],{"class":76,"line":14123},[74,41829,38619],{"class":144},[74,41831,41832,41834,41836,41838],{"class":76,"line":14129},[74,41833,36732],{"class":134},[74,41835,85],{"class":84},[74,41837,38628],{"class":190},[74,41839,38631],{"class":84},[74,41841,41842],{"class":76,"line":14143},[74,41843,2363],{"emptyLinePlaceholder":2362},[74,41845,41846],{"class":76,"line":14149},[74,41847,38640],{"class":144},[74,41849,41850,41852,41854,41856,41858],{"class":76,"line":14176},[74,41851,1493],{"class":80},[74,41853,35501],{"class":134},[74,41855,2912],{"class":80},[74,41857,35506],{"class":190},[74,41859,3702],{"class":84},[74,41861,41862],{"class":76,"line":14185},[74,41863,38657],{"class":144},[74,41865,41866,41868,41870],{"class":76,"line":14191},[74,41867,35570],{"class":84},[74,41869,131],{"class":80},[74,41871,41370],{"class":84},[74,41873,41874],{"class":76,"line":14199},[74,41875,38670],{"class":144},[74,41877,41878],{"class":76,"line":14204},[74,41879,38675],{"class":144},[74,41881,41882,41884,41886],{"class":76,"line":20883},[74,41883,38680],{"class":84},[74,41885,38683],{"class":190},[74,41887,34778],{"class":84},[74,41889,41890],{"class":76,"line":20889},[74,41891,38690],{"class":144},[74,41893,41894,41896,41898],{"class":76,"line":20912},[74,41895,38303],{"class":84},[74,41897,131],{"class":80},[74,41899,38699],{"class":84},[74,41901,41902],{"class":76,"line":20918},[74,41903,38704],{"class":144},[74,41905,41906],{"class":76,"line":20941},[74,41907,38709],{"class":84},[74,41909,41910],{"class":76,"line":20955},[74,41911,2363],{"emptyLinePlaceholder":2362},[74,41913,41914],{"class":76,"line":20975},[74,41915,38718],{"class":144},[74,41917,41918],{"class":76,"line":20981},[74,41919,38723],{"class":144},[74,41921,41922,41924,41926,41928,41930,41932,41934],{"class":76,"line":20992},[74,41923,35518],{"class":84},[74,41925,131],{"class":80},[74,41927,35525],{"class":190},[74,41929,1666],{"class":80},[74,41931,35530],{"class":84},[74,41933,1663],{"class":80},[74,41935,38400],{"class":190},[74,41937,41938,41940,41942],{"class":76,"line":21015},[74,41939,35570],{"class":84},[74,41941,131],{"class":80},[74,41943,36570],{"class":84},[74,41945,41946],{"class":76,"line":21037},[74,41947,38752],{"class":144},[74,41949,41950],{"class":76,"line":21042},[74,41951,38757],{"class":144},[74,41953,41954,41956,41958,41960,41962,41964,41966,41968,41970,41972,41974,41976,41978,41980,41982,41984,41986,41988,41990,41992,41994,41996,41998],{"class":76,"line":21048},[74,41955,38762],{"class":84},[74,41957,131],{"class":80},[74,41959,976],{"class":84},[74,41961,38769],{"class":190},[74,41963,464],{"class":84},[74,41965,38774],{"class":190},[74,41967,464],{"class":84},[74,41969,38779],{"class":190},[74,41971,464],{"class":84},[74,41973,38784],{"class":190},[74,41975,464],{"class":84},[74,41977,38789],{"class":190},[74,41979,464],{"class":84},[74,41981,38794],{"class":190},[74,41983,464],{"class":84},[74,41985,38799],{"class":190},[74,41987,464],{"class":84},[74,41989,38804],{"class":190},[74,41991,464],{"class":84},[74,41993,38809],{"class":190},[74,41995,464],{"class":84},[74,41997,38814],{"class":190},[74,41999,37527],{"class":84},[74,42001,42002,42004],{"class":76,"line":21062},[74,42003,38459],{"class":80},[74,42005,37165],{"class":84},[74,42007,42008],{"class":76,"line":21075},[74,42009,38827],{"class":144},[74,42011,42012,42014,42016,42018],{"class":76,"line":21080},[74,42013,3366],{"class":80},[74,42015,38834],{"class":84},[74,42017,30324],{"class":80},[74,42019,38478],{"class":84},[74,42021,42022,42024,42026],{"class":76,"line":21094},[74,42023,36891],{"class":84},[74,42025,131],{"class":80},[74,42027,36896],{"class":84},[74,42029,42030,42032,42034],{"class":76,"line":21099},[74,42031,36906],{"class":84},[74,42033,131],{"class":80},[74,42035,36911],{"class":84},[74,42037,42038],{"class":76,"line":21105},[74,42039,2363],{"emptyLinePlaceholder":2362},[74,42041,42042],{"class":76,"line":21110},[74,42043,38863],{"class":144},[74,42045,42046],{"class":76,"line":21124},[74,42047,37156],{"class":84},[74,42049,42050],{"class":76,"line":21129},[74,42051,38872],{"class":144},[74,42053,42054,42056,42058],{"class":76,"line":21134},[74,42055,36941],{"class":84},[74,42057,131],{"class":80},[74,42059,36946],{"class":84},[74,42061,42062],{"class":76,"line":21148},[74,42063,38885],{"class":144},[74,42065,42066,42068,42070,42072,42074,42076,42078],{"class":76,"line":21160},[74,42067,36958],{"class":84},[74,42069,131],{"class":80},[74,42071,36963],{"class":84},[74,42073,36966],{"class":9495},[74,42075,131],{"class":80},[74,42077,303],{"class":134},[74,42079,91],{"class":84},[74,42081,42082],{"class":76,"line":21165},[74,42083,38906],{"class":144},[74,42085,42086,42088,42090],{"class":76,"line":21178},[74,42087,38911],{"class":84},[74,42089,131],{"class":80},[74,42091,38916],{"class":84},[74,42093,42094,42096,42098],{"class":76,"line":21183},[74,42095,38921],{"class":84},[74,42097,131],{"class":80},[74,42099,38926],{"class":84},[74,42101,42102,42104,42106,42108,42110,42112,42114,42116],{"class":76,"line":21188},[74,42103,38931],{"class":134},[74,42105,85],{"class":84},[74,42107,38936],{"class":190},[74,42109,38939],{"class":84},[74,42111,38942],{"class":190},[74,42113,464],{"class":84},[74,42115,38947],{"class":190},[74,42117,38950],{"class":84},[44,42119,42121],{"id":42120},"_22vgg","2.2.VGG",[26277,42123,42125],{"id":42124},"_221原理","2.2.1.原理",[19,42127,42128],{},[1424,42129],{"alt":69,"src":42130},"\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",[19,42132,42133],{},[1424,42134],{"alt":69,"src":42135},"\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",[19,42137,42138],{},[1424,42139],{"alt":69,"src":42140},"\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",[19,42142,42143],{},"参数详细描述：",[19,42145,42146],{},[1424,42147],{"alt":69,"src":42148},"\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",[19,42150,42151],{},[1424,42152],{"alt":69,"src":42153},"\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",[19,42155,42156],{},[1424,42157],{"alt":69,"src":42158},"\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",[19,42160,42161],{},[1424,42162],{"alt":69,"src":42163},"\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",[19,42165,42166],{},[1424,42167],{"alt":69,"src":42168},"\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",[26277,42170,42172],{"id":42171},"_222代码实现","2.2.2.代码实现",[27,42174,42175],{},[30,42176,42177],{},"网络搭建",[64,42179,42181],{"className":34659,"code":42180,"language":34661,"meta":69,"style":69},"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",[71,42182,42183,42189,42201,42211,42221,42225,42242,42250,42269,42274,42279,42291,42329,42334,42370,42374,42403,42408,42413,42424,42460,42464,42500,42504,42532,42536,42541,42552,42588,42592,42628,42632,42668,42672,42700,42704,42709,42720,42757,42761,42797,42801,42837,42841,42869,42873,42878,42889,42925,42929,42965,42969,43005,43009,43037,43041,43046,43057,43062,43067,43072,43093,43097,43109,43113,43125,43129,43133,43138,43143,43158,43163,43173,43178,43193,43198,43217,43222,43231,43236,43246,43251,43256,43270,43275,43289,43297,43301,43305,43313,43324,43335,43346,43357,43368,43379,43385,43389,43394,43407,43427,43433,43442],{"__ignoreMap":69},[74,42184,42185,42187],{"class":76,"line":77},[74,42186,34673],{"class":80},[74,42188,34676],{"class":84},[74,42190,42191,42193,42196,42198],{"class":76,"line":94},[74,42192,35018],{"class":80},[74,42194,42195],{"class":84}," sympy.core.sympify ",[74,42197,34673],{"class":80},[74,42199,42200],{"class":84}," kernS\n",[74,42202,42203,42205,42207,42209],{"class":76,"line":1141},[74,42204,35018],{"class":80},[74,42206,35021],{"class":84},[74,42208,34673],{"class":80},[74,42210,35026],{"class":84},[74,42212,42213,42215,42217,42219],{"class":76,"line":1156},[74,42214,35018],{"class":80},[74,42216,35038],{"class":84},[74,42218,34673],{"class":80},[74,42220,35043],{"class":84},[74,42222,42223],{"class":76,"line":1162},[74,42224,2363],{"emptyLinePlaceholder":2362},[74,42226,42227,42229,42232,42234,42236,42238,42240],{"class":76,"line":1176},[74,42228,18973],{"class":80},[74,42230,42231],{"class":1925}," VGG16",[74,42233,85],{"class":84},[74,42235,35059],{"class":1925},[74,42237,644],{"class":84},[74,42239,35064],{"class":1925},[74,42241,35067],{"class":84},[74,42243,42244,42246,42248],{"class":76,"line":1182},[74,42245,35082],{"class":80},[74,42247,35085],{"class":134},[74,42249,35088],{"class":84},[74,42251,42252,42254,42256,42259,42261,42263,42265,42267],{"class":76,"line":1273},[74,42253,35098],{"class":134},[74,42255,85],{"class":84},[74,42257,42258],{"class":134},"VGG16",[74,42260,16714],{"class":84},[74,42262,35104],{"class":134},[74,42264,35107],{"class":84},[74,42266,35110],{"class":134},[74,42268,1938],{"class":84},[74,42270,42271],{"class":76,"line":1279},[74,42272,42273],{"class":144},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[74,42275,42276],{"class":76,"line":1291},[74,42277,42278],{"class":144},"        # 这里用的是灰度图\n",[74,42280,42281,42283,42286,42288],{"class":76,"line":1574},[74,42282,35126],{"class":134},[74,42284,42285],{"class":84},".block1",[74,42287,131],{"class":80},[74,42289,42290],{"class":84},"nn.Sequential(\n",[74,42292,42293,42296,42298,42300,42302,42304,42306,42308,42310,42312,42314,42316,42318,42320,42322,42324,42326],{"class":76,"line":1579},[74,42294,42295],{"class":84},"            nn.Conv2d(",[74,42297,35137],{"class":9495},[74,42299,131],{"class":80},[74,42301,303],{"class":134},[74,42303,464],{"class":84},[74,42305,35146],{"class":9495},[74,42307,131],{"class":80},[74,42309,289],{"class":134},[74,42311,464],{"class":84},[74,42313,35155],{"class":9495},[74,42315,131],{"class":80},[74,42317,157],{"class":134},[74,42319,464],{"class":84},[74,42321,35164],{"class":9495},[74,42323,131],{"class":80},[74,42325,303],{"class":134},[74,42327,42328],{"class":84},"),\n",[74,42330,42331],{"class":76,"line":1585},[74,42332,42333],{"class":84},"            nn.ReLU(),\n",[74,42335,42336,42338,42340,42342,42344,42346,42348,42350,42352,42354,42356,42358,42360,42362,42364,42366,42368],{"class":76,"line":1590},[74,42337,42295],{"class":84},[74,42339,35137],{"class":9495},[74,42341,131],{"class":80},[74,42343,289],{"class":134},[74,42345,464],{"class":84},[74,42347,35146],{"class":9495},[74,42349,131],{"class":80},[74,42351,289],{"class":134},[74,42353,464],{"class":84},[74,42355,35155],{"class":9495},[74,42357,131],{"class":80},[74,42359,157],{"class":134},[74,42361,464],{"class":84},[74,42363,35164],{"class":9495},[74,42365,131],{"class":80},[74,42367,303],{"class":134},[74,42369,42328],{"class":84},[74,42371,42372],{"class":76,"line":1604},[74,42373,42333],{"class":84},[74,42375,42376,42379,42381,42383,42385,42387,42389,42391,42393,42395,42397,42399,42401],{"class":76,"line":1609},[74,42377,42378],{"class":84},"            nn.MaxPool2d(",[74,42380,35155],{"class":9495},[74,42382,131],{"class":80},[74,42384,163],{"class":134},[74,42386,464],{"class":84},[74,42388,35210],{"class":9495},[74,42390,131],{"class":80},[74,42392,163],{"class":134},[74,42394,464],{"class":84},[74,42396,35164],{"class":9495},[74,42398,131],{"class":80},[74,42400,277],{"class":134},[74,42402,91],{"class":84},[74,42404,42405],{"class":76,"line":1615},[74,42406,42407],{"class":84},"        )\n",[74,42409,42410],{"class":76,"line":1636},[74,42411,42412],{"class":144},"        # 第二层\n",[74,42414,42415,42417,42420,42422],{"class":76,"line":1641},[74,42416,35126],{"class":134},[74,42418,42419],{"class":84},".block2",[74,42421,131],{"class":80},[74,42423,42290],{"class":84},[74,42425,42426,42428,42430,42432,42434,42436,42438,42440,42442,42444,42446,42448,42450,42452,42454,42456,42458],{"class":76,"line":1655},[74,42427,42295],{"class":84},[74,42429,35137],{"class":9495},[74,42431,131],{"class":80},[74,42433,289],{"class":134},[74,42435,464],{"class":84},[74,42437,35146],{"class":9495},[74,42439,131],{"class":80},[74,42441,36351],{"class":134},[74,42443,464],{"class":84},[74,42445,35155],{"class":9495},[74,42447,131],{"class":80},[74,42449,157],{"class":134},[74,42451,464],{"class":84},[74,42453,35164],{"class":9495},[74,42455,131],{"class":80},[74,42457,303],{"class":134},[74,42459,42328],{"class":84},[74,42461,42462],{"class":76,"line":1660},[74,42463,42333],{"class":84},[74,42465,42466,42468,42470,42472,42474,42476,42478,42480,42482,42484,42486,42488,42490,42492,42494,42496,42498],{"class":76,"line":1689},[74,42467,42295],{"class":84},[74,42469,35137],{"class":9495},[74,42471,131],{"class":80},[74,42473,36351],{"class":134},[74,42475,464],{"class":84},[74,42477,35146],{"class":9495},[74,42479,131],{"class":80},[74,42481,36351],{"class":134},[74,42483,464],{"class":84},[74,42485,35155],{"class":9495},[74,42487,131],{"class":80},[74,42489,157],{"class":134},[74,42491,464],{"class":84},[74,42493,35164],{"class":9495},[74,42495,131],{"class":80},[74,42497,303],{"class":134},[74,42499,42328],{"class":84},[74,42501,42502],{"class":76,"line":1694},[74,42503,42333],{"class":84},[74,42505,42506,42508,42510,42512,42514,42516,42518,42520,42522,42524,42526,42528,42530],{"class":76,"line":1711},[74,42507,42378],{"class":84},[74,42509,35155],{"class":9495},[74,42511,131],{"class":80},[74,42513,163],{"class":134},[74,42515,464],{"class":84},[74,42517,35210],{"class":9495},[74,42519,131],{"class":80},[74,42521,163],{"class":134},[74,42523,464],{"class":84},[74,42525,35164],{"class":9495},[74,42527,131],{"class":80},[74,42529,277],{"class":134},[74,42531,91],{"class":84},[74,42533,42534],{"class":76,"line":1716},[74,42535,42407],{"class":84},[74,42537,42538],{"class":76,"line":1721},[74,42539,42540],{"class":144},"        # 第三层\n",[74,42542,42543,42545,42548,42550],{"class":76,"line":1726},[74,42544,35126],{"class":134},[74,42546,42547],{"class":84},".block3",[74,42549,131],{"class":80},[74,42551,42290],{"class":84},[74,42553,42554,42556,42558,42560,42562,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586],{"class":76,"line":1740},[74,42555,42295],{"class":84},[74,42557,35137],{"class":9495},[74,42559,131],{"class":80},[74,42561,36351],{"class":134},[74,42563,464],{"class":84},[74,42565,35146],{"class":9495},[74,42567,131],{"class":80},[74,42569,39151],{"class":134},[74,42571,464],{"class":84},[74,42573,35155],{"class":9495},[74,42575,131],{"class":80},[74,42577,157],{"class":134},[74,42579,464],{"class":84},[74,42581,35164],{"class":9495},[74,42583,131],{"class":80},[74,42585,303],{"class":134},[74,42587,42328],{"class":84},[74,42589,42590],{"class":76,"line":1745},[74,42591,42333],{"class":84},[74,42593,42594,42596,42598,42600,42602,42604,42606,42608,42610,42612,42614,42616,42618,42620,42622,42624,42626],{"class":76,"line":2540},[74,42595,42295],{"class":84},[74,42597,35137],{"class":9495},[74,42599,131],{"class":80},[74,42601,39151],{"class":134},[74,42603,464],{"class":84},[74,42605,35146],{"class":9495},[74,42607,131],{"class":80},[74,42609,39151],{"class":134},[74,42611,464],{"class":84},[74,42613,35155],{"class":9495},[74,42615,131],{"class":80},[74,42617,157],{"class":134},[74,42619,464],{"class":84},[74,42621,35164],{"class":9495},[74,42623,131],{"class":80},[74,42625,303],{"class":134},[74,42627,42328],{"class":84},[74,42629,42630],{"class":76,"line":2554},[74,42631,42333],{"class":84},[74,42633,42634,42636,42638,42640,42642,42644,42646,42648,42650,42652,42654,42656,42658,42660,42662,42664,42666],{"class":76,"line":2562},[74,42635,42295],{"class":84},[74,42637,35137],{"class":9495},[74,42639,131],{"class":80},[74,42641,39151],{"class":134},[74,42643,464],{"class":84},[74,42645,35146],{"class":9495},[74,42647,131],{"class":80},[74,42649,39151],{"class":134},[74,42651,464],{"class":84},[74,42653,35155],{"class":9495},[74,42655,131],{"class":80},[74,42657,157],{"class":134},[74,42659,464],{"class":84},[74,42661,35164],{"class":9495},[74,42663,131],{"class":80},[74,42665,303],{"class":134},[74,42667,42328],{"class":84},[74,42669,42670],{"class":76,"line":2567},[74,42671,42333],{"class":84},[74,42673,42674,42676,42678,42680,42682,42684,42686,42688,42690,42692,42694,42696,42698],{"class":76,"line":2573},[74,42675,42378],{"class":84},[74,42677,35155],{"class":9495},[74,42679,131],{"class":80},[74,42681,163],{"class":134},[74,42683,464],{"class":84},[74,42685,35210],{"class":9495},[74,42687,131],{"class":80},[74,42689,163],{"class":134},[74,42691,464],{"class":84},[74,42693,35164],{"class":9495},[74,42695,131],{"class":80},[74,42697,277],{"class":134},[74,42699,91],{"class":84},[74,42701,42702],{"class":76,"line":2579},[74,42703,42407],{"class":84},[74,42705,42706],{"class":76,"line":2584},[74,42707,42708],{"class":144},"        # 第四层\n",[74,42710,42711,42713,42716,42718],{"class":76,"line":12227},[74,42712,35126],{"class":134},[74,42714,42715],{"class":84},".block4",[74,42717,131],{"class":80},[74,42719,42290],{"class":84},[74,42721,42722,42724,42726,42728,42730,42732,42734,42736,42739,42741,42743,42745,42747,42749,42751,42753,42755],{"class":76,"line":12251},[74,42723,42295],{"class":84},[74,42725,35137],{"class":9495},[74,42727,131],{"class":80},[74,42729,39151],{"class":134},[74,42731,464],{"class":84},[74,42733,35146],{"class":9495},[74,42735,131],{"class":80},[74,42737,42738],{"class":134},"512",[74,42740,464],{"class":84},[74,42742,35155],{"class":9495},[74,42744,131],{"class":80},[74,42746,157],{"class":134},[74,42748,464],{"class":84},[74,42750,35164],{"class":9495},[74,42752,131],{"class":80},[74,42754,303],{"class":134},[74,42756,42328],{"class":84},[74,42758,42759],{"class":76,"line":12256},[74,42760,42333],{"class":84},[74,42762,42763,42765,42767,42769,42771,42773,42775,42777,42779,42781,42783,42785,42787,42789,42791,42793,42795],{"class":76,"line":12262},[74,42764,42295],{"class":84},[74,42766,35137],{"class":9495},[74,42768,131],{"class":80},[74,42770,42738],{"class":134},[74,42772,464],{"class":84},[74,42774,35146],{"class":9495},[74,42776,131],{"class":80},[74,42778,42738],{"class":134},[74,42780,464],{"class":84},[74,42782,35155],{"class":9495},[74,42784,131],{"class":80},[74,42786,157],{"class":134},[74,42788,464],{"class":84},[74,42790,35164],{"class":9495},[74,42792,131],{"class":80},[74,42794,303],{"class":134},[74,42796,42328],{"class":84},[74,42798,42799],{"class":76,"line":12289},[74,42800,42333],{"class":84},[74,42802,42803,42805,42807,42809,42811,42813,42815,42817,42819,42821,42823,42825,42827,42829,42831,42833,42835],{"class":76,"line":12294},[74,42804,42295],{"class":84},[74,42806,35137],{"class":9495},[74,42808,131],{"class":80},[74,42810,42738],{"class":134},[74,42812,464],{"class":84},[74,42814,35146],{"class":9495},[74,42816,131],{"class":80},[74,42818,42738],{"class":134},[74,42820,464],{"class":84},[74,42822,35155],{"class":9495},[74,42824,131],{"class":80},[74,42826,157],{"class":134},[74,42828,464],{"class":84},[74,42830,35164],{"class":9495},[74,42832,131],{"class":80},[74,42834,303],{"class":134},[74,42836,42328],{"class":84},[74,42838,42839],{"class":76,"line":12300},[74,42840,42333],{"class":84},[74,42842,42843,42845,42847,42849,42851,42853,42855,42857,42859,42861,42863,42865,42867],{"class":76,"line":12312},[74,42844,42378],{"class":84},[74,42846,35155],{"class":9495},[74,42848,131],{"class":80},[74,42850,163],{"class":134},[74,42852,464],{"class":84},[74,42854,35210],{"class":9495},[74,42856,131],{"class":80},[74,42858,163],{"class":134},[74,42860,464],{"class":84},[74,42862,35164],{"class":9495},[74,42864,131],{"class":80},[74,42866,277],{"class":134},[74,42868,91],{"class":84},[74,42870,42871],{"class":76,"line":12324},[74,42872,42407],{"class":84},[74,42874,42875],{"class":76,"line":12336},[74,42876,42877],{"class":144},"        # 第五层\n",[74,42879,42880,42882,42885,42887],{"class":76,"line":13995},[74,42881,35126],{"class":134},[74,42883,42884],{"class":84},".block5",[74,42886,131],{"class":80},[74,42888,42290],{"class":84},[74,42890,42891,42893,42895,42897,42899,42901,42903,42905,42907,42909,42911,42913,42915,42917,42919,42921,42923],{"class":76,"line":14020},[74,42892,42295],{"class":84},[74,42894,35137],{"class":9495},[74,42896,131],{"class":80},[74,42898,42738],{"class":134},[74,42900,464],{"class":84},[74,42902,35146],{"class":9495},[74,42904,131],{"class":80},[74,42906,42738],{"class":134},[74,42908,464],{"class":84},[74,42910,35155],{"class":9495},[74,42912,131],{"class":80},[74,42914,157],{"class":134},[74,42916,464],{"class":84},[74,42918,35164],{"class":9495},[74,42920,131],{"class":80},[74,42922,303],{"class":134},[74,42924,42328],{"class":84},[74,42926,42927],{"class":76,"line":14043},[74,42928,42333],{"class":84},[74,42930,42931,42933,42935,42937,42939,42941,42943,42945,42947,42949,42951,42953,42955,42957,42959,42961,42963],{"class":76,"line":14067},[74,42932,42295],{"class":84},[74,42934,35137],{"class":9495},[74,42936,131],{"class":80},[74,42938,42738],{"class":134},[74,42940,464],{"class":84},[74,42942,35146],{"class":9495},[74,42944,131],{"class":80},[74,42946,42738],{"class":134},[74,42948,464],{"class":84},[74,42950,35155],{"class":9495},[74,42952,131],{"class":80},[74,42954,157],{"class":134},[74,42956,464],{"class":84},[74,42958,35164],{"class":9495},[74,42960,131],{"class":80},[74,42962,303],{"class":134},[74,42964,42328],{"class":84},[74,42966,42967],{"class":76,"line":14072},[74,42968,42333],{"class":84},[74,42970,42971,42973,42975,42977,42979,42981,42983,42985,42987,42989,42991,42993,42995,42997,42999,43001,43003],{"class":76,"line":14077},[74,42972,42295],{"class":84},[74,42974,35137],{"class":9495},[74,42976,131],{"class":80},[74,42978,42738],{"class":134},[74,42980,464],{"class":84},[74,42982,35146],{"class":9495},[74,42984,131],{"class":80},[74,42986,42738],{"class":134},[74,42988,464],{"class":84},[74,42990,35155],{"class":9495},[74,42992,131],{"class":80},[74,42994,157],{"class":134},[74,42996,464],{"class":84},[74,42998,35164],{"class":9495},[74,43000,131],{"class":80},[74,43002,303],{"class":134},[74,43004,42328],{"class":84},[74,43006,43007],{"class":76,"line":14082},[74,43008,42333],{"class":84},[74,43010,43011,43013,43015,43017,43019,43021,43023,43025,43027,43029,43031,43033,43035],{"class":76,"line":14091},[74,43012,42378],{"class":84},[74,43014,35155],{"class":9495},[74,43016,131],{"class":80},[74,43018,163],{"class":134},[74,43020,464],{"class":84},[74,43022,35210],{"class":9495},[74,43024,131],{"class":80},[74,43026,163],{"class":134},[74,43028,464],{"class":84},[74,43030,35164],{"class":9495},[74,43032,131],{"class":80},[74,43034,277],{"class":134},[74,43036,91],{"class":84},[74,43038,43039],{"class":76,"line":14096},[74,43040,42407],{"class":84},[74,43042,43043],{"class":76,"line":14102},[74,43044,43045],{"class":144},"        # 全连接层\n",[74,43047,43048,43050,43053,43055],{"class":76,"line":14123},[74,43049,35126],{"class":134},[74,43051,43052],{"class":84},".block6",[74,43054,131],{"class":80},[74,43056,42290],{"class":84},[74,43058,43059],{"class":76,"line":14129},[74,43060,43061],{"class":144},"            # 平展操作\n",[74,43063,43064],{"class":76,"line":14143},[74,43065,43066],{"class":144},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[74,43068,43069],{"class":76,"line":14149},[74,43070,43071],{"class":84},"            nn.Flatten(),\n",[74,43073,43074,43077,43079,43081,43083,43085,43087,43089,43091],{"class":76,"line":14176},[74,43075,43076],{"class":84},"            nn.Linear(",[74,43078,455],{"class":134},[74,43080,541],{"class":80},[74,43082,455],{"class":134},[74,43084,541],{"class":80},[74,43086,42738],{"class":134},[74,43088,464],{"class":84},[74,43090,39151],{"class":134},[74,43092,42328],{"class":84},[74,43094,43095],{"class":76,"line":14185},[74,43096,42333],{"class":84},[74,43098,43099,43101,43103,43105,43107],{"class":76,"line":14191},[74,43100,43076],{"class":84},[74,43102,39151],{"class":134},[74,43104,464],{"class":84},[74,43106,36351],{"class":134},[74,43108,42328],{"class":84},[74,43110,43111],{"class":76,"line":14199},[74,43112,42333],{"class":84},[74,43114,43115,43117,43119,43121,43123],{"class":76,"line":14204},[74,43116,43076],{"class":84},[74,43118,36351],{"class":134},[74,43120,464],{"class":84},[74,43122,532],{"class":134},[74,43124,91],{"class":84},[74,43126,43127],{"class":76,"line":20883},[74,43128,42407],{"class":84},[74,43130,43131],{"class":76,"line":20889},[74,43132,2363],{"emptyLinePlaceholder":2362},[74,43134,43135],{"class":76,"line":20912},[74,43136,43137],{"class":144},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[74,43139,43140],{"class":76,"line":20918},[74,43141,43142],{"class":144},"        # 循环遍历模型\n",[74,43144,43145,43147,43150,43152,43155],{"class":76,"line":20941},[74,43146,3366],{"class":80},[74,43148,43149],{"class":84}," m ",[74,43151,30324],{"class":80},[74,43153,43154],{"class":134}," self",[74,43156,43157],{"class":84},".modules():\n",[74,43159,43160],{"class":76,"line":20955},[74,43161,43162],{"class":144},"            # print(m)\n",[74,43164,43165,43167,43170],{"class":76,"line":20975},[74,43166,4605],{"class":80},[74,43168,43169],{"class":134}," isinstance",[74,43171,43172],{"class":84},"(m,nn.Conv2d):\n",[74,43174,43175],{"class":76,"line":20981},[74,43176,43177],{"class":144},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[74,43179,43180,43183,43186,43188,43191],{"class":76,"line":20992},[74,43181,43182],{"class":84},"                nn.init.kaiming_normal_(m.weight,",[74,43184,43185],{"class":9495},"nonlinearity",[74,43187,131],{"class":80},[74,43189,43190],{"class":190},"'relu'",[74,43192,91],{"class":84},[74,43194,43195],{"class":76,"line":21015},[74,43196,43197],{"class":144},"                # 判断b参数是否存在\n",[74,43199,43200,43203,43206,43209,43212,43215],{"class":76,"line":21037},[74,43201,43202],{"class":80},"                if",[74,43204,43205],{"class":84}," m.bias ",[74,43207,43208],{"class":80},"is",[74,43210,43211],{"class":80}," not",[74,43213,43214],{"class":134}," None",[74,43216,3702],{"class":84},[74,43218,43219],{"class":76,"line":21042},[74,43220,43221],{"class":144},"                    # 如果参数不存在的化初始化b=0\n",[74,43223,43224,43227,43229],{"class":76,"line":21048},[74,43225,43226],{"class":84},"                    nn.init.constant_(m.bias,",[74,43228,277],{"class":134},[74,43230,91],{"class":84},[74,43232,43233],{"class":76,"line":21062},[74,43234,43235],{"class":144},"            # 全连接层初始化\n",[74,43237,43238,43241,43243],{"class":76,"line":21075},[74,43239,43240],{"class":80},"            elif",[74,43242,43169],{"class":134},[74,43244,43245],{"class":84},"(m,nn.Linear):\n",[74,43247,43248],{"class":76,"line":21080},[74,43249,43250],{"class":144},"                # 这个初始化方法是利用的是正太分布的方式\n",[74,43252,43253],{"class":76,"line":21094},[74,43254,43255],{"class":144},"                # 均值为0，方差为0.01\n",[74,43257,43258,43261,43263,43265,43268],{"class":76,"line":21099},[74,43259,43260],{"class":84},"                nn.init.normal_(m.weight,",[74,43262,277],{"class":134},[74,43264,464],{"class":84},[74,43266,43267],{"class":134},"0.01",[74,43269,91],{"class":84},[74,43271,43272],{"class":76,"line":21105},[74,43273,43274],{"class":144},"                # 初始化b参数\n",[74,43276,43277,43279,43281,43283,43285,43287],{"class":76,"line":21110},[74,43278,43202],{"class":80},[74,43280,43205],{"class":84},[74,43282,43208],{"class":80},[74,43284,43211],{"class":80},[74,43286,43214],{"class":134},[74,43288,3702],{"class":84},[74,43290,43291,43293,43295],{"class":76,"line":21124},[74,43292,43226],{"class":84},[74,43294,277],{"class":134},[74,43296,91],{"class":84},[74,43298,43299],{"class":76,"line":21129},[74,43300,2363],{"emptyLinePlaceholder":2362},[74,43302,43303],{"class":76,"line":21134},[74,43304,39446],{"class":144},[74,43306,43307,43309,43311],{"class":76,"line":21148},[74,43308,35082],{"class":80},[74,43310,35374],{"class":1925},[74,43312,35377],{"class":84},[74,43314,43315,43317,43319,43321],{"class":76,"line":21160},[74,43316,35382],{"class":84},[74,43318,131],{"class":80},[74,43320,35104],{"class":134},[74,43322,43323],{"class":84},".block1(x)\n",[74,43325,43326,43328,43330,43332],{"class":76,"line":21165},[74,43327,35382],{"class":84},[74,43329,131],{"class":80},[74,43331,35104],{"class":134},[74,43333,43334],{"class":84},".block2(x)\n",[74,43336,43337,43339,43341,43343],{"class":76,"line":21178},[74,43338,35382],{"class":84},[74,43340,131],{"class":80},[74,43342,35104],{"class":134},[74,43344,43345],{"class":84},".block3(x)\n",[74,43347,43348,43350,43352,43354],{"class":76,"line":21183},[74,43349,35382],{"class":84},[74,43351,131],{"class":80},[74,43353,35104],{"class":134},[74,43355,43356],{"class":84},".block4(x)\n",[74,43358,43359,43361,43363,43365],{"class":76,"line":21188},[74,43360,35382],{"class":84},[74,43362,131],{"class":80},[74,43364,35104],{"class":134},[74,43366,43367],{"class":84},".block5(x)\n",[74,43369,43370,43372,43374,43376],{"class":76,"line":21193},[74,43371,35382],{"class":84},[74,43373,131],{"class":80},[74,43375,35104],{"class":134},[74,43377,43378],{"class":84},".block6(x)\n",[74,43380,43381,43383],{"class":76,"line":21206},[74,43382,19031],{"class":80},[74,43384,35490],{"class":84},[74,43386,43387],{"class":76,"line":21211},[74,43388,2363],{"emptyLinePlaceholder":2362},[74,43390,43391],{"class":76,"line":36914},[74,43392,43393],{"class":144},"# 验证模型\n",[74,43395,43396,43398,43400,43402,43405],{"class":76,"line":36920},[74,43397,1493],{"class":80},[74,43399,35501],{"class":134},[74,43401,2912],{"class":80},[74,43403,43404],{"class":190},"'__main__'",[74,43406,3702],{"class":84},[74,43408,43409,43411,43413,43415,43417,43419,43421,43423,43425],{"class":76,"line":36926},[74,43410,35518],{"class":84},[74,43412,131],{"class":80},[74,43414,34732],{"class":84},[74,43416,35525],{"class":190},[74,43418,1666],{"class":80},[74,43420,35530],{"class":84},[74,43422,1663],{"class":80},[74,43424,34757],{"class":190},[74,43426,91],{"class":84},[74,43428,43429,43431],{"class":76,"line":36932},[74,43430,35580],{"class":134},[74,43432,34766],{"class":84},[74,43434,43435,43437,43439],{"class":76,"line":36938},[74,43436,35570],{"class":84},[74,43438,131],{"class":80},[74,43440,43441],{"class":84},"VGG16().to(device)\n",[74,43443,43444,43446,43448,43450,43452,43454,43456,43458],{"class":76,"line":36949},[74,43445,35580],{"class":134},[74,43447,35583],{"class":84},[74,43449,303],{"class":134},[74,43451,464],{"class":84},[74,43453,35782],{"class":134},[74,43455,464],{"class":84},[74,43457,35782],{"class":134},[74,43459,35596],{"class":84},[27,43461,43462],{"start":94},[30,43463,43464],{},"训练代码",[19,43466,43467],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,43469,43470],{},"解决方式:",[19,43472,43473],{},"①权重初始化",[64,43475,43477],{"className":34659,"code":43476,"language":34661,"meta":69,"style":69},"# 权重初始化,保证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",[71,43478,43479,43484,43489,43501,43506,43514,43519,43532,43537,43551,43556,43565,43570,43579,43584,43589,43602,43607,43621],{"__ignoreMap":69},[74,43480,43481],{"class":76,"line":77},[74,43482,43483],{"class":144},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[74,43485,43486],{"class":76,"line":94},[74,43487,43488],{"class":144},"# 循环遍历模型\n",[74,43490,43491,43493,43495,43497,43499],{"class":76,"line":1141},[74,43492,2988],{"class":80},[74,43494,43149],{"class":84},[74,43496,30324],{"class":80},[74,43498,43154],{"class":134},[74,43500,43157],{"class":84},[74,43502,43503],{"class":76,"line":1156},[74,43504,43505],{"class":144},"    # print(m)\n",[74,43507,43508,43510,43512],{"class":76,"line":1162},[74,43509,3064],{"class":80},[74,43511,43169],{"class":134},[74,43513,43172],{"class":84},[74,43515,43516],{"class":76,"line":1176},[74,43517,43518],{"class":144},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[74,43520,43521,43524,43526,43528,43530],{"class":76,"line":1182},[74,43522,43523],{"class":84},"        nn.init.kaiming_normal_(m.weight,",[74,43525,43185],{"class":9495},[74,43527,131],{"class":80},[74,43529,43190],{"class":190},[74,43531,91],{"class":84},[74,43533,43534],{"class":76,"line":1273},[74,43535,43536],{"class":144},"        # 判断b参数是否存在\n",[74,43538,43539,43541,43543,43545,43547,43549],{"class":76,"line":1279},[74,43540,2460],{"class":80},[74,43542,43205],{"class":84},[74,43544,43208],{"class":80},[74,43546,43211],{"class":80},[74,43548,43214],{"class":134},[74,43550,3702],{"class":84},[74,43552,43553],{"class":76,"line":1291},[74,43554,43555],{"class":144},"            # 如果参数不存在的化初始化b=0\n",[74,43557,43558,43561,43563],{"class":76,"line":1574},[74,43559,43560],{"class":84},"            nn.init.constant_(m.bias,",[74,43562,277],{"class":134},[74,43564,91],{"class":84},[74,43566,43567],{"class":76,"line":1579},[74,43568,43569],{"class":144},"    # 全连接层初始化\n",[74,43571,43572,43575,43577],{"class":76,"line":1585},[74,43573,43574],{"class":80},"    elif",[74,43576,43169],{"class":134},[74,43578,43245],{"class":84},[74,43580,43581],{"class":76,"line":1590},[74,43582,43583],{"class":144},"        # 这个初始化方法是利用的是正太分布的方式\n",[74,43585,43586],{"class":76,"line":1604},[74,43587,43588],{"class":144},"        # 均值为0，方差为0.01\n",[74,43590,43591,43594,43596,43598,43600],{"class":76,"line":1609},[74,43592,43593],{"class":84},"        nn.init.normal_(m.weight,",[74,43595,277],{"class":134},[74,43597,464],{"class":84},[74,43599,43267],{"class":134},[74,43601,91],{"class":84},[74,43603,43604],{"class":76,"line":1615},[74,43605,43606],{"class":144},"        # 初始化b参数\n",[74,43608,43609,43611,43613,43615,43617,43619],{"class":76,"line":1636},[74,43610,2460],{"class":80},[74,43612,43205],{"class":84},[74,43614,43208],{"class":80},[74,43616,43211],{"class":80},[74,43618,43214],{"class":134},[74,43620,3702],{"class":84},[74,43622,43623,43625,43627],{"class":76,"line":1641},[74,43624,43560],{"class":84},[74,43626,277],{"class":134},[74,43628,91],{"class":84},[19,43630,43631],{},"②尽可能地增加批次",[19,43633,43634],{},"训练完整代码：",[64,43636,43637],{"className":34659,"code":42180,"language":34661,"meta":69,"style":69},[71,43638,43639,43645,43655,43665,43675,43679,43695,43703,43721,43725,43729,43739,43775,43779,43815,43819,43847,43851,43855,43865,43901,43905,43941,43945,43973,43977,43981,43991,44027,44031,44067,44071,44107,44111,44139,44143,44147,44157,44193,44197,44233,44237,44273,44277,44305,44309,44313,44323,44359,44363,44399,44403,44439,44443,44471,44475,44479,44489,44493,44497,44501,44521,44525,44537,44541,44553,44557,44561,44565,44569,44581,44585,44593,44597,44609,44613,44627,44631,44639,44643,44651,44655,44659,44671,44675,44689,44697,44701,44705,44713,44723,44733,44743,44753,44763,44773,44779,44783,44787,44799,44819,44825,44833],{"__ignoreMap":69},[74,43640,43641,43643],{"class":76,"line":77},[74,43642,34673],{"class":80},[74,43644,34676],{"class":84},[74,43646,43647,43649,43651,43653],{"class":76,"line":94},[74,43648,35018],{"class":80},[74,43650,42195],{"class":84},[74,43652,34673],{"class":80},[74,43654,42200],{"class":84},[74,43656,43657,43659,43661,43663],{"class":76,"line":1141},[74,43658,35018],{"class":80},[74,43660,35021],{"class":84},[74,43662,34673],{"class":80},[74,43664,35026],{"class":84},[74,43666,43667,43669,43671,43673],{"class":76,"line":1156},[74,43668,35018],{"class":80},[74,43670,35038],{"class":84},[74,43672,34673],{"class":80},[74,43674,35043],{"class":84},[74,43676,43677],{"class":76,"line":1162},[74,43678,2363],{"emptyLinePlaceholder":2362},[74,43680,43681,43683,43685,43687,43689,43691,43693],{"class":76,"line":1176},[74,43682,18973],{"class":80},[74,43684,42231],{"class":1925},[74,43686,85],{"class":84},[74,43688,35059],{"class":1925},[74,43690,644],{"class":84},[74,43692,35064],{"class":1925},[74,43694,35067],{"class":84},[74,43696,43697,43699,43701],{"class":76,"line":1182},[74,43698,35082],{"class":80},[74,43700,35085],{"class":134},[74,43702,35088],{"class":84},[74,43704,43705,43707,43709,43711,43713,43715,43717,43719],{"class":76,"line":1273},[74,43706,35098],{"class":134},[74,43708,85],{"class":84},[74,43710,42258],{"class":134},[74,43712,16714],{"class":84},[74,43714,35104],{"class":134},[74,43716,35107],{"class":84},[74,43718,35110],{"class":134},[74,43720,1938],{"class":84},[74,43722,43723],{"class":76,"line":1279},[74,43724,42273],{"class":144},[74,43726,43727],{"class":76,"line":1291},[74,43728,42278],{"class":144},[74,43730,43731,43733,43735,43737],{"class":76,"line":1574},[74,43732,35126],{"class":134},[74,43734,42285],{"class":84},[74,43736,131],{"class":80},[74,43738,42290],{"class":84},[74,43740,43741,43743,43745,43747,43749,43751,43753,43755,43757,43759,43761,43763,43765,43767,43769,43771,43773],{"class":76,"line":1579},[74,43742,42295],{"class":84},[74,43744,35137],{"class":9495},[74,43746,131],{"class":80},[74,43748,303],{"class":134},[74,43750,464],{"class":84},[74,43752,35146],{"class":9495},[74,43754,131],{"class":80},[74,43756,289],{"class":134},[74,43758,464],{"class":84},[74,43760,35155],{"class":9495},[74,43762,131],{"class":80},[74,43764,157],{"class":134},[74,43766,464],{"class":84},[74,43768,35164],{"class":9495},[74,43770,131],{"class":80},[74,43772,303],{"class":134},[74,43774,42328],{"class":84},[74,43776,43777],{"class":76,"line":1585},[74,43778,42333],{"class":84},[74,43780,43781,43783,43785,43787,43789,43791,43793,43795,43797,43799,43801,43803,43805,43807,43809,43811,43813],{"class":76,"line":1590},[74,43782,42295],{"class":84},[74,43784,35137],{"class":9495},[74,43786,131],{"class":80},[74,43788,289],{"class":134},[74,43790,464],{"class":84},[74,43792,35146],{"class":9495},[74,43794,131],{"class":80},[74,43796,289],{"class":134},[74,43798,464],{"class":84},[74,43800,35155],{"class":9495},[74,43802,131],{"class":80},[74,43804,157],{"class":134},[74,43806,464],{"class":84},[74,43808,35164],{"class":9495},[74,43810,131],{"class":80},[74,43812,303],{"class":134},[74,43814,42328],{"class":84},[74,43816,43817],{"class":76,"line":1604},[74,43818,42333],{"class":84},[74,43820,43821,43823,43825,43827,43829,43831,43833,43835,43837,43839,43841,43843,43845],{"class":76,"line":1609},[74,43822,42378],{"class":84},[74,43824,35155],{"class":9495},[74,43826,131],{"class":80},[74,43828,163],{"class":134},[74,43830,464],{"class":84},[74,43832,35210],{"class":9495},[74,43834,131],{"class":80},[74,43836,163],{"class":134},[74,43838,464],{"class":84},[74,43840,35164],{"class":9495},[74,43842,131],{"class":80},[74,43844,277],{"class":134},[74,43846,91],{"class":84},[74,43848,43849],{"class":76,"line":1615},[74,43850,42407],{"class":84},[74,43852,43853],{"class":76,"line":1636},[74,43854,42412],{"class":144},[74,43856,43857,43859,43861,43863],{"class":76,"line":1641},[74,43858,35126],{"class":134},[74,43860,42419],{"class":84},[74,43862,131],{"class":80},[74,43864,42290],{"class":84},[74,43866,43867,43869,43871,43873,43875,43877,43879,43881,43883,43885,43887,43889,43891,43893,43895,43897,43899],{"class":76,"line":1655},[74,43868,42295],{"class":84},[74,43870,35137],{"class":9495},[74,43872,131],{"class":80},[74,43874,289],{"class":134},[74,43876,464],{"class":84},[74,43878,35146],{"class":9495},[74,43880,131],{"class":80},[74,43882,36351],{"class":134},[74,43884,464],{"class":84},[74,43886,35155],{"class":9495},[74,43888,131],{"class":80},[74,43890,157],{"class":134},[74,43892,464],{"class":84},[74,43894,35164],{"class":9495},[74,43896,131],{"class":80},[74,43898,303],{"class":134},[74,43900,42328],{"class":84},[74,43902,43903],{"class":76,"line":1660},[74,43904,42333],{"class":84},[74,43906,43907,43909,43911,43913,43915,43917,43919,43921,43923,43925,43927,43929,43931,43933,43935,43937,43939],{"class":76,"line":1689},[74,43908,42295],{"class":84},[74,43910,35137],{"class":9495},[74,43912,131],{"class":80},[74,43914,36351],{"class":134},[74,43916,464],{"class":84},[74,43918,35146],{"class":9495},[74,43920,131],{"class":80},[74,43922,36351],{"class":134},[74,43924,464],{"class":84},[74,43926,35155],{"class":9495},[74,43928,131],{"class":80},[74,43930,157],{"class":134},[74,43932,464],{"class":84},[74,43934,35164],{"class":9495},[74,43936,131],{"class":80},[74,43938,303],{"class":134},[74,43940,42328],{"class":84},[74,43942,43943],{"class":76,"line":1694},[74,43944,42333],{"class":84},[74,43946,43947,43949,43951,43953,43955,43957,43959,43961,43963,43965,43967,43969,43971],{"class":76,"line":1711},[74,43948,42378],{"class":84},[74,43950,35155],{"class":9495},[74,43952,131],{"class":80},[74,43954,163],{"class":134},[74,43956,464],{"class":84},[74,43958,35210],{"class":9495},[74,43960,131],{"class":80},[74,43962,163],{"class":134},[74,43964,464],{"class":84},[74,43966,35164],{"class":9495},[74,43968,131],{"class":80},[74,43970,277],{"class":134},[74,43972,91],{"class":84},[74,43974,43975],{"class":76,"line":1716},[74,43976,42407],{"class":84},[74,43978,43979],{"class":76,"line":1721},[74,43980,42540],{"class":144},[74,43982,43983,43985,43987,43989],{"class":76,"line":1726},[74,43984,35126],{"class":134},[74,43986,42547],{"class":84},[74,43988,131],{"class":80},[74,43990,42290],{"class":84},[74,43992,43993,43995,43997,43999,44001,44003,44005,44007,44009,44011,44013,44015,44017,44019,44021,44023,44025],{"class":76,"line":1740},[74,43994,42295],{"class":84},[74,43996,35137],{"class":9495},[74,43998,131],{"class":80},[74,44000,36351],{"class":134},[74,44002,464],{"class":84},[74,44004,35146],{"class":9495},[74,44006,131],{"class":80},[74,44008,39151],{"class":134},[74,44010,464],{"class":84},[74,44012,35155],{"class":9495},[74,44014,131],{"class":80},[74,44016,157],{"class":134},[74,44018,464],{"class":84},[74,44020,35164],{"class":9495},[74,44022,131],{"class":80},[74,44024,303],{"class":134},[74,44026,42328],{"class":84},[74,44028,44029],{"class":76,"line":1745},[74,44030,42333],{"class":84},[74,44032,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055,44057,44059,44061,44063,44065],{"class":76,"line":2540},[74,44034,42295],{"class":84},[74,44036,35137],{"class":9495},[74,44038,131],{"class":80},[74,44040,39151],{"class":134},[74,44042,464],{"class":84},[74,44044,35146],{"class":9495},[74,44046,131],{"class":80},[74,44048,39151],{"class":134},[74,44050,464],{"class":84},[74,44052,35155],{"class":9495},[74,44054,131],{"class":80},[74,44056,157],{"class":134},[74,44058,464],{"class":84},[74,44060,35164],{"class":9495},[74,44062,131],{"class":80},[74,44064,303],{"class":134},[74,44066,42328],{"class":84},[74,44068,44069],{"class":76,"line":2554},[74,44070,42333],{"class":84},[74,44072,44073,44075,44077,44079,44081,44083,44085,44087,44089,44091,44093,44095,44097,44099,44101,44103,44105],{"class":76,"line":2562},[74,44074,42295],{"class":84},[74,44076,35137],{"class":9495},[74,44078,131],{"class":80},[74,44080,39151],{"class":134},[74,44082,464],{"class":84},[74,44084,35146],{"class":9495},[74,44086,131],{"class":80},[74,44088,39151],{"class":134},[74,44090,464],{"class":84},[74,44092,35155],{"class":9495},[74,44094,131],{"class":80},[74,44096,157],{"class":134},[74,44098,464],{"class":84},[74,44100,35164],{"class":9495},[74,44102,131],{"class":80},[74,44104,303],{"class":134},[74,44106,42328],{"class":84},[74,44108,44109],{"class":76,"line":2567},[74,44110,42333],{"class":84},[74,44112,44113,44115,44117,44119,44121,44123,44125,44127,44129,44131,44133,44135,44137],{"class":76,"line":2573},[74,44114,42378],{"class":84},[74,44116,35155],{"class":9495},[74,44118,131],{"class":80},[74,44120,163],{"class":134},[74,44122,464],{"class":84},[74,44124,35210],{"class":9495},[74,44126,131],{"class":80},[74,44128,163],{"class":134},[74,44130,464],{"class":84},[74,44132,35164],{"class":9495},[74,44134,131],{"class":80},[74,44136,277],{"class":134},[74,44138,91],{"class":84},[74,44140,44141],{"class":76,"line":2579},[74,44142,42407],{"class":84},[74,44144,44145],{"class":76,"line":2584},[74,44146,42708],{"class":144},[74,44148,44149,44151,44153,44155],{"class":76,"line":12227},[74,44150,35126],{"class":134},[74,44152,42715],{"class":84},[74,44154,131],{"class":80},[74,44156,42290],{"class":84},[74,44158,44159,44161,44163,44165,44167,44169,44171,44173,44175,44177,44179,44181,44183,44185,44187,44189,44191],{"class":76,"line":12251},[74,44160,42295],{"class":84},[74,44162,35137],{"class":9495},[74,44164,131],{"class":80},[74,44166,39151],{"class":134},[74,44168,464],{"class":84},[74,44170,35146],{"class":9495},[74,44172,131],{"class":80},[74,44174,42738],{"class":134},[74,44176,464],{"class":84},[74,44178,35155],{"class":9495},[74,44180,131],{"class":80},[74,44182,157],{"class":134},[74,44184,464],{"class":84},[74,44186,35164],{"class":9495},[74,44188,131],{"class":80},[74,44190,303],{"class":134},[74,44192,42328],{"class":84},[74,44194,44195],{"class":76,"line":12256},[74,44196,42333],{"class":84},[74,44198,44199,44201,44203,44205,44207,44209,44211,44213,44215,44217,44219,44221,44223,44225,44227,44229,44231],{"class":76,"line":12262},[74,44200,42295],{"class":84},[74,44202,35137],{"class":9495},[74,44204,131],{"class":80},[74,44206,42738],{"class":134},[74,44208,464],{"class":84},[74,44210,35146],{"class":9495},[74,44212,131],{"class":80},[74,44214,42738],{"class":134},[74,44216,464],{"class":84},[74,44218,35155],{"class":9495},[74,44220,131],{"class":80},[74,44222,157],{"class":134},[74,44224,464],{"class":84},[74,44226,35164],{"class":9495},[74,44228,131],{"class":80},[74,44230,303],{"class":134},[74,44232,42328],{"class":84},[74,44234,44235],{"class":76,"line":12289},[74,44236,42333],{"class":84},[74,44238,44239,44241,44243,44245,44247,44249,44251,44253,44255,44257,44259,44261,44263,44265,44267,44269,44271],{"class":76,"line":12294},[74,44240,42295],{"class":84},[74,44242,35137],{"class":9495},[74,44244,131],{"class":80},[74,44246,42738],{"class":134},[74,44248,464],{"class":84},[74,44250,35146],{"class":9495},[74,44252,131],{"class":80},[74,44254,42738],{"class":134},[74,44256,464],{"class":84},[74,44258,35155],{"class":9495},[74,44260,131],{"class":80},[74,44262,157],{"class":134},[74,44264,464],{"class":84},[74,44266,35164],{"class":9495},[74,44268,131],{"class":80},[74,44270,303],{"class":134},[74,44272,42328],{"class":84},[74,44274,44275],{"class":76,"line":12300},[74,44276,42333],{"class":84},[74,44278,44279,44281,44283,44285,44287,44289,44291,44293,44295,44297,44299,44301,44303],{"class":76,"line":12312},[74,44280,42378],{"class":84},[74,44282,35155],{"class":9495},[74,44284,131],{"class":80},[74,44286,163],{"class":134},[74,44288,464],{"class":84},[74,44290,35210],{"class":9495},[74,44292,131],{"class":80},[74,44294,163],{"class":134},[74,44296,464],{"class":84},[74,44298,35164],{"class":9495},[74,44300,131],{"class":80},[74,44302,277],{"class":134},[74,44304,91],{"class":84},[74,44306,44307],{"class":76,"line":12324},[74,44308,42407],{"class":84},[74,44310,44311],{"class":76,"line":12336},[74,44312,42877],{"class":144},[74,44314,44315,44317,44319,44321],{"class":76,"line":13995},[74,44316,35126],{"class":134},[74,44318,42884],{"class":84},[74,44320,131],{"class":80},[74,44322,42290],{"class":84},[74,44324,44325,44327,44329,44331,44333,44335,44337,44339,44341,44343,44345,44347,44349,44351,44353,44355,44357],{"class":76,"line":14020},[74,44326,42295],{"class":84},[74,44328,35137],{"class":9495},[74,44330,131],{"class":80},[74,44332,42738],{"class":134},[74,44334,464],{"class":84},[74,44336,35146],{"class":9495},[74,44338,131],{"class":80},[74,44340,42738],{"class":134},[74,44342,464],{"class":84},[74,44344,35155],{"class":9495},[74,44346,131],{"class":80},[74,44348,157],{"class":134},[74,44350,464],{"class":84},[74,44352,35164],{"class":9495},[74,44354,131],{"class":80},[74,44356,303],{"class":134},[74,44358,42328],{"class":84},[74,44360,44361],{"class":76,"line":14043},[74,44362,42333],{"class":84},[74,44364,44365,44367,44369,44371,44373,44375,44377,44379,44381,44383,44385,44387,44389,44391,44393,44395,44397],{"class":76,"line":14067},[74,44366,42295],{"class":84},[74,44368,35137],{"class":9495},[74,44370,131],{"class":80},[74,44372,42738],{"class":134},[74,44374,464],{"class":84},[74,44376,35146],{"class":9495},[74,44378,131],{"class":80},[74,44380,42738],{"class":134},[74,44382,464],{"class":84},[74,44384,35155],{"class":9495},[74,44386,131],{"class":80},[74,44388,157],{"class":134},[74,44390,464],{"class":84},[74,44392,35164],{"class":9495},[74,44394,131],{"class":80},[74,44396,303],{"class":134},[74,44398,42328],{"class":84},[74,44400,44401],{"class":76,"line":14072},[74,44402,42333],{"class":84},[74,44404,44405,44407,44409,44411,44413,44415,44417,44419,44421,44423,44425,44427,44429,44431,44433,44435,44437],{"class":76,"line":14077},[74,44406,42295],{"class":84},[74,44408,35137],{"class":9495},[74,44410,131],{"class":80},[74,44412,42738],{"class":134},[74,44414,464],{"class":84},[74,44416,35146],{"class":9495},[74,44418,131],{"class":80},[74,44420,42738],{"class":134},[74,44422,464],{"class":84},[74,44424,35155],{"class":9495},[74,44426,131],{"class":80},[74,44428,157],{"class":134},[74,44430,464],{"class":84},[74,44432,35164],{"class":9495},[74,44434,131],{"class":80},[74,44436,303],{"class":134},[74,44438,42328],{"class":84},[74,44440,44441],{"class":76,"line":14082},[74,44442,42333],{"class":84},[74,44444,44445,44447,44449,44451,44453,44455,44457,44459,44461,44463,44465,44467,44469],{"class":76,"line":14091},[74,44446,42378],{"class":84},[74,44448,35155],{"class":9495},[74,44450,131],{"class":80},[74,44452,163],{"class":134},[74,44454,464],{"class":84},[74,44456,35210],{"class":9495},[74,44458,131],{"class":80},[74,44460,163],{"class":134},[74,44462,464],{"class":84},[74,44464,35164],{"class":9495},[74,44466,131],{"class":80},[74,44468,277],{"class":134},[74,44470,91],{"class":84},[74,44472,44473],{"class":76,"line":14096},[74,44474,42407],{"class":84},[74,44476,44477],{"class":76,"line":14102},[74,44478,43045],{"class":144},[74,44480,44481,44483,44485,44487],{"class":76,"line":14123},[74,44482,35126],{"class":134},[74,44484,43052],{"class":84},[74,44486,131],{"class":80},[74,44488,42290],{"class":84},[74,44490,44491],{"class":76,"line":14129},[74,44492,43061],{"class":144},[74,44494,44495],{"class":76,"line":14143},[74,44496,43066],{"class":144},[74,44498,44499],{"class":76,"line":14149},[74,44500,43071],{"class":84},[74,44502,44503,44505,44507,44509,44511,44513,44515,44517,44519],{"class":76,"line":14176},[74,44504,43076],{"class":84},[74,44506,455],{"class":134},[74,44508,541],{"class":80},[74,44510,455],{"class":134},[74,44512,541],{"class":80},[74,44514,42738],{"class":134},[74,44516,464],{"class":84},[74,44518,39151],{"class":134},[74,44520,42328],{"class":84},[74,44522,44523],{"class":76,"line":14185},[74,44524,42333],{"class":84},[74,44526,44527,44529,44531,44533,44535],{"class":76,"line":14191},[74,44528,43076],{"class":84},[74,44530,39151],{"class":134},[74,44532,464],{"class":84},[74,44534,36351],{"class":134},[74,44536,42328],{"class":84},[74,44538,44539],{"class":76,"line":14199},[74,44540,42333],{"class":84},[74,44542,44543,44545,44547,44549,44551],{"class":76,"line":14204},[74,44544,43076],{"class":84},[74,44546,36351],{"class":134},[74,44548,464],{"class":84},[74,44550,532],{"class":134},[74,44552,91],{"class":84},[74,44554,44555],{"class":76,"line":20883},[74,44556,42407],{"class":84},[74,44558,44559],{"class":76,"line":20889},[74,44560,2363],{"emptyLinePlaceholder":2362},[74,44562,44563],{"class":76,"line":20912},[74,44564,43137],{"class":144},[74,44566,44567],{"class":76,"line":20918},[74,44568,43142],{"class":144},[74,44570,44571,44573,44575,44577,44579],{"class":76,"line":20941},[74,44572,3366],{"class":80},[74,44574,43149],{"class":84},[74,44576,30324],{"class":80},[74,44578,43154],{"class":134},[74,44580,43157],{"class":84},[74,44582,44583],{"class":76,"line":20955},[74,44584,43162],{"class":144},[74,44586,44587,44589,44591],{"class":76,"line":20975},[74,44588,4605],{"class":80},[74,44590,43169],{"class":134},[74,44592,43172],{"class":84},[74,44594,44595],{"class":76,"line":20981},[74,44596,43177],{"class":144},[74,44598,44599,44601,44603,44605,44607],{"class":76,"line":20992},[74,44600,43182],{"class":84},[74,44602,43185],{"class":9495},[74,44604,131],{"class":80},[74,44606,43190],{"class":190},[74,44608,91],{"class":84},[74,44610,44611],{"class":76,"line":21015},[74,44612,43197],{"class":144},[74,44614,44615,44617,44619,44621,44623,44625],{"class":76,"line":21037},[74,44616,43202],{"class":80},[74,44618,43205],{"class":84},[74,44620,43208],{"class":80},[74,44622,43211],{"class":80},[74,44624,43214],{"class":134},[74,44626,3702],{"class":84},[74,44628,44629],{"class":76,"line":21042},[74,44630,43221],{"class":144},[74,44632,44633,44635,44637],{"class":76,"line":21048},[74,44634,43226],{"class":84},[74,44636,277],{"class":134},[74,44638,91],{"class":84},[74,44640,44641],{"class":76,"line":21062},[74,44642,43235],{"class":144},[74,44644,44645,44647,44649],{"class":76,"line":21075},[74,44646,43240],{"class":80},[74,44648,43169],{"class":134},[74,44650,43245],{"class":84},[74,44652,44653],{"class":76,"line":21080},[74,44654,43250],{"class":144},[74,44656,44657],{"class":76,"line":21094},[74,44658,43255],{"class":144},[74,44660,44661,44663,44665,44667,44669],{"class":76,"line":21099},[74,44662,43260],{"class":84},[74,44664,277],{"class":134},[74,44666,464],{"class":84},[74,44668,43267],{"class":134},[74,44670,91],{"class":84},[74,44672,44673],{"class":76,"line":21105},[74,44674,43274],{"class":144},[74,44676,44677,44679,44681,44683,44685,44687],{"class":76,"line":21110},[74,44678,43202],{"class":80},[74,44680,43205],{"class":84},[74,44682,43208],{"class":80},[74,44684,43211],{"class":80},[74,44686,43214],{"class":134},[74,44688,3702],{"class":84},[74,44690,44691,44693,44695],{"class":76,"line":21124},[74,44692,43226],{"class":84},[74,44694,277],{"class":134},[74,44696,91],{"class":84},[74,44698,44699],{"class":76,"line":21129},[74,44700,2363],{"emptyLinePlaceholder":2362},[74,44702,44703],{"class":76,"line":21134},[74,44704,39446],{"class":144},[74,44706,44707,44709,44711],{"class":76,"line":21148},[74,44708,35082],{"class":80},[74,44710,35374],{"class":1925},[74,44712,35377],{"class":84},[74,44714,44715,44717,44719,44721],{"class":76,"line":21160},[74,44716,35382],{"class":84},[74,44718,131],{"class":80},[74,44720,35104],{"class":134},[74,44722,43323],{"class":84},[74,44724,44725,44727,44729,44731],{"class":76,"line":21165},[74,44726,35382],{"class":84},[74,44728,131],{"class":80},[74,44730,35104],{"class":134},[74,44732,43334],{"class":84},[74,44734,44735,44737,44739,44741],{"class":76,"line":21178},[74,44736,35382],{"class":84},[74,44738,131],{"class":80},[74,44740,35104],{"class":134},[74,44742,43345],{"class":84},[74,44744,44745,44747,44749,44751],{"class":76,"line":21183},[74,44746,35382],{"class":84},[74,44748,131],{"class":80},[74,44750,35104],{"class":134},[74,44752,43356],{"class":84},[74,44754,44755,44757,44759,44761],{"class":76,"line":21188},[74,44756,35382],{"class":84},[74,44758,131],{"class":80},[74,44760,35104],{"class":134},[74,44762,43367],{"class":84},[74,44764,44765,44767,44769,44771],{"class":76,"line":21193},[74,44766,35382],{"class":84},[74,44768,131],{"class":80},[74,44770,35104],{"class":134},[74,44772,43378],{"class":84},[74,44774,44775,44777],{"class":76,"line":21206},[74,44776,19031],{"class":80},[74,44778,35490],{"class":84},[74,44780,44781],{"class":76,"line":21211},[74,44782,2363],{"emptyLinePlaceholder":2362},[74,44784,44785],{"class":76,"line":36914},[74,44786,43393],{"class":144},[74,44788,44789,44791,44793,44795,44797],{"class":76,"line":36920},[74,44790,1493],{"class":80},[74,44792,35501],{"class":134},[74,44794,2912],{"class":80},[74,44796,43404],{"class":190},[74,44798,3702],{"class":84},[74,44800,44801,44803,44805,44807,44809,44811,44813,44815,44817],{"class":76,"line":36926},[74,44802,35518],{"class":84},[74,44804,131],{"class":80},[74,44806,34732],{"class":84},[74,44808,35525],{"class":190},[74,44810,1666],{"class":80},[74,44812,35530],{"class":84},[74,44814,1663],{"class":80},[74,44816,34757],{"class":190},[74,44818,91],{"class":84},[74,44820,44821,44823],{"class":76,"line":36932},[74,44822,35580],{"class":134},[74,44824,34766],{"class":84},[74,44826,44827,44829,44831],{"class":76,"line":36938},[74,44828,35570],{"class":84},[74,44830,131],{"class":80},[74,44832,43441],{"class":84},[74,44834,44835,44837,44839,44841,44843,44845,44847,44849],{"class":76,"line":36949},[74,44836,35580],{"class":134},[74,44838,35583],{"class":84},[74,44840,303],{"class":134},[74,44842,464],{"class":84},[74,44844,35782],{"class":134},[74,44846,464],{"class":84},[74,44848,35782],{"class":134},[74,44850,35596],{"class":84},[27,44852,44853],{"start":1141},[30,44854,44855],{},"测试代码",[64,44857,44859],{"className":34659,"code":44858,"language":34661,"meta":69,"style":69},"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",[71,44860,44861,44867,44877,44887,44891,44901,44912,44916,44920,44924,44932,44948,44958,44974,44984,44998,45002,45012,45022,45032,45038,45042,45046,45054,45058,45074,45082,45086,45090,45098,45106,45110,45114,45118,45122,45128,45132,45142,45150,45158,45162,45166,45170,45178,45182,45198,45202,45206,45210,45222,45226,45238,45242,45246,45258,45262,45272,45276,45280,45292,45296,45305,45309,45313,45321,45325,45333,45337,45341,45345,45349,45353,45369,45377,45381,45385,45433,45439,45443,45453,45461,45469,45473,45477,45481,45485,45493,45497,45513,45517,45525,45533],{"__ignoreMap":69},[74,44862,44863,44865],{"class":76,"line":77},[74,44864,34673],{"class":80},[74,44866,34676],{"class":84},[74,44868,44869,44871,44873,44875],{"class":76,"line":94},[74,44870,34673],{"class":80},[74,44872,35696],{"class":84},[74,44874,35664],{"class":80},[74,44876,35701],{"class":84},[74,44878,44879,44881,44883,44885],{"class":76,"line":1141},[74,44880,35018],{"class":80},[74,44882,35679],{"class":84},[74,44884,34673],{"class":80},[74,44886,35684],{"class":84},[74,44888,44889],{"class":76,"line":1156},[74,44890,38203],{"class":144},[74,44892,44893,44895,44897,44899],{"class":76,"line":1162},[74,44894,35018],{"class":80},[74,44896,35649],{"class":84},[74,44898,34673],{"class":80},[74,44900,35654],{"class":84},[74,44902,44903,44905,44907,44909],{"class":76,"line":1176},[74,44904,35018],{"class":80},[74,44906,36195],{"class":84},[74,44908,34673],{"class":80},[74,44910,44911],{"class":134}," VGG16\n",[74,44913,44914],{"class":76,"line":1182},[74,44915,2363],{"emptyLinePlaceholder":2362},[74,44917,44918],{"class":76,"line":1273},[74,44919,2363],{"emptyLinePlaceholder":2362},[74,44921,44922],{"class":76,"line":1279},[74,44923,38232],{"class":144},[74,44925,44926,44928,44930],{"class":76,"line":1291},[74,44927,36228],{"class":80},[74,44929,38239],{"class":1925},[74,44931,36234],{"class":84},[74,44933,44934,44936,44938,44940,44942,44944,44946],{"class":76,"line":1574},[74,44935,38246],{"class":84},[74,44937,131],{"class":80},[74,44939,35736],{"class":84},[74,44941,35739],{"class":9495},[74,44943,131],{"class":80},[74,44945,35744],{"class":190},[74,44947,35747],{"class":84},[74,44949,44950,44952,44954,44956],{"class":76,"line":1579},[74,44951,38263],{"class":9495},[74,44953,131],{"class":80},[74,44955,38268],{"class":134},[74,44957,35747],{"class":84},[74,44959,44960,44962,44964,44966,44968,44970,44972],{"class":76,"line":1585},[74,44961,38275],{"class":9495},[74,44963,131],{"class":80},[74,44965,35774],{"class":84},[74,44967,35777],{"class":9495},[74,44969,131],{"class":80},[74,44971,35782],{"class":134},[74,44973,35785],{"class":84},[74,44975,44976,44978,44980,44982],{"class":76,"line":1590},[74,44977,38292],{"class":9495},[74,44979,131],{"class":80},[74,44981,35757],{"class":134},[74,44983,91],{"class":84},[74,44985,44986,44988,44990,44992,44994,44996],{"class":76,"line":1604},[74,44987,38303],{"class":84},[74,44989,131],{"class":80},[74,44991,35815],{"class":84},[74,44993,35818],{"class":9495},[74,44995,131],{"class":80},[74,44997,38314],{"class":84},[74,44999,45000],{"class":76,"line":1609},[74,45001,38319],{"class":144},[74,45003,45004,45006,45008,45010],{"class":76,"line":1615},[74,45005,38324],{"class":9495},[74,45007,131],{"class":80},[74,45009,303],{"class":134},[74,45011,35747],{"class":84},[74,45013,45014,45016,45018,45020],{"class":76,"line":1636},[74,45015,38335],{"class":9495},[74,45017,131],{"class":80},[74,45019,35757],{"class":134},[74,45021,35747],{"class":84},[74,45023,45024,45026,45028,45030],{"class":76,"line":1641},[74,45025,38346],{"class":9495},[74,45027,131],{"class":80},[74,45029,277],{"class":134},[74,45031,91],{"class":84},[74,45033,45034,45036],{"class":76,"line":1655},[74,45035,4053],{"class":80},[74,45037,38359],{"class":84},[74,45039,45040],{"class":76,"line":1660},[74,45041,2363],{"emptyLinePlaceholder":2362},[74,45043,45044],{"class":76,"line":1689},[74,45045,38368],{"class":144},[74,45047,45048,45050,45052],{"class":76,"line":1694},[74,45049,36228],{"class":80},[74,45051,38375],{"class":1925},[74,45053,38378],{"class":84},[74,45055,45056],{"class":76,"line":1711},[74,45057,38383],{"class":144},[74,45059,45060,45062,45064,45066,45068,45070,45072],{"class":76,"line":1716},[74,45061,35518],{"class":84},[74,45063,131],{"class":80},[74,45065,35525],{"class":190},[74,45067,1666],{"class":80},[74,45069,35530],{"class":84},[74,45071,1663],{"class":80},[74,45073,38400],{"class":190},[74,45075,45076,45078,45080],{"class":76,"line":1721},[74,45077,35570],{"class":84},[74,45079,131],{"class":80},[74,45081,36570],{"class":84},[74,45083,45084],{"class":76,"line":1726},[74,45085,2363],{"emptyLinePlaceholder":2362},[74,45087,45088],{"class":76,"line":1740},[74,45089,38417],{"class":144},[74,45091,45092,45094,45096],{"class":76,"line":1745},[74,45093,38422],{"class":84},[74,45095,131],{"class":80},[74,45097,36623],{"class":134},[74,45099,45100,45102,45104],{"class":76,"line":2540},[74,45101,38431],{"class":84},[74,45103,131],{"class":80},[74,45105,3048],{"class":134},[74,45107,45108],{"class":76,"line":2554},[74,45109,2363],{"emptyLinePlaceholder":2362},[74,45111,45112],{"class":76,"line":2562},[74,45113,38444],{"class":144},[74,45115,45116],{"class":76,"line":2567},[74,45117,38449],{"class":144},[74,45119,45120],{"class":76,"line":2573},[74,45121,38454],{"class":144},[74,45123,45124,45126],{"class":76,"line":2579},[74,45125,38459],{"class":80},[74,45127,37165],{"class":84},[74,45129,45130],{"class":76,"line":2584},[74,45131,38466],{"class":144},[74,45133,45134,45136,45138,45140],{"class":76,"line":12227},[74,45135,3366],{"class":80},[74,45137,38473],{"class":84},[74,45139,30324],{"class":80},[74,45141,38478],{"class":84},[74,45143,45144,45146,45148],{"class":76,"line":12251},[74,45145,38483],{"class":84},[74,45147,131],{"class":80},[74,45149,38488],{"class":84},[74,45151,45152,45154,45156],{"class":76,"line":12256},[74,45153,38493],{"class":84},[74,45155,131],{"class":80},[74,45157,38498],{"class":84},[74,45159,45160],{"class":76,"line":12262},[74,45161,38503],{"class":144},[74,45163,45164],{"class":76,"line":12289},[74,45165,37156],{"class":84},[74,45167,45168],{"class":76,"line":12294},[74,45169,38512],{"class":144},[74,45171,45172,45174,45176],{"class":76,"line":12300},[74,45173,36941],{"class":84},[74,45175,131],{"class":80},[74,45177,38521],{"class":84},[74,45179,45180],{"class":76,"line":12312},[74,45181,38526],{"class":144},[74,45183,45184,45186,45188,45190,45192,45194,45196],{"class":76,"line":12324},[74,45185,36958],{"class":84},[74,45187,131],{"class":80},[74,45189,36963],{"class":84},[74,45191,36966],{"class":9495},[74,45193,131],{"class":80},[74,45195,303],{"class":134},[74,45197,91],{"class":84},[74,45199,45200],{"class":76,"line":12336},[74,45201,38547],{"class":144},[74,45203,45204],{"class":76,"line":13995},[74,45205,38552],{"class":144},[74,45207,45208],{"class":76,"line":14020},[74,45209,38557],{"class":144},[74,45211,45212,45214,45216,45218,45220],{"class":76,"line":14043},[74,45213,38562],{"class":84},[74,45215,13756],{"class":80},[74,45217,37068],{"class":84},[74,45219,2912],{"class":80},[74,45221,38571],{"class":84},[74,45223,45224],{"class":76,"line":14067},[74,45225,38576],{"class":144},[74,45227,45228,45230,45232,45234,45236],{"class":76,"line":14072},[74,45229,38581],{"class":84},[74,45231,13756],{"class":80},[74,45233,38586],{"class":84},[74,45235,277],{"class":134},[74,45237,91],{"class":84},[74,45239,45240],{"class":76,"line":14077},[74,45241,2363],{"emptyLinePlaceholder":2362},[74,45243,45244],{"class":76,"line":14082},[74,45245,38599],{"class":144},[74,45247,45248,45250,45252,45254,45256],{"class":76,"line":14091},[74,45249,38604],{"class":84},[74,45251,131],{"class":80},[74,45253,38609],{"class":84},[74,45255,670],{"class":80},[74,45257,38614],{"class":84},[74,45259,45260],{"class":76,"line":14096},[74,45261,38619],{"class":144},[74,45263,45264,45266,45268,45270],{"class":76,"line":14102},[74,45265,36732],{"class":134},[74,45267,85],{"class":84},[74,45269,38628],{"class":190},[74,45271,38631],{"class":84},[74,45273,45274],{"class":76,"line":14123},[74,45275,2363],{"emptyLinePlaceholder":2362},[74,45277,45278],{"class":76,"line":14129},[74,45279,38640],{"class":144},[74,45281,45282,45284,45286,45288,45290],{"class":76,"line":14143},[74,45283,1493],{"class":80},[74,45285,35501],{"class":134},[74,45287,2912],{"class":80},[74,45289,35506],{"class":190},[74,45291,3702],{"class":84},[74,45293,45294],{"class":76,"line":14149},[74,45295,38657],{"class":144},[74,45297,45298,45300,45302],{"class":76,"line":14176},[74,45299,35570],{"class":84},[74,45301,131],{"class":80},[74,45303,45304],{"class":84},"VGG16()\n",[74,45306,45307],{"class":76,"line":14185},[74,45308,38670],{"class":144},[74,45310,45311],{"class":76,"line":14191},[74,45312,38675],{"class":144},[74,45314,45315,45317,45319],{"class":76,"line":14199},[74,45316,38680],{"class":84},[74,45318,38683],{"class":190},[74,45320,34778],{"class":84},[74,45322,45323],{"class":76,"line":14204},[74,45324,38690],{"class":144},[74,45326,45327,45329,45331],{"class":76,"line":20883},[74,45328,38303],{"class":84},[74,45330,131],{"class":80},[74,45332,38699],{"class":84},[74,45334,45335],{"class":76,"line":20889},[74,45336,38704],{"class":144},[74,45338,45339],{"class":76,"line":20912},[74,45340,38709],{"class":84},[74,45342,45343],{"class":76,"line":20918},[74,45344,2363],{"emptyLinePlaceholder":2362},[74,45346,45347],{"class":76,"line":20941},[74,45348,38718],{"class":144},[74,45350,45351],{"class":76,"line":20955},[74,45352,38723],{"class":144},[74,45354,45355,45357,45359,45361,45363,45365,45367],{"class":76,"line":20975},[74,45356,35518],{"class":84},[74,45358,131],{"class":80},[74,45360,35525],{"class":190},[74,45362,1666],{"class":80},[74,45364,35530],{"class":84},[74,45366,1663],{"class":80},[74,45368,38400],{"class":190},[74,45370,45371,45373,45375],{"class":76,"line":20981},[74,45372,35570],{"class":84},[74,45374,131],{"class":80},[74,45376,36570],{"class":84},[74,45378,45379],{"class":76,"line":20992},[74,45380,38752],{"class":144},[74,45382,45383],{"class":76,"line":21015},[74,45384,38757],{"class":144},[74,45386,45387,45389,45391,45393,45395,45397,45399,45401,45403,45405,45407,45409,45411,45413,45415,45417,45419,45421,45423,45425,45427,45429,45431],{"class":76,"line":21037},[74,45388,38762],{"class":84},[74,45390,131],{"class":80},[74,45392,976],{"class":84},[74,45394,38769],{"class":190},[74,45396,464],{"class":84},[74,45398,38774],{"class":190},[74,45400,464],{"class":84},[74,45402,38779],{"class":190},[74,45404,464],{"class":84},[74,45406,38784],{"class":190},[74,45408,464],{"class":84},[74,45410,38789],{"class":190},[74,45412,464],{"class":84},[74,45414,38794],{"class":190},[74,45416,464],{"class":84},[74,45418,38799],{"class":190},[74,45420,464],{"class":84},[74,45422,38804],{"class":190},[74,45424,464],{"class":84},[74,45426,38809],{"class":190},[74,45428,464],{"class":84},[74,45430,38814],{"class":190},[74,45432,37527],{"class":84},[74,45434,45435,45437],{"class":76,"line":21042},[74,45436,38459],{"class":80},[74,45438,37165],{"class":84},[74,45440,45441],{"class":76,"line":21048},[74,45442,38827],{"class":144},[74,45444,45445,45447,45449,45451],{"class":76,"line":21062},[74,45446,3366],{"class":80},[74,45448,38834],{"class":84},[74,45450,30324],{"class":80},[74,45452,38478],{"class":84},[74,45454,45455,45457,45459],{"class":76,"line":21075},[74,45456,36891],{"class":84},[74,45458,131],{"class":80},[74,45460,36896],{"class":84},[74,45462,45463,45465,45467],{"class":76,"line":21080},[74,45464,36906],{"class":84},[74,45466,131],{"class":80},[74,45468,36911],{"class":84},[74,45470,45471],{"class":76,"line":21094},[74,45472,2363],{"emptyLinePlaceholder":2362},[74,45474,45475],{"class":76,"line":21099},[74,45476,38863],{"class":144},[74,45478,45479],{"class":76,"line":21105},[74,45480,37156],{"class":84},[74,45482,45483],{"class":76,"line":21110},[74,45484,38872],{"class":144},[74,45486,45487,45489,45491],{"class":76,"line":21124},[74,45488,36941],{"class":84},[74,45490,131],{"class":80},[74,45492,36946],{"class":84},[74,45494,45495],{"class":76,"line":21129},[74,45496,38885],{"class":144},[74,45498,45499,45501,45503,45505,45507,45509,45511],{"class":76,"line":21134},[74,45500,36958],{"class":84},[74,45502,131],{"class":80},[74,45504,36963],{"class":84},[74,45506,36966],{"class":9495},[74,45508,131],{"class":80},[74,45510,303],{"class":134},[74,45512,91],{"class":84},[74,45514,45515],{"class":76,"line":21148},[74,45516,38906],{"class":144},[74,45518,45519,45521,45523],{"class":76,"line":21160},[74,45520,38911],{"class":84},[74,45522,131],{"class":80},[74,45524,38916],{"class":84},[74,45526,45527,45529,45531],{"class":76,"line":21165},[74,45528,38921],{"class":84},[74,45530,131],{"class":80},[74,45532,38926],{"class":84},[74,45534,45535,45537,45539,45541,45543,45545,45547,45549],{"class":76,"line":21178},[74,45536,38931],{"class":134},[74,45538,85],{"class":84},[74,45540,38936],{"class":190},[74,45542,38939],{"class":84},[74,45544,38942],{"class":190},[74,45546,464],{"class":84},[74,45548,38947],{"class":190},[74,45550,38950],{"class":84},[44,45552,45554],{"id":45553},"_23googlenet","2.3.GoogLeNet",[26277,45556,45558],{"id":45557},"_231原理","2.3.1.原理",[27,45560,45561],{},[30,45562,45563],{},"网络结构",[19,45565,45566],{},[1424,45567],{"alt":69,"src":45568},"\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",[19,45570,45571],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,45573,45574],{},[1424,45575],{"alt":69,"src":45576},"\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",[19,45578,45579],{},[1424,45580],{"alt":69,"src":45581},"\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",[19,45583,45584],{},[1424,45585],{"alt":69,"src":45586},"\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",[27,45588,45589],{"start":94},[30,45590,45591],{},"1x1卷积的优点",[19,45593,45594],{},[1424,45595],{"alt":69,"src":45596},"\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",[27,45598,45599],{"start":1141},[30,45600,45601],{},"全局平均池化层优点",[19,45603,45604],{},[1424,45605],{"alt":69,"src":45606},"\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",[19,45608,45609],{},[1424,45610],{"alt":69,"src":45611},"\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",[27,45613,45614],{"start":1156},[30,45615,45616],{},"参数详细描述",[19,45618,45619],{},[1424,45620],{"alt":69,"src":45621},"\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",[19,45623,45624],{},[1424,45625],{"alt":69,"src":45626},"\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",[19,45628,45629],{},[1424,45630],{"alt":69,"src":45631},"\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",[19,45633,45634],{},[1424,45635],{"alt":69,"src":45636},"\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",[19,45638,45639],{},[1424,45640],{"alt":69,"src":45641},"\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",[19,45643,45644],{},[1424,45645],{"alt":69,"src":45646},"\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",[19,45648,45649],{},[1424,45650],{"alt":69,"src":45651},"\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",[19,45653,45654],{},[1424,45655],{"alt":69,"src":45656},"\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",[19,45658,45659],{},[1424,45660],{"alt":69,"src":45661},"\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",[19,45663,45664],{},[1424,45665],{"alt":69,"src":45666},"\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",[19,45668,45669],{},[1424,45670],{"alt":69,"src":45671},"\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",[19,45673,45674],{},[1424,45675],{"alt":69,"src":45676},"\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",[19,45678,45679],{},[1424,45680],{"alt":69,"src":45681},"\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",[19,45683,45684],{},[1424,45685],{"alt":69,"src":45686},"\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",[19,45688,45689],{},[1424,45690],{"alt":69,"src":45691},"\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",[19,45693,45694],{},[1424,45695],{"alt":69,"src":45696},"\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",[19,45698,45699],{},[1424,45700],{"alt":69,"src":45701},"\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",[19,45703,45704],{},[1424,45705],{"alt":69,"src":45706},"\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",[19,45708,45709],{},[1424,45710],{"alt":69,"src":45711},"\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",[19,45713,45714],{},[1424,45715],{"alt":69,"src":45716},"\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",[19,45718,45719],{},[1424,45720],{"alt":69,"src":45721},"\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",[26277,45723,45725],{"id":45724},"_232代码实现","2.3.2.代码实现",[27,45727,45728],{},[30,45729,34992],{},[19,45731,45732],{},"根据原理一步一步搭建即可",[64,45734,45736],{"className":34659,"code":45735,"language":34661,"meta":69,"style":69},"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",[71,45737,45738,45744,45754,45764,45768,45785,45794,45809,45819,45824,45857,45862,45899,45946,45951,45987,46034,46039,46044,46079,46111,46115,46123,46139,46163,46188,46209,46214,46229,46233,46237,46242,46259,46264,46273,46288,46299,46343,46347,46375,46379,46390,46418,46422,46459,46463,46491,46495,46506,46542,46574,46602,46606,46617,46651,46683,46715,46748,46782,46810,46814,46825,46858,46890,46904,46908,46921,46925,46930,46942,46950,46972,46977,46982,46987,46992,46997,47002,47016,47024,47033,47046,47061,47070,47074,47082,47093,47104,47115,47126,47137,47143,47147,47152,47164,47184,47193],{"__ignoreMap":69},[74,45739,45740,45742],{"class":76,"line":77},[74,45741,34673],{"class":80},[74,45743,34676],{"class":84},[74,45745,45746,45748,45750,45752],{"class":76,"line":94},[74,45747,35018],{"class":80},[74,45749,35021],{"class":84},[74,45751,34673],{"class":80},[74,45753,35026],{"class":84},[74,45755,45756,45758,45760,45762],{"class":76,"line":1141},[74,45757,35018],{"class":80},[74,45759,35038],{"class":84},[74,45761,34673],{"class":80},[74,45763,35043],{"class":84},[74,45765,45766],{"class":76,"line":1156},[74,45767,2363],{"emptyLinePlaceholder":2362},[74,45769,45770,45772,45775,45777,45779,45781,45783],{"class":76,"line":1162},[74,45771,18973],{"class":80},[74,45773,45774],{"class":1925}," Inception",[74,45776,85],{"class":84},[74,45778,35059],{"class":1925},[74,45780,644],{"class":84},[74,45782,35064],{"class":1925},[74,45784,35067],{"class":84},[74,45786,45787,45789,45791],{"class":76,"line":1176},[74,45788,35082],{"class":80},[74,45790,35085],{"class":134},[74,45792,45793],{"class":84},"(self,in_channels,c1,c2,c3,c4):\n",[74,45795,45796,45798,45801,45803,45805,45807],{"class":76,"line":1182},[74,45797,35098],{"class":134},[74,45799,45800],{"class":84},"(Inception,",[74,45802,35104],{"class":134},[74,45804,35107],{"class":84},[74,45806,35110],{"class":134},[74,45808,1938],{"class":84},[74,45810,45811,45813,45815,45817],{"class":76,"line":1273},[74,45812,35126],{"class":134},[74,45814,39052],{"class":84},[74,45816,131],{"class":80},[74,45818,39057],{"class":84},[74,45820,45821],{"class":76,"line":1279},[74,45822,45823],{"class":144},"        # 路线1：定义1*1卷积\n",[74,45825,45826,45828,45831,45833,45835,45837,45839,45842,45844,45846,45849,45851,45853,45855],{"class":76,"line":1291},[74,45827,35126],{"class":134},[74,45829,45830],{"class":84},".p1_1",[74,45832,131],{"class":80},[74,45834,35134],{"class":84},[74,45836,35137],{"class":9495},[74,45838,131],{"class":80},[74,45840,45841],{"class":84},"in_channels,",[74,45843,35146],{"class":9495},[74,45845,131],{"class":80},[74,45847,45848],{"class":84},"c1,",[74,45850,35155],{"class":9495},[74,45852,131],{"class":80},[74,45854,303],{"class":134},[74,45856,91],{"class":84},[74,45858,45859],{"class":76,"line":1574},[74,45860,45861],{"class":144},"        # 路线2：定义1*1卷积和3*3\n",[74,45863,45864,45866,45869,45871,45873,45875,45877,45879,45881,45883,45886,45888,45891,45893,45895,45897],{"class":76,"line":1579},[74,45865,35126],{"class":134},[74,45867,45868],{"class":84},".p2_1",[74,45870,131],{"class":80},[74,45872,35134],{"class":84},[74,45874,35137],{"class":9495},[74,45876,131],{"class":80},[74,45878,45841],{"class":84},[74,45880,35146],{"class":9495},[74,45882,131],{"class":80},[74,45884,45885],{"class":84},"c2[",[74,45887,277],{"class":134},[74,45889,45890],{"class":84},"],",[74,45892,35155],{"class":9495},[74,45894,131],{"class":80},[74,45896,303],{"class":134},[74,45898,91],{"class":84},[74,45900,45901,45903,45906,45908,45910,45912,45914,45916,45918,45920,45922,45924,45926,45928,45930,45932,45934,45936,45938,45940,45942,45944],{"class":76,"line":1585},[74,45902,35126],{"class":134},[74,45904,45905],{"class":84},".p2_2",[74,45907,131],{"class":80},[74,45909,35134],{"class":84},[74,45911,35137],{"class":9495},[74,45913,131],{"class":80},[74,45915,45885],{"class":84},[74,45917,277],{"class":134},[74,45919,45890],{"class":84},[74,45921,35146],{"class":9495},[74,45923,131],{"class":80},[74,45925,45885],{"class":84},[74,45927,303],{"class":134},[74,45929,45890],{"class":84},[74,45931,35155],{"class":9495},[74,45933,131],{"class":80},[74,45935,157],{"class":134},[74,45937,464],{"class":84},[74,45939,35164],{"class":9495},[74,45941,131],{"class":80},[74,45943,303],{"class":134},[74,45945,91],{"class":84},[74,45947,45948],{"class":76,"line":1590},[74,45949,45950],{"class":144},"        # 路线3：定义1*1卷积和5*5\n",[74,45952,45953,45955,45958,45960,45962,45964,45966,45968,45970,45972,45975,45977,45979,45981,45983,45985],{"class":76,"line":1604},[74,45954,35126],{"class":134},[74,45956,45957],{"class":84},".p3_1",[74,45959,131],{"class":80},[74,45961,35134],{"class":84},[74,45963,35137],{"class":9495},[74,45965,131],{"class":80},[74,45967,45841],{"class":84},[74,45969,35146],{"class":9495},[74,45971,131],{"class":80},[74,45973,45974],{"class":84},"c3[",[74,45976,277],{"class":134},[74,45978,45890],{"class":84},[74,45980,35155],{"class":9495},[74,45982,131],{"class":80},[74,45984,303],{"class":134},[74,45986,91],{"class":84},[74,45988,45989,45991,45994,45996,45998,46000,46002,46004,46006,46008,46010,46012,46014,46016,46018,46020,46022,46024,46026,46028,46030,46032],{"class":76,"line":1609},[74,45990,35126],{"class":134},[74,45992,45993],{"class":84},".p3_2",[74,45995,131],{"class":80},[74,45997,35134],{"class":84},[74,45999,35137],{"class":9495},[74,46001,131],{"class":80},[74,46003,45974],{"class":84},[74,46005,277],{"class":134},[74,46007,45890],{"class":84},[74,46009,35146],{"class":9495},[74,46011,131],{"class":80},[74,46013,45974],{"class":84},[74,46015,303],{"class":134},[74,46017,45890],{"class":84},[74,46019,35155],{"class":9495},[74,46021,131],{"class":80},[74,46023,405],{"class":134},[74,46025,464],{"class":84},[74,46027,35164],{"class":9495},[74,46029,131],{"class":80},[74,46031,163],{"class":134},[74,46033,91],{"class":84},[74,46035,46036],{"class":76,"line":1615},[74,46037,46038],{"class":144},"        # 路线4：定义3*3最大池化和1*1卷积\n",[74,46040,46041],{"class":76,"line":1636},[74,46042,46043],{"class":144},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[74,46045,46046,46048,46051,46053,46055,46057,46059,46061,46063,46065,46067,46069,46071,46073,46075,46077],{"class":76,"line":1641},[74,46047,35126],{"class":134},[74,46049,46050],{"class":84},".p4_1",[74,46052,131],{"class":80},[74,46054,39110],{"class":84},[74,46056,35155],{"class":9495},[74,46058,131],{"class":80},[74,46060,157],{"class":134},[74,46062,464],{"class":84},[74,46064,35210],{"class":9495},[74,46066,131],{"class":80},[74,46068,303],{"class":134},[74,46070,464],{"class":84},[74,46072,35164],{"class":9495},[74,46074,131],{"class":80},[74,46076,303],{"class":134},[74,46078,91],{"class":84},[74,46080,46081,46083,46086,46088,46090,46092,46094,46096,46098,46100,46103,46105,46107,46109],{"class":76,"line":1655},[74,46082,35126],{"class":134},[74,46084,46085],{"class":84},".p4_2",[74,46087,131],{"class":80},[74,46089,35134],{"class":84},[74,46091,35137],{"class":9495},[74,46093,131],{"class":80},[74,46095,45841],{"class":84},[74,46097,35146],{"class":9495},[74,46099,131],{"class":80},[74,46101,46102],{"class":84},"c4,",[74,46104,35155],{"class":9495},[74,46106,131],{"class":80},[74,46108,303],{"class":134},[74,46110,91],{"class":84},[74,46112,46113],{"class":76,"line":1660},[74,46114,2363],{"emptyLinePlaceholder":2362},[74,46116,46117,46119,46121],{"class":76,"line":1689},[74,46118,35082],{"class":80},[74,46120,35374],{"class":1925},[74,46122,35377],{"class":84},[74,46124,46125,46128,46130,46132,46134,46136],{"class":76,"line":1694},[74,46126,46127],{"class":84},"        p1",[74,46129,131],{"class":80},[74,46131,35104],{"class":134},[74,46133,39465],{"class":84},[74,46135,35104],{"class":134},[74,46137,46138],{"class":84},".p1_1(x))\n",[74,46140,46141,46143,46145,46147,46149,46151,46154,46156,46158,46160],{"class":76,"line":1711},[74,46142,11364],{"class":84},[74,46144,131],{"class":80},[74,46146,35104],{"class":134},[74,46148,39465],{"class":84},[74,46150,35104],{"class":134},[74,46152,46153],{"class":84},".p2_2(",[74,46155,35104],{"class":134},[74,46157,39465],{"class":84},[74,46159,35104],{"class":134},[74,46161,46162],{"class":84},".p2_1(x))))\n",[74,46164,46165,46168,46170,46172,46174,46176,46179,46181,46183,46185],{"class":76,"line":1716},[74,46166,46167],{"class":84},"        p3",[74,46169,131],{"class":80},[74,46171,35104],{"class":134},[74,46173,39465],{"class":84},[74,46175,35104],{"class":134},[74,46177,46178],{"class":84},".p3_2(",[74,46180,35104],{"class":134},[74,46182,39465],{"class":84},[74,46184,35104],{"class":134},[74,46186,46187],{"class":84},".p3_1(x))))\n",[74,46189,46190,46193,46195,46197,46199,46201,46204,46206],{"class":76,"line":1721},[74,46191,46192],{"class":84},"        p4",[74,46194,131],{"class":80},[74,46196,35104],{"class":134},[74,46198,39465],{"class":84},[74,46200,35104],{"class":134},[74,46202,46203],{"class":84},".p4_2(",[74,46205,35104],{"class":134},[74,46207,46208],{"class":84},".p4_1(x)))\n",[74,46210,46211],{"class":76,"line":1726},[74,46212,46213],{"class":144},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[74,46215,46216,46218,46221,46223,46225,46227],{"class":76,"line":1740},[74,46217,19031],{"class":80},[74,46219,46220],{"class":84}," torch.cat((p1,p2,p3,p4),",[74,46222,36966],{"class":9495},[74,46224,131],{"class":80},[74,46226,303],{"class":134},[74,46228,91],{"class":84},[74,46230,46231],{"class":76,"line":1745},[74,46232,2363],{"emptyLinePlaceholder":2362},[74,46234,46235],{"class":76,"line":2540},[74,46236,2363],{"emptyLinePlaceholder":2362},[74,46238,46239],{"class":76,"line":2554},[74,46240,46241],{"class":144},"# 搭建GoogLeNet网络\n",[74,46243,46244,46246,46249,46251,46253,46255,46257],{"class":76,"line":2562},[74,46245,18973],{"class":80},[74,46247,46248],{"class":1925}," GoogLeNet",[74,46250,85],{"class":84},[74,46252,35059],{"class":1925},[74,46254,644],{"class":84},[74,46256,35064],{"class":1925},[74,46258,35067],{"class":84},[74,46260,46261],{"class":76,"line":2567},[74,46262,46263],{"class":144},"    # 必须把Inception导入到里边\n",[74,46265,46266,46268,46270],{"class":76,"line":2573},[74,46267,35082],{"class":80},[74,46269,35085],{"class":134},[74,46271,46272],{"class":84},"(self,Inception):\n",[74,46274,46275,46277,46280,46282,46284,46286],{"class":76,"line":2579},[74,46276,35098],{"class":134},[74,46278,46279],{"class":84},"(GoogLeNet,",[74,46281,35104],{"class":134},[74,46283,35107],{"class":84},[74,46285,35110],{"class":134},[74,46287,1938],{"class":84},[74,46289,46290,46292,46295,46297],{"class":76,"line":2584},[74,46291,35126],{"class":134},[74,46293,46294],{"class":84},".b1",[74,46296,131],{"class":80},[74,46298,42290],{"class":84},[74,46300,46301,46303,46305,46307,46309,46311,46313,46315,46317,46319,46321,46323,46325,46327,46329,46331,46333,46335,46337,46339,46341],{"class":76,"line":12227},[74,46302,42295],{"class":84},[74,46304,35137],{"class":9495},[74,46306,131],{"class":80},[74,46308,303],{"class":134},[74,46310,464],{"class":84},[74,46312,35146],{"class":9495},[74,46314,131],{"class":80},[74,46316,289],{"class":134},[74,46318,464],{"class":84},[74,46320,35155],{"class":9495},[74,46322,131],{"class":80},[74,46324,455],{"class":134},[74,46326,464],{"class":84},[74,46328,35210],{"class":9495},[74,46330,131],{"class":80},[74,46332,163],{"class":134},[74,46334,464],{"class":84},[74,46336,35164],{"class":9495},[74,46338,131],{"class":80},[74,46340,157],{"class":134},[74,46342,42328],{"class":84},[74,46344,46345],{"class":76,"line":12251},[74,46346,42333],{"class":84},[74,46348,46349,46351,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371,46373],{"class":76,"line":12256},[74,46350,42378],{"class":84},[74,46352,35155],{"class":9495},[74,46354,131],{"class":80},[74,46356,157],{"class":134},[74,46358,464],{"class":84},[74,46360,35210],{"class":9495},[74,46362,131],{"class":80},[74,46364,163],{"class":134},[74,46366,464],{"class":84},[74,46368,35164],{"class":9495},[74,46370,131],{"class":80},[74,46372,303],{"class":134},[74,46374,91],{"class":84},[74,46376,46377],{"class":76,"line":12262},[74,46378,42407],{"class":84},[74,46380,46381,46383,46386,46388],{"class":76,"line":12289},[74,46382,35126],{"class":134},[74,46384,46385],{"class":84},".b2",[74,46387,131],{"class":80},[74,46389,42290],{"class":84},[74,46391,46392,46394,46396,46398,46400,46402,46404,46406,46408,46410,46412,46414,46416],{"class":76,"line":12294},[74,46393,42295],{"class":84},[74,46395,35137],{"class":9495},[74,46397,131],{"class":80},[74,46399,289],{"class":134},[74,46401,464],{"class":84},[74,46403,35146],{"class":9495},[74,46405,131],{"class":80},[74,46407,289],{"class":134},[74,46409,464],{"class":84},[74,46411,35155],{"class":9495},[74,46413,131],{"class":80},[74,46415,303],{"class":134},[74,46417,42328],{"class":84},[74,46419,46420],{"class":76,"line":12300},[74,46421,42333],{"class":84},[74,46423,46424,46426,46428,46430,46432,46434,46436,46438,46441,46443,46445,46447,46449,46451,46453,46455,46457],{"class":76,"line":12312},[74,46425,42295],{"class":84},[74,46427,35137],{"class":9495},[74,46429,131],{"class":80},[74,46431,289],{"class":134},[74,46433,464],{"class":84},[74,46435,35146],{"class":9495},[74,46437,131],{"class":80},[74,46439,46440],{"class":134},"192",[74,46442,464],{"class":84},[74,46444,35155],{"class":9495},[74,46446,131],{"class":80},[74,46448,157],{"class":134},[74,46450,464],{"class":84},[74,46452,35164],{"class":9495},[74,46454,131],{"class":80},[74,46456,303],{"class":134},[74,46458,42328],{"class":84},[74,46460,46461],{"class":76,"line":12324},[74,46462,42333],{"class":84},[74,46464,46465,46467,46469,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489],{"class":76,"line":12336},[74,46466,42378],{"class":84},[74,46468,35155],{"class":9495},[74,46470,131],{"class":80},[74,46472,157],{"class":134},[74,46474,464],{"class":84},[74,46476,35210],{"class":9495},[74,46478,131],{"class":80},[74,46480,163],{"class":134},[74,46482,464],{"class":84},[74,46484,35164],{"class":9495},[74,46486,131],{"class":80},[74,46488,303],{"class":134},[74,46490,91],{"class":84},[74,46492,46493],{"class":76,"line":13995},[74,46494,42407],{"class":84},[74,46496,46497,46499,46502,46504],{"class":76,"line":14020},[74,46498,35126],{"class":134},[74,46500,46501],{"class":84},".b3",[74,46503,131],{"class":80},[74,46505,42290],{"class":84},[74,46507,46508,46511,46513,46515,46517,46520,46522,46524,46526,46529,46531,46533,46535,46538,46540],{"class":76,"line":14043},[74,46509,46510],{"class":84},"            Inception(",[74,46512,46440],{"class":134},[74,46514,464],{"class":84},[74,46516,289],{"class":134},[74,46518,46519],{"class":84},",(",[74,46521,295],{"class":134},[74,46523,464],{"class":84},[74,46525,36351],{"class":134},[74,46527,46528],{"class":84},"),(",[74,46530,687],{"class":134},[74,46532,464],{"class":84},[74,46534,283],{"class":134},[74,46536,46537],{"class":84},"),",[74,46539,283],{"class":134},[74,46541,42328],{"class":84},[74,46543,46544,46546,46548,46550,46552,46554,46556,46558,46560,46562,46564,46566,46568,46570,46572],{"class":76,"line":14067},[74,46545,46510],{"class":84},[74,46547,39151],{"class":134},[74,46549,464],{"class":84},[74,46551,36351],{"class":134},[74,46553,46519],{"class":84},[74,46555,36351],{"class":134},[74,46557,464],{"class":84},[74,46559,46440],{"class":134},[74,46561,46528],{"class":84},[74,46563,283],{"class":134},[74,46565,464],{"class":84},[74,46567,295],{"class":134},[74,46569,46537],{"class":84},[74,46571,289],{"class":134},[74,46573,42328],{"class":84},[74,46575,46576,46578,46580,46582,46584,46586,46588,46590,46592,46594,46596,46598,46600],{"class":76,"line":14072},[74,46577,42378],{"class":84},[74,46579,35155],{"class":9495},[74,46581,131],{"class":80},[74,46583,157],{"class":134},[74,46585,464],{"class":84},[74,46587,35210],{"class":9495},[74,46589,131],{"class":80},[74,46591,163],{"class":134},[74,46593,464],{"class":84},[74,46595,35164],{"class":9495},[74,46597,131],{"class":80},[74,46599,303],{"class":134},[74,46601,91],{"class":84},[74,46603,46604],{"class":76,"line":14077},[74,46605,42407],{"class":84},[74,46607,46608,46610,46613,46615],{"class":76,"line":14082},[74,46609,35126],{"class":134},[74,46611,46612],{"class":84},".b4",[74,46614,131],{"class":80},[74,46616,42290],{"class":84},[74,46618,46619,46621,46624,46626,46628,46630,46632,46634,46637,46639,46641,46643,46645,46647,46649],{"class":76,"line":14091},[74,46620,46510],{"class":84},[74,46622,46623],{"class":134},"480",[74,46625,464],{"class":84},[74,46627,46440],{"class":134},[74,46629,46519],{"class":84},[74,46631,295],{"class":134},[74,46633,464],{"class":84},[74,46635,46636],{"class":134},"208",[74,46638,46528],{"class":84},[74,46640,687],{"class":134},[74,46642,464],{"class":84},[74,46644,693],{"class":134},[74,46646,46537],{"class":84},[74,46648,289],{"class":134},[74,46650,42328],{"class":84},[74,46652,46653,46655,46657,46659,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681],{"class":76,"line":14096},[74,46654,46510],{"class":84},[74,46656,42738],{"class":134},[74,46658,464],{"class":84},[74,46660,25327],{"class":134},[74,46662,46519],{"class":84},[74,46664,704],{"class":134},[74,46666,464],{"class":84},[74,46668,35782],{"class":134},[74,46670,46528],{"class":84},[74,46672,886],{"class":134},[74,46674,464],{"class":84},[74,46676,289],{"class":134},[74,46678,46537],{"class":84},[74,46680,289],{"class":134},[74,46682,42328],{"class":84},[74,46684,46685,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713],{"class":76,"line":14102},[74,46686,46510],{"class":84},[74,46688,42738],{"class":134},[74,46690,464],{"class":84},[74,46692,36351],{"class":134},[74,46694,46519],{"class":84},[74,46696,36351],{"class":134},[74,46698,464],{"class":84},[74,46700,39151],{"class":134},[74,46702,46528],{"class":84},[74,46704,886],{"class":134},[74,46706,464],{"class":84},[74,46708,289],{"class":134},[74,46710,46537],{"class":84},[74,46712,289],{"class":134},[74,46714,42328],{"class":84},[74,46716,46717,46719,46721,46723,46725,46727,46729,46731,46734,46736,46738,46740,46742,46744,46746],{"class":76,"line":14123},[74,46718,46510],{"class":84},[74,46720,42738],{"class":134},[74,46722,464],{"class":84},[74,46724,704],{"class":134},[74,46726,46519],{"class":84},[74,46728,36351],{"class":134},[74,46730,464],{"class":84},[74,46732,46733],{"class":134},"288",[74,46735,46528],{"class":84},[74,46737,283],{"class":134},[74,46739,464],{"class":84},[74,46741,289],{"class":134},[74,46743,46537],{"class":84},[74,46745,289],{"class":134},[74,46747,42328],{"class":84},[74,46749,46750,46752,46755,46757,46759,46761,46763,46765,46768,46770,46772,46774,46776,46778,46780],{"class":76,"line":14129},[74,46751,46510],{"class":84},[74,46753,46754],{"class":134},"528",[74,46756,464],{"class":84},[74,46758,39151],{"class":134},[74,46760,46519],{"class":84},[74,46762,25327],{"class":134},[74,46764,464],{"class":84},[74,46766,46767],{"class":134},"320",[74,46769,46528],{"class":84},[74,46771,283],{"class":134},[74,46773,464],{"class":84},[74,46775,36351],{"class":134},[74,46777,46537],{"class":84},[74,46779,36351],{"class":134},[74,46781,42328],{"class":84},[74,46783,46784,46786,46788,46790,46792,46794,46796,46798,46800,46802,46804,46806,46808],{"class":76,"line":14143},[74,46785,42378],{"class":84},[74,46787,35155],{"class":9495},[74,46789,131],{"class":80},[74,46791,157],{"class":134},[74,46793,464],{"class":84},[74,46795,35210],{"class":9495},[74,46797,131],{"class":80},[74,46799,163],{"class":134},[74,46801,464],{"class":84},[74,46803,35164],{"class":9495},[74,46805,131],{"class":80},[74,46807,303],{"class":134},[74,46809,91],{"class":84},[74,46811,46812],{"class":76,"line":14149},[74,46813,42407],{"class":84},[74,46815,46816,46818,46821,46823],{"class":76,"line":14176},[74,46817,35126],{"class":134},[74,46819,46820],{"class":84},".b5",[74,46822,131],{"class":80},[74,46824,42290],{"class":84},[74,46826,46827,46829,46832,46834,46836,46838,46840,46842,46844,46846,46848,46850,46852,46854,46856],{"class":76,"line":14185},[74,46828,46510],{"class":84},[74,46830,46831],{"class":134},"832",[74,46833,464],{"class":84},[74,46835,39151],{"class":134},[74,46837,46519],{"class":84},[74,46839,25327],{"class":134},[74,46841,464],{"class":84},[74,46843,46767],{"class":134},[74,46845,46528],{"class":84},[74,46847,283],{"class":134},[74,46849,464],{"class":84},[74,46851,36351],{"class":134},[74,46853,46537],{"class":84},[74,46855,36351],{"class":134},[74,46857,42328],{"class":84},[74,46859,46860,46862,46864,46866,46868,46870,46872,46874,46876,46878,46880,46882,46884,46886,46888],{"class":76,"line":14191},[74,46861,46510],{"class":84},[74,46863,46831],{"class":134},[74,46865,464],{"class":84},[74,46867,39221],{"class":134},[74,46869,46519],{"class":84},[74,46871,46440],{"class":134},[74,46873,464],{"class":84},[74,46875,39221],{"class":134},[74,46877,46528],{"class":84},[74,46879,693],{"class":134},[74,46881,464],{"class":84},[74,46883,36351],{"class":134},[74,46885,46537],{"class":84},[74,46887,36351],{"class":134},[74,46889,42328],{"class":84},[74,46891,46892,46895,46897,46899,46901],{"class":76,"line":14199},[74,46893,46894],{"class":84},"            nn.AdaptiveAvgPool2d((",[74,46896,303],{"class":134},[74,46898,464],{"class":84},[74,46900,303],{"class":134},[74,46902,46903],{"class":84},")),\n",[74,46905,46906],{"class":76,"line":14204},[74,46907,43071],{"class":84},[74,46909,46910,46912,46915,46917,46919],{"class":76,"line":20883},[74,46911,43076],{"class":84},[74,46913,46914],{"class":134},"1024",[74,46916,464],{"class":84},[74,46918,532],{"class":134},[74,46920,91],{"class":84},[74,46922,46923],{"class":76,"line":20889},[74,46924,42407],{"class":84},[74,46926,46927],{"class":76,"line":20912},[74,46928,46929],{"class":144},"        # 对模型参数初始化\n",[74,46931,46932,46934,46936,46938,46940],{"class":76,"line":20918},[74,46933,3366],{"class":80},[74,46935,43149],{"class":84},[74,46937,30324],{"class":80},[74,46939,43154],{"class":134},[74,46941,43157],{"class":84},[74,46943,46944,46946,46948],{"class":76,"line":20941},[74,46945,4605],{"class":80},[74,46947,43169],{"class":134},[74,46949,43172],{"class":84},[74,46951,46952,46954,46957,46959,46962,46964,46966,46968,46970],{"class":76,"line":20955},[74,46953,43182],{"class":84},[74,46955,46956],{"class":9495},"mode",[74,46958,131],{"class":80},[74,46960,46961],{"class":190},"'fan_out'",[74,46963,464],{"class":84},[74,46965,43185],{"class":9495},[74,46967,131],{"class":80},[74,46969,43190],{"class":190},[74,46971,91],{"class":84},[74,46973,46974],{"class":76,"line":20975},[74,46975,46976],{"class":144},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[74,46978,46979],{"class":76,"line":20981},[74,46980,46981],{"class":144},"                # ② mode = 'fan_out'决定使用的fan值：\n",[74,46983,46984],{"class":76,"line":20992},[74,46985,46986],{"class":144},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[74,46988,46989],{"class":76,"line":21015},[74,46990,46991],{"class":144},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[74,46993,46994],{"class":76,"line":21037},[74,46995,46996],{"class":144},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[74,46998,46999],{"class":76,"line":21042},[74,47000,47001],{"class":144},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[74,47003,47004,47006,47008,47010,47012,47014],{"class":76,"line":21048},[74,47005,43202],{"class":80},[74,47007,43205],{"class":84},[74,47009,43208],{"class":80},[74,47011,43211],{"class":80},[74,47013,43214],{"class":134},[74,47015,3702],{"class":84},[74,47017,47018,47020,47022],{"class":76,"line":21062},[74,47019,43226],{"class":84},[74,47021,277],{"class":134},[74,47023,91],{"class":84},[74,47025,47026,47029,47031],{"class":76,"line":21075},[74,47027,47028],{"class":80},"                elif",[74,47030,43169],{"class":134},[74,47032,43245],{"class":84},[74,47034,47035,47038,47040,47042,47044],{"class":76,"line":21080},[74,47036,47037],{"class":84},"                    nn.init.normal_(m.weight,",[74,47039,277],{"class":134},[74,47041,464],{"class":84},[74,47043,43267],{"class":134},[74,47045,91],{"class":84},[74,47047,47048,47051,47053,47055,47057,47059],{"class":76,"line":21094},[74,47049,47050],{"class":80},"                    if",[74,47052,43205],{"class":84},[74,47054,43208],{"class":80},[74,47056,43211],{"class":80},[74,47058,43214],{"class":134},[74,47060,3702],{"class":84},[74,47062,47063,47066,47068],{"class":76,"line":21099},[74,47064,47065],{"class":84},"                        nn.init.constant_(m.bias,",[74,47067,277],{"class":134},[74,47069,91],{"class":84},[74,47071,47072],{"class":76,"line":21105},[74,47073,39446],{"class":144},[74,47075,47076,47078,47080],{"class":76,"line":21110},[74,47077,35082],{"class":80},[74,47079,35374],{"class":1925},[74,47081,35377],{"class":84},[74,47083,47084,47086,47088,47090],{"class":76,"line":21124},[74,47085,35382],{"class":84},[74,47087,131],{"class":80},[74,47089,35104],{"class":134},[74,47091,47092],{"class":84},".b1(x)\n",[74,47094,47095,47097,47099,47101],{"class":76,"line":21129},[74,47096,35382],{"class":84},[74,47098,131],{"class":80},[74,47100,35104],{"class":134},[74,47102,47103],{"class":84},".b2(x)\n",[74,47105,47106,47108,47110,47112],{"class":76,"line":21134},[74,47107,35382],{"class":84},[74,47109,131],{"class":80},[74,47111,35104],{"class":134},[74,47113,47114],{"class":84},".b3(x)\n",[74,47116,47117,47119,47121,47123],{"class":76,"line":21148},[74,47118,35382],{"class":84},[74,47120,131],{"class":80},[74,47122,35104],{"class":134},[74,47124,47125],{"class":84},".b4(x)\n",[74,47127,47128,47130,47132,47134],{"class":76,"line":21160},[74,47129,35382],{"class":84},[74,47131,131],{"class":80},[74,47133,35104],{"class":134},[74,47135,47136],{"class":84},".b5(x)\n",[74,47138,47139,47141],{"class":76,"line":21165},[74,47140,19031],{"class":80},[74,47142,35490],{"class":84},[74,47144,47145],{"class":76,"line":21178},[74,47146,2363],{"emptyLinePlaceholder":2362},[74,47148,47149],{"class":76,"line":21183},[74,47150,47151],{"class":144},"# 模型展示\n",[74,47153,47154,47156,47158,47160,47162],{"class":76,"line":21188},[74,47155,1493],{"class":80},[74,47157,35501],{"class":134},[74,47159,2912],{"class":80},[74,47161,35506],{"class":190},[74,47163,3702],{"class":84},[74,47165,47166,47168,47170,47172,47174,47176,47178,47180,47182],{"class":76,"line":21193},[74,47167,35518],{"class":84},[74,47169,131],{"class":80},[74,47171,34732],{"class":84},[74,47173,35525],{"class":190},[74,47175,1666],{"class":80},[74,47177,35530],{"class":84},[74,47179,1663],{"class":80},[74,47181,34757],{"class":190},[74,47183,91],{"class":84},[74,47185,47186,47188,47190],{"class":76,"line":21206},[74,47187,35570],{"class":84},[74,47189,131],{"class":80},[74,47191,47192],{"class":84},"GoogLeNet(Inception).to(device)\n",[74,47194,47195,47197,47199,47201,47203,47205,47207,47209],{"class":76,"line":21211},[74,47196,35580],{"class":134},[74,47198,35583],{"class":84},[74,47200,303],{"class":134},[74,47202,464],{"class":84},[74,47204,35782],{"class":134},[74,47206,464],{"class":84},[74,47208,35782],{"class":134},[74,47210,35596],{"class":84},[27,47212,47213],{"start":94},[30,47214,43464],{},[64,47216,47218],{"className":34659,"code":47217,"language":34661,"meta":69,"style":69},"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",[71,47219,47220,47226,47232,47242,47248,47258,47268,47278,47288,47298,47302,47313,47323,47327,47331,47335,47343,47355,47365,47381,47391,47423,47437,47447,47457,47461,47471,47485,47495,47505,47515,47521,47525,47529,47533,47537,47541,47549,47569,47573,47577,47581,47585,47589,47605,47609,47613,47621,47625,47629,47637,47641,47645,47649,47657,47661,47665,47669,47673,47681,47685,47693,47697,47705,47709,47717,47721,47729,47733,47737,47745,47749,47753,47757,47769,47793,47807,47811,47815,47819,47827,47831,47839,47843,47851,47855,47863,47867,47875,47879,47887,47891,47903,47907,47915,47919,47927,47931,47935,47939,47943,47951,47955,47971,47975,47983,47987,47991,47995,47999,48003,48007,48011,48027,48031,48043,48047,48059,48063,48075,48079,48087,48091,48099,48103,48107,48111,48117,48121,48129,48133,48149,48153,48161,48165,48181,48193,48197,48209,48213,48217,48225,48229,48233,48241,48245,48253,48257,48265,48269,48273,48315,48357,48361,48365,48381,48385,48401,48405,48409,48417,48421,48425,48437,48475,48479,48483,48491,48495,48509,48519,48525,48531,48537,48543,48547,48551,48557,48561,48565,48573,48577,48595,48599,48603,48607,48623,48627,48631,48635,48639,48643,48663,48683,48687,48691,48695,48703,48711,48715,48731,48751,48771,48775,48779,48787,48795,48799,48803,48807,48819,48823,48833,48841,48858],{"__ignoreMap":69},[74,47221,47222,47224],{"class":76,"line":77},[74,47223,34673],{"class":80},[74,47225,36103],{"class":84},[74,47227,47228,47230],{"class":76,"line":94},[74,47229,34673],{"class":80},[74,47231,36110],{"class":84},[74,47233,47234,47236,47238,47240],{"class":76,"line":1141},[74,47235,34673],{"class":80},[74,47237,36121],{"class":84},[74,47239,35664],{"class":80},[74,47241,36126],{"class":84},[74,47243,47244,47246],{"class":76,"line":1156},[74,47245,34673],{"class":80},[74,47247,34676],{"class":84},[74,47249,47250,47252,47254,47256],{"class":76,"line":1162},[74,47251,35018],{"class":80},[74,47253,35696],{"class":84},[74,47255,34673],{"class":80},[74,47257,36143],{"class":84},[74,47259,47260,47262,47264,47266],{"class":76,"line":1176},[74,47261,35018],{"class":80},[74,47263,35649],{"class":84},[74,47265,34673],{"class":80},[74,47267,35654],{"class":84},[74,47269,47270,47272,47274,47276],{"class":76,"line":1182},[74,47271,35018],{"class":80},[74,47273,35679],{"class":84},[74,47275,34673],{"class":80},[74,47277,35684],{"class":84},[74,47279,47280,47282,47284,47286],{"class":76,"line":1273},[74,47281,34673],{"class":80},[74,47283,35696],{"class":84},[74,47285,35664],{"class":80},[74,47287,35701],{"class":84},[74,47289,47290,47292,47294,47296],{"class":76,"line":1279},[74,47291,34673],{"class":80},[74,47293,35713],{"class":84},[74,47295,35664],{"class":80},[74,47297,35718],{"class":84},[74,47299,47300],{"class":76,"line":1291},[74,47301,36188],{"class":144},[74,47303,47304,47306,47308,47310],{"class":76,"line":1574},[74,47305,35018],{"class":80},[74,47307,36195],{"class":84},[74,47309,34673],{"class":80},[74,47311,47312],{"class":84}," GoogLeNet, Inception\n",[74,47314,47315,47317,47319,47321],{"class":76,"line":1579},[74,47316,35018],{"class":80},[74,47318,35021],{"class":84},[74,47320,34673],{"class":80},[74,47322,35026],{"class":84},[74,47324,47325],{"class":76,"line":1585},[74,47326,2363],{"emptyLinePlaceholder":2362},[74,47328,47329],{"class":76,"line":1590},[74,47330,2363],{"emptyLinePlaceholder":2362},[74,47332,47333],{"class":76,"line":1604},[74,47334,36223],{"class":144},[74,47336,47337,47339,47341],{"class":76,"line":1609},[74,47338,36228],{"class":80},[74,47340,36231],{"class":1925},[74,47342,36234],{"class":84},[74,47344,47345,47347,47349,47351,47353],{"class":76,"line":1615},[74,47346,36239],{"class":84},[74,47348,131],{"class":80},[74,47350,35736],{"class":84},[74,47352,35744],{"class":190},[74,47354,35747],{"class":84},[74,47356,47357,47359,47361,47363],{"class":76,"line":1636},[74,47358,36252],{"class":9495},[74,47360,131],{"class":80},[74,47362,35757],{"class":134},[74,47364,35747],{"class":84},[74,47366,47367,47369,47371,47373,47375,47377,47379],{"class":76,"line":1641},[74,47368,36263],{"class":9495},[74,47370,131],{"class":80},[74,47372,35774],{"class":84},[74,47374,35777],{"class":9495},[74,47376,131],{"class":80},[74,47378,39730],{"class":134},[74,47380,35785],{"class":84},[74,47382,47383,47385,47387,47389],{"class":76,"line":1655},[74,47384,36280],{"class":9495},[74,47386,131],{"class":80},[74,47388,35757],{"class":134},[74,47390,91],{"class":84},[74,47392,47393,47395,47397,47399,47401,47403,47405,47407,47409,47411,47413,47415,47417,47419,47421],{"class":76,"line":1660},[74,47394,36291],{"class":84},[74,47396,131],{"class":80},[74,47398,36296],{"class":84},[74,47400,36299],{"class":134},[74,47402,85],{"class":84},[74,47404,36304],{"class":134},[74,47406,541],{"class":80},[74,47408,11637],{"class":134},[74,47410,36311],{"class":84},[74,47412,36299],{"class":134},[74,47414,85],{"class":84},[74,47416,36318],{"class":134},[74,47418,541],{"class":80},[74,47420,11637],{"class":134},[74,47422,36325],{"class":84},[74,47424,47425,47427,47429,47431,47433,47435],{"class":76,"line":1689},[74,47426,36330],{"class":84},[74,47428,131],{"class":80},[74,47430,36335],{"class":84},[74,47432,35818],{"class":9495},[74,47434,131],{"class":80},[74,47436,35823],{"class":84},[74,47438,47439,47441,47443,47445],{"class":76,"line":1694},[74,47440,36346],{"class":9495},[74,47442,131],{"class":80},[74,47444,283],{"class":134},[74,47446,35747],{"class":84},[74,47448,47449,47451,47453,47455],{"class":76,"line":1711},[74,47450,36358],{"class":9495},[74,47452,131],{"class":80},[74,47454,35757],{"class":134},[74,47456,35747],{"class":84},[74,47458,47459],{"class":76,"line":1716},[74,47460,36369],{"class":144},[74,47462,47463,47465,47467,47469],{"class":76,"line":1721},[74,47464,36374],{"class":9495},[74,47466,131],{"class":80},[74,47468,481],{"class":134},[74,47470,91],{"class":84},[74,47472,47473,47475,47477,47479,47481,47483],{"class":76,"line":1726},[74,47474,36385],{"class":84},[74,47476,131],{"class":80},[74,47478,35815],{"class":84},[74,47480,35818],{"class":9495},[74,47482,131],{"class":80},[74,47484,36396],{"class":84},[74,47486,47487,47489,47491,47493],{"class":76,"line":1740},[74,47488,36401],{"class":9495},[74,47490,131],{"class":80},[74,47492,283],{"class":134},[74,47494,35747],{"class":84},[74,47496,47497,47499,47501,47503],{"class":76,"line":1745},[74,47498,36412],{"class":9495},[74,47500,131],{"class":80},[74,47502,35757],{"class":134},[74,47504,35747],{"class":84},[74,47506,47507,47509,47511,47513],{"class":76,"line":2540},[74,47508,36423],{"class":9495},[74,47510,131],{"class":80},[74,47512,481],{"class":134},[74,47514,91],{"class":84},[74,47516,47517,47519],{"class":76,"line":2554},[74,47518,4053],{"class":80},[74,47520,36436],{"class":84},[74,47522,47523],{"class":76,"line":2562},[74,47524,2363],{"emptyLinePlaceholder":2362},[74,47526,47527],{"class":76,"line":2567},[74,47528,36445],{"class":144},[74,47530,47531],{"class":76,"line":2573},[74,47532,36450],{"class":144},[74,47534,47535],{"class":76,"line":2579},[74,47536,2363],{"emptyLinePlaceholder":2362},[74,47538,47539],{"class":76,"line":2584},[74,47540,36459],{"class":144},[74,47542,47543,47545,47547],{"class":76,"line":12227},[74,47544,36228],{"class":80},[74,47546,36466],{"class":1925},[74,47548,36469],{"class":84},[74,47550,47551,47553,47555,47557,47559,47561,47563,47565,47567],{"class":76,"line":12251},[74,47552,35518],{"class":84},[74,47554,131],{"class":80},[74,47556,34732],{"class":84},[74,47558,35525],{"class":190},[74,47560,1666],{"class":80},[74,47562,35530],{"class":84},[74,47564,1663],{"class":80},[74,47566,36488],{"class":190},[74,47568,91],{"class":84},[74,47570,47571],{"class":76,"line":12256},[74,47572,2363],{"emptyLinePlaceholder":2362},[74,47574,47575],{"class":76,"line":12262},[74,47576,2363],{"emptyLinePlaceholder":2362},[74,47578,47579],{"class":76,"line":12289},[74,47580,36503],{"class":144},[74,47582,47583],{"class":76,"line":12294},[74,47584,36508],{"class":144},[74,47586,47587],{"class":76,"line":12300},[74,47588,36513],{"class":144},[74,47590,47591,47593,47595,47597,47599,47601,47603],{"class":76,"line":12312},[74,47592,36518],{"class":84},[74,47594,131],{"class":80},[74,47596,36523],{"class":84},[74,47598,36526],{"class":9495},[74,47600,131],{"class":80},[74,47602,36531],{"class":134},[74,47604,91],{"class":84},[74,47606,47607],{"class":76,"line":12324},[74,47608,2363],{"emptyLinePlaceholder":2362},[74,47610,47611],{"class":76,"line":12336},[74,47612,36542],{"class":144},[74,47614,47615,47617,47619],{"class":76,"line":13995},[74,47616,36547],{"class":84},[74,47618,131],{"class":80},[74,47620,36552],{"class":84},[74,47622,47623],{"class":76,"line":14020},[74,47624,2363],{"emptyLinePlaceholder":2362},[74,47626,47627],{"class":76,"line":14043},[74,47628,36561],{"class":144},[74,47630,47631,47633,47635],{"class":76,"line":14067},[74,47632,35570],{"class":84},[74,47634,131],{"class":80},[74,47636,36570],{"class":84},[74,47638,47639],{"class":76,"line":14072},[74,47640,36575],{"class":144},[74,47642,47643],{"class":76,"line":14077},[74,47644,36580],{"class":144},[74,47646,47647],{"class":76,"line":14082},[74,47648,36585],{"class":144},[74,47650,47651,47653,47655],{"class":76,"line":14091},[74,47652,36590],{"class":84},[74,47654,131],{"class":80},[74,47656,36595],{"class":84},[74,47658,47659],{"class":76,"line":14096},[74,47660,2363],{"emptyLinePlaceholder":2362},[74,47662,47663],{"class":76,"line":14102},[74,47664,2363],{"emptyLinePlaceholder":2362},[74,47666,47667],{"class":76,"line":14123},[74,47668,36608],{"class":144},[74,47670,47671],{"class":76,"line":14129},[74,47672,36613],{"class":144},[74,47674,47675,47677,47679],{"class":76,"line":14143},[74,47676,36618],{"class":84},[74,47678,131],{"class":80},[74,47680,36623],{"class":134},[74,47682,47683],{"class":76,"line":14149},[74,47684,36628],{"class":144},[74,47686,47687,47689,47691],{"class":76,"line":14176},[74,47688,36633],{"class":84},[74,47690,131],{"class":80},[74,47692,36638],{"class":84},[74,47694,47695],{"class":76,"line":14185},[74,47696,36643],{"class":144},[74,47698,47699,47701,47703],{"class":76,"line":14191},[74,47700,36648],{"class":84},[74,47702,131],{"class":80},[74,47704,36638],{"class":84},[74,47706,47707],{"class":76,"line":14199},[74,47708,36657],{"class":144},[74,47710,47711,47713,47715],{"class":76,"line":14204},[74,47712,36662],{"class":84},[74,47714,131],{"class":80},[74,47716,36638],{"class":84},[74,47718,47719],{"class":76,"line":20883},[74,47720,36671],{"class":144},[74,47722,47723,47725,47727],{"class":76,"line":20889},[74,47724,36676],{"class":84},[74,47726,131],{"class":80},[74,47728,36638],{"class":84},[74,47730,47731],{"class":76,"line":20912},[74,47732,2363],{"emptyLinePlaceholder":2362},[74,47734,47735],{"class":76,"line":20918},[74,47736,36689],{"class":144},[74,47738,47739,47741,47743],{"class":76,"line":20941},[74,47740,36694],{"class":84},[74,47742,131],{"class":80},[74,47744,36699],{"class":84},[74,47746,47747],{"class":76,"line":20955},[74,47748,2363],{"emptyLinePlaceholder":2362},[74,47750,47751],{"class":76,"line":20975},[74,47752,2363],{"emptyLinePlaceholder":2362},[74,47754,47755],{"class":76,"line":20981},[74,47756,36712],{"class":144},[74,47758,47759,47761,47763,47765,47767],{"class":76,"line":20992},[74,47760,3164],{"class":80},[74,47762,36719],{"class":84},[74,47764,30324],{"class":80},[74,47766,36724],{"class":134},[74,47768,36727],{"class":84},[74,47770,47771,47773,47775,47777,47779,47781,47783,47785,47787,47789,47791],{"class":76,"line":21015},[74,47772,36732],{"class":134},[74,47774,85],{"class":84},[74,47776,36737],{"class":190},[74,47778,36740],{"class":134},[74,47780,670],{"class":190},[74,47782,36740],{"class":134},[74,47784,337],{"class":190},[74,47786,36749],{"class":84},[74,47788,618],{"class":80},[74,47790,303],{"class":134},[74,47792,34778],{"class":84},[74,47794,47795,47797,47799,47801,47803,47805],{"class":76,"line":21037},[74,47796,36732],{"class":134},[74,47798,85],{"class":84},[74,47800,36764],{"class":190},[74,47802,541],{"class":80},[74,47804,532],{"class":134},[74,47806,91],{"class":84},[74,47808,47809],{"class":76,"line":21042},[74,47810,2363],{"emptyLinePlaceholder":2362},[74,47812,47813],{"class":76,"line":21048},[74,47814,36779],{"class":144},[74,47816,47817],{"class":76,"line":21062},[74,47818,36784],{"class":144},[74,47820,47821,47823,47825],{"class":76,"line":21075},[74,47822,36789],{"class":84},[74,47824,131],{"class":80},[74,47826,36623],{"class":134},[74,47828,47829],{"class":76,"line":21080},[74,47830,36798],{"class":144},[74,47832,47833,47835,47837],{"class":76,"line":21094},[74,47834,36803],{"class":84},[74,47836,131],{"class":80},[74,47838,3048],{"class":134},[74,47840,47841],{"class":76,"line":21099},[74,47842,36812],{"class":144},[74,47844,47845,47847,47849],{"class":76,"line":21105},[74,47846,36817],{"class":84},[74,47848,131],{"class":80},[74,47850,36623],{"class":134},[74,47852,47853],{"class":76,"line":21110},[74,47854,36826],{"class":144},[74,47856,47857,47859,47861],{"class":76,"line":21124},[74,47858,36831],{"class":84},[74,47860,131],{"class":80},[74,47862,3048],{"class":134},[74,47864,47865],{"class":76,"line":21129},[74,47866,36840],{"class":144},[74,47868,47869,47871,47873],{"class":76,"line":21134},[74,47870,36845],{"class":84},[74,47872,131],{"class":80},[74,47874,3048],{"class":134},[74,47876,47877],{"class":76,"line":21148},[74,47878,36854],{"class":144},[74,47880,47881,47883,47885],{"class":76,"line":21160},[74,47882,36859],{"class":84},[74,47884,131],{"class":80},[74,47886,3048],{"class":134},[74,47888,47889],{"class":76,"line":21165},[74,47890,36868],{"class":144},[74,47892,47893,47895,47897,47899,47901],{"class":76,"line":21178},[74,47894,3366],{"class":80},[74,47896,35882],{"class":84},[74,47898,30324],{"class":80},[74,47900,35887],{"class":134},[74,47902,36881],{"class":84},[74,47904,47905],{"class":76,"line":21183},[74,47906,36886],{"class":144},[74,47908,47909,47911,47913],{"class":76,"line":21188},[74,47910,36891],{"class":84},[74,47912,131],{"class":80},[74,47914,36896],{"class":84},[74,47916,47917],{"class":76,"line":21193},[74,47918,36901],{"class":144},[74,47920,47921,47923,47925],{"class":76,"line":21206},[74,47922,36906],{"class":84},[74,47924,131],{"class":80},[74,47926,36911],{"class":84},[74,47928,47929],{"class":76,"line":21211},[74,47930,36917],{"class":144},[74,47932,47933],{"class":76,"line":36914},[74,47934,36923],{"class":84},[74,47936,47937],{"class":76,"line":36920},[74,47938,36929],{"class":144},[74,47940,47941],{"class":76,"line":36926},[74,47942,36935],{"class":144},[74,47944,47945,47947,47949],{"class":76,"line":36932},[74,47946,36941],{"class":84},[74,47948,131],{"class":80},[74,47950,36946],{"class":84},[74,47952,47953],{"class":76,"line":36938},[74,47954,36952],{"class":144},[74,47956,47957,47959,47961,47963,47965,47967,47969],{"class":76,"line":36949},[74,47958,36958],{"class":84},[74,47960,131],{"class":80},[74,47962,36963],{"class":84},[74,47964,36966],{"class":9495},[74,47966,131],{"class":80},[74,47968,303],{"class":134},[74,47970,91],{"class":84},[74,47972,47973],{"class":76,"line":36955},[74,47974,36978],{"class":144},[74,47976,47977,47979,47981],{"class":76,"line":36975},[74,47978,36984],{"class":84},[74,47980,131],{"class":80},[74,47982,36989],{"class":84},[74,47984,47985],{"class":76,"line":36981},[74,47986,36995],{"class":144},[74,47988,47989],{"class":76,"line":36992},[74,47990,37001],{"class":84},[74,47992,47993],{"class":76,"line":36998},[74,47994,37007],{"class":144},[74,47996,47997],{"class":76,"line":37004},[74,47998,37013],{"class":84},[74,48000,48001],{"class":76,"line":37010},[74,48002,37019],{"class":144},[74,48004,48005],{"class":76,"line":37016},[74,48006,37025],{"class":84},[74,48008,48009],{"class":76,"line":37022},[74,48010,37031],{"class":144},[74,48012,48013,48015,48017,48019,48021,48023,48025],{"class":76,"line":37028},[74,48014,37037],{"class":84},[74,48016,13756],{"class":80},[74,48018,37042],{"class":84},[74,48020,541],{"class":80},[74,48022,37047],{"class":84},[74,48024,277],{"class":134},[74,48026,91],{"class":84},[74,48028,48029],{"class":76,"line":37034},[74,48030,37057],{"class":144},[74,48032,48033,48035,48037,48039,48041],{"class":76,"line":37054},[74,48034,37063],{"class":84},[74,48036,13756],{"class":80},[74,48038,37068],{"class":84},[74,48040,2912],{"class":80},[74,48042,37073],{"class":84},[74,48044,48045],{"class":76,"line":37060},[74,48046,37079],{"class":144},[74,48048,48049,48051,48053,48055,48057],{"class":76,"line":37076},[74,48050,37085],{"class":84},[74,48052,13756],{"class":80},[74,48054,37047],{"class":84},[74,48056,277],{"class":134},[74,48058,91],{"class":84},[74,48060,48061],{"class":76,"line":37082},[74,48062,37099],{"class":144},[74,48064,48065,48067,48069,48071,48073],{"class":76,"line":37096},[74,48066,3366],{"class":80},[74,48068,37107],{"class":84},[74,48070,30324],{"class":80},[74,48072,35887],{"class":134},[74,48074,37114],{"class":84},[74,48076,48077],{"class":76,"line":37102},[74,48078,37120],{"class":144},[74,48080,48081,48083,48085],{"class":76,"line":37117},[74,48082,36891],{"class":84},[74,48084,131],{"class":80},[74,48086,36896],{"class":84},[74,48088,48089],{"class":76,"line":37123},[74,48090,37135],{"class":144},[74,48092,48093,48095,48097],{"class":76,"line":37132},[74,48094,36906],{"class":84},[74,48096,131],{"class":80},[74,48098,36911],{"class":84},[74,48100,48101],{"class":76,"line":37138},[74,48102,37150],{"class":144},[74,48104,48105],{"class":76,"line":37147},[74,48106,37156],{"class":84},[74,48108,48109],{"class":76,"line":37153},[74,48110,40637],{"class":144},[74,48112,48113,48115],{"class":76,"line":37159},[74,48114,37162],{"class":80},[74,48116,37165],{"class":84},[74,48118,48119],{"class":76,"line":37168},[74,48120,37171],{"class":144},[74,48122,48123,48125,48127],{"class":76,"line":37174},[74,48124,40652],{"class":84},[74,48126,131],{"class":80},[74,48128,36946],{"class":84},[74,48130,48131],{"class":76,"line":37185},[74,48132,37188],{"class":144},[74,48134,48135,48137,48139,48141,48143,48145,48147],{"class":76,"line":37191},[74,48136,40665],{"class":84},[74,48138,131],{"class":80},[74,48140,36963],{"class":84},[74,48142,36966],{"class":9495},[74,48144,131],{"class":80},[74,48146,303],{"class":134},[74,48148,91],{"class":84},[74,48150,48151],{"class":76,"line":37210},[74,48152,37213],{"class":144},[74,48154,48155,48157,48159],{"class":76,"line":37216},[74,48156,40686],{"class":84},[74,48158,131],{"class":80},[74,48160,36989],{"class":84},[74,48162,48163],{"class":76,"line":37227},[74,48164,37230],{"class":144},[74,48166,48167,48169,48171,48173,48175,48177,48179],{"class":76,"line":37233},[74,48168,40699],{"class":84},[74,48170,13756],{"class":80},[74,48172,40704],{"class":84},[74,48174,541],{"class":80},[74,48176,37047],{"class":84},[74,48178,277],{"class":134},[74,48180,91],{"class":84},[74,48182,48183,48185,48187,48189,48191],{"class":76,"line":37253},[74,48184,40717],{"class":84},[74,48186,13756],{"class":80},[74,48188,37068],{"class":84},[74,48190,2912],{"class":80},[74,48192,37073],{"class":84},[74,48194,48195],{"class":76,"line":37269},[74,48196,40730],{"class":144},[74,48198,48199,48201,48203,48205,48207],{"class":76,"line":37275},[74,48200,40735],{"class":84},[74,48202,13756],{"class":80},[74,48204,37047],{"class":84},[74,48206,277],{"class":134},[74,48208,91],{"class":84},[74,48210,48211],{"class":76,"line":37289},[74,48212,37292],{"class":144},[74,48214,48215],{"class":76,"line":37295},[74,48216,37298],{"class":144},[74,48218,48219,48221,48223],{"class":76,"line":37301},[74,48220,37304],{"class":84},[74,48222,670],{"class":80},[74,48224,37309],{"class":84},[74,48226,48227],{"class":76,"line":37312},[74,48228,37315],{"class":144},[74,48230,48231],{"class":76,"line":37318},[74,48232,37321],{"class":144},[74,48234,48235,48237,48239],{"class":76,"line":37324},[74,48236,37327],{"class":84},[74,48238,670],{"class":80},[74,48240,37309],{"class":84},[74,48242,48243],{"class":76,"line":37334},[74,48244,37337],{"class":144},[74,48246,48247,48249,48251],{"class":76,"line":37340},[74,48248,37343],{"class":84},[74,48250,670],{"class":80},[74,48252,37348],{"class":84},[74,48254,48255],{"class":76,"line":37351},[74,48256,37354],{"class":144},[74,48258,48259,48261,48263],{"class":76,"line":37357},[74,48260,37360],{"class":84},[74,48262,670],{"class":80},[74,48264,37348],{"class":84},[74,48266,48267],{"class":76,"line":37367},[74,48268,2363],{"emptyLinePlaceholder":2362},[74,48270,48271],{"class":76,"line":37372},[74,48272,37375],{"class":144},[74,48274,48275,48277,48279,48281,48283,48285,48287,48289,48291,48293,48295,48297,48299,48301,48303,48305,48307,48309,48311,48313],{"class":76,"line":37378},[74,48276,36732],{"class":134},[74,48278,85],{"class":84},[74,48280,3555],{"class":190},[74,48282,36740],{"class":134},[74,48284,37389],{"class":190},[74,48286,982],{"class":134},[74,48288,37394],{"class":80},[74,48290,1032],{"class":134},[74,48292,37399],{"class":190},[74,48294,982],{"class":134},[74,48296,37394],{"class":80},[74,48298,1032],{"class":134},[74,48300,3555],{"class":190},[74,48302,37410],{"class":84},[74,48304,618],{"class":80},[74,48306,303],{"class":134},[74,48308,37417],{"class":84},[74,48310,618],{"class":80},[74,48312,303],{"class":134},[74,48314,37424],{"class":84},[74,48316,48317,48319,48321,48323,48325,48327,48329,48331,48333,48335,48337,48339,48341,48343,48345,48347,48349,48351,48353,48355],{"class":76,"line":37427},[74,48318,36732],{"class":134},[74,48320,85],{"class":84},[74,48322,3555],{"class":190},[74,48324,36740],{"class":134},[74,48326,37438],{"class":190},[74,48328,982],{"class":134},[74,48330,37394],{"class":80},[74,48332,1032],{"class":134},[74,48334,37447],{"class":190},[74,48336,982],{"class":134},[74,48338,37394],{"class":80},[74,48340,1032],{"class":134},[74,48342,3555],{"class":190},[74,48344,37458],{"class":84},[74,48346,618],{"class":80},[74,48348,303],{"class":134},[74,48350,37465],{"class":84},[74,48352,618],{"class":80},[74,48354,303],{"class":134},[74,48356,37424],{"class":84},[74,48358,48359],{"class":76,"line":37474},[74,48360,2363],{"emptyLinePlaceholder":2362},[74,48362,48363],{"class":76,"line":37479},[74,48364,37482],{"class":144},[74,48366,48367,48369,48371,48373,48375,48377,48379],{"class":76,"line":37485},[74,48368,2460],{"class":80},[74,48370,37490],{"class":84},[74,48372,618],{"class":80},[74,48374,303],{"class":134},[74,48376,1026],{"class":84},[74,48378,1046],{"class":80},[74,48380,37501],{"class":84},[74,48382,48383],{"class":76,"line":37504},[74,48384,37507],{"class":144},[74,48386,48387,48389,48391,48393,48395,48397,48399],{"class":76,"line":37510},[74,48388,37513],{"class":84},[74,48390,125],{"class":134},[74,48392,131],{"class":80},[74,48394,37520],{"class":84},[74,48396,618],{"class":80},[74,48398,303],{"class":134},[74,48400,37527],{"class":84},[74,48402,48403],{"class":76,"line":37530},[74,48404,37533],{"class":144},[74,48406,48407],{"class":76,"line":37536},[74,48408,37539],{"class":144},[74,48410,48411,48413,48415],{"class":76,"line":37542},[74,48412,37545],{"class":84},[74,48414,131],{"class":80},[74,48416,36595],{"class":84},[74,48418,48419],{"class":76,"line":37552},[74,48420,2363],{"emptyLinePlaceholder":2362},[74,48422,48423],{"class":76,"line":37557},[74,48424,37560],{"class":144},[74,48426,48427,48429,48431,48433,48435],{"class":76,"line":37563},[74,48428,37566],{"class":84},[74,48430,131],{"class":80},[74,48432,37571],{"class":84},[74,48434,618],{"class":80},[74,48436,37576],{"class":84},[74,48438,48439,48441,48443,48445,48447,48449,48451,48453,48455,48457,48459,48461,48463,48465,48467,48469,48471,48473],{"class":76,"line":37579},[74,48440,36732],{"class":134},[74,48442,85],{"class":84},[74,48444,37586],{"class":190},[74,48446,982],{"class":134},[74,48448,37591],{"class":80},[74,48450,1032],{"class":134},[74,48452,630],{"class":190},[74,48454,982],{"class":134},[74,48456,37591],{"class":80},[74,48458,1032],{"class":134},[74,48460,37604],{"class":190},[74,48462,37607],{"class":84},[74,48464,37610],{"class":80},[74,48466,993],{"class":134},[74,48468,37615],{"class":84},[74,48470,414],{"class":80},[74,48472,993],{"class":134},[74,48474,34778],{"class":84},[74,48476,48477],{"class":76,"line":37624},[74,48478,41014],{"class":144},[74,48480,48481],{"class":76,"line":37630},[74,48482,41019],{"class":144},[74,48484,48485,48487,48489],{"class":76,"line":37636},[74,48486,41024],{"class":84},[74,48488,37648],{"class":190},[74,48490,91],{"class":84},[74,48492,48493],{"class":76,"line":37642},[74,48494,37668],{"class":144},[74,48496,48497,48499,48501,48503,48505,48507],{"class":76,"line":37653},[74,48498,37674],{"class":84},[74,48500,131],{"class":80},[74,48502,37679],{"class":84},[74,48504,37682],{"class":9495},[74,48506,131],{"class":80},[74,48508,1508],{"class":84},[74,48510,48511,48513,48515,48517],{"class":76,"line":37659},[74,48512,37692],{"class":190},[74,48514,945],{"class":84},[74,48516,37697],{"class":134},[74,48518,37700],{"class":84},[74,48520,48521,48523],{"class":76,"line":37665},[74,48522,37706],{"class":190},[74,48524,37709],{"class":84},[74,48526,48527,48529],{"class":76,"line":37671},[74,48528,37715],{"class":190},[74,48530,37718],{"class":84},[74,48532,48533,48535],{"class":76,"line":37689},[74,48534,37724],{"class":190},[74,48536,37727],{"class":84},[74,48538,48539,48541],{"class":76,"line":37703},[74,48540,37733],{"class":190},[74,48542,37736],{"class":84},[74,48544,48545],{"class":76,"line":37712},[74,48546,37742],{"class":84},[74,48548,48549],{"class":76,"line":37721},[74,48550,37748],{"class":144},[74,48552,48553,48555],{"class":76,"line":37730},[74,48554,4053],{"class":80},[74,48556,37756],{"class":84},[74,48558,48559],{"class":76,"line":37739},[74,48560,2363],{"emptyLinePlaceholder":2362},[74,48562,48563],{"class":76,"line":37745},[74,48564,37767],{"class":144},[74,48566,48567,48569,48571],{"class":76,"line":37751},[74,48568,36228],{"class":80},[74,48570,37775],{"class":1925},[74,48572,37778],{"class":84},[74,48574,48575],{"class":76,"line":37759},[74,48576,37784],{"class":144},[74,48578,48579,48581,48583,48585,48587,48589,48591,48593],{"class":76,"line":37764},[74,48580,37790],{"class":84},[74,48582,35974],{"class":9495},[74,48584,131],{"class":80},[74,48586,85],{"class":84},[74,48588,584],{"class":134},[74,48590,464],{"class":84},[74,48592,379],{"class":134},[74,48594,34778],{"class":84},[74,48596,48597],{"class":76,"line":37770},[74,48598,37810],{"class":144},[74,48600,48601],{"class":76,"line":37781},[74,48602,37816],{"class":144},[74,48604,48605],{"class":76,"line":37787},[74,48606,37822],{"class":144},[74,48608,48609,48611,48613,48615,48617,48619,48621],{"class":76,"line":37807},[74,48610,36008],{"class":84},[74,48612,303],{"class":134},[74,48614,464],{"class":84},[74,48616,163],{"class":134},[74,48618,464],{"class":84},[74,48620,303],{"class":134},[74,48622,91],{"class":84},[74,48624,48625],{"class":76,"line":37813},[74,48626,37845],{"class":144},[74,48628,48629],{"class":76,"line":37819},[74,48630,37851],{"class":144},[74,48632,48633],{"class":76,"line":37825},[74,48634,37857],{"class":144},[74,48636,48637],{"class":76,"line":37842},[74,48638,37863],{"class":144},[74,48640,48641],{"class":76,"line":37848},[74,48642,37869],{"class":144},[74,48644,48645,48647,48649,48651,48653,48655,48657,48659,48661],{"class":76,"line":37854},[74,48646,37875],{"class":84},[74,48648,37878],{"class":190},[74,48650,37881],{"class":84},[74,48652,37884],{"class":190},[74,48654,464],{"class":84},[74,48656,37889],{"class":9495},[74,48658,131],{"class":80},[74,48660,37894],{"class":190},[74,48662,91],{"class":84},[74,48664,48665,48667,48669,48671,48673,48675,48677,48679,48681],{"class":76,"line":37860},[74,48666,37875],{"class":84},[74,48668,37878],{"class":190},[74,48670,37906],{"class":84},[74,48672,37909],{"class":190},[74,48674,464],{"class":84},[74,48676,37889],{"class":9495},[74,48678,131],{"class":80},[74,48680,37918],{"class":190},[74,48682,91],{"class":84},[74,48684,48685],{"class":76,"line":37866},[74,48686,37926],{"class":144},[74,48688,48689],{"class":76,"line":37872},[74,48690,37932],{"class":84},[74,48692,48693],{"class":76,"line":37899},[74,48694,37938],{"class":144},[74,48696,48697,48699,48701],{"class":76,"line":37923},[74,48698,37944],{"class":84},[74,48700,37947],{"class":190},[74,48702,91],{"class":84},[74,48704,48705,48707,48709],{"class":76,"line":37929},[74,48706,37955],{"class":84},[74,48708,37958],{"class":190},[74,48710,91],{"class":84},[74,48712,48713],{"class":76,"line":37935},[74,48714,37966],{"class":144},[74,48716,48717,48719,48721,48723,48725,48727,48729],{"class":76,"line":37941},[74,48718,36008],{"class":84},[74,48720,303],{"class":134},[74,48722,464],{"class":84},[74,48724,163],{"class":134},[74,48726,464],{"class":84},[74,48728,163],{"class":134},[74,48730,91],{"class":84},[74,48732,48733,48735,48737,48739,48741,48743,48745,48747,48749],{"class":76,"line":37952},[74,48734,37875],{"class":84},[74,48736,37878],{"class":190},[74,48738,37993],{"class":84},[74,48740,37884],{"class":190},[74,48742,464],{"class":84},[74,48744,37889],{"class":9495},[74,48746,131],{"class":80},[74,48748,38004],{"class":190},[74,48750,91],{"class":84},[74,48752,48753,48755,48757,48759,48761,48763,48765,48767,48769],{"class":76,"line":37963},[74,48754,37875],{"class":84},[74,48756,37878],{"class":190},[74,48758,38016],{"class":84},[74,48760,37909],{"class":190},[74,48762,464],{"class":84},[74,48764,37889],{"class":9495},[74,48766,131],{"class":80},[74,48768,38027],{"class":190},[74,48770,91],{"class":84},[74,48772,48773],{"class":76,"line":37969},[74,48774,38035],{"class":144},[74,48776,48777],{"class":76,"line":37986},[74,48778,37932],{"class":84},[74,48780,48781,48783,48785],{"class":76,"line":38009},[74,48782,37944],{"class":84},[74,48784,37878],{"class":190},[74,48786,91],{"class":84},[74,48788,48789,48791,48793],{"class":76,"line":38032},[74,48790,37955],{"class":84},[74,48792,38057],{"class":190},[74,48794,91],{"class":84},[74,48796,48797],{"class":76,"line":38038},[74,48798,38065],{"class":84},[74,48800,48801],{"class":76,"line":38043},[74,48802,2363],{"emptyLinePlaceholder":2362},[74,48804,48805],{"class":76,"line":38052},[74,48806,38076],{"class":144},[74,48808,48809,48811,48813,48815,48817],{"class":76,"line":38062},[74,48810,1493],{"class":80},[74,48812,35501],{"class":134},[74,48814,2912],{"class":80},[74,48816,35506],{"class":190},[74,48818,3702],{"class":84},[74,48820,48821],{"class":76,"line":38068},[74,48822,38095],{"class":144},[74,48824,48825,48828,48830],{"class":76,"line":38073},[74,48826,48827],{"class":84},"    GoogLeNet",[74,48829,131],{"class":80},[74,48831,48832],{"class":84},"GoogLeNet(Inception)\n",[74,48834,48835,48837,48839],{"class":76,"line":38079},[74,48836,38112],{"class":84},[74,48838,131],{"class":80},[74,48840,38117],{"class":84},[74,48842,48843,48845,48847,48850,48852,48854,48856],{"class":76,"line":38092},[74,48844,37674],{"class":84},[74,48846,131],{"class":80},[74,48848,48849],{"class":84},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[74,48851,38130],{"class":9495},[74,48853,131],{"class":80},[74,48855,1037],{"class":134},[74,48857,91],{"class":84},[74,48859,48860],{"class":76,"line":38098},[74,48861,38142],{"class":84},[27,48863,48864],{"start":1141},[30,48865,44855],{},[64,48867,48869],{"className":34659,"code":48868,"language":34661,"meta":69,"style":69},"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",[71,48870,48871,48877,48887,48897,48901,48911,48922,48926,48930,48934,48942,48958,48968,48984,48994,49008,49012,49022,49032,49042,49048,49052,49056,49064,49068,49084,49092,49096,49100,49108,49116,49120,49124,49128,49132,49138,49142,49152,49160,49168,49172,49176,49180,49188,49192,49208,49212,49216,49220,49232,49236,49248,49252,49256,49268,49272,49282,49286,49290,49302,49306,49314,49318,49322,49330,49334,49342,49346,49350,49354,49358,49362,49378,49386,49390,49394,49442,49448,49452,49462,49470,49478,49482,49486,49490,49494,49502,49506,49522,49526,49534,49542],{"__ignoreMap":69},[74,48872,48873,48875],{"class":76,"line":77},[74,48874,34673],{"class":80},[74,48876,34676],{"class":84},[74,48878,48879,48881,48883,48885],{"class":76,"line":94},[74,48880,34673],{"class":80},[74,48882,35696],{"class":84},[74,48884,35664],{"class":80},[74,48886,35701],{"class":84},[74,48888,48889,48891,48893,48895],{"class":76,"line":1141},[74,48890,35018],{"class":80},[74,48892,35679],{"class":84},[74,48894,34673],{"class":80},[74,48896,35684],{"class":84},[74,48898,48899],{"class":76,"line":1156},[74,48900,38203],{"class":144},[74,48902,48903,48905,48907,48909],{"class":76,"line":1162},[74,48904,35018],{"class":80},[74,48906,35649],{"class":84},[74,48908,34673],{"class":80},[74,48910,35654],{"class":84},[74,48912,48913,48915,48917,48919],{"class":76,"line":1176},[74,48914,35018],{"class":80},[74,48916,36195],{"class":84},[74,48918,34673],{"class":80},[74,48920,48921],{"class":84}," GoogLeNet,Inception\n",[74,48923,48924],{"class":76,"line":1182},[74,48925,2363],{"emptyLinePlaceholder":2362},[74,48927,48928],{"class":76,"line":1273},[74,48929,2363],{"emptyLinePlaceholder":2362},[74,48931,48932],{"class":76,"line":1279},[74,48933,38232],{"class":144},[74,48935,48936,48938,48940],{"class":76,"line":1291},[74,48937,36228],{"class":80},[74,48939,38239],{"class":1925},[74,48941,36234],{"class":84},[74,48943,48944,48946,48948,48950,48952,48954,48956],{"class":76,"line":1574},[74,48945,38246],{"class":84},[74,48947,131],{"class":80},[74,48949,35736],{"class":84},[74,48951,35739],{"class":9495},[74,48953,131],{"class":80},[74,48955,35744],{"class":190},[74,48957,35747],{"class":84},[74,48959,48960,48962,48964,48966],{"class":76,"line":1579},[74,48961,38263],{"class":9495},[74,48963,131],{"class":80},[74,48965,38268],{"class":134},[74,48967,35747],{"class":84},[74,48969,48970,48972,48974,48976,48978,48980,48982],{"class":76,"line":1585},[74,48971,38275],{"class":9495},[74,48973,131],{"class":80},[74,48975,35774],{"class":84},[74,48977,35777],{"class":9495},[74,48979,131],{"class":80},[74,48981,39730],{"class":134},[74,48983,35785],{"class":84},[74,48985,48986,48988,48990,48992],{"class":76,"line":1590},[74,48987,38292],{"class":9495},[74,48989,131],{"class":80},[74,48991,35757],{"class":134},[74,48993,91],{"class":84},[74,48995,48996,48998,49000,49002,49004,49006],{"class":76,"line":1604},[74,48997,38303],{"class":84},[74,48999,131],{"class":80},[74,49001,35815],{"class":84},[74,49003,35818],{"class":9495},[74,49005,131],{"class":80},[74,49007,38314],{"class":84},[74,49009,49010],{"class":76,"line":1609},[74,49011,38319],{"class":144},[74,49013,49014,49016,49018,49020],{"class":76,"line":1615},[74,49015,38324],{"class":9495},[74,49017,131],{"class":80},[74,49019,303],{"class":134},[74,49021,35747],{"class":84},[74,49023,49024,49026,49028,49030],{"class":76,"line":1636},[74,49025,38335],{"class":9495},[74,49027,131],{"class":80},[74,49029,35757],{"class":134},[74,49031,35747],{"class":84},[74,49033,49034,49036,49038,49040],{"class":76,"line":1641},[74,49035,38346],{"class":9495},[74,49037,131],{"class":80},[74,49039,277],{"class":134},[74,49041,91],{"class":84},[74,49043,49044,49046],{"class":76,"line":1655},[74,49045,4053],{"class":80},[74,49047,38359],{"class":84},[74,49049,49050],{"class":76,"line":1660},[74,49051,2363],{"emptyLinePlaceholder":2362},[74,49053,49054],{"class":76,"line":1689},[74,49055,38368],{"class":144},[74,49057,49058,49060,49062],{"class":76,"line":1694},[74,49059,36228],{"class":80},[74,49061,38375],{"class":1925},[74,49063,38378],{"class":84},[74,49065,49066],{"class":76,"line":1711},[74,49067,38383],{"class":144},[74,49069,49070,49072,49074,49076,49078,49080,49082],{"class":76,"line":1716},[74,49071,35518],{"class":84},[74,49073,131],{"class":80},[74,49075,35525],{"class":190},[74,49077,1666],{"class":80},[74,49079,35530],{"class":84},[74,49081,1663],{"class":80},[74,49083,38400],{"class":190},[74,49085,49086,49088,49090],{"class":76,"line":1721},[74,49087,35570],{"class":84},[74,49089,131],{"class":80},[74,49091,36570],{"class":84},[74,49093,49094],{"class":76,"line":1726},[74,49095,2363],{"emptyLinePlaceholder":2362},[74,49097,49098],{"class":76,"line":1740},[74,49099,38417],{"class":144},[74,49101,49102,49104,49106],{"class":76,"line":1745},[74,49103,38422],{"class":84},[74,49105,131],{"class":80},[74,49107,36623],{"class":134},[74,49109,49110,49112,49114],{"class":76,"line":2540},[74,49111,38431],{"class":84},[74,49113,131],{"class":80},[74,49115,3048],{"class":134},[74,49117,49118],{"class":76,"line":2554},[74,49119,2363],{"emptyLinePlaceholder":2362},[74,49121,49122],{"class":76,"line":2562},[74,49123,38444],{"class":144},[74,49125,49126],{"class":76,"line":2567},[74,49127,38449],{"class":144},[74,49129,49130],{"class":76,"line":2573},[74,49131,38454],{"class":144},[74,49133,49134,49136],{"class":76,"line":2579},[74,49135,38459],{"class":80},[74,49137,37165],{"class":84},[74,49139,49140],{"class":76,"line":2584},[74,49141,38466],{"class":144},[74,49143,49144,49146,49148,49150],{"class":76,"line":12227},[74,49145,3366],{"class":80},[74,49147,38473],{"class":84},[74,49149,30324],{"class":80},[74,49151,38478],{"class":84},[74,49153,49154,49156,49158],{"class":76,"line":12251},[74,49155,38483],{"class":84},[74,49157,131],{"class":80},[74,49159,38488],{"class":84},[74,49161,49162,49164,49166],{"class":76,"line":12256},[74,49163,38493],{"class":84},[74,49165,131],{"class":80},[74,49167,38498],{"class":84},[74,49169,49170],{"class":76,"line":12262},[74,49171,38503],{"class":144},[74,49173,49174],{"class":76,"line":12289},[74,49175,37156],{"class":84},[74,49177,49178],{"class":76,"line":12294},[74,49179,38512],{"class":144},[74,49181,49182,49184,49186],{"class":76,"line":12300},[74,49183,36941],{"class":84},[74,49185,131],{"class":80},[74,49187,38521],{"class":84},[74,49189,49190],{"class":76,"line":12312},[74,49191,38526],{"class":144},[74,49193,49194,49196,49198,49200,49202,49204,49206],{"class":76,"line":12324},[74,49195,36958],{"class":84},[74,49197,131],{"class":80},[74,49199,36963],{"class":84},[74,49201,36966],{"class":9495},[74,49203,131],{"class":80},[74,49205,303],{"class":134},[74,49207,91],{"class":84},[74,49209,49210],{"class":76,"line":12336},[74,49211,38547],{"class":144},[74,49213,49214],{"class":76,"line":13995},[74,49215,38552],{"class":144},[74,49217,49218],{"class":76,"line":14020},[74,49219,38557],{"class":144},[74,49221,49222,49224,49226,49228,49230],{"class":76,"line":14043},[74,49223,38562],{"class":84},[74,49225,13756],{"class":80},[74,49227,37068],{"class":84},[74,49229,2912],{"class":80},[74,49231,38571],{"class":84},[74,49233,49234],{"class":76,"line":14067},[74,49235,38576],{"class":144},[74,49237,49238,49240,49242,49244,49246],{"class":76,"line":14072},[74,49239,38581],{"class":84},[74,49241,13756],{"class":80},[74,49243,38586],{"class":84},[74,49245,277],{"class":134},[74,49247,91],{"class":84},[74,49249,49250],{"class":76,"line":14077},[74,49251,2363],{"emptyLinePlaceholder":2362},[74,49253,49254],{"class":76,"line":14082},[74,49255,38599],{"class":144},[74,49257,49258,49260,49262,49264,49266],{"class":76,"line":14091},[74,49259,38604],{"class":84},[74,49261,131],{"class":80},[74,49263,38609],{"class":84},[74,49265,670],{"class":80},[74,49267,38614],{"class":84},[74,49269,49270],{"class":76,"line":14096},[74,49271,38619],{"class":144},[74,49273,49274,49276,49278,49280],{"class":76,"line":14102},[74,49275,36732],{"class":134},[74,49277,85],{"class":84},[74,49279,38628],{"class":190},[74,49281,38631],{"class":84},[74,49283,49284],{"class":76,"line":14123},[74,49285,2363],{"emptyLinePlaceholder":2362},[74,49287,49288],{"class":76,"line":14129},[74,49289,38640],{"class":144},[74,49291,49292,49294,49296,49298,49300],{"class":76,"line":14143},[74,49293,1493],{"class":80},[74,49295,35501],{"class":134},[74,49297,2912],{"class":80},[74,49299,35506],{"class":190},[74,49301,3702],{"class":84},[74,49303,49304],{"class":76,"line":14149},[74,49305,38657],{"class":144},[74,49307,49308,49310,49312],{"class":76,"line":14176},[74,49309,35570],{"class":84},[74,49311,131],{"class":80},[74,49313,48832],{"class":84},[74,49315,49316],{"class":76,"line":14185},[74,49317,38670],{"class":144},[74,49319,49320],{"class":76,"line":14191},[74,49321,38675],{"class":144},[74,49323,49324,49326,49328],{"class":76,"line":14199},[74,49325,38680],{"class":84},[74,49327,38683],{"class":190},[74,49329,34778],{"class":84},[74,49331,49332],{"class":76,"line":14204},[74,49333,38690],{"class":144},[74,49335,49336,49338,49340],{"class":76,"line":20883},[74,49337,38303],{"class":84},[74,49339,131],{"class":80},[74,49341,38699],{"class":84},[74,49343,49344],{"class":76,"line":20889},[74,49345,38704],{"class":144},[74,49347,49348],{"class":76,"line":20912},[74,49349,38709],{"class":84},[74,49351,49352],{"class":76,"line":20918},[74,49353,2363],{"emptyLinePlaceholder":2362},[74,49355,49356],{"class":76,"line":20941},[74,49357,38718],{"class":144},[74,49359,49360],{"class":76,"line":20955},[74,49361,38723],{"class":144},[74,49363,49364,49366,49368,49370,49372,49374,49376],{"class":76,"line":20975},[74,49365,35518],{"class":84},[74,49367,131],{"class":80},[74,49369,35525],{"class":190},[74,49371,1666],{"class":80},[74,49373,35530],{"class":84},[74,49375,1663],{"class":80},[74,49377,38400],{"class":190},[74,49379,49380,49382,49384],{"class":76,"line":20981},[74,49381,35570],{"class":84},[74,49383,131],{"class":80},[74,49385,36570],{"class":84},[74,49387,49388],{"class":76,"line":20992},[74,49389,38752],{"class":144},[74,49391,49392],{"class":76,"line":21015},[74,49393,38757],{"class":144},[74,49395,49396,49398,49400,49402,49404,49406,49408,49410,49412,49414,49416,49418,49420,49422,49424,49426,49428,49430,49432,49434,49436,49438,49440],{"class":76,"line":21037},[74,49397,38762],{"class":84},[74,49399,131],{"class":80},[74,49401,976],{"class":84},[74,49403,38769],{"class":190},[74,49405,464],{"class":84},[74,49407,38774],{"class":190},[74,49409,464],{"class":84},[74,49411,38779],{"class":190},[74,49413,464],{"class":84},[74,49415,38784],{"class":190},[74,49417,464],{"class":84},[74,49419,38789],{"class":190},[74,49421,464],{"class":84},[74,49423,38794],{"class":190},[74,49425,464],{"class":84},[74,49427,38799],{"class":190},[74,49429,464],{"class":84},[74,49431,38804],{"class":190},[74,49433,464],{"class":84},[74,49435,38809],{"class":190},[74,49437,464],{"class":84},[74,49439,38814],{"class":190},[74,49441,37527],{"class":84},[74,49443,49444,49446],{"class":76,"line":21042},[74,49445,38459],{"class":80},[74,49447,37165],{"class":84},[74,49449,49450],{"class":76,"line":21048},[74,49451,38827],{"class":144},[74,49453,49454,49456,49458,49460],{"class":76,"line":21062},[74,49455,3366],{"class":80},[74,49457,38834],{"class":84},[74,49459,30324],{"class":80},[74,49461,38478],{"class":84},[74,49463,49464,49466,49468],{"class":76,"line":21075},[74,49465,36891],{"class":84},[74,49467,131],{"class":80},[74,49469,36896],{"class":84},[74,49471,49472,49474,49476],{"class":76,"line":21080},[74,49473,36906],{"class":84},[74,49475,131],{"class":80},[74,49477,36911],{"class":84},[74,49479,49480],{"class":76,"line":21094},[74,49481,2363],{"emptyLinePlaceholder":2362},[74,49483,49484],{"class":76,"line":21099},[74,49485,38863],{"class":144},[74,49487,49488],{"class":76,"line":21105},[74,49489,37156],{"class":84},[74,49491,49492],{"class":76,"line":21110},[74,49493,38872],{"class":144},[74,49495,49496,49498,49500],{"class":76,"line":21124},[74,49497,36941],{"class":84},[74,49499,131],{"class":80},[74,49501,36946],{"class":84},[74,49503,49504],{"class":76,"line":21129},[74,49505,38885],{"class":144},[74,49507,49508,49510,49512,49514,49516,49518,49520],{"class":76,"line":21134},[74,49509,36958],{"class":84},[74,49511,131],{"class":80},[74,49513,36963],{"class":84},[74,49515,36966],{"class":9495},[74,49517,131],{"class":80},[74,49519,303],{"class":134},[74,49521,91],{"class":84},[74,49523,49524],{"class":76,"line":21148},[74,49525,38906],{"class":144},[74,49527,49528,49530,49532],{"class":76,"line":21160},[74,49529,38911],{"class":84},[74,49531,131],{"class":80},[74,49533,38916],{"class":84},[74,49535,49536,49538,49540],{"class":76,"line":21165},[74,49537,38921],{"class":84},[74,49539,131],{"class":80},[74,49541,38926],{"class":84},[74,49543,49544,49546,49548,49550,49552,49554,49556,49558],{"class":76,"line":21178},[74,49545,38931],{"class":134},[74,49547,85],{"class":84},[74,49549,38936],{"class":190},[74,49551,38939],{"class":84},[74,49553,38942],{"class":190},[74,49555,464],{"class":84},[74,49557,38947],{"class":190},[74,49559,38950],{"class":84},[44,49561,49563],{"id":49562},"_24训练自己的数据集","2.4.训练自己的数据集",[19,49565,49566],{},"猫狗分类任务",[19,49568,49569],{},"划分数据集和验证集",[64,49571,49573],{"className":34659,"code":49572,"language":34661,"meta":69,"style":69},"# 创建脚本，用于划分数据集和验证集\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",[71,49574,49575,49580,49587,49592,49603,49610,49614,49624,49638,49647,49651,49656,49666,49686,49690,49695,49705,49716,49729,49733,49738,49747,49757,49768,49772,49777,49787,49791,49796,49801,49806,49811,49816,49820,49830,49857,49870,49882,49909,49914,49919,49933,49938,49950,49965,49980,49988,49992,49997,50003,50015,50028,50033,50038,50043,50093,50099,50103],{"__ignoreMap":69},[74,49576,49577],{"class":76,"line":77},[74,49578,49579],{"class":144},"# 创建脚本，用于划分数据集和验证集\n",[74,49581,49582,49584],{"class":76,"line":94},[74,49583,34673],{"class":80},[74,49585,49586],{"class":84}," os\n",[74,49588,49589],{"class":76,"line":1141},[74,49590,49591],{"class":144},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[74,49593,49594,49596,49599,49601],{"class":76,"line":1156},[74,49595,35018],{"class":80},[74,49597,49598],{"class":84}," shutil ",[74,49600,34673],{"class":80},[74,49602,36103],{"class":84},[74,49604,49605,49607],{"class":76,"line":1162},[74,49606,34673],{"class":80},[74,49608,49609],{"class":84}," random\n",[74,49611,49612],{"class":76,"line":1176},[74,49613,2363],{"emptyLinePlaceholder":2362},[74,49615,49616,49618,49621],{"class":76,"line":1182},[74,49617,36228],{"class":80},[74,49619,49620],{"class":1925}," mkfile",[74,49622,49623],{"class":84},"(file):\n",[74,49625,49626,49628,49630,49633,49636],{"class":76,"line":1273},[74,49627,3064],{"class":80},[74,49629,43211],{"class":80},[74,49631,49632],{"class":84}," os.path.exists(",[74,49634,49635],{"class":9495},"file",[74,49637,35067],{"class":84},[74,49639,49640,49643,49645],{"class":76,"line":1279},[74,49641,49642],{"class":84},"        os.makedirs(",[74,49644,49635],{"class":9495},[74,49646,91],{"class":84},[74,49648,49649],{"class":76,"line":1291},[74,49650,2363],{"emptyLinePlaceholder":2362},[74,49652,49653],{"class":76,"line":1574},[74,49654,49655],{"class":144},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[74,49657,49658,49661,49663],{"class":76,"line":1579},[74,49659,49660],{"class":84},"file_path",[74,49662,131],{"class":80},[74,49664,49665],{"class":190},"'data_cat_dog'\n",[74,49667,49668,49671,49673,49676,49678,49681,49683],{"class":76,"line":1585},[74,49669,49670],{"class":84},"flower_class",[74,49672,131],{"class":80},[74,49674,49675],{"class":84},"[cla ",[74,49677,2988],{"class":80},[74,49679,49680],{"class":84}," cla ",[74,49682,30324],{"class":80},[74,49684,49685],{"class":84}," os.listdir(file_path)]\n",[74,49687,49688],{"class":76,"line":1590},[74,49689,2363],{"emptyLinePlaceholder":2362},[74,49691,49692],{"class":76,"line":1604},[74,49693,49694],{"class":144},"# 创建训练集train文件夹\n",[74,49696,49697,49700,49703],{"class":76,"line":1609},[74,49698,49699],{"class":84},"mkfile(",[74,49701,49702],{"class":190},"'data\u002Ftrain'",[74,49704,91],{"class":84},[74,49706,49707,49709,49711,49713],{"class":76,"line":1615},[74,49708,2988],{"class":80},[74,49710,49680],{"class":84},[74,49712,30324],{"class":80},[74,49714,49715],{"class":84}," flower_class:\n",[74,49717,49718,49721,49724,49726],{"class":76,"line":1636},[74,49719,49720],{"class":84},"    mkfile(",[74,49722,49723],{"class":190},"'data\u002Ftrain\u002F'",[74,49725,567],{"class":80},[74,49727,49728],{"class":84},"cla)\n",[74,49730,49731],{"class":76,"line":1641},[74,49732,2363],{"emptyLinePlaceholder":2362},[74,49734,49735],{"class":76,"line":1655},[74,49736,49737],{"class":144},"# 创建验证集val文件夹\n",[74,49739,49740,49742,49745],{"class":76,"line":1660},[74,49741,49699],{"class":84},[74,49743,49744],{"class":190},"'data\u002Ftest'",[74,49746,91],{"class":84},[74,49748,49749,49751,49753,49755],{"class":76,"line":1689},[74,49750,2988],{"class":80},[74,49752,49680],{"class":84},[74,49754,30324],{"class":80},[74,49756,49715],{"class":84},[74,49758,49759,49761,49764,49766],{"class":76,"line":1694},[74,49760,49720],{"class":84},[74,49762,49763],{"class":190},"'data\u002Ftest\u002F'",[74,49765,567],{"class":80},[74,49767,49728],{"class":84},[74,49769,49770],{"class":76,"line":1711},[74,49771,2363],{"emptyLinePlaceholder":2362},[74,49773,49774],{"class":76,"line":1716},[74,49775,49776],{"class":144},"# 划分比例，训练集：测试集=9：1\n",[74,49778,49779,49782,49784],{"class":76,"line":1721},[74,49780,49781],{"class":84},"split_rate",[74,49783,131],{"class":80},[74,49785,49786],{"class":134},"0.1\n",[74,49788,49789],{"class":76,"line":1726},[74,49790,2363],{"emptyLinePlaceholder":2362},[74,49792,49793],{"class":76,"line":1740},[74,49794,49795],{"class":144},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[74,49797,49798],{"class":76,"line":1745},[74,49799,49800],{"class":144},"# cla_path：当前类别的原始图片路径\n",[74,49802,49803],{"class":76,"line":2540},[74,49804,49805],{"class":144},"# images：当前类别下所有图片的文件名列表\n",[74,49807,49808],{"class":76,"line":2554},[74,49809,49810],{"class":144},"# num：该类别图片总数\n",[74,49812,49813],{"class":76,"line":2562},[74,49814,49815],{"class":144},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[74,49817,49818],{"class":76,"line":2567},[74,49819,2363],{"emptyLinePlaceholder":2362},[74,49821,49822,49824,49826,49828],{"class":76,"line":2573},[74,49823,2988],{"class":80},[74,49825,49680],{"class":84},[74,49827,30324],{"class":80},[74,49829,49715],{"class":84},[74,49831,49832,49835,49837,49840,49842,49845,49848,49850,49852,49854],{"class":76,"line":2579},[74,49833,49834],{"class":84},"    cla_path ",[74,49836,131],{"class":80},[74,49838,49839],{"class":84}," file_path ",[74,49841,567],{"class":80},[74,49843,49844],{"class":190}," '\u002F'",[74,49846,49847],{"class":80}," +",[74,49849,49680],{"class":84},[74,49851,567],{"class":80},[74,49853,49844],{"class":190},[74,49855,49856],{"class":144},"  # 某一类别的子目录\n",[74,49858,49859,49862,49864,49867],{"class":76,"line":2584},[74,49860,49861],{"class":84},"    images ",[74,49863,131],{"class":80},[74,49865,49866],{"class":84}," os.listdir(cla_path)  ",[74,49868,49869],{"class":144},"# iamges 列表存储了该目录下所有图像的名称\n",[74,49871,49872,49875,49877,49879],{"class":76,"line":12227},[74,49873,49874],{"class":84},"    num ",[74,49876,131],{"class":80},[74,49878,11610],{"class":134},[74,49880,49881],{"class":84},"(images)\n",[74,49883,49884,49887,49889,49892,49894,49896,49898,49901,49903,49906],{"class":76,"line":12251},[74,49885,49886],{"class":84},"    eval_index ",[74,49888,131],{"class":80},[74,49890,49891],{"class":84}," random.sample(images, ",[74,49893,579],{"class":9495},[74,49895,131],{"class":80},[74,49897,88],{"class":134},[74,49899,49900],{"class":84},"(num ",[74,49902,541],{"class":80},[74,49904,49905],{"class":84}," split_rate))  ",[74,49907,49908],{"class":144},"# 从images列表中随机抽取 k 个图像名称\n",[74,49910,49911],{"class":76,"line":12256},[74,49912,49913],{"class":144},"    # 遍历该类别下的所有图片\n",[74,49915,49916],{"class":76,"line":12262},[74,49917,49918],{"class":144},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[74,49920,49921,49923,49926,49928,49930],{"class":76,"line":12289},[74,49922,3164],{"class":80},[74,49924,49925],{"class":84}," index, image ",[74,49927,30324],{"class":80},[74,49929,35887],{"class":134},[74,49931,49932],{"class":84},"(images):\n",[74,49934,49935],{"class":76,"line":12294},[74,49936,49937],{"class":144},"        # eval_index 中保存验证集val的图像名称\n",[74,49939,49940,49942,49945,49947],{"class":76,"line":12300},[74,49941,2460],{"class":80},[74,49943,49944],{"class":84}," image ",[74,49946,30324],{"class":80},[74,49948,49949],{"class":84}," eval_index:\n",[74,49951,49952,49955,49957,49960,49962],{"class":76,"line":12312},[74,49953,49954],{"class":84},"            image_path ",[74,49956,131],{"class":80},[74,49958,49959],{"class":84}," cla_path ",[74,49961,567],{"class":80},[74,49963,49964],{"class":84}," image\n",[74,49966,49967,49970,49972,49975,49977],{"class":76,"line":12324},[74,49968,49969],{"class":84},"            new_path ",[74,49971,131],{"class":80},[74,49973,49974],{"class":190}," 'data\u002Ftest\u002F'",[74,49976,49847],{"class":80},[74,49978,49979],{"class":84}," cla\n",[74,49981,49982,49985],{"class":76,"line":12336},[74,49983,49984],{"class":84},"            copy(image_path, new_path)  ",[74,49986,49987],{"class":144},"# 将选中的图像复制到新路径\n",[74,49989,49990],{"class":76,"line":13995},[74,49991,2363],{"emptyLinePlaceholder":2362},[74,49993,49994],{"class":76,"line":14020},[74,49995,49996],{"class":144},"        # 其余的图像保存在训练集train中\n",[74,49998,49999,50001],{"class":76,"line":14043},[74,50000,2497],{"class":80},[74,50002,3702],{"class":84},[74,50004,50005,50007,50009,50011,50013],{"class":76,"line":14067},[74,50006,49954],{"class":84},[74,50008,131],{"class":80},[74,50010,49959],{"class":84},[74,50012,567],{"class":80},[74,50014,49964],{"class":84},[74,50016,50017,50019,50021,50024,50026],{"class":76,"line":14072},[74,50018,49969],{"class":84},[74,50020,131],{"class":80},[74,50022,50023],{"class":190}," 'data\u002Ftrain\u002F'",[74,50025,49847],{"class":80},[74,50027,49979],{"class":84},[74,50029,50030],{"class":76,"line":14077},[74,50031,50032],{"class":84},"            copy(image_path, new_path)\n",[74,50034,50035],{"class":76,"line":14082},[74,50036,50037],{"class":144},"            # 打印进度条信息\n",[74,50039,50040],{"class":76,"line":14091},[74,50041,50042],{"class":144},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[74,50044,50045,50047,50049,50051,50054,50056,50058,50061,50063,50065,50067,50070,50073,50075,50077,50080,50083,50085,50087,50090],{"class":76,"line":14096},[74,50046,36732],{"class":134},[74,50048,85],{"class":84},[74,50050,337],{"class":190},[74,50052,50053],{"class":134},"\\r",[74,50055,976],{"class":190},[74,50057,36740],{"class":134},[74,50059,50060],{"class":190},"] processing [",[74,50062,36740],{"class":134},[74,50064,670],{"class":190},[74,50066,36740],{"class":134},[74,50068,50069],{"class":190},"]\"",[74,50071,50072],{"class":84},".format(cla, index ",[74,50074,567],{"class":80},[74,50076,29399],{"class":134},[74,50078,50079],{"class":84},", num), ",[74,50081,50082],{"class":9495},"end",[74,50084,131],{"class":80},[74,50086,11931],{"class":190},[74,50088,50089],{"class":84},")  ",[74,50091,50092],{"class":144},"# processing bar\n",[74,50094,50095,50097],{"class":76,"line":14102},[74,50096,35580],{"class":134},[74,50098,1938],{"class":84},[74,50100,50101],{"class":76,"line":14123},[74,50102,2363],{"emptyLinePlaceholder":2362},[74,50104,50105,50107,50109,50112],{"class":76,"line":14129},[74,50106,34696],{"class":134},[74,50108,85],{"class":84},[74,50110,50111],{"class":190},"\"processing done!\"",[74,50113,91],{"class":84},[19,50115,50116],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[26277,50118,50120],{"id":50119},"_242模型代码","2.4.2.模型代码",[19,50122,50123],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[64,50125,50127],{"className":34659,"code":50126,"language":34661,"meta":69,"style":69},"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",[71,50128,50129,50135,50145,50155,50159,50175,50183,50197,50207,50211,50241,50245,50279,50325,50329,50363,50409,50413,50417,50451,50481,50485,50493,50507,50529,50551,50569,50573,50587,50591,50595,50611,50615,50623,50637,50647,50691,50695,50723,50727,50737,50765,50769,50805,50809,50837,50841,50851,50883,50915,50943,50947,50957,50989,51021,51053,51085,51117,51145,51149,51159,51191,51223,51235,51239,51251,51255,51259,51271,51279,51299,51303,51307,51311,51315,51319,51323,51337,51345,51353,51365,51379,51387,51391,51399,51409,51419,51429,51439,51449,51455,51459,51463,51475,51495,51503],{"__ignoreMap":69},[74,50130,50131,50133],{"class":76,"line":77},[74,50132,34673],{"class":80},[74,50134,34676],{"class":84},[74,50136,50137,50139,50141,50143],{"class":76,"line":94},[74,50138,35018],{"class":80},[74,50140,35021],{"class":84},[74,50142,34673],{"class":80},[74,50144,35026],{"class":84},[74,50146,50147,50149,50151,50153],{"class":76,"line":1141},[74,50148,35018],{"class":80},[74,50150,35038],{"class":84},[74,50152,34673],{"class":80},[74,50154,35043],{"class":84},[74,50156,50157],{"class":76,"line":1156},[74,50158,2363],{"emptyLinePlaceholder":2362},[74,50160,50161,50163,50165,50167,50169,50171,50173],{"class":76,"line":1162},[74,50162,18973],{"class":80},[74,50164,45774],{"class":1925},[74,50166,85],{"class":84},[74,50168,35059],{"class":1925},[74,50170,644],{"class":84},[74,50172,35064],{"class":1925},[74,50174,35067],{"class":84},[74,50176,50177,50179,50181],{"class":76,"line":1176},[74,50178,35082],{"class":80},[74,50180,35085],{"class":134},[74,50182,45793],{"class":84},[74,50184,50185,50187,50189,50191,50193,50195],{"class":76,"line":1182},[74,50186,35098],{"class":134},[74,50188,45800],{"class":84},[74,50190,35104],{"class":134},[74,50192,35107],{"class":84},[74,50194,35110],{"class":134},[74,50196,1938],{"class":84},[74,50198,50199,50201,50203,50205],{"class":76,"line":1273},[74,50200,35126],{"class":134},[74,50202,39052],{"class":84},[74,50204,131],{"class":80},[74,50206,39057],{"class":84},[74,50208,50209],{"class":76,"line":1279},[74,50210,45823],{"class":144},[74,50212,50213,50215,50217,50219,50221,50223,50225,50227,50229,50231,50233,50235,50237,50239],{"class":76,"line":1291},[74,50214,35126],{"class":134},[74,50216,45830],{"class":84},[74,50218,131],{"class":80},[74,50220,35134],{"class":84},[74,50222,35137],{"class":9495},[74,50224,131],{"class":80},[74,50226,45841],{"class":84},[74,50228,35146],{"class":9495},[74,50230,131],{"class":80},[74,50232,45848],{"class":84},[74,50234,35155],{"class":9495},[74,50236,131],{"class":80},[74,50238,303],{"class":134},[74,50240,91],{"class":84},[74,50242,50243],{"class":76,"line":1574},[74,50244,45861],{"class":144},[74,50246,50247,50249,50251,50253,50255,50257,50259,50261,50263,50265,50267,50269,50271,50273,50275,50277],{"class":76,"line":1579},[74,50248,35126],{"class":134},[74,50250,45868],{"class":84},[74,50252,131],{"class":80},[74,50254,35134],{"class":84},[74,50256,35137],{"class":9495},[74,50258,131],{"class":80},[74,50260,45841],{"class":84},[74,50262,35146],{"class":9495},[74,50264,131],{"class":80},[74,50266,45885],{"class":84},[74,50268,277],{"class":134},[74,50270,45890],{"class":84},[74,50272,35155],{"class":9495},[74,50274,131],{"class":80},[74,50276,303],{"class":134},[74,50278,91],{"class":84},[74,50280,50281,50283,50285,50287,50289,50291,50293,50295,50297,50299,50301,50303,50305,50307,50309,50311,50313,50315,50317,50319,50321,50323],{"class":76,"line":1585},[74,50282,35126],{"class":134},[74,50284,45905],{"class":84},[74,50286,131],{"class":80},[74,50288,35134],{"class":84},[74,50290,35137],{"class":9495},[74,50292,131],{"class":80},[74,50294,45885],{"class":84},[74,50296,277],{"class":134},[74,50298,45890],{"class":84},[74,50300,35146],{"class":9495},[74,50302,131],{"class":80},[74,50304,45885],{"class":84},[74,50306,303],{"class":134},[74,50308,45890],{"class":84},[74,50310,35155],{"class":9495},[74,50312,131],{"class":80},[74,50314,157],{"class":134},[74,50316,464],{"class":84},[74,50318,35164],{"class":9495},[74,50320,131],{"class":80},[74,50322,303],{"class":134},[74,50324,91],{"class":84},[74,50326,50327],{"class":76,"line":1590},[74,50328,45950],{"class":144},[74,50330,50331,50333,50335,50337,50339,50341,50343,50345,50347,50349,50351,50353,50355,50357,50359,50361],{"class":76,"line":1604},[74,50332,35126],{"class":134},[74,50334,45957],{"class":84},[74,50336,131],{"class":80},[74,50338,35134],{"class":84},[74,50340,35137],{"class":9495},[74,50342,131],{"class":80},[74,50344,45841],{"class":84},[74,50346,35146],{"class":9495},[74,50348,131],{"class":80},[74,50350,45974],{"class":84},[74,50352,277],{"class":134},[74,50354,45890],{"class":84},[74,50356,35155],{"class":9495},[74,50358,131],{"class":80},[74,50360,303],{"class":134},[74,50362,91],{"class":84},[74,50364,50365,50367,50369,50371,50373,50375,50377,50379,50381,50383,50385,50387,50389,50391,50393,50395,50397,50399,50401,50403,50405,50407],{"class":76,"line":1609},[74,50366,35126],{"class":134},[74,50368,45993],{"class":84},[74,50370,131],{"class":80},[74,50372,35134],{"class":84},[74,50374,35137],{"class":9495},[74,50376,131],{"class":80},[74,50378,45974],{"class":84},[74,50380,277],{"class":134},[74,50382,45890],{"class":84},[74,50384,35146],{"class":9495},[74,50386,131],{"class":80},[74,50388,45974],{"class":84},[74,50390,303],{"class":134},[74,50392,45890],{"class":84},[74,50394,35155],{"class":9495},[74,50396,131],{"class":80},[74,50398,405],{"class":134},[74,50400,464],{"class":84},[74,50402,35164],{"class":9495},[74,50404,131],{"class":80},[74,50406,163],{"class":134},[74,50408,91],{"class":84},[74,50410,50411],{"class":76,"line":1615},[74,50412,46038],{"class":144},[74,50414,50415],{"class":76,"line":1636},[74,50416,46043],{"class":144},[74,50418,50419,50421,50423,50425,50427,50429,50431,50433,50435,50437,50439,50441,50443,50445,50447,50449],{"class":76,"line":1641},[74,50420,35126],{"class":134},[74,50422,46050],{"class":84},[74,50424,131],{"class":80},[74,50426,39110],{"class":84},[74,50428,35155],{"class":9495},[74,50430,131],{"class":80},[74,50432,157],{"class":134},[74,50434,464],{"class":84},[74,50436,35210],{"class":9495},[74,50438,131],{"class":80},[74,50440,303],{"class":134},[74,50442,464],{"class":84},[74,50444,35164],{"class":9495},[74,50446,131],{"class":80},[74,50448,303],{"class":134},[74,50450,91],{"class":84},[74,50452,50453,50455,50457,50459,50461,50463,50465,50467,50469,50471,50473,50475,50477,50479],{"class":76,"line":1655},[74,50454,35126],{"class":134},[74,50456,46085],{"class":84},[74,50458,131],{"class":80},[74,50460,35134],{"class":84},[74,50462,35137],{"class":9495},[74,50464,131],{"class":80},[74,50466,45841],{"class":84},[74,50468,35146],{"class":9495},[74,50470,131],{"class":80},[74,50472,46102],{"class":84},[74,50474,35155],{"class":9495},[74,50476,131],{"class":80},[74,50478,303],{"class":134},[74,50480,91],{"class":84},[74,50482,50483],{"class":76,"line":1660},[74,50484,2363],{"emptyLinePlaceholder":2362},[74,50486,50487,50489,50491],{"class":76,"line":1689},[74,50488,35082],{"class":80},[74,50490,35374],{"class":1925},[74,50492,35377],{"class":84},[74,50494,50495,50497,50499,50501,50503,50505],{"class":76,"line":1694},[74,50496,46127],{"class":84},[74,50498,131],{"class":80},[74,50500,35104],{"class":134},[74,50502,39465],{"class":84},[74,50504,35104],{"class":134},[74,50506,46138],{"class":84},[74,50508,50509,50511,50513,50515,50517,50519,50521,50523,50525,50527],{"class":76,"line":1711},[74,50510,11364],{"class":84},[74,50512,131],{"class":80},[74,50514,35104],{"class":134},[74,50516,39465],{"class":84},[74,50518,35104],{"class":134},[74,50520,46153],{"class":84},[74,50522,35104],{"class":134},[74,50524,39465],{"class":84},[74,50526,35104],{"class":134},[74,50528,46162],{"class":84},[74,50530,50531,50533,50535,50537,50539,50541,50543,50545,50547,50549],{"class":76,"line":1716},[74,50532,46167],{"class":84},[74,50534,131],{"class":80},[74,50536,35104],{"class":134},[74,50538,39465],{"class":84},[74,50540,35104],{"class":134},[74,50542,46178],{"class":84},[74,50544,35104],{"class":134},[74,50546,39465],{"class":84},[74,50548,35104],{"class":134},[74,50550,46187],{"class":84},[74,50552,50553,50555,50557,50559,50561,50563,50565,50567],{"class":76,"line":1721},[74,50554,46192],{"class":84},[74,50556,131],{"class":80},[74,50558,35104],{"class":134},[74,50560,39465],{"class":84},[74,50562,35104],{"class":134},[74,50564,46203],{"class":84},[74,50566,35104],{"class":134},[74,50568,46208],{"class":84},[74,50570,50571],{"class":76,"line":1726},[74,50572,46213],{"class":144},[74,50574,50575,50577,50579,50581,50583,50585],{"class":76,"line":1740},[74,50576,19031],{"class":80},[74,50578,46220],{"class":84},[74,50580,36966],{"class":9495},[74,50582,131],{"class":80},[74,50584,303],{"class":134},[74,50586,91],{"class":84},[74,50588,50589],{"class":76,"line":1745},[74,50590,2363],{"emptyLinePlaceholder":2362},[74,50592,50593],{"class":76,"line":2540},[74,50594,46241],{"class":144},[74,50596,50597,50599,50601,50603,50605,50607,50609],{"class":76,"line":2554},[74,50598,18973],{"class":80},[74,50600,46248],{"class":1925},[74,50602,85],{"class":84},[74,50604,35059],{"class":1925},[74,50606,644],{"class":84},[74,50608,35064],{"class":1925},[74,50610,35067],{"class":84},[74,50612,50613],{"class":76,"line":2562},[74,50614,46263],{"class":144},[74,50616,50617,50619,50621],{"class":76,"line":2567},[74,50618,35082],{"class":80},[74,50620,35085],{"class":134},[74,50622,46272],{"class":84},[74,50624,50625,50627,50629,50631,50633,50635],{"class":76,"line":2573},[74,50626,35098],{"class":134},[74,50628,46279],{"class":84},[74,50630,35104],{"class":134},[74,50632,35107],{"class":84},[74,50634,35110],{"class":134},[74,50636,1938],{"class":84},[74,50638,50639,50641,50643,50645],{"class":76,"line":2579},[74,50640,35126],{"class":134},[74,50642,46294],{"class":84},[74,50644,131],{"class":80},[74,50646,42290],{"class":84},[74,50648,50649,50651,50653,50655,50657,50659,50661,50663,50665,50667,50669,50671,50673,50675,50677,50679,50681,50683,50685,50687,50689],{"class":76,"line":2584},[74,50650,42295],{"class":84},[74,50652,35137],{"class":9495},[74,50654,131],{"class":80},[74,50656,157],{"class":134},[74,50658,464],{"class":84},[74,50660,35146],{"class":9495},[74,50662,131],{"class":80},[74,50664,289],{"class":134},[74,50666,464],{"class":84},[74,50668,35155],{"class":9495},[74,50670,131],{"class":80},[74,50672,455],{"class":134},[74,50674,464],{"class":84},[74,50676,35210],{"class":9495},[74,50678,131],{"class":80},[74,50680,163],{"class":134},[74,50682,464],{"class":84},[74,50684,35164],{"class":9495},[74,50686,131],{"class":80},[74,50688,157],{"class":134},[74,50690,42328],{"class":84},[74,50692,50693],{"class":76,"line":12227},[74,50694,42333],{"class":84},[74,50696,50697,50699,50701,50703,50705,50707,50709,50711,50713,50715,50717,50719,50721],{"class":76,"line":12251},[74,50698,42378],{"class":84},[74,50700,35155],{"class":9495},[74,50702,131],{"class":80},[74,50704,157],{"class":134},[74,50706,464],{"class":84},[74,50708,35210],{"class":9495},[74,50710,131],{"class":80},[74,50712,163],{"class":134},[74,50714,464],{"class":84},[74,50716,35164],{"class":9495},[74,50718,131],{"class":80},[74,50720,303],{"class":134},[74,50722,91],{"class":84},[74,50724,50725],{"class":76,"line":12256},[74,50726,42407],{"class":84},[74,50728,50729,50731,50733,50735],{"class":76,"line":12262},[74,50730,35126],{"class":134},[74,50732,46385],{"class":84},[74,50734,131],{"class":80},[74,50736,42290],{"class":84},[74,50738,50739,50741,50743,50745,50747,50749,50751,50753,50755,50757,50759,50761,50763],{"class":76,"line":12289},[74,50740,42295],{"class":84},[74,50742,35137],{"class":9495},[74,50744,131],{"class":80},[74,50746,289],{"class":134},[74,50748,464],{"class":84},[74,50750,35146],{"class":9495},[74,50752,131],{"class":80},[74,50754,289],{"class":134},[74,50756,464],{"class":84},[74,50758,35155],{"class":9495},[74,50760,131],{"class":80},[74,50762,303],{"class":134},[74,50764,42328],{"class":84},[74,50766,50767],{"class":76,"line":12294},[74,50768,42333],{"class":84},[74,50770,50771,50773,50775,50777,50779,50781,50783,50785,50787,50789,50791,50793,50795,50797,50799,50801,50803],{"class":76,"line":12300},[74,50772,42295],{"class":84},[74,50774,35137],{"class":9495},[74,50776,131],{"class":80},[74,50778,289],{"class":134},[74,50780,464],{"class":84},[74,50782,35146],{"class":9495},[74,50784,131],{"class":80},[74,50786,46440],{"class":134},[74,50788,464],{"class":84},[74,50790,35155],{"class":9495},[74,50792,131],{"class":80},[74,50794,157],{"class":134},[74,50796,464],{"class":84},[74,50798,35164],{"class":9495},[74,50800,131],{"class":80},[74,50802,303],{"class":134},[74,50804,42328],{"class":84},[74,50806,50807],{"class":76,"line":12312},[74,50808,42333],{"class":84},[74,50810,50811,50813,50815,50817,50819,50821,50823,50825,50827,50829,50831,50833,50835],{"class":76,"line":12324},[74,50812,42378],{"class":84},[74,50814,35155],{"class":9495},[74,50816,131],{"class":80},[74,50818,157],{"class":134},[74,50820,464],{"class":84},[74,50822,35210],{"class":9495},[74,50824,131],{"class":80},[74,50826,163],{"class":134},[74,50828,464],{"class":84},[74,50830,35164],{"class":9495},[74,50832,131],{"class":80},[74,50834,303],{"class":134},[74,50836,91],{"class":84},[74,50838,50839],{"class":76,"line":12336},[74,50840,42407],{"class":84},[74,50842,50843,50845,50847,50849],{"class":76,"line":13995},[74,50844,35126],{"class":134},[74,50846,46501],{"class":84},[74,50848,131],{"class":80},[74,50850,42290],{"class":84},[74,50852,50853,50855,50857,50859,50861,50863,50865,50867,50869,50871,50873,50875,50877,50879,50881],{"class":76,"line":14020},[74,50854,46510],{"class":84},[74,50856,46440],{"class":134},[74,50858,464],{"class":84},[74,50860,289],{"class":134},[74,50862,46519],{"class":84},[74,50864,295],{"class":134},[74,50866,464],{"class":84},[74,50868,36351],{"class":134},[74,50870,46528],{"class":84},[74,50872,687],{"class":134},[74,50874,464],{"class":84},[74,50876,283],{"class":134},[74,50878,46537],{"class":84},[74,50880,283],{"class":134},[74,50882,42328],{"class":84},[74,50884,50885,50887,50889,50891,50893,50895,50897,50899,50901,50903,50905,50907,50909,50911,50913],{"class":76,"line":14043},[74,50886,46510],{"class":84},[74,50888,39151],{"class":134},[74,50890,464],{"class":84},[74,50892,36351],{"class":134},[74,50894,46519],{"class":84},[74,50896,36351],{"class":134},[74,50898,464],{"class":84},[74,50900,46440],{"class":134},[74,50902,46528],{"class":84},[74,50904,283],{"class":134},[74,50906,464],{"class":84},[74,50908,295],{"class":134},[74,50910,46537],{"class":84},[74,50912,289],{"class":134},[74,50914,42328],{"class":84},[74,50916,50917,50919,50921,50923,50925,50927,50929,50931,50933,50935,50937,50939,50941],{"class":76,"line":14067},[74,50918,42378],{"class":84},[74,50920,35155],{"class":9495},[74,50922,131],{"class":80},[74,50924,157],{"class":134},[74,50926,464],{"class":84},[74,50928,35210],{"class":9495},[74,50930,131],{"class":80},[74,50932,163],{"class":134},[74,50934,464],{"class":84},[74,50936,35164],{"class":9495},[74,50938,131],{"class":80},[74,50940,303],{"class":134},[74,50942,91],{"class":84},[74,50944,50945],{"class":76,"line":14072},[74,50946,42407],{"class":84},[74,50948,50949,50951,50953,50955],{"class":76,"line":14077},[74,50950,35126],{"class":134},[74,50952,46612],{"class":84},[74,50954,131],{"class":80},[74,50956,42290],{"class":84},[74,50958,50959,50961,50963,50965,50967,50969,50971,50973,50975,50977,50979,50981,50983,50985,50987],{"class":76,"line":14082},[74,50960,46510],{"class":84},[74,50962,46623],{"class":134},[74,50964,464],{"class":84},[74,50966,46440],{"class":134},[74,50968,46519],{"class":84},[74,50970,295],{"class":134},[74,50972,464],{"class":84},[74,50974,46636],{"class":134},[74,50976,46528],{"class":84},[74,50978,687],{"class":134},[74,50980,464],{"class":84},[74,50982,693],{"class":134},[74,50984,46537],{"class":84},[74,50986,289],{"class":134},[74,50988,42328],{"class":84},[74,50990,50991,50993,50995,50997,50999,51001,51003,51005,51007,51009,51011,51013,51015,51017,51019],{"class":76,"line":14091},[74,50992,46510],{"class":84},[74,50994,42738],{"class":134},[74,50996,464],{"class":84},[74,50998,25327],{"class":134},[74,51000,46519],{"class":84},[74,51002,704],{"class":134},[74,51004,464],{"class":84},[74,51006,35782],{"class":134},[74,51008,46528],{"class":84},[74,51010,886],{"class":134},[74,51012,464],{"class":84},[74,51014,289],{"class":134},[74,51016,46537],{"class":84},[74,51018,289],{"class":134},[74,51020,42328],{"class":84},[74,51022,51023,51025,51027,51029,51031,51033,51035,51037,51039,51041,51043,51045,51047,51049,51051],{"class":76,"line":14096},[74,51024,46510],{"class":84},[74,51026,42738],{"class":134},[74,51028,464],{"class":84},[74,51030,36351],{"class":134},[74,51032,46519],{"class":84},[74,51034,36351],{"class":134},[74,51036,464],{"class":84},[74,51038,39151],{"class":134},[74,51040,46528],{"class":84},[74,51042,886],{"class":134},[74,51044,464],{"class":84},[74,51046,289],{"class":134},[74,51048,46537],{"class":84},[74,51050,289],{"class":134},[74,51052,42328],{"class":84},[74,51054,51055,51057,51059,51061,51063,51065,51067,51069,51071,51073,51075,51077,51079,51081,51083],{"class":76,"line":14102},[74,51056,46510],{"class":84},[74,51058,42738],{"class":134},[74,51060,464],{"class":84},[74,51062,704],{"class":134},[74,51064,46519],{"class":84},[74,51066,36351],{"class":134},[74,51068,464],{"class":84},[74,51070,46733],{"class":134},[74,51072,46528],{"class":84},[74,51074,283],{"class":134},[74,51076,464],{"class":84},[74,51078,289],{"class":134},[74,51080,46537],{"class":84},[74,51082,289],{"class":134},[74,51084,42328],{"class":84},[74,51086,51087,51089,51091,51093,51095,51097,51099,51101,51103,51105,51107,51109,51111,51113,51115],{"class":76,"line":14123},[74,51088,46510],{"class":84},[74,51090,46754],{"class":134},[74,51092,464],{"class":84},[74,51094,39151],{"class":134},[74,51096,46519],{"class":84},[74,51098,25327],{"class":134},[74,51100,464],{"class":84},[74,51102,46767],{"class":134},[74,51104,46528],{"class":84},[74,51106,283],{"class":134},[74,51108,464],{"class":84},[74,51110,36351],{"class":134},[74,51112,46537],{"class":84},[74,51114,36351],{"class":134},[74,51116,42328],{"class":84},[74,51118,51119,51121,51123,51125,51127,51129,51131,51133,51135,51137,51139,51141,51143],{"class":76,"line":14129},[74,51120,42378],{"class":84},[74,51122,35155],{"class":9495},[74,51124,131],{"class":80},[74,51126,157],{"class":134},[74,51128,464],{"class":84},[74,51130,35210],{"class":9495},[74,51132,131],{"class":80},[74,51134,163],{"class":134},[74,51136,464],{"class":84},[74,51138,35164],{"class":9495},[74,51140,131],{"class":80},[74,51142,303],{"class":134},[74,51144,91],{"class":84},[74,51146,51147],{"class":76,"line":14143},[74,51148,42407],{"class":84},[74,51150,51151,51153,51155,51157],{"class":76,"line":14149},[74,51152,35126],{"class":134},[74,51154,46820],{"class":84},[74,51156,131],{"class":80},[74,51158,42290],{"class":84},[74,51160,51161,51163,51165,51167,51169,51171,51173,51175,51177,51179,51181,51183,51185,51187,51189],{"class":76,"line":14176},[74,51162,46510],{"class":84},[74,51164,46831],{"class":134},[74,51166,464],{"class":84},[74,51168,39151],{"class":134},[74,51170,46519],{"class":84},[74,51172,25327],{"class":134},[74,51174,464],{"class":84},[74,51176,46767],{"class":134},[74,51178,46528],{"class":84},[74,51180,283],{"class":134},[74,51182,464],{"class":84},[74,51184,36351],{"class":134},[74,51186,46537],{"class":84},[74,51188,36351],{"class":134},[74,51190,42328],{"class":84},[74,51192,51193,51195,51197,51199,51201,51203,51205,51207,51209,51211,51213,51215,51217,51219,51221],{"class":76,"line":14185},[74,51194,46510],{"class":84},[74,51196,46831],{"class":134},[74,51198,464],{"class":84},[74,51200,39221],{"class":134},[74,51202,46519],{"class":84},[74,51204,46440],{"class":134},[74,51206,464],{"class":84},[74,51208,39221],{"class":134},[74,51210,46528],{"class":84},[74,51212,693],{"class":134},[74,51214,464],{"class":84},[74,51216,36351],{"class":134},[74,51218,46537],{"class":84},[74,51220,36351],{"class":134},[74,51222,42328],{"class":84},[74,51224,51225,51227,51229,51231,51233],{"class":76,"line":14191},[74,51226,46894],{"class":84},[74,51228,303],{"class":134},[74,51230,464],{"class":84},[74,51232,303],{"class":134},[74,51234,46903],{"class":84},[74,51236,51237],{"class":76,"line":14199},[74,51238,43071],{"class":84},[74,51240,51241,51243,51245,51247,51249],{"class":76,"line":14204},[74,51242,43076],{"class":84},[74,51244,46914],{"class":134},[74,51246,464],{"class":84},[74,51248,163],{"class":134},[74,51250,91],{"class":84},[74,51252,51253],{"class":76,"line":20883},[74,51254,42407],{"class":84},[74,51256,51257],{"class":76,"line":20889},[74,51258,46929],{"class":144},[74,51260,51261,51263,51265,51267,51269],{"class":76,"line":20912},[74,51262,3366],{"class":80},[74,51264,43149],{"class":84},[74,51266,30324],{"class":80},[74,51268,43154],{"class":134},[74,51270,43157],{"class":84},[74,51272,51273,51275,51277],{"class":76,"line":20918},[74,51274,4605],{"class":80},[74,51276,43169],{"class":134},[74,51278,43172],{"class":84},[74,51280,51281,51283,51285,51287,51289,51291,51293,51295,51297],{"class":76,"line":20941},[74,51282,43182],{"class":84},[74,51284,46956],{"class":9495},[74,51286,131],{"class":80},[74,51288,46961],{"class":190},[74,51290,464],{"class":84},[74,51292,43185],{"class":9495},[74,51294,131],{"class":80},[74,51296,43190],{"class":190},[74,51298,91],{"class":84},[74,51300,51301],{"class":76,"line":20955},[74,51302,46976],{"class":144},[74,51304,51305],{"class":76,"line":20975},[74,51306,46981],{"class":144},[74,51308,51309],{"class":76,"line":20981},[74,51310,46986],{"class":144},[74,51312,51313],{"class":76,"line":20992},[74,51314,46991],{"class":144},[74,51316,51317],{"class":76,"line":21015},[74,51318,46996],{"class":144},[74,51320,51321],{"class":76,"line":21037},[74,51322,47001],{"class":144},[74,51324,51325,51327,51329,51331,51333,51335],{"class":76,"line":21042},[74,51326,43202],{"class":80},[74,51328,43205],{"class":84},[74,51330,43208],{"class":80},[74,51332,43211],{"class":80},[74,51334,43214],{"class":134},[74,51336,3702],{"class":84},[74,51338,51339,51341,51343],{"class":76,"line":21048},[74,51340,43226],{"class":84},[74,51342,277],{"class":134},[74,51344,91],{"class":84},[74,51346,51347,51349,51351],{"class":76,"line":21062},[74,51348,47028],{"class":80},[74,51350,43169],{"class":134},[74,51352,43245],{"class":84},[74,51354,51355,51357,51359,51361,51363],{"class":76,"line":21075},[74,51356,47037],{"class":84},[74,51358,277],{"class":134},[74,51360,464],{"class":84},[74,51362,43267],{"class":134},[74,51364,91],{"class":84},[74,51366,51367,51369,51371,51373,51375,51377],{"class":76,"line":21080},[74,51368,47050],{"class":80},[74,51370,43205],{"class":84},[74,51372,43208],{"class":80},[74,51374,43211],{"class":80},[74,51376,43214],{"class":134},[74,51378,3702],{"class":84},[74,51380,51381,51383,51385],{"class":76,"line":21094},[74,51382,47065],{"class":84},[74,51384,277],{"class":134},[74,51386,91],{"class":84},[74,51388,51389],{"class":76,"line":21099},[74,51390,39446],{"class":144},[74,51392,51393,51395,51397],{"class":76,"line":21105},[74,51394,35082],{"class":80},[74,51396,35374],{"class":1925},[74,51398,35377],{"class":84},[74,51400,51401,51403,51405,51407],{"class":76,"line":21110},[74,51402,35382],{"class":84},[74,51404,131],{"class":80},[74,51406,35104],{"class":134},[74,51408,47092],{"class":84},[74,51410,51411,51413,51415,51417],{"class":76,"line":21124},[74,51412,35382],{"class":84},[74,51414,131],{"class":80},[74,51416,35104],{"class":134},[74,51418,47103],{"class":84},[74,51420,51421,51423,51425,51427],{"class":76,"line":21129},[74,51422,35382],{"class":84},[74,51424,131],{"class":80},[74,51426,35104],{"class":134},[74,51428,47114],{"class":84},[74,51430,51431,51433,51435,51437],{"class":76,"line":21134},[74,51432,35382],{"class":84},[74,51434,131],{"class":80},[74,51436,35104],{"class":134},[74,51438,47125],{"class":84},[74,51440,51441,51443,51445,51447],{"class":76,"line":21148},[74,51442,35382],{"class":84},[74,51444,131],{"class":80},[74,51446,35104],{"class":134},[74,51448,47136],{"class":84},[74,51450,51451,51453],{"class":76,"line":21160},[74,51452,19031],{"class":80},[74,51454,35490],{"class":84},[74,51456,51457],{"class":76,"line":21165},[74,51458,2363],{"emptyLinePlaceholder":2362},[74,51460,51461],{"class":76,"line":21178},[74,51462,47151],{"class":144},[74,51464,51465,51467,51469,51471,51473],{"class":76,"line":21183},[74,51466,1493],{"class":80},[74,51468,35501],{"class":134},[74,51470,2912],{"class":80},[74,51472,35506],{"class":190},[74,51474,3702],{"class":84},[74,51476,51477,51479,51481,51483,51485,51487,51489,51491,51493],{"class":76,"line":21188},[74,51478,35518],{"class":84},[74,51480,131],{"class":80},[74,51482,34732],{"class":84},[74,51484,35525],{"class":190},[74,51486,1666],{"class":80},[74,51488,35530],{"class":84},[74,51490,1663],{"class":80},[74,51492,34757],{"class":190},[74,51494,91],{"class":84},[74,51496,51497,51499,51501],{"class":76,"line":21193},[74,51498,35570],{"class":84},[74,51500,131],{"class":80},[74,51502,47192],{"class":84},[74,51504,51505,51507,51509,51511,51513,51515,51517,51519],{"class":76,"line":21206},[74,51506,35580],{"class":134},[74,51508,35583],{"class":84},[74,51510,303],{"class":134},[74,51512,464],{"class":84},[74,51514,35782],{"class":134},[74,51516,464],{"class":84},[74,51518,35782],{"class":134},[74,51520,35596],{"class":84},[26277,51522,51524],{"id":51523},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,51526,51527],{},"计算图片的均值与方差，用于训练中归一化处理操作",[64,51529,51531],{"className":34659,"code":51530,"language":34661,"meta":69,"style":69},"# 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",[71,51532,51533,51538,51551,51556,51562,51567,51577,51581,51586,51596,51600,51605,51615,51632,51636,51641,51653,51665,51696,51705,51715,51725,51729,51734,51749,51753,51758,51763,51768,51778,51783,51808,51812,51817,51832,51836,51849,51853,51858,51863,51868,51873,51878,51888,51898,51921,51929,51937,51945,51949,51961,51965,51970,51974,51978,51985,52005,52029,52036,52050,52055,52060,52064,52078,52082,52094],{"__ignoreMap":69},[74,51534,51535],{"class":76,"line":77},[74,51536,51537],{"class":144},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[74,51539,51540,51542,51545,51548],{"class":76,"line":94},[74,51541,35018],{"class":80},[74,51543,51544],{"class":134}," PIL",[74,51546,51547],{"class":80}," import",[74,51549,51550],{"class":84}," Image\n",[74,51552,51553],{"class":76,"line":1141},[74,51554,51555],{"class":144},"# os 用来处理文件夹和文件路径\n",[74,51557,51558,51560],{"class":76,"line":1156},[74,51559,34673],{"class":80},[74,51561,49586],{"class":84},[74,51563,51564],{"class":76,"line":1162},[74,51565,51566],{"class":144},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[74,51568,51569,51571,51573,51575],{"class":76,"line":1176},[74,51570,34673],{"class":80},[74,51572,35661],{"class":84},[74,51574,35664],{"class":80},[74,51576,35667],{"class":84},[74,51578,51579],{"class":76,"line":1182},[74,51580,2363],{"emptyLinePlaceholder":2362},[74,51582,51583],{"class":76,"line":1273},[74,51584,51585],{"class":144},"# 文件夹路径，包含所有图片文件\n",[74,51587,51588,51591,51593],{"class":76,"line":1279},[74,51589,51590],{"class":84},"folder_path ",[74,51592,131],{"class":80},[74,51594,51595],{"class":190}," 'data_cat_dog'\n",[74,51597,51598],{"class":76,"line":1291},[74,51599,2363],{"emptyLinePlaceholder":2362},[74,51601,51602],{"class":76,"line":1574},[74,51603,51604],{"class":144},"# 初始化累积变量\n",[74,51606,51607,51610,51612],{"class":76,"line":1579},[74,51608,51609],{"class":84},"total_pixels ",[74,51611,131],{"class":80},[74,51613,51614],{"class":134}," 0\n",[74,51616,51617,51620,51622,51625,51627,51629],{"class":76,"line":1585},[74,51618,51619],{"class":84},"sum_normalized_pixel_values ",[74,51621,131],{"class":80},[74,51623,51624],{"class":84}," np.zeros(",[74,51626,157],{"class":134},[74,51628,50089],{"class":84},[74,51630,51631],{"class":144},"# 如果是RGB图像，需要三个通道的均值和方差\n",[74,51633,51634],{"class":76,"line":1590},[74,51635,2363],{"emptyLinePlaceholder":2362},[74,51637,51638],{"class":76,"line":1604},[74,51639,51640],{"class":144},"# 遍历文件夹中的图片文件\n",[74,51642,51643,51645,51648,51650],{"class":76,"line":1609},[74,51644,2988],{"class":80},[74,51646,51647],{"class":84}," root, dirs, files ",[74,51649,30324],{"class":80},[74,51651,51652],{"class":84}," os.walk(folder_path):\n",[74,51654,51655,51657,51660,51662],{"class":76,"line":1615},[74,51656,3164],{"class":80},[74,51658,51659],{"class":84}," filename ",[74,51661,30324],{"class":80},[74,51663,51664],{"class":84}," files:\n",[74,51666,51667,51669,51672,51675,51677,51680,51682,51685,51687,51690,51693],{"class":76,"line":1636},[74,51668,2460],{"class":80},[74,51670,51671],{"class":84}," filename.endswith((",[74,51673,51674],{"class":190},"'.jpg'",[74,51676,16714],{"class":84},[74,51678,51679],{"class":190},"'.jpeg'",[74,51681,16714],{"class":84},[74,51683,51684],{"class":190},"'.png'",[74,51686,16714],{"class":84},[74,51688,51689],{"class":190},"'.bmp'",[74,51691,51692],{"class":84},")):  ",[74,51694,51695],{"class":144},"# 可根据实际情况添加其他格式\n",[74,51697,51698,51700,51702],{"class":76,"line":1641},[74,51699,49954],{"class":84},[74,51701,131],{"class":80},[74,51703,51704],{"class":84}," os.path.join(root, filename)\n",[74,51706,51707,51710,51712],{"class":76,"line":1655},[74,51708,51709],{"class":84},"            image ",[74,51711,131],{"class":80},[74,51713,51714],{"class":84}," Image.open(image_path)\n",[74,51716,51717,51720,51722],{"class":76,"line":1660},[74,51718,51719],{"class":84},"            image_array ",[74,51721,131],{"class":80},[74,51723,51724],{"class":84}," np.array(image)\n",[74,51726,51727],{"class":76,"line":1689},[74,51728,2363],{"emptyLinePlaceholder":2362},[74,51730,51731],{"class":76,"line":1694},[74,51732,51733],{"class":144},"            # 归一化像素值到0-1之间\n",[74,51735,51736,51739,51741,51744,51746],{"class":76,"line":1711},[74,51737,51738],{"class":84},"            normalized_image_array ",[74,51740,131],{"class":80},[74,51742,51743],{"class":84}," image_array ",[74,51745,670],{"class":80},[74,51747,51748],{"class":134}," 255.0\n",[74,51750,51751],{"class":76,"line":1716},[74,51752,2363],{"emptyLinePlaceholder":2362},[74,51754,51755],{"class":76,"line":1721},[74,51756,51757],{"class":144},"            # print(image_path)\n",[74,51759,51760],{"class":76,"line":1726},[74,51761,51762],{"class":144},"            # print(normalized_image_array.shape)\n",[74,51764,51765],{"class":76,"line":1740},[74,51766,51767],{"class":144},"            # 累积归一化后的像素值和像素数量\n",[74,51769,51770,51773,51775],{"class":76,"line":1745},[74,51771,51772],{"class":84},"            total_pixels ",[74,51774,13756],{"class":80},[74,51776,51777],{"class":84}," normalized_image_array.size\n",[74,51779,51780],{"class":76,"line":2540},[74,51781,51782],{"class":144},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[74,51784,51785,51788,51790,51793,51796,51798,51800,51802,51804,51806],{"class":76,"line":2554},[74,51786,51787],{"class":84},"            sum_normalized_pixel_values ",[74,51789,13756],{"class":80},[74,51791,51792],{"class":84}," np.sum(normalized_image_array, ",[74,51794,51795],{"class":9495},"axis",[74,51797,131],{"class":80},[74,51799,85],{"class":84},[74,51801,277],{"class":134},[74,51803,16714],{"class":84},[74,51805,303],{"class":134},[74,51807,34778],{"class":84},[74,51809,51810],{"class":76,"line":2562},[74,51811,2363],{"emptyLinePlaceholder":2362},[74,51813,51814],{"class":76,"line":2567},[74,51815,51816],{"class":144},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[74,51818,51819,51822,51824,51827,51829],{"class":76,"line":2573},[74,51820,51821],{"class":84},"mean ",[74,51823,131],{"class":80},[74,51825,51826],{"class":84}," sum_normalized_pixel_values ",[74,51828,670],{"class":80},[74,51830,51831],{"class":84}," total_pixels\n",[74,51833,51834],{"class":76,"line":2579},[74,51835,2363],{"emptyLinePlaceholder":2362},[74,51837,51838,51841,51843,51845,51847],{"class":76,"line":2584},[74,51839,51840],{"class":84},"sum_squared_diff ",[74,51842,131],{"class":80},[74,51844,51624],{"class":84},[74,51846,157],{"class":134},[74,51848,91],{"class":84},[74,51850,51851],{"class":76,"line":12227},[74,51852,2363],{"emptyLinePlaceholder":2362},[74,51854,51855],{"class":76,"line":12251},[74,51856,51857],{"class":144},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[74,51859,51860],{"class":76,"line":12256},[74,51861,51862],{"class":144},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[74,51864,51865],{"class":76,"line":12262},[74,51866,51867],{"class":144},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[74,51869,51870],{"class":76,"line":12289},[74,51871,51872],{"class":144},"# Image.open(image_path)：打开图片\n",[74,51874,51875],{"class":76,"line":12294},[74,51876,51877],{"class":144},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[74,51879,51880,51882,51884,51886],{"class":76,"line":12300},[74,51881,2988],{"class":80},[74,51883,51647],{"class":84},[74,51885,30324],{"class":80},[74,51887,51652],{"class":84},[74,51889,51890,51892,51894,51896],{"class":76,"line":12312},[74,51891,3164],{"class":80},[74,51893,51659],{"class":84},[74,51895,30324],{"class":80},[74,51897,51664],{"class":84},[74,51899,51900,51902,51904,51906,51908,51910,51912,51914,51916,51918],{"class":76,"line":12324},[74,51901,2460],{"class":80},[74,51903,51671],{"class":84},[74,51905,51674],{"class":190},[74,51907,16714],{"class":84},[74,51909,51679],{"class":190},[74,51911,16714],{"class":84},[74,51913,51684],{"class":190},[74,51915,16714],{"class":84},[74,51917,51689],{"class":190},[74,51919,51920],{"class":84},")):\n",[74,51922,51923,51925,51927],{"class":76,"line":12336},[74,51924,49954],{"class":84},[74,51926,131],{"class":80},[74,51928,51704],{"class":84},[74,51930,51931,51933,51935],{"class":76,"line":13995},[74,51932,51709],{"class":84},[74,51934,131],{"class":80},[74,51936,51714],{"class":84},[74,51938,51939,51941,51943],{"class":76,"line":14020},[74,51940,51719],{"class":84},[74,51942,131],{"class":80},[74,51944,51724],{"class":84},[74,51946,51947],{"class":76,"line":14043},[74,51948,51733],{"class":144},[74,51950,51951,51953,51955,51957,51959],{"class":76,"line":14067},[74,51952,51738],{"class":84},[74,51954,131],{"class":80},[74,51956,51743],{"class":84},[74,51958,670],{"class":80},[74,51960,51748],{"class":134},[74,51962,51963],{"class":76,"line":14072},[74,51964,51762],{"class":144},[74,51966,51967],{"class":76,"line":14077},[74,51968,51969],{"class":144},"            # print(mean.shape)\n",[74,51971,51972],{"class":76,"line":14082},[74,51973,51757],{"class":144},[74,51975,51976],{"class":76,"line":14091},[74,51977,2363],{"emptyLinePlaceholder":2362},[74,51979,51980,51983],{"class":76,"line":14096},[74,51981,51982],{"class":80},"            try",[74,51984,3702],{"class":84},[74,51986,51987,51990,51992,51995,51997,52000,52002],{"class":76,"line":14102},[74,51988,51989],{"class":84},"                diff ",[74,51991,131],{"class":80},[74,51993,51994],{"class":84}," (normalized_image_array ",[74,51996,618],{"class":80},[74,51998,51999],{"class":84}," mean) ",[74,52001,14940],{"class":80},[74,52003,52004],{"class":134}," 2\n",[74,52006,52007,52010,52012,52015,52017,52019,52021,52023,52025,52027],{"class":76,"line":14123},[74,52008,52009],{"class":84},"                sum_squared_diff ",[74,52011,13756],{"class":80},[74,52013,52014],{"class":84}," np.sum(diff, ",[74,52016,51795],{"class":9495},[74,52018,131],{"class":80},[74,52020,85],{"class":84},[74,52022,277],{"class":134},[74,52024,16714],{"class":84},[74,52026,303],{"class":134},[74,52028,34778],{"class":84},[74,52030,52031,52034],{"class":76,"line":14129},[74,52032,52033],{"class":80},"            except",[74,52035,3702],{"class":84},[74,52037,52038,52041,52043,52045,52048],{"class":76,"line":14143},[74,52039,52040],{"class":134},"                print",[74,52042,85],{"class":84},[74,52044,138],{"class":80},[74,52046,52047],{"class":190},"\"捕获到自定义异常\"",[74,52049,91],{"class":84},[74,52051,52052],{"class":76,"line":14149},[74,52053,52054],{"class":144},"            # diff = (normalized_image_array - mean) ** 2\n",[74,52056,52057],{"class":76,"line":14176},[74,52058,52059],{"class":144},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[74,52061,52062],{"class":76,"line":14185},[74,52063,2363],{"emptyLinePlaceholder":2362},[74,52065,52066,52069,52071,52074,52076],{"class":76,"line":14191},[74,52067,52068],{"class":84},"variance ",[74,52070,131],{"class":80},[74,52072,52073],{"class":84}," sum_squared_diff ",[74,52075,670],{"class":80},[74,52077,51831],{"class":84},[74,52079,52080],{"class":76,"line":14199},[74,52081,2363],{"emptyLinePlaceholder":2362},[74,52083,52084,52086,52088,52091],{"class":76,"line":14204},[74,52085,34696],{"class":134},[74,52087,85],{"class":84},[74,52089,52090],{"class":190},"\"Mean:\"",[74,52092,52093],{"class":84},", mean)\n",[74,52095,52096,52098,52100,52103],{"class":76,"line":20883},[74,52097,34696],{"class":134},[74,52099,85],{"class":84},[74,52101,52102],{"class":190},"\"Variance:\"",[74,52104,52105],{"class":84},", variance)\n",[64,52107,52109],{"className":34659,"code":52108,"language":34661,"meta":69,"style":69},"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",[71,52110,52111,52117,52123,52133,52139,52149,52163,52173,52183,52193,52197,52207,52217,52221,52225,52233,52238,52243,52262,52266,52271,52276,52281,52286,52327,52332,52342,52347,52360,52365,52370,52375,52380,52385,52389,52394,52399,52421,52425,52457,52471,52481,52491,52495,52505,52519,52529,52539,52549,52555,52559,52563,52567,52571,52575,52583,52603,52607,52611,52615,52619,52635,52639,52643,52651,52655,52659,52667,52671,52675,52679,52687,52691,52695,52699,52707,52711,52719,52723,52731,52735,52743,52747,52755,52759,52763,52771,52775,52779,52791,52815,52829,52833,52837,52841,52849,52853,52861,52865,52873,52877,52885,52889,52897,52901,52909,52913,52925,52929,52937,52941,52949,52953,52957,52961,52965,52973,52977,52993,52997,53005,53009,53013,53017,53021,53025,53029,53033,53049,53053,53065,53069,53081,53085,53097,53101,53109,53113,53121,53125,53129,53133,53139,53143,53151,53155,53171,53175,53183,53187,53203,53215,53219,53231,53235,53239,53247,53251,53255,53263,53267,53275,53279,53287,53291,53295,53337,53379,53383,53387,53403,53407,53423,53427,53431,53439,53443,53447,53459,53497,53501,53505,53513,53517,53531,53541,53547,53553,53559,53565,53569,53573,53579,53583,53587,53595,53599,53617,53621,53625,53629,53645,53649,53653,53657,53661,53665,53685,53705,53709,53713,53717,53725,53733,53737,53753,53773,53793,53797,53802,53811,53820,53825,53830,53835,53848,53853,53862,53871,53888],{"__ignoreMap":69},[74,52112,52113,52115],{"class":76,"line":77},[74,52114,34673],{"class":80},[74,52116,36103],{"class":84},[74,52118,52119,52121],{"class":76,"line":94},[74,52120,34673],{"class":80},[74,52122,36110],{"class":84},[74,52124,52125,52127,52129,52131],{"class":76,"line":1141},[74,52126,34673],{"class":80},[74,52128,36121],{"class":84},[74,52130,35664],{"class":80},[74,52132,36126],{"class":84},[74,52134,52135,52137],{"class":76,"line":1156},[74,52136,34673],{"class":80},[74,52138,34676],{"class":84},[74,52140,52141,52143,52145,52147],{"class":76,"line":1162},[74,52142,35018],{"class":80},[74,52144,35696],{"class":84},[74,52146,34673],{"class":80},[74,52148,36143],{"class":84},[74,52150,52151,52153,52155,52157,52160],{"class":76,"line":1176},[74,52152,35018],{"class":80},[74,52154,35649],{"class":84},[74,52156,34673],{"class":80},[74,52158,52159],{"class":84}," ImageFolder ",[74,52161,52162],{"class":144},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[74,52164,52165,52167,52169,52171],{"class":76,"line":1182},[74,52166,35018],{"class":80},[74,52168,35679],{"class":84},[74,52170,34673],{"class":80},[74,52172,35684],{"class":84},[74,52174,52175,52177,52179,52181],{"class":76,"line":1273},[74,52176,34673],{"class":80},[74,52178,35696],{"class":84},[74,52180,35664],{"class":80},[74,52182,35701],{"class":84},[74,52184,52185,52187,52189,52191],{"class":76,"line":1279},[74,52186,34673],{"class":80},[74,52188,35713],{"class":84},[74,52190,35664],{"class":80},[74,52192,35718],{"class":84},[74,52194,52195],{"class":76,"line":1291},[74,52196,36188],{"class":144},[74,52198,52199,52201,52203,52205],{"class":76,"line":1574},[74,52200,35018],{"class":80},[74,52202,36195],{"class":84},[74,52204,34673],{"class":80},[74,52206,47312],{"class":84},[74,52208,52209,52211,52213,52215],{"class":76,"line":1579},[74,52210,35018],{"class":80},[74,52212,35021],{"class":84},[74,52214,34673],{"class":80},[74,52216,35026],{"class":84},[74,52218,52219],{"class":76,"line":1585},[74,52220,2363],{"emptyLinePlaceholder":2362},[74,52222,52223],{"class":76,"line":1590},[74,52224,36223],{"class":144},[74,52226,52227,52229,52231],{"class":76,"line":1604},[74,52228,36228],{"class":80},[74,52230,36231],{"class":1925},[74,52232,36234],{"class":84},[74,52234,52235],{"class":76,"line":1609},[74,52236,52237],{"class":144},"    # 导入自己的数据集，并进行数据处理\n",[74,52239,52240],{"class":76,"line":1615},[74,52241,52242],{"class":144},"    # 定义数据集的路径\n",[74,52244,52245,52248,52250,52252,52254,52256,52260],{"class":76,"line":1636},[74,52246,52247],{"class":134},"    ROOT_PATH",[74,52249,131],{"class":80},[74,52251,756],{"class":80},[74,52253,337],{"class":190},[74,52255,644],{"class":134},[74,52257,52259],{"class":52258},"sA_wV","\u002Fdata\u002Ftrain",[74,52261,29414],{"class":190},[74,52263,52264],{"class":76,"line":1641},[74,52265,2363],{"emptyLinePlaceholder":2362},[74,52267,52268],{"class":76,"line":1655},[74,52269,52270],{"class":144},"    # 定义归一化方法\n",[74,52272,52273],{"class":76,"line":1660},[74,52274,52275],{"class":144},"    # 这里需要先计算一下数据集的均值和方差\n",[74,52277,52278],{"class":76,"line":1689},[74,52279,52280],{"class":144},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[74,52282,52283],{"class":76,"line":1694},[74,52284,52285],{"class":144},"    # 第一个参数是均值，第二个参数是方差\n",[74,52287,52288,52291,52293,52296,52299,52301,52304,52306,52309,52312,52315,52317,52320,52322,52325],{"class":76,"line":1711},[74,52289,52290],{"class":84},"    normalize",[74,52292,131],{"class":80},[74,52294,52295],{"class":84},"transforms.Normalize([",[74,52297,52298],{"class":134},"0.162",[74,52300,464],{"class":84},[74,52302,52303],{"class":134},"0.151",[74,52305,464],{"class":84},[74,52307,52308],{"class":134},"0.138",[74,52310,52311],{"class":84},"],[",[74,52313,52314],{"class":134},"0.058",[74,52316,464],{"class":84},[74,52318,52319],{"class":134},"0.052",[74,52321,464],{"class":84},[74,52323,52324],{"class":134},"0.048",[74,52326,4620],{"class":84},[74,52328,52329],{"class":76,"line":1716},[74,52330,52331],{"class":144},"    # 定义数据集处理方法变量\n",[74,52333,52334,52337,52339],{"class":76,"line":1721},[74,52335,52336],{"class":84},"    train_transform",[74,52338,131],{"class":80},[74,52340,52341],{"class":84},"transforms.Compose([\n",[74,52343,52344],{"class":76,"line":1726},[74,52345,52346],{"class":144},"        # 调整图像大小为224*224\n",[74,52348,52349,52352,52354,52356,52358],{"class":76,"line":1740},[74,52350,52351],{"class":84},"        transforms.Resize((",[74,52353,35782],{"class":134},[74,52355,464],{"class":84},[74,52357,35782],{"class":134},[74,52359,46903],{"class":84},[74,52361,52362],{"class":76,"line":1745},[74,52363,52364],{"class":144},"        # 将图像转换为张量\n",[74,52366,52367],{"class":76,"line":2540},[74,52368,52369],{"class":84},"        transforms.ToTensor(),\n",[74,52371,52372],{"class":76,"line":2554},[74,52373,52374],{"class":84},"        normalize])\n",[74,52376,52377],{"class":76,"line":2562},[74,52378,52379],{"class":144},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[74,52381,52382],{"class":76,"line":2567},[74,52383,52384],{"class":144},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[74,52386,52387],{"class":76,"line":2573},[74,52388,2363],{"emptyLinePlaceholder":2362},[74,52390,52391],{"class":76,"line":2579},[74,52392,52393],{"class":144},"    # 加载数据集\n",[74,52395,52396],{"class":76,"line":2584},[74,52397,52398],{"class":144},"    # 传入数据集路径与处理方法\n",[74,52400,52401,52403,52405,52408,52411,52413,52416,52418],{"class":76,"line":12227},[74,52402,36239],{"class":84},[74,52404,131],{"class":80},[74,52406,52407],{"class":84},"ImageFolder(",[74,52409,52410],{"class":134},"ROOT_PATH",[74,52412,464],{"class":84},[74,52414,52415],{"class":9495},"transform",[74,52417,131],{"class":80},[74,52419,52420],{"class":84},"train_transform)\n",[74,52422,52423],{"class":76,"line":12251},[74,52424,2363],{"emptyLinePlaceholder":2362},[74,52426,52427,52429,52431,52433,52435,52437,52439,52441,52443,52445,52447,52449,52451,52453,52455],{"class":76,"line":12256},[74,52428,36291],{"class":84},[74,52430,131],{"class":80},[74,52432,36296],{"class":84},[74,52434,36299],{"class":134},[74,52436,85],{"class":84},[74,52438,36304],{"class":134},[74,52440,541],{"class":80},[74,52442,11637],{"class":134},[74,52444,36311],{"class":84},[74,52446,36299],{"class":134},[74,52448,85],{"class":84},[74,52450,36318],{"class":134},[74,52452,541],{"class":80},[74,52454,11637],{"class":134},[74,52456,36325],{"class":84},[74,52458,52459,52461,52463,52465,52467,52469],{"class":76,"line":12262},[74,52460,36330],{"class":84},[74,52462,131],{"class":80},[74,52464,36335],{"class":84},[74,52466,35818],{"class":9495},[74,52468,131],{"class":80},[74,52470,35823],{"class":84},[74,52472,52473,52475,52477,52479],{"class":76,"line":12289},[74,52474,36346],{"class":9495},[74,52476,131],{"class":80},[74,52478,283],{"class":134},[74,52480,35747],{"class":84},[74,52482,52483,52485,52487,52489],{"class":76,"line":12294},[74,52484,36358],{"class":9495},[74,52486,131],{"class":80},[74,52488,35757],{"class":134},[74,52490,35747],{"class":84},[74,52492,52493],{"class":76,"line":12300},[74,52494,36369],{"class":144},[74,52496,52497,52499,52501,52503],{"class":76,"line":12312},[74,52498,36374],{"class":9495},[74,52500,131],{"class":80},[74,52502,481],{"class":134},[74,52504,91],{"class":84},[74,52506,52507,52509,52511,52513,52515,52517],{"class":76,"line":12324},[74,52508,36385],{"class":84},[74,52510,131],{"class":80},[74,52512,35815],{"class":84},[74,52514,35818],{"class":9495},[74,52516,131],{"class":80},[74,52518,36396],{"class":84},[74,52520,52521,52523,52525,52527],{"class":76,"line":12336},[74,52522,36401],{"class":9495},[74,52524,131],{"class":80},[74,52526,283],{"class":134},[74,52528,35747],{"class":84},[74,52530,52531,52533,52535,52537],{"class":76,"line":13995},[74,52532,36412],{"class":9495},[74,52534,131],{"class":80},[74,52536,35757],{"class":134},[74,52538,35747],{"class":84},[74,52540,52541,52543,52545,52547],{"class":76,"line":14020},[74,52542,36423],{"class":9495},[74,52544,131],{"class":80},[74,52546,481],{"class":134},[74,52548,91],{"class":84},[74,52550,52551,52553],{"class":76,"line":14043},[74,52552,4053],{"class":80},[74,52554,36436],{"class":84},[74,52556,52557],{"class":76,"line":14067},[74,52558,2363],{"emptyLinePlaceholder":2362},[74,52560,52561],{"class":76,"line":14072},[74,52562,36445],{"class":144},[74,52564,52565],{"class":76,"line":14077},[74,52566,36450],{"class":144},[74,52568,52569],{"class":76,"line":14082},[74,52570,2363],{"emptyLinePlaceholder":2362},[74,52572,52573],{"class":76,"line":14091},[74,52574,36459],{"class":144},[74,52576,52577,52579,52581],{"class":76,"line":14096},[74,52578,36228],{"class":80},[74,52580,36466],{"class":1925},[74,52582,36469],{"class":84},[74,52584,52585,52587,52589,52591,52593,52595,52597,52599,52601],{"class":76,"line":14102},[74,52586,35518],{"class":84},[74,52588,131],{"class":80},[74,52590,34732],{"class":84},[74,52592,35525],{"class":190},[74,52594,1666],{"class":80},[74,52596,35530],{"class":84},[74,52598,1663],{"class":80},[74,52600,36488],{"class":190},[74,52602,91],{"class":84},[74,52604,52605],{"class":76,"line":14123},[74,52606,2363],{"emptyLinePlaceholder":2362},[74,52608,52609],{"class":76,"line":14129},[74,52610,36503],{"class":144},[74,52612,52613],{"class":76,"line":14143},[74,52614,36508],{"class":144},[74,52616,52617],{"class":76,"line":14149},[74,52618,36513],{"class":144},[74,52620,52621,52623,52625,52627,52629,52631,52633],{"class":76,"line":14176},[74,52622,36518],{"class":84},[74,52624,131],{"class":80},[74,52626,36523],{"class":84},[74,52628,36526],{"class":9495},[74,52630,131],{"class":80},[74,52632,36531],{"class":134},[74,52634,91],{"class":84},[74,52636,52637],{"class":76,"line":14185},[74,52638,2363],{"emptyLinePlaceholder":2362},[74,52640,52641],{"class":76,"line":14191},[74,52642,36542],{"class":144},[74,52644,52645,52647,52649],{"class":76,"line":14199},[74,52646,36547],{"class":84},[74,52648,131],{"class":80},[74,52650,36552],{"class":84},[74,52652,52653],{"class":76,"line":14204},[74,52654,2363],{"emptyLinePlaceholder":2362},[74,52656,52657],{"class":76,"line":20883},[74,52658,36561],{"class":144},[74,52660,52661,52663,52665],{"class":76,"line":20889},[74,52662,35570],{"class":84},[74,52664,131],{"class":80},[74,52666,36570],{"class":84},[74,52668,52669],{"class":76,"line":20912},[74,52670,36575],{"class":144},[74,52672,52673],{"class":76,"line":20918},[74,52674,36580],{"class":144},[74,52676,52677],{"class":76,"line":20941},[74,52678,36585],{"class":144},[74,52680,52681,52683,52685],{"class":76,"line":20955},[74,52682,36590],{"class":84},[74,52684,131],{"class":80},[74,52686,36595],{"class":84},[74,52688,52689],{"class":76,"line":20975},[74,52690,2363],{"emptyLinePlaceholder":2362},[74,52692,52693],{"class":76,"line":20981},[74,52694,36608],{"class":144},[74,52696,52697],{"class":76,"line":20992},[74,52698,36613],{"class":144},[74,52700,52701,52703,52705],{"class":76,"line":21015},[74,52702,36618],{"class":84},[74,52704,131],{"class":80},[74,52706,36623],{"class":134},[74,52708,52709],{"class":76,"line":21037},[74,52710,36628],{"class":144},[74,52712,52713,52715,52717],{"class":76,"line":21042},[74,52714,36633],{"class":84},[74,52716,131],{"class":80},[74,52718,36638],{"class":84},[74,52720,52721],{"class":76,"line":21048},[74,52722,36643],{"class":144},[74,52724,52725,52727,52729],{"class":76,"line":21062},[74,52726,36648],{"class":84},[74,52728,131],{"class":80},[74,52730,36638],{"class":84},[74,52732,52733],{"class":76,"line":21075},[74,52734,36657],{"class":144},[74,52736,52737,52739,52741],{"class":76,"line":21080},[74,52738,36662],{"class":84},[74,52740,131],{"class":80},[74,52742,36638],{"class":84},[74,52744,52745],{"class":76,"line":21094},[74,52746,36671],{"class":144},[74,52748,52749,52751,52753],{"class":76,"line":21099},[74,52750,36676],{"class":84},[74,52752,131],{"class":80},[74,52754,36638],{"class":84},[74,52756,52757],{"class":76,"line":21105},[74,52758,2363],{"emptyLinePlaceholder":2362},[74,52760,52761],{"class":76,"line":21110},[74,52762,36689],{"class":144},[74,52764,52765,52767,52769],{"class":76,"line":21124},[74,52766,36694],{"class":84},[74,52768,131],{"class":80},[74,52770,36699],{"class":84},[74,52772,52773],{"class":76,"line":21129},[74,52774,2363],{"emptyLinePlaceholder":2362},[74,52776,52777],{"class":76,"line":21134},[74,52778,36712],{"class":144},[74,52780,52781,52783,52785,52787,52789],{"class":76,"line":21148},[74,52782,3164],{"class":80},[74,52784,36719],{"class":84},[74,52786,30324],{"class":80},[74,52788,36724],{"class":134},[74,52790,36727],{"class":84},[74,52792,52793,52795,52797,52799,52801,52803,52805,52807,52809,52811,52813],{"class":76,"line":21160},[74,52794,36732],{"class":134},[74,52796,85],{"class":84},[74,52798,36737],{"class":190},[74,52800,36740],{"class":134},[74,52802,670],{"class":190},[74,52804,36740],{"class":134},[74,52806,337],{"class":190},[74,52808,36749],{"class":84},[74,52810,618],{"class":80},[74,52812,303],{"class":134},[74,52814,34778],{"class":84},[74,52816,52817,52819,52821,52823,52825,52827],{"class":76,"line":21165},[74,52818,36732],{"class":134},[74,52820,85],{"class":84},[74,52822,36764],{"class":190},[74,52824,541],{"class":80},[74,52826,532],{"class":134},[74,52828,91],{"class":84},[74,52830,52831],{"class":76,"line":21178},[74,52832,2363],{"emptyLinePlaceholder":2362},[74,52834,52835],{"class":76,"line":21183},[74,52836,36779],{"class":144},[74,52838,52839],{"class":76,"line":21188},[74,52840,36784],{"class":144},[74,52842,52843,52845,52847],{"class":76,"line":21193},[74,52844,36789],{"class":84},[74,52846,131],{"class":80},[74,52848,36623],{"class":134},[74,52850,52851],{"class":76,"line":21206},[74,52852,36798],{"class":144},[74,52854,52855,52857,52859],{"class":76,"line":21211},[74,52856,36803],{"class":84},[74,52858,131],{"class":80},[74,52860,3048],{"class":134},[74,52862,52863],{"class":76,"line":36914},[74,52864,36812],{"class":144},[74,52866,52867,52869,52871],{"class":76,"line":36920},[74,52868,36817],{"class":84},[74,52870,131],{"class":80},[74,52872,36623],{"class":134},[74,52874,52875],{"class":76,"line":36926},[74,52876,36826],{"class":144},[74,52878,52879,52881,52883],{"class":76,"line":36932},[74,52880,36831],{"class":84},[74,52882,131],{"class":80},[74,52884,3048],{"class":134},[74,52886,52887],{"class":76,"line":36938},[74,52888,36840],{"class":144},[74,52890,52891,52893,52895],{"class":76,"line":36949},[74,52892,36845],{"class":84},[74,52894,131],{"class":80},[74,52896,3048],{"class":134},[74,52898,52899],{"class":76,"line":36955},[74,52900,36854],{"class":144},[74,52902,52903,52905,52907],{"class":76,"line":36975},[74,52904,36859],{"class":84},[74,52906,131],{"class":80},[74,52908,3048],{"class":134},[74,52910,52911],{"class":76,"line":36981},[74,52912,36868],{"class":144},[74,52914,52915,52917,52919,52921,52923],{"class":76,"line":36992},[74,52916,3366],{"class":80},[74,52918,35882],{"class":84},[74,52920,30324],{"class":80},[74,52922,35887],{"class":134},[74,52924,36881],{"class":84},[74,52926,52927],{"class":76,"line":36998},[74,52928,36886],{"class":144},[74,52930,52931,52933,52935],{"class":76,"line":37004},[74,52932,36891],{"class":84},[74,52934,131],{"class":80},[74,52936,36896],{"class":84},[74,52938,52939],{"class":76,"line":37010},[74,52940,36901],{"class":144},[74,52942,52943,52945,52947],{"class":76,"line":37016},[74,52944,36906],{"class":84},[74,52946,131],{"class":80},[74,52948,36911],{"class":84},[74,52950,52951],{"class":76,"line":37022},[74,52952,36917],{"class":144},[74,52954,52955],{"class":76,"line":37028},[74,52956,36923],{"class":84},[74,52958,52959],{"class":76,"line":37034},[74,52960,36929],{"class":144},[74,52962,52963],{"class":76,"line":37054},[74,52964,36935],{"class":144},[74,52966,52967,52969,52971],{"class":76,"line":37060},[74,52968,36941],{"class":84},[74,52970,131],{"class":80},[74,52972,36946],{"class":84},[74,52974,52975],{"class":76,"line":37076},[74,52976,36952],{"class":144},[74,52978,52979,52981,52983,52985,52987,52989,52991],{"class":76,"line":37082},[74,52980,36958],{"class":84},[74,52982,131],{"class":80},[74,52984,36963],{"class":84},[74,52986,36966],{"class":9495},[74,52988,131],{"class":80},[74,52990,303],{"class":134},[74,52992,91],{"class":84},[74,52994,52995],{"class":76,"line":37096},[74,52996,36978],{"class":144},[74,52998,52999,53001,53003],{"class":76,"line":37102},[74,53000,36984],{"class":84},[74,53002,131],{"class":80},[74,53004,36989],{"class":84},[74,53006,53007],{"class":76,"line":37117},[74,53008,36995],{"class":144},[74,53010,53011],{"class":76,"line":37123},[74,53012,37001],{"class":84},[74,53014,53015],{"class":76,"line":37132},[74,53016,37007],{"class":144},[74,53018,53019],{"class":76,"line":37138},[74,53020,37013],{"class":84},[74,53022,53023],{"class":76,"line":37147},[74,53024,37019],{"class":144},[74,53026,53027],{"class":76,"line":37153},[74,53028,37025],{"class":84},[74,53030,53031],{"class":76,"line":37159},[74,53032,37031],{"class":144},[74,53034,53035,53037,53039,53041,53043,53045,53047],{"class":76,"line":37168},[74,53036,37037],{"class":84},[74,53038,13756],{"class":80},[74,53040,37042],{"class":84},[74,53042,541],{"class":80},[74,53044,37047],{"class":84},[74,53046,277],{"class":134},[74,53048,91],{"class":84},[74,53050,53051],{"class":76,"line":37174},[74,53052,37057],{"class":144},[74,53054,53055,53057,53059,53061,53063],{"class":76,"line":37185},[74,53056,37063],{"class":84},[74,53058,13756],{"class":80},[74,53060,37068],{"class":84},[74,53062,2912],{"class":80},[74,53064,37073],{"class":84},[74,53066,53067],{"class":76,"line":37191},[74,53068,37079],{"class":144},[74,53070,53071,53073,53075,53077,53079],{"class":76,"line":37210},[74,53072,37085],{"class":84},[74,53074,13756],{"class":80},[74,53076,37047],{"class":84},[74,53078,277],{"class":134},[74,53080,91],{"class":84},[74,53082,53083],{"class":76,"line":37216},[74,53084,37099],{"class":144},[74,53086,53087,53089,53091,53093,53095],{"class":76,"line":37227},[74,53088,3366],{"class":80},[74,53090,37107],{"class":84},[74,53092,30324],{"class":80},[74,53094,35887],{"class":134},[74,53096,37114],{"class":84},[74,53098,53099],{"class":76,"line":37233},[74,53100,37120],{"class":144},[74,53102,53103,53105,53107],{"class":76,"line":37253},[74,53104,36891],{"class":84},[74,53106,131],{"class":80},[74,53108,36896],{"class":84},[74,53110,53111],{"class":76,"line":37269},[74,53112,37135],{"class":144},[74,53114,53115,53117,53119],{"class":76,"line":37275},[74,53116,36906],{"class":84},[74,53118,131],{"class":80},[74,53120,36911],{"class":84},[74,53122,53123],{"class":76,"line":37289},[74,53124,37150],{"class":144},[74,53126,53127],{"class":76,"line":37295},[74,53128,37156],{"class":84},[74,53130,53131],{"class":76,"line":37301},[74,53132,40637],{"class":144},[74,53134,53135,53137],{"class":76,"line":37312},[74,53136,37162],{"class":80},[74,53138,37165],{"class":84},[74,53140,53141],{"class":76,"line":37318},[74,53142,37171],{"class":144},[74,53144,53145,53147,53149],{"class":76,"line":37324},[74,53146,40652],{"class":84},[74,53148,131],{"class":80},[74,53150,36946],{"class":84},[74,53152,53153],{"class":76,"line":37334},[74,53154,37188],{"class":144},[74,53156,53157,53159,53161,53163,53165,53167,53169],{"class":76,"line":37340},[74,53158,40665],{"class":84},[74,53160,131],{"class":80},[74,53162,36963],{"class":84},[74,53164,36966],{"class":9495},[74,53166,131],{"class":80},[74,53168,303],{"class":134},[74,53170,91],{"class":84},[74,53172,53173],{"class":76,"line":37351},[74,53174,37213],{"class":144},[74,53176,53177,53179,53181],{"class":76,"line":37357},[74,53178,40686],{"class":84},[74,53180,131],{"class":80},[74,53182,36989],{"class":84},[74,53184,53185],{"class":76,"line":37367},[74,53186,37230],{"class":144},[74,53188,53189,53191,53193,53195,53197,53199,53201],{"class":76,"line":37372},[74,53190,40699],{"class":84},[74,53192,13756],{"class":80},[74,53194,40704],{"class":84},[74,53196,541],{"class":80},[74,53198,37047],{"class":84},[74,53200,277],{"class":134},[74,53202,91],{"class":84},[74,53204,53205,53207,53209,53211,53213],{"class":76,"line":37378},[74,53206,40717],{"class":84},[74,53208,13756],{"class":80},[74,53210,37068],{"class":84},[74,53212,2912],{"class":80},[74,53214,37073],{"class":84},[74,53216,53217],{"class":76,"line":37427},[74,53218,40730],{"class":144},[74,53220,53221,53223,53225,53227,53229],{"class":76,"line":37474},[74,53222,40735],{"class":84},[74,53224,13756],{"class":80},[74,53226,37047],{"class":84},[74,53228,277],{"class":134},[74,53230,91],{"class":84},[74,53232,53233],{"class":76,"line":37479},[74,53234,37292],{"class":144},[74,53236,53237],{"class":76,"line":37485},[74,53238,37298],{"class":144},[74,53240,53241,53243,53245],{"class":76,"line":37504},[74,53242,37304],{"class":84},[74,53244,670],{"class":80},[74,53246,37309],{"class":84},[74,53248,53249],{"class":76,"line":37510},[74,53250,37315],{"class":144},[74,53252,53253],{"class":76,"line":37530},[74,53254,37321],{"class":144},[74,53256,53257,53259,53261],{"class":76,"line":37536},[74,53258,37327],{"class":84},[74,53260,670],{"class":80},[74,53262,37309],{"class":84},[74,53264,53265],{"class":76,"line":37542},[74,53266,37337],{"class":144},[74,53268,53269,53271,53273],{"class":76,"line":37552},[74,53270,37343],{"class":84},[74,53272,670],{"class":80},[74,53274,37348],{"class":84},[74,53276,53277],{"class":76,"line":37557},[74,53278,37354],{"class":144},[74,53280,53281,53283,53285],{"class":76,"line":37563},[74,53282,37360],{"class":84},[74,53284,670],{"class":80},[74,53286,37348],{"class":84},[74,53288,53289],{"class":76,"line":37579},[74,53290,2363],{"emptyLinePlaceholder":2362},[74,53292,53293],{"class":76,"line":37624},[74,53294,37375],{"class":144},[74,53296,53297,53299,53301,53303,53305,53307,53309,53311,53313,53315,53317,53319,53321,53323,53325,53327,53329,53331,53333,53335],{"class":76,"line":37630},[74,53298,36732],{"class":134},[74,53300,85],{"class":84},[74,53302,3555],{"class":190},[74,53304,36740],{"class":134},[74,53306,37389],{"class":190},[74,53308,982],{"class":134},[74,53310,37394],{"class":80},[74,53312,1032],{"class":134},[74,53314,37399],{"class":190},[74,53316,982],{"class":134},[74,53318,37394],{"class":80},[74,53320,1032],{"class":134},[74,53322,3555],{"class":190},[74,53324,37410],{"class":84},[74,53326,618],{"class":80},[74,53328,303],{"class":134},[74,53330,37417],{"class":84},[74,53332,618],{"class":80},[74,53334,303],{"class":134},[74,53336,37424],{"class":84},[74,53338,53339,53341,53343,53345,53347,53349,53351,53353,53355,53357,53359,53361,53363,53365,53367,53369,53371,53373,53375,53377],{"class":76,"line":37636},[74,53340,36732],{"class":134},[74,53342,85],{"class":84},[74,53344,3555],{"class":190},[74,53346,36740],{"class":134},[74,53348,37438],{"class":190},[74,53350,982],{"class":134},[74,53352,37394],{"class":80},[74,53354,1032],{"class":134},[74,53356,37447],{"class":190},[74,53358,982],{"class":134},[74,53360,37394],{"class":80},[74,53362,1032],{"class":134},[74,53364,3555],{"class":190},[74,53366,37458],{"class":84},[74,53368,618],{"class":80},[74,53370,303],{"class":134},[74,53372,37465],{"class":84},[74,53374,618],{"class":80},[74,53376,303],{"class":134},[74,53378,37424],{"class":84},[74,53380,53381],{"class":76,"line":37642},[74,53382,2363],{"emptyLinePlaceholder":2362},[74,53384,53385],{"class":76,"line":37653},[74,53386,37482],{"class":144},[74,53388,53389,53391,53393,53395,53397,53399,53401],{"class":76,"line":37659},[74,53390,2460],{"class":80},[74,53392,37490],{"class":84},[74,53394,618],{"class":80},[74,53396,303],{"class":134},[74,53398,1026],{"class":84},[74,53400,1046],{"class":80},[74,53402,37501],{"class":84},[74,53404,53405],{"class":76,"line":37665},[74,53406,37507],{"class":144},[74,53408,53409,53411,53413,53415,53417,53419,53421],{"class":76,"line":37671},[74,53410,37513],{"class":84},[74,53412,125],{"class":134},[74,53414,131],{"class":80},[74,53416,37520],{"class":84},[74,53418,618],{"class":80},[74,53420,303],{"class":134},[74,53422,37527],{"class":84},[74,53424,53425],{"class":76,"line":37689},[74,53426,37533],{"class":144},[74,53428,53429],{"class":76,"line":37703},[74,53430,37539],{"class":144},[74,53432,53433,53435,53437],{"class":76,"line":37712},[74,53434,37545],{"class":84},[74,53436,131],{"class":80},[74,53438,36595],{"class":84},[74,53440,53441],{"class":76,"line":37721},[74,53442,2363],{"emptyLinePlaceholder":2362},[74,53444,53445],{"class":76,"line":37730},[74,53446,37560],{"class":144},[74,53448,53449,53451,53453,53455,53457],{"class":76,"line":37739},[74,53450,37566],{"class":84},[74,53452,131],{"class":80},[74,53454,37571],{"class":84},[74,53456,618],{"class":80},[74,53458,37576],{"class":84},[74,53460,53461,53463,53465,53467,53469,53471,53473,53475,53477,53479,53481,53483,53485,53487,53489,53491,53493,53495],{"class":76,"line":37745},[74,53462,36732],{"class":134},[74,53464,85],{"class":84},[74,53466,37586],{"class":190},[74,53468,982],{"class":134},[74,53470,37591],{"class":80},[74,53472,1032],{"class":134},[74,53474,630],{"class":190},[74,53476,982],{"class":134},[74,53478,37591],{"class":80},[74,53480,1032],{"class":134},[74,53482,37604],{"class":190},[74,53484,37607],{"class":84},[74,53486,37610],{"class":80},[74,53488,993],{"class":134},[74,53490,37615],{"class":84},[74,53492,414],{"class":80},[74,53494,993],{"class":134},[74,53496,34778],{"class":84},[74,53498,53499],{"class":76,"line":37751},[74,53500,41014],{"class":144},[74,53502,53503],{"class":76,"line":37759},[74,53504,41019],{"class":144},[74,53506,53507,53509,53511],{"class":76,"line":37764},[74,53508,41024],{"class":84},[74,53510,37648],{"class":190},[74,53512,91],{"class":84},[74,53514,53515],{"class":76,"line":37770},[74,53516,37668],{"class":144},[74,53518,53519,53521,53523,53525,53527,53529],{"class":76,"line":37781},[74,53520,37674],{"class":84},[74,53522,131],{"class":80},[74,53524,37679],{"class":84},[74,53526,37682],{"class":9495},[74,53528,131],{"class":80},[74,53530,1508],{"class":84},[74,53532,53533,53535,53537,53539],{"class":76,"line":37787},[74,53534,37692],{"class":190},[74,53536,945],{"class":84},[74,53538,37697],{"class":134},[74,53540,37700],{"class":84},[74,53542,53543,53545],{"class":76,"line":37807},[74,53544,37706],{"class":190},[74,53546,37709],{"class":84},[74,53548,53549,53551],{"class":76,"line":37813},[74,53550,37715],{"class":190},[74,53552,37718],{"class":84},[74,53554,53555,53557],{"class":76,"line":37819},[74,53556,37724],{"class":190},[74,53558,37727],{"class":84},[74,53560,53561,53563],{"class":76,"line":37825},[74,53562,37733],{"class":190},[74,53564,37736],{"class":84},[74,53566,53567],{"class":76,"line":37842},[74,53568,37742],{"class":84},[74,53570,53571],{"class":76,"line":37848},[74,53572,37748],{"class":144},[74,53574,53575,53577],{"class":76,"line":37854},[74,53576,4053],{"class":80},[74,53578,37756],{"class":84},[74,53580,53581],{"class":76,"line":37860},[74,53582,2363],{"emptyLinePlaceholder":2362},[74,53584,53585],{"class":76,"line":37866},[74,53586,37767],{"class":144},[74,53588,53589,53591,53593],{"class":76,"line":37872},[74,53590,36228],{"class":80},[74,53592,37775],{"class":1925},[74,53594,37778],{"class":84},[74,53596,53597],{"class":76,"line":37899},[74,53598,37784],{"class":144},[74,53600,53601,53603,53605,53607,53609,53611,53613,53615],{"class":76,"line":37923},[74,53602,37790],{"class":84},[74,53604,35974],{"class":9495},[74,53606,131],{"class":80},[74,53608,85],{"class":84},[74,53610,584],{"class":134},[74,53612,464],{"class":84},[74,53614,379],{"class":134},[74,53616,34778],{"class":84},[74,53618,53619],{"class":76,"line":37929},[74,53620,37810],{"class":144},[74,53622,53623],{"class":76,"line":37935},[74,53624,37816],{"class":144},[74,53626,53627],{"class":76,"line":37941},[74,53628,37822],{"class":144},[74,53630,53631,53633,53635,53637,53639,53641,53643],{"class":76,"line":37952},[74,53632,36008],{"class":84},[74,53634,303],{"class":134},[74,53636,464],{"class":84},[74,53638,163],{"class":134},[74,53640,464],{"class":84},[74,53642,303],{"class":134},[74,53644,91],{"class":84},[74,53646,53647],{"class":76,"line":37963},[74,53648,37845],{"class":144},[74,53650,53651],{"class":76,"line":37969},[74,53652,37851],{"class":144},[74,53654,53655],{"class":76,"line":37986},[74,53656,37857],{"class":144},[74,53658,53659],{"class":76,"line":38009},[74,53660,37863],{"class":144},[74,53662,53663],{"class":76,"line":38032},[74,53664,37869],{"class":144},[74,53666,53667,53669,53671,53673,53675,53677,53679,53681,53683],{"class":76,"line":38038},[74,53668,37875],{"class":84},[74,53670,37878],{"class":190},[74,53672,37881],{"class":84},[74,53674,37884],{"class":190},[74,53676,464],{"class":84},[74,53678,37889],{"class":9495},[74,53680,131],{"class":80},[74,53682,37894],{"class":190},[74,53684,91],{"class":84},[74,53686,53687,53689,53691,53693,53695,53697,53699,53701,53703],{"class":76,"line":38043},[74,53688,37875],{"class":84},[74,53690,37878],{"class":190},[74,53692,37906],{"class":84},[74,53694,37909],{"class":190},[74,53696,464],{"class":84},[74,53698,37889],{"class":9495},[74,53700,131],{"class":80},[74,53702,37918],{"class":190},[74,53704,91],{"class":84},[74,53706,53707],{"class":76,"line":38052},[74,53708,37926],{"class":144},[74,53710,53711],{"class":76,"line":38062},[74,53712,37932],{"class":84},[74,53714,53715],{"class":76,"line":38068},[74,53716,37938],{"class":144},[74,53718,53719,53721,53723],{"class":76,"line":38073},[74,53720,37944],{"class":84},[74,53722,37947],{"class":190},[74,53724,91],{"class":84},[74,53726,53727,53729,53731],{"class":76,"line":38079},[74,53728,37955],{"class":84},[74,53730,37958],{"class":190},[74,53732,91],{"class":84},[74,53734,53735],{"class":76,"line":38092},[74,53736,37966],{"class":144},[74,53738,53739,53741,53743,53745,53747,53749,53751],{"class":76,"line":38098},[74,53740,36008],{"class":84},[74,53742,303],{"class":134},[74,53744,464],{"class":84},[74,53746,163],{"class":134},[74,53748,464],{"class":84},[74,53750,163],{"class":134},[74,53752,91],{"class":84},[74,53754,53755,53757,53759,53761,53763,53765,53767,53769,53771],{"class":76,"line":38109},[74,53756,37875],{"class":84},[74,53758,37878],{"class":190},[74,53760,37993],{"class":84},[74,53762,37884],{"class":190},[74,53764,464],{"class":84},[74,53766,37889],{"class":9495},[74,53768,131],{"class":80},[74,53770,38004],{"class":190},[74,53772,91],{"class":84},[74,53774,53775,53777,53779,53781,53783,53785,53787,53789,53791],{"class":76,"line":38120},[74,53776,37875],{"class":84},[74,53778,37878],{"class":190},[74,53780,38016],{"class":84},[74,53782,37909],{"class":190},[74,53784,464],{"class":84},[74,53786,37889],{"class":9495},[74,53788,131],{"class":80},[74,53790,38027],{"class":190},[74,53792,91],{"class":84},[74,53794,53795],{"class":76,"line":38139},[74,53796,38035],{"class":144},[74,53798,53800],{"class":76,"line":53799},219,[74,53801,37932],{"class":84},[74,53803,53805,53807,53809],{"class":76,"line":53804},220,[74,53806,37944],{"class":84},[74,53808,37878],{"class":190},[74,53810,91],{"class":84},[74,53812,53814,53816,53818],{"class":76,"line":53813},221,[74,53815,37955],{"class":84},[74,53817,38057],{"class":190},[74,53819,91],{"class":84},[74,53821,53823],{"class":76,"line":53822},222,[74,53824,38065],{"class":84},[74,53826,53828],{"class":76,"line":53827},223,[74,53829,2363],{"emptyLinePlaceholder":2362},[74,53831,53833],{"class":76,"line":53832},224,[74,53834,38076],{"class":144},[74,53836,53838,53840,53842,53844,53846],{"class":76,"line":53837},225,[74,53839,1493],{"class":80},[74,53841,35501],{"class":134},[74,53843,2912],{"class":80},[74,53845,35506],{"class":190},[74,53847,3702],{"class":84},[74,53849,53851],{"class":76,"line":53850},226,[74,53852,38095],{"class":144},[74,53854,53856,53858,53860],{"class":76,"line":53855},227,[74,53857,48827],{"class":84},[74,53859,131],{"class":80},[74,53861,48832],{"class":84},[74,53863,53865,53867,53869],{"class":76,"line":53864},228,[74,53866,38112],{"class":84},[74,53868,131],{"class":80},[74,53870,38117],{"class":84},[74,53872,53874,53876,53878,53880,53882,53884,53886],{"class":76,"line":53873},229,[74,53875,37674],{"class":84},[74,53877,131],{"class":80},[74,53879,48849],{"class":84},[74,53881,38130],{"class":9495},[74,53883,131],{"class":80},[74,53885,993],{"class":134},[74,53887,91],{"class":84},[74,53889,53891],{"class":76,"line":53890},230,[74,53892,38142],{"class":84},[26277,53894,53896],{"id":53895},"_242测试代码","2.4.2.测试代码",[19,53898,53899],{},"使用测试集进行测试与推理",[64,53901,53903],{"className":34659,"code":53902,"language":34661,"meta":69,"style":69},"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",[71,53904,53905,53911,53921,53931,53942,53952,53956,53960,53968,53973,53977,53994,53998,54002,54006,54010,54014,54046,54050,54058,54062,54074,54078,54082,54086,54090,54094,54098,54102,54106,54124,54138,54142,54152,54162,54172,54178,54182,54186,54194,54198,54214,54222,54226,54230,54238,54246,54250,54254,54258,54262,54268,54272,54282,54290,54298,54302,54306,54310,54318,54322,54338,54342,54346,54350,54362,54366,54378,54382,54386,54398,54402,54412,54416,54420,54432,54436,54444,54448,54452,54460,54464,54472,54476,54480,54484,54488,54492,54508,54516,54520,54524,54542,54548,54552,54562,54570,54578,54582,54586,54590,54594,54602,54606,54622,54626,54634,54642],{"__ignoreMap":69},[74,53906,53907,53909],{"class":76,"line":77},[74,53908,34673],{"class":80},[74,53910,34676],{"class":84},[74,53912,53913,53915,53917,53919],{"class":76,"line":94},[74,53914,34673],{"class":80},[74,53916,35696],{"class":84},[74,53918,35664],{"class":80},[74,53920,35701],{"class":84},[74,53922,53923,53925,53927,53929],{"class":76,"line":1141},[74,53924,35018],{"class":80},[74,53926,35679],{"class":84},[74,53928,34673],{"class":80},[74,53930,35684],{"class":84},[74,53932,53933,53935,53937,53939],{"class":76,"line":1156},[74,53934,35018],{"class":80},[74,53936,35649],{"class":84},[74,53938,34673],{"class":80},[74,53940,53941],{"class":84}," ImageFolder\n",[74,53943,53944,53946,53948,53950],{"class":76,"line":1162},[74,53945,35018],{"class":80},[74,53947,36195],{"class":84},[74,53949,34673],{"class":80},[74,53951,48921],{"class":84},[74,53953,53954],{"class":76,"line":1176},[74,53955,2363],{"emptyLinePlaceholder":2362},[74,53957,53958],{"class":76,"line":1182},[74,53959,38232],{"class":144},[74,53961,53962,53964,53966],{"class":76,"line":1273},[74,53963,36228],{"class":80},[74,53965,38239],{"class":1925},[74,53967,36234],{"class":84},[74,53969,53970],{"class":76,"line":1279},[74,53971,53972],{"class":144},"   # 导入自己的数据集，并进行数据处理\n",[74,53974,53975],{"class":76,"line":1291},[74,53976,52242],{"class":144},[74,53978,53979,53981,53983,53985,53987,53989,53992],{"class":76,"line":1574},[74,53980,52247],{"class":134},[74,53982,131],{"class":80},[74,53984,756],{"class":80},[74,53986,337],{"class":190},[74,53988,644],{"class":134},[74,53990,53991],{"class":52258},"\u002Fdata\u002Ftest",[74,53993,29414],{"class":190},[74,53995,53996],{"class":76,"line":1579},[74,53997,2363],{"emptyLinePlaceholder":2362},[74,53999,54000],{"class":76,"line":1585},[74,54001,52270],{"class":144},[74,54003,54004],{"class":76,"line":1590},[74,54005,52275],{"class":144},[74,54007,54008],{"class":76,"line":1604},[74,54009,52280],{"class":144},[74,54011,54012],{"class":76,"line":1609},[74,54013,52285],{"class":144},[74,54015,54016,54018,54020,54022,54024,54026,54028,54030,54032,54034,54036,54038,54040,54042,54044],{"class":76,"line":1615},[74,54017,52290],{"class":84},[74,54019,131],{"class":80},[74,54021,52295],{"class":84},[74,54023,52298],{"class":134},[74,54025,464],{"class":84},[74,54027,52303],{"class":134},[74,54029,464],{"class":84},[74,54031,52308],{"class":134},[74,54033,52311],{"class":84},[74,54035,52314],{"class":134},[74,54037,464],{"class":84},[74,54039,52319],{"class":134},[74,54041,464],{"class":84},[74,54043,52324],{"class":134},[74,54045,4620],{"class":84},[74,54047,54048],{"class":76,"line":1636},[74,54049,52331],{"class":144},[74,54051,54052,54054,54056],{"class":76,"line":1641},[74,54053,52336],{"class":84},[74,54055,131],{"class":80},[74,54057,52341],{"class":84},[74,54059,54060],{"class":76,"line":1655},[74,54061,52346],{"class":144},[74,54063,54064,54066,54068,54070,54072],{"class":76,"line":1660},[74,54065,52351],{"class":84},[74,54067,35782],{"class":134},[74,54069,464],{"class":84},[74,54071,35782],{"class":134},[74,54073,46903],{"class":84},[74,54075,54076],{"class":76,"line":1689},[74,54077,52364],{"class":144},[74,54079,54080],{"class":76,"line":1694},[74,54081,52369],{"class":84},[74,54083,54084],{"class":76,"line":1711},[74,54085,52374],{"class":84},[74,54087,54088],{"class":76,"line":1716},[74,54089,52379],{"class":144},[74,54091,54092],{"class":76,"line":1721},[74,54093,52384],{"class":144},[74,54095,54096],{"class":76,"line":1726},[74,54097,2363],{"emptyLinePlaceholder":2362},[74,54099,54100],{"class":76,"line":1740},[74,54101,52393],{"class":144},[74,54103,54104],{"class":76,"line":1745},[74,54105,52398],{"class":144},[74,54107,54108,54110,54112,54114,54116,54118,54120,54122],{"class":76,"line":2540},[74,54109,38246],{"class":84},[74,54111,131],{"class":80},[74,54113,52407],{"class":84},[74,54115,52410],{"class":134},[74,54117,464],{"class":84},[74,54119,52415],{"class":9495},[74,54121,131],{"class":80},[74,54123,52420],{"class":84},[74,54125,54126,54128,54130,54132,54134,54136],{"class":76,"line":2554},[74,54127,38303],{"class":84},[74,54129,131],{"class":80},[74,54131,35815],{"class":84},[74,54133,35818],{"class":9495},[74,54135,131],{"class":80},[74,54137,38314],{"class":84},[74,54139,54140],{"class":76,"line":2562},[74,54141,38319],{"class":144},[74,54143,54144,54146,54148,54150],{"class":76,"line":2567},[74,54145,38324],{"class":9495},[74,54147,131],{"class":80},[74,54149,303],{"class":134},[74,54151,35747],{"class":84},[74,54153,54154,54156,54158,54160],{"class":76,"line":2573},[74,54155,38335],{"class":9495},[74,54157,131],{"class":80},[74,54159,35757],{"class":134},[74,54161,35747],{"class":84},[74,54163,54164,54166,54168,54170],{"class":76,"line":2579},[74,54165,38346],{"class":9495},[74,54167,131],{"class":80},[74,54169,277],{"class":134},[74,54171,91],{"class":84},[74,54173,54174,54176],{"class":76,"line":2584},[74,54175,4053],{"class":80},[74,54177,38359],{"class":84},[74,54179,54180],{"class":76,"line":12227},[74,54181,2363],{"emptyLinePlaceholder":2362},[74,54183,54184],{"class":76,"line":12251},[74,54185,38368],{"class":144},[74,54187,54188,54190,54192],{"class":76,"line":12256},[74,54189,36228],{"class":80},[74,54191,38375],{"class":1925},[74,54193,38378],{"class":84},[74,54195,54196],{"class":76,"line":12262},[74,54197,38383],{"class":144},[74,54199,54200,54202,54204,54206,54208,54210,54212],{"class":76,"line":12289},[74,54201,35518],{"class":84},[74,54203,131],{"class":80},[74,54205,35525],{"class":190},[74,54207,1666],{"class":80},[74,54209,35530],{"class":84},[74,54211,1663],{"class":80},[74,54213,38400],{"class":190},[74,54215,54216,54218,54220],{"class":76,"line":12294},[74,54217,35570],{"class":84},[74,54219,131],{"class":80},[74,54221,36570],{"class":84},[74,54223,54224],{"class":76,"line":12300},[74,54225,2363],{"emptyLinePlaceholder":2362},[74,54227,54228],{"class":76,"line":12312},[74,54229,38417],{"class":144},[74,54231,54232,54234,54236],{"class":76,"line":12324},[74,54233,38422],{"class":84},[74,54235,131],{"class":80},[74,54237,36623],{"class":134},[74,54239,54240,54242,54244],{"class":76,"line":12336},[74,54241,38431],{"class":84},[74,54243,131],{"class":80},[74,54245,3048],{"class":134},[74,54247,54248],{"class":76,"line":13995},[74,54249,2363],{"emptyLinePlaceholder":2362},[74,54251,54252],{"class":76,"line":14020},[74,54253,38444],{"class":144},[74,54255,54256],{"class":76,"line":14043},[74,54257,38449],{"class":144},[74,54259,54260],{"class":76,"line":14067},[74,54261,38454],{"class":144},[74,54263,54264,54266],{"class":76,"line":14072},[74,54265,38459],{"class":80},[74,54267,37165],{"class":84},[74,54269,54270],{"class":76,"line":14077},[74,54271,38466],{"class":144},[74,54273,54274,54276,54278,54280],{"class":76,"line":14082},[74,54275,3366],{"class":80},[74,54277,38473],{"class":84},[74,54279,30324],{"class":80},[74,54281,38478],{"class":84},[74,54283,54284,54286,54288],{"class":76,"line":14091},[74,54285,38483],{"class":84},[74,54287,131],{"class":80},[74,54289,38488],{"class":84},[74,54291,54292,54294,54296],{"class":76,"line":14096},[74,54293,38493],{"class":84},[74,54295,131],{"class":80},[74,54297,38498],{"class":84},[74,54299,54300],{"class":76,"line":14102},[74,54301,38503],{"class":144},[74,54303,54304],{"class":76,"line":14123},[74,54305,37156],{"class":84},[74,54307,54308],{"class":76,"line":14129},[74,54309,38512],{"class":144},[74,54311,54312,54314,54316],{"class":76,"line":14143},[74,54313,36941],{"class":84},[74,54315,131],{"class":80},[74,54317,38521],{"class":84},[74,54319,54320],{"class":76,"line":14149},[74,54321,38526],{"class":144},[74,54323,54324,54326,54328,54330,54332,54334,54336],{"class":76,"line":14176},[74,54325,36958],{"class":84},[74,54327,131],{"class":80},[74,54329,36963],{"class":84},[74,54331,36966],{"class":9495},[74,54333,131],{"class":80},[74,54335,303],{"class":134},[74,54337,91],{"class":84},[74,54339,54340],{"class":76,"line":14185},[74,54341,38547],{"class":144},[74,54343,54344],{"class":76,"line":14191},[74,54345,38552],{"class":144},[74,54347,54348],{"class":76,"line":14199},[74,54349,38557],{"class":144},[74,54351,54352,54354,54356,54358,54360],{"class":76,"line":14204},[74,54353,38562],{"class":84},[74,54355,13756],{"class":80},[74,54357,37068],{"class":84},[74,54359,2912],{"class":80},[74,54361,38571],{"class":84},[74,54363,54364],{"class":76,"line":20883},[74,54365,38576],{"class":144},[74,54367,54368,54370,54372,54374,54376],{"class":76,"line":20889},[74,54369,38581],{"class":84},[74,54371,13756],{"class":80},[74,54373,38586],{"class":84},[74,54375,277],{"class":134},[74,54377,91],{"class":84},[74,54379,54380],{"class":76,"line":20912},[74,54381,2363],{"emptyLinePlaceholder":2362},[74,54383,54384],{"class":76,"line":20918},[74,54385,38599],{"class":144},[74,54387,54388,54390,54392,54394,54396],{"class":76,"line":20941},[74,54389,38604],{"class":84},[74,54391,131],{"class":80},[74,54393,38609],{"class":84},[74,54395,670],{"class":80},[74,54397,38614],{"class":84},[74,54399,54400],{"class":76,"line":20955},[74,54401,38619],{"class":144},[74,54403,54404,54406,54408,54410],{"class":76,"line":20975},[74,54405,36732],{"class":134},[74,54407,85],{"class":84},[74,54409,38628],{"class":190},[74,54411,38631],{"class":84},[74,54413,54414],{"class":76,"line":20981},[74,54415,2363],{"emptyLinePlaceholder":2362},[74,54417,54418],{"class":76,"line":20992},[74,54419,38640],{"class":144},[74,54421,54422,54424,54426,54428,54430],{"class":76,"line":21015},[74,54423,1493],{"class":80},[74,54425,35501],{"class":134},[74,54427,2912],{"class":80},[74,54429,35506],{"class":190},[74,54431,3702],{"class":84},[74,54433,54434],{"class":76,"line":21037},[74,54435,38657],{"class":144},[74,54437,54438,54440,54442],{"class":76,"line":21042},[74,54439,35570],{"class":84},[74,54441,131],{"class":80},[74,54443,48832],{"class":84},[74,54445,54446],{"class":76,"line":21048},[74,54447,38670],{"class":144},[74,54449,54450],{"class":76,"line":21062},[74,54451,38675],{"class":144},[74,54453,54454,54456,54458],{"class":76,"line":21075},[74,54455,38680],{"class":84},[74,54457,38683],{"class":190},[74,54459,34778],{"class":84},[74,54461,54462],{"class":76,"line":21080},[74,54463,38690],{"class":144},[74,54465,54466,54468,54470],{"class":76,"line":21094},[74,54467,38303],{"class":84},[74,54469,131],{"class":80},[74,54471,38699],{"class":84},[74,54473,54474],{"class":76,"line":21099},[74,54475,38704],{"class":144},[74,54477,54478],{"class":76,"line":21105},[74,54479,38709],{"class":84},[74,54481,54482],{"class":76,"line":21110},[74,54483,2363],{"emptyLinePlaceholder":2362},[74,54485,54486],{"class":76,"line":21124},[74,54487,38718],{"class":144},[74,54489,54490],{"class":76,"line":21129},[74,54491,38723],{"class":144},[74,54493,54494,54496,54498,54500,54502,54504,54506],{"class":76,"line":21134},[74,54495,35518],{"class":84},[74,54497,131],{"class":80},[74,54499,35525],{"class":190},[74,54501,1666],{"class":80},[74,54503,35530],{"class":84},[74,54505,1663],{"class":80},[74,54507,38400],{"class":190},[74,54509,54510,54512,54514],{"class":76,"line":21148},[74,54511,35570],{"class":84},[74,54513,131],{"class":80},[74,54515,36570],{"class":84},[74,54517,54518],{"class":76,"line":21160},[74,54519,38752],{"class":144},[74,54521,54522],{"class":76,"line":21165},[74,54523,38757],{"class":144},[74,54525,54526,54528,54530,54532,54535,54537,54540],{"class":76,"line":21178},[74,54527,38762],{"class":84},[74,54529,131],{"class":80},[74,54531,976],{"class":84},[74,54533,54534],{"class":190},"'猫'",[74,54536,464],{"class":84},[74,54538,54539],{"class":190},"'狗'",[74,54541,37527],{"class":84},[74,54543,54544,54546],{"class":76,"line":21183},[74,54545,38459],{"class":80},[74,54547,37165],{"class":84},[74,54549,54550],{"class":76,"line":21188},[74,54551,38827],{"class":144},[74,54553,54554,54556,54558,54560],{"class":76,"line":21193},[74,54555,3366],{"class":80},[74,54557,38834],{"class":84},[74,54559,30324],{"class":80},[74,54561,38478],{"class":84},[74,54563,54564,54566,54568],{"class":76,"line":21206},[74,54565,36891],{"class":84},[74,54567,131],{"class":80},[74,54569,36896],{"class":84},[74,54571,54572,54574,54576],{"class":76,"line":21211},[74,54573,36906],{"class":84},[74,54575,131],{"class":80},[74,54577,36911],{"class":84},[74,54579,54580],{"class":76,"line":36914},[74,54581,2363],{"emptyLinePlaceholder":2362},[74,54583,54584],{"class":76,"line":36920},[74,54585,38863],{"class":144},[74,54587,54588],{"class":76,"line":36926},[74,54589,37156],{"class":84},[74,54591,54592],{"class":76,"line":36932},[74,54593,38872],{"class":144},[74,54595,54596,54598,54600],{"class":76,"line":36938},[74,54597,36941],{"class":84},[74,54599,131],{"class":80},[74,54601,36946],{"class":84},[74,54603,54604],{"class":76,"line":36949},[74,54605,38885],{"class":144},[74,54607,54608,54610,54612,54614,54616,54618,54620],{"class":76,"line":36955},[74,54609,36958],{"class":84},[74,54611,131],{"class":80},[74,54613,36963],{"class":84},[74,54615,36966],{"class":9495},[74,54617,131],{"class":80},[74,54619,303],{"class":134},[74,54621,91],{"class":84},[74,54623,54624],{"class":76,"line":36975},[74,54625,38906],{"class":144},[74,54627,54628,54630,54632],{"class":76,"line":36981},[74,54629,38911],{"class":84},[74,54631,131],{"class":80},[74,54633,38916],{"class":84},[74,54635,54636,54638,54640],{"class":76,"line":36992},[74,54637,38921],{"class":84},[74,54639,131],{"class":80},[74,54641,38926],{"class":84},[74,54643,54644,54646,54648,54650,54652,54654,54656,54658],{"class":76,"line":36998},[74,54645,38931],{"class":134},[74,54647,85],{"class":84},[74,54649,38936],{"class":190},[74,54651,38939],{"class":84},[74,54653,38942],{"class":190},[74,54655,464],{"class":84},[74,54657,38947],{"class":190},[74,54659,38950],{"class":84},[5090,54661,54662],{},"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":69,"searchDepth":94,"depth":94,"links":54664},[54665,54666,54667,54668],{"id":34872,"depth":1141,"text":34873},{"id":42120,"depth":1141,"text":42121},{"id":45553,"depth":1141,"text":45554},{"id":49562,"depth":1141,"text":49563},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":34864,"description":27656},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":54675,"title":54676,"body":54677,"description":27656,"extension":5121,"meta":54684,"navigation":2362,"path":54685,"seo":54686,"stem":54687,"__hash__":54688},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":54678,"toc":54682},[54679],[10,54680,54676],{"id":54681},"_3yolo模型学习",{"title":69,"searchDepth":94,"depth":94,"links":54683},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":54676,"description":27656},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":54690,"title":54691,"body":54692,"description":54699,"extension":5121,"meta":54700,"navigation":2362,"path":54702,"seo":54703,"stem":54704,"__hash__":54705},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":54693,"toc":54697},[54694],[19,54695,54696],{},"yolo模型还未补充",{"title":69,"searchDepth":94,"depth":94,"links":54698},[],"深度学习学习",{"category":54701},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":54691,"description":54699},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":54707,"title":54708,"body":54709,"description":27656,"extension":5121,"meta":54734,"navigation":2362,"path":54735,"seo":54736,"stem":54737,"__hash__":54738},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":54710,"toc":54732},[54711,54714,54717,54722,54729],[10,54712,54708],{"id":54713},"_1工具",[19,54715,54716],{},"提示错误插件：有问题会提前报错",[19,54718,54719],{},[1424,54720],{"alt":69,"src":54721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,54723,54724],{},[324,54725,54728],{"href":54726,"rel":54727},"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",[28145],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,54730,54731],{},"alt键加上下箭头可以实现语句的移动",{"title":69,"searchDepth":94,"depth":94,"links":54733},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":54708,"description":27656},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":54740,"title":54741,"body":54742,"description":27656,"extension":5121,"meta":57606,"navigation":2362,"path":57607,"seo":57608,"stem":57609,"__hash__":57610},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":54743,"toc":57557},[54744,54747,54751,54755,54760,54763,54768,54772,54779,54784,54791,54796,54803,54808,54812,54817,54820,54824,54829,54833,54838,54841,54844,54847,54850,54853,54856,54859,54862,54867,54872,54877,54881,54884,54887,54891,54896,54899,54907,54912,54929,54937,54942,54947,54952,54957,54962,54965,54970,54975,54979,54988,54993,54998,55002,55007,55010,55014,55019,55027,55032,55037,55040,55045,55050,55055,55058,55061,55064,55069,55074,55077,55082,55085,55090,55093,55096,55099,55104,55107,55110,55125,55130,55135,55140,55143,55146,55149,55163,55166,55171,55176,55179,55182,55185,55188,55191,55194,55197,55201,55205,55210,55214,55217,55222,55227,55230,55235,55238,55242,55247,55250,55253,55256,55259,55262,55265,55268,55271,55274,55278,55283,55288,55293,55296,55299,55303,55308,55311,55315,55318,55321,55326,55329,55332,55336,55340,55343,55348,55353,55356,55385,55390,55395,55400,55405,55409,55414,55418,55423,55426,55430,55434,55439,55443,55448,55453,55457,55462,55465,55467,55470,55475,55479,55484,55488,55492,55497,55502,55507,55512,55516,55521,55526,55531,55534,55537,55542,55545,55550,55555,55560,55565,55569,56376,56380,56723,56728,56731,56734,56737,56740,56743,56746,56749,56752,56754,56757,56759,56762,56766,56771,56774,56777,56780,56784,56789,56794,56814,56817,56821,56826,56831,56848,56852,56881,56885,56907,56909,56948,56956,56962,56966,56969,56972,56977,56982,56985,56988,56991,56996,57001,57004,57007,57010,57013,57016,57019,57022,57025,57028,57031,57034,57036,57039,57042,57045,57048,57051,57054,57057,57060,57064,57069,57072,57077,57080,57083,57086,57089,57092,57095,57098,57100,57103,57106,57109,57112,57115,57118,57122,57125,57134,57137,57142,57145,57150,57153,57156,57159,57162,57165,57168,57171,57175,57179,57182,57185,57190,57195,57200,57204,57209,57214,57217,57220,57223,57226,57229,57234,57237,57242,57244,57249,57252,57256,57261,57264,57267,57272,57276,57279,57284,57287,57290,57319,57324,57327,57330,57333,57336,57339,57343,57346,57432,57436,57439,57444,57449,57456,57459,57462,57465,57468,57471,57476,57481,57484,57487,57490,57493,57496,57499,57502,57505,57508,57510,57513,57517,57522,57527,57532,57535,57540,57545,57548,57551,57554],[10,54745,54741],{"id":54746},"_2基础语法",[14,54748,54750],{"id":54749},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[44,54752,54754],{"id":54753},"_211-js组成","2.1.1 js组成",[27,54756,54757],{},[30,54758,54759],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,54761,54762],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[27,54764,54765],{"start":94},[30,54766,54767],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[44,54769,54771],{"id":54770},"_212-js书写位置","2.1.2 js书写位置",[27,54773,54774],{},[30,54775,54776],{},[235,54777,54778],{},"内部 JavaScript",[19,54780,54781],{},[1424,54782],{"alt":69,"src":54783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[27,54785,54786],{"start":94},[30,54787,54788],{},[235,54789,54790],{},"外部 JavaScript",[19,54792,54793],{},[1424,54794],{"alt":69,"src":54795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[27,54797,54798],{"start":1141},[30,54799,54800],{},[235,54801,54802],{},"内联 JavaScript",[19,54804,54805],{},[1424,54806],{"alt":69,"src":54807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[44,54809,54811],{"id":54810},"_213-javascript注释","2.1.3 JavaScript注释",[19,54813,54814],{},[1424,54815],{"alt":69,"src":54816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,54818,54819],{},"alt+shift+a一定要记住！",[44,54821,54823],{"id":54822},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,54825,54826],{},[1424,54827],{"alt":69,"src":54828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[44,54830,54832],{"id":54831},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[27,54834,54835],{},[30,54836,54837],{},"输出语法：",[19,54839,54840],{},"①document.write('要出的内容')",[19,54842,54843],{},"向body内输出内容；",[19,54845,54846],{},"如果输出的内容写的是标签，也会被解析cheng",[19,54848,54849],{},"②alert('要出的内容')",[19,54851,54852],{},"页面弹出警告对话框",[19,54854,54855],{},"③console.log('控制台打印')",[19,54857,54858],{},"控制台输出语法，程序员调试使用",[19,54860,54861],{},"输入log就行，自动生成：",[19,54863,54864],{},[1424,54865],{"alt":69,"src":54866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[27,54868,54869],{"start":94},[30,54870,54871],{},"输入语法：",[19,54873,54874],{},[1424,54875],{"alt":69,"src":54876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[44,54878,54880],{"id":54879},"_2116-字面量","21.1.6 字面量",[19,54882,54883],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,54885,54886],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,54888,54890],{"id":54889},"_22-变量","2.2 变量",[27,54892,54893],{},[30,54894,54895],{},"变量声明",[19,54897,54898],{},"let 变量名",[1093,54900,54901,54904],{},[30,54902,54903],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[30,54905,54906],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[27,54908,54909],{"start":94},[30,54910,54911],{},"变量赋值",[64,54913,54917],{"className":54914,"code":54915,"language":54916,"meta":69,"style":69},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[71,54918,54919,54924],{"__ignoreMap":69},[74,54920,54921],{"class":76,"line":77},[74,54922,54923],{"class":84},"let age\n",[74,54925,54926],{"class":76,"line":94},[74,54927,54928],{"class":84},"age=18\n",[27,54930,54931,54934],{"start":1141},[30,54932,54933],{},"连这些（变量的初始化）：let age=18",[30,54935,54936],{},"更新变量",[19,54938,54939],{},[1424,54940],{"alt":69,"src":54941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[27,54943,54944],{"start":1162},[30,54945,54946],{},"声明多个变量",[19,54948,54949],{},[1424,54950],{"alt":69,"src":54951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[27,54953,54954],{"start":1176},[30,54955,54956],{},"变量命名规则与规范",[19,54958,54959],{},[1424,54960],{"alt":69,"src":54961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,54963,54964],{},"遵守小驼峰！",[27,54966,54967],{"start":1182},[30,54968,54969],{},"变量拓展-let和var的区别",[19,54971,54972],{},[1424,54973],{"alt":69,"src":54974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,54976,54978],{"id":54977},"_23-数组","2.3 数组",[64,54980,54982],{"className":54914,"code":54981,"language":54916,"meta":69,"style":69},"let arr = []\n",[71,54983,54984],{"__ignoreMap":69},[74,54985,54986],{"class":76,"line":77},[74,54987,54981],{"class":84},[19,54989,54990],{},[1424,54991],{"alt":69,"src":54992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,54994,54995],{},[1424,54996],{"alt":69,"src":54997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,54999,55001],{"id":55000},"_24-常量","2.4 常量",[19,55003,55004],{},[1424,55005],{"alt":69,"src":55006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,55008,55009],{},"const — 类似于 let ，但是变量的值无法被修改",[14,55011,55013],{"id":55012},"_25-数据类型","2.5 数据类型",[19,55015,55016],{},[1424,55017],{"alt":69,"src":55018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[27,55020,55021,55024],{},[30,55022,55023],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[30,55025,55026],{},"算数运算符：",[19,55028,55029],{},[1424,55030],{"alt":69,"src":55031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[27,55033,55034],{"start":1141},[30,55035,55036],{},"数字类型（Number）",[19,55038,55039],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,55041,55042],{},[1424,55043],{"alt":69,"src":55044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[27,55046,55047],{"start":1156},[30,55048,55049],{},"字符串类型（string）",[19,55051,55052],{},[1424,55053],{"alt":69,"src":55054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,55056,55057],{},"反引号也是可以使用的",[19,55059,55060],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,55062,55063],{},"例如：document.write(\"我今年\"+age+\"岁\")",[27,55065,55066],{"start":1162},[30,55067,55068],{},"模板字符串",[19,55070,55071],{},[1424,55072],{"alt":69,"src":55073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,55075,55076],{},"类似于python的字符串格式化",[27,55078,55079],{"start":1176},[30,55080,55081],{},"布尔类型",[19,55083,55084],{},"true 和 false",[27,55086,55087],{"start":1182},[30,55088,55089],{},"未定义类型（underfined）",[19,55091,55092],{},"表示没有赋值",[19,55094,55095],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,55097,55098],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[27,55100,55101],{"start":1273},[30,55102,55103],{},"null（空类型）",[19,55105,55106],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,55108,55109],{},"赋值了，但是内容为空",[64,55111,55113],{"className":54914,"code":55112,"language":54916,"meta":69,"style":69},"typeof null\n输出的是'object'，是一个对象数据类型\n",[71,55114,55115,55120],{"__ignoreMap":69},[74,55116,55117],{"class":76,"line":77},[74,55118,55119],{"class":84},"typeof null\n",[74,55121,55122],{"class":76,"line":94},[74,55123,55124],{"class":84},"输出的是'object'，是一个对象数据类型\n",[27,55126,55127],{"start":1279},[30,55128,55129],{},"控制台检测数据类型",[19,55131,55132],{},[1424,55133],{"alt":69,"src":55134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[27,55136,55137],{"start":1291},[30,55138,55139],{},"类型转换",[19,55141,55142],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,55144,55145],{},"转换方式：隐式转换和显示转换",[19,55147,55148],{},"①隐式转换",[1093,55150,55151,55154,55157,55160],{},[30,55152,55153],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[30,55155,55156],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[30,55158,55159],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[30,55161,55162],{},"任何数据和字符串相加结果都是字符串",[19,55164,55165],{},"②显示转换",[19,55167,55168],{},[1424,55169],{"alt":69,"src":55170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,55172,55173],{},[1424,55174],{"alt":69,"src":55175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,55177,55178],{},"在输入的时候要用好隐式转换，简单写起来",[19,55180,55181],{},"let num = +prompt(’请输入数字：‘)",[19,55183,55184],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,55186,55187],{},"console.log(parseInt('12.333px'))",[19,55189,55190],{},"输出为：12",[19,55192,55193],{},"console.log(parseInt('a'a'a12.333px'))",[19,55195,55196],{},"输出：NaN",[14,55198,55200],{"id":55199},"_26-运算符","2.6 运算符",[44,55202,55204],{"id":55203},"_261-赋值运算符","2.6.1 赋值运算符",[19,55206,55207],{},[1424,55208],{"alt":69,"src":55209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[44,55211,55213],{"id":55212},"_262-一元运算符","2.6.2 一元运算符",[19,55215,55216],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,55218,55219],{},[1424,55220],{"alt":69,"src":55221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,55223,55224],{},[1424,55225],{"alt":69,"src":55226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,55228,55229],{},"两者的区别：",[19,55231,55232],{},[1424,55233],{"alt":69,"src":55234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,55236,55237],{},"前置先自加；后置后加，代码执行完之后再加",[44,55239,55241],{"id":55240},"_263-比较运算符","2.6.3 比较运算符",[19,55243,55244],{},[1424,55245],{"alt":69,"src":55246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,55248,55249],{},"比较运算符也有隐式转换",[19,55251,55252],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,55254,55255],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,55257,55258],{},"要使用三等，开发的时候",[19,55260,55261],{},"NaN不等于任何人，包括它自己",[19,55263,55264],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,55266,55267],{},"7\u002F10=0.7",[19,55269,55270],{},"最后：0.5+0.2=0.7",[19,55272,55273],{},"字符串比较，比较的是字符对应的ASCII码",[44,55275,55277],{"id":55276},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,55279,55280],{},[1424,55281],{"alt":69,"src":55282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,55284,55285],{},[1424,55286],{"alt":69,"src":55287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,55289,55290],{},[1424,55291],{"alt":69,"src":55292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,55294,55295],{},"上述题目选D",[19,55297,55298],{},"与真2假1；或真1假2",[44,55300,55302],{"id":55301},"_265-运算符优先级","2.6.5 运算符优先级",[19,55304,55305],{},[1424,55306],{"alt":69,"src":55307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,55309,55310],{},"先算逻辑与，后算逻辑或",[14,55312,55314],{"id":55313},"_27-语句","2.7 语句",[19,55316,55317],{},"表达式：是可以被求值的代码，会有结果给我们",[19,55319,55320],{},"语句：语句是可以被执行的代码，例如prompt()",[19,55322,55323],{},[1424,55324],{"alt":69,"src":55325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,55327,55328],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,55330,55331],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[44,55333,55335],{"id":55334},"_271-分支语句","2.7.1 分支语句",[26277,55337,55339],{"id":55338},"_2711-if分支语句","2.7.1.1 if分支语句",[19,55341,55342],{},"if语句单行简单的话，可以不写{}，写在一行就行",[27,55344,55345],{},[30,55346,55347],{},"单分支语句",[19,55349,55350],{},[1424,55351],{"alt":69,"src":55352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,55354,55355],{},"除了0，所有数字都为真",[64,55357,55359],{"className":54914,"code":55358,"language":54916,"meta":69,"style":69},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[71,55360,55361,55366,55371,55376,55380],{"__ignoreMap":69},[74,55362,55363],{"class":76,"line":77},[74,55364,55365],{"class":84},"if（0) {\n",[74,55367,55368],{"class":76,"line":94},[74,55369,55370],{"class":84},"    let a=1\n",[74,55372,55373],{"class":76,"line":1141},[74,55374,55375],{"class":84},"    alert(typeof a)\n",[74,55377,55378],{"class":76,"line":1156},[74,55379,1527],{"class":84},[74,55381,55382],{"class":76,"line":1162},[74,55383,55384],{"class":84},"不输出，括号为假\n",[27,55386,55387],{"start":94},[30,55388,55389],{},"双分支语句",[19,55391,55392],{},[1424,55393],{"alt":69,"src":55394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[27,55396,55397],{"start":1141},[30,55398,55399],{},"多分支语句",[19,55401,55402],{},[1424,55403],{"alt":69,"src":55404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[26277,55406,55408],{"id":55407},"_2712-三元运算符","2.7.1.2 三元运算符",[19,55410,55411],{},[1424,55412],{"alt":69,"src":55413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[26277,55415,55417],{"id":55416},"_2713-switch语句","2.7.1.3 switch语句",[19,55419,55420],{},[1424,55421],{"alt":69,"src":55422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,55424,55425],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[44,55427,55429],{"id":55428},"_272-循环语句","2.7.2 循环语句",[26277,55431,55433],{"id":55432},"_2721-断点演示","2.7.2.1 断点演示",[19,55435,55436],{},[1424,55437],{"alt":69,"src":55438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[26277,55440,55442],{"id":55441},"_2722-while循环","2.7.2.2 while循环",[19,55444,55445],{},[1424,55446],{"alt":69,"src":55447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,55449,55450],{},[1424,55451],{"alt":69,"src":55452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[26277,55454,55456],{"id":55455},"_2723-for循环","2.7.2.3 for循环",[19,55458,55459],{},[1424,55460],{"alt":69,"src":55461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,55463,55464],{},"for(;;) {",[19,55466,1032],{},[19,55468,55469],{},"表示无限循环",[19,55471,55472],{},[1424,55473],{"alt":69,"src":55474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[26277,55476,55478],{"id":55477},"_2724-循环的退出","2.7.2.4 循环的退出",[19,55480,55481],{},[1424,55482],{"alt":69,"src":55483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,55485,55487],{"id":55486},"_28-数组","2.8 数组",[44,55489,55491],{"id":55490},"_281-基础认识","2.8.1 基础认识",[19,55493,55494],{},[1424,55495],{"alt":69,"src":55496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,55498,55499],{},[1424,55500],{"alt":69,"src":55501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,55503,55504],{},[1424,55505],{"alt":69,"src":55506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,55508,55509],{},[1424,55510],{"alt":69,"src":55511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[44,55513,55515],{"id":55514},"_282-操作数组","2.8.2 操作数组",[19,55517,55518],{},[1424,55519],{"alt":69,"src":55520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[27,55522,55523],{},[30,55524,55525],{},"添加元素",[19,55527,55528],{},[1424,55529],{"alt":69,"src":55530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,55532,55533],{},"console.log(arr.push('green'))",[19,55535,55536],{},"输出结果：为新数组的长度",[19,55538,55539],{},[1424,55540],{"alt":69,"src":55541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,55543,55544],{},"push用的非常多，一定要记住",[27,55546,55547],{},[30,55548,55549],{},"删除元素",[19,55551,55552],{},[1424,55553],{"alt":69,"src":55554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,55556,55557],{},[1424,55558],{"alt":69,"src":55559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,55561,55562],{},[1424,55563],{"alt":69,"src":55564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[44,55566,55568],{"id":55567},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[64,55570,55572],{"className":54914,"code":55571,"language":54916,"meta":69,"style":69},"\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",[71,55573,55574,55589,55605,55609,55618,55636,55660,55682,55696,55704,55711,55723,55734,55738,55742,55749,55761,55776,55789,55808,55825,55840,55852,55864,55876,55880,55884,55895,55905,55917,55929,55941,55952,55956,55960,55972,55976,55990,55994,55998,56009,56023,56035,56049,56053,56062,56071,56075,56084,56088,56097,56102,56107,56120,56148,56153,56158,56183,56188,56192,56197,56202,56217,56221,56226,56256,56268,56284,56300,56314,56319,56326,56330,56335,56348,56356,56364,56368],{"__ignoreMap":69},[74,55575,55576,55579,55583,55586],{"class":76,"line":77},[74,55577,55578],{"class":84},"\u003C!",[74,55580,55582],{"class":55581},"s9eBZ","DOCTYPE",[74,55584,55585],{"class":1925}," html",[74,55587,55588],{"class":84},">\n",[74,55590,55591,55593,55595,55598,55600,55603],{"class":76,"line":94},[74,55592,996],{"class":84},[74,55594,54916],{"class":55581},[74,55596,55597],{"class":1925}," lang",[74,55599,131],{"class":84},[74,55601,55602],{"class":190},"\"en\"",[74,55604,55588],{"class":84},[74,55606,55607],{"class":76,"line":1141},[74,55608,2363],{"emptyLinePlaceholder":2362},[74,55610,55611,55613,55616],{"class":76,"line":1156},[74,55612,996],{"class":84},[74,55614,55615],{"class":55581},"head",[74,55617,55588],{"class":84},[74,55619,55620,55623,55626,55629,55631,55634],{"class":76,"line":1162},[74,55621,55622],{"class":84},"    \u003C",[74,55624,55625],{"class":55581},"meta",[74,55627,55628],{"class":1925}," charset",[74,55630,131],{"class":84},[74,55632,55633],{"class":190},"\"UTF-8\"",[74,55635,55588],{"class":84},[74,55637,55638,55640,55642,55645,55647,55650,55653,55655,55658],{"class":76,"line":1176},[74,55639,55622],{"class":84},[74,55641,55625],{"class":55581},[74,55643,55644],{"class":1925}," http-equiv",[74,55646,131],{"class":84},[74,55648,55649],{"class":190},"\"X-UA-Compatible\"",[74,55651,55652],{"class":1925}," content",[74,55654,131],{"class":84},[74,55656,55657],{"class":190},"\"IE=edge\"",[74,55659,55588],{"class":84},[74,55661,55662,55664,55666,55668,55670,55673,55675,55677,55680],{"class":76,"line":1182},[74,55663,55622],{"class":84},[74,55665,55625],{"class":55581},[74,55667,19199],{"class":1925},[74,55669,131],{"class":84},[74,55671,55672],{"class":190},"\"viewport\"",[74,55674,55652],{"class":1925},[74,55676,131],{"class":84},[74,55678,55679],{"class":190},"\"width=device-width, initial-scale=1.0\"",[74,55681,55588],{"class":84},[74,55683,55684,55686,55689,55692,55694],{"class":76,"line":1273},[74,55685,55622],{"class":84},[74,55687,55688],{"class":55581},"title",[74,55690,55691],{"class":84},">Document\u003C\u002F",[74,55693,55688],{"class":55581},[74,55695,55588],{"class":84},[74,55697,55698,55700,55702],{"class":76,"line":1279},[74,55699,55622],{"class":84},[74,55701,5090],{"class":55581},[74,55703,55588],{"class":84},[74,55705,55706,55709],{"class":76,"line":1291},[74,55707,55708],{"class":55581},"        *",[74,55710,19851],{"class":84},[74,55712,55713,55716,55719,55721],{"class":76,"line":1574},[74,55714,55715],{"class":134},"            margin",[74,55717,55718],{"class":84},": ",[74,55720,277],{"class":134},[74,55722,1252],{"class":84},[74,55724,55725,55728,55730,55732],{"class":76,"line":1579},[74,55726,55727],{"class":134},"            padding",[74,55729,55718],{"class":84},[74,55731,277],{"class":134},[74,55733,1252],{"class":84},[74,55735,55736],{"class":76,"line":1585},[74,55737,2492],{"class":84},[74,55739,55740],{"class":76,"line":1590},[74,55741,2363],{"emptyLinePlaceholder":2362},[74,55743,55744,55747],{"class":76,"line":1604},[74,55745,55746],{"class":1925},"        .box",[74,55748,19851],{"class":84},[74,55750,55751,55754,55756,55759],{"class":76,"line":1609},[74,55752,55753],{"class":134},"            display",[74,55755,55718],{"class":84},[74,55757,55758],{"class":134},"flex",[74,55760,1252],{"class":84},[74,55762,55763,55766,55768,55771,55774],{"class":76,"line":1615},[74,55764,55765],{"class":134},"            width",[74,55767,55718],{"class":84},[74,55769,55770],{"class":134},"700",[74,55772,55773],{"class":80},"px",[74,55775,1252],{"class":84},[74,55777,55778,55781,55783,55785,55787],{"class":76,"line":1636},[74,55779,55780],{"class":134},"            height",[74,55782,55718],{"class":84},[74,55784,3936],{"class":134},[74,55786,55773],{"class":80},[74,55788,1252],{"class":84},[74,55790,55791,55794,55796,55798,55800,55803,55806],{"class":76,"line":1641},[74,55792,55793],{"class":134},"            border-left",[74,55795,55718],{"class":84},[74,55797,303],{"class":134},[74,55799,55773],{"class":80},[74,55801,55802],{"class":134}," solid",[74,55804,55805],{"class":134}," pink",[74,55807,1252],{"class":84},[74,55809,55810,55813,55815,55817,55819,55821,55823],{"class":76,"line":1655},[74,55811,55812],{"class":134},"            border-bottom",[74,55814,55718],{"class":84},[74,55816,303],{"class":134},[74,55818,55773],{"class":80},[74,55820,55802],{"class":134},[74,55822,55805],{"class":134},[74,55824,1252],{"class":84},[74,55826,55827,55829,55831,55833,55835,55838],{"class":76,"line":1660},[74,55828,55715],{"class":134},[74,55830,55718],{"class":84},[74,55832,742],{"class":134},[74,55834,55773],{"class":80},[74,55836,55837],{"class":134}," auto",[74,55839,1252],{"class":84},[74,55841,55842,55845,55847,55850],{"class":76,"line":1689},[74,55843,55844],{"class":134},"            justify-content",[74,55846,55718],{"class":84},[74,55848,55849],{"class":134},"space-around",[74,55851,1252],{"class":84},[74,55853,55854,55857,55859,55862],{"class":76,"line":1694},[74,55855,55856],{"class":134},"            align-items",[74,55858,55718],{"class":84},[74,55860,55861],{"class":134},"flex-end",[74,55863,1252],{"class":84},[74,55865,55866,55869,55871,55874],{"class":76,"line":1711},[74,55867,55868],{"class":134},"            text-align",[74,55870,55718],{"class":84},[74,55872,55873],{"class":134},"center",[74,55875,1252],{"class":84},[74,55877,55878],{"class":76,"line":1716},[74,55879,2492],{"class":84},[74,55881,55882],{"class":76,"line":1721},[74,55883,2363],{"emptyLinePlaceholder":2362},[74,55885,55886,55888,55890,55893],{"class":76,"line":1726},[74,55887,55746],{"class":1925},[74,55889,1046],{"class":80},[74,55891,55892],{"class":55581},"div",[74,55894,19851],{"class":84},[74,55896,55897,55899,55901,55903],{"class":76,"line":1740},[74,55898,55753],{"class":134},[74,55900,55718],{"class":84},[74,55902,55758],{"class":134},[74,55904,1252],{"class":84},[74,55906,55907,55909,55911,55913,55915],{"class":76,"line":1745},[74,55908,55765],{"class":134},[74,55910,55718],{"class":84},[74,55912,742],{"class":134},[74,55914,55773],{"class":80},[74,55916,1252],{"class":84},[74,55918,55919,55922,55924,55927],{"class":76,"line":2540},[74,55920,55921],{"class":134},"            background-color",[74,55923,55718],{"class":84},[74,55925,55926],{"class":134},"pink",[74,55928,1252],{"class":84},[74,55930,55931,55934,55936,55939],{"class":76,"line":2554},[74,55932,55933],{"class":134},"            flex-direction",[74,55935,55718],{"class":84},[74,55937,55938],{"class":134},"column",[74,55940,1252],{"class":84},[74,55942,55943,55945,55947,55950],{"class":76,"line":2562},[74,55944,55844],{"class":134},[74,55946,55718],{"class":84},[74,55948,55949],{"class":134},"space-between",[74,55951,1252],{"class":84},[74,55953,55954],{"class":76,"line":2567},[74,55955,2492],{"class":84},[74,55957,55958],{"class":76,"line":2573},[74,55959,2363],{"emptyLinePlaceholder":2362},[74,55961,55962,55964,55967,55970],{"class":76,"line":2579},[74,55963,55746],{"class":1925},[74,55965,55966],{"class":55581}," div",[74,55968,55969],{"class":55581}," span",[74,55971,19851],{"class":84},[74,55973,55974],{"class":76,"line":2584},[74,55975,2363],{"emptyLinePlaceholder":2362},[74,55977,55978,55981,55983,55986,55988],{"class":76,"line":12227},[74,55979,55980],{"class":134},"            margin-top",[74,55982,55718],{"class":84},[74,55984,55985],{"class":134},"-20",[74,55987,55773],{"class":80},[74,55989,1252],{"class":84},[74,55991,55992],{"class":76,"line":12251},[74,55993,2492],{"class":84},[74,55995,55996],{"class":76,"line":12256},[74,55997,2363],{"emptyLinePlaceholder":2362},[74,55999,56000,56002,56004,56007],{"class":76,"line":12262},[74,56001,55746],{"class":1925},[74,56003,55966],{"class":55581},[74,56005,56006],{"class":55581}," h4",[74,56008,19851],{"class":84},[74,56010,56011,56014,56016,56019,56021],{"class":76,"line":12289},[74,56012,56013],{"class":134},"            margin-bottom",[74,56015,55718],{"class":84},[74,56017,56018],{"class":134},"-35",[74,56020,55773],{"class":80},[74,56022,1252],{"class":84},[74,56024,56025,56027,56029,56031,56033],{"class":76,"line":12294},[74,56026,55765],{"class":134},[74,56028,55718],{"class":84},[74,56030,442],{"class":134},[74,56032,55773],{"class":80},[74,56034,1252],{"class":84},[74,56036,56037,56040,56042,56045,56047],{"class":76,"line":12300},[74,56038,56039],{"class":134},"            margin-left",[74,56041,55718],{"class":84},[74,56043,56044],{"class":134},"-10",[74,56046,55773],{"class":80},[74,56048,1252],{"class":84},[74,56050,56051],{"class":76,"line":12312},[74,56052,2492],{"class":84},[74,56054,56055,56058,56060],{"class":76,"line":12324},[74,56056,56057],{"class":84},"    \u003C\u002F",[74,56059,5090],{"class":55581},[74,56061,55588],{"class":84},[74,56063,56064,56067,56069],{"class":76,"line":12336},[74,56065,56066],{"class":84},"\u003C\u002F",[74,56068,55615],{"class":55581},[74,56070,55588],{"class":84},[74,56072,56073],{"class":76,"line":13995},[74,56074,2363],{"emptyLinePlaceholder":2362},[74,56076,56077,56079,56082],{"class":76,"line":14020},[74,56078,996],{"class":84},[74,56080,56081],{"class":55581},"body",[74,56083,55588],{"class":84},[74,56085,56086],{"class":76,"line":14043},[74,56087,2363],{"emptyLinePlaceholder":2362},[74,56089,56090,56092,56095],{"class":76,"line":14067},[74,56091,55622],{"class":84},[74,56093,56094],{"class":55581},"script",[74,56096,55588],{"class":84},[74,56098,56099],{"class":76,"line":14072},[74,56100,56101],{"class":144},"        \u002F\u002F 1. 四次弹框效果\n",[74,56103,56104],{"class":76,"line":14077},[74,56105,56106],{"class":144},"        \u002F\u002F 声明一个新的数组\n",[74,56108,56109,56112,56115,56117],{"class":76,"line":14082},[74,56110,56111],{"class":80},"        let",[74,56113,56114],{"class":84}," arr ",[74,56116,131],{"class":80},[74,56118,56119],{"class":84}," []\n",[74,56121,56122,56124,56126,56129,56131,56133,56135,56137,56139,56142,56144,56146],{"class":76,"line":14091},[74,56123,3366],{"class":80},[74,56125,1620],{"class":84},[74,56127,56128],{"class":80},"let",[74,56130,13717],{"class":84},[74,56132,131],{"class":80},[74,56134,29399],{"class":134},[74,56136,13724],{"class":84},[74,56138,1550],{"class":80},[74,56140,56141],{"class":134}," 4",[74,56143,3177],{"class":84},[74,56145,2254],{"class":80},[74,56147,16721],{"class":84},[74,56149,56150],{"class":76,"line":14096},[74,56151,56152],{"class":144},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[74,56154,56155],{"class":76,"line":14102},[74,56156,56157],{"class":144},"            \u002F\u002F arr.push(num)\n",[74,56159,56160,56163,56166,56168,56171,56173,56176,56178,56181],{"class":76,"line":14123},[74,56161,56162],{"class":84},"            arr.",[74,56164,56165],{"class":1925},"push",[74,56167,85],{"class":84},[74,56169,56170],{"class":1925},"prompt",[74,56172,85],{"class":84},[74,56174,56175],{"class":190},"`请输入第${",[74,56177,527],{"class":84},[74,56179,56180],{"class":190},"}季度的数据:`",[74,56182,34778],{"class":84},[74,56184,56185],{"class":76,"line":14129},[74,56186,56187],{"class":144},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[74,56189,56190],{"class":76,"line":14143},[74,56191,2492],{"class":84},[74,56193,56194],{"class":76,"line":14149},[74,56195,56196],{"class":144},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[74,56198,56199],{"class":76,"line":14176},[74,56200,56201],{"class":144},"        \u002F\u002F 盒子开头\n",[74,56203,56204,56207,56210,56212,56215],{"class":76,"line":14185},[74,56205,56206],{"class":84},"        document.",[74,56208,56209],{"class":1925},"write",[74,56211,85],{"class":84},[74,56213,56214],{"class":190},"` \u003Cdiv class=\"box\">`",[74,56216,91],{"class":84},[74,56218,56219],{"class":76,"line":14191},[74,56220,2363],{"emptyLinePlaceholder":2362},[74,56222,56223],{"class":76,"line":14199},[74,56224,56225],{"class":144},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[74,56227,56228,56230,56232,56234,56236,56238,56240,56242,56244,56247,56250,56252,56254],{"class":76,"line":14204},[74,56229,3366],{"class":80},[74,56231,1620],{"class":84},[74,56233,56128],{"class":80},[74,56235,13717],{"class":84},[74,56237,131],{"class":80},[74,56239,4056],{"class":134},[74,56241,13724],{"class":84},[74,56243,996],{"class":80},[74,56245,56246],{"class":84}," arr.",[74,56248,56249],{"class":134},"length",[74,56251,3177],{"class":84},[74,56253,2254],{"class":80},[74,56255,16721],{"class":84},[74,56257,56258,56261,56263,56265],{"class":76,"line":20883},[74,56259,56260],{"class":84},"            document.",[74,56262,56209],{"class":1925},[74,56264,85],{"class":84},[74,56266,56267],{"class":190},"`\n",[74,56269,56270,56273,56275,56277,56279,56281],{"class":76,"line":20889},[74,56271,56272],{"class":190},"              \u003Cdiv style=\"height: ${",[74,56274,3843],{"class":84},[74,56276,976],{"class":190},[74,56278,527],{"class":84},[74,56280,1026],{"class":190},[74,56282,56283],{"class":190},"}px;\">\n",[74,56285,56286,56289,56291,56293,56295,56297],{"class":76,"line":20912},[74,56287,56288],{"class":190},"                \u003Cspan>${",[74,56290,3843],{"class":84},[74,56292,976],{"class":190},[74,56294,527],{"class":84},[74,56296,1026],{"class":190},[74,56298,56299],{"class":190},"}\u003C\u002Fspan>\n",[74,56301,56302,56305,56307,56309,56311],{"class":76,"line":20918},[74,56303,56304],{"class":190},"                \u003Ch4>第${",[74,56306,527],{"class":84},[74,56308,49847],{"class":80},[74,56310,29399],{"class":134},[74,56312,56313],{"class":190},"}季度\u003C\u002Fh4>\n",[74,56315,56316],{"class":76,"line":20941},[74,56317,56318],{"class":190},"              \u003C\u002Fdiv>          \n",[74,56320,56321,56324],{"class":76,"line":20955},[74,56322,56323],{"class":190},"            `",[74,56325,91],{"class":84},[74,56327,56328],{"class":76,"line":20975},[74,56329,2492],{"class":84},[74,56331,56332],{"class":76,"line":20981},[74,56333,56334],{"class":144},"        \u002F\u002F 盒子结尾\n",[74,56336,56337,56339,56341,56343,56346],{"class":76,"line":20992},[74,56338,56206],{"class":84},[74,56340,56209],{"class":1925},[74,56342,85],{"class":84},[74,56344,56345],{"class":190},"` \u003C\u002Fdiv>`",[74,56347,91],{"class":84},[74,56349,56350,56352,56354],{"class":76,"line":21015},[74,56351,56057],{"class":84},[74,56353,56094],{"class":55581},[74,56355,55588],{"class":84},[74,56357,56358,56360,56362],{"class":76,"line":21037},[74,56359,56066],{"class":84},[74,56361,56081],{"class":55581},[74,56363,55588],{"class":84},[74,56365,56366],{"class":76,"line":21042},[74,56367,2363],{"emptyLinePlaceholder":2362},[74,56369,56370,56372,56374],{"class":76,"line":21048},[74,56371,56066],{"class":84},[74,56373,54916],{"class":55581},[74,56375,55588],{"class":84},[44,56377,56379],{"id":56378},"_284-冒泡排序","2.8.4 冒泡排序",[64,56381,56383],{"className":54914,"code":56382,"language":54916,"meta":69,"style":69},"\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",[71,56384,56385,56395,56409,56413,56421,56436,56456,56468,56476,56480,56488,56496,56528,56561,56598,56603,56622,56627,56640,56655,56671,56675,56680,56684,56694,56703,56711,56715],{"__ignoreMap":69},[74,56386,56387,56389,56391,56393],{"class":76,"line":77},[74,56388,55578],{"class":84},[74,56390,55582],{"class":55581},[74,56392,55585],{"class":1925},[74,56394,55588],{"class":84},[74,56396,56397,56399,56401,56403,56405,56407],{"class":76,"line":94},[74,56398,996],{"class":84},[74,56400,54916],{"class":55581},[74,56402,55597],{"class":1925},[74,56404,131],{"class":84},[74,56406,55602],{"class":190},[74,56408,55588],{"class":84},[74,56410,56411],{"class":76,"line":1141},[74,56412,2363],{"emptyLinePlaceholder":2362},[74,56414,56415,56417,56419],{"class":76,"line":1156},[74,56416,996],{"class":84},[74,56418,55615],{"class":55581},[74,56420,55588],{"class":84},[74,56422,56423,56426,56428,56430,56432,56434],{"class":76,"line":1162},[74,56424,56425],{"class":84},"  \u003C",[74,56427,55625],{"class":55581},[74,56429,55628],{"class":1925},[74,56431,131],{"class":84},[74,56433,55633],{"class":190},[74,56435,55588],{"class":84},[74,56437,56438,56440,56442,56444,56446,56448,56450,56452,56454],{"class":76,"line":1176},[74,56439,56425],{"class":84},[74,56441,55625],{"class":55581},[74,56443,19199],{"class":1925},[74,56445,131],{"class":84},[74,56447,55672],{"class":190},[74,56449,55652],{"class":1925},[74,56451,131],{"class":84},[74,56453,55679],{"class":190},[74,56455,55588],{"class":84},[74,56457,56458,56460,56462,56464,56466],{"class":76,"line":1182},[74,56459,56425],{"class":84},[74,56461,55688],{"class":55581},[74,56463,55691],{"class":84},[74,56465,55688],{"class":55581},[74,56467,55588],{"class":84},[74,56469,56470,56472,56474],{"class":76,"line":1273},[74,56471,56066],{"class":84},[74,56473,55615],{"class":55581},[74,56475,55588],{"class":84},[74,56477,56478],{"class":76,"line":1279},[74,56479,2363],{"emptyLinePlaceholder":2362},[74,56481,56482,56484,56486],{"class":76,"line":1291},[74,56483,996],{"class":84},[74,56485,56081],{"class":55581},[74,56487,55588],{"class":84},[74,56489,56490,56492,56494],{"class":76,"line":1574},[74,56491,56425],{"class":84},[74,56493,56094],{"class":55581},[74,56495,55588],{"class":84},[74,56497,56498,56501,56503,56505,56508,56510,56512,56514,56516,56518,56520,56522,56524,56526],{"class":76,"line":1579},[74,56499,56500],{"class":80},"    let",[74,56502,56114],{"class":84},[74,56504,131],{"class":80},[74,56506,56507],{"class":84}," [",[74,56509,405],{"class":134},[74,56511,16714],{"class":84},[74,56513,379],{"class":134},[74,56515,16714],{"class":84},[74,56517,157],{"class":134},[74,56519,16714],{"class":84},[74,56521,163],{"class":134},[74,56523,16714],{"class":84},[74,56525,303],{"class":134},[74,56527,37527],{"class":84},[74,56529,56530,56532,56534,56536,56538,56540,56542,56544,56546,56548,56550,56553,56555,56557,56559],{"class":76,"line":1585},[74,56531,3164],{"class":80},[74,56533,1620],{"class":84},[74,56535,56128],{"class":80},[74,56537,13717],{"class":84},[74,56539,131],{"class":80},[74,56541,4056],{"class":134},[74,56543,13724],{"class":84},[74,56545,996],{"class":80},[74,56547,56246],{"class":84},[74,56549,56249],{"class":134},[74,56551,56552],{"class":80}," -",[74,56554,29399],{"class":134},[74,56556,3177],{"class":84},[74,56558,2254],{"class":80},[74,56560,16721],{"class":84},[74,56562,56563,56566,56568,56570,56572,56574,56576,56578,56580,56582,56584,56586,56588,56590,56592,56594,56596],{"class":76,"line":1590},[74,56564,56565],{"class":80},"      for",[74,56567,1620],{"class":84},[74,56569,56128],{"class":80},[74,56571,13779],{"class":84},[74,56573,131],{"class":80},[74,56575,4056],{"class":134},[74,56577,13786],{"class":84},[74,56579,996],{"class":80},[74,56581,56246],{"class":84},[74,56583,56249],{"class":134},[74,56585,56552],{"class":80},[74,56587,13717],{"class":84},[74,56589,618],{"class":80},[74,56591,29399],{"class":134},[74,56593,13793],{"class":84},[74,56595,2254],{"class":80},[74,56597,16721],{"class":84},[74,56599,56600],{"class":76,"line":1604},[74,56601,56602],{"class":144},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[74,56604,56605,56607,56610,56612,56615,56617,56619],{"class":76,"line":1609},[74,56606,2460],{"class":80},[74,56608,56609],{"class":84}," (arr[j] ",[74,56611,1046],{"class":80},[74,56613,56614],{"class":84}," arr[j ",[74,56616,567],{"class":80},[74,56618,29399],{"class":134},[74,56620,56621],{"class":84},"]) {\n",[74,56623,56624],{"class":76,"line":1615},[74,56625,56626],{"class":144},"          \u002F\u002F 交换两个变量\n",[74,56628,56629,56632,56635,56637],{"class":76,"line":1636},[74,56630,56631],{"class":80},"          let",[74,56633,56634],{"class":84}," tmp ",[74,56636,131],{"class":80},[74,56638,56639],{"class":84}," arr[j]\n",[74,56641,56642,56645,56647,56649,56651,56653],{"class":76,"line":1641},[74,56643,56644],{"class":84},"          arr[j] ",[74,56646,131],{"class":80},[74,56648,56614],{"class":84},[74,56650,567],{"class":80},[74,56652,29399],{"class":134},[74,56654,37527],{"class":84},[74,56656,56657,56660,56662,56664,56666,56668],{"class":76,"line":1655},[74,56658,56659],{"class":84},"          arr[j ",[74,56661,567],{"class":80},[74,56663,29399],{"class":134},[74,56665,4406],{"class":84},[74,56667,131],{"class":80},[74,56669,56670],{"class":84}," tmp\n",[74,56672,56673],{"class":76,"line":1660},[74,56674,2492],{"class":84},[74,56676,56677],{"class":76,"line":1689},[74,56678,56679],{"class":84},"      }\n",[74,56681,56682],{"class":76,"line":1694},[74,56683,2149],{"class":84},[74,56685,56686,56689,56691],{"class":76,"line":1711},[74,56687,56688],{"class":84},"    document.",[74,56690,56209],{"class":1925},[74,56692,56693],{"class":84},"(arr)\n",[74,56695,56696,56699,56701],{"class":76,"line":1716},[74,56697,56698],{"class":84},"  \u003C\u002F",[74,56700,56094],{"class":55581},[74,56702,55588],{"class":84},[74,56704,56705,56707,56709],{"class":76,"line":1721},[74,56706,56066],{"class":84},[74,56708,56081],{"class":55581},[74,56710,55588],{"class":84},[74,56712,56713],{"class":76,"line":1726},[74,56714,2363],{"emptyLinePlaceholder":2362},[74,56716,56717,56719,56721],{"class":76,"line":1740},[74,56718,56066],{"class":84},[74,56720,54916],{"class":55581},[74,56722,55588],{"class":84},[19,56724,56725],{},[1424,56726],{"alt":69,"src":56727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,56729,56730],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,56732,56733],{},"let arr = [4, 2, 5, 1, 3]",[19,56735,56736],{},"\u002F\u002F 1.升序排列写法",[19,56738,56739],{},"arr.sort(function (a, b) {",[19,56741,56742],{},"return a - b",[19,56744,56745],{},"})",[19,56747,56748],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,56750,56751],{},"\u002F\u002F 降序排列写法",[19,56753,56739],{},[19,56755,56756],{},"return b - a",[19,56758,56745],{},[19,56760,56761],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,56763,56765],{"id":56764},"_29-函数","2.9 函数",[19,56767,56768],{},[1424,56769],{"alt":69,"src":56770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,56772,56773],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,56775,56776],{},"函数的声明用function",[19,56778,56779],{},"函数里边可以嵌套函数",[44,56781,56783],{"id":56782},"_291-函数传参","2.9.1 函数传参",[19,56785,56786],{},[1424,56787],{"alt":69,"src":56788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,56790,56791],{},[1424,56792],{"alt":69,"src":56793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1093,56795,56796,56799,56802,56805,56808,56811],{},[30,56797,56798],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[30,56800,56801],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[30,56803,56804],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[30,56806,56807],{},"开发中尽量保持形参和实参个数一致",[30,56809,56810],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[30,56812,56813],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,56815,56816],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[44,56818,56820],{"id":56819},"_292-函数的返回值","2.9.2 函数的返回值",[19,56822,56823],{},[1424,56824],{"alt":69,"src":56825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,56827,56828],{},[1424,56829],{"alt":69,"src":56830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1093,56832,56833,56836,56839,56842,56845],{},[30,56834,56835],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[30,56837,56838],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[30,56840,56841],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[30,56843,56844],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[30,56846,56847],{},"断点调试:进入函数内部看执行过程F11",[44,56849,56851],{"id":56850},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[64,56853,56855],{"className":54914,"code":56854,"language":54916,"meta":69,"style":69},"    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",[71,56856,56857,56862,56867,56871,56876],{"__ignoreMap":69},[74,56858,56859],{"class":76,"line":77},[74,56860,56861],{"class":84},"    function fn(a, b) {\n",[74,56863,56864],{"class":76,"line":94},[74,56865,56866],{"class":84},"      console.log(a + b);\n",[74,56868,56869],{"class":76,"line":1141},[74,56870,2149],{"class":84},[74,56872,56873],{"class":76,"line":1156},[74,56874,56875],{"class":84},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[74,56877,56878],{"class":76,"line":1162},[74,56879,56880],{"class":84},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[44,56882,56884],{"id":56883},"_294-作用域","2.9.4 作用域",[1093,56886,56887,56893,56898,56901,56904],{},[30,56888,56889,56890],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[235,56891,56892],{},"作用域",[30,56894,56895],{},[235,56896,56897],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[30,56899,56900],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[30,56902,56903],{},"函数内部可以直接所使用全局变量",[30,56905,56906],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,56908,18912],{},[64,56910,56912],{"className":54914,"code":56911,"language":54916,"meta":69,"style":69},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[71,56913,56914,56919,56924,56928,56933,56938,56943],{"__ignoreMap":69},[74,56915,56916],{"class":76,"line":77},[74,56917,56918],{"class":84},"    function fun() {\n",[74,56920,56921],{"class":76,"line":94},[74,56922,56923],{"class":84},"      num = 10\n",[74,56925,56926],{"class":76,"line":1141},[74,56927,2149],{"class":84},[74,56929,56930],{"class":76,"line":1156},[74,56931,56932],{"class":84},"    fun()\n",[74,56934,56935],{"class":76,"line":1162},[74,56936,56937],{"class":84},"    console.log(num)\n",[74,56939,56940],{"class":76,"line":1176},[74,56941,56942],{"class":84},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[74,56944,56945],{"class":76,"line":1182},[74,56946,56947],{"class":84},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1093,56949,56950,56953],{},[30,56951,56952],{},"函数内部的形参可以看做是局部变量",[30,56954,56955],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,56957,56958,56959],{},"变量访问原则： ",[235,56960,56961],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[44,56963,56965],{"id":56964},"_295-匿名函数","2.9.5 匿名函数",[19,56967,56968],{},"函数可以分为具名函数和匿名函数",[19,56970,56971],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[27,56973,56974],{},[30,56975,56976],{},"函数表达式",[19,56978,56979],{},[1424,56980],{"alt":69,"src":56981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,56983,56984],{},"里边也可以写参数",[19,56986,56987],{},"具名函数调用位置可以随意调整；",[19,56989,56990],{},"匿名函数函数表达式形式只能在声明后才可以使用",[27,56992,56993],{"start":94},[30,56994,56995],{},"立即执行函数",[19,56997,56998],{},[1424,56999],{"alt":69,"src":57000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,57002,57003],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,57005,57006],{},"写法：两个小括号，然后在第一个小括号中写function",[19,57008,57009],{},"(function () {})();",[19,57011,57012],{},"不要落下最后的;",[19,57014,57015],{},"立即执行函数必须要加;",[19,57017,57018],{},"分号写前写后都没问题",[19,57020,57021],{},"写前：",[19,57023,57024],{},"(function() {})()",[19,57026,57027],{},";(function () {})();",[19,57029,57030],{},"写后:",[19,57032,57033],{},"(function() {})();",[19,57035,57009],{},[19,57037,57038],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,57040,57041],{},"还有一种写法：",[19,57043,57044],{},"(function(){}());",[19,57046,57047],{},"或者:",[19,57049,57050],{},"!function(){}();",[19,57052,57053],{},"立即执行函数有时候也是可以加名字的：",[19,57055,57056],{},"(function flexible(window,document) {}(window,document));",[19,57058,57059],{},"省一些调用方法",[44,57061,57063],{"id":57062},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,57065,57066],{},[1424,57067],{"alt":69,"src":57068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,57070,57071],{},"这样就不用非得给x,y初始化了",[19,57073,57074],{},[1424,57075],{"alt":69,"src":57076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,57078,57079],{},"代码执行时先看左边",[19,57081,57082],{},"例如：console.log(false && 3+5)",[19,57084,57085],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,57087,57088],{},"&&都是真时，就返回最后一个真值",[19,57090,57091],{},"console.log(11 && 22)",[19,57093,57094],{},"输出22",[19,57096,57097],{},"逻辑与：遇真则真",[19,57099,18912],{},[19,57101,57102],{},"let age=1",[19,57104,57105],{},"console.log(11 || age++)",[19,57107,57108],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,57110,57111],{},"console.log(11 || 22)",[19,57113,57114],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,57116,57117],{},"||如果都是假的话，就取最后一个假的值了",[44,57119,57121],{"id":57120},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,57123,57124],{},"显示转换：",[19,57126,57127,57130,57131],{},[235,57128,57129],{},"记忆","： ",[235,57132,57133],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,57135,57136],{},"空字符串为假，其他字符串全为真",[19,57138,57139],{},[1424,57140],{"alt":69,"src":57141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,57143,57144],{},"隐式转换：",[19,57146,57147],{},[1424,57148],{"alt":69,"src":57149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,57151,57152],{},"隐式转换:",[19,57154,57155],{},"null+3=3",[19,57157,57158],{},"undefined+3=NaN",[19,57160,57161],{},"null==undefined 输出true,他两个都当0看",[19,57163,57164],{},"null===undefined 输出false",[19,57166,57167],{},"undefined做任何操作都是NaN",[19,57169,57170],{},"NaN不等于NaN，NaN表示计算错误",[14,57172,57174],{"id":57173},"_210-对象","2.10 对象",[44,57176,57178],{"id":57177},"_2101-对象的介绍","2.10.1 对象的介绍",[19,57180,57181],{},"对象也是一种数据类型，里边的数据是无序的",[19,57183,57184],{},"对象由属性和方法组成",[19,57186,57187],{},[1424,57188],{"alt":69,"src":57189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,57191,57192],{},[1424,57193],{"alt":69,"src":57194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,57196,57197],{},[1424,57198],{"alt":69,"src":57199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[44,57201,57203],{"id":57202},"_2102-对象属性","2.10.2 对象属性",[19,57205,57206],{},[1424,57207],{"alt":69,"src":57208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[27,57210,57211],{},[30,57212,57213],{},"查询对象",[19,57215,57216],{},"对象名.属性 goods.uname",[19,57218,57219],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,57221,57222],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,57224,57225],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,57227,57228],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[27,57230,57231],{"start":94},[30,57232,57233],{},"重新赋值",[19,57235,57236],{},"对象名.属性=新值",[27,57238,57239],{"start":1141},[30,57240,57241],{},"增加新数据",[19,57243,57236],{},[27,57245,57246],{"start":1156},[30,57247,57248],{},"删除对象中的属性",[19,57250,57251],{},"delete 对象名.属性",[44,57253,57255],{"id":57254},"_2103-对象方法","2.10.3 对象方法",[19,57257,57258],{},[1424,57259],{"alt":69,"src":57260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,57262,57263],{},"后边跟的是匿名函数",[19,57265,57266],{},"对象外面的叫函数；对象内部的叫方法",[19,57268,57269],{},[1424,57270],{"alt":69,"src":57271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[44,57273,57275],{"id":57274},"_2104-遍历对象","2.10.4 遍历对象",[19,57277,57278],{},"理解为加括号的python字典遍历",[19,57280,57281],{},[1424,57282],{"alt":69,"src":57283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,57285,57286],{},"k是字符串类型",[19,57288,57289],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[64,57291,57293],{"className":54914,"code":57292,"language":54916,"meta":69,"style":69},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[71,57294,57295,57300,57305,57310,57315],{"__ignoreMap":69},[74,57296,57297],{"class":76,"line":77},[74,57298,57299],{"class":84},"   let arr = [1, 2, 3]\n",[74,57301,57302],{"class":76,"line":94},[74,57303,57304],{"class":84},"    for (let k in arr) {\n",[74,57306,57307],{"class":76,"line":1141},[74,57308,57309],{"class":84},"      console.log(k)\n",[74,57311,57312],{"class":76,"line":1156},[74,57313,57314],{"class":84},"      console.log(arr[k])\n",[74,57316,57317],{"class":76,"line":1162},[74,57318,2149],{"class":84},[19,57320,57321],{},[1424,57322],{"alt":69,"src":57323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,57325,57326],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,57328,57329],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,57331,57332],{},"for in 得到的k是属性名",[56094,57334,57335],{},"\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",[19,57337,57338],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[44,57340,57342],{"id":57341},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,57344,57345],{},"数组中放对象信息",[64,57347,57351],{"className":57348,"code":57349,"language":57350,"meta":69,"style":69},"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",[71,57352,57353,57361,57366,57371,57376,57381,57386,57391,57396,57401,57406,57411,57416,57420,57424],{"__ignoreMap":69},[74,57354,57355,57357,57359],{"class":76,"line":77},[74,57356,996],{"class":84},[74,57358,56094],{"class":55581},[74,57360,55588],{"class":84},[74,57362,57363],{"class":76,"line":94},[74,57364,57365],{"class":84},"    let students = [\n",[74,57367,57368],{"class":76,"line":1141},[74,57369,57370],{"class":84},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[74,57372,57373],{"class":76,"line":1156},[74,57374,57375],{"class":84},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[74,57377,57378],{"class":76,"line":1162},[74,57379,57380],{"class":84},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[74,57382,57383],{"class":76,"line":1176},[74,57384,57385],{"class":84},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[74,57387,57388],{"class":76,"line":1182},[74,57389,57390],{"class":84},"    ]\n",[74,57392,57393],{"class":76,"line":1273},[74,57394,57395],{"class":84},"    for (let i = 0; i \u003C students.length; i++) {\n",[74,57397,57398],{"class":76,"line":1279},[74,57399,57400],{"class":84},"      for (let k in students[i]) {\n",[74,57402,57403],{"class":76,"line":1291},[74,57404,57405],{"class":84},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[74,57407,57408],{"class":76,"line":1574},[74,57409,57410],{"class":84},"        \u002F\u002F输出每个人的名字：\n",[74,57412,57413],{"class":76,"line":1579},[74,57414,57415],{"class":84},"        \u002F\u002Fconsole.log(students[i].name)\n",[74,57417,57418],{"class":76,"line":1585},[74,57419,56679],{"class":84},[74,57421,57422],{"class":76,"line":1590},[74,57423,2149],{"class":84},[74,57425,57426,57428,57430],{"class":76,"line":1604},[74,57427,56698],{"class":84},[74,57429,56094],{"class":55581},[74,57431,55588],{"class":84},[44,57433,57435],{"id":57434},"_2106-内置对象","2.10.6 内置对象",[19,57437,57438],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[27,57440,57441],{},[30,57442,57443],{},"数学对象Math",[19,57445,57446],{},[1424,57447],{"alt":69,"src":57448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,57450,57451],{},[324,57452,57455],{"href":57453,"rel":57454},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[28145],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,57457,57458],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,57460,57461],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,57463,57464],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,57466,57467],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,57469,57470],{},"null属于对象数据类型",[27,57472,57473],{"start":94},[30,57474,57475],{},"生成任意范围随机数",[19,57477,57478],{},[1424,57479],{"alt":69,"src":57480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,57482,57483],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,57485,57486],{},"乘以几就取不到几",[19,57488,57489],{},"取数组中的随机元素：",[19,57491,57492],{},"let arr = ['red', 'green', 'blue']",[19,57494,57495],{},"let random = Math.floor(Math.random() * arr.length)",[19,57497,57498],{},"console.log(arr[random])",[19,57500,57501],{},"这个函数得到的是全闭区间",[19,57503,57504],{},"function getRandom(N, M) {",[19,57506,57507],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,57509,1032],{},[19,57511,57512],{},"console.log(getRandom(4, 8))",[44,57514,57516],{"id":57515},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,57518,57519],{},[1424,57520],{"alt":69,"src":57521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,57523,57524],{},[1424,57525],{"alt":69,"src":57526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,57528,57529],{},[1424,57530],{"alt":69,"src":57531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,57533,57534],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,57536,57537],{},[1424,57538],{"alt":69,"src":57539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,57541,57542],{},[1424,57543],{"alt":69,"src":57544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,57546,57547],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,57549,57550],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,57552,57553],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5090,57555,57556],{},"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":69,"searchDepth":94,"depth":94,"links":57558},[57559,57567,57568,57569,57570,57571,57578,57582,57588,57597],{"id":54749,"depth":94,"text":54750,"children":57560},[57561,57562,57563,57564,57565,57566],{"id":54753,"depth":1141,"text":54754},{"id":54770,"depth":1141,"text":54771},{"id":54810,"depth":1141,"text":54811},{"id":54822,"depth":1141,"text":54823},{"id":54831,"depth":1141,"text":54832},{"id":54879,"depth":1141,"text":54880},{"id":54889,"depth":94,"text":54890},{"id":54977,"depth":94,"text":54978},{"id":55000,"depth":94,"text":55001},{"id":55012,"depth":94,"text":55013},{"id":55199,"depth":94,"text":55200,"children":57572},[57573,57574,57575,57576,57577],{"id":55203,"depth":1141,"text":55204},{"id":55212,"depth":1141,"text":55213},{"id":55240,"depth":1141,"text":55241},{"id":55276,"depth":1141,"text":55277},{"id":55301,"depth":1141,"text":55302},{"id":55313,"depth":94,"text":55314,"children":57579},[57580,57581],{"id":55334,"depth":1141,"text":55335},{"id":55428,"depth":1141,"text":55429},{"id":55486,"depth":94,"text":55487,"children":57583},[57584,57585,57586,57587],{"id":55490,"depth":1141,"text":55491},{"id":55514,"depth":1141,"text":55515},{"id":55567,"depth":1141,"text":55568},{"id":56378,"depth":1141,"text":56379},{"id":56764,"depth":94,"text":56765,"children":57589},[57590,57591,57592,57593,57594,57595,57596],{"id":56782,"depth":1141,"text":56783},{"id":56819,"depth":1141,"text":56820},{"id":56850,"depth":1141,"text":56851},{"id":56883,"depth":1141,"text":56884},{"id":56964,"depth":1141,"text":56965},{"id":57062,"depth":1141,"text":57063},{"id":57120,"depth":1141,"text":57121},{"id":57173,"depth":94,"text":57174,"children":57598},[57599,57600,57601,57602,57603,57604,57605],{"id":57177,"depth":1141,"text":57178},{"id":57202,"depth":1141,"text":57203},{"id":57254,"depth":1141,"text":57255},{"id":57274,"depth":1141,"text":57275},{"id":57341,"depth":1141,"text":57342},{"id":57434,"depth":1141,"text":57435},{"id":57515,"depth":1141,"text":57516},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":54741,"description":27656},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":57612,"title":57613,"body":57614,"description":27656,"extension":5121,"meta":80954,"navigation":2362,"path":80955,"seo":80956,"stem":80957,"__hash__":80958},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":57615,"toc":80894},[57616,57619,57622,57625,57630,57633,57636,57639,57643,57647,57653,57658,57666,57673,57676,57680,57685,57690,57695,57698,57701,57712,57715,57719,57722,57725,57730,57735,57740,57743,57746,57838,57841,57846,57849,57854,57857,57860,57865,57868,57873,57877,57880,57894,57898,57903,57906,57909,57913,57918,57921,57925,57929,57934,57938,57943,57946,57949,57952,57955,57958,57961,57966,57971,57999,58002,58005,58008,58013,58016,58019,58022,58025,58029,58058,58062,58067,58072,58075,58078,58081,58086,58201,58206,58211,58372,58377,58380,58384,58389,58394,58397,58400,58403,58406,58409,58412,58415,58418,58421,58424,58427,58430,58433,58436,58438,58441,58444,58447,58452,58456,58853,58856,58862,58866,58871,60153,60158,60161,60164,60167,60172,61368,61372,61378,61383,61386,61391,61396,61400,61404,61409,61412,61417,61420,61423,61427,62335,62338,62342,62563,62566,62569,62572,62798,62801,63025,63028,63032,63037,63040,63043,63271,63274,63307,63310,63314,63319,63323,63326,63329,63332,63335,63338,63341,63344,63349,64629,64633,64636,65729,65733,65736,65739,65742,65745,65749,65752,65755,65757,65765,67246,67250,67253,67256,67259,67468,67471,67475,67479,67484,67489,67492,67495,67500,67504,67509,67512,67621,67625,67630,67635,67638,67641,67645,67650,67655,67660,67663,67666,67677,67680,67685,67690,67693,67696,67769,67773,67778,67781,67783,67794,67798,67803,69129,69132,69135,69138,69140,69143,69146,69149,69152,69155,69158,69161,69164,69167,69170,69173,69176,69178,69180,69183,69187,70281,70284,70287,70303,70317,70320,70325,70331,70336,70340,70344,70349,70353,70358,70800,70805,70808,70812,70817,70820,70823,70827,70832,70836,70841,70846,70850,70855,70860,70863,70868,70873,70877,70882,70887,70991,70994,70998,71003,71369,71372,71375,71378,71381,71384,71387,71390,71393,72689,72693,72698,72703,72706,72709,72712,72715,72717,72722,72727,72730,72734,72739,72744,72749,72752,72755,72758,72761,72764,72769,72772,72776,72781,72786,72790,72795,72798,72803,72806,72809,72812,72815,72818,72823,72826,72829,72832,72835,72839,72844,72847,72851,72856,72859,72862,72866,72895,72898,72902,72906,72911,72915,72920,72923,72926,72929,72932,72935,72938,72941,72944,72947,72950,72953,72956,72959,72962,72966,72971,72976,72979,72983,72987,72992,72995,72999,73002,73005,73010,73015,73020,73025,73030,73033,73036,73041,73046,73050,73055,73058,73063,73066,73069,73072,73075,73080,73083,73092,73096,73101,73104,73107,73111,73114,73119,73123,73126,73132,73138,73142,73168,73171,74732,74735,75231,75234,75239,75244,75249,75253,75258,75263,75268,75272,75277,75280,75283,75286,75289,75293,75296,75301,75304,75309,75313,75318,75321,75326,75331,75336,75339,75342,75347,75352,75355,75358,75362,75365,75370,75373,75378,75381,75386,75391,75396,75399,75404,75469,75472,75483,75487,75492,75664,75668,75673,75676,75679,75682,75686,75697,75701,75704,75709,75714,75717,75720,75723,75726,75729,75731,75734,75737,75740,75745,75748,75753,75756,75760,75763,75766,75780,75784,75787,75842,75847,75850,75853,75858,75861,75865,75870,76000,76004,76009,76014,76095,76100,76104,76107,76112,76117,76123,76126,76129,76132,76136,76141,76144,76155,76159,76176,79223,79227,79230,79233,79236,79257,79261,79264,79272,79275,79280,79283,79286,79291,79296,79300,79321,79325,79330,79333,79336,79339,79342,79346,79351,79354,79358,79363,79366,79371,79374,79379,79382,79387,80590,80594,80599,80602,80607,80891],[10,57617,57613],{"id":57618},"_3web-apis",[19,57620,57621],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,57623,57624],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,57626,57627],{},[1424,57628],{"alt":69,"src":57629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,57631,57632],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,57634,57635],{},"建议数组和对象使用 const 来声明",[19,57637,57638],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,57640,57642],{"id":57641},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[44,57644,57646],{"id":57645},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,57648,57649,57652],{},[71,57650,57651],{},"document"," = HTML 文件解析后的对象化表示；",[19,57654,57655,57657],{},[71,57656,57651],{}," ≠ HTML 文件本身",[19,57659,57660,57665],{},[235,57661,57662],{},[71,57663,57664],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,57667,57668,57672],{},[235,57669,57670],{},[71,57671,57651],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,57674,57675],{},"document实际上为window.document的简写",[44,57677,57679],{"id":57678},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,57681,57682],{},[1424,57683],{"alt":69,"src":57684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,57686,57687],{},[1424,57688],{"alt":69,"src":57689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,57691,57692],{},[1424,57693],{"alt":69,"src":57694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,57696,57697],{},"console.dir()",[19,57699,57700],{},"dir用来打印对象",[1093,57702,57703,57706,57709],{},[30,57704,57705],{},"任何一个标签，都是一个对象",[30,57707,57708],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[30,57710,57711],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,57713,57714],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[44,57716,57718],{"id":57717},"_312-获取dom对象","3.1.2 获取DoM对象",[19,57720,57721],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,57723,57724],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,57726,57727],{},[235,57728,57729],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[27,57731,57732],{},[30,57733,57734],{},"利用CSS选择器来获取标签元素",[19,57736,57737],{},[1424,57738],{"alt":69,"src":57739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,57741,57742],{},"里边的选择器必须必须加引号！！！",[19,57744,57745],{},"只选择第一个元素",[64,57747,57749],{"className":57348,"code":57748,"language":57350,"meta":69,"style":69},"\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",[71,57750,57751,57759,57780,57799,57807,57812,57817,57822,57830],{"__ignoreMap":69},[74,57752,57753,57755,57757],{"class":76,"line":77},[74,57754,996],{"class":84},[74,57756,56081],{"class":55581},[74,57758,55588],{"class":84},[74,57760,57761,57763,57765,57768,57770,57773,57776,57778],{"class":76,"line":94},[74,57762,56425],{"class":84},[74,57764,55892],{"class":55581},[74,57766,57767],{"class":1925}," class",[74,57769,131],{"class":84},[74,57771,57772],{"class":190},"\"box\"",[74,57774,57775],{"class":84},">123\u003C\u002F",[74,57777,55892],{"class":55581},[74,57779,55588],{"class":84},[74,57781,57782,57784,57786,57788,57790,57792,57795,57797],{"class":76,"line":1141},[74,57783,56425],{"class":84},[74,57785,55892],{"class":55581},[74,57787,57767],{"class":1925},[74,57789,131],{"class":84},[74,57791,57772],{"class":190},[74,57793,57794],{"class":84},">456\u003C\u002F",[74,57796,55892],{"class":55581},[74,57798,55588],{"class":84},[74,57800,57801,57803,57805],{"class":76,"line":1156},[74,57802,56425],{"class":84},[74,57804,56094],{"class":55581},[74,57806,55588],{"class":84},[74,57808,57809],{"class":76,"line":1162},[74,57810,57811],{"class":84},"    \u002F\u002F 1.获取匹配的第一个元素\n",[74,57813,57814],{"class":76,"line":1176},[74,57815,57816],{"class":84},"    const box = document.querySelector('div')\n",[74,57818,57819],{"class":76,"line":1182},[74,57820,57821],{"class":84},"    console.dir(box)\n",[74,57823,57824,57826,57828],{"class":76,"line":1273},[74,57825,56698],{"class":84},[74,57827,56094],{"class":55581},[74,57829,55588],{"class":84},[74,57831,57832,57834,57836],{"class":76,"line":1279},[74,57833,56066],{"class":84},[74,57835,56081],{"class":55581},[74,57837,55588],{"class":84},[19,57839,57840],{},"只选123，不选456",[19,57842,57843],{},[1424,57844],{"alt":69,"src":57845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,57847,57848],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,57850,57851],{},[1424,57852],{"alt":69,"src":57853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,57855,57856],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,57858,57859],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[27,57861,57862],{"start":94},[30,57863,57864],{},"其他方法来获取标签元素",[19,57866,57867],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,57869,57870],{},[1424,57871],{"alt":69,"src":57872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[44,57874,57876],{"id":57875},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,57878,57879],{},"设置修改DOM元素内容有两种方式：",[1093,57881,57882,57885,57888,57891],{},[30,57883,57884],{},"元素.innerText=''",[30,57886,57887],{},"元素.innerHTML=''",[30,57889,57890],{},"不写字符串输出数字也是可以的",[30,57892,57893],{},"元素.innerHtml=1",[26277,57895,57897],{"id":57896},"_3131-innertext","3.1.3.1 innerText",[19,57899,57900],{},[1424,57901],{"alt":69,"src":57902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,57904,57905],{},"思路：实现了修改盒子中的内容！",[19,57907,57908],{},"它只显示纯文本，不解析标签",[26277,57910,57912],{"id":57911},"_3132-innerhtml","3.1.3.2 innerHTML",[19,57914,57915],{},[1424,57916],{"alt":69,"src":57917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,57919,57920],{},"相比于innerText，他的强大之处在于可以解析标签",[44,57922,57924],{"id":57923},"_314-操作元素属性","3.1.4 操作元素属性",[26277,57926,57928],{"id":57927},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,57930,57931],{},[1424,57932],{"alt":69,"src":57933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[26277,57935,57937],{"id":57936},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,57939,57940],{},[1424,57941],{"alt":69,"src":57942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,57944,57945],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,57947,57948],{},"div.style.backgroundColor = 'hotpink'",[19,57950,57951],{},"如果按照css的写法，-表示减，就会出错",[19,57953,57954],{},"body元素不需要再获取，直接用就行！！！！！！",[19,57956,57957],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,57959,57960],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,57962,57963],{},[1424,57964],{"alt":69,"src":57965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,57967,57968],{},[1424,57969],{"alt":69,"src":57970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[27,57972,57973,57976,57979,57982,57985,57988],{},[30,57974,57975],{},"className这个方式就是修改很多样式的时候来使用的！",[30,57977,57978],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[30,57980,57981],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[30,57983,57984],{},"className为属性名，如果还用class的话就导致与关键字冲突",[30,57986,57987],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[30,57989,57990,57991,57996],{},"解析标签的时候就变为了",[55892,57992],{"className":57993},[57994,57995],"nav","box",[57997,57998],"br",{},[19,58000,58001],{},"例子：",[55892,58003],{"className":58004},[57994],[56094,58006,58007],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,58009,58010],{},[1424,58011],{"alt":69,"src":58012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,58014,58015],{},"追加和删除类名用classList",[19,58017,58018],{},"常用于类似于开关的操作",[19,58020,58021],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,58023,58024],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[26277,58026,58028],{"id":58027},"_3143-牢记点","3.1.4.3 牢记点",[27,58030,58031,58034,58037,58040,58043,58046,58049,58052,58055],{},[30,58032,58033],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[30,58035,58036],{},"使用style属性操作css时不要忘记引号",[30,58038,58039],{},"使用className或者classList时也不要忘记引号",[30,58041,58042],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[30,58044,58045],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[30,58047,58048],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[30,58050,58051],{},"若： let arr=['1','2',3] arr[0]=1",[30,58053,58054],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[30,58056,58057],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[44,58059,58061],{"id":58060},"_315-操作表单元素","3.1.5 操作表单元素",[27,58063,58064],{},[30,58065,58066],{},"天生的属性",[19,58068,58069],{},[1424,58070],{"alt":69,"src":58071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,58073,58074],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,58076,58077],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,58079,58080],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,58082,58083],{},[1424,58084],{"alt":69,"src":58085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[64,58087,58089],{"className":54914,"code":58088,"language":54916,"meta":69,"style":69},"在复选框中如果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",[71,58090,58091,58096,58128,58133,58138,58143,58148,58152,58157,58162,58179,58191,58196],{"__ignoreMap":69},[74,58092,58093],{"class":76,"line":77},[74,58094,58095],{"class":84},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[74,58097,58098,58100,58103,58106,58108,58111,58113,58115,58117,58119,58121,58123,58126],{"class":76,"line":94},[74,58099,996],{"class":84},[74,58101,58102],{"class":55581},"input",[74,58104,58105],{"class":1925}," type",[74,58107,131],{"class":84},[74,58109,58110],{"class":190},"\"checkbox\"",[74,58112,19199],{"class":1925},[74,58114,131],{"class":84},[74,58116,11931],{"class":190},[74,58118,19238],{"class":1925},[74,58120,131],{"class":84},[74,58122,11931],{"class":190},[74,58124,58125],{"class":1925}," checked",[74,58127,55588],{"class":84},[74,58129,58130],{"class":76,"line":1141},[74,58131,58132],{"class":84},"不选的话：\n",[74,58134,58135],{"class":76,"line":1156},[74,58136,58137],{"class":84},"const input = document.querySelector('input')\n",[74,58139,58140],{"class":76,"line":1162},[74,58141,58142],{"class":84},"input.checked=false\n",[74,58144,58145],{"class":76,"line":1176},[74,58146,58147],{"class":84},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[74,58149,58150],{"class":76,"line":1182},[74,58151,2363],{"emptyLinePlaceholder":2362},[74,58153,58154],{"class":76,"line":1273},[74,58155,58156],{"class":84},"禁用按钮：\n",[74,58158,58159],{"class":76,"line":1279},[74,58160,58161],{"class":84},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[74,58163,58164,58166,58169,58172,58175,58177],{"class":76,"line":1291},[74,58165,996],{"class":84},[74,58167,58168],{"class":55581},"button",[74,58170,58171],{"class":1925}," disabled",[74,58173,58174],{"class":84},">点击\u003C\u002F",[74,58176,58168],{"class":55581},[74,58178,55588],{"class":84},[74,58180,58181,58183,58185,58187,58189],{"class":76,"line":1574},[74,58182,996],{"class":84},[74,58184,58168],{"class":55581},[74,58186,58174],{"class":84},[74,58188,58168],{"class":55581},[74,58190,55588],{"class":84},[74,58192,58193],{"class":76,"line":1579},[74,58194,58195],{"class":84},"const bt = document.querySelector('button')\n",[74,58197,58198],{"class":76,"line":1585},[74,58199,58200],{"class":84},"bt.disabled = false\n",[27,58202,58203],{"start":94},[30,58204,58205],{},"自定义属性",[19,58207,58208],{},[1424,58209],{"alt":69,"src":58210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[64,58212,58214],{"className":57348,"code":58213,"language":57350,"meta":69,"style":69},"\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",[71,58215,58216,58224,58252,58271,58290,58309,58328,58336,58341,58346,58351,58356,58364],{"__ignoreMap":69},[74,58217,58218,58220,58222],{"class":76,"line":77},[74,58219,996],{"class":84},[74,58221,56081],{"class":55581},[74,58223,55588],{"class":84},[74,58225,58226,58228,58230,58233,58235,58237,58240,58242,58245,58248,58250],{"class":76,"line":94},[74,58227,56425],{"class":84},[74,58229,55892],{"class":55581},[74,58231,58232],{"class":1925}," data-id",[74,58234,131],{"class":84},[74,58236,3641],{"class":190},[74,58238,58239],{"class":1925}," data-spm",[74,58241,131],{"class":84},[74,58243,58244],{"class":190},"\"我不知道\"",[74,58246,58247],{"class":84},">1\u003C\u002F",[74,58249,55892],{"class":55581},[74,58251,55588],{"class":84},[74,58253,58254,58256,58258,58260,58262,58264,58267,58269],{"class":76,"line":1141},[74,58255,56425],{"class":84},[74,58257,55892],{"class":55581},[74,58259,58232],{"class":1925},[74,58261,131],{"class":84},[74,58263,3664],{"class":190},[74,58265,58266],{"class":84},">2\u003C\u002F",[74,58268,55892],{"class":55581},[74,58270,55588],{"class":84},[74,58272,58273,58275,58277,58279,58281,58283,58286,58288],{"class":76,"line":1156},[74,58274,56425],{"class":84},[74,58276,55892],{"class":55581},[74,58278,58232],{"class":1925},[74,58280,131],{"class":84},[74,58282,3677],{"class":190},[74,58284,58285],{"class":84},">3\u003C\u002F",[74,58287,55892],{"class":55581},[74,58289,55588],{"class":84},[74,58291,58292,58294,58296,58298,58300,58302,58305,58307],{"class":76,"line":1162},[74,58293,56425],{"class":84},[74,58295,55892],{"class":55581},[74,58297,58232],{"class":1925},[74,58299,131],{"class":84},[74,58301,3690],{"class":190},[74,58303,58304],{"class":84},">4\u003C\u002F",[74,58306,55892],{"class":55581},[74,58308,55588],{"class":84},[74,58310,58311,58313,58315,58317,58319,58321,58324,58326],{"class":76,"line":1176},[74,58312,56425],{"class":84},[74,58314,55892],{"class":55581},[74,58316,58232],{"class":1925},[74,58318,131],{"class":84},[74,58320,3711],{"class":190},[74,58322,58323],{"class":84},">5\u003C\u002F",[74,58325,55892],{"class":55581},[74,58327,55588],{"class":84},[74,58329,58330,58332,58334],{"class":76,"line":1182},[74,58331,56425],{"class":84},[74,58333,56094],{"class":55581},[74,58335,55588],{"class":84},[74,58337,58338],{"class":76,"line":1273},[74,58339,58340],{"class":84},"    const one = document.querySelector('div')\n",[74,58342,58343],{"class":76,"line":1279},[74,58344,58345],{"class":84},"    console.log(one.dataset)\n",[74,58347,58348],{"class":76,"line":1291},[74,58349,58350],{"class":84},"    console.log(one.dataset.id)\n",[74,58352,58353],{"class":76,"line":1574},[74,58354,58355],{"class":84},"    console.log(one.dataset.spm)\n",[74,58357,58358,58360,58362],{"class":76,"line":1579},[74,58359,56698],{"class":84},[74,58361,56094],{"class":55581},[74,58363,55588],{"class":84},[74,58365,58366,58368,58370],{"class":76,"line":1585},[74,58367,56066],{"class":84},[74,58369,56081],{"class":55581},[74,58371,55588],{"class":84},[19,58373,58374],{},[1424,58375],{"alt":69,"src":58376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,58378,58379],{},"document.querySelector选择的是第一个对象（元素）",[44,58381,58383],{"id":58382},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,58385,58386],{},[1424,58387],{"alt":69,"src":58388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,58390,58391],{},[1424,58392],{"alt":69,"src":58393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,58395,58396],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[56094,58398,58399],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,58401,58402],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[56094,58404,58405],{},"\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",[19,58407,58408],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,58410,58411],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,58413,58414],{},"单位为毫秒！！！",[19,58416,58417],{},"可以搭配匿名函数来用！！！",[19,58419,58420],{},"setInterval(function () {",[19,58422,58423],{},"alert('两秒执行一次')",[19,58425,58426],{},"}, 2000)",[19,58428,58429],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,58431,58432],{},"function fn() {",[19,58434,58435],{},"document.write(1)",[19,58437,1032],{},[19,58439,58440],{},"setInterval(fn, 1000)",[19,58442,58443],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,58445,58446],{},"setInterval('fn()', 1000)",[19,58448,58449],{},[1424,58450],{"alt":69,"src":58451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[26277,58453,58455],{"id":58454},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[64,58457,58459],{"className":54914,"code":58458,"language":54916,"meta":69,"style":69},"\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",[71,58460,58461,58471,58485,58489,58497,58511,58531,58543,58551,58555,58563,58600,58605,58610,58615,58623,58631,58653,58661,58666,58688,58693,58698,58709,58714,58734,58742,58757,58772,58783,58788,58798,58808,58812,58821,58825,58833,58841,58845],{"__ignoreMap":69},[74,58462,58463,58465,58467,58469],{"class":76,"line":77},[74,58464,55578],{"class":84},[74,58466,55582],{"class":55581},[74,58468,55585],{"class":1925},[74,58470,55588],{"class":84},[74,58472,58473,58475,58477,58479,58481,58483],{"class":76,"line":94},[74,58474,996],{"class":84},[74,58476,54916],{"class":55581},[74,58478,55597],{"class":1925},[74,58480,131],{"class":84},[74,58482,55602],{"class":190},[74,58484,55588],{"class":84},[74,58486,58487],{"class":76,"line":1141},[74,58488,2363],{"emptyLinePlaceholder":2362},[74,58490,58491,58493,58495],{"class":76,"line":1156},[74,58492,996],{"class":84},[74,58494,55615],{"class":55581},[74,58496,55588],{"class":84},[74,58498,58499,58501,58503,58505,58507,58509],{"class":76,"line":1162},[74,58500,56425],{"class":84},[74,58502,55625],{"class":55581},[74,58504,55628],{"class":1925},[74,58506,131],{"class":84},[74,58508,55633],{"class":190},[74,58510,55588],{"class":84},[74,58512,58513,58515,58517,58519,58521,58523,58525,58527,58529],{"class":76,"line":1176},[74,58514,56425],{"class":84},[74,58516,55625],{"class":55581},[74,58518,19199],{"class":1925},[74,58520,131],{"class":84},[74,58522,55672],{"class":190},[74,58524,55652],{"class":1925},[74,58526,131],{"class":84},[74,58528,55679],{"class":190},[74,58530,55588],{"class":84},[74,58532,58533,58535,58537,58539,58541],{"class":76,"line":1182},[74,58534,56425],{"class":84},[74,58536,55688],{"class":55581},[74,58538,55691],{"class":84},[74,58540,55688],{"class":55581},[74,58542,55588],{"class":84},[74,58544,58545,58547,58549],{"class":76,"line":1273},[74,58546,56066],{"class":84},[74,58548,55615],{"class":55581},[74,58550,55588],{"class":84},[74,58552,58553],{"class":76,"line":1279},[74,58554,2363],{"emptyLinePlaceholder":2362},[74,58556,58557,58559,58561],{"class":76,"line":1291},[74,58558,996],{"class":84},[74,58560,56081],{"class":55581},[74,58562,55588],{"class":84},[74,58564,58565,58567,58570,58572,58574,58576,58578,58580,58582,58585,58587,58590,58593,58595,58598],{"class":76,"line":1574},[74,58566,56425],{"class":84},[74,58568,58569],{"class":55581},"textarea",[74,58571,19199],{"class":1925},[74,58573,131],{"class":84},[74,58575,11931],{"class":190},[74,58577,19238],{"class":1925},[74,58579,131],{"class":84},[74,58581,11931],{"class":190},[74,58583,58584],{"class":1925}," cols",[74,58586,131],{"class":84},[74,58588,58589],{"class":190},"\"30\"",[74,58591,58592],{"class":1925}," rows",[74,58594,131],{"class":84},[74,58596,58597],{"class":190},"\"10\"",[74,58599,55588],{"class":84},[74,58601,58602],{"class":76,"line":1579},[74,58603,58604],{"class":84},"        用户注册协议\n",[74,58606,58607],{"class":76,"line":1585},[74,58608,58609],{"class":84},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[74,58611,58612],{"class":76,"line":1590},[74,58613,58614],{"class":84},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[74,58616,58617,58619,58621],{"class":76,"line":1604},[74,58618,56057],{"class":84},[74,58620,58569],{"class":55581},[74,58622,55588],{"class":84},[74,58624,58625,58627,58629],{"class":76,"line":1609},[74,58626,56425],{"class":84},[74,58628,57997],{"class":55581},[74,58630,55588],{"class":84},[74,58632,58633,58635,58637,58639,58641,58644,58646,58649,58651],{"class":76,"line":1615},[74,58634,56425],{"class":84},[74,58636,58168],{"class":55581},[74,58638,57767],{"class":1925},[74,58640,131],{"class":84},[74,58642,58643],{"class":190},"\"btn\"",[74,58645,58171],{"class":1925},[74,58647,58648],{"class":84},">我已经阅读用户协议(5)\u003C\u002F",[74,58650,58168],{"class":55581},[74,58652,55588],{"class":84},[74,58654,58655,58657,58659],{"class":76,"line":1636},[74,58656,56425],{"class":84},[74,58658,56094],{"class":55581},[74,58660,55588],{"class":84},[74,58662,58663],{"class":76,"line":1641},[74,58664,58665],{"class":144},"    \u002F\u002F 1. 获取元素\n",[74,58667,58668,58670,58673,58675,58678,58681,58683,58686],{"class":76,"line":1655},[74,58669,15500],{"class":80},[74,58671,58672],{"class":134}," btn",[74,58674,17843],{"class":80},[74,58676,58677],{"class":84}," document.",[74,58679,58680],{"class":1925},"querySelector",[74,58682,85],{"class":84},[74,58684,58685],{"class":190},"'.btn'",[74,58687,91],{"class":84},[74,58689,58690],{"class":76,"line":1660},[74,58691,58692],{"class":144},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[74,58694,58695],{"class":76,"line":1689},[74,58696,58697],{"class":144},"    \u002F\u002F 2. 倒计时\n",[74,58699,58700,58702,58704,58706],{"class":76,"line":1694},[74,58701,56500],{"class":80},[74,58703,13717],{"class":84},[74,58705,131],{"class":80},[74,58707,58708],{"class":134}," 5\n",[74,58710,58711],{"class":76,"line":1711},[74,58712,58713],{"class":144},"    \u002F\u002F 2.1 开启定时器\n",[74,58715,58716,58718,58721,58723,58726,58728,58731],{"class":76,"line":1716},[74,58717,56500],{"class":80},[74,58719,58720],{"class":84}," n ",[74,58722,131],{"class":80},[74,58724,58725],{"class":1925}," setInterval",[74,58727,85],{"class":84},[74,58729,58730],{"class":80},"function",[74,58732,58733],{"class":84}," () {\n",[74,58735,58736,58739],{"class":76,"line":1721},[74,58737,58738],{"class":84},"      i",[74,58740,58741],{"class":80},"--\n",[74,58743,58744,58747,58749,58752,58754],{"class":76,"line":1726},[74,58745,58746],{"class":84},"      btn.innerHTML ",[74,58748,131],{"class":80},[74,58750,58751],{"class":190}," `我已经阅读用户协议(${",[74,58753,527],{"class":84},[74,58755,58756],{"class":190},"})`\n",[74,58758,58759,58762,58765,58768,58770],{"class":76,"line":1740},[74,58760,58761],{"class":80},"      if",[74,58763,58764],{"class":84}," (i ",[74,58766,58767],{"class":80},"===",[74,58769,4056],{"class":134},[74,58771,16721],{"class":84},[74,58773,58774,58777,58780],{"class":76,"line":1745},[74,58775,58776],{"class":1925},"        clearInterval",[74,58778,58779],{"class":84},"(n)  ",[74,58781,58782],{"class":144},"\u002F\u002F 关闭定时器\n",[74,58784,58785],{"class":76,"line":2540},[74,58786,58787],{"class":144},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[74,58789,58790,58793,58795],{"class":76,"line":2554},[74,58791,58792],{"class":84},"        btn.disabled ",[74,58794,131],{"class":80},[74,58796,58797],{"class":134}," false\n",[74,58799,58800,58803,58805],{"class":76,"line":2562},[74,58801,58802],{"class":84},"        btn.innerHTML ",[74,58804,131],{"class":80},[74,58806,58807],{"class":190}," '同意'\n",[74,58809,58810],{"class":76,"line":2567},[74,58811,56679],{"class":84},[74,58813,58814,58817,58819],{"class":76,"line":2573},[74,58815,58816],{"class":84},"    }, ",[74,58818,10689],{"class":134},[74,58820,91],{"class":84},[74,58822,58823],{"class":76,"line":2579},[74,58824,2363],{"emptyLinePlaceholder":2362},[74,58826,58827,58829,58831],{"class":76,"line":2584},[74,58828,56698],{"class":84},[74,58830,56094],{"class":55581},[74,58832,55588],{"class":84},[74,58834,58835,58837,58839],{"class":76,"line":12227},[74,58836,56066],{"class":84},[74,58838,56081],{"class":55581},[74,58840,55588],{"class":84},[74,58842,58843],{"class":76,"line":12251},[74,58844,2363],{"emptyLinePlaceholder":2362},[74,58846,58847,58849,58851],{"class":76,"line":12256},[74,58848,56066],{"class":84},[74,58850,54916],{"class":55581},[74,58852,55588],{"class":84},[19,58854,58855],{},"不要一直想着用死循环,避免死循环",[19,58857,58858,58861],{},[71,58859,58860],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[26277,58863,58865],{"id":58864},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[27,58867,58868],{},[30,58869,58870],{},"法1",[64,58872,58874],{"className":54914,"code":58873,"language":54916,"meta":69,"style":69},"\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",[71,58875,58876,58886,58900,58904,58912,58926,58946,58958,58966,58972,58983,58994,58998,59002,59009,59021,59025,59029,59036,59048,59062,59075,59089,59093,59097,59104,59115,59126,59137,59149,59161,59173,59177,59181,59189,59199,59212,59224,59237,59241,59245,59252,59262,59274,59286,59297,59308,59318,59330,59342,59346,59350,59359,59371,59383,59411,59424,59428,59432,59439,59450,59454,59462,59470,59474,59482,59496,59511,59535,59543,59558,59571,59579,59600,59612,59624,59636,59648,59660,59672,59684,59693,59701,59709,59717,59729,59752,59771,59790,59809,59828,59847,59866,59886,59890,59910,59929,59949,59970,59981,59998,60008,60018,60028,60033,60038,60043,60048,60073,60086,60090,60113,60117,60125,60133,60141,60145],{"__ignoreMap":69},[74,58877,58878,58880,58882,58884],{"class":76,"line":77},[74,58879,55578],{"class":84},[74,58881,55582],{"class":55581},[74,58883,55585],{"class":1925},[74,58885,55588],{"class":84},[74,58887,58888,58890,58892,58894,58896,58898],{"class":76,"line":94},[74,58889,996],{"class":84},[74,58891,54916],{"class":55581},[74,58893,55597],{"class":1925},[74,58895,131],{"class":84},[74,58897,55602],{"class":190},[74,58899,55588],{"class":84},[74,58901,58902],{"class":76,"line":1141},[74,58903,2363],{"emptyLinePlaceholder":2362},[74,58905,58906,58908,58910],{"class":76,"line":1156},[74,58907,996],{"class":84},[74,58909,55615],{"class":55581},[74,58911,55588],{"class":84},[74,58913,58914,58916,58918,58920,58922,58924],{"class":76,"line":1162},[74,58915,56425],{"class":84},[74,58917,55625],{"class":55581},[74,58919,55628],{"class":1925},[74,58921,131],{"class":84},[74,58923,55633],{"class":190},[74,58925,55588],{"class":84},[74,58927,58928,58930,58932,58934,58936,58938,58940,58942,58944],{"class":76,"line":1176},[74,58929,56425],{"class":84},[74,58931,55625],{"class":55581},[74,58933,19199],{"class":1925},[74,58935,131],{"class":84},[74,58937,55672],{"class":190},[74,58939,55652],{"class":1925},[74,58941,131],{"class":84},[74,58943,55679],{"class":190},[74,58945,55588],{"class":84},[74,58947,58948,58950,58952,58954,58956],{"class":76,"line":1182},[74,58949,56425],{"class":84},[74,58951,55688],{"class":55581},[74,58953,55691],{"class":84},[74,58955,55688],{"class":55581},[74,58957,55588],{"class":84},[74,58959,58960,58962,58964],{"class":76,"line":1273},[74,58961,56425],{"class":84},[74,58963,5090],{"class":55581},[74,58965,55588],{"class":84},[74,58967,58968,58970],{"class":76,"line":1279},[74,58969,10682],{"class":55581},[74,58971,19851],{"class":84},[74,58973,58974,58977,58979,58981],{"class":76,"line":1291},[74,58975,58976],{"class":134},"      padding",[74,58978,55718],{"class":84},[74,58980,277],{"class":134},[74,58982,1252],{"class":84},[74,58984,58985,58988,58990,58992],{"class":76,"line":1574},[74,58986,58987],{"class":134},"      margin",[74,58989,55718],{"class":84},[74,58991,277],{"class":134},[74,58993,1252],{"class":84},[74,58995,58996],{"class":76,"line":1579},[74,58997,2149],{"class":84},[74,58999,59000],{"class":76,"line":1585},[74,59001,2363],{"emptyLinePlaceholder":2362},[74,59003,59004,59007],{"class":76,"line":1590},[74,59005,59006],{"class":55581},"    li",[74,59008,19851],{"class":84},[74,59010,59011,59014,59016,59019],{"class":76,"line":1604},[74,59012,59013],{"class":134},"      list-style",[74,59015,55718],{"class":84},[74,59017,59018],{"class":134},"none",[74,59020,1252],{"class":84},[74,59022,59023],{"class":76,"line":1609},[74,59024,2149],{"class":84},[74,59026,59027],{"class":76,"line":1615},[74,59028,2363],{"emptyLinePlaceholder":2362},[74,59030,59031,59034],{"class":76,"line":1636},[74,59032,59033],{"class":1925},"    .box",[74,59035,19851],{"class":84},[74,59037,59038,59041,59043,59046],{"class":76,"line":1641},[74,59039,59040],{"class":134},"      position",[74,59042,55718],{"class":84},[74,59044,59045],{"class":134},"relative",[74,59047,1252],{"class":84},[74,59049,59050,59053,59055,59058,59060],{"class":76,"line":1655},[74,59051,59052],{"class":134},"      width",[74,59054,55718],{"class":84},[74,59056,59057],{"class":134},"976",[74,59059,55773],{"class":80},[74,59061,1252],{"class":84},[74,59063,59064,59067,59069,59071,59073],{"class":76,"line":1660},[74,59065,59066],{"class":134},"      height",[74,59068,55718],{"class":84},[74,59070,1501],{"class":134},[74,59072,55773],{"class":80},[74,59074,1252],{"class":84},[74,59076,59077,59079,59081,59083,59085,59087],{"class":76,"line":1689},[74,59078,58987],{"class":134},[74,59080,55718],{"class":84},[74,59082,397],{"class":134},[74,59084,55773],{"class":80},[74,59086,55837],{"class":134},[74,59088,1252],{"class":84},[74,59090,59091],{"class":76,"line":1694},[74,59092,2149],{"class":84},[74,59094,59095],{"class":76,"line":1711},[74,59096,2363],{"emptyLinePlaceholder":2362},[74,59098,59099,59102],{"class":76,"line":1716},[74,59100,59101],{"class":1925},"    .slider-footer",[74,59103,19851],{"class":84},[74,59105,59106,59108,59110,59113],{"class":76,"line":1721},[74,59107,59040],{"class":134},[74,59109,55718],{"class":84},[74,59111,59112],{"class":134},"absolute",[74,59114,1252],{"class":84},[74,59116,59117,59120,59122,59124],{"class":76,"line":1726},[74,59118,59119],{"class":134},"      left",[74,59121,55718],{"class":84},[74,59123,277],{"class":134},[74,59125,1252],{"class":84},[74,59127,59128,59131,59133,59135],{"class":76,"line":1740},[74,59129,59130],{"class":134},"      bottom",[74,59132,55718],{"class":84},[74,59134,277],{"class":134},[74,59136,1252],{"class":84},[74,59138,59139,59141,59143,59145,59147],{"class":76,"line":1745},[74,59140,59052],{"class":134},[74,59142,55718],{"class":84},[74,59144,397],{"class":134},[74,59146,414],{"class":80},[74,59148,1252],{"class":84},[74,59150,59151,59153,59155,59157,59159],{"class":76,"line":2540},[74,59152,59066],{"class":134},[74,59154,55718],{"class":84},[74,59156,661],{"class":134},[74,59158,414],{"class":80},[74,59160,1252],{"class":84},[74,59162,59163,59166,59168,59171],{"class":76,"line":2554},[74,59164,59165],{"class":134},"      background-color",[74,59167,55718],{"class":84},[74,59169,59170],{"class":134},"skyblue",[74,59172,1252],{"class":84},[74,59174,59175],{"class":76,"line":2562},[74,59176,2149],{"class":84},[74,59178,59179],{"class":76,"line":2567},[74,59180,2363],{"emptyLinePlaceholder":2362},[74,59182,59183,59185,59187],{"class":76,"line":2573},[74,59184,59101],{"class":1925},[74,59186,11104],{"class":55581},[74,59188,19851],{"class":84},[74,59190,59191,59193,59195,59197],{"class":76,"line":2579},[74,59192,59040],{"class":134},[74,59194,55718],{"class":84},[74,59196,59112],{"class":134},[74,59198,1252],{"class":84},[74,59200,59201,59204,59206,59208,59210],{"class":76,"line":2584},[74,59202,59203],{"class":134},"      font-size",[74,59205,55718],{"class":84},[74,59207,987],{"class":134},[74,59209,55773],{"class":80},[74,59211,1252],{"class":84},[74,59213,59214,59216,59218,59220,59222],{"class":76,"line":12227},[74,59215,59119],{"class":134},[74,59217,55718],{"class":84},[74,59219,786],{"class":134},[74,59221,55773],{"class":80},[74,59223,1252],{"class":84},[74,59225,59226,59229,59231,59233,59235],{"class":76,"line":12251},[74,59227,59228],{"class":134},"      top",[74,59230,55718],{"class":84},[74,59232,405],{"class":134},[74,59234,55773],{"class":80},[74,59236,1252],{"class":84},[74,59238,59239],{"class":76,"line":12256},[74,59240,2149],{"class":84},[74,59242,59243],{"class":76,"line":12262},[74,59244,2363],{"emptyLinePlaceholder":2362},[74,59246,59247,59250],{"class":76,"line":12289},[74,59248,59249],{"class":55581},"    ul",[74,59251,19851],{"class":84},[74,59253,59254,59256,59258,59260],{"class":76,"line":12294},[74,59255,59040],{"class":134},[74,59257,55718],{"class":84},[74,59259,59112],{"class":134},[74,59261,1252],{"class":84},[74,59263,59264,59266,59268,59270,59272],{"class":76,"line":12300},[74,59265,59228],{"class":134},[74,59267,55718],{"class":84},[74,59269,867],{"class":134},[74,59271,55773],{"class":80},[74,59273,1252],{"class":84},[74,59275,59276,59278,59280,59282,59284],{"class":76,"line":12312},[74,59277,59119],{"class":134},[74,59279,55718],{"class":84},[74,59281,786],{"class":134},[74,59283,55773],{"class":80},[74,59285,1252],{"class":84},[74,59287,59288,59291,59293,59295],{"class":76,"line":12324},[74,59289,59290],{"class":134},"      display",[74,59292,55718],{"class":84},[74,59294,55758],{"class":134},[74,59296,1252],{"class":84},[74,59298,59299,59302,59304,59306],{"class":76,"line":12336},[74,59300,59301],{"class":134},"      justify-content",[74,59303,55718],{"class":84},[74,59305,55949],{"class":134},[74,59307,1252],{"class":84},[74,59309,59310,59312,59314,59316],{"class":76,"line":13995},[74,59311,59040],{"class":134},[74,59313,55718],{"class":84},[74,59315,59112],{"class":134},[74,59317,1252],{"class":84},[74,59319,59320,59322,59324,59326,59328],{"class":76,"line":14020},[74,59321,59052],{"class":134},[74,59323,55718],{"class":84},[74,59325,3955],{"class":134},[74,59327,55773],{"class":80},[74,59329,1252],{"class":84},[74,59331,59332,59334,59336,59338,59340],{"class":76,"line":14043},[74,59333,59066],{"class":134},[74,59335,55718],{"class":84},[74,59337,786],{"class":134},[74,59339,55773],{"class":80},[74,59341,1252],{"class":84},[74,59343,59344],{"class":76,"line":14067},[74,59345,2149],{"class":84},[74,59347,59348],{"class":76,"line":14072},[74,59349,2363],{"emptyLinePlaceholder":2362},[74,59351,59352,59354,59357],{"class":76,"line":14077},[74,59353,59249],{"class":55581},[74,59355,59356],{"class":55581}," li",[74,59358,19851],{"class":84},[74,59360,59361,59363,59365,59367,59369],{"class":76,"line":14082},[74,59362,59052],{"class":134},[74,59364,55718],{"class":84},[74,59366,786],{"class":134},[74,59368,55773],{"class":80},[74,59370,1252],{"class":84},[74,59372,59373,59375,59377,59379,59381],{"class":76,"line":14091},[74,59374,59066],{"class":134},[74,59376,55718],{"class":84},[74,59378,786],{"class":134},[74,59380,55773],{"class":80},[74,59382,1252],{"class":84},[74,59384,59385,59387,59389,59392,59394,59396,59398,59400,59402,59404,59406,59409],{"class":76,"line":14096},[74,59386,59165],{"class":134},[74,59388,55718],{"class":84},[74,59390,59391],{"class":134},"rgba",[74,59393,85],{"class":84},[74,59395,277],{"class":134},[74,59397,16714],{"class":84},[74,59399,277],{"class":134},[74,59401,16714],{"class":84},[74,59403,277],{"class":134},[74,59405,16714],{"class":84},[74,59407,59408],{"class":134},".4",[74,59410,2682],{"class":84},[74,59412,59413,59416,59418,59420,59422],{"class":76,"line":14102},[74,59414,59415],{"class":134},"      border-radius",[74,59417,55718],{"class":84},[74,59419,532],{"class":134},[74,59421,55773],{"class":80},[74,59423,1252],{"class":84},[74,59425,59426],{"class":76,"line":14123},[74,59427,2149],{"class":84},[74,59429,59430],{"class":76,"line":14129},[74,59431,2363],{"emptyLinePlaceholder":2362},[74,59433,59434,59437],{"class":76,"line":14143},[74,59435,59436],{"class":1925},"    .activate",[74,59438,19851],{"class":84},[74,59440,59441,59443,59445,59448],{"class":76,"line":14149},[74,59442,59165],{"class":134},[74,59444,55718],{"class":84},[74,59446,59447],{"class":134},"#f7f7f7",[74,59449,1252],{"class":84},[74,59451,59452],{"class":76,"line":14176},[74,59453,2149],{"class":84},[74,59455,59456,59458,59460],{"class":76,"line":14185},[74,59457,56698],{"class":84},[74,59459,5090],{"class":55581},[74,59461,55588],{"class":84},[74,59463,59464,59466,59468],{"class":76,"line":14191},[74,59465,56066],{"class":84},[74,59467,55615],{"class":55581},[74,59469,55588],{"class":84},[74,59471,59472],{"class":76,"line":14199},[74,59473,2363],{"emptyLinePlaceholder":2362},[74,59475,59476,59478,59480],{"class":76,"line":14204},[74,59477,996],{"class":84},[74,59479,56081],{"class":55581},[74,59481,55588],{"class":84},[74,59483,59484,59486,59488,59490,59492,59494],{"class":76,"line":20883},[74,59485,56425],{"class":84},[74,59487,55892],{"class":55581},[74,59489,57767],{"class":1925},[74,59491,131],{"class":84},[74,59493,57772],{"class":190},[74,59495,55588],{"class":84},[74,59497,59498,59500,59502,59504,59506,59509],{"class":76,"line":20889},[74,59499,55622],{"class":84},[74,59501,55892],{"class":55581},[74,59503,57767],{"class":1925},[74,59505,131],{"class":84},[74,59507,59508],{"class":190},"\"slider-wrapper\"",[74,59510,55588],{"class":84},[74,59512,59513,59516,59518,59521,59523,59526,59529,59531,59533],{"class":76,"line":20912},[74,59514,59515],{"class":84},"      \u003C",[74,59517,1424],{"class":55581},[74,59519,59520],{"class":1925}," src",[74,59522,131],{"class":84},[74,59524,59525],{"class":190},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[74,59527,59528],{"class":1925}," alt",[74,59530,131],{"class":84},[74,59532,11931],{"class":190},[74,59534,55588],{"class":84},[74,59536,59537,59539,59541],{"class":76,"line":20918},[74,59538,56057],{"class":84},[74,59540,55892],{"class":55581},[74,59542,55588],{"class":84},[74,59544,59545,59547,59549,59551,59553,59556],{"class":76,"line":20941},[74,59546,55622],{"class":84},[74,59548,55892],{"class":55581},[74,59550,57767],{"class":1925},[74,59552,131],{"class":84},[74,59554,59555],{"class":190},"\"slider-footer\"",[74,59557,55588],{"class":84},[74,59559,59560,59562,59564,59567,59569],{"class":76,"line":20955},[74,59561,59515],{"class":84},[74,59563,19],{"class":55581},[74,59565,59566],{"class":84},">对人类来说会不会太超前了?\u003C\u002F",[74,59568,19],{"class":55581},[74,59570,55588],{"class":84},[74,59572,59573,59575,59577],{"class":76,"line":20975},[74,59574,59515],{"class":84},[74,59576,1093],{"class":55581},[74,59578,55588],{"class":84},[74,59580,59581,59584,59586,59588,59590,59593,59596,59598],{"class":76,"line":20981},[74,59582,59583],{"class":84},"        \u003C",[74,59585,30],{"class":55581},[74,59587,57767],{"class":1925},[74,59589,131],{"class":84},[74,59591,59592],{"class":190},"\"activate\"",[74,59594,59595],{"class":84},">\u003C\u002F",[74,59597,30],{"class":55581},[74,59599,55588],{"class":84},[74,59601,59602,59604,59606,59608,59610],{"class":76,"line":20992},[74,59603,59583],{"class":84},[74,59605,30],{"class":55581},[74,59607,59595],{"class":84},[74,59609,30],{"class":55581},[74,59611,55588],{"class":84},[74,59613,59614,59616,59618,59620,59622],{"class":76,"line":21015},[74,59615,59583],{"class":84},[74,59617,30],{"class":55581},[74,59619,59595],{"class":84},[74,59621,30],{"class":55581},[74,59623,55588],{"class":84},[74,59625,59626,59628,59630,59632,59634],{"class":76,"line":21037},[74,59627,59583],{"class":84},[74,59629,30],{"class":55581},[74,59631,59595],{"class":84},[74,59633,30],{"class":55581},[74,59635,55588],{"class":84},[74,59637,59638,59640,59642,59644,59646],{"class":76,"line":21042},[74,59639,59583],{"class":84},[74,59641,30],{"class":55581},[74,59643,59595],{"class":84},[74,59645,30],{"class":55581},[74,59647,55588],{"class":84},[74,59649,59650,59652,59654,59656,59658],{"class":76,"line":21048},[74,59651,59583],{"class":84},[74,59653,30],{"class":55581},[74,59655,59595],{"class":84},[74,59657,30],{"class":55581},[74,59659,55588],{"class":84},[74,59661,59662,59664,59666,59668,59670],{"class":76,"line":21062},[74,59663,59583],{"class":84},[74,59665,30],{"class":55581},[74,59667,59595],{"class":84},[74,59669,30],{"class":55581},[74,59671,55588],{"class":84},[74,59673,59674,59676,59678,59680,59682],{"class":76,"line":21075},[74,59675,59583],{"class":84},[74,59677,30],{"class":55581},[74,59679,59595],{"class":84},[74,59681,30],{"class":55581},[74,59683,55588],{"class":84},[74,59685,59686,59689,59691],{"class":76,"line":21080},[74,59687,59688],{"class":84},"      \u003C\u002F",[74,59690,1093],{"class":55581},[74,59692,55588],{"class":84},[74,59694,59695,59697,59699],{"class":76,"line":21094},[74,59696,56057],{"class":84},[74,59698,55892],{"class":55581},[74,59700,55588],{"class":84},[74,59702,59703,59705,59707],{"class":76,"line":21099},[74,59704,56698],{"class":84},[74,59706,55892],{"class":55581},[74,59708,55588],{"class":84},[74,59710,59711,59713,59715],{"class":76,"line":21105},[74,59712,56425],{"class":84},[74,59714,56094],{"class":55581},[74,59716,55588],{"class":84},[74,59718,59719,59721,59724,59726],{"class":76,"line":21110},[74,59720,15500],{"class":80},[74,59722,59723],{"class":134}," arrImage",[74,59725,17843],{"class":80},[74,59727,59728],{"class":84}," [\n",[74,59730,59731,59734,59737,59740,59743,59746,59749],{"class":76,"line":21124},[74,59732,59733],{"class":84},"      { url: ",[74,59735,59736],{"class":190},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[74,59738,59739],{"class":84},", title: ",[74,59741,59742],{"class":190},"'对人类来说会不会太超前了?'",[74,59744,59745],{"class":84},", color: ",[74,59747,59748],{"class":190},"'rgba(100,67,68)'",[74,59750,59751],{"class":84}," },\n",[74,59753,59754,59756,59759,59761,59764,59766,59769],{"class":76,"line":21129},[74,59755,59733],{"class":84},[74,59757,59758],{"class":190},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[74,59760,59739],{"class":84},[74,59762,59763],{"class":190},"'开启剑与雪的黑暗传说!'",[74,59765,59745],{"class":84},[74,59767,59768],{"class":190},"'rgba(43,35,26)'",[74,59770,59751],{"class":84},[74,59772,59773,59775,59778,59780,59783,59785,59788],{"class":76,"line":21134},[74,59774,59733],{"class":84},[74,59776,59777],{"class":190},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[74,59779,59739],{"class":84},[74,59781,59782],{"class":190},"'真正的jo厨出现了!'",[74,59784,59745],{"class":84},[74,59786,59787],{"class":190},"'rgba(36,31,33)'",[74,59789,59751],{"class":84},[74,59791,59792,59794,59797,59799,59802,59804,59807],{"class":76,"line":21148},[74,59793,59733],{"class":84},[74,59795,59796],{"class":190},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[74,59798,59739],{"class":84},[74,59800,59801],{"class":190},"'李玉刚:让世界通过b站看到东方大国文化'",[74,59803,59745],{"class":84},[74,59805,59806],{"class":190},"'rgba(139,98,66)'",[74,59808,59751],{"class":84},[74,59810,59811,59813,59816,59818,59821,59823,59826],{"class":76,"line":21160},[74,59812,59733],{"class":84},[74,59814,59815],{"class":190},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[74,59817,59739],{"class":84},[74,59819,59820],{"class":190},"'快来分享你的寒假日常吧'",[74,59822,59745],{"class":84},[74,59824,59825],{"class":190},"'rgba(67,90,92)'",[74,59827,59751],{"class":84},[74,59829,59830,59832,59835,59837,59840,59842,59845],{"class":76,"line":21165},[74,59831,59733],{"class":84},[74,59833,59834],{"class":190},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[74,59836,59739],{"class":84},[74,59838,59839],{"class":190},"'哔哩哔哩小年YEAR'",[74,59841,59745],{"class":84},[74,59843,59844],{"class":190},"'rgba(166,131,143)'",[74,59846,59751],{"class":84},[74,59848,59849,59851,59854,59856,59859,59861,59864],{"class":76,"line":21178},[74,59850,59733],{"class":84},[74,59852,59853],{"class":190},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[74,59855,59739],{"class":84},[74,59857,59858],{"class":190},"'一站式解决你的电脑配置问题'",[74,59860,59745],{"class":84},[74,59862,59863],{"class":190},"'rgba(53,29,25)'",[74,59865,59751],{"class":84},[74,59867,59868,59870,59873,59875,59878,59880,59883],{"class":76,"line":21183},[74,59869,59733],{"class":84},[74,59871,59872],{"class":190},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[74,59874,59739],{"class":84},[74,59876,59877],{"class":190},"'谁不想和小猫咪贴贴呢?'",[74,59879,59745],{"class":84},[74,59881,59882],{"class":190},"'rgba(99,72,114)'",[74,59884,59885],{"class":84}," }\n",[74,59887,59888],{"class":76,"line":21188},[74,59889,57390],{"class":84},[74,59891,59892,59894,59897,59899,59901,59903,59905,59908],{"class":76,"line":21193},[74,59893,15500],{"class":80},[74,59895,59896],{"class":134}," img",[74,59898,17843],{"class":80},[74,59900,58677],{"class":84},[74,59902,58680],{"class":1925},[74,59904,85],{"class":84},[74,59906,59907],{"class":190},"'.slider-wrapper img'",[74,59909,91],{"class":84},[74,59911,59912,59914,59916,59918,59920,59922,59924,59927],{"class":76,"line":21206},[74,59913,15500],{"class":80},[74,59915,11104],{"class":134},[74,59917,17843],{"class":80},[74,59919,58677],{"class":84},[74,59921,58680],{"class":1925},[74,59923,85],{"class":84},[74,59925,59926],{"class":190},"'.slider-footer p'",[74,59928,91],{"class":84},[74,59930,59931,59933,59936,59938,59940,59942,59944,59947],{"class":76,"line":21211},[74,59932,15500],{"class":80},[74,59934,59935],{"class":134}," color",[74,59937,17843],{"class":80},[74,59939,58677],{"class":84},[74,59941,58680],{"class":1925},[74,59943,85],{"class":84},[74,59945,59946],{"class":190},"'.slider-footer'",[74,59948,91],{"class":84},[74,59950,59951,59953,59956,59958,59960,59963,59965,59968],{"class":76,"line":36914},[74,59952,15500],{"class":80},[74,59954,59955],{"class":134}," lis",[74,59957,17843],{"class":80},[74,59959,58677],{"class":84},[74,59961,59962],{"class":1925},"querySelectorAll",[74,59964,85],{"class":84},[74,59966,59967],{"class":190},"'.slider-footer ul li'",[74,59969,91],{"class":84},[74,59971,59972,59974,59976,59978],{"class":76,"line":36920},[74,59973,56500],{"class":80},[74,59975,13717],{"class":84},[74,59977,131],{"class":80},[74,59979,59980],{"class":134}," 1\n",[74,59982,59983,59985,59988,59990,59992,59994,59996],{"class":76,"line":36926},[74,59984,56500],{"class":80},[74,59986,59987],{"class":84}," timer ",[74,59989,131],{"class":80},[74,59991,58725],{"class":1925},[74,59993,85],{"class":84},[74,59995,58730],{"class":80},[74,59997,58733],{"class":84},[74,59999,60000,60003,60005],{"class":76,"line":36932},[74,60001,60002],{"class":84},"      img.src ",[74,60004,131],{"class":80},[74,60006,60007],{"class":84}," arrImage[i].url\n",[74,60009,60010,60013,60015],{"class":76,"line":36938},[74,60011,60012],{"class":84},"      p.innerHTML ",[74,60014,131],{"class":80},[74,60016,60017],{"class":84}," arrImage[i].title\n",[74,60019,60020,60023,60025],{"class":76,"line":36949},[74,60021,60022],{"class":84},"      color.style.backgroundColor ",[74,60024,131],{"class":80},[74,60026,60027],{"class":84}," arrImage[i].color\n",[74,60029,60030],{"class":76,"line":36955},[74,60031,60032],{"class":144},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[74,60034,60035],{"class":76,"line":36975},[74,60036,60037],{"class":144},"      \u002F\u002F li.classList.add('activate')\n",[74,60039,60040],{"class":76,"line":36981},[74,60041,60042],{"class":144},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[74,60044,60045],{"class":76,"line":36992},[74,60046,60047],{"class":144},"      \u002F\u002F lis[i].classList.remove('activate')\n",[74,60049,60050,60053,60055,60057,60060,60063,60066,60068,60071],{"class":76,"line":36998},[74,60051,60052],{"class":84},"      document.",[74,60054,58680],{"class":1925},[74,60056,85],{"class":84},[74,60058,60059],{"class":190},"'.activate'",[74,60061,60062],{"class":84},")?.classList.",[74,60064,60065],{"class":1925},"toggle",[74,60067,85],{"class":84},[74,60069,60070],{"class":190},"'activate'",[74,60072,91],{"class":84},[74,60074,60075,60078,60080,60082,60084],{"class":76,"line":37004},[74,60076,60077],{"class":84},"      lis[i].classList.",[74,60079,9613],{"class":1925},[74,60081,85],{"class":84},[74,60083,60070],{"class":190},[74,60085,91],{"class":84},[74,60087,60088],{"class":76,"line":37010},[74,60089,2363],{"emptyLinePlaceholder":2362},[74,60091,60092,60095,60097,60099,60101,60103,60105,60107,60110],{"class":76,"line":37016},[74,60093,60094],{"class":84},"      i ",[74,60096,131],{"class":80},[74,60098,58764],{"class":84},[74,60100,567],{"class":80},[74,60102,29399],{"class":134},[74,60104,17993],{"class":84},[74,60106,414],{"class":80},[74,60108,60109],{"class":84}," arrImage.",[74,60111,60112],{"class":134},"length\n",[74,60114,60115],{"class":76,"line":37022},[74,60116,2363],{"emptyLinePlaceholder":2362},[74,60118,60119,60121,60123],{"class":76,"line":37028},[74,60120,58816],{"class":84},[74,60122,10689],{"class":134},[74,60124,91],{"class":84},[74,60126,60127,60129,60131],{"class":76,"line":37034},[74,60128,56698],{"class":84},[74,60130,56094],{"class":55581},[74,60132,55588],{"class":84},[74,60134,60135,60137,60139],{"class":76,"line":37054},[74,60136,56066],{"class":84},[74,60138,56081],{"class":55581},[74,60140,55588],{"class":84},[74,60142,60143],{"class":76,"line":37060},[74,60144,2363],{"emptyLinePlaceholder":2362},[74,60146,60147,60149,60151],{"class":76,"line":37076},[74,60148,56066],{"class":84},[74,60150,54916],{"class":55581},[74,60152,55588],{"class":84},[19,60154,60155],{},[1424,60156],{"alt":69,"src":60157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,60159,60160],{},"?.就是短路保护,确保输出正常进行",[19,60162,60163],{},"不要忘记取余%,有时候可以用",[19,60165,60166],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[27,60168,60169],{"start":94},[30,60170,60171],{},"法2",[64,60173,60175],{"className":54914,"code":60174,"language":54916,"meta":69,"style":69},"\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",[71,60176,60177,60187,60201,60205,60213,60227,60247,60259,60267,60273,60283,60293,60297,60301,60307,60317,60321,60325,60331,60341,60353,60365,60379,60383,60387,60393,60403,60413,60423,60435,60447,60457,60461,60465,60473,60483,60495,60507,60519,60523,60527,60533,60543,60555,60567,60577,60587,60597,60609,60621,60625,60629,60637,60649,60661,60687,60699,60703,60707,60713,60723,60727,60735,60743,60747,60755,60769,60783,60803,60811,60825,60837,60845,60863,60875,60887,60899,60911,60923,60935,60947,60955,60963,60971,60979,60990,61006,61022,61038,61054,61070,61086,61102,61118,61122,61127,61145,61163,61173,61178,61183,61194,61200,61215,61224,61228,61233,61242,61247,61256,61261,61266,61271,61294,61324,61328,61336,61340,61348,61356,61360],{"__ignoreMap":69},[74,60178,60179,60181,60183,60185],{"class":76,"line":77},[74,60180,55578],{"class":84},[74,60182,55582],{"class":55581},[74,60184,55585],{"class":1925},[74,60186,55588],{"class":84},[74,60188,60189,60191,60193,60195,60197,60199],{"class":76,"line":94},[74,60190,996],{"class":84},[74,60192,54916],{"class":55581},[74,60194,55597],{"class":1925},[74,60196,131],{"class":84},[74,60198,55602],{"class":190},[74,60200,55588],{"class":84},[74,60202,60203],{"class":76,"line":1141},[74,60204,2363],{"emptyLinePlaceholder":2362},[74,60206,60207,60209,60211],{"class":76,"line":1156},[74,60208,996],{"class":84},[74,60210,55615],{"class":55581},[74,60212,55588],{"class":84},[74,60214,60215,60217,60219,60221,60223,60225],{"class":76,"line":1162},[74,60216,56425],{"class":84},[74,60218,55625],{"class":55581},[74,60220,55628],{"class":1925},[74,60222,131],{"class":84},[74,60224,55633],{"class":190},[74,60226,55588],{"class":84},[74,60228,60229,60231,60233,60235,60237,60239,60241,60243,60245],{"class":76,"line":1176},[74,60230,56425],{"class":84},[74,60232,55625],{"class":55581},[74,60234,19199],{"class":1925},[74,60236,131],{"class":84},[74,60238,55672],{"class":190},[74,60240,55652],{"class":1925},[74,60242,131],{"class":84},[74,60244,55679],{"class":190},[74,60246,55588],{"class":84},[74,60248,60249,60251,60253,60255,60257],{"class":76,"line":1182},[74,60250,56425],{"class":84},[74,60252,55688],{"class":55581},[74,60254,55691],{"class":84},[74,60256,55688],{"class":55581},[74,60258,55588],{"class":84},[74,60260,60261,60263,60265],{"class":76,"line":1273},[74,60262,56425],{"class":84},[74,60264,5090],{"class":55581},[74,60266,55588],{"class":84},[74,60268,60269,60271],{"class":76,"line":1279},[74,60270,10682],{"class":55581},[74,60272,19851],{"class":84},[74,60274,60275,60277,60279,60281],{"class":76,"line":1291},[74,60276,58976],{"class":134},[74,60278,55718],{"class":84},[74,60280,277],{"class":134},[74,60282,1252],{"class":84},[74,60284,60285,60287,60289,60291],{"class":76,"line":1574},[74,60286,58987],{"class":134},[74,60288,55718],{"class":84},[74,60290,277],{"class":134},[74,60292,1252],{"class":84},[74,60294,60295],{"class":76,"line":1579},[74,60296,2149],{"class":84},[74,60298,60299],{"class":76,"line":1585},[74,60300,2363],{"emptyLinePlaceholder":2362},[74,60302,60303,60305],{"class":76,"line":1590},[74,60304,59006],{"class":55581},[74,60306,19851],{"class":84},[74,60308,60309,60311,60313,60315],{"class":76,"line":1604},[74,60310,59013],{"class":134},[74,60312,55718],{"class":84},[74,60314,59018],{"class":134},[74,60316,1252],{"class":84},[74,60318,60319],{"class":76,"line":1609},[74,60320,2149],{"class":84},[74,60322,60323],{"class":76,"line":1615},[74,60324,2363],{"emptyLinePlaceholder":2362},[74,60326,60327,60329],{"class":76,"line":1636},[74,60328,59033],{"class":1925},[74,60330,19851],{"class":84},[74,60332,60333,60335,60337,60339],{"class":76,"line":1641},[74,60334,59040],{"class":134},[74,60336,55718],{"class":84},[74,60338,59045],{"class":134},[74,60340,1252],{"class":84},[74,60342,60343,60345,60347,60349,60351],{"class":76,"line":1655},[74,60344,59052],{"class":134},[74,60346,55718],{"class":84},[74,60348,59057],{"class":134},[74,60350,55773],{"class":80},[74,60352,1252],{"class":84},[74,60354,60355,60357,60359,60361,60363],{"class":76,"line":1660},[74,60356,59066],{"class":134},[74,60358,55718],{"class":84},[74,60360,1501],{"class":134},[74,60362,55773],{"class":80},[74,60364,1252],{"class":84},[74,60366,60367,60369,60371,60373,60375,60377],{"class":76,"line":1689},[74,60368,58987],{"class":134},[74,60370,55718],{"class":84},[74,60372,397],{"class":134},[74,60374,55773],{"class":80},[74,60376,55837],{"class":134},[74,60378,1252],{"class":84},[74,60380,60381],{"class":76,"line":1694},[74,60382,2149],{"class":84},[74,60384,60385],{"class":76,"line":1711},[74,60386,2363],{"emptyLinePlaceholder":2362},[74,60388,60389,60391],{"class":76,"line":1716},[74,60390,59101],{"class":1925},[74,60392,19851],{"class":84},[74,60394,60395,60397,60399,60401],{"class":76,"line":1721},[74,60396,59040],{"class":134},[74,60398,55718],{"class":84},[74,60400,59112],{"class":134},[74,60402,1252],{"class":84},[74,60404,60405,60407,60409,60411],{"class":76,"line":1726},[74,60406,59119],{"class":134},[74,60408,55718],{"class":84},[74,60410,277],{"class":134},[74,60412,1252],{"class":84},[74,60414,60415,60417,60419,60421],{"class":76,"line":1740},[74,60416,59130],{"class":134},[74,60418,55718],{"class":84},[74,60420,277],{"class":134},[74,60422,1252],{"class":84},[74,60424,60425,60427,60429,60431,60433],{"class":76,"line":1745},[74,60426,59052],{"class":134},[74,60428,55718],{"class":84},[74,60430,397],{"class":134},[74,60432,414],{"class":80},[74,60434,1252],{"class":84},[74,60436,60437,60439,60441,60443,60445],{"class":76,"line":2540},[74,60438,59066],{"class":134},[74,60440,55718],{"class":84},[74,60442,661],{"class":134},[74,60444,414],{"class":80},[74,60446,1252],{"class":84},[74,60448,60449,60451,60453,60455],{"class":76,"line":2554},[74,60450,59165],{"class":134},[74,60452,55718],{"class":84},[74,60454,59170],{"class":134},[74,60456,1252],{"class":84},[74,60458,60459],{"class":76,"line":2562},[74,60460,2149],{"class":84},[74,60462,60463],{"class":76,"line":2567},[74,60464,2363],{"emptyLinePlaceholder":2362},[74,60466,60467,60469,60471],{"class":76,"line":2573},[74,60468,59101],{"class":1925},[74,60470,11104],{"class":55581},[74,60472,19851],{"class":84},[74,60474,60475,60477,60479,60481],{"class":76,"line":2579},[74,60476,59040],{"class":134},[74,60478,55718],{"class":84},[74,60480,59112],{"class":134},[74,60482,1252],{"class":84},[74,60484,60485,60487,60489,60491,60493],{"class":76,"line":2584},[74,60486,59203],{"class":134},[74,60488,55718],{"class":84},[74,60490,987],{"class":134},[74,60492,55773],{"class":80},[74,60494,1252],{"class":84},[74,60496,60497,60499,60501,60503,60505],{"class":76,"line":12227},[74,60498,59119],{"class":134},[74,60500,55718],{"class":84},[74,60502,786],{"class":134},[74,60504,55773],{"class":80},[74,60506,1252],{"class":84},[74,60508,60509,60511,60513,60515,60517],{"class":76,"line":12251},[74,60510,59228],{"class":134},[74,60512,55718],{"class":84},[74,60514,405],{"class":134},[74,60516,55773],{"class":80},[74,60518,1252],{"class":84},[74,60520,60521],{"class":76,"line":12256},[74,60522,2149],{"class":84},[74,60524,60525],{"class":76,"line":12262},[74,60526,2363],{"emptyLinePlaceholder":2362},[74,60528,60529,60531],{"class":76,"line":12289},[74,60530,59249],{"class":55581},[74,60532,19851],{"class":84},[74,60534,60535,60537,60539,60541],{"class":76,"line":12294},[74,60536,59040],{"class":134},[74,60538,55718],{"class":84},[74,60540,59112],{"class":134},[74,60542,1252],{"class":84},[74,60544,60545,60547,60549,60551,60553],{"class":76,"line":12300},[74,60546,59228],{"class":134},[74,60548,55718],{"class":84},[74,60550,867],{"class":134},[74,60552,55773],{"class":80},[74,60554,1252],{"class":84},[74,60556,60557,60559,60561,60563,60565],{"class":76,"line":12312},[74,60558,59119],{"class":134},[74,60560,55718],{"class":84},[74,60562,786],{"class":134},[74,60564,55773],{"class":80},[74,60566,1252],{"class":84},[74,60568,60569,60571,60573,60575],{"class":76,"line":12324},[74,60570,59290],{"class":134},[74,60572,55718],{"class":84},[74,60574,55758],{"class":134},[74,60576,1252],{"class":84},[74,60578,60579,60581,60583,60585],{"class":76,"line":12336},[74,60580,59301],{"class":134},[74,60582,55718],{"class":84},[74,60584,55949],{"class":134},[74,60586,1252],{"class":84},[74,60588,60589,60591,60593,60595],{"class":76,"line":13995},[74,60590,59040],{"class":134},[74,60592,55718],{"class":84},[74,60594,59112],{"class":134},[74,60596,1252],{"class":84},[74,60598,60599,60601,60603,60605,60607],{"class":76,"line":14020},[74,60600,59052],{"class":134},[74,60602,55718],{"class":84},[74,60604,3955],{"class":134},[74,60606,55773],{"class":80},[74,60608,1252],{"class":84},[74,60610,60611,60613,60615,60617,60619],{"class":76,"line":14043},[74,60612,59066],{"class":134},[74,60614,55718],{"class":84},[74,60616,786],{"class":134},[74,60618,55773],{"class":80},[74,60620,1252],{"class":84},[74,60622,60623],{"class":76,"line":14067},[74,60624,2149],{"class":84},[74,60626,60627],{"class":76,"line":14072},[74,60628,2363],{"emptyLinePlaceholder":2362},[74,60630,60631,60633,60635],{"class":76,"line":14077},[74,60632,59249],{"class":55581},[74,60634,59356],{"class":55581},[74,60636,19851],{"class":84},[74,60638,60639,60641,60643,60645,60647],{"class":76,"line":14082},[74,60640,59052],{"class":134},[74,60642,55718],{"class":84},[74,60644,786],{"class":134},[74,60646,55773],{"class":80},[74,60648,1252],{"class":84},[74,60650,60651,60653,60655,60657,60659],{"class":76,"line":14091},[74,60652,59066],{"class":134},[74,60654,55718],{"class":84},[74,60656,786],{"class":134},[74,60658,55773],{"class":80},[74,60660,1252],{"class":84},[74,60662,60663,60665,60667,60669,60671,60673,60675,60677,60679,60681,60683,60685],{"class":76,"line":14096},[74,60664,59165],{"class":134},[74,60666,55718],{"class":84},[74,60668,59391],{"class":134},[74,60670,85],{"class":84},[74,60672,277],{"class":134},[74,60674,16714],{"class":84},[74,60676,277],{"class":134},[74,60678,16714],{"class":84},[74,60680,277],{"class":134},[74,60682,16714],{"class":84},[74,60684,59408],{"class":134},[74,60686,2682],{"class":84},[74,60688,60689,60691,60693,60695,60697],{"class":76,"line":14102},[74,60690,59415],{"class":134},[74,60692,55718],{"class":84},[74,60694,532],{"class":134},[74,60696,55773],{"class":80},[74,60698,1252],{"class":84},[74,60700,60701],{"class":76,"line":14123},[74,60702,2149],{"class":84},[74,60704,60705],{"class":76,"line":14129},[74,60706,2363],{"emptyLinePlaceholder":2362},[74,60708,60709,60711],{"class":76,"line":14143},[74,60710,59436],{"class":1925},[74,60712,19851],{"class":84},[74,60714,60715,60717,60719,60721],{"class":76,"line":14149},[74,60716,59165],{"class":134},[74,60718,55718],{"class":84},[74,60720,59447],{"class":134},[74,60722,1252],{"class":84},[74,60724,60725],{"class":76,"line":14176},[74,60726,2149],{"class":84},[74,60728,60729,60731,60733],{"class":76,"line":14185},[74,60730,56698],{"class":84},[74,60732,5090],{"class":55581},[74,60734,55588],{"class":84},[74,60736,60737,60739,60741],{"class":76,"line":14191},[74,60738,56066],{"class":84},[74,60740,55615],{"class":55581},[74,60742,55588],{"class":84},[74,60744,60745],{"class":76,"line":14199},[74,60746,2363],{"emptyLinePlaceholder":2362},[74,60748,60749,60751,60753],{"class":76,"line":14204},[74,60750,996],{"class":84},[74,60752,56081],{"class":55581},[74,60754,55588],{"class":84},[74,60756,60757,60759,60761,60763,60765,60767],{"class":76,"line":20883},[74,60758,56425],{"class":84},[74,60760,55892],{"class":55581},[74,60762,57767],{"class":1925},[74,60764,131],{"class":84},[74,60766,57772],{"class":190},[74,60768,55588],{"class":84},[74,60770,60771,60773,60775,60777,60779,60781],{"class":76,"line":20889},[74,60772,55622],{"class":84},[74,60774,55892],{"class":55581},[74,60776,57767],{"class":1925},[74,60778,131],{"class":84},[74,60780,59508],{"class":190},[74,60782,55588],{"class":84},[74,60784,60785,60787,60789,60791,60793,60795,60797,60799,60801],{"class":76,"line":20912},[74,60786,59515],{"class":84},[74,60788,1424],{"class":55581},[74,60790,59520],{"class":1925},[74,60792,131],{"class":84},[74,60794,59525],{"class":190},[74,60796,59528],{"class":1925},[74,60798,131],{"class":84},[74,60800,11931],{"class":190},[74,60802,55588],{"class":84},[74,60804,60805,60807,60809],{"class":76,"line":20918},[74,60806,56057],{"class":84},[74,60808,55892],{"class":55581},[74,60810,55588],{"class":84},[74,60812,60813,60815,60817,60819,60821,60823],{"class":76,"line":20941},[74,60814,55622],{"class":84},[74,60816,55892],{"class":55581},[74,60818,57767],{"class":1925},[74,60820,131],{"class":84},[74,60822,59555],{"class":190},[74,60824,55588],{"class":84},[74,60826,60827,60829,60831,60833,60835],{"class":76,"line":20955},[74,60828,59515],{"class":84},[74,60830,19],{"class":55581},[74,60832,59566],{"class":84},[74,60834,19],{"class":55581},[74,60836,55588],{"class":84},[74,60838,60839,60841,60843],{"class":76,"line":20975},[74,60840,59515],{"class":84},[74,60842,1093],{"class":55581},[74,60844,55588],{"class":84},[74,60846,60847,60849,60851,60853,60855,60857,60859,60861],{"class":76,"line":20981},[74,60848,59583],{"class":84},[74,60850,30],{"class":55581},[74,60852,57767],{"class":1925},[74,60854,131],{"class":84},[74,60856,59592],{"class":190},[74,60858,59595],{"class":84},[74,60860,30],{"class":55581},[74,60862,55588],{"class":84},[74,60864,60865,60867,60869,60871,60873],{"class":76,"line":20992},[74,60866,59583],{"class":84},[74,60868,30],{"class":55581},[74,60870,59595],{"class":84},[74,60872,30],{"class":55581},[74,60874,55588],{"class":84},[74,60876,60877,60879,60881,60883,60885],{"class":76,"line":21015},[74,60878,59583],{"class":84},[74,60880,30],{"class":55581},[74,60882,59595],{"class":84},[74,60884,30],{"class":55581},[74,60886,55588],{"class":84},[74,60888,60889,60891,60893,60895,60897],{"class":76,"line":21037},[74,60890,59583],{"class":84},[74,60892,30],{"class":55581},[74,60894,59595],{"class":84},[74,60896,30],{"class":55581},[74,60898,55588],{"class":84},[74,60900,60901,60903,60905,60907,60909],{"class":76,"line":21042},[74,60902,59583],{"class":84},[74,60904,30],{"class":55581},[74,60906,59595],{"class":84},[74,60908,30],{"class":55581},[74,60910,55588],{"class":84},[74,60912,60913,60915,60917,60919,60921],{"class":76,"line":21048},[74,60914,59583],{"class":84},[74,60916,30],{"class":55581},[74,60918,59595],{"class":84},[74,60920,30],{"class":55581},[74,60922,55588],{"class":84},[74,60924,60925,60927,60929,60931,60933],{"class":76,"line":21062},[74,60926,59583],{"class":84},[74,60928,30],{"class":55581},[74,60930,59595],{"class":84},[74,60932,30],{"class":55581},[74,60934,55588],{"class":84},[74,60936,60937,60939,60941,60943,60945],{"class":76,"line":21075},[74,60938,59583],{"class":84},[74,60940,30],{"class":55581},[74,60942,59595],{"class":84},[74,60944,30],{"class":55581},[74,60946,55588],{"class":84},[74,60948,60949,60951,60953],{"class":76,"line":21080},[74,60950,59688],{"class":84},[74,60952,1093],{"class":55581},[74,60954,55588],{"class":84},[74,60956,60957,60959,60961],{"class":76,"line":21094},[74,60958,56057],{"class":84},[74,60960,55892],{"class":55581},[74,60962,55588],{"class":84},[74,60964,60965,60967,60969],{"class":76,"line":21099},[74,60966,56698],{"class":84},[74,60968,55892],{"class":55581},[74,60970,55588],{"class":84},[74,60972,60973,60975,60977],{"class":76,"line":21105},[74,60974,56425],{"class":84},[74,60976,56094],{"class":55581},[74,60978,55588],{"class":84},[74,60980,60981,60983,60986,60988],{"class":76,"line":21110},[74,60982,15500],{"class":80},[74,60984,60985],{"class":134}," sliderData",[74,60987,17843],{"class":80},[74,60989,59728],{"class":84},[74,60991,60992,60994,60996,60998,61000,61002,61004],{"class":76,"line":21124},[74,60993,59733],{"class":84},[74,60995,59736],{"class":190},[74,60997,59739],{"class":84},[74,60999,59742],{"class":190},[74,61001,59745],{"class":84},[74,61003,59748],{"class":190},[74,61005,59751],{"class":84},[74,61007,61008,61010,61012,61014,61016,61018,61020],{"class":76,"line":21129},[74,61009,59733],{"class":84},[74,61011,59758],{"class":190},[74,61013,59739],{"class":84},[74,61015,59763],{"class":190},[74,61017,59745],{"class":84},[74,61019,59768],{"class":190},[74,61021,59751],{"class":84},[74,61023,61024,61026,61028,61030,61032,61034,61036],{"class":76,"line":21134},[74,61025,59733],{"class":84},[74,61027,59777],{"class":190},[74,61029,59739],{"class":84},[74,61031,59782],{"class":190},[74,61033,59745],{"class":84},[74,61035,59787],{"class":190},[74,61037,59751],{"class":84},[74,61039,61040,61042,61044,61046,61048,61050,61052],{"class":76,"line":21148},[74,61041,59733],{"class":84},[74,61043,59796],{"class":190},[74,61045,59739],{"class":84},[74,61047,59801],{"class":190},[74,61049,59745],{"class":84},[74,61051,59806],{"class":190},[74,61053,59751],{"class":84},[74,61055,61056,61058,61060,61062,61064,61066,61068],{"class":76,"line":21160},[74,61057,59733],{"class":84},[74,61059,59815],{"class":190},[74,61061,59739],{"class":84},[74,61063,59820],{"class":190},[74,61065,59745],{"class":84},[74,61067,59825],{"class":190},[74,61069,59751],{"class":84},[74,61071,61072,61074,61076,61078,61080,61082,61084],{"class":76,"line":21165},[74,61073,59733],{"class":84},[74,61075,59834],{"class":190},[74,61077,59739],{"class":84},[74,61079,59839],{"class":190},[74,61081,59745],{"class":84},[74,61083,59844],{"class":190},[74,61085,59751],{"class":84},[74,61087,61088,61090,61092,61094,61096,61098,61100],{"class":76,"line":21178},[74,61089,59733],{"class":84},[74,61091,59853],{"class":190},[74,61093,59739],{"class":84},[74,61095,59858],{"class":190},[74,61097,59745],{"class":84},[74,61099,59863],{"class":190},[74,61101,59751],{"class":84},[74,61103,61104,61106,61108,61110,61112,61114,61116],{"class":76,"line":21183},[74,61105,59733],{"class":84},[74,61107,59872],{"class":190},[74,61109,59739],{"class":84},[74,61111,59877],{"class":190},[74,61113,59745],{"class":84},[74,61115,59882],{"class":190},[74,61117,59885],{"class":84},[74,61119,61120],{"class":76,"line":21188},[74,61121,57390],{"class":84},[74,61123,61124],{"class":76,"line":21193},[74,61125,61126],{"class":144},"    \u002F\u002F 1.获取元素\n",[74,61128,61129,61131,61133,61135,61137,61139,61141,61143],{"class":76,"line":21206},[74,61130,15500],{"class":80},[74,61132,59896],{"class":134},[74,61134,17843],{"class":80},[74,61136,58677],{"class":84},[74,61138,58680],{"class":1925},[74,61140,85],{"class":84},[74,61142,59907],{"class":190},[74,61144,91],{"class":84},[74,61146,61147,61149,61151,61153,61155,61157,61159,61161],{"class":76,"line":21211},[74,61148,15500],{"class":80},[74,61150,11104],{"class":134},[74,61152,17843],{"class":80},[74,61154,58677],{"class":84},[74,61156,58680],{"class":1925},[74,61158,85],{"class":84},[74,61160,59926],{"class":190},[74,61162,91],{"class":84},[74,61164,61165,61167,61169,61171],{"class":76,"line":36914},[74,61166,56500],{"class":80},[74,61168,13717],{"class":84},[74,61170,131],{"class":80},[74,61172,51614],{"class":134},[74,61174,61175],{"class":76,"line":36920},[74,61176,61177],{"class":144},"    \u002F\u002F 2.开启定时器\n",[74,61179,61180],{"class":76,"line":36926},[74,61181,61182],{"class":144},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[74,61184,61185,61188,61190,61192],{"class":76,"line":36932},[74,61186,61187],{"class":1925},"    setInterval",[74,61189,85],{"class":84},[74,61191,58730],{"class":80},[74,61193,58733],{"class":84},[74,61195,61196,61198],{"class":76,"line":36938},[74,61197,58738],{"class":84},[74,61199,2665],{"class":80},[74,61201,61202,61204,61206,61208,61211,61213],{"class":76,"line":36949},[74,61203,58761],{"class":80},[74,61205,58764],{"class":84},[74,61207,1672],{"class":80},[74,61209,61210],{"class":84}," sliderData.",[74,61212,56249],{"class":134},[74,61214,16721],{"class":84},[74,61216,61217,61220,61222],{"class":76,"line":36955},[74,61218,61219],{"class":84},"        i ",[74,61221,131],{"class":80},[74,61223,51614],{"class":134},[74,61225,61226],{"class":76,"line":36975},[74,61227,56679],{"class":84},[74,61229,61230],{"class":76,"line":36981},[74,61231,61232],{"class":144},"      \u002F\u002F 更换图片路径\n",[74,61234,61235,61237,61239],{"class":76,"line":36992},[74,61236,60002],{"class":84},[74,61238,131],{"class":80},[74,61240,61241],{"class":84}," sliderData[i].url\n",[74,61243,61244],{"class":76,"line":36998},[74,61245,61246],{"class":144},"      \u002F\u002F 把文字写到p里面\n",[74,61248,61249,61251,61253],{"class":76,"line":37004},[74,61250,60012],{"class":84},[74,61252,131],{"class":80},[74,61254,61255],{"class":84}," sliderData[i].title\n",[74,61257,61258],{"class":76,"line":37010},[74,61259,61260],{"class":144},"      \u002F\u002F 小圆点\n",[74,61262,61263],{"class":76,"line":37016},[74,61264,61265],{"class":144},"      \u002F\u002F 先删除以前的active\n",[74,61267,61268],{"class":76,"line":37022},[74,61269,61270],{"class":144},"      \u002F\u002F 只让当前li添加active\n",[74,61272,61273,61275,61277,61279,61282,61285,61288,61290,61292],{"class":76,"line":37028},[74,61274,60052],{"class":84},[74,61276,58680],{"class":1925},[74,61278,85],{"class":84},[74,61280,61281],{"class":190},"'.slider-footer .activate'",[74,61283,61284],{"class":84},").classList.",[74,61286,61287],{"class":1925},"remove",[74,61289,85],{"class":84},[74,61291,60070],{"class":190},[74,61293,91],{"class":84},[74,61295,61296,61298,61300,61302,61305,61307,61309,61311,61314,61316,61318,61320,61322],{"class":76,"line":37034},[74,61297,60052],{"class":84},[74,61299,58680],{"class":1925},[74,61301,85],{"class":84},[74,61303,61304],{"class":190},"`.slider-footer ul li:nth-child(${",[74,61306,527],{"class":84},[74,61308,49847],{"class":80},[74,61310,29399],{"class":134},[74,61312,61313],{"class":190},"})`",[74,61315,61284],{"class":84},[74,61317,9613],{"class":1925},[74,61319,85],{"class":84},[74,61321,60070],{"class":190},[74,61323,91],{"class":84},[74,61325,61326],{"class":76,"line":37054},[74,61327,2363],{"emptyLinePlaceholder":2362},[74,61329,61330,61332,61334],{"class":76,"line":37060},[74,61331,58816],{"class":84},[74,61333,10689],{"class":134},[74,61335,91],{"class":84},[74,61337,61338],{"class":76,"line":37076},[74,61339,2363],{"emptyLinePlaceholder":2362},[74,61341,61342,61344,61346],{"class":76,"line":37082},[74,61343,56698],{"class":84},[74,61345,56094],{"class":55581},[74,61347,55588],{"class":84},[74,61349,61350,61352,61354],{"class":76,"line":37096},[74,61351,56066],{"class":84},[74,61353,56081],{"class":55581},[74,61355,55588],{"class":84},[74,61357,61358],{"class":76,"line":37102},[74,61359,2363],{"emptyLinePlaceholder":2362},[74,61361,61362,61364,61366],{"class":76,"line":37117},[74,61363,56066],{"class":84},[74,61365,54916],{"class":55581},[74,61367,55588],{"class":84},[44,61369,61371],{"id":61370},"_317-重要知识点","3.1.7 重要知识点",[19,61373,61374,61375],{},"浏览器在渲染文本时， ",[235,61376,61377],{},"没有空格或换行符就没有“断行点”",[19,61379,61380],{},[1424,61381],{"alt":69,"src":61382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,61384,61385],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,61387,61388],{},[1424,61389],{"alt":69,"src":61390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,61392,61393],{},[1424,61394],{"alt":69,"src":61395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,61397,61399],{"id":61398},"_32-dom事件基础","3.2 DOM事件基础",[44,61401,61403],{"id":61402},"_321-事件监听","3.2.1 事件监听",[19,61405,61406],{},[1424,61407],{"alt":69,"src":61408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,61410,61411],{},"事件监听有响应的发生",[19,61413,61414],{},[1424,61415],{"alt":69,"src":61416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,61418,61419],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,61421,61422],{},"对于有名函数,要执行的函数名后边不要加()",[44,61424,61426],{"id":61425},"_322-随机点名案例","3.2.2 随机点名案例",[64,61428,61430],{"className":54914,"code":61429,"language":54916,"meta":69,"style":69},"\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",[71,61431,61432,61442,61456,61460,61468,61482,61502,61514,61522,61528,61538,61548,61552,61556,61563,61574,61578,61582,61588,61600,61614,61624,61636,61649,61653,61657,61664,61668,61681,61693,61705,61709,61713,61717,61724,61734,61738,61742,61751,61763,61775,61790,61794,61802,61810,61814,61822,61835,61849,61862,61882,61890,61905,61925,61945,61953,61957,61965,61970,62006,62026,62031,62050,62055,62066,62071,62082,62087,62106,62121,62126,62152,62162,62171,62176,62192,62197,62202,62207,62222,62226,62230,62235,62254,62271,62279,62284,62299,62303,62307,62315,62323,62327],{"__ignoreMap":69},[74,61433,61434,61436,61438,61440],{"class":76,"line":77},[74,61435,55578],{"class":84},[74,61437,55582],{"class":55581},[74,61439,55585],{"class":1925},[74,61441,55588],{"class":84},[74,61443,61444,61446,61448,61450,61452,61454],{"class":76,"line":94},[74,61445,996],{"class":84},[74,61447,54916],{"class":55581},[74,61449,55597],{"class":1925},[74,61451,131],{"class":84},[74,61453,55602],{"class":190},[74,61455,55588],{"class":84},[74,61457,61458],{"class":76,"line":1141},[74,61459,2363],{"emptyLinePlaceholder":2362},[74,61461,61462,61464,61466],{"class":76,"line":1156},[74,61463,996],{"class":84},[74,61465,55615],{"class":55581},[74,61467,55588],{"class":84},[74,61469,61470,61472,61474,61476,61478,61480],{"class":76,"line":1162},[74,61471,56425],{"class":84},[74,61473,55625],{"class":55581},[74,61475,55628],{"class":1925},[74,61477,131],{"class":84},[74,61479,55633],{"class":190},[74,61481,55588],{"class":84},[74,61483,61484,61486,61488,61490,61492,61494,61496,61498,61500],{"class":76,"line":1176},[74,61485,56425],{"class":84},[74,61487,55625],{"class":55581},[74,61489,19199],{"class":1925},[74,61491,131],{"class":84},[74,61493,55672],{"class":190},[74,61495,55652],{"class":1925},[74,61497,131],{"class":84},[74,61499,55679],{"class":190},[74,61501,55588],{"class":84},[74,61503,61504,61506,61508,61510,61512],{"class":76,"line":1182},[74,61505,56425],{"class":84},[74,61507,55688],{"class":55581},[74,61509,55691],{"class":84},[74,61511,55688],{"class":55581},[74,61513,55588],{"class":84},[74,61515,61516,61518,61520],{"class":76,"line":1273},[74,61517,56425],{"class":84},[74,61519,5090],{"class":55581},[74,61521,55588],{"class":84},[74,61523,61524,61526],{"class":76,"line":1279},[74,61525,10682],{"class":55581},[74,61527,19851],{"class":84},[74,61529,61530,61532,61534,61536],{"class":76,"line":1291},[74,61531,58987],{"class":134},[74,61533,55718],{"class":84},[74,61535,277],{"class":134},[74,61537,1252],{"class":84},[74,61539,61540,61542,61544,61546],{"class":76,"line":1574},[74,61541,58976],{"class":134},[74,61543,55718],{"class":84},[74,61545,277],{"class":134},[74,61547,1252],{"class":84},[74,61549,61550],{"class":76,"line":1579},[74,61551,2149],{"class":84},[74,61553,61554],{"class":76,"line":1585},[74,61555,2363],{"emptyLinePlaceholder":2362},[74,61557,61558,61561],{"class":76,"line":1590},[74,61559,61560],{"class":55581},"    h2",[74,61562,19851],{"class":84},[74,61564,61565,61568,61570,61572],{"class":76,"line":1604},[74,61566,61567],{"class":134},"      text-align",[74,61569,55718],{"class":84},[74,61571,55873],{"class":134},[74,61573,1252],{"class":84},[74,61575,61576],{"class":76,"line":1609},[74,61577,2149],{"class":84},[74,61579,61580],{"class":76,"line":1615},[74,61581,2363],{"emptyLinePlaceholder":2362},[74,61583,61584,61586],{"class":76,"line":1636},[74,61585,59033],{"class":1925},[74,61587,19851],{"class":84},[74,61589,61590,61592,61594,61596,61598],{"class":76,"line":1641},[74,61591,59052],{"class":134},[74,61593,55718],{"class":84},[74,61595,1501],{"class":134},[74,61597,55773],{"class":80},[74,61599,1252],{"class":84},[74,61601,61602,61604,61606,61608,61610,61612],{"class":76,"line":1655},[74,61603,58987],{"class":134},[74,61605,55718],{"class":84},[74,61607,742],{"class":134},[74,61609,55773],{"class":80},[74,61611,55837],{"class":134},[74,61613,1252],{"class":84},[74,61615,61616,61618,61620,61622],{"class":76,"line":1660},[74,61617,59290],{"class":134},[74,61619,55718],{"class":84},[74,61621,55758],{"class":134},[74,61623,1252],{"class":84},[74,61625,61626,61628,61630,61632,61634],{"class":76,"line":1689},[74,61627,59203],{"class":134},[74,61629,55718],{"class":84},[74,61631,911],{"class":134},[74,61633,55773],{"class":80},[74,61635,1252],{"class":84},[74,61637,61638,61641,61643,61645,61647],{"class":76,"line":1694},[74,61639,61640],{"class":134},"      line-height",[74,61642,55718],{"class":84},[74,61644,487],{"class":134},[74,61646,55773],{"class":80},[74,61648,1252],{"class":84},[74,61650,61651],{"class":76,"line":1711},[74,61652,2149],{"class":84},[74,61654,61655],{"class":76,"line":1716},[74,61656,2363],{"emptyLinePlaceholder":2362},[74,61658,61659,61662],{"class":76,"line":1721},[74,61660,61661],{"class":1925},"    .qs",[74,61663,19851],{"class":84},[74,61665,61666],{"class":76,"line":1726},[74,61667,2363],{"emptyLinePlaceholder":2362},[74,61669,61670,61672,61674,61677,61679],{"class":76,"line":1740},[74,61671,59052],{"class":134},[74,61673,55718],{"class":84},[74,61675,61676],{"class":134},"450",[74,61678,55773],{"class":80},[74,61680,1252],{"class":84},[74,61682,61683,61685,61687,61689,61691],{"class":76,"line":1745},[74,61684,59066],{"class":134},[74,61686,55718],{"class":84},[74,61688,487],{"class":134},[74,61690,55773],{"class":80},[74,61692,1252],{"class":84},[74,61694,61695,61698,61700,61703],{"class":76,"line":2540},[74,61696,61697],{"class":134},"      color",[74,61699,55718],{"class":84},[74,61701,61702],{"class":134},"red",[74,61704,1252],{"class":84},[74,61706,61707],{"class":76,"line":2554},[74,61708,2363],{"emptyLinePlaceholder":2362},[74,61710,61711],{"class":76,"line":2562},[74,61712,2149],{"class":84},[74,61714,61715],{"class":76,"line":2567},[74,61716,2363],{"emptyLinePlaceholder":2362},[74,61718,61719,61722],{"class":76,"line":2573},[74,61720,61721],{"class":1925},"    .btns",[74,61723,19851],{"class":84},[74,61725,61726,61728,61730,61732],{"class":76,"line":2579},[74,61727,61567],{"class":134},[74,61729,55718],{"class":84},[74,61731,55873],{"class":134},[74,61733,1252],{"class":84},[74,61735,61736],{"class":76,"line":2584},[74,61737,2149],{"class":84},[74,61739,61740],{"class":76,"line":12227},[74,61741,2363],{"emptyLinePlaceholder":2362},[74,61743,61744,61746,61749],{"class":76,"line":12251},[74,61745,61721],{"class":1925},[74,61747,61748],{"class":55581}," button",[74,61750,19851],{"class":84},[74,61752,61753,61755,61757,61759,61761],{"class":76,"line":12256},[74,61754,59052],{"class":134},[74,61756,55718],{"class":84},[74,61758,903],{"class":134},[74,61760,55773],{"class":80},[74,61762,1252],{"class":84},[74,61764,61765,61767,61769,61771,61773],{"class":76,"line":12262},[74,61766,59066],{"class":134},[74,61768,55718],{"class":84},[74,61770,359],{"class":134},[74,61772,55773],{"class":80},[74,61774,1252],{"class":84},[74,61776,61777,61779,61781,61783,61786,61788],{"class":76,"line":12289},[74,61778,58987],{"class":134},[74,61780,55718],{"class":84},[74,61782,277],{"class":134},[74,61784,61785],{"class":134}," 50",[74,61787,55773],{"class":80},[74,61789,1252],{"class":84},[74,61791,61792],{"class":76,"line":12294},[74,61793,2149],{"class":84},[74,61795,61796,61798,61800],{"class":76,"line":12300},[74,61797,56698],{"class":84},[74,61799,5090],{"class":55581},[74,61801,55588],{"class":84},[74,61803,61804,61806,61808],{"class":76,"line":12312},[74,61805,56066],{"class":84},[74,61807,55615],{"class":55581},[74,61809,55588],{"class":84},[74,61811,61812],{"class":76,"line":12324},[74,61813,2363],{"emptyLinePlaceholder":2362},[74,61815,61816,61818,61820],{"class":76,"line":12336},[74,61817,996],{"class":84},[74,61819,56081],{"class":55581},[74,61821,55588],{"class":84},[74,61823,61824,61826,61828,61831,61833],{"class":76,"line":13995},[74,61825,56425],{"class":84},[74,61827,14],{"class":55581},[74,61829,61830],{"class":84},">随机点名\u003C\u002F",[74,61832,14],{"class":55581},[74,61834,55588],{"class":84},[74,61836,61837,61839,61841,61843,61845,61847],{"class":76,"line":14020},[74,61838,56425],{"class":84},[74,61840,55892],{"class":55581},[74,61842,57767],{"class":1925},[74,61844,131],{"class":84},[74,61846,57772],{"class":190},[74,61848,55588],{"class":84},[74,61850,61851,61853,61855,61858,61860],{"class":76,"line":14043},[74,61852,55622],{"class":84},[74,61854,74],{"class":55581},[74,61856,61857],{"class":84},">名字是：\u003C\u002F",[74,61859,74],{"class":55581},[74,61861,55588],{"class":84},[74,61863,61864,61866,61868,61870,61872,61875,61878,61880],{"class":76,"line":14067},[74,61865,55622],{"class":84},[74,61867,55892],{"class":55581},[74,61869,57767],{"class":1925},[74,61871,131],{"class":84},[74,61873,61874],{"class":190},"\"qs\"",[74,61876,61877],{"class":84},">这里显示姓名\u003C\u002F",[74,61879,55892],{"class":55581},[74,61881,55588],{"class":84},[74,61883,61884,61886,61888],{"class":76,"line":14072},[74,61885,56698],{"class":84},[74,61887,55892],{"class":55581},[74,61889,55588],{"class":84},[74,61891,61892,61894,61896,61898,61900,61903],{"class":76,"line":14077},[74,61893,56425],{"class":84},[74,61895,55892],{"class":55581},[74,61897,57767],{"class":1925},[74,61899,131],{"class":84},[74,61901,61902],{"class":190},"\"btns\"",[74,61904,55588],{"class":84},[74,61906,61907,61909,61911,61913,61915,61918,61921,61923],{"class":76,"line":14082},[74,61908,55622],{"class":84},[74,61910,58168],{"class":55581},[74,61912,57767],{"class":1925},[74,61914,131],{"class":84},[74,61916,61917],{"class":190},"\"start\"",[74,61919,61920],{"class":84},">开始\u003C\u002F",[74,61922,58168],{"class":55581},[74,61924,55588],{"class":84},[74,61926,61927,61929,61931,61933,61935,61938,61941,61943],{"class":76,"line":14091},[74,61928,55622],{"class":84},[74,61930,58168],{"class":55581},[74,61932,57767],{"class":1925},[74,61934,131],{"class":84},[74,61936,61937],{"class":190},"\"end\"",[74,61939,61940],{"class":84},">结束\u003C\u002F",[74,61942,58168],{"class":55581},[74,61944,55588],{"class":84},[74,61946,61947,61949,61951],{"class":76,"line":14096},[74,61948,56698],{"class":84},[74,61950,55892],{"class":55581},[74,61952,55588],{"class":84},[74,61954,61955],{"class":76,"line":14102},[74,61956,2363],{"emptyLinePlaceholder":2362},[74,61958,61959,61961,61963],{"class":76,"line":14123},[74,61960,56425],{"class":84},[74,61962,56094],{"class":55581},[74,61964,55588],{"class":84},[74,61966,61967],{"class":76,"line":14129},[74,61968,61969],{"class":144},"    \u002F\u002F 数据数组\n",[74,61971,61972,61974,61977,61979,61981,61984,61986,61989,61991,61994,61996,61999,62001,62004],{"class":76,"line":14143},[74,61973,15500],{"class":80},[74,61975,61976],{"class":134}," arr",[74,61978,17843],{"class":80},[74,61980,56507],{"class":84},[74,61982,61983],{"class":190},"'马超'",[74,61985,16714],{"class":84},[74,61987,61988],{"class":190},"'黄忠'",[74,61990,16714],{"class":84},[74,61992,61993],{"class":190},"'赵云'",[74,61995,16714],{"class":84},[74,61997,61998],{"class":190},"'关羽'",[74,62000,16714],{"class":84},[74,62002,62003],{"class":190},"'张飞'",[74,62005,37527],{"class":84},[74,62007,62008,62010,62013,62015,62017,62019,62021,62024],{"class":76,"line":14149},[74,62009,15500],{"class":80},[74,62011,62012],{"class":134}," qs",[74,62014,17843],{"class":80},[74,62016,58677],{"class":84},[74,62018,58680],{"class":1925},[74,62020,85],{"class":84},[74,62022,62023],{"class":190},"'.qs'",[74,62025,91],{"class":84},[74,62027,62028],{"class":76,"line":14176},[74,62029,62030],{"class":144},"    \u002F\u002F 1.业务1.开始按钮模块\n",[74,62032,62033,62035,62037,62039,62041,62043,62045,62048],{"class":76,"line":14185},[74,62034,15500],{"class":80},[74,62036,4147],{"class":134},[74,62038,17843],{"class":80},[74,62040,58677],{"class":84},[74,62042,58680],{"class":1925},[74,62044,85],{"class":84},[74,62046,62047],{"class":190},"'.start'",[74,62049,91],{"class":84},[74,62051,62052],{"class":76,"line":14191},[74,62053,62054],{"class":144},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[74,62056,62057,62059,62062,62064],{"class":76,"line":14199},[74,62058,56500],{"class":80},[74,62060,62061],{"class":84}," timerId ",[74,62063,131],{"class":80},[74,62065,51614],{"class":134},[74,62067,62068],{"class":76,"line":14204},[74,62069,62070],{"class":144},"    \u002F\u002F 随机号要全局变量\n",[74,62072,62073,62075,62078,62080],{"class":76,"line":20883},[74,62074,56500],{"class":80},[74,62076,62077],{"class":84}," random ",[74,62079,131],{"class":80},[74,62081,51614],{"class":134},[74,62083,62084],{"class":76,"line":20889},[74,62085,62086],{"class":144},"    \u002F\u002F 1.1 添加点击事件\n",[74,62088,62089,62092,62095,62097,62100,62102,62104],{"class":76,"line":20912},[74,62090,62091],{"class":84},"    start.",[74,62093,62094],{"class":1925},"addEventListener",[74,62096,85],{"class":84},[74,62098,62099],{"class":190},"'click'",[74,62101,16714],{"class":84},[74,62103,58730],{"class":80},[74,62105,58733],{"class":84},[74,62107,62108,62111,62113,62115,62117,62119],{"class":76,"line":20918},[74,62109,62110],{"class":84},"      timerId ",[74,62112,131],{"class":80},[74,62114,58725],{"class":1925},[74,62116,85],{"class":84},[74,62118,58730],{"class":80},[74,62120,58733],{"class":84},[74,62122,62123],{"class":76,"line":20941},[74,62124,62125],{"class":144},"        \u002F\u002F 随机数\n",[74,62127,62128,62131,62133,62136,62139,62142,62144,62146,62148,62150],{"class":76,"line":20955},[74,62129,62130],{"class":84},"        random ",[74,62132,131],{"class":80},[74,62134,62135],{"class":1925}," parseInt",[74,62137,62138],{"class":84},"(Math.",[74,62140,62141],{"class":1925},"random",[74,62143,17329],{"class":84},[74,62145,541],{"class":80},[74,62147,56246],{"class":84},[74,62149,56249],{"class":134},[74,62151,91],{"class":84},[74,62153,62154,62157,62159],{"class":76,"line":20975},[74,62155,62156],{"class":84},"        qs.innerHTML ",[74,62158,131],{"class":80},[74,62160,62161],{"class":84}," arr[random]\n",[74,62163,62164,62167,62169],{"class":76,"line":20981},[74,62165,62166],{"class":84},"      }, ",[74,62168,359],{"class":134},[74,62170,91],{"class":84},[74,62172,62173],{"class":76,"line":20992},[74,62174,62175],{"class":144},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[74,62177,62178,62180,62183,62185,62188,62190],{"class":76,"line":21015},[74,62179,58761],{"class":80},[74,62181,62182],{"class":84}," (arr.",[74,62184,56249],{"class":134},[74,62186,62187],{"class":80}," ===",[74,62189,29399],{"class":134},[74,62191,16721],{"class":84},[74,62193,62194],{"class":76,"line":21037},[74,62195,62196],{"class":144},"        \u002F\u002F start.disabled = true\n",[74,62198,62199],{"class":76,"line":21042},[74,62200,62201],{"class":144},"        \u002F\u002F end.disabled = true\n",[74,62203,62204],{"class":76,"line":21048},[74,62205,62206],{"class":144},"        \u002F\u002F 可以合起来写\n",[74,62208,62209,62212,62214,62217,62219],{"class":76,"line":21062},[74,62210,62211],{"class":84},"        start.disabled ",[74,62213,131],{"class":80},[74,62215,62216],{"class":84}," end.disabled ",[74,62218,131],{"class":80},[74,62220,62221],{"class":134}," true\n",[74,62223,62224],{"class":76,"line":21075},[74,62225,56679],{"class":84},[74,62227,62228],{"class":76,"line":21080},[74,62229,37742],{"class":84},[74,62231,62232],{"class":76,"line":21094},[74,62233,62234],{"class":144},"    \u002F\u002F 1.2 关闭按钮模块\n",[74,62236,62237,62239,62241,62243,62245,62247,62249,62252],{"class":76,"line":21099},[74,62238,15500],{"class":80},[74,62240,4163],{"class":134},[74,62242,17843],{"class":80},[74,62244,58677],{"class":84},[74,62246,58680],{"class":1925},[74,62248,85],{"class":84},[74,62250,62251],{"class":190},"'.end'",[74,62253,91],{"class":84},[74,62255,62256,62259,62261,62263,62265,62267,62269],{"class":76,"line":21105},[74,62257,62258],{"class":84},"    end.",[74,62260,62094],{"class":1925},[74,62262,85],{"class":84},[74,62264,62099],{"class":190},[74,62266,16714],{"class":84},[74,62268,58730],{"class":80},[74,62270,58733],{"class":84},[74,62272,62273,62276],{"class":76,"line":21110},[74,62274,62275],{"class":1925},"      clearInterval",[74,62277,62278],{"class":84},"(timerId)\n",[74,62280,62281],{"class":76,"line":21124},[74,62282,62283],{"class":144},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[74,62285,62286,62289,62292,62295,62297],{"class":76,"line":21129},[74,62287,62288],{"class":84},"      arr.",[74,62290,62291],{"class":1925},"splice",[74,62293,62294],{"class":84},"(random, ",[74,62296,303],{"class":134},[74,62298,91],{"class":84},[74,62300,62301],{"class":76,"line":21134},[74,62302,37742],{"class":84},[74,62304,62305],{"class":76,"line":21148},[74,62306,2363],{"emptyLinePlaceholder":2362},[74,62308,62309,62311,62313],{"class":76,"line":21160},[74,62310,56698],{"class":84},[74,62312,56094],{"class":55581},[74,62314,55588],{"class":84},[74,62316,62317,62319,62321],{"class":76,"line":21165},[74,62318,56066],{"class":84},[74,62320,56081],{"class":55581},[74,62322,55588],{"class":84},[74,62324,62325],{"class":76,"line":21178},[74,62326,2363],{"emptyLinePlaceholder":2362},[74,62328,62329,62331,62333],{"class":76,"line":21183},[74,62330,56066],{"class":84},[74,62332,54916],{"class":55581},[74,62334,55588],{"class":84},[19,62336,62337],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[44,62339,62341],{"id":62340},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[64,62343,62345],{"className":54914,"code":62344,"language":54916,"meta":69,"style":69},"\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",[71,62346,62347,62357,62371,62375,62383,62397,62417,62429,62437,62441,62449,62461,62469,62488,62505,62521,62531,62535,62543,62551,62555],{"__ignoreMap":69},[74,62348,62349,62351,62353,62355],{"class":76,"line":77},[74,62350,55578],{"class":84},[74,62352,55582],{"class":55581},[74,62354,55585],{"class":1925},[74,62356,55588],{"class":84},[74,62358,62359,62361,62363,62365,62367,62369],{"class":76,"line":94},[74,62360,996],{"class":84},[74,62362,54916],{"class":55581},[74,62364,55597],{"class":1925},[74,62366,131],{"class":84},[74,62368,55602],{"class":190},[74,62370,55588],{"class":84},[74,62372,62373],{"class":76,"line":1141},[74,62374,2363],{"emptyLinePlaceholder":2362},[74,62376,62377,62379,62381],{"class":76,"line":1156},[74,62378,996],{"class":84},[74,62380,55615],{"class":55581},[74,62382,55588],{"class":84},[74,62384,62385,62387,62389,62391,62393,62395],{"class":76,"line":1162},[74,62386,56425],{"class":84},[74,62388,55625],{"class":55581},[74,62390,55628],{"class":1925},[74,62392,131],{"class":84},[74,62394,55633],{"class":190},[74,62396,55588],{"class":84},[74,62398,62399,62401,62403,62405,62407,62409,62411,62413,62415],{"class":76,"line":1176},[74,62400,56425],{"class":84},[74,62402,55625],{"class":55581},[74,62404,19199],{"class":1925},[74,62406,131],{"class":84},[74,62408,55672],{"class":190},[74,62410,55652],{"class":1925},[74,62412,131],{"class":84},[74,62414,55679],{"class":190},[74,62416,55588],{"class":84},[74,62418,62419,62421,62423,62425,62427],{"class":76,"line":1182},[74,62420,56425],{"class":84},[74,62422,55688],{"class":55581},[74,62424,55691],{"class":84},[74,62426,55688],{"class":55581},[74,62428,55588],{"class":84},[74,62430,62431,62433,62435],{"class":76,"line":1273},[74,62432,56066],{"class":84},[74,62434,55615],{"class":55581},[74,62436,55588],{"class":84},[74,62438,62439],{"class":76,"line":1279},[74,62440,2363],{"emptyLinePlaceholder":2362},[74,62442,62443,62445,62447],{"class":76,"line":1291},[74,62444,996],{"class":84},[74,62446,56081],{"class":55581},[74,62448,55588],{"class":84},[74,62450,62451,62453,62455,62457,62459],{"class":76,"line":1574},[74,62452,56425],{"class":84},[74,62454,58168],{"class":55581},[74,62456,58174],{"class":84},[74,62458,58168],{"class":55581},[74,62460,55588],{"class":84},[74,62462,62463,62465,62467],{"class":76,"line":1579},[74,62464,56425],{"class":84},[74,62466,56094],{"class":55581},[74,62468,55588],{"class":84},[74,62470,62471,62473,62475,62477,62479,62481,62483,62486],{"class":76,"line":1585},[74,62472,15500],{"class":80},[74,62474,58672],{"class":134},[74,62476,17843],{"class":80},[74,62478,58677],{"class":84},[74,62480,58680],{"class":1925},[74,62482,85],{"class":84},[74,62484,62485],{"class":190},"'button'",[74,62487,91],{"class":84},[74,62489,62490,62493,62495,62497,62499,62501,62503],{"class":76,"line":1590},[74,62491,62492],{"class":84},"    btn.",[74,62494,62094],{"class":1925},[74,62496,85],{"class":84},[74,62498,62099],{"class":190},[74,62500,16714],{"class":84},[74,62502,58730],{"class":80},[74,62504,58733],{"class":84},[74,62506,62507,62510,62512,62514,62517,62519],{"class":76,"line":1604},[74,62508,62509],{"class":80},"      const",[74,62511,2202],{"class":134},[74,62513,17843],{"class":80},[74,62515,62516],{"class":84}," Math.",[74,62518,62141],{"class":1925},[74,62520,1938],{"class":84},[74,62522,62523,62526,62529],{"class":76,"line":1609},[74,62524,62525],{"class":84},"      console.",[74,62527,62528],{"class":1925},"log",[74,62530,99],{"class":84},[74,62532,62533],{"class":76,"line":1615},[74,62534,37742],{"class":84},[74,62536,62537,62539,62541],{"class":76,"line":1636},[74,62538,56698],{"class":84},[74,62540,56094],{"class":55581},[74,62542,55588],{"class":84},[74,62544,62545,62547,62549],{"class":76,"line":1641},[74,62546,56066],{"class":84},[74,62548,56081],{"class":55581},[74,62550,55588],{"class":84},[74,62552,62553],{"class":76,"line":1655},[74,62554,2363],{"emptyLinePlaceholder":2362},[74,62556,62557,62559,62561],{"class":76,"line":1660},[74,62558,56066],{"class":84},[74,62560,54916],{"class":55581},[74,62562,55588],{"class":84},[19,62564,62565],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,62567,62568],{},"常量不可以重新赋值",[19,62570,62571],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[64,62573,62575],{"className":54914,"code":62574,"language":54916,"meta":69,"style":69},"\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",[71,62576,62577,62587,62601,62605,62613,62627,62647,62659,62667,62671,62679,62691,62699,62710,62728,62744,62758,62766,62770,62778,62786,62790],{"__ignoreMap":69},[74,62578,62579,62581,62583,62585],{"class":76,"line":77},[74,62580,55578],{"class":84},[74,62582,55582],{"class":55581},[74,62584,55585],{"class":1925},[74,62586,55588],{"class":84},[74,62588,62589,62591,62593,62595,62597,62599],{"class":76,"line":94},[74,62590,996],{"class":84},[74,62592,54916],{"class":55581},[74,62594,55597],{"class":1925},[74,62596,131],{"class":84},[74,62598,55602],{"class":190},[74,62600,55588],{"class":84},[74,62602,62603],{"class":76,"line":1141},[74,62604,2363],{"emptyLinePlaceholder":2362},[74,62606,62607,62609,62611],{"class":76,"line":1156},[74,62608,996],{"class":84},[74,62610,55615],{"class":55581},[74,62612,55588],{"class":84},[74,62614,62615,62617,62619,62621,62623,62625],{"class":76,"line":1162},[74,62616,56425],{"class":84},[74,62618,55625],{"class":55581},[74,62620,55628],{"class":1925},[74,62622,131],{"class":84},[74,62624,55633],{"class":190},[74,62626,55588],{"class":84},[74,62628,62629,62631,62633,62635,62637,62639,62641,62643,62645],{"class":76,"line":1176},[74,62630,56425],{"class":84},[74,62632,55625],{"class":55581},[74,62634,19199],{"class":1925},[74,62636,131],{"class":84},[74,62638,55672],{"class":190},[74,62640,55652],{"class":1925},[74,62642,131],{"class":84},[74,62644,55679],{"class":190},[74,62646,55588],{"class":84},[74,62648,62649,62651,62653,62655,62657],{"class":76,"line":1182},[74,62650,56425],{"class":84},[74,62652,55688],{"class":55581},[74,62654,55691],{"class":84},[74,62656,55688],{"class":55581},[74,62658,55588],{"class":84},[74,62660,62661,62663,62665],{"class":76,"line":1273},[74,62662,56066],{"class":84},[74,62664,55615],{"class":55581},[74,62666,55588],{"class":84},[74,62668,62669],{"class":76,"line":1279},[74,62670,2363],{"emptyLinePlaceholder":2362},[74,62672,62673,62675,62677],{"class":76,"line":1291},[74,62674,996],{"class":84},[74,62676,56081],{"class":55581},[74,62678,55588],{"class":84},[74,62680,62681,62683,62685,62687,62689],{"class":76,"line":1574},[74,62682,56425],{"class":84},[74,62684,58168],{"class":55581},[74,62686,58174],{"class":84},[74,62688,58168],{"class":55581},[74,62690,55588],{"class":84},[74,62692,62693,62695,62697],{"class":76,"line":1579},[74,62694,56425],{"class":84},[74,62696,56094],{"class":55581},[74,62698,55588],{"class":84},[74,62700,62701,62703,62705,62707],{"class":76,"line":1585},[74,62702,15500],{"class":80},[74,62704,2202],{"class":134},[74,62706,17843],{"class":80},[74,62708,62709],{"class":134}," 10\n",[74,62711,62712,62714,62716,62718,62720,62722,62724,62726],{"class":76,"line":1590},[74,62713,15500],{"class":80},[74,62715,58672],{"class":134},[74,62717,17843],{"class":80},[74,62719,58677],{"class":84},[74,62721,58680],{"class":1925},[74,62723,85],{"class":84},[74,62725,62485],{"class":190},[74,62727,91],{"class":84},[74,62729,62730,62732,62734,62736,62738,62740,62742],{"class":76,"line":1604},[74,62731,62492],{"class":84},[74,62733,62094],{"class":1925},[74,62735,85],{"class":84},[74,62737,62099],{"class":190},[74,62739,16714],{"class":84},[74,62741,58730],{"class":80},[74,62743,58733],{"class":84},[74,62745,62746,62748,62750,62752,62754,62756],{"class":76,"line":1609},[74,62747,62509],{"class":80},[74,62749,2202],{"class":134},[74,62751,17843],{"class":80},[74,62753,62516],{"class":84},[74,62755,62141],{"class":1925},[74,62757,1938],{"class":84},[74,62759,62760,62762,62764],{"class":76,"line":1615},[74,62761,62525],{"class":84},[74,62763,62528],{"class":1925},[74,62765,99],{"class":84},[74,62767,62768],{"class":76,"line":1636},[74,62769,37742],{"class":84},[74,62771,62772,62774,62776],{"class":76,"line":1641},[74,62773,56698],{"class":84},[74,62775,56094],{"class":55581},[74,62777,55588],{"class":84},[74,62779,62780,62782,62784],{"class":76,"line":1655},[74,62781,56066],{"class":84},[74,62783,56081],{"class":55581},[74,62785,55588],{"class":84},[74,62787,62788],{"class":76,"line":1660},[74,62789,2363],{"emptyLinePlaceholder":2362},[74,62791,62792,62794,62796],{"class":76,"line":1689},[74,62793,56066],{"class":84},[74,62795,54916],{"class":55581},[74,62797,55588],{"class":84},[19,62799,62800],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[64,62802,62804],{"className":54914,"code":62803,"language":54916,"meta":69,"style":69},"\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",[71,62805,62806,62816,62830,62834,62842,62856,62876,62888,62896,62900,62908,62920,62928,62938,62956,62972,62985,62993,62997,63005,63013,63017],{"__ignoreMap":69},[74,62807,62808,62810,62812,62814],{"class":76,"line":77},[74,62809,55578],{"class":84},[74,62811,55582],{"class":55581},[74,62813,55585],{"class":1925},[74,62815,55588],{"class":84},[74,62817,62818,62820,62822,62824,62826,62828],{"class":76,"line":94},[74,62819,996],{"class":84},[74,62821,54916],{"class":55581},[74,62823,55597],{"class":1925},[74,62825,131],{"class":84},[74,62827,55602],{"class":190},[74,62829,55588],{"class":84},[74,62831,62832],{"class":76,"line":1141},[74,62833,2363],{"emptyLinePlaceholder":2362},[74,62835,62836,62838,62840],{"class":76,"line":1156},[74,62837,996],{"class":84},[74,62839,55615],{"class":55581},[74,62841,55588],{"class":84},[74,62843,62844,62846,62848,62850,62852,62854],{"class":76,"line":1162},[74,62845,56425],{"class":84},[74,62847,55625],{"class":55581},[74,62849,55628],{"class":1925},[74,62851,131],{"class":84},[74,62853,55633],{"class":190},[74,62855,55588],{"class":84},[74,62857,62858,62860,62862,62864,62866,62868,62870,62872,62874],{"class":76,"line":1176},[74,62859,56425],{"class":84},[74,62861,55625],{"class":55581},[74,62863,19199],{"class":1925},[74,62865,131],{"class":84},[74,62867,55672],{"class":190},[74,62869,55652],{"class":1925},[74,62871,131],{"class":84},[74,62873,55679],{"class":190},[74,62875,55588],{"class":84},[74,62877,62878,62880,62882,62884,62886],{"class":76,"line":1182},[74,62879,56425],{"class":84},[74,62881,55688],{"class":55581},[74,62883,55691],{"class":84},[74,62885,55688],{"class":55581},[74,62887,55588],{"class":84},[74,62889,62890,62892,62894],{"class":76,"line":1273},[74,62891,56066],{"class":84},[74,62893,55615],{"class":55581},[74,62895,55588],{"class":84},[74,62897,62898],{"class":76,"line":1279},[74,62899,2363],{"emptyLinePlaceholder":2362},[74,62901,62902,62904,62906],{"class":76,"line":1291},[74,62903,996],{"class":84},[74,62905,56081],{"class":55581},[74,62907,55588],{"class":84},[74,62909,62910,62912,62914,62916,62918],{"class":76,"line":1574},[74,62911,56425],{"class":84},[74,62913,58168],{"class":55581},[74,62915,58174],{"class":84},[74,62917,58168],{"class":55581},[74,62919,55588],{"class":84},[74,62921,62922,62924,62926],{"class":76,"line":1579},[74,62923,56425],{"class":84},[74,62925,56094],{"class":55581},[74,62927,55588],{"class":84},[74,62929,62930,62932,62934,62936],{"class":76,"line":1585},[74,62931,15500],{"class":80},[74,62933,2202],{"class":134},[74,62935,17843],{"class":80},[74,62937,62709],{"class":134},[74,62939,62940,62942,62944,62946,62948,62950,62952,62954],{"class":76,"line":1590},[74,62941,15500],{"class":80},[74,62943,58672],{"class":134},[74,62945,17843],{"class":80},[74,62947,58677],{"class":84},[74,62949,58680],{"class":1925},[74,62951,85],{"class":84},[74,62953,62485],{"class":190},[74,62955,91],{"class":84},[74,62957,62958,62960,62962,62964,62966,62968,62970],{"class":76,"line":1604},[74,62959,62492],{"class":84},[74,62961,62094],{"class":1925},[74,62963,85],{"class":84},[74,62965,62099],{"class":190},[74,62967,16714],{"class":84},[74,62969,58730],{"class":80},[74,62971,58733],{"class":84},[74,62973,62974,62977,62979,62981,62983],{"class":76,"line":1609},[74,62975,62976],{"class":84},"      num ",[74,62978,131],{"class":80},[74,62980,62516],{"class":84},[74,62982,62141],{"class":1925},[74,62984,1938],{"class":84},[74,62986,62987,62989,62991],{"class":76,"line":1615},[74,62988,62525],{"class":84},[74,62990,62528],{"class":1925},[74,62992,99],{"class":84},[74,62994,62995],{"class":76,"line":1636},[74,62996,37742],{"class":84},[74,62998,62999,63001,63003],{"class":76,"line":1641},[74,63000,56698],{"class":84},[74,63002,56094],{"class":55581},[74,63004,55588],{"class":84},[74,63006,63007,63009,63011],{"class":76,"line":1655},[74,63008,56066],{"class":84},[74,63010,56081],{"class":55581},[74,63012,55588],{"class":84},[74,63014,63015],{"class":76,"line":1660},[74,63016,2363],{"emptyLinePlaceholder":2362},[74,63018,63019,63021,63023],{"class":76,"line":1689},[74,63020,56066],{"class":84},[74,63022,54916],{"class":55581},[74,63024,55588],{"class":84},[19,63026,63027],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[44,63029,63031],{"id":63030},"_324-事件监听版本","3.2.4 事件监听版本",[19,63033,63034],{},[1424,63035],{"alt":69,"src":63036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,63038,63039],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,63041,63042],{},"这种方式会覆盖前边的事件监听:",[64,63044,63046],{"className":54914,"code":63045,"language":54916,"meta":69,"style":69},"\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",[71,63047,63048,63058,63072,63076,63084,63098,63118,63130,63138,63142,63150,63162,63170,63188,63202,63213,63217,63229,63239,63243,63251,63259,63263],{"__ignoreMap":69},[74,63049,63050,63052,63054,63056],{"class":76,"line":77},[74,63051,55578],{"class":84},[74,63053,55582],{"class":55581},[74,63055,55585],{"class":1925},[74,63057,55588],{"class":84},[74,63059,63060,63062,63064,63066,63068,63070],{"class":76,"line":94},[74,63061,996],{"class":84},[74,63063,54916],{"class":55581},[74,63065,55597],{"class":1925},[74,63067,131],{"class":84},[74,63069,55602],{"class":190},[74,63071,55588],{"class":84},[74,63073,63074],{"class":76,"line":1141},[74,63075,2363],{"emptyLinePlaceholder":2362},[74,63077,63078,63080,63082],{"class":76,"line":1156},[74,63079,996],{"class":84},[74,63081,55615],{"class":55581},[74,63083,55588],{"class":84},[74,63085,63086,63088,63090,63092,63094,63096],{"class":76,"line":1162},[74,63087,56425],{"class":84},[74,63089,55625],{"class":55581},[74,63091,55628],{"class":1925},[74,63093,131],{"class":84},[74,63095,55633],{"class":190},[74,63097,55588],{"class":84},[74,63099,63100,63102,63104,63106,63108,63110,63112,63114,63116],{"class":76,"line":1176},[74,63101,56425],{"class":84},[74,63103,55625],{"class":55581},[74,63105,19199],{"class":1925},[74,63107,131],{"class":84},[74,63109,55672],{"class":190},[74,63111,55652],{"class":1925},[74,63113,131],{"class":84},[74,63115,55679],{"class":190},[74,63117,55588],{"class":84},[74,63119,63120,63122,63124,63126,63128],{"class":76,"line":1182},[74,63121,56425],{"class":84},[74,63123,55688],{"class":55581},[74,63125,55691],{"class":84},[74,63127,55688],{"class":55581},[74,63129,55588],{"class":84},[74,63131,63132,63134,63136],{"class":76,"line":1273},[74,63133,56066],{"class":84},[74,63135,55615],{"class":55581},[74,63137,55588],{"class":84},[74,63139,63140],{"class":76,"line":1279},[74,63141,2363],{"emptyLinePlaceholder":2362},[74,63143,63144,63146,63148],{"class":76,"line":1291},[74,63145,996],{"class":84},[74,63147,56081],{"class":55581},[74,63149,55588],{"class":84},[74,63151,63152,63154,63156,63158,63160],{"class":76,"line":1574},[74,63153,56425],{"class":84},[74,63155,58168],{"class":55581},[74,63157,58174],{"class":84},[74,63159,58168],{"class":55581},[74,63161,55588],{"class":84},[74,63163,63164,63166,63168],{"class":76,"line":1579},[74,63165,56425],{"class":84},[74,63167,56094],{"class":55581},[74,63169,55588],{"class":84},[74,63171,63172,63174,63176,63178,63180,63182,63184,63186],{"class":76,"line":1585},[74,63173,15500],{"class":80},[74,63175,58672],{"class":134},[74,63177,17843],{"class":80},[74,63179,58677],{"class":84},[74,63181,58680],{"class":1925},[74,63183,85],{"class":84},[74,63185,62485],{"class":190},[74,63187,91],{"class":84},[74,63189,63190,63192,63195,63197,63200],{"class":76,"line":1590},[74,63191,62492],{"class":84},[74,63193,63194],{"class":1925},"onclick",[74,63196,17843],{"class":80},[74,63198,63199],{"class":80}," function",[74,63201,58733],{"class":84},[74,63203,63204,63207,63209,63211],{"class":76,"line":1604},[74,63205,63206],{"class":1925},"      alert",[74,63208,85],{"class":84},[74,63210,558],{"class":134},[74,63212,91],{"class":84},[74,63214,63215],{"class":76,"line":1609},[74,63216,2149],{"class":84},[74,63218,63219,63221,63223,63225,63227],{"class":76,"line":1615},[74,63220,62492],{"class":84},[74,63222,63194],{"class":1925},[74,63224,17843],{"class":80},[74,63226,63199],{"class":80},[74,63228,58733],{"class":84},[74,63230,63231,63233,63235,63237],{"class":76,"line":1636},[74,63232,63206],{"class":1925},[74,63234,85],{"class":84},[74,63236,836],{"class":134},[74,63238,91],{"class":84},[74,63240,63241],{"class":76,"line":1641},[74,63242,2149],{"class":84},[74,63244,63245,63247,63249],{"class":76,"line":1655},[74,63246,56698],{"class":84},[74,63248,56094],{"class":55581},[74,63250,55588],{"class":84},[74,63252,63253,63255,63257],{"class":76,"line":1660},[74,63254,56066],{"class":84},[74,63256,56081],{"class":55581},[74,63258,55588],{"class":84},[74,63260,63261],{"class":76,"line":1689},[74,63262,2363],{"emptyLinePlaceholder":2362},[74,63264,63265,63267,63269],{"class":76,"line":1694},[74,63266,56066],{"class":84},[74,63268,54916],{"class":55581},[74,63270,55588],{"class":84},[19,63272,63273],{},"只要点击就输出结果为22,前边11被覆盖了",[64,63275,63277],{"className":54914,"code":63276,"language":54916,"meta":69,"style":69},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[71,63278,63279,63284,63289,63293,63298,63303],{"__ignoreMap":69},[74,63280,63281],{"class":76,"line":77},[74,63282,63283],{"class":84},"  btn.addEventListener('click', function () {\n",[74,63285,63286],{"class":76,"line":94},[74,63287,63288],{"class":84},"      alert(11)\n",[74,63290,63291],{"class":76,"line":1141},[74,63292,37742],{"class":84},[74,63294,63295],{"class":76,"line":1156},[74,63296,63297],{"class":84},"    btn.addEventListener('click', function () {\n",[74,63299,63300],{"class":76,"line":1162},[74,63301,63302],{"class":84},"      alert(22)\n",[74,63304,63305],{"class":76,"line":1176},[74,63306,37742],{"class":84},[19,63308,63309],{},"点击第一次输出11,第二次点击为22",[44,63311,63313],{"id":63312},"_325-事件类型","3.2.5 事件类型",[19,63315,63316],{},[1424,63317],{"alt":69,"src":63318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[26277,63320,63322],{"id":63321},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,63324,63325],{},"补充知识:",[19,63327,63328],{},"轮播图自动播放模块,可以使用",[19,63330,63331],{},"let timerId = setInterval(function () {",[19,63333,63334],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,63336,63337],{},"用js方法模拟进行点击事件,click必须加()",[19,63339,63340],{},"next.click()",[19,63342,63343],{},"}, 1000)",[19,63345,63346],{},[1424,63347],{"alt":69,"src":63348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[64,63350,63352],{"className":57348,"code":63351,"language":57350,"meta":69,"style":69},"\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",[71,63353,63354,63358,63368,63382,63386,63394,63409,63429,63449,63462,63470,63475,63480,63484,63488,63493,63498,63503,63508,63512,63516,63521,63526,63531,63535,63539,63544,63548,63553,63558,63562,63566,63571,63576,63581,63586,63591,63595,63599,63604,63609,63614,63619,63624,63628,63632,63637,63642,63647,63652,63657,63662,63667,63672,63677,63682,63686,63690,63695,63700,63704,63708,63713,63718,63722,63727,63732,63736,63740,63745,63749,63754,63759,63763,63768,63772,63776,63781,63786,63791,63796,63801,63806,63811,63815,63819,63823,63828,63833,63838,63843,63847,63855,63863,63867,63875,63890,63904,63925,63933,63947,63960,63975,63994,64006,64018,64030,64042,64054,64066,64078,64086,64101,64125,64149,64157,64165,64173,64181,64186,64191,64196,64201,64206,64211,64216,64221,64226,64231,64235,64240,64245,64250,64255,64260,64265,64270,64275,64280,64284,64289,64294,64299,64304,64309,64314,64319,64324,64329,64334,64339,64344,64348,64352,64357,64362,64367,64371,64376,64381,64386,64391,64396,64400,64405,64409,64413,64417,64421,64425,64429,64434,64439,64444,64449,64454,64459,64464,64469,64474,64478,64482,64487,64492,64497,64502,64507,64511,64516,64521,64526,64531,64536,64541,64545,64549,64554,64558,64563,64567,64572,64577,64582,64587,64592,64597,64601,64609,64617,64621],{"__ignoreMap":69},[74,63355,63356],{"class":76,"line":77},[74,63357,2363],{"emptyLinePlaceholder":2362},[74,63359,63360,63362,63364,63366],{"class":76,"line":94},[74,63361,55578],{"class":84},[74,63363,55582],{"class":80},[74,63365,55585],{"class":134},[74,63367,55588],{"class":84},[74,63369,63370,63372,63374,63376,63378,63380],{"class":76,"line":1141},[74,63371,996],{"class":84},[74,63373,54916],{"class":55581},[74,63375,55597],{"class":1925},[74,63377,131],{"class":84},[74,63379,55602],{"class":190},[74,63381,55588],{"class":84},[74,63383,63384],{"class":76,"line":1156},[74,63385,2363],{"emptyLinePlaceholder":2362},[74,63387,63388,63390,63392],{"class":76,"line":1162},[74,63389,996],{"class":84},[74,63391,55615],{"class":55581},[74,63393,55588],{"class":84},[74,63395,63396,63398,63400,63402,63404,63406],{"class":76,"line":1176},[74,63397,56425],{"class":84},[74,63399,55625],{"class":55581},[74,63401,55628],{"class":1925},[74,63403,131],{"class":84},[74,63405,55633],{"class":190},[74,63407,63408],{"class":84}," \u002F>\n",[74,63410,63411,63413,63415,63417,63419,63421,63423,63425,63427],{"class":76,"line":1182},[74,63412,56425],{"class":84},[74,63414,55625],{"class":55581},[74,63416,55644],{"class":1925},[74,63418,131],{"class":84},[74,63420,55649],{"class":190},[74,63422,55652],{"class":1925},[74,63424,131],{"class":84},[74,63426,55657],{"class":190},[74,63428,63408],{"class":84},[74,63430,63431,63433,63435,63437,63439,63441,63443,63445,63447],{"class":76,"line":1273},[74,63432,56425],{"class":84},[74,63434,55625],{"class":55581},[74,63436,19199],{"class":1925},[74,63438,131],{"class":84},[74,63440,55672],{"class":190},[74,63442,55652],{"class":1925},[74,63444,131],{"class":84},[74,63446,55679],{"class":190},[74,63448,63408],{"class":84},[74,63450,63451,63453,63455,63458,63460],{"class":76,"line":1279},[74,63452,56425],{"class":84},[74,63454,55688],{"class":55581},[74,63456,63457],{"class":84},">轮播图点击切换\u003C\u002F",[74,63459,55688],{"class":55581},[74,63461,55588],{"class":84},[74,63463,63464,63466,63468],{"class":76,"line":1291},[74,63465,56425],{"class":84},[74,63467,5090],{"class":55581},[74,63469,55588],{"class":84},[74,63471,63472],{"class":76,"line":1574},[74,63473,63474],{"class":84},"    * {\n",[74,63476,63477],{"class":76,"line":1579},[74,63478,63479],{"class":84},"      box-sizing: border-box;\n",[74,63481,63482],{"class":76,"line":1585},[74,63483,2149],{"class":84},[74,63485,63486],{"class":76,"line":1590},[74,63487,2363],{"emptyLinePlaceholder":2362},[74,63489,63490],{"class":76,"line":1604},[74,63491,63492],{"class":84},"    .slider {\n",[74,63494,63495],{"class":76,"line":1609},[74,63496,63497],{"class":84},"      width: 560px;\n",[74,63499,63500],{"class":76,"line":1615},[74,63501,63502],{"class":84},"      height: 400px;\n",[74,63504,63505],{"class":76,"line":1636},[74,63506,63507],{"class":84},"      overflow: hidden;\n",[74,63509,63510],{"class":76,"line":1641},[74,63511,2149],{"class":84},[74,63513,63514],{"class":76,"line":1655},[74,63515,2363],{"emptyLinePlaceholder":2362},[74,63517,63518],{"class":76,"line":1660},[74,63519,63520],{"class":84},"    .slider-wrapper {\n",[74,63522,63523],{"class":76,"line":1689},[74,63524,63525],{"class":84},"      width: 100%;\n",[74,63527,63528],{"class":76,"line":1694},[74,63529,63530],{"class":84},"      height: 320px;\n",[74,63532,63533],{"class":76,"line":1711},[74,63534,2149],{"class":84},[74,63536,63537],{"class":76,"line":1716},[74,63538,2363],{"emptyLinePlaceholder":2362},[74,63540,63541],{"class":76,"line":1721},[74,63542,63543],{"class":84},"    .slider-wrapper img {\n",[74,63545,63546],{"class":76,"line":1726},[74,63547,63525],{"class":84},[74,63549,63550],{"class":76,"line":1740},[74,63551,63552],{"class":84},"      height: 100%;\n",[74,63554,63555],{"class":76,"line":1745},[74,63556,63557],{"class":84},"      display: block;\n",[74,63559,63560],{"class":76,"line":2540},[74,63561,2149],{"class":84},[74,63563,63564],{"class":76,"line":2554},[74,63565,2363],{"emptyLinePlaceholder":2362},[74,63567,63568],{"class":76,"line":2562},[74,63569,63570],{"class":84},"    .slider-footer {\n",[74,63572,63573],{"class":76,"line":2567},[74,63574,63575],{"class":84},"      height: 80px;\n",[74,63577,63578],{"class":76,"line":2573},[74,63579,63580],{"class":84},"      background-color: rgb(100, 67, 68);\n",[74,63582,63583],{"class":76,"line":2579},[74,63584,63585],{"class":84},"      padding: 12px 12px 0 12px;\n",[74,63587,63588],{"class":76,"line":2584},[74,63589,63590],{"class":84},"      position: relative;\n",[74,63592,63593],{"class":76,"line":12227},[74,63594,2149],{"class":84},[74,63596,63597],{"class":76,"line":12251},[74,63598,2363],{"emptyLinePlaceholder":2362},[74,63600,63601],{"class":76,"line":12256},[74,63602,63603],{"class":84},"    .slider-footer .toggle {\n",[74,63605,63606],{"class":76,"line":12262},[74,63607,63608],{"class":84},"      position: absolute;\n",[74,63610,63611],{"class":76,"line":12289},[74,63612,63613],{"class":84},"      right: 0;\n",[74,63615,63616],{"class":76,"line":12294},[74,63617,63618],{"class":84},"      top: 12px;\n",[74,63620,63621],{"class":76,"line":12300},[74,63622,63623],{"class":84},"      display: flex;\n",[74,63625,63626],{"class":76,"line":12312},[74,63627,2149],{"class":84},[74,63629,63630],{"class":76,"line":12324},[74,63631,2363],{"emptyLinePlaceholder":2362},[74,63633,63634],{"class":76,"line":12336},[74,63635,63636],{"class":84},"    .slider-footer .toggle button {\n",[74,63638,63639],{"class":76,"line":13995},[74,63640,63641],{"class":84},"      margin-right: 12px;\n",[74,63643,63644],{"class":76,"line":14020},[74,63645,63646],{"class":84},"      width: 28px;\n",[74,63648,63649],{"class":76,"line":14043},[74,63650,63651],{"class":84},"      height: 28px;\n",[74,63653,63654],{"class":76,"line":14067},[74,63655,63656],{"class":84},"      appearance: none;\n",[74,63658,63659],{"class":76,"line":14072},[74,63660,63661],{"class":84},"      border: none;\n",[74,63663,63664],{"class":76,"line":14077},[74,63665,63666],{"class":84},"      background: rgba(255, 255, 255, 0.1);\n",[74,63668,63669],{"class":76,"line":14082},[74,63670,63671],{"class":84},"      color: #fff;\n",[74,63673,63674],{"class":76,"line":14091},[74,63675,63676],{"class":84},"      border-radius: 4px;\n",[74,63678,63679],{"class":76,"line":14096},[74,63680,63681],{"class":84},"      cursor: pointer;\n",[74,63683,63684],{"class":76,"line":14102},[74,63685,2149],{"class":84},[74,63687,63688],{"class":76,"line":14123},[74,63689,2363],{"emptyLinePlaceholder":2362},[74,63691,63692],{"class":76,"line":14129},[74,63693,63694],{"class":84},"    .slider-footer .toggle button:hover {\n",[74,63696,63697],{"class":76,"line":14143},[74,63698,63699],{"class":84},"      background: rgba(255, 255, 255, 0.2);\n",[74,63701,63702],{"class":76,"line":14149},[74,63703,2149],{"class":84},[74,63705,63706],{"class":76,"line":14176},[74,63707,2363],{"emptyLinePlaceholder":2362},[74,63709,63710],{"class":76,"line":14185},[74,63711,63712],{"class":84},"    .slider-footer p {\n",[74,63714,63715],{"class":76,"line":14191},[74,63716,63717],{"class":84},"      margin: 0;\n",[74,63719,63720],{"class":76,"line":14199},[74,63721,63671],{"class":84},[74,63723,63724],{"class":76,"line":14204},[74,63725,63726],{"class":84},"      font-size: 18px;\n",[74,63728,63729],{"class":76,"line":20883},[74,63730,63731],{"class":84},"      margin-bottom: 10px;\n",[74,63733,63734],{"class":76,"line":20889},[74,63735,2149],{"class":84},[74,63737,63738],{"class":76,"line":20912},[74,63739,2363],{"emptyLinePlaceholder":2362},[74,63741,63742],{"class":76,"line":20918},[74,63743,63744],{"class":84},"    .slider-indicator {\n",[74,63746,63747],{"class":76,"line":20941},[74,63748,63717],{"class":84},[74,63750,63751],{"class":76,"line":20955},[74,63752,63753],{"class":84},"      padding: 0;\n",[74,63755,63756],{"class":76,"line":20975},[74,63757,63758],{"class":84},"      list-style: none;\n",[74,63760,63761],{"class":76,"line":20981},[74,63762,63623],{"class":84},[74,63764,63765],{"class":76,"line":20992},[74,63766,63767],{"class":84},"      align-items: center;\n",[74,63769,63770],{"class":76,"line":21015},[74,63771,2149],{"class":84},[74,63773,63774],{"class":76,"line":21037},[74,63775,2363],{"emptyLinePlaceholder":2362},[74,63777,63778],{"class":76,"line":21042},[74,63779,63780],{"class":84},"    .slider-indicator li {\n",[74,63782,63783],{"class":76,"line":21048},[74,63784,63785],{"class":84},"      width: 8px;\n",[74,63787,63788],{"class":76,"line":21062},[74,63789,63790],{"class":84},"      height: 8px;\n",[74,63792,63793],{"class":76,"line":21075},[74,63794,63795],{"class":84},"      margin: 4px;\n",[74,63797,63798],{"class":76,"line":21080},[74,63799,63800],{"class":84},"      border-radius: 50%;\n",[74,63802,63803],{"class":76,"line":21094},[74,63804,63805],{"class":84},"      background: #fff;\n",[74,63807,63808],{"class":76,"line":21099},[74,63809,63810],{"class":84},"      opacity: 0.4;\n",[74,63812,63813],{"class":76,"line":21105},[74,63814,63681],{"class":84},[74,63816,63817],{"class":76,"line":21110},[74,63818,2149],{"class":84},[74,63820,63821],{"class":76,"line":21124},[74,63822,2363],{"emptyLinePlaceholder":2362},[74,63824,63825],{"class":76,"line":21129},[74,63826,63827],{"class":84},"    .slider-indicator li.active {\n",[74,63829,63830],{"class":76,"line":21134},[74,63831,63832],{"class":84},"      width: 12px;\n",[74,63834,63835],{"class":76,"line":21148},[74,63836,63837],{"class":84},"      height: 12px;\n",[74,63839,63840],{"class":76,"line":21160},[74,63841,63842],{"class":84},"      opacity: 1;\n",[74,63844,63845],{"class":76,"line":21165},[74,63846,2149],{"class":84},[74,63848,63849,63851,63853],{"class":76,"line":21178},[74,63850,56698],{"class":84},[74,63852,5090],{"class":55581},[74,63854,55588],{"class":84},[74,63856,63857,63859,63861],{"class":76,"line":21183},[74,63858,56066],{"class":84},[74,63860,55615],{"class":55581},[74,63862,55588],{"class":84},[74,63864,63865],{"class":76,"line":21188},[74,63866,2363],{"emptyLinePlaceholder":2362},[74,63868,63869,63871,63873],{"class":76,"line":21193},[74,63870,996],{"class":84},[74,63872,56081],{"class":55581},[74,63874,55588],{"class":84},[74,63876,63877,63879,63881,63883,63885,63888],{"class":76,"line":21206},[74,63878,56425],{"class":84},[74,63880,55892],{"class":55581},[74,63882,57767],{"class":1925},[74,63884,131],{"class":84},[74,63886,63887],{"class":190},"\"slider\"",[74,63889,55588],{"class":84},[74,63891,63892,63894,63896,63898,63900,63902],{"class":76,"line":21211},[74,63893,55622],{"class":84},[74,63895,55892],{"class":55581},[74,63897,57767],{"class":1925},[74,63899,131],{"class":84},[74,63901,59508],{"class":190},[74,63903,55588],{"class":84},[74,63905,63906,63908,63910,63912,63914,63917,63919,63921,63923],{"class":76,"line":36914},[74,63907,59515],{"class":84},[74,63909,1424],{"class":55581},[74,63911,59520],{"class":1925},[74,63913,131],{"class":84},[74,63915,63916],{"class":190},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[74,63918,59528],{"class":1925},[74,63920,131],{"class":84},[74,63922,11931],{"class":190},[74,63924,63408],{"class":84},[74,63926,63927,63929,63931],{"class":76,"line":36920},[74,63928,56057],{"class":84},[74,63930,55892],{"class":55581},[74,63932,55588],{"class":84},[74,63934,63935,63937,63939,63941,63943,63945],{"class":76,"line":36926},[74,63936,55622],{"class":84},[74,63938,55892],{"class":55581},[74,63940,57767],{"class":1925},[74,63942,131],{"class":84},[74,63944,59555],{"class":190},[74,63946,55588],{"class":84},[74,63948,63949,63951,63953,63956,63958],{"class":76,"line":36932},[74,63950,59515],{"class":84},[74,63952,19],{"class":55581},[74,63954,63955],{"class":84},">对人类来说会不会太超前了？\u003C\u002F",[74,63957,19],{"class":55581},[74,63959,55588],{"class":84},[74,63961,63962,63964,63966,63968,63970,63973],{"class":76,"line":36938},[74,63963,59515],{"class":84},[74,63965,1093],{"class":55581},[74,63967,57767],{"class":1925},[74,63969,131],{"class":84},[74,63971,63972],{"class":190},"\"slider-indicator\"",[74,63974,55588],{"class":84},[74,63976,63977,63979,63981,63983,63985,63988,63990,63992],{"class":76,"line":36949},[74,63978,59583],{"class":84},[74,63980,30],{"class":55581},[74,63982,57767],{"class":1925},[74,63984,131],{"class":84},[74,63986,63987],{"class":190},"\"active\"",[74,63989,59595],{"class":84},[74,63991,30],{"class":55581},[74,63993,55588],{"class":84},[74,63995,63996,63998,64000,64002,64004],{"class":76,"line":36955},[74,63997,59583],{"class":84},[74,63999,30],{"class":55581},[74,64001,59595],{"class":84},[74,64003,30],{"class":55581},[74,64005,55588],{"class":84},[74,64007,64008,64010,64012,64014,64016],{"class":76,"line":36975},[74,64009,59583],{"class":84},[74,64011,30],{"class":55581},[74,64013,59595],{"class":84},[74,64015,30],{"class":55581},[74,64017,55588],{"class":84},[74,64019,64020,64022,64024,64026,64028],{"class":76,"line":36981},[74,64021,59583],{"class":84},[74,64023,30],{"class":55581},[74,64025,59595],{"class":84},[74,64027,30],{"class":55581},[74,64029,55588],{"class":84},[74,64031,64032,64034,64036,64038,64040],{"class":76,"line":36992},[74,64033,59583],{"class":84},[74,64035,30],{"class":55581},[74,64037,59595],{"class":84},[74,64039,30],{"class":55581},[74,64041,55588],{"class":84},[74,64043,64044,64046,64048,64050,64052],{"class":76,"line":36998},[74,64045,59583],{"class":84},[74,64047,30],{"class":55581},[74,64049,59595],{"class":84},[74,64051,30],{"class":55581},[74,64053,55588],{"class":84},[74,64055,64056,64058,64060,64062,64064],{"class":76,"line":37004},[74,64057,59583],{"class":84},[74,64059,30],{"class":55581},[74,64061,59595],{"class":84},[74,64063,30],{"class":55581},[74,64065,55588],{"class":84},[74,64067,64068,64070,64072,64074,64076],{"class":76,"line":37010},[74,64069,59583],{"class":84},[74,64071,30],{"class":55581},[74,64073,59595],{"class":84},[74,64075,30],{"class":55581},[74,64077,55588],{"class":84},[74,64079,64080,64082,64084],{"class":76,"line":37016},[74,64081,59688],{"class":84},[74,64083,1093],{"class":55581},[74,64085,55588],{"class":84},[74,64087,64088,64090,64092,64094,64096,64099],{"class":76,"line":37022},[74,64089,59515],{"class":84},[74,64091,55892],{"class":55581},[74,64093,57767],{"class":1925},[74,64095,131],{"class":84},[74,64097,64098],{"class":190},"\"toggle\"",[74,64100,55588],{"class":84},[74,64102,64103,64105,64107,64109,64111,64114,64116,64119,64121,64123],{"class":76,"line":37028},[74,64104,59583],{"class":84},[74,64106,58168],{"class":55581},[74,64108,57767],{"class":1925},[74,64110,131],{"class":84},[74,64112,64113],{"class":190},"\"prev\"",[74,64115,1046],{"class":84},[74,64117,64118],{"class":134},"&lt;",[74,64120,56066],{"class":84},[74,64122,58168],{"class":55581},[74,64124,55588],{"class":84},[74,64126,64127,64129,64131,64133,64135,64138,64140,64143,64145,64147],{"class":76,"line":37034},[74,64128,59583],{"class":84},[74,64130,58168],{"class":55581},[74,64132,57767],{"class":1925},[74,64134,131],{"class":84},[74,64136,64137],{"class":190},"\"next\"",[74,64139,1046],{"class":84},[74,64141,64142],{"class":134},"&gt;",[74,64144,56066],{"class":84},[74,64146,58168],{"class":55581},[74,64148,55588],{"class":84},[74,64150,64151,64153,64155],{"class":76,"line":37054},[74,64152,59688],{"class":84},[74,64154,55892],{"class":55581},[74,64156,55588],{"class":84},[74,64158,64159,64161,64163],{"class":76,"line":37060},[74,64160,56057],{"class":84},[74,64162,55892],{"class":55581},[74,64164,55588],{"class":84},[74,64166,64167,64169,64171],{"class":76,"line":37076},[74,64168,56698],{"class":84},[74,64170,55892],{"class":55581},[74,64172,55588],{"class":84},[74,64174,64175,64177,64179],{"class":76,"line":37082},[74,64176,56425],{"class":84},[74,64178,56094],{"class":55581},[74,64180,55588],{"class":84},[74,64182,64183],{"class":76,"line":37096},[74,64184,64185],{"class":84},"    \u002F\u002F 1. 初始数据\n",[74,64187,64188],{"class":76,"line":37102},[74,64189,64190],{"class":84},"    const data = [\n",[74,64192,64193],{"class":76,"line":37117},[74,64194,64195],{"class":84},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[74,64197,64198],{"class":76,"line":37123},[74,64199,64200],{"class":84},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[74,64202,64203],{"class":76,"line":37132},[74,64204,64205],{"class":84},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[74,64207,64208],{"class":76,"line":37138},[74,64209,64210],{"class":84},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[74,64212,64213],{"class":76,"line":37147},[74,64214,64215],{"class":84},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[74,64217,64218],{"class":76,"line":37153},[74,64219,64220],{"class":84},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[74,64222,64223],{"class":76,"line":37159},[74,64224,64225],{"class":84},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[74,64227,64228],{"class":76,"line":37168},[74,64229,64230],{"class":84},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[74,64232,64233],{"class":76,"line":37174},[74,64234,57390],{"class":84},[74,64236,64237],{"class":76,"line":37185},[74,64238,64239],{"class":84},"    \u002F\u002F 获取元素\n",[74,64241,64242],{"class":76,"line":37191},[74,64243,64244],{"class":84},"    const img = document.querySelector('.slider-wrapper img')\n",[74,64246,64247],{"class":76,"line":37210},[74,64248,64249],{"class":84},"    const p = document.querySelector('.slider-footer p')\n",[74,64251,64252],{"class":76,"line":37216},[74,64253,64254],{"class":84},"    const footer = document.querySelector('.slider-footer')\n",[74,64256,64257],{"class":76,"line":37227},[74,64258,64259],{"class":84},"    \u002F\u002F 1. 右按钮业务\n",[74,64261,64262],{"class":76,"line":37233},[74,64263,64264],{"class":84},"    \u002F\u002F 1.1 获取右侧按钮 \n",[74,64266,64267],{"class":76,"line":37253},[74,64268,64269],{"class":84},"    const next = document.querySelector('.next')\n",[74,64271,64272],{"class":76,"line":37269},[74,64273,64274],{"class":84},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[74,64276,64277],{"class":76,"line":37275},[74,64278,64279],{"class":84},"    \u002F\u002F 1.2 注册点击事件\n",[74,64281,64282],{"class":76,"line":37289},[74,64283,2363],{"emptyLinePlaceholder":2362},[74,64285,64286],{"class":76,"line":37295},[74,64287,64288],{"class":84},"    next.addEventListener('click', function () {\n",[74,64290,64291],{"class":76,"line":37301},[74,64292,64293],{"class":84},"      \u002F\u002F console.log(11)\n",[74,64295,64296],{"class":76,"line":37312},[74,64297,64298],{"class":84},"      i++\n",[74,64300,64301],{"class":76,"line":37318},[74,64302,64303],{"class":84},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[74,64305,64306],{"class":76,"line":37324},[74,64307,64308],{"class":84},"      \u002F\u002F if (i >= 8) {\n",[74,64310,64311],{"class":76,"line":37334},[74,64312,64313],{"class":84},"      \u002F\u002F   i = 0\n",[74,64315,64316],{"class":76,"line":37340},[74,64317,64318],{"class":84},"      \u002F\u002F }\n",[74,64320,64321],{"class":76,"line":37351},[74,64322,64323],{"class":84},"      i = i >= data.length ? 0 : i\n",[74,64325,64326],{"class":76,"line":37357},[74,64327,64328],{"class":84},"      \u002F\u002F 1.3 得到对应的对象\n",[74,64330,64331],{"class":76,"line":37367},[74,64332,64333],{"class":84},"      \u002F\u002F console.log(data[i])\n",[74,64335,64336],{"class":76,"line":37372},[74,64337,64338],{"class":84},"      \u002F\u002F 调用函数\n",[74,64340,64341],{"class":76,"line":37378},[74,64342,64343],{"class":84},"      toggle()\n",[74,64345,64346],{"class":76,"line":37427},[74,64347,37742],{"class":84},[74,64349,64350],{"class":76,"line":37474},[74,64351,2363],{"emptyLinePlaceholder":2362},[74,64353,64354],{"class":76,"line":37479},[74,64355,64356],{"class":84},"    \u002F\u002F 2. 左侧按钮业务\n",[74,64358,64359],{"class":76,"line":37485},[74,64360,64361],{"class":84},"    \u002F\u002F 2.1 获取左侧按钮 \n",[74,64363,64364],{"class":76,"line":37504},[74,64365,64366],{"class":84},"    const prev = document.querySelector('.prev')\n",[74,64368,64369],{"class":76,"line":37510},[74,64370,64279],{"class":84},[74,64372,64373],{"class":76,"line":37530},[74,64374,64375],{"class":84},"    prev.addEventListener('click', function () {\n",[74,64377,64378],{"class":76,"line":37536},[74,64379,64380],{"class":84},"      i--\n",[74,64382,64383],{"class":76,"line":37542},[74,64384,64385],{"class":84},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[74,64387,64388],{"class":76,"line":37552},[74,64389,64390],{"class":84},"      \u002F\u002F if (i \u003C 0) {\n",[74,64392,64393],{"class":76,"line":37557},[74,64394,64395],{"class":84},"      \u002F\u002F   i = 7\n",[74,64397,64398],{"class":76,"line":37563},[74,64399,64318],{"class":84},[74,64401,64402],{"class":76,"line":37579},[74,64403,64404],{"class":84},"      i = i \u003C 0 ? data.length - 1 : i\n",[74,64406,64407],{"class":76,"line":37624},[74,64408,64328],{"class":84},[74,64410,64411],{"class":76,"line":37630},[74,64412,64333],{"class":84},[74,64414,64415],{"class":76,"line":37636},[74,64416,64338],{"class":84},[74,64418,64419],{"class":76,"line":37642},[74,64420,64343],{"class":84},[74,64422,64423],{"class":76,"line":37653},[74,64424,37742],{"class":84},[74,64426,64427],{"class":76,"line":37659},[74,64428,2363],{"emptyLinePlaceholder":2362},[74,64430,64431],{"class":76,"line":37665},[74,64432,64433],{"class":84},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[74,64435,64436],{"class":76,"line":37671},[74,64437,64438],{"class":84},"    function toggle() {\n",[74,64440,64441],{"class":76,"line":37689},[74,64442,64443],{"class":84},"      \u002F\u002F 1.4 渲染对应的数据\n",[74,64445,64446],{"class":76,"line":37703},[74,64447,64448],{"class":84},"      img.src = data[i].url\n",[74,64450,64451],{"class":76,"line":37712},[74,64452,64453],{"class":84},"      p.innerHTML = data[i].title\n",[74,64455,64456],{"class":76,"line":37721},[74,64457,64458],{"class":84},"      footer.style.backgroundColor = data[i].color\n",[74,64460,64461],{"class":76,"line":37730},[74,64462,64463],{"class":84},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[74,64465,64466],{"class":76,"line":37739},[74,64467,64468],{"class":84},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[74,64470,64471],{"class":76,"line":37745},[74,64472,64473],{"class":84},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[74,64475,64476],{"class":76,"line":37751},[74,64477,2149],{"class":84},[74,64479,64480],{"class":76,"line":37759},[74,64481,2363],{"emptyLinePlaceholder":2362},[74,64483,64484],{"class":76,"line":37764},[74,64485,64486],{"class":84},"    \u002F\u002F 3. 自动播放模块\n",[74,64488,64489],{"class":76,"line":37770},[74,64490,64491],{"class":84},"    let timerId = setInterval(function () {\n",[74,64493,64494],{"class":76,"line":37781},[74,64495,64496],{"class":84},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[74,64498,64499],{"class":76,"line":37787},[74,64500,64501],{"class":84},"      next.click()\n",[74,64503,64504],{"class":76,"line":37807},[74,64505,64506],{"class":84},"    }, 1000)\n",[74,64508,64509],{"class":76,"line":37813},[74,64510,2363],{"emptyLinePlaceholder":2362},[74,64512,64513],{"class":76,"line":37819},[74,64514,64515],{"class":84},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[74,64517,64518],{"class":76,"line":37825},[74,64519,64520],{"class":84},"    const slider = document.querySelector('.slider')\n",[74,64522,64523],{"class":76,"line":37842},[74,64524,64525],{"class":84},"    \u002F\u002F 注册事件\n",[74,64527,64528],{"class":76,"line":37848},[74,64529,64530],{"class":84},"    slider.addEventListener('mouseenter', function () {\n",[74,64532,64533],{"class":76,"line":37854},[74,64534,64535],{"class":84},"      \u002F\u002F 停止定时器\n",[74,64537,64538],{"class":76,"line":37860},[74,64539,64540],{"class":84},"      clearInterval(timerId)\n",[74,64542,64543],{"class":76,"line":37866},[74,64544,37742],{"class":84},[74,64546,64547],{"class":76,"line":37872},[74,64548,2363],{"emptyLinePlaceholder":2362},[74,64550,64551],{"class":76,"line":37899},[74,64552,64553],{"class":84},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[74,64555,64556],{"class":76,"line":37923},[74,64557,64525],{"class":84},[74,64559,64560],{"class":76,"line":37929},[74,64561,64562],{"class":84},"    slider.addEventListener('mouseleave', function () {\n",[74,64564,64565],{"class":76,"line":37935},[74,64566,64535],{"class":84},[74,64568,64569],{"class":76,"line":37941},[74,64570,64571],{"class":84},"      if (timerId) clearInterval(timerId)\n",[74,64573,64574],{"class":76,"line":37952},[74,64575,64576],{"class":84},"      \u002F\u002F 开启定时器\n",[74,64578,64579],{"class":76,"line":37963},[74,64580,64581],{"class":84},"      timerId = setInterval(function () {\n",[74,64583,64584],{"class":76,"line":37969},[74,64585,64586],{"class":84},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[74,64588,64589],{"class":76,"line":37986},[74,64590,64591],{"class":84},"        next.click()\n",[74,64593,64594],{"class":76,"line":38009},[74,64595,64596],{"class":84},"      }, 1000)\n",[74,64598,64599],{"class":76,"line":38032},[74,64600,37742],{"class":84},[74,64602,64603,64605,64607],{"class":76,"line":38038},[74,64604,56698],{"class":84},[74,64606,56094],{"class":55581},[74,64608,55588],{"class":84},[74,64610,64611,64613,64615],{"class":76,"line":38043},[74,64612,56066],{"class":84},[74,64614,56081],{"class":55581},[74,64616,55588],{"class":84},[74,64618,64619],{"class":76,"line":38052},[74,64620,2363],{"emptyLinePlaceholder":2362},[74,64622,64623,64625,64627],{"class":76,"line":38062},[74,64624,56066],{"class":84},[74,64626,54916],{"class":55581},[74,64628,55588],{"class":84},[26277,64630,64632],{"id":64631},"_3252-焦点事件","3.2.5.2 焦点事件",[19,64634,64635],{},"小米搜索框案例：",[64,64637,64639],{"className":54914,"code":64638,"language":54916,"meta":69,"style":69},"\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",[71,64640,64641,64651,64665,64669,64677,64691,64711,64731,64743,64751,64757,64767,64777,64789,64793,64797,64804,64808,64819,64823,64827,64834,64845,64858,64872,64876,64880,64889,64901,64913,64927,64940,64953,64971,64982,64986,64990,64999,65016,65020,65024,65031,65041,65051,65062,65075,65087,65103,65114,65126,65130,65134,65142,65153,65170,65182,65194,65205,65209,65213,65224,65235,65239,65247,65251,65259,65263,65271,65286,65309,65324,65355,65382,65409,65436,65463,65490,65517,65526,65534,65542,65547,65567,65587,65592,65597,65615,65620,65630,65635,65649,65654,65659,65676,65685,65697,65701,65709,65717,65721],{"__ignoreMap":69},[74,64642,64643,64645,64647,64649],{"class":76,"line":77},[74,64644,55578],{"class":84},[74,64646,55582],{"class":55581},[74,64648,55585],{"class":1925},[74,64650,55588],{"class":84},[74,64652,64653,64655,64657,64659,64661,64663],{"class":76,"line":94},[74,64654,996],{"class":84},[74,64656,54916],{"class":55581},[74,64658,55597],{"class":1925},[74,64660,131],{"class":84},[74,64662,55602],{"class":190},[74,64664,55588],{"class":84},[74,64666,64667],{"class":76,"line":1141},[74,64668,2363],{"emptyLinePlaceholder":2362},[74,64670,64671,64673,64675],{"class":76,"line":1156},[74,64672,996],{"class":84},[74,64674,55615],{"class":55581},[74,64676,55588],{"class":84},[74,64678,64679,64681,64683,64685,64687,64689],{"class":76,"line":1162},[74,64680,55622],{"class":84},[74,64682,55625],{"class":55581},[74,64684,55628],{"class":1925},[74,64686,131],{"class":84},[74,64688,55633],{"class":190},[74,64690,55588],{"class":84},[74,64692,64693,64695,64697,64699,64701,64703,64705,64707,64709],{"class":76,"line":1176},[74,64694,55622],{"class":84},[74,64696,55625],{"class":55581},[74,64698,55644],{"class":1925},[74,64700,131],{"class":84},[74,64702,55649],{"class":190},[74,64704,55652],{"class":1925},[74,64706,131],{"class":84},[74,64708,55657],{"class":190},[74,64710,55588],{"class":84},[74,64712,64713,64715,64717,64719,64721,64723,64725,64727,64729],{"class":76,"line":1182},[74,64714,55622],{"class":84},[74,64716,55625],{"class":55581},[74,64718,19199],{"class":1925},[74,64720,131],{"class":84},[74,64722,55672],{"class":190},[74,64724,55652],{"class":1925},[74,64726,131],{"class":84},[74,64728,55679],{"class":190},[74,64730,55588],{"class":84},[74,64732,64733,64735,64737,64739,64741],{"class":76,"line":1273},[74,64734,55622],{"class":84},[74,64736,55688],{"class":55581},[74,64738,55691],{"class":84},[74,64740,55688],{"class":55581},[74,64742,55588],{"class":84},[74,64744,64745,64747,64749],{"class":76,"line":1279},[74,64746,55622],{"class":84},[74,64748,5090],{"class":55581},[74,64750,55588],{"class":84},[74,64752,64753,64755],{"class":76,"line":1291},[74,64754,55708],{"class":55581},[74,64756,19851],{"class":84},[74,64758,64759,64761,64763,64765],{"class":76,"line":1574},[74,64760,55715],{"class":134},[74,64762,55718],{"class":84},[74,64764,277],{"class":134},[74,64766,1252],{"class":84},[74,64768,64769,64771,64773,64775],{"class":76,"line":1579},[74,64770,55727],{"class":134},[74,64772,55718],{"class":84},[74,64774,277],{"class":134},[74,64776,1252],{"class":84},[74,64778,64779,64782,64784,64787],{"class":76,"line":1585},[74,64780,64781],{"class":134},"            box-sizing",[74,64783,55718],{"class":84},[74,64785,64786],{"class":134},"border-box",[74,64788,1252],{"class":84},[74,64790,64791],{"class":76,"line":1590},[74,64792,2492],{"class":84},[74,64794,64795],{"class":76,"line":1604},[74,64796,2363],{"emptyLinePlaceholder":2362},[74,64798,64799,64802],{"class":76,"line":1609},[74,64800,64801],{"class":55581},"        ul",[74,64803,19851],{"class":84},[74,64805,64806],{"class":76,"line":1615},[74,64807,2363],{"emptyLinePlaceholder":2362},[74,64809,64810,64813,64815,64817],{"class":76,"line":1636},[74,64811,64812],{"class":134},"            list-style",[74,64814,55718],{"class":84},[74,64816,59018],{"class":134},[74,64818,1252],{"class":84},[74,64820,64821],{"class":76,"line":1641},[74,64822,2492],{"class":84},[74,64824,64825],{"class":76,"line":1655},[74,64826,2363],{"emptyLinePlaceholder":2362},[74,64828,64829,64832],{"class":76,"line":1660},[74,64830,64831],{"class":1925},"        .mi",[74,64833,19851],{"class":84},[74,64835,64836,64839,64841,64843],{"class":76,"line":1689},[74,64837,64838],{"class":134},"            position",[74,64840,55718],{"class":84},[74,64842,59045],{"class":134},[74,64844,1252],{"class":84},[74,64846,64847,64849,64851,64854,64856],{"class":76,"line":1694},[74,64848,55765],{"class":134},[74,64850,55718],{"class":84},[74,64852,64853],{"class":134},"223",[74,64855,55773],{"class":80},[74,64857,1252],{"class":84},[74,64859,64860,64862,64864,64866,64868,64870],{"class":76,"line":1711},[74,64861,55715],{"class":134},[74,64863,55718],{"class":84},[74,64865,397],{"class":134},[74,64867,55773],{"class":80},[74,64869,55837],{"class":134},[74,64871,1252],{"class":84},[74,64873,64874],{"class":76,"line":1716},[74,64875,2492],{"class":84},[74,64877,64878],{"class":76,"line":1721},[74,64879,2363],{"emptyLinePlaceholder":2362},[74,64881,64882,64884,64887],{"class":76,"line":1726},[74,64883,64831],{"class":1925},[74,64885,64886],{"class":55581}," input",[74,64888,19851],{"class":84},[74,64890,64891,64893,64895,64897,64899],{"class":76,"line":1740},[74,64892,55765],{"class":134},[74,64894,55718],{"class":84},[74,64896,64853],{"class":134},[74,64898,55773],{"class":80},[74,64900,1252],{"class":84},[74,64902,64903,64905,64907,64909,64911],{"class":76,"line":1745},[74,64904,55780],{"class":134},[74,64906,55718],{"class":84},[74,64908,693],{"class":134},[74,64910,55773],{"class":80},[74,64912,1252],{"class":84},[74,64914,64915,64917,64919,64921,64923,64925],{"class":76,"line":2540},[74,64916,55727],{"class":134},[74,64918,55718],{"class":84},[74,64920,277],{"class":134},[74,64922,2000],{"class":134},[74,64924,55773],{"class":80},[74,64926,1252],{"class":84},[74,64928,64929,64932,64934,64936,64938],{"class":76,"line":2554},[74,64930,64931],{"class":134},"            font-size",[74,64933,55718],{"class":84},[74,64935,635],{"class":134},[74,64937,55773],{"class":80},[74,64939,1252],{"class":84},[74,64941,64942,64945,64947,64949,64951],{"class":76,"line":2562},[74,64943,64944],{"class":134},"            line-height",[74,64946,55718],{"class":84},[74,64948,693],{"class":134},[74,64950,55773],{"class":80},[74,64952,1252],{"class":84},[74,64954,64955,64958,64960,64962,64964,64966,64969],{"class":76,"line":2567},[74,64956,64957],{"class":134},"            border",[74,64959,55718],{"class":84},[74,64961,303],{"class":134},[74,64963,55773],{"class":80},[74,64965,55802],{"class":134},[74,64967,64968],{"class":134}," #e0e0e0",[74,64970,1252],{"class":84},[74,64972,64973,64976,64978,64980],{"class":76,"line":2573},[74,64974,64975],{"class":134},"            outline",[74,64977,55718],{"class":84},[74,64979,59018],{"class":134},[74,64981,1252],{"class":84},[74,64983,64984],{"class":76,"line":2579},[74,64985,2492],{"class":84},[74,64987,64988],{"class":76,"line":2584},[74,64989,2363],{"emptyLinePlaceholder":2362},[74,64991,64992,64994,64997],{"class":76,"line":12227},[74,64993,64831],{"class":1925},[74,64995,64996],{"class":1925}," .search",[74,64998,19851],{"class":84},[74,65000,65001,65003,65005,65007,65009,65011,65014],{"class":76,"line":12251},[74,65002,64957],{"class":134},[74,65004,55718],{"class":84},[74,65006,303],{"class":134},[74,65008,55773],{"class":80},[74,65010,55802],{"class":134},[74,65012,65013],{"class":134}," #ff6700",[74,65015,1252],{"class":84},[74,65017,65018],{"class":76,"line":12256},[74,65019,2492],{"class":84},[74,65021,65022],{"class":76,"line":12262},[74,65023,2363],{"emptyLinePlaceholder":2362},[74,65025,65026,65029],{"class":76,"line":12289},[74,65027,65028],{"class":1925},"        .result-list",[74,65030,19851],{"class":84},[74,65032,65033,65035,65037,65039],{"class":76,"line":12294},[74,65034,55753],{"class":134},[74,65036,55718],{"class":84},[74,65038,59018],{"class":134},[74,65040,1252],{"class":84},[74,65042,65043,65045,65047,65049],{"class":76,"line":12300},[74,65044,64838],{"class":134},[74,65046,55718],{"class":84},[74,65048,59112],{"class":134},[74,65050,1252],{"class":84},[74,65052,65053,65056,65058,65060],{"class":76,"line":12312},[74,65054,65055],{"class":134},"            left",[74,65057,55718],{"class":84},[74,65059,277],{"class":134},[74,65061,1252],{"class":84},[74,65063,65064,65067,65069,65071,65073],{"class":76,"line":12324},[74,65065,65066],{"class":134},"            top",[74,65068,55718],{"class":84},[74,65070,693],{"class":134},[74,65072,55773],{"class":80},[74,65074,1252],{"class":84},[74,65076,65077,65079,65081,65083,65085],{"class":76,"line":12336},[74,65078,55765],{"class":134},[74,65080,55718],{"class":84},[74,65082,64853],{"class":134},[74,65084,55773],{"class":80},[74,65086,1252],{"class":84},[74,65088,65089,65091,65093,65095,65097,65099,65101],{"class":76,"line":13995},[74,65090,64957],{"class":134},[74,65092,55718],{"class":84},[74,65094,303],{"class":134},[74,65096,55773],{"class":80},[74,65098,55802],{"class":134},[74,65100,65013],{"class":134},[74,65102,1252],{"class":84},[74,65104,65105,65108,65110,65112],{"class":76,"line":14020},[74,65106,65107],{"class":134},"            border-top",[74,65109,55718],{"class":84},[74,65111,277],{"class":134},[74,65113,1252],{"class":84},[74,65115,65116,65119,65121,65124],{"class":76,"line":14043},[74,65117,65118],{"class":134},"            background",[74,65120,55718],{"class":84},[74,65122,65123],{"class":134},"#fff",[74,65125,1252],{"class":84},[74,65127,65128],{"class":76,"line":14067},[74,65129,2492],{"class":84},[74,65131,65132],{"class":76,"line":14072},[74,65133,2363],{"emptyLinePlaceholder":2362},[74,65135,65136,65138,65140],{"class":76,"line":14077},[74,65137,65028],{"class":1925},[74,65139,1360],{"class":55581},[74,65141,19851],{"class":84},[74,65143,65144,65146,65148,65151],{"class":76,"line":14082},[74,65145,55753],{"class":134},[74,65147,55718],{"class":84},[74,65149,65150],{"class":134},"block",[74,65152,1252],{"class":84},[74,65154,65155,65157,65159,65161,65163,65166,65168],{"class":76,"line":14091},[74,65156,55727],{"class":134},[74,65158,55718],{"class":84},[74,65160,430],{"class":134},[74,65162,55773],{"class":80},[74,65164,65165],{"class":134}," 15",[74,65167,55773],{"class":80},[74,65169,1252],{"class":84},[74,65171,65172,65174,65176,65178,65180],{"class":76,"line":14096},[74,65173,64931],{"class":134},[74,65175,55718],{"class":84},[74,65177,584],{"class":134},[74,65179,55773],{"class":80},[74,65181,1252],{"class":84},[74,65183,65184,65187,65189,65192],{"class":76,"line":14102},[74,65185,65186],{"class":134},"            color",[74,65188,55718],{"class":84},[74,65190,65191],{"class":134},"#424242",[74,65193,1252],{"class":84},[74,65195,65196,65199,65201,65203],{"class":76,"line":14123},[74,65197,65198],{"class":134},"            text-decoration",[74,65200,55718],{"class":84},[74,65202,59018],{"class":134},[74,65204,1252],{"class":84},[74,65206,65207],{"class":76,"line":14129},[74,65208,2492],{"class":84},[74,65210,65211],{"class":76,"line":14143},[74,65212,2363],{"emptyLinePlaceholder":2362},[74,65214,65215,65217,65219,65222],{"class":76,"line":14149},[74,65216,65028],{"class":1925},[74,65218,1360],{"class":55581},[74,65220,65221],{"class":1925},":hover",[74,65223,19851],{"class":84},[74,65225,65226,65228,65230,65233],{"class":76,"line":14176},[74,65227,55921],{"class":134},[74,65229,55718],{"class":84},[74,65231,65232],{"class":134},"#eee",[74,65234,1252],{"class":84},[74,65236,65237],{"class":76,"line":14185},[74,65238,2492],{"class":84},[74,65240,65241,65243,65245],{"class":76,"line":14191},[74,65242,56057],{"class":84},[74,65244,5090],{"class":55581},[74,65246,55588],{"class":84},[74,65248,65249],{"class":76,"line":14199},[74,65250,2363],{"emptyLinePlaceholder":2362},[74,65252,65253,65255,65257],{"class":76,"line":14204},[74,65254,56066],{"class":84},[74,65256,55615],{"class":55581},[74,65258,55588],{"class":84},[74,65260,65261],{"class":76,"line":20883},[74,65262,2363],{"emptyLinePlaceholder":2362},[74,65264,65265,65267,65269],{"class":76,"line":20889},[74,65266,996],{"class":84},[74,65268,56081],{"class":55581},[74,65270,55588],{"class":84},[74,65272,65273,65275,65277,65279,65281,65284],{"class":76,"line":20912},[74,65274,55622],{"class":84},[74,65276,55892],{"class":55581},[74,65278,57767],{"class":1925},[74,65280,131],{"class":84},[74,65282,65283],{"class":190},"\"mi\"",[74,65285,55588],{"class":84},[74,65287,65288,65290,65292,65294,65296,65299,65302,65304,65307],{"class":76,"line":20918},[74,65289,59583],{"class":84},[74,65291,58102],{"class":55581},[74,65293,58105],{"class":1925},[74,65295,131],{"class":84},[74,65297,65298],{"class":190},"\"search\"",[74,65300,65301],{"class":1925}," placeholder",[74,65303,131],{"class":84},[74,65305,65306],{"class":190},"\"小米笔记本\"",[74,65308,55588],{"class":84},[74,65310,65311,65313,65315,65317,65319,65322],{"class":76,"line":20941},[74,65312,59583],{"class":84},[74,65314,1093],{"class":55581},[74,65316,57767],{"class":1925},[74,65318,131],{"class":84},[74,65320,65321],{"class":190},"\"result-list\"",[74,65323,55588],{"class":84},[74,65325,65326,65329,65331,65334,65336,65339,65341,65344,65347,65349,65351,65353],{"class":76,"line":20955},[74,65327,65328],{"class":84},"            \u003C",[74,65330,30],{"class":55581},[74,65332,65333],{"class":84},">\u003C",[74,65335,324],{"class":55581},[74,65337,65338],{"class":1925}," href",[74,65340,131],{"class":84},[74,65342,65343],{"class":190},"\"#\"",[74,65345,65346],{"class":84},">全部商品\u003C\u002F",[74,65348,324],{"class":55581},[74,65350,59595],{"class":84},[74,65352,30],{"class":55581},[74,65354,55588],{"class":84},[74,65356,65357,65359,65361,65363,65365,65367,65369,65371,65374,65376,65378,65380],{"class":76,"line":20975},[74,65358,65328],{"class":84},[74,65360,30],{"class":55581},[74,65362,65333],{"class":84},[74,65364,324],{"class":55581},[74,65366,65338],{"class":1925},[74,65368,131],{"class":84},[74,65370,65343],{"class":190},[74,65372,65373],{"class":84},">小米11\u003C\u002F",[74,65375,324],{"class":55581},[74,65377,59595],{"class":84},[74,65379,30],{"class":55581},[74,65381,55588],{"class":84},[74,65383,65384,65386,65388,65390,65392,65394,65396,65398,65401,65403,65405,65407],{"class":76,"line":20981},[74,65385,65328],{"class":84},[74,65387,30],{"class":55581},[74,65389,65333],{"class":84},[74,65391,324],{"class":55581},[74,65393,65338],{"class":1925},[74,65395,131],{"class":84},[74,65397,65343],{"class":190},[74,65399,65400],{"class":84},">小米10S\u003C\u002F",[74,65402,324],{"class":55581},[74,65404,59595],{"class":84},[74,65406,30],{"class":55581},[74,65408,55588],{"class":84},[74,65410,65411,65413,65415,65417,65419,65421,65423,65425,65428,65430,65432,65434],{"class":76,"line":20992},[74,65412,65328],{"class":84},[74,65414,30],{"class":55581},[74,65416,65333],{"class":84},[74,65418,324],{"class":55581},[74,65420,65338],{"class":1925},[74,65422,131],{"class":84},[74,65424,65343],{"class":190},[74,65426,65427],{"class":84},">小米笔记本\u003C\u002F",[74,65429,324],{"class":55581},[74,65431,59595],{"class":84},[74,65433,30],{"class":55581},[74,65435,55588],{"class":84},[74,65437,65438,65440,65442,65444,65446,65448,65450,65452,65455,65457,65459,65461],{"class":76,"line":21015},[74,65439,65328],{"class":84},[74,65441,30],{"class":55581},[74,65443,65333],{"class":84},[74,65445,324],{"class":55581},[74,65447,65338],{"class":1925},[74,65449,131],{"class":84},[74,65451,65343],{"class":190},[74,65453,65454],{"class":84},">小米手机\u003C\u002F",[74,65456,324],{"class":55581},[74,65458,59595],{"class":84},[74,65460,30],{"class":55581},[74,65462,55588],{"class":84},[74,65464,65465,65467,65469,65471,65473,65475,65477,65479,65482,65484,65486,65488],{"class":76,"line":21037},[74,65466,65328],{"class":84},[74,65468,30],{"class":55581},[74,65470,65333],{"class":84},[74,65472,324],{"class":55581},[74,65474,65338],{"class":1925},[74,65476,131],{"class":84},[74,65478,65343],{"class":190},[74,65480,65481],{"class":84},">黑鲨4\u003C\u002F",[74,65483,324],{"class":55581},[74,65485,59595],{"class":84},[74,65487,30],{"class":55581},[74,65489,55588],{"class":84},[74,65491,65492,65494,65496,65498,65500,65502,65504,65506,65509,65511,65513,65515],{"class":76,"line":21042},[74,65493,65328],{"class":84},[74,65495,30],{"class":55581},[74,65497,65333],{"class":84},[74,65499,324],{"class":55581},[74,65501,65338],{"class":1925},[74,65503,131],{"class":84},[74,65505,65343],{"class":190},[74,65507,65508],{"class":84},">空调\u003C\u002F",[74,65510,324],{"class":55581},[74,65512,59595],{"class":84},[74,65514,30],{"class":55581},[74,65516,55588],{"class":84},[74,65518,65519,65522,65524],{"class":76,"line":21048},[74,65520,65521],{"class":84},"        \u003C\u002F",[74,65523,1093],{"class":55581},[74,65525,55588],{"class":84},[74,65527,65528,65530,65532],{"class":76,"line":21062},[74,65529,56057],{"class":84},[74,65531,55892],{"class":55581},[74,65533,55588],{"class":84},[74,65535,65536,65538,65540],{"class":76,"line":21075},[74,65537,55622],{"class":84},[74,65539,56094],{"class":55581},[74,65541,55588],{"class":84},[74,65543,65544],{"class":76,"line":21080},[74,65545,65546],{"class":144},"        \u002F\u002F 1. 获取元素\n",[74,65548,65549,65552,65554,65556,65558,65560,65562,65565],{"class":76,"line":21094},[74,65550,65551],{"class":80},"        const",[74,65553,64886],{"class":134},[74,65555,17843],{"class":80},[74,65557,58677],{"class":84},[74,65559,58680],{"class":1925},[74,65561,85],{"class":84},[74,65563,65564],{"class":190},"'[type=search]'",[74,65566,91],{"class":84},[74,65568,65569,65571,65574,65576,65578,65580,65582,65585],{"class":76,"line":21099},[74,65570,65551],{"class":80},[74,65572,65573],{"class":134}," ul",[74,65575,17843],{"class":80},[74,65577,58677],{"class":84},[74,65579,58680],{"class":1925},[74,65581,85],{"class":84},[74,65583,65584],{"class":190},"'.result-list'",[74,65586,91],{"class":84},[74,65588,65589],{"class":76,"line":21105},[74,65590,65591],{"class":144},"        \u002F\u002F console.log(input)\n",[74,65593,65594],{"class":76,"line":21110},[74,65595,65596],{"class":144},"        \u002F\u002F 2. 监听事件 获得焦点\n",[74,65598,65599,65602,65604,65606,65609,65611,65613],{"class":76,"line":21124},[74,65600,65601],{"class":84},"        input.",[74,65603,62094],{"class":1925},[74,65605,85],{"class":84},[74,65607,65608],{"class":190},"'focus'",[74,65610,16714],{"class":84},[74,65612,58730],{"class":80},[74,65614,58733],{"class":84},[74,65616,65617],{"class":76,"line":21129},[74,65618,65619],{"class":144},"            \u002F\u002F ul显示\n",[74,65621,65622,65625,65627],{"class":76,"line":21134},[74,65623,65624],{"class":84},"            ul.style.display ",[74,65626,131],{"class":80},[74,65628,65629],{"class":190}," 'block'\n",[74,65631,65632],{"class":76,"line":21148},[74,65633,65634],{"class":144},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[74,65636,65637,65640,65642,65644,65647],{"class":76,"line":21160},[74,65638,65639],{"class":84},"            input.classList.",[74,65641,9613],{"class":1925},[74,65643,85],{"class":84},[74,65645,65646],{"class":190},"'search'",[74,65648,91],{"class":84},[74,65650,65651],{"class":76,"line":21165},[74,65652,65653],{"class":84},"        })\n",[74,65655,65656],{"class":76,"line":21178},[74,65657,65658],{"class":144},"        \u002F\u002F 3. 监听事件 失去焦点\n",[74,65660,65661,65663,65665,65667,65670,65672,65674],{"class":76,"line":21183},[74,65662,65601],{"class":84},[74,65664,62094],{"class":1925},[74,65666,85],{"class":84},[74,65668,65669],{"class":190},"'blur'",[74,65671,16714],{"class":84},[74,65673,58730],{"class":80},[74,65675,58733],{"class":84},[74,65677,65678,65680,65682],{"class":76,"line":21188},[74,65679,65624],{"class":84},[74,65681,131],{"class":80},[74,65683,65684],{"class":190}," 'none'\n",[74,65686,65687,65689,65691,65693,65695],{"class":76,"line":21193},[74,65688,65639],{"class":84},[74,65690,61287],{"class":1925},[74,65692,85],{"class":84},[74,65694,65646],{"class":190},[74,65696,91],{"class":84},[74,65698,65699],{"class":76,"line":21206},[74,65700,65653],{"class":84},[74,65702,65703,65705,65707],{"class":76,"line":21211},[74,65704,56057],{"class":84},[74,65706,56094],{"class":55581},[74,65708,55588],{"class":84},[74,65710,65711,65713,65715],{"class":76,"line":36914},[74,65712,56066],{"class":84},[74,65714,56081],{"class":55581},[74,65716,55588],{"class":84},[74,65718,65719],{"class":76,"line":36920},[74,65720,2363],{"emptyLinePlaceholder":2362},[74,65722,65723,65725,65727],{"class":76,"line":36926},[74,65724,56066],{"class":84},[74,65726,54916],{"class":55581},[74,65728,55588],{"class":84},[26277,65730,65732],{"id":65731},"_3253-键盘事件","3.2.5.3 键盘事件",[19,65734,65735],{},"评论字数统计案例",[19,65737,65738],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,65740,65741],{},"牢记focus伪类选择器",[55625,65743],{"charSet":65744},"UTF-8",[55625,65746],{"name":65747,"content":65748},"viewport","width=device-width, initial-scale=1.0",[55688,65750,65751],{},"Document",[5090,65753,65754],{},"\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",[58102,65756],{"type":9466},[1093,65758,65759,65762],{},[30,65760,65761],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[30,65763,65764],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[64,65766,65768],{"className":54914,"code":65767,"language":54916,"meta":69,"style":69},"\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",[71,65769,65770,65780,65794,65798,65806,65820,65840,65860,65873,65881,65888,65901,65915,65925,65935,65939,65943,65950,65962,65974,65986,65998,66027,66040,66044,66048,66057,66068,66080,66091,66102,66114,66125,66137,66153,66165,66169,66173,66184,66195,66205,66217,66221,66225,66233,66244,66254,66265,66277,66290,66302,66314,66318,66322,66331,66343,66354,66367,66378,66392,66396,66400,66407,66419,66431,66441,66445,66449,66458,66470,66480,66484,66488,66499,66509,66528,66541,66545,66549,66559,66569,66573,66577,66588,66599,66611,66623,66627,66631,66642,66653,66667,66671,66675,66686,66696,66708,66712,66720,66728,66732,66740,66755,66774,66814,66827,66835,66849,66869,66877,66892,66915,66933,66948,66968,66988,67008,67016,67024,67032,67040,67060,67080,67085,67102,67111,67115,67120,67136,67144,67148,67153,67170,67175,67200,67204,67208,67213,67218,67226,67234,67238],{"__ignoreMap":69},[74,65771,65772,65774,65776,65778],{"class":76,"line":77},[74,65773,55578],{"class":84},[74,65775,55582],{"class":55581},[74,65777,55585],{"class":1925},[74,65779,55588],{"class":84},[74,65781,65782,65784,65786,65788,65790,65792],{"class":76,"line":94},[74,65783,996],{"class":84},[74,65785,54916],{"class":55581},[74,65787,55597],{"class":1925},[74,65789,131],{"class":84},[74,65791,55602],{"class":190},[74,65793,55588],{"class":84},[74,65795,65796],{"class":76,"line":1141},[74,65797,2363],{"emptyLinePlaceholder":2362},[74,65799,65800,65802,65804],{"class":76,"line":1156},[74,65801,996],{"class":84},[74,65803,55615],{"class":55581},[74,65805,55588],{"class":84},[74,65807,65808,65810,65812,65814,65816,65818],{"class":76,"line":1162},[74,65809,56425],{"class":84},[74,65811,55625],{"class":55581},[74,65813,55628],{"class":1925},[74,65815,131],{"class":84},[74,65817,55633],{"class":190},[74,65819,55588],{"class":84},[74,65821,65822,65824,65826,65828,65830,65832,65834,65836,65838],{"class":76,"line":1176},[74,65823,56425],{"class":84},[74,65825,55625],{"class":55581},[74,65827,55644],{"class":1925},[74,65829,131],{"class":84},[74,65831,55649],{"class":190},[74,65833,55652],{"class":1925},[74,65835,131],{"class":84},[74,65837,55657],{"class":190},[74,65839,55588],{"class":84},[74,65841,65842,65844,65846,65848,65850,65852,65854,65856,65858],{"class":76,"line":1182},[74,65843,56425],{"class":84},[74,65845,55625],{"class":55581},[74,65847,19199],{"class":1925},[74,65849,131],{"class":84},[74,65851,55672],{"class":190},[74,65853,55652],{"class":1925},[74,65855,131],{"class":84},[74,65857,55679],{"class":190},[74,65859,55588],{"class":84},[74,65861,65862,65864,65866,65869,65871],{"class":76,"line":1273},[74,65863,56425],{"class":84},[74,65865,55688],{"class":55581},[74,65867,65868],{"class":84},">评论回车发布\u003C\u002F",[74,65870,55688],{"class":55581},[74,65872,55588],{"class":84},[74,65874,65875,65877,65879],{"class":76,"line":1279},[74,65876,56425],{"class":84},[74,65878,5090],{"class":55581},[74,65880,55588],{"class":84},[74,65882,65883,65886],{"class":76,"line":1291},[74,65884,65885],{"class":1925},"    .wrapper",[74,65887,19851],{"class":84},[74,65889,65890,65893,65895,65897,65899],{"class":76,"line":1574},[74,65891,65892],{"class":134},"      min-width",[74,65894,55718],{"class":84},[74,65896,3950],{"class":134},[74,65898,55773],{"class":80},[74,65900,1252],{"class":84},[74,65902,65903,65906,65908,65911,65913],{"class":76,"line":1579},[74,65904,65905],{"class":134},"      max-width",[74,65907,55718],{"class":84},[74,65909,65910],{"class":134},"800",[74,65912,55773],{"class":80},[74,65914,1252],{"class":84},[74,65916,65917,65919,65921,65923],{"class":76,"line":1585},[74,65918,59290],{"class":134},[74,65920,55718],{"class":84},[74,65922,55758],{"class":134},[74,65924,1252],{"class":84},[74,65926,65927,65929,65931,65933],{"class":76,"line":1590},[74,65928,59301],{"class":134},[74,65930,55718],{"class":84},[74,65932,55861],{"class":134},[74,65934,1252],{"class":84},[74,65936,65937],{"class":76,"line":1604},[74,65938,2149],{"class":84},[74,65940,65941],{"class":76,"line":1609},[74,65942,2363],{"emptyLinePlaceholder":2362},[74,65944,65945,65948],{"class":76,"line":1615},[74,65946,65947],{"class":1925},"    .avatar",[74,65949,19851],{"class":84},[74,65951,65952,65954,65956,65958,65960],{"class":76,"line":1636},[74,65953,59052],{"class":134},[74,65955,55718],{"class":84},[74,65957,693],{"class":134},[74,65959,55773],{"class":80},[74,65961,1252],{"class":84},[74,65963,65964,65966,65968,65970,65972],{"class":76,"line":1641},[74,65965,59066],{"class":134},[74,65967,55718],{"class":84},[74,65969,693],{"class":134},[74,65971,55773],{"class":80},[74,65973,1252],{"class":84},[74,65975,65976,65978,65980,65982,65984],{"class":76,"line":1655},[74,65977,59415],{"class":134},[74,65979,55718],{"class":84},[74,65981,742],{"class":134},[74,65983,414],{"class":80},[74,65985,1252],{"class":84},[74,65987,65988,65991,65993,65996],{"class":76,"line":1660},[74,65989,65990],{"class":134},"      overflow",[74,65992,55718],{"class":84},[74,65994,65995],{"class":134},"hidden",[74,65997,1252],{"class":84},[74,65999,66000,66003,66005,66008,66010,66013,66015,66018,66020,66022,66025],{"class":76,"line":1689},[74,66001,66002],{"class":134},"      background",[74,66004,55718],{"class":84},[74,66006,66007],{"class":134},"url",[74,66009,85],{"class":84},[74,66011,66012],{"class":9495},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[74,66014,17993],{"class":84},[74,66016,66017],{"class":134},"no-repeat",[74,66019,21423],{"class":134},[74,66021,29259],{"class":84},[74,66023,66024],{"class":134},"cover",[74,66026,1252],{"class":84},[74,66028,66029,66032,66034,66036,66038],{"class":76,"line":1694},[74,66030,66031],{"class":134},"      margin-right",[74,66033,55718],{"class":84},[74,66035,786],{"class":134},[74,66037,55773],{"class":80},[74,66039,1252],{"class":84},[74,66041,66042],{"class":76,"line":1711},[74,66043,2149],{"class":84},[74,66045,66046],{"class":76,"line":1716},[74,66047,2363],{"emptyLinePlaceholder":2362},[74,66049,66050,66052,66055],{"class":76,"line":1721},[74,66051,65885],{"class":1925},[74,66053,66054],{"class":55581}," textarea",[74,66056,19851],{"class":84},[74,66058,66059,66062,66064,66066],{"class":76,"line":1726},[74,66060,66061],{"class":134},"      outline",[74,66063,55718],{"class":84},[74,66065,59018],{"class":134},[74,66067,1252],{"class":84},[74,66069,66070,66073,66075,66078],{"class":76,"line":1740},[74,66071,66072],{"class":134},"      border-color",[74,66074,55718],{"class":84},[74,66076,66077],{"class":134},"transparent",[74,66079,1252],{"class":84},[74,66081,66082,66085,66087,66089],{"class":76,"line":1745},[74,66083,66084],{"class":134},"      resize",[74,66086,55718],{"class":84},[74,66088,59018],{"class":134},[74,66090,1252],{"class":84},[74,66092,66093,66095,66097,66100],{"class":76,"line":2540},[74,66094,66002],{"class":134},[74,66096,55718],{"class":84},[74,66098,66099],{"class":134},"#f5f5f5",[74,66101,1252],{"class":84},[74,66103,66104,66106,66108,66110,66112],{"class":76,"line":2554},[74,66105,59415],{"class":134},[74,66107,55718],{"class":84},[74,66109,379],{"class":134},[74,66111,55773],{"class":80},[74,66113,1252],{"class":84},[74,66115,66116,66119,66121,66123],{"class":76,"line":2562},[74,66117,66118],{"class":134},"      flex",[74,66120,55718],{"class":84},[74,66122,303],{"class":134},[74,66124,1252],{"class":84},[74,66126,66127,66129,66131,66133,66135],{"class":76,"line":2567},[74,66128,58976],{"class":134},[74,66130,55718],{"class":84},[74,66132,532],{"class":134},[74,66134,55773],{"class":80},[74,66136,1252],{"class":84},[74,66138,66139,66142,66144,66146,66149,66151],{"class":76,"line":2573},[74,66140,66141],{"class":134},"      transition",[74,66143,55718],{"class":84},[74,66145,32402],{"class":134},[74,66147,66148],{"class":134}," 0.5",[74,66150,781],{"class":80},[74,66152,1252],{"class":84},[74,66154,66155,66157,66159,66161,66163],{"class":76,"line":2579},[74,66156,59066],{"class":134},[74,66158,55718],{"class":84},[74,66160,1037],{"class":134},[74,66162,55773],{"class":80},[74,66164,1252],{"class":84},[74,66166,66167],{"class":76,"line":2584},[74,66168,2149],{"class":84},[74,66170,66171],{"class":76,"line":12227},[74,66172,2363],{"emptyLinePlaceholder":2362},[74,66174,66175,66177,66179,66182],{"class":76,"line":12251},[74,66176,65885],{"class":1925},[74,66178,66054],{"class":55581},[74,66180,66181],{"class":1925},":focus",[74,66183,19851],{"class":84},[74,66185,66186,66188,66190,66193],{"class":76,"line":12256},[74,66187,66072],{"class":134},[74,66189,55718],{"class":84},[74,66191,66192],{"class":134},"#e4e4e4",[74,66194,1252],{"class":84},[74,66196,66197,66199,66201,66203],{"class":76,"line":12262},[74,66198,66002],{"class":134},[74,66200,55718],{"class":84},[74,66202,65123],{"class":134},[74,66204,1252],{"class":84},[74,66206,66207,66209,66211,66213,66215],{"class":76,"line":12289},[74,66208,59066],{"class":134},[74,66210,55718],{"class":84},[74,66212,742],{"class":134},[74,66214,55773],{"class":80},[74,66216,1252],{"class":84},[74,66218,66219],{"class":76,"line":12294},[74,66220,2149],{"class":84},[74,66222,66223],{"class":76,"line":12300},[74,66224,2363],{"emptyLinePlaceholder":2362},[74,66226,66227,66229,66231],{"class":76,"line":12312},[74,66228,65885],{"class":1925},[74,66230,61748],{"class":55581},[74,66232,19851],{"class":84},[74,66234,66235,66237,66239,66242],{"class":76,"line":12324},[74,66236,66002],{"class":134},[74,66238,55718],{"class":84},[74,66240,66241],{"class":134},"#00aeec",[74,66243,1252],{"class":84},[74,66245,66246,66248,66250,66252],{"class":76,"line":12336},[74,66247,61697],{"class":134},[74,66249,55718],{"class":84},[74,66251,65123],{"class":134},[74,66253,1252],{"class":84},[74,66255,66256,66259,66261,66263],{"class":76,"line":13995},[74,66257,66258],{"class":134},"      border",[74,66260,55718],{"class":84},[74,66262,59018],{"class":134},[74,66264,1252],{"class":84},[74,66266,66267,66269,66271,66273,66275],{"class":76,"line":14020},[74,66268,59415],{"class":134},[74,66270,55718],{"class":84},[74,66272,379],{"class":134},[74,66274,55773],{"class":80},[74,66276,1252],{"class":84},[74,66278,66279,66282,66284,66286,66288],{"class":76,"line":14043},[74,66280,66281],{"class":134},"      margin-left",[74,66283,55718],{"class":84},[74,66285,532],{"class":134},[74,66287,55773],{"class":80},[74,66289,1252],{"class":84},[74,66291,66292,66294,66296,66298,66300],{"class":76,"line":14067},[74,66293,59052],{"class":134},[74,66295,55718],{"class":84},[74,66297,442],{"class":134},[74,66299,55773],{"class":80},[74,66301,1252],{"class":84},[74,66303,66304,66307,66309,66312],{"class":76,"line":14072},[74,66305,66306],{"class":134},"      cursor",[74,66308,55718],{"class":84},[74,66310,66311],{"class":134},"pointer",[74,66313,1252],{"class":84},[74,66315,66316],{"class":76,"line":14077},[74,66317,2149],{"class":84},[74,66319,66320],{"class":76,"line":14082},[74,66321,2363],{"emptyLinePlaceholder":2362},[74,66323,66324,66326,66329],{"class":76,"line":14091},[74,66325,65885],{"class":1925},[74,66327,66328],{"class":1925}," .total",[74,66330,19851],{"class":84},[74,66332,66333,66335,66337,66339,66341],{"class":76,"line":14096},[74,66334,66031],{"class":134},[74,66336,55718],{"class":84},[74,66338,698],{"class":134},[74,66340,55773],{"class":80},[74,66342,1252],{"class":84},[74,66344,66345,66347,66349,66352],{"class":76,"line":14102},[74,66346,61697],{"class":134},[74,66348,55718],{"class":84},[74,66350,66351],{"class":134},"#999",[74,66353,1252],{"class":84},[74,66355,66356,66359,66361,66363,66365],{"class":76,"line":14123},[74,66357,66358],{"class":134},"      margin-top",[74,66360,55718],{"class":84},[74,66362,405],{"class":134},[74,66364,55773],{"class":80},[74,66366,1252],{"class":84},[74,66368,66369,66372,66374,66376],{"class":76,"line":14129},[74,66370,66371],{"class":134},"      opacity",[74,66373,55718],{"class":84},[74,66375,277],{"class":134},[74,66377,1252],{"class":84},[74,66379,66380,66382,66384,66386,66388,66390],{"class":76,"line":14143},[74,66381,66141],{"class":134},[74,66383,55718],{"class":84},[74,66385,32402],{"class":134},[74,66387,66148],{"class":134},[74,66389,781],{"class":80},[74,66391,1252],{"class":84},[74,66393,66394],{"class":76,"line":14149},[74,66395,2149],{"class":84},[74,66397,66398],{"class":76,"line":14176},[74,66399,2363],{"emptyLinePlaceholder":2362},[74,66401,66402,66405],{"class":76,"line":14185},[74,66403,66404],{"class":1925},"    .list",[74,66406,19851],{"class":84},[74,66408,66409,66411,66413,66415,66417],{"class":76,"line":14191},[74,66410,65892],{"class":134},[74,66412,55718],{"class":84},[74,66414,3950],{"class":134},[74,66416,55773],{"class":80},[74,66418,1252],{"class":84},[74,66420,66421,66423,66425,66427,66429],{"class":76,"line":14199},[74,66422,65905],{"class":134},[74,66424,55718],{"class":84},[74,66426,65910],{"class":134},[74,66428,55773],{"class":80},[74,66430,1252],{"class":84},[74,66432,66433,66435,66437,66439],{"class":76,"line":14204},[74,66434,59290],{"class":134},[74,66436,55718],{"class":84},[74,66438,55758],{"class":134},[74,66440,1252],{"class":84},[74,66442,66443],{"class":76,"line":20883},[74,66444,2149],{"class":84},[74,66446,66447],{"class":76,"line":20889},[74,66448,2363],{"emptyLinePlaceholder":2362},[74,66450,66451,66453,66456],{"class":76,"line":20912},[74,66452,66404],{"class":1925},[74,66454,66455],{"class":1925}," .item",[74,66457,19851],{"class":84},[74,66459,66460,66462,66464,66466,66468],{"class":76,"line":20918},[74,66461,59052],{"class":134},[74,66463,55718],{"class":84},[74,66465,397],{"class":134},[74,66467,414],{"class":80},[74,66469,1252],{"class":84},[74,66471,66472,66474,66476,66478],{"class":76,"line":20941},[74,66473,59290],{"class":134},[74,66475,55718],{"class":84},[74,66477,55758],{"class":134},[74,66479,1252],{"class":84},[74,66481,66482],{"class":76,"line":20955},[74,66483,2149],{"class":84},[74,66485,66486],{"class":76,"line":20975},[74,66487,2363],{"emptyLinePlaceholder":2362},[74,66489,66490,66492,66494,66497],{"class":76,"line":20981},[74,66491,66404],{"class":1925},[74,66493,66455],{"class":1925},[74,66495,66496],{"class":1925}," .info",[74,66498,19851],{"class":84},[74,66500,66501,66503,66505,66507],{"class":76,"line":20992},[74,66502,66118],{"class":134},[74,66504,55718],{"class":84},[74,66506,303],{"class":134},[74,66508,1252],{"class":84},[74,66510,66511,66514,66516,66518,66520,66523,66526],{"class":76,"line":21015},[74,66512,66513],{"class":134},"      border-bottom",[74,66515,55718],{"class":84},[74,66517,303],{"class":134},[74,66519,55773],{"class":80},[74,66521,66522],{"class":134}," dashed",[74,66524,66525],{"class":134}," #e4e4e4",[74,66527,1252],{"class":84},[74,66529,66530,66533,66535,66537,66539],{"class":76,"line":21037},[74,66531,66532],{"class":134},"      padding-bottom",[74,66534,55718],{"class":84},[74,66536,532],{"class":134},[74,66538,55773],{"class":80},[74,66540,1252],{"class":84},[74,66542,66543],{"class":76,"line":21042},[74,66544,2149],{"class":84},[74,66546,66547],{"class":76,"line":21048},[74,66548,2363],{"emptyLinePlaceholder":2362},[74,66550,66551,66553,66555,66557],{"class":76,"line":21062},[74,66552,66404],{"class":1925},[74,66554,66455],{"class":1925},[74,66556,11104],{"class":55581},[74,66558,19851],{"class":84},[74,66560,66561,66563,66565,66567],{"class":76,"line":21075},[74,66562,58987],{"class":134},[74,66564,55718],{"class":84},[74,66566,277],{"class":134},[74,66568,1252],{"class":84},[74,66570,66571],{"class":76,"line":21080},[74,66572,2149],{"class":84},[74,66574,66575],{"class":76,"line":21094},[74,66576,2363],{"emptyLinePlaceholder":2362},[74,66578,66579,66581,66583,66586],{"class":76,"line":21099},[74,66580,66404],{"class":1925},[74,66582,66455],{"class":1925},[74,66584,66585],{"class":1925}," .name",[74,66587,19851],{"class":84},[74,66589,66590,66592,66594,66597],{"class":76,"line":21105},[74,66591,61697],{"class":134},[74,66593,55718],{"class":84},[74,66595,66596],{"class":134},"#FB7299",[74,66598,1252],{"class":84},[74,66600,66601,66603,66605,66607,66609],{"class":76,"line":21110},[74,66602,59203],{"class":134},[74,66604,55718],{"class":84},[74,66606,635],{"class":134},[74,66608,55773],{"class":80},[74,66610,1252],{"class":84},[74,66612,66613,66616,66618,66621],{"class":76,"line":21124},[74,66614,66615],{"class":134},"      font-weight",[74,66617,55718],{"class":84},[74,66619,66620],{"class":134},"bold",[74,66622,1252],{"class":84},[74,66624,66625],{"class":76,"line":21129},[74,66626,2149],{"class":84},[74,66628,66629],{"class":76,"line":21134},[74,66630,2363],{"emptyLinePlaceholder":2362},[74,66632,66633,66635,66637,66640],{"class":76,"line":21148},[74,66634,66404],{"class":1925},[74,66636,66455],{"class":1925},[74,66638,66639],{"class":1925}," .text",[74,66641,19851],{"class":84},[74,66643,66644,66646,66648,66651],{"class":76,"line":21160},[74,66645,61697],{"class":134},[74,66647,55718],{"class":84},[74,66649,66650],{"class":134},"#333",[74,66652,1252],{"class":84},[74,66654,66655,66657,66659,66661,66663,66665],{"class":76,"line":21165},[74,66656,58976],{"class":134},[74,66658,55718],{"class":84},[74,66660,532],{"class":134},[74,66662,55773],{"class":80},[74,66664,4056],{"class":134},[74,66666,1252],{"class":84},[74,66668,66669],{"class":76,"line":21178},[74,66670,2149],{"class":84},[74,66672,66673],{"class":76,"line":21183},[74,66674,2363],{"emptyLinePlaceholder":2362},[74,66676,66677,66679,66681,66684],{"class":76,"line":21188},[74,66678,66404],{"class":1925},[74,66680,66455],{"class":1925},[74,66682,66683],{"class":1925}," .time",[74,66685,19851],{"class":84},[74,66687,66688,66690,66692,66694],{"class":76,"line":21193},[74,66689,61697],{"class":134},[74,66691,55718],{"class":84},[74,66693,66351],{"class":134},[74,66695,1252],{"class":84},[74,66697,66698,66700,66702,66704,66706],{"class":76,"line":21206},[74,66699,59203],{"class":134},[74,66701,55718],{"class":84},[74,66703,584],{"class":134},[74,66705,55773],{"class":80},[74,66707,1252],{"class":84},[74,66709,66710],{"class":76,"line":21211},[74,66711,2149],{"class":84},[74,66713,66714,66716,66718],{"class":76,"line":36914},[74,66715,56698],{"class":84},[74,66717,5090],{"class":55581},[74,66719,55588],{"class":84},[74,66721,66722,66724,66726],{"class":76,"line":36920},[74,66723,56066],{"class":84},[74,66725,55615],{"class":55581},[74,66727,55588],{"class":84},[74,66729,66730],{"class":76,"line":36926},[74,66731,2363],{"emptyLinePlaceholder":2362},[74,66733,66734,66736,66738],{"class":76,"line":36932},[74,66735,996],{"class":84},[74,66737,56081],{"class":55581},[74,66739,55588],{"class":84},[74,66741,66742,66744,66746,66748,66750,66753],{"class":76,"line":36938},[74,66743,56425],{"class":84},[74,66745,55892],{"class":55581},[74,66747,57767],{"class":1925},[74,66749,131],{"class":84},[74,66751,66752],{"class":190},"\"wrapper\"",[74,66754,55588],{"class":84},[74,66756,66757,66759,66761,66763,66765,66768,66770,66772],{"class":76,"line":36949},[74,66758,55622],{"class":84},[74,66760,527],{"class":55581},[74,66762,57767],{"class":1925},[74,66764,131],{"class":84},[74,66766,66767],{"class":190},"\"avatar\"",[74,66769,59595],{"class":84},[74,66771,527],{"class":55581},[74,66773,55588],{"class":84},[74,66775,66776,66778,66780,66782,66784,66787,66789,66791,66794,66796,66798,66800,66803,66805,66808,66810,66812],{"class":76,"line":36955},[74,66777,55622],{"class":84},[74,66779,58569],{"class":55581},[74,66781,19238],{"class":1925},[74,66783,131],{"class":84},[74,66785,66786],{"class":190},"\"tx\"",[74,66788,65301],{"class":1925},[74,66790,131],{"class":84},[74,66792,66793],{"class":190},"\"发一条友善的评论\"",[74,66795,58592],{"class":1925},[74,66797,131],{"class":84},[74,66799,3664],{"class":190},[74,66801,66802],{"class":1925}," maxlength",[74,66804,131],{"class":84},[74,66806,66807],{"class":190},"\"200\"",[74,66809,59595],{"class":84},[74,66811,58569],{"class":55581},[74,66813,55588],{"class":84},[74,66815,66816,66818,66820,66823,66825],{"class":76,"line":36975},[74,66817,55622],{"class":84},[74,66819,58168],{"class":55581},[74,66821,66822],{"class":84},">发布\u003C\u002F",[74,66824,58168],{"class":55581},[74,66826,55588],{"class":84},[74,66828,66829,66831,66833],{"class":76,"line":36981},[74,66830,56698],{"class":84},[74,66832,55892],{"class":55581},[74,66834,55588],{"class":84},[74,66836,66837,66839,66841,66843,66845,66847],{"class":76,"line":36992},[74,66838,56425],{"class":84},[74,66840,55892],{"class":55581},[74,66842,57767],{"class":1925},[74,66844,131],{"class":84},[74,66846,66752],{"class":190},[74,66848,55588],{"class":84},[74,66850,66851,66853,66855,66857,66859,66862,66865,66867],{"class":76,"line":36998},[74,66852,55622],{"class":84},[74,66854,74],{"class":55581},[74,66856,57767],{"class":1925},[74,66858,131],{"class":84},[74,66860,66861],{"class":190},"\"total\"",[74,66863,66864],{"class":84},">0\u002F200字\u003C\u002F",[74,66866,74],{"class":55581},[74,66868,55588],{"class":84},[74,66870,66871,66873,66875],{"class":76,"line":37004},[74,66872,56698],{"class":84},[74,66874,55892],{"class":55581},[74,66876,55588],{"class":84},[74,66878,66879,66881,66883,66885,66887,66890],{"class":76,"line":37010},[74,66880,56425],{"class":84},[74,66882,55892],{"class":55581},[74,66884,57767],{"class":1925},[74,66886,131],{"class":84},[74,66888,66889],{"class":190},"\"list\"",[74,66891,55588],{"class":84},[74,66893,66894,66896,66898,66900,66902,66905,66908,66910,66913],{"class":76,"line":37016},[74,66895,55622],{"class":84},[74,66897,55892],{"class":55581},[74,66899,57767],{"class":1925},[74,66901,131],{"class":84},[74,66903,66904],{"class":190},"\"item\"",[74,66906,66907],{"class":1925}," style",[74,66909,131],{"class":84},[74,66911,66912],{"class":190},"\"display: none;\"",[74,66914,55588],{"class":84},[74,66916,66917,66919,66921,66923,66925,66927,66929,66931],{"class":76,"line":37022},[74,66918,59515],{"class":84},[74,66920,527],{"class":55581},[74,66922,57767],{"class":1925},[74,66924,131],{"class":84},[74,66926,66767],{"class":190},[74,66928,59595],{"class":84},[74,66930,527],{"class":55581},[74,66932,55588],{"class":84},[74,66934,66935,66937,66939,66941,66943,66946],{"class":76,"line":37028},[74,66936,59515],{"class":84},[74,66938,55892],{"class":55581},[74,66940,57767],{"class":1925},[74,66942,131],{"class":84},[74,66944,66945],{"class":190},"\"info\"",[74,66947,55588],{"class":84},[74,66949,66950,66952,66954,66956,66958,66961,66964,66966],{"class":76,"line":37034},[74,66951,59583],{"class":84},[74,66953,19],{"class":55581},[74,66955,57767],{"class":1925},[74,66957,131],{"class":84},[74,66959,66960],{"class":190},"\"name\"",[74,66962,66963],{"class":84},">清风徐来\u003C\u002F",[74,66965,19],{"class":55581},[74,66967,55588],{"class":84},[74,66969,66970,66972,66974,66976,66978,66981,66984,66986],{"class":76,"line":37054},[74,66971,59583],{"class":84},[74,66973,19],{"class":55581},[74,66975,57767],{"class":1925},[74,66977,131],{"class":84},[74,66979,66980],{"class":190},"\"text\"",[74,66982,66983],{"class":84},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[74,66985,19],{"class":55581},[74,66987,55588],{"class":84},[74,66989,66990,66992,66994,66996,66998,67001,67004,67006],{"class":76,"line":37060},[74,66991,59583],{"class":84},[74,66993,19],{"class":55581},[74,66995,57767],{"class":1925},[74,66997,131],{"class":84},[74,66999,67000],{"class":190},"\"time\"",[74,67002,67003],{"class":84},">2022-10-10 20:29:21\u003C\u002F",[74,67005,19],{"class":55581},[74,67007,55588],{"class":84},[74,67009,67010,67012,67014],{"class":76,"line":37076},[74,67011,59688],{"class":84},[74,67013,55892],{"class":55581},[74,67015,55588],{"class":84},[74,67017,67018,67020,67022],{"class":76,"line":37082},[74,67019,56057],{"class":84},[74,67021,55892],{"class":55581},[74,67023,55588],{"class":84},[74,67025,67026,67028,67030],{"class":76,"line":37096},[74,67027,56698],{"class":84},[74,67029,55892],{"class":55581},[74,67031,55588],{"class":84},[74,67033,67034,67036,67038],{"class":76,"line":37102},[74,67035,56425],{"class":84},[74,67037,56094],{"class":55581},[74,67039,55588],{"class":84},[74,67041,67042,67044,67047,67049,67051,67053,67055,67058],{"class":76,"line":37117},[74,67043,15500],{"class":80},[74,67045,67046],{"class":134}," tx",[74,67048,17843],{"class":80},[74,67050,58677],{"class":84},[74,67052,58680],{"class":1925},[74,67054,85],{"class":84},[74,67056,67057],{"class":190},"'#tx'",[74,67059,91],{"class":84},[74,67061,67062,67064,67067,67069,67071,67073,67075,67078],{"class":76,"line":37123},[74,67063,15500],{"class":80},[74,67065,67066],{"class":134}," total",[74,67068,17843],{"class":80},[74,67070,58677],{"class":84},[74,67072,58680],{"class":1925},[74,67074,85],{"class":84},[74,67076,67077],{"class":190},"'.total'",[74,67079,91],{"class":84},[74,67081,67082],{"class":76,"line":37132},[74,67083,67084],{"class":144},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[74,67086,67087,67090,67092,67094,67096,67098,67100],{"class":76,"line":37138},[74,67088,67089],{"class":84},"    tx.",[74,67091,62094],{"class":1925},[74,67093,85],{"class":84},[74,67095,65608],{"class":190},[74,67097,16714],{"class":84},[74,67099,58730],{"class":80},[74,67101,58733],{"class":84},[74,67103,67104,67107,67109],{"class":76,"line":37147},[74,67105,67106],{"class":84},"      total.style.opacity ",[74,67108,131],{"class":80},[74,67110,59980],{"class":134},[74,67112,67113],{"class":76,"line":37153},[74,67114,37742],{"class":84},[74,67116,67117],{"class":76,"line":37159},[74,67118,67119],{"class":144},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[74,67121,67122,67124,67126,67128,67130,67132,67134],{"class":76,"line":37168},[74,67123,67089],{"class":84},[74,67125,62094],{"class":1925},[74,67127,85],{"class":84},[74,67129,65669],{"class":190},[74,67131,16714],{"class":84},[74,67133,58730],{"class":80},[74,67135,58733],{"class":84},[74,67137,67138,67140,67142],{"class":76,"line":37174},[74,67139,67106],{"class":84},[74,67141,131],{"class":80},[74,67143,51614],{"class":134},[74,67145,67146],{"class":76,"line":37185},[74,67147,37742],{"class":84},[74,67149,67150],{"class":76,"line":37191},[74,67151,67152],{"class":144},"    \u002F\u002F 3. 检测用户输入\n",[74,67154,67155,67157,67159,67161,67164,67166,67168],{"class":76,"line":37210},[74,67156,67089],{"class":84},[74,67158,62094],{"class":1925},[74,67160,85],{"class":84},[74,67162,67163],{"class":190},"'input'",[74,67165,16714],{"class":84},[74,67167,58730],{"class":80},[74,67169,58733],{"class":84},[74,67171,67172],{"class":76,"line":37216},[74,67173,67174],{"class":144},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[74,67176,67177,67180,67182,67185,67188,67190,67193,67195,67197],{"class":76,"line":37227},[74,67178,67179],{"class":84},"      total.innerHTML ",[74,67181,131],{"class":80},[74,67183,67184],{"class":190}," `${",[74,67186,67187],{"class":84},"tx",[74,67189,644],{"class":190},[74,67191,67192],{"class":84},"value",[74,67194,644],{"class":190},[74,67196,56249],{"class":134},[74,67198,67199],{"class":190},"}\u002F200字`\n",[74,67201,67202],{"class":76,"line":37233},[74,67203,37742],{"class":84},[74,67205,67206],{"class":76,"line":37253},[74,67207,2363],{"emptyLinePlaceholder":2362},[74,67209,67210],{"class":76,"line":37269},[74,67211,67212],{"class":144},"    \u002F\u002F const str = 'andy'\n",[74,67214,67215],{"class":76,"line":37275},[74,67216,67217],{"class":144},"    \u002F\u002F console.log(str.length)\n",[74,67219,67220,67222,67224],{"class":76,"line":37289},[74,67221,56698],{"class":84},[74,67223,56094],{"class":55581},[74,67225,55588],{"class":84},[74,67227,67228,67230,67232],{"class":76,"line":37295},[74,67229,56066],{"class":84},[74,67231,56081],{"class":55581},[74,67233,55588],{"class":84},[74,67235,67236],{"class":76,"line":37301},[74,67237,2363],{"emptyLinePlaceholder":2362},[74,67239,67240,67242,67244],{"class":76,"line":37312},[74,67241,56066],{"class":84},[74,67243,54916],{"class":55581},[74,67245,55588],{"class":84},[26277,67247,67249],{"id":67248},"_3254-change事件","3.2.5.4 change事件",[19,67251,67252],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,67254,67255],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,67257,67258],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[64,67260,67262],{"className":54914,"code":67261,"language":54916,"meta":69,"style":69},"\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",[71,67263,67264,67274,67288,67292,67300,67314,67334,67346,67354,67358,67366,67380,67388,67406,67424,67436,67440,67448,67456,67460],{"__ignoreMap":69},[74,67265,67266,67268,67270,67272],{"class":76,"line":77},[74,67267,55578],{"class":84},[74,67269,55582],{"class":55581},[74,67271,55585],{"class":1925},[74,67273,55588],{"class":84},[74,67275,67276,67278,67280,67282,67284,67286],{"class":76,"line":94},[74,67277,996],{"class":84},[74,67279,54916],{"class":55581},[74,67281,55597],{"class":1925},[74,67283,131],{"class":84},[74,67285,55602],{"class":190},[74,67287,55588],{"class":84},[74,67289,67290],{"class":76,"line":1141},[74,67291,2363],{"emptyLinePlaceholder":2362},[74,67293,67294,67296,67298],{"class":76,"line":1156},[74,67295,996],{"class":84},[74,67297,55615],{"class":55581},[74,67299,55588],{"class":84},[74,67301,67302,67304,67306,67308,67310,67312],{"class":76,"line":1162},[74,67303,56425],{"class":84},[74,67305,55625],{"class":55581},[74,67307,55628],{"class":1925},[74,67309,131],{"class":84},[74,67311,55633],{"class":190},[74,67313,55588],{"class":84},[74,67315,67316,67318,67320,67322,67324,67326,67328,67330,67332],{"class":76,"line":1176},[74,67317,56425],{"class":84},[74,67319,55625],{"class":55581},[74,67321,19199],{"class":1925},[74,67323,131],{"class":84},[74,67325,55672],{"class":190},[74,67327,55652],{"class":1925},[74,67329,131],{"class":84},[74,67331,55679],{"class":190},[74,67333,55588],{"class":84},[74,67335,67336,67338,67340,67342,67344],{"class":76,"line":1182},[74,67337,56425],{"class":84},[74,67339,55688],{"class":55581},[74,67341,55691],{"class":84},[74,67343,55688],{"class":55581},[74,67345,55588],{"class":84},[74,67347,67348,67350,67352],{"class":76,"line":1273},[74,67349,56066],{"class":84},[74,67351,55615],{"class":55581},[74,67353,55588],{"class":84},[74,67355,67356],{"class":76,"line":1279},[74,67357,2363],{"emptyLinePlaceholder":2362},[74,67359,67360,67362,67364],{"class":76,"line":1291},[74,67361,996],{"class":84},[74,67363,56081],{"class":55581},[74,67365,55588],{"class":84},[74,67367,67368,67370,67372,67374,67376,67378],{"class":76,"line":1574},[74,67369,56425],{"class":84},[74,67371,58102],{"class":55581},[74,67373,58105],{"class":1925},[74,67375,131],{"class":84},[74,67377,66980],{"class":190},[74,67379,55588],{"class":84},[74,67381,67382,67384,67386],{"class":76,"line":1579},[74,67383,56425],{"class":84},[74,67385,56094],{"class":55581},[74,67387,55588],{"class":84},[74,67389,67390,67392,67394,67396,67398,67400,67402,67404],{"class":76,"line":1585},[74,67391,15500],{"class":80},[74,67393,64886],{"class":134},[74,67395,17843],{"class":80},[74,67397,58677],{"class":84},[74,67399,58680],{"class":1925},[74,67401,85],{"class":84},[74,67403,67163],{"class":190},[74,67405,91],{"class":84},[74,67407,67408,67411,67413,67415,67418,67420,67422],{"class":76,"line":1590},[74,67409,67410],{"class":84},"    input.",[74,67412,62094],{"class":1925},[74,67414,85],{"class":84},[74,67416,67417],{"class":190},"'change'",[74,67419,16714],{"class":84},[74,67421,58730],{"class":80},[74,67423,58733],{"class":84},[74,67425,67426,67428,67430,67432,67434],{"class":76,"line":1604},[74,67427,62525],{"class":84},[74,67429,62528],{"class":1925},[74,67431,85],{"class":84},[74,67433,679],{"class":134},[74,67435,91],{"class":84},[74,67437,67438],{"class":76,"line":1609},[74,67439,37742],{"class":84},[74,67441,67442,67444,67446],{"class":76,"line":1615},[74,67443,56698],{"class":84},[74,67445,56094],{"class":55581},[74,67447,55588],{"class":84},[74,67449,67450,67452,67454],{"class":76,"line":1636},[74,67451,56066],{"class":84},[74,67453,56081],{"class":55581},[74,67455,55588],{"class":84},[74,67457,67458],{"class":76,"line":1641},[74,67459,2363],{"emptyLinePlaceholder":2362},[74,67461,67462,67464,67466],{"class":76,"line":1655},[74,67463,56066],{"class":84},[74,67465,54916],{"class":55581},[74,67467,55588],{"class":84},[19,67469,67470],{},"总结：内容发生改变才回去触发",[44,67472,67474],{"id":67473},"_326-事件对象","3.2.6 事件对象",[26277,67476,67478],{"id":67477},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,67480,67481],{},[1424,67482],{"alt":69,"src":67483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,67485,67486],{},[1424,67487],{"alt":69,"src":67488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,67490,67491],{},"点击一次，就输出了事件对象，它是个对象",[19,67493,67494],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,67496,67497],{},[1424,67498],{"alt":69,"src":67499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[26277,67501,67503],{"id":67502},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,67505,67506],{},[1424,67507],{"alt":69,"src":67508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,67510,67511],{},"实现按特殊字符才是实现打印输出效果：",[64,67513,67515],{"className":57348,"code":67514,"language":57350,"meta":69,"style":69},"\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",[71,67516,67517,67525,67530,67544,67552,67557,67562,67567,67572,67577,67582,67587,67592,67597,67601,67605,67613],{"__ignoreMap":69},[74,67518,67519,67521,67523],{"class":76,"line":77},[74,67520,996],{"class":84},[74,67522,56081],{"class":55581},[74,67524,55588],{"class":84},[74,67526,67527],{"class":76,"line":94},[74,67528,67529],{"class":144},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[74,67531,67532,67534,67536,67538,67540,67542],{"class":76,"line":1141},[74,67533,56425],{"class":84},[74,67535,58102],{"class":55581},[74,67537,58105],{"class":1925},[74,67539,131],{"class":84},[74,67541,66980],{"class":190},[74,67543,55588],{"class":84},[74,67545,67546,67548,67550],{"class":76,"line":1156},[74,67547,56425],{"class":84},[74,67549,56094],{"class":55581},[74,67551,55588],{"class":84},[74,67553,67554],{"class":76,"line":1162},[74,67555,67556],{"class":84},"    \u002F\u002F const btn = document.querySelector('button')\n",[74,67558,67559],{"class":76,"line":1176},[74,67560,67561],{"class":84},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[74,67563,67564],{"class":76,"line":1182},[74,67565,67566],{"class":84},"    \u002F\u002F   console.log(e);\n",[74,67568,67569],{"class":76,"line":1273},[74,67570,67571],{"class":84},"    \u002F\u002F })\n",[74,67573,67574],{"class":76,"line":1279},[74,67575,67576],{"class":84},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[74,67578,67579],{"class":76,"line":1291},[74,67580,67581],{"class":84},"    const input = document.querySelector('input')\n",[74,67583,67584],{"class":76,"line":1574},[74,67585,67586],{"class":84},"    input.addEventListener('keyup', function (e) {\n",[74,67588,67589],{"class":76,"line":1579},[74,67590,67591],{"class":84},"      if (e.key === 'Enter') {\n",[74,67593,67594],{"class":76,"line":1585},[74,67595,67596],{"class":84},"        console.log('我按下了回车键')\n",[74,67598,67599],{"class":76,"line":1590},[74,67600,56679],{"class":84},[74,67602,67603],{"class":76,"line":1604},[74,67604,37742],{"class":84},[74,67606,67607,67609,67611],{"class":76,"line":1609},[74,67608,56698],{"class":84},[74,67610,56094],{"class":55581},[74,67612,55588],{"class":84},[74,67614,67615,67617,67619],{"class":76,"line":1615},[74,67616,56066],{"class":84},[74,67618,56081],{"class":55581},[74,67620,55588],{"class":84},[26277,67622,67624],{"id":67623},"_3263-trim方法","3.2.6.3 trim方法",[19,67626,67627],{},[1424,67628],{"alt":69,"src":67629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,67631,67632],{},[1424,67633],{"alt":69,"src":67634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,67636,67637],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,67639,67640],{},"str.trim()",[44,67642,67644],{"id":67643},"_327-环境对象","3.2.7 环境对象",[19,67646,67647],{},[1424,67648],{"alt":69,"src":67649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,67651,67652],{},[1424,67653],{"alt":69,"src":67654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,67656,67657],{},[1424,67658],{"alt":69,"src":67659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,67661,67662],{},"实际函数调用是window.fn()",[19,67664,67665],{},"普通函数里面this指向的是window",[1093,67667,67668,67671,67674],{},[30,67669,67670],{},"在普通函数下，this指向的是window",[30,67672,67673],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[30,67675,67676],{},"箭头函数没有this",[19,67678,67679],{},"粗略记法就是：谁调用，this就指向谁",[19,67681,67682],{},[1424,67683],{"alt":69,"src":67684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,67686,67687],{},[1424,67688],{"alt":69,"src":67689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,67691,67692],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,67694,67695],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[64,67697,67699],{"className":57348,"code":67698,"language":57350,"meta":69,"style":69},"\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",[71,67700,67701,67709,67721,67729,67734,67739,67744,67749,67753,67761],{"__ignoreMap":69},[74,67702,67703,67705,67707],{"class":76,"line":77},[74,67704,996],{"class":84},[74,67706,56081],{"class":55581},[74,67708,55588],{"class":84},[74,67710,67711,67713,67715,67717,67719],{"class":76,"line":94},[74,67712,56425],{"class":84},[74,67714,58168],{"class":55581},[74,67716,58174],{"class":84},[74,67718,58168],{"class":55581},[74,67720,55588],{"class":84},[74,67722,67723,67725,67727],{"class":76,"line":1141},[74,67724,56425],{"class":84},[74,67726,56094],{"class":55581},[74,67728,55588],{"class":84},[74,67730,67731],{"class":76,"line":1156},[74,67732,67733],{"class":84},"    const button = document.querySelector('button')\n",[74,67735,67736],{"class":76,"line":1162},[74,67737,67738],{"class":84},"    button.addEventListener('click', function () {\n",[74,67740,67741],{"class":76,"line":1176},[74,67742,67743],{"class":84},"      \u002F\u002F console.log(this);\n",[74,67745,67746],{"class":76,"line":1182},[74,67747,67748],{"class":84},"      this.style.color = 'pink'\n",[74,67750,67751],{"class":76,"line":1273},[74,67752,37742],{"class":84},[74,67754,67755,67757,67759],{"class":76,"line":1279},[74,67756,56698],{"class":84},[74,67758,56094],{"class":55581},[74,67760,55588],{"class":84},[74,67762,67763,67765,67767],{"class":76,"line":1291},[74,67764,56066],{"class":84},[74,67766,56081],{"class":55581},[74,67768,55588],{"class":84},[44,67770,67772],{"id":67771},"_328-回调函数","3.2.8 回调函数",[19,67774,67775],{},[1424,67776],{"alt":69,"src":67777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,67779,67780],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,67782,15611],{},[1093,67784,67785,67788,67791],{},[30,67786,67787],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[30,67789,67790],{},"回调函数本质还是函数，只不过把它当成参数使用",[30,67792,67793],{},"使用匿名函数做为回调函数比较常见",[44,67795,67797],{"id":67796},"_329-tab栏切换","3.2.9 tab栏切换",[19,67799,67800],{},[1424,67801],{"alt":69,"src":67802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[64,67804,67806],{"className":54914,"code":67805,"language":54916,"meta":69,"style":69},"\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",[71,67807,67808,67818,67832,67836,67844,67858,67878,67898,67911,67919,67925,67935,67945,67949,67953,67960,67973,67986,67998,68014,68018,68022,68029,68041,68053,68065,68075,68085,68089,68093,68102,68114,68125,68137,68141,68145,68153,68163,68173,68183,68187,68191,68201,68215,68227,68231,68235,68247,68258,68275,68285,68289,68293,68308,68319,68329,68333,68337,68344,68359,68363,68367,68375,68385,68389,68393,68402,68412,68416,68424,68432,68436,68444,68459,68474,68487,68495,68529,68556,68583,68610,68637,68645,68653,68668,68705,68740,68775,68810,68845,68853,68861,68869,68874,68879,68899,68904,68933,68938,68943,68961,68966,68971,68976,68998,69003,69019,69023,69028,69033,69054,69059,69088,69092,69097,69101,69109,69117,69121],{"__ignoreMap":69},[74,67809,67810,67812,67814,67816],{"class":76,"line":77},[74,67811,55578],{"class":84},[74,67813,55582],{"class":55581},[74,67815,55585],{"class":1925},[74,67817,55588],{"class":84},[74,67819,67820,67822,67824,67826,67828,67830],{"class":76,"line":94},[74,67821,996],{"class":84},[74,67823,54916],{"class":55581},[74,67825,55597],{"class":1925},[74,67827,131],{"class":84},[74,67829,55602],{"class":190},[74,67831,55588],{"class":84},[74,67833,67834],{"class":76,"line":1141},[74,67835,2363],{"emptyLinePlaceholder":2362},[74,67837,67838,67840,67842],{"class":76,"line":1156},[74,67839,996],{"class":84},[74,67841,55615],{"class":55581},[74,67843,55588],{"class":84},[74,67845,67846,67848,67850,67852,67854,67856],{"class":76,"line":1162},[74,67847,56425],{"class":84},[74,67849,55625],{"class":55581},[74,67851,55628],{"class":1925},[74,67853,131],{"class":84},[74,67855,55633],{"class":190},[74,67857,63408],{"class":84},[74,67859,67860,67862,67864,67866,67868,67870,67872,67874,67876],{"class":76,"line":1176},[74,67861,56425],{"class":84},[74,67863,55625],{"class":55581},[74,67865,55644],{"class":1925},[74,67867,131],{"class":84},[74,67869,55649],{"class":190},[74,67871,55652],{"class":1925},[74,67873,131],{"class":84},[74,67875,55657],{"class":190},[74,67877,63408],{"class":84},[74,67879,67880,67882,67884,67886,67888,67890,67892,67894,67896],{"class":76,"line":1182},[74,67881,56425],{"class":84},[74,67883,55625],{"class":55581},[74,67885,19199],{"class":1925},[74,67887,131],{"class":84},[74,67889,55672],{"class":190},[74,67891,55652],{"class":1925},[74,67893,131],{"class":84},[74,67895,55679],{"class":190},[74,67897,63408],{"class":84},[74,67899,67900,67902,67904,67907,67909],{"class":76,"line":1273},[74,67901,56425],{"class":84},[74,67903,55688],{"class":55581},[74,67905,67906],{"class":84},">tab栏切换\u003C\u002F",[74,67908,55688],{"class":55581},[74,67910,55588],{"class":84},[74,67912,67913,67915,67917],{"class":76,"line":1279},[74,67914,56425],{"class":84},[74,67916,5090],{"class":55581},[74,67918,55588],{"class":84},[74,67920,67921,67923],{"class":76,"line":1291},[74,67922,10682],{"class":55581},[74,67924,19851],{"class":84},[74,67926,67927,67929,67931,67933],{"class":76,"line":1574},[74,67928,58987],{"class":134},[74,67930,55718],{"class":84},[74,67932,277],{"class":134},[74,67934,1252],{"class":84},[74,67936,67937,67939,67941,67943],{"class":76,"line":1579},[74,67938,58976],{"class":134},[74,67940,55718],{"class":84},[74,67942,277],{"class":134},[74,67944,1252],{"class":84},[74,67946,67947],{"class":76,"line":1585},[74,67948,2149],{"class":84},[74,67950,67951],{"class":76,"line":1590},[74,67952,2363],{"emptyLinePlaceholder":2362},[74,67954,67955,67958],{"class":76,"line":1604},[74,67956,67957],{"class":1925},"    .tab",[74,67959,19851],{"class":84},[74,67961,67962,67964,67966,67969,67971],{"class":76,"line":1609},[74,67963,59052],{"class":134},[74,67965,55718],{"class":84},[74,67967,67968],{"class":134},"590",[74,67970,55773],{"class":80},[74,67972,1252],{"class":84},[74,67974,67975,67977,67979,67982,67984],{"class":76,"line":1615},[74,67976,59066],{"class":134},[74,67978,55718],{"class":84},[74,67980,67981],{"class":134},"340",[74,67983,55773],{"class":80},[74,67985,1252],{"class":84},[74,67987,67988,67990,67992,67994,67996],{"class":76,"line":1636},[74,67989,58987],{"class":134},[74,67991,55718],{"class":84},[74,67993,786],{"class":134},[74,67995,55773],{"class":80},[74,67997,1252],{"class":84},[74,67999,68000,68002,68004,68006,68008,68010,68012],{"class":76,"line":1641},[74,68001,66258],{"class":134},[74,68003,55718],{"class":84},[74,68005,303],{"class":134},[74,68007,55773],{"class":80},[74,68009,55802],{"class":134},[74,68011,66525],{"class":134},[74,68013,1252],{"class":84},[74,68015,68016],{"class":76,"line":1655},[74,68017,2149],{"class":84},[74,68019,68020],{"class":76,"line":1660},[74,68021,2363],{"emptyLinePlaceholder":2362},[74,68023,68024,68027],{"class":76,"line":1689},[74,68025,68026],{"class":1925},"    .tab-nav",[74,68028,19851],{"class":84},[74,68030,68031,68033,68035,68037,68039],{"class":76,"line":1694},[74,68032,59052],{"class":134},[74,68034,55718],{"class":84},[74,68036,397],{"class":134},[74,68038,414],{"class":80},[74,68040,1252],{"class":84},[74,68042,68043,68045,68047,68049,68051],{"class":76,"line":1711},[74,68044,59066],{"class":134},[74,68046,55718],{"class":84},[74,68048,993],{"class":134},[74,68050,55773],{"class":80},[74,68052,1252],{"class":84},[74,68054,68055,68057,68059,68061,68063],{"class":76,"line":1716},[74,68056,61640],{"class":134},[74,68058,55718],{"class":84},[74,68060,993],{"class":134},[74,68062,55773],{"class":80},[74,68064,1252],{"class":84},[74,68066,68067,68069,68071,68073],{"class":76,"line":1721},[74,68068,59290],{"class":134},[74,68070,55718],{"class":84},[74,68072,55758],{"class":134},[74,68074,1252],{"class":84},[74,68076,68077,68079,68081,68083],{"class":76,"line":1726},[74,68078,59301],{"class":134},[74,68080,55718],{"class":84},[74,68082,55949],{"class":134},[74,68084,1252],{"class":84},[74,68086,68087],{"class":76,"line":1740},[74,68088,2149],{"class":84},[74,68090,68091],{"class":76,"line":1745},[74,68092,2363],{"emptyLinePlaceholder":2362},[74,68094,68095,68097,68100],{"class":76,"line":2540},[74,68096,68026],{"class":1925},[74,68098,68099],{"class":55581}," h3",[74,68101,19851],{"class":84},[74,68103,68104,68106,68108,68110,68112],{"class":76,"line":2554},[74,68105,59203],{"class":134},[74,68107,55718],{"class":84},[74,68109,886],{"class":134},[74,68111,55773],{"class":80},[74,68113,1252],{"class":84},[74,68115,68116,68118,68120,68123],{"class":76,"line":2562},[74,68117,66615],{"class":134},[74,68119,55718],{"class":84},[74,68121,68122],{"class":134},"normal",[74,68124,1252],{"class":84},[74,68126,68127,68129,68131,68133,68135],{"class":76,"line":2567},[74,68128,66281],{"class":134},[74,68130,55718],{"class":84},[74,68132,786],{"class":134},[74,68134,55773],{"class":80},[74,68136,1252],{"class":84},[74,68138,68139],{"class":76,"line":2573},[74,68140,2149],{"class":84},[74,68142,68143],{"class":76,"line":2579},[74,68144,2363],{"emptyLinePlaceholder":2362},[74,68146,68147,68149,68151],{"class":76,"line":2584},[74,68148,68026],{"class":1925},[74,68150,65573],{"class":55581},[74,68152,19851],{"class":84},[74,68154,68155,68157,68159,68161],{"class":76,"line":12227},[74,68156,59013],{"class":134},[74,68158,55718],{"class":84},[74,68160,59018],{"class":134},[74,68162,1252],{"class":84},[74,68164,68165,68167,68169,68171],{"class":76,"line":12251},[74,68166,59290],{"class":134},[74,68168,55718],{"class":84},[74,68170,55758],{"class":134},[74,68172,1252],{"class":84},[74,68174,68175,68177,68179,68181],{"class":76,"line":12256},[74,68176,59301],{"class":134},[74,68178,55718],{"class":84},[74,68180,55861],{"class":134},[74,68182,1252],{"class":84},[74,68184,68185],{"class":76,"line":12262},[74,68186,2149],{"class":84},[74,68188,68189],{"class":76,"line":12289},[74,68190,2363],{"emptyLinePlaceholder":2362},[74,68192,68193,68195,68197,68199],{"class":76,"line":12294},[74,68194,68026],{"class":1925},[74,68196,65573],{"class":55581},[74,68198,59356],{"class":55581},[74,68200,19851],{"class":84},[74,68202,68203,68205,68207,68209,68211,68213],{"class":76,"line":12300},[74,68204,58987],{"class":134},[74,68206,55718],{"class":84},[74,68208,277],{"class":134},[74,68210,13229],{"class":134},[74,68212,55773],{"class":80},[74,68214,1252],{"class":84},[74,68216,68217,68219,68221,68223,68225],{"class":76,"line":12312},[74,68218,59203],{"class":134},[74,68220,55718],{"class":84},[74,68222,635],{"class":134},[74,68224,55773],{"class":80},[74,68226,1252],{"class":84},[74,68228,68229],{"class":76,"line":12324},[74,68230,2149],{"class":84},[74,68232,68233],{"class":76,"line":12336},[74,68234,2363],{"emptyLinePlaceholder":2362},[74,68236,68237,68239,68241,68243,68245],{"class":76,"line":13995},[74,68238,68026],{"class":1925},[74,68240,65573],{"class":55581},[74,68242,59356],{"class":55581},[74,68244,1360],{"class":55581},[74,68246,19851],{"class":84},[74,68248,68249,68252,68254,68256],{"class":76,"line":14020},[74,68250,68251],{"class":134},"      text-decoration",[74,68253,55718],{"class":84},[74,68255,59018],{"class":134},[74,68257,1252],{"class":84},[74,68259,68260,68262,68264,68266,68268,68270,68273],{"class":76,"line":14043},[74,68261,66513],{"class":134},[74,68263,55718],{"class":84},[74,68265,163],{"class":134},[74,68267,55773],{"class":80},[74,68269,55802],{"class":134},[74,68271,68272],{"class":134}," transparent",[74,68274,1252],{"class":84},[74,68276,68277,68279,68281,68283],{"class":76,"line":14067},[74,68278,61697],{"class":134},[74,68280,55718],{"class":84},[74,68282,66650],{"class":134},[74,68284,1252],{"class":84},[74,68286,68287],{"class":76,"line":14072},[74,68288,2149],{"class":84},[74,68290,68291],{"class":76,"line":14077},[74,68292,2363],{"emptyLinePlaceholder":2362},[74,68294,68295,68297,68299,68301,68303,68306],{"class":76,"line":14082},[74,68296,68026],{"class":1925},[74,68298,65573],{"class":55581},[74,68300,59356],{"class":55581},[74,68302,1360],{"class":55581},[74,68304,68305],{"class":1925},".active",[74,68307,19851],{"class":84},[74,68309,68310,68312,68314,68317],{"class":76,"line":14091},[74,68311,66072],{"class":134},[74,68313,55718],{"class":84},[74,68315,68316],{"class":134},"#e1251b",[74,68318,1252],{"class":84},[74,68320,68321,68323,68325,68327],{"class":76,"line":14096},[74,68322,61697],{"class":134},[74,68324,55718],{"class":84},[74,68326,68316],{"class":134},[74,68328,1252],{"class":84},[74,68330,68331],{"class":76,"line":14102},[74,68332,2149],{"class":84},[74,68334,68335],{"class":76,"line":14123},[74,68336,2363],{"emptyLinePlaceholder":2362},[74,68338,68339,68342],{"class":76,"line":14129},[74,68340,68341],{"class":1925},"    .tab-content",[74,68343,19851],{"class":84},[74,68345,68346,68348,68350,68352,68355,68357],{"class":76,"line":14143},[74,68347,58976],{"class":134},[74,68349,55718],{"class":84},[74,68351,277],{"class":134},[74,68353,68354],{"class":134}," 16",[74,68356,55773],{"class":80},[74,68358,1252],{"class":84},[74,68360,68361],{"class":76,"line":14149},[74,68362,2149],{"class":84},[74,68364,68365],{"class":76,"line":14176},[74,68366,2363],{"emptyLinePlaceholder":2362},[74,68368,68369,68371,68373],{"class":76,"line":14185},[74,68370,68341],{"class":1925},[74,68372,66455],{"class":1925},[74,68374,19851],{"class":84},[74,68376,68377,68379,68381,68383],{"class":76,"line":14191},[74,68378,59290],{"class":134},[74,68380,55718],{"class":84},[74,68382,59018],{"class":134},[74,68384,1252],{"class":84},[74,68386,68387],{"class":76,"line":14199},[74,68388,2149],{"class":84},[74,68390,68391],{"class":76,"line":14204},[74,68392,2363],{"emptyLinePlaceholder":2362},[74,68394,68395,68397,68400],{"class":76,"line":20883},[74,68396,68341],{"class":1925},[74,68398,68399],{"class":1925}," .item.active",[74,68401,19851],{"class":84},[74,68403,68404,68406,68408,68410],{"class":76,"line":20889},[74,68405,59290],{"class":134},[74,68407,55718],{"class":84},[74,68409,65150],{"class":134},[74,68411,1252],{"class":84},[74,68413,68414],{"class":76,"line":20912},[74,68415,2149],{"class":84},[74,68417,68418,68420,68422],{"class":76,"line":20918},[74,68419,56698],{"class":84},[74,68421,5090],{"class":55581},[74,68423,55588],{"class":84},[74,68425,68426,68428,68430],{"class":76,"line":20941},[74,68427,56066],{"class":84},[74,68429,55615],{"class":55581},[74,68431,55588],{"class":84},[74,68433,68434],{"class":76,"line":20955},[74,68435,2363],{"emptyLinePlaceholder":2362},[74,68437,68438,68440,68442],{"class":76,"line":20975},[74,68439,996],{"class":84},[74,68441,56081],{"class":55581},[74,68443,55588],{"class":84},[74,68445,68446,68448,68450,68452,68454,68457],{"class":76,"line":20981},[74,68447,56425],{"class":84},[74,68449,55892],{"class":55581},[74,68451,57767],{"class":1925},[74,68453,131],{"class":84},[74,68455,68456],{"class":190},"\"tab\"",[74,68458,55588],{"class":84},[74,68460,68461,68463,68465,68467,68469,68472],{"class":76,"line":20992},[74,68462,55622],{"class":84},[74,68464,55892],{"class":55581},[74,68466,57767],{"class":1925},[74,68468,131],{"class":84},[74,68470,68471],{"class":190},"\"tab-nav\"",[74,68473,55588],{"class":84},[74,68475,68476,68478,68480,68483,68485],{"class":76,"line":21015},[74,68477,59515],{"class":84},[74,68479,44],{"class":55581},[74,68481,68482],{"class":84},">每日特价\u003C\u002F",[74,68484,44],{"class":55581},[74,68486,55588],{"class":84},[74,68488,68489,68491,68493],{"class":76,"line":21037},[74,68490,59515],{"class":84},[74,68492,1093],{"class":55581},[74,68494,55588],{"class":84},[74,68496,68497,68499,68501,68503,68505,68507,68509,68511,68513,68515,68518,68521,68523,68525,68527],{"class":76,"line":21042},[74,68498,59583],{"class":84},[74,68500,30],{"class":55581},[74,68502,65333],{"class":84},[74,68504,324],{"class":55581},[74,68506,57767],{"class":1925},[74,68508,131],{"class":84},[74,68510,63987],{"class":190},[74,68512,65338],{"class":1925},[74,68514,131],{"class":84},[74,68516,68517],{"class":190},"\"javascript:;\"",[74,68519,68520],{"class":84},">精选\u003C\u002F",[74,68522,324],{"class":55581},[74,68524,59595],{"class":84},[74,68526,30],{"class":55581},[74,68528,55588],{"class":84},[74,68530,68531,68533,68535,68537,68539,68541,68543,68545,68548,68550,68552,68554],{"class":76,"line":21048},[74,68532,59583],{"class":84},[74,68534,30],{"class":55581},[74,68536,65333],{"class":84},[74,68538,324],{"class":55581},[74,68540,65338],{"class":1925},[74,68542,131],{"class":84},[74,68544,68517],{"class":190},[74,68546,68547],{"class":84},">美食\u003C\u002F",[74,68549,324],{"class":55581},[74,68551,59595],{"class":84},[74,68553,30],{"class":55581},[74,68555,55588],{"class":84},[74,68557,68558,68560,68562,68564,68566,68568,68570,68572,68575,68577,68579,68581],{"class":76,"line":21062},[74,68559,59583],{"class":84},[74,68561,30],{"class":55581},[74,68563,65333],{"class":84},[74,68565,324],{"class":55581},[74,68567,65338],{"class":1925},[74,68569,131],{"class":84},[74,68571,68517],{"class":190},[74,68573,68574],{"class":84},">百货\u003C\u002F",[74,68576,324],{"class":55581},[74,68578,59595],{"class":84},[74,68580,30],{"class":55581},[74,68582,55588],{"class":84},[74,68584,68585,68587,68589,68591,68593,68595,68597,68599,68602,68604,68606,68608],{"class":76,"line":21075},[74,68586,59583],{"class":84},[74,68588,30],{"class":55581},[74,68590,65333],{"class":84},[74,68592,324],{"class":55581},[74,68594,65338],{"class":1925},[74,68596,131],{"class":84},[74,68598,68517],{"class":190},[74,68600,68601],{"class":84},">个护\u003C\u002F",[74,68603,324],{"class":55581},[74,68605,59595],{"class":84},[74,68607,30],{"class":55581},[74,68609,55588],{"class":84},[74,68611,68612,68614,68616,68618,68620,68622,68624,68626,68629,68631,68633,68635],{"class":76,"line":21080},[74,68613,59583],{"class":84},[74,68615,30],{"class":55581},[74,68617,65333],{"class":84},[74,68619,324],{"class":55581},[74,68621,65338],{"class":1925},[74,68623,131],{"class":84},[74,68625,68517],{"class":190},[74,68627,68628],{"class":84},">预告\u003C\u002F",[74,68630,324],{"class":55581},[74,68632,59595],{"class":84},[74,68634,30],{"class":55581},[74,68636,55588],{"class":84},[74,68638,68639,68641,68643],{"class":76,"line":21094},[74,68640,59688],{"class":84},[74,68642,1093],{"class":55581},[74,68644,55588],{"class":84},[74,68646,68647,68649,68651],{"class":76,"line":21099},[74,68648,56057],{"class":84},[74,68650,55892],{"class":55581},[74,68652,55588],{"class":84},[74,68654,68655,68657,68659,68661,68663,68666],{"class":76,"line":21105},[74,68656,55622],{"class":84},[74,68658,55892],{"class":55581},[74,68660,57767],{"class":1925},[74,68662,131],{"class":84},[74,68664,68665],{"class":190},"\"tab-content\"",[74,68667,55588],{"class":84},[74,68669,68670,68672,68674,68676,68678,68681,68683,68685,68687,68689,68692,68694,68696,68698,68701,68703],{"class":76,"line":21110},[74,68671,59515],{"class":84},[74,68673,55892],{"class":55581},[74,68675,57767],{"class":1925},[74,68677,131],{"class":84},[74,68679,68680],{"class":190},"\"item active\"",[74,68682,65333],{"class":84},[74,68684,1424],{"class":55581},[74,68686,59520],{"class":1925},[74,68688,131],{"class":84},[74,68690,68691],{"class":190},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[74,68693,59528],{"class":1925},[74,68695,131],{"class":84},[74,68697,11931],{"class":190},[74,68699,68700],{"class":84}," \u002F>\u003C\u002F",[74,68702,55892],{"class":55581},[74,68704,55588],{"class":84},[74,68706,68707,68709,68711,68713,68715,68717,68719,68721,68723,68725,68728,68730,68732,68734,68736,68738],{"class":76,"line":21124},[74,68708,59515],{"class":84},[74,68710,55892],{"class":55581},[74,68712,57767],{"class":1925},[74,68714,131],{"class":84},[74,68716,66904],{"class":190},[74,68718,65333],{"class":84},[74,68720,1424],{"class":55581},[74,68722,59520],{"class":1925},[74,68724,131],{"class":84},[74,68726,68727],{"class":190},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[74,68729,59528],{"class":1925},[74,68731,131],{"class":84},[74,68733,11931],{"class":190},[74,68735,68700],{"class":84},[74,68737,55892],{"class":55581},[74,68739,55588],{"class":84},[74,68741,68742,68744,68746,68748,68750,68752,68754,68756,68758,68760,68763,68765,68767,68769,68771,68773],{"class":76,"line":21129},[74,68743,59515],{"class":84},[74,68745,55892],{"class":55581},[74,68747,57767],{"class":1925},[74,68749,131],{"class":84},[74,68751,66904],{"class":190},[74,68753,65333],{"class":84},[74,68755,1424],{"class":55581},[74,68757,59520],{"class":1925},[74,68759,131],{"class":84},[74,68761,68762],{"class":190},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[74,68764,59528],{"class":1925},[74,68766,131],{"class":84},[74,68768,11931],{"class":190},[74,68770,68700],{"class":84},[74,68772,55892],{"class":55581},[74,68774,55588],{"class":84},[74,68776,68777,68779,68781,68783,68785,68787,68789,68791,68793,68795,68798,68800,68802,68804,68806,68808],{"class":76,"line":21134},[74,68778,59515],{"class":84},[74,68780,55892],{"class":55581},[74,68782,57767],{"class":1925},[74,68784,131],{"class":84},[74,68786,66904],{"class":190},[74,68788,65333],{"class":84},[74,68790,1424],{"class":55581},[74,68792,59520],{"class":1925},[74,68794,131],{"class":84},[74,68796,68797],{"class":190},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[74,68799,59528],{"class":1925},[74,68801,131],{"class":84},[74,68803,11931],{"class":190},[74,68805,68700],{"class":84},[74,68807,55892],{"class":55581},[74,68809,55588],{"class":84},[74,68811,68812,68814,68816,68818,68820,68822,68824,68826,68828,68830,68833,68835,68837,68839,68841,68843],{"class":76,"line":21148},[74,68813,59515],{"class":84},[74,68815,55892],{"class":55581},[74,68817,57767],{"class":1925},[74,68819,131],{"class":84},[74,68821,66904],{"class":190},[74,68823,65333],{"class":84},[74,68825,1424],{"class":55581},[74,68827,59520],{"class":1925},[74,68829,131],{"class":84},[74,68831,68832],{"class":190},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[74,68834,59528],{"class":1925},[74,68836,131],{"class":84},[74,68838,11931],{"class":190},[74,68840,68700],{"class":84},[74,68842,55892],{"class":55581},[74,68844,55588],{"class":84},[74,68846,68847,68849,68851],{"class":76,"line":21160},[74,68848,56057],{"class":84},[74,68850,55892],{"class":55581},[74,68852,55588],{"class":84},[74,68854,68855,68857,68859],{"class":76,"line":21165},[74,68856,56698],{"class":84},[74,68858,55892],{"class":55581},[74,68860,55588],{"class":84},[74,68862,68863,68865,68867],{"class":76,"line":21178},[74,68864,56425],{"class":84},[74,68866,56094],{"class":55581},[74,68868,55588],{"class":84},[74,68870,68871],{"class":76,"line":21183},[74,68872,68873],{"class":144},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[74,68875,68876],{"class":76,"line":21188},[74,68877,68878],{"class":144},"    \u002F\u002F 1.1 获取 a 元素 \n",[74,68880,68881,68883,68886,68888,68890,68892,68894,68897],{"class":76,"line":21193},[74,68882,15500],{"class":80},[74,68884,68885],{"class":134}," as",[74,68887,17843],{"class":80},[74,68889,58677],{"class":84},[74,68891,59962],{"class":1925},[74,68893,85],{"class":84},[74,68895,68896],{"class":190},"'.tab-nav a'",[74,68898,91],{"class":84},[74,68900,68901],{"class":76,"line":21206},[74,68902,68903],{"class":144},"    \u002F\u002F console.log(as) \n",[74,68905,68906,68908,68910,68912,68914,68916,68918,68920,68922,68925,68927,68929,68931],{"class":76,"line":21211},[74,68907,3164],{"class":80},[74,68909,1620],{"class":84},[74,68911,56128],{"class":80},[74,68913,13717],{"class":84},[74,68915,131],{"class":80},[74,68917,4056],{"class":134},[74,68919,13724],{"class":84},[74,68921,996],{"class":80},[74,68923,68924],{"class":84}," as.",[74,68926,56249],{"class":134},[74,68928,3177],{"class":84},[74,68930,2254],{"class":80},[74,68932,16721],{"class":84},[74,68934,68935],{"class":76,"line":36914},[74,68936,68937],{"class":144},"      \u002F\u002F console.log(as[i])\n",[74,68939,68940],{"class":76,"line":36920},[74,68941,68942],{"class":144},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[74,68944,68945,68948,68950,68952,68955,68957,68959],{"class":76,"line":36926},[74,68946,68947],{"class":84},"      as[i].",[74,68949,62094],{"class":1925},[74,68951,85],{"class":84},[74,68953,68954],{"class":190},"'mouseenter'",[74,68956,16714],{"class":84},[74,68958,58730],{"class":80},[74,68960,58733],{"class":84},[74,68962,68963],{"class":76,"line":36932},[74,68964,68965],{"class":144},"        \u002F\u002F console.log('鼠标经过')\n",[74,68967,68968],{"class":76,"line":36938},[74,68969,68970],{"class":144},"        \u002F\u002F 排他思想  \n",[74,68972,68973],{"class":76,"line":36949},[74,68974,68975],{"class":144},"        \u002F\u002F 干掉别人 移除类active\n",[74,68977,68978,68980,68982,68984,68987,68989,68991,68993,68996],{"class":76,"line":36955},[74,68979,56206],{"class":84},[74,68981,58680],{"class":1925},[74,68983,85],{"class":84},[74,68985,68986],{"class":190},"'.tab-nav .active'",[74,68988,61284],{"class":84},[74,68990,61287],{"class":1925},[74,68992,85],{"class":84},[74,68994,68995],{"class":190},"'active'",[74,68997,91],{"class":84},[74,68999,69000],{"class":76,"line":36975},[74,69001,69002],{"class":144},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[74,69004,69005,69008,69011,69013,69015,69017],{"class":76,"line":36981},[74,69006,69007],{"class":134},"        this",[74,69009,69010],{"class":84},".classList.",[74,69012,9613],{"class":1925},[74,69014,85],{"class":84},[74,69016,68995],{"class":190},[74,69018,91],{"class":84},[74,69020,69021],{"class":76,"line":36992},[74,69022,2363],{"emptyLinePlaceholder":2362},[74,69024,69025],{"class":76,"line":36998},[74,69026,69027],{"class":144},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[74,69029,69030],{"class":76,"line":37004},[74,69031,69032],{"class":144},"        \u002F\u002F 干掉别人\n",[74,69034,69035,69037,69039,69041,69044,69046,69048,69050,69052],{"class":76,"line":37010},[74,69036,56206],{"class":84},[74,69038,58680],{"class":1925},[74,69040,85],{"class":84},[74,69042,69043],{"class":190},"'.tab-content .active'",[74,69045,61284],{"class":84},[74,69047,61287],{"class":1925},[74,69049,85],{"class":84},[74,69051,68995],{"class":190},[74,69053,91],{"class":84},[74,69055,69056],{"class":76,"line":37016},[74,69057,69058],{"class":144},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[74,69060,69061,69063,69065,69067,69070,69072,69074,69076,69078,69080,69082,69084,69086],{"class":76,"line":37022},[74,69062,56206],{"class":84},[74,69064,58680],{"class":1925},[74,69066,85],{"class":84},[74,69068,69069],{"class":190},"`.tab-content .item:nth-child(${",[74,69071,527],{"class":84},[74,69073,49847],{"class":80},[74,69075,29399],{"class":134},[74,69077,61313],{"class":190},[74,69079,61284],{"class":84},[74,69081,9613],{"class":1925},[74,69083,85],{"class":84},[74,69085,68995],{"class":190},[74,69087,91],{"class":84},[74,69089,69090],{"class":76,"line":37028},[74,69091,2363],{"emptyLinePlaceholder":2362},[74,69093,69094],{"class":76,"line":37034},[74,69095,69096],{"class":84},"      })\n",[74,69098,69099],{"class":76,"line":37054},[74,69100,2149],{"class":84},[74,69102,69103,69105,69107],{"class":76,"line":37060},[74,69104,56698],{"class":84},[74,69106,56094],{"class":55581},[74,69108,55588],{"class":84},[74,69110,69111,69113,69115],{"class":76,"line":37076},[74,69112,56066],{"class":84},[74,69114,56081],{"class":55581},[74,69116,55588],{"class":84},[74,69118,69119],{"class":76,"line":37082},[74,69120,2363],{"emptyLinePlaceholder":2362},[74,69122,69123,69125,69127],{"class":76,"line":37096},[74,69124,56066],{"class":84},[74,69126,54916],{"class":55581},[74,69128,55588],{"class":84},[19,69130,69131],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,69133,69134],{},"在监听事件中，this指向的就是他的调用者",[19,69136,69137],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,69139,58001],{},[19,69141,69142],{},"(function () {",[19,69144,69145],{},"const list = document.querySelector('.xtx-elevator-list')",[19,69147,69148],{},"list.addEventListener('click', function (e) {",[19,69150,69151],{},"if (e.target.tagName === 'A') {",[19,69153,69154],{},"\u002F\u002F 排他思想",[19,69156,69157],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,69159,69160],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,69162,69163],{},"\u002F\u002F console.log(old);",[19,69165,69166],{},"\u002F\u002F 判断",[19,69168,69169],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,69171,69172],{},"if (old) old.classList.remove('active')",[19,69174,69175],{},"e.target.classList.add('active')",[19,69177,1032],{},[19,69179,56745],{},[19,69181,69182],{},"})();",[44,69184,69186],{"id":69185},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[64,69188,69190],{"className":54914,"code":69189,"language":54916,"meta":69,"style":69},"\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",[71,69191,69192,69202,69206,69214,69218,69232,69246,69258,69266,69272,69282,69292,69296,69300,69307,69319,69330,69347,69360,69374,69384,69388,69392,69399,69410,69428,69438,69450,69454,69458,69465,69482,69493,69505,69509,69513,69520,69532,69536,69544,69552,69556,69564,69572,69580,69595,69639,69647,69660,69673,69686,69694,69702,69710,69738,69746,69758,69771,69784,69792,69800,69808,69834,69842,69855,69867,69880,69888,69896,69904,69930,69938,69951,69963,69976,69984,69992,70000,70005,70025,70030,70050,70055,70072,70077,70085,70090,70119,70132,70136,70140,70145,70149,70177,70182,70199,70204,70209,70214,70219,70245,70249,70253,70261,70269,70273],{"__ignoreMap":69},[74,69193,69194,69196,69198,69200],{"class":76,"line":77},[74,69195,55578],{"class":84},[74,69197,55582],{"class":55581},[74,69199,55585],{"class":1925},[74,69201,55588],{"class":84},[74,69203,69204],{"class":76,"line":94},[74,69205,2363],{"emptyLinePlaceholder":2362},[74,69207,69208,69210,69212],{"class":76,"line":1141},[74,69209,996],{"class":84},[74,69211,54916],{"class":55581},[74,69213,55588],{"class":84},[74,69215,69216],{"class":76,"line":1156},[74,69217,2363],{"emptyLinePlaceholder":2362},[74,69219,69220,69222,69224,69226,69228,69230],{"class":76,"line":1162},[74,69221,996],{"class":84},[74,69223,55615],{"class":55581},[74,69225,55597],{"class":1925},[74,69227,131],{"class":84},[74,69229,55602],{"class":190},[74,69231,55588],{"class":84},[74,69233,69234,69236,69238,69240,69242,69244],{"class":76,"line":1176},[74,69235,56425],{"class":84},[74,69237,55625],{"class":55581},[74,69239,55628],{"class":1925},[74,69241,131],{"class":84},[74,69243,55633],{"class":190},[74,69245,55588],{"class":84},[74,69247,69248,69250,69252,69254,69256],{"class":76,"line":1182},[74,69249,56425],{"class":84},[74,69251,55688],{"class":55581},[74,69253,59595],{"class":84},[74,69255,55688],{"class":55581},[74,69257,55588],{"class":84},[74,69259,69260,69262,69264],{"class":76,"line":1273},[74,69261,56425],{"class":84},[74,69263,5090],{"class":55581},[74,69265,55588],{"class":84},[74,69267,69268,69270],{"class":76,"line":1279},[74,69269,10682],{"class":55581},[74,69271,19851],{"class":84},[74,69273,69274,69276,69278,69280],{"class":76,"line":1291},[74,69275,58987],{"class":134},[74,69277,55718],{"class":84},[74,69279,277],{"class":134},[74,69281,1252],{"class":84},[74,69283,69284,69286,69288,69290],{"class":76,"line":1574},[74,69285,58976],{"class":134},[74,69287,55718],{"class":84},[74,69289,277],{"class":134},[74,69291,1252],{"class":84},[74,69293,69294],{"class":76,"line":1579},[74,69295,2149],{"class":84},[74,69297,69298],{"class":76,"line":1585},[74,69299,2363],{"emptyLinePlaceholder":2362},[74,69301,69302,69305],{"class":76,"line":1590},[74,69303,69304],{"class":55581},"    table",[74,69306,19851],{"class":84},[74,69308,69309,69312,69314,69317],{"class":76,"line":1604},[74,69310,69311],{"class":134},"      border-collapse",[74,69313,55718],{"class":84},[74,69315,69316],{"class":134},"collapse",[74,69318,1252],{"class":84},[74,69320,69321,69324,69326,69328],{"class":76,"line":1609},[74,69322,69323],{"class":134},"      border-spacing",[74,69325,55718],{"class":84},[74,69327,277],{"class":134},[74,69329,1252],{"class":84},[74,69331,69332,69334,69336,69338,69340,69342,69345],{"class":76,"line":1615},[74,69333,66258],{"class":134},[74,69335,55718],{"class":84},[74,69337,303],{"class":134},[74,69339,55773],{"class":80},[74,69341,55802],{"class":134},[74,69343,69344],{"class":134}," #c0c0c0",[74,69346,1252],{"class":84},[74,69348,69349,69351,69353,69356,69358],{"class":76,"line":1636},[74,69350,59052],{"class":134},[74,69352,55718],{"class":84},[74,69354,69355],{"class":134},"500",[74,69357,55773],{"class":80},[74,69359,1252],{"class":84},[74,69361,69362,69364,69366,69368,69370,69372],{"class":76,"line":1641},[74,69363,58987],{"class":134},[74,69365,55718],{"class":84},[74,69367,397],{"class":134},[74,69369,55773],{"class":80},[74,69371,55837],{"class":134},[74,69373,1252],{"class":84},[74,69375,69376,69378,69380,69382],{"class":76,"line":1655},[74,69377,61567],{"class":134},[74,69379,55718],{"class":84},[74,69381,55873],{"class":134},[74,69383,1252],{"class":84},[74,69385,69386],{"class":76,"line":1660},[74,69387,2149],{"class":84},[74,69389,69390],{"class":76,"line":1689},[74,69391,2363],{"emptyLinePlaceholder":2362},[74,69393,69394,69397],{"class":76,"line":1694},[74,69395,69396],{"class":55581},"    th",[74,69398,19851],{"class":84},[74,69400,69401,69403,69405,69408],{"class":76,"line":1711},[74,69402,59165],{"class":134},[74,69404,55718],{"class":84},[74,69406,69407],{"class":134},"#09c",[74,69409,1252],{"class":84},[74,69411,69412,69415,69417,69419,69421,69423,69426],{"class":76,"line":1716},[74,69413,69414],{"class":134},"      font",[74,69416,55718],{"class":84},[74,69418,66620],{"class":134},[74,69420,68354],{"class":134},[74,69422,55773],{"class":80},[74,69424,69425],{"class":190}," \"微软雅黑\"",[74,69427,1252],{"class":84},[74,69429,69430,69432,69434,69436],{"class":76,"line":1721},[74,69431,61697],{"class":134},[74,69433,55718],{"class":84},[74,69435,65123],{"class":134},[74,69437,1252],{"class":84},[74,69439,69440,69442,69444,69446,69448],{"class":76,"line":1726},[74,69441,59066],{"class":134},[74,69443,55718],{"class":84},[74,69445,886],{"class":134},[74,69447,55773],{"class":80},[74,69449,1252],{"class":84},[74,69451,69452],{"class":76,"line":1740},[74,69453,2149],{"class":84},[74,69455,69456],{"class":76,"line":1745},[74,69457,2363],{"emptyLinePlaceholder":2362},[74,69459,69460,69463],{"class":76,"line":2540},[74,69461,69462],{"class":55581},"    td",[74,69464,19851],{"class":84},[74,69466,69467,69469,69471,69473,69475,69477,69480],{"class":76,"line":2554},[74,69468,66258],{"class":134},[74,69470,55718],{"class":84},[74,69472,303],{"class":134},[74,69474,55773],{"class":80},[74,69476,55802],{"class":134},[74,69478,69479],{"class":134}," #d0d0d0",[74,69481,1252],{"class":84},[74,69483,69484,69486,69488,69491],{"class":76,"line":2562},[74,69485,61697],{"class":134},[74,69487,55718],{"class":84},[74,69489,69490],{"class":134},"#404060",[74,69492,1252],{"class":84},[74,69494,69495,69497,69499,69501,69503],{"class":76,"line":2567},[74,69496,58976],{"class":134},[74,69498,55718],{"class":84},[74,69500,532],{"class":134},[74,69502,55773],{"class":80},[74,69504,1252],{"class":84},[74,69506,69507],{"class":76,"line":2573},[74,69508,2149],{"class":84},[74,69510,69511],{"class":76,"line":2579},[74,69512,2363],{"emptyLinePlaceholder":2362},[74,69514,69515,69518],{"class":76,"line":2584},[74,69516,69517],{"class":1925},"    .allCheck",[74,69519,19851],{"class":84},[74,69521,69522,69524,69526,69528,69530],{"class":76,"line":12227},[74,69523,59052],{"class":134},[74,69525,55718],{"class":84},[74,69527,698],{"class":134},[74,69529,55773],{"class":80},[74,69531,1252],{"class":84},[74,69533,69534],{"class":76,"line":12251},[74,69535,2149],{"class":84},[74,69537,69538,69540,69542],{"class":76,"line":12256},[74,69539,56698],{"class":84},[74,69541,5090],{"class":55581},[74,69543,55588],{"class":84},[74,69545,69546,69548,69550],{"class":76,"line":12262},[74,69547,56066],{"class":84},[74,69549,55615],{"class":55581},[74,69551,55588],{"class":84},[74,69553,69554],{"class":76,"line":12289},[74,69555,2363],{"emptyLinePlaceholder":2362},[74,69557,69558,69560,69562],{"class":76,"line":12294},[74,69559,996],{"class":84},[74,69561,56081],{"class":55581},[74,69563,55588],{"class":84},[74,69565,69566,69568,69570],{"class":76,"line":12300},[74,69567,56425],{"class":84},[74,69569,223],{"class":55581},[74,69571,55588],{"class":84},[74,69573,69574,69576,69578],{"class":76,"line":12312},[74,69575,55622],{"class":84},[74,69577,229],{"class":55581},[74,69579,55588],{"class":84},[74,69581,69582,69584,69586,69588,69590,69593],{"class":76,"line":12324},[74,69583,59515],{"class":84},[74,69585,232],{"class":55581},[74,69587,57767],{"class":1925},[74,69589,131],{"class":84},[74,69591,69592],{"class":190},"\"allCheck\"",[74,69594,55588],{"class":84},[74,69596,69597,69599,69601,69603,69605,69607,69609,69611,69613,69615,69617,69620,69623,69625,69627,69629,69632,69635,69637],{"class":76,"line":12336},[74,69598,59583],{"class":84},[74,69600,58102],{"class":55581},[74,69602,58105],{"class":1925},[74,69604,131],{"class":84},[74,69606,58110],{"class":190},[74,69608,19199],{"class":1925},[74,69610,131],{"class":84},[74,69612,11931],{"class":190},[74,69614,19238],{"class":1925},[74,69616,131],{"class":84},[74,69618,69619],{"class":190},"\"checkAll\"",[74,69621,69622],{"class":84},"> \u003C",[74,69624,74],{"class":55581},[74,69626,57767],{"class":1925},[74,69628,131],{"class":84},[74,69630,69631],{"class":190},"\"all\"",[74,69633,69634],{"class":84},">全选\u003C\u002F",[74,69636,74],{"class":55581},[74,69638,55588],{"class":84},[74,69640,69641,69643,69645],{"class":76,"line":13995},[74,69642,59688],{"class":84},[74,69644,232],{"class":55581},[74,69646,55588],{"class":84},[74,69648,69649,69651,69653,69656,69658],{"class":76,"line":14020},[74,69650,59515],{"class":84},[74,69652,232],{"class":55581},[74,69654,69655],{"class":84},">商品\u003C\u002F",[74,69657,232],{"class":55581},[74,69659,55588],{"class":84},[74,69661,69662,69664,69666,69669,69671],{"class":76,"line":14043},[74,69663,59515],{"class":84},[74,69665,232],{"class":55581},[74,69667,69668],{"class":84},">商家\u003C\u002F",[74,69670,232],{"class":55581},[74,69672,55588],{"class":84},[74,69674,69675,69677,69679,69682,69684],{"class":76,"line":14067},[74,69676,59515],{"class":84},[74,69678,232],{"class":55581},[74,69680,69681],{"class":84},">价格\u003C\u002F",[74,69683,232],{"class":55581},[74,69685,55588],{"class":84},[74,69687,69688,69690,69692],{"class":76,"line":14072},[74,69689,56057],{"class":84},[74,69691,229],{"class":55581},[74,69693,55588],{"class":84},[74,69695,69696,69698,69700],{"class":76,"line":14077},[74,69697,55622],{"class":84},[74,69699,229],{"class":55581},[74,69701,55588],{"class":84},[74,69703,69704,69706,69708],{"class":76,"line":14082},[74,69705,59515],{"class":84},[74,69707,275],{"class":55581},[74,69709,55588],{"class":84},[74,69711,69712,69714,69716,69718,69720,69722,69724,69726,69729,69731,69733,69736],{"class":76,"line":14091},[74,69713,59583],{"class":84},[74,69715,58102],{"class":55581},[74,69717,58105],{"class":1925},[74,69719,131],{"class":84},[74,69721,58110],{"class":190},[74,69723,19199],{"class":1925},[74,69725,131],{"class":84},[74,69727,69728],{"class":190},"\"check\"",[74,69730,57767],{"class":1925},[74,69732,131],{"class":84},[74,69734,69735],{"class":190},"\"ck\"",[74,69737,55588],{"class":84},[74,69739,69740,69742,69744],{"class":76,"line":14096},[74,69741,59688],{"class":84},[74,69743,275],{"class":55581},[74,69745,55588],{"class":84},[74,69747,69748,69750,69752,69754,69756],{"class":76,"line":14102},[74,69749,59515],{"class":84},[74,69751,275],{"class":55581},[74,69753,65454],{"class":84},[74,69755,275],{"class":55581},[74,69757,55588],{"class":84},[74,69759,69760,69762,69764,69767,69769],{"class":76,"line":14123},[74,69761,59515],{"class":84},[74,69763,275],{"class":55581},[74,69765,69766],{"class":84},">小米\u003C\u002F",[74,69768,275],{"class":55581},[74,69770,55588],{"class":84},[74,69772,69773,69775,69777,69780,69782],{"class":76,"line":14129},[74,69774,59515],{"class":84},[74,69776,275],{"class":55581},[74,69778,69779],{"class":84},">￥1999\u003C\u002F",[74,69781,275],{"class":55581},[74,69783,55588],{"class":84},[74,69785,69786,69788,69790],{"class":76,"line":14143},[74,69787,56057],{"class":84},[74,69789,229],{"class":55581},[74,69791,55588],{"class":84},[74,69793,69794,69796,69798],{"class":76,"line":14149},[74,69795,55622],{"class":84},[74,69797,229],{"class":55581},[74,69799,55588],{"class":84},[74,69801,69802,69804,69806],{"class":76,"line":14176},[74,69803,59515],{"class":84},[74,69805,275],{"class":55581},[74,69807,55588],{"class":84},[74,69809,69810,69812,69814,69816,69818,69820,69822,69824,69826,69828,69830,69832],{"class":76,"line":14185},[74,69811,59583],{"class":84},[74,69813,58102],{"class":55581},[74,69815,58105],{"class":1925},[74,69817,131],{"class":84},[74,69819,58110],{"class":190},[74,69821,19199],{"class":1925},[74,69823,131],{"class":84},[74,69825,69728],{"class":190},[74,69827,57767],{"class":1925},[74,69829,131],{"class":84},[74,69831,69735],{"class":190},[74,69833,55588],{"class":84},[74,69835,69836,69838,69840],{"class":76,"line":14191},[74,69837,59688],{"class":84},[74,69839,275],{"class":55581},[74,69841,55588],{"class":84},[74,69843,69844,69846,69848,69851,69853],{"class":76,"line":14199},[74,69845,59515],{"class":84},[74,69847,275],{"class":55581},[74,69849,69850],{"class":84},">小米净水器\u003C\u002F",[74,69852,275],{"class":55581},[74,69854,55588],{"class":84},[74,69856,69857,69859,69861,69863,69865],{"class":76,"line":14204},[74,69858,59515],{"class":84},[74,69860,275],{"class":55581},[74,69862,69766],{"class":84},[74,69864,275],{"class":55581},[74,69866,55588],{"class":84},[74,69868,69869,69871,69873,69876,69878],{"class":76,"line":20883},[74,69870,59515],{"class":84},[74,69872,275],{"class":55581},[74,69874,69875],{"class":84},">￥4999\u003C\u002F",[74,69877,275],{"class":55581},[74,69879,55588],{"class":84},[74,69881,69882,69884,69886],{"class":76,"line":20889},[74,69883,56057],{"class":84},[74,69885,229],{"class":55581},[74,69887,55588],{"class":84},[74,69889,69890,69892,69894],{"class":76,"line":20912},[74,69891,55622],{"class":84},[74,69893,229],{"class":55581},[74,69895,55588],{"class":84},[74,69897,69898,69900,69902],{"class":76,"line":20918},[74,69899,59515],{"class":84},[74,69901,275],{"class":55581},[74,69903,55588],{"class":84},[74,69905,69906,69908,69910,69912,69914,69916,69918,69920,69922,69924,69926,69928],{"class":76,"line":20941},[74,69907,59583],{"class":84},[74,69909,58102],{"class":55581},[74,69911,58105],{"class":1925},[74,69913,131],{"class":84},[74,69915,58110],{"class":190},[74,69917,19199],{"class":1925},[74,69919,131],{"class":84},[74,69921,69728],{"class":190},[74,69923,57767],{"class":1925},[74,69925,131],{"class":84},[74,69927,69735],{"class":190},[74,69929,55588],{"class":84},[74,69931,69932,69934,69936],{"class":76,"line":20955},[74,69933,59688],{"class":84},[74,69935,275],{"class":55581},[74,69937,55588],{"class":84},[74,69939,69940,69942,69944,69947,69949],{"class":76,"line":20975},[74,69941,59515],{"class":84},[74,69943,275],{"class":55581},[74,69945,69946],{"class":84},">小米电视\u003C\u002F",[74,69948,275],{"class":55581},[74,69950,55588],{"class":84},[74,69952,69953,69955,69957,69959,69961],{"class":76,"line":20981},[74,69954,59515],{"class":84},[74,69956,275],{"class":55581},[74,69958,69766],{"class":84},[74,69960,275],{"class":55581},[74,69962,55588],{"class":84},[74,69964,69965,69967,69969,69972,69974],{"class":76,"line":20992},[74,69966,59515],{"class":84},[74,69968,275],{"class":55581},[74,69970,69971],{"class":84},">￥5999\u003C\u002F",[74,69973,275],{"class":55581},[74,69975,55588],{"class":84},[74,69977,69978,69980,69982],{"class":76,"line":21015},[74,69979,56057],{"class":84},[74,69981,229],{"class":55581},[74,69983,55588],{"class":84},[74,69985,69986,69988,69990],{"class":76,"line":21037},[74,69987,56698],{"class":84},[74,69989,223],{"class":55581},[74,69991,55588],{"class":84},[74,69993,69994,69996,69998],{"class":76,"line":21042},[74,69995,56425],{"class":84},[74,69997,56094],{"class":55581},[74,69999,55588],{"class":84},[74,70001,70002],{"class":76,"line":21048},[74,70003,70004],{"class":144},"    \u002F\u002F 1. 获取大复选框\n",[74,70006,70007,70009,70012,70014,70016,70018,70020,70023],{"class":76,"line":21062},[74,70008,15500],{"class":80},[74,70010,70011],{"class":134}," checkAll",[74,70013,17843],{"class":80},[74,70015,58677],{"class":84},[74,70017,58680],{"class":1925},[74,70019,85],{"class":84},[74,70021,70022],{"class":190},"'#checkAll'",[74,70024,91],{"class":84},[74,70026,70027],{"class":76,"line":21075},[74,70028,70029],{"class":144},"    \u002F\u002F 2. 获取所有的小复选框\n",[74,70031,70032,70034,70037,70039,70041,70043,70045,70048],{"class":76,"line":21080},[74,70033,15500],{"class":80},[74,70035,70036],{"class":134}," cks",[74,70038,17843],{"class":80},[74,70040,58677],{"class":84},[74,70042,59962],{"class":1925},[74,70044,85],{"class":84},[74,70046,70047],{"class":190},"'.ck'",[74,70049,91],{"class":84},[74,70051,70052],{"class":76,"line":21094},[74,70053,70054],{"class":144},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[74,70056,70057,70060,70062,70064,70066,70068,70070],{"class":76,"line":21099},[74,70058,70059],{"class":84},"    checkAll.",[74,70061,62094],{"class":1925},[74,70063,85],{"class":84},[74,70065,62099],{"class":190},[74,70067,16714],{"class":84},[74,70069,58730],{"class":80},[74,70071,58733],{"class":84},[74,70073,70074],{"class":76,"line":21105},[74,70075,70076],{"class":144},"      \u002F\u002F 得到当前大复选框的选中状态\n",[74,70078,70079,70082],{"class":76,"line":21110},[74,70080,70081],{"class":144},"      \u002F\u002F console.log(checkAll.checked)",[74,70083,70084],{"class":144},"  \u002F\u002F 得到 是 true 或者是 false\n",[74,70086,70087],{"class":76,"line":21124},[74,70088,70089],{"class":144},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[74,70091,70092,70094,70096,70098,70100,70102,70104,70106,70108,70111,70113,70115,70117],{"class":76,"line":21129},[74,70093,56565],{"class":80},[74,70095,1620],{"class":84},[74,70097,56128],{"class":80},[74,70099,13717],{"class":84},[74,70101,131],{"class":80},[74,70103,4056],{"class":134},[74,70105,13724],{"class":84},[74,70107,996],{"class":80},[74,70109,70110],{"class":84}," cks.",[74,70112,56249],{"class":134},[74,70114,3177],{"class":84},[74,70116,2254],{"class":80},[74,70118,16721],{"class":84},[74,70120,70121,70124,70126,70129],{"class":76,"line":21134},[74,70122,70123],{"class":84},"        cks[i].checked ",[74,70125,131],{"class":80},[74,70127,70128],{"class":134}," this",[74,70130,70131],{"class":84},".checked\n",[74,70133,70134],{"class":76,"line":21148},[74,70135,56679],{"class":84},[74,70137,70138],{"class":76,"line":21160},[74,70139,37742],{"class":84},[74,70141,70142],{"class":76,"line":21165},[74,70143,70144],{"class":144},"    \u002F\u002F 5. 小复选框控制大复选框\n",[74,70146,70147],{"class":76,"line":21178},[74,70148,2363],{"emptyLinePlaceholder":2362},[74,70150,70151,70153,70155,70157,70159,70161,70163,70165,70167,70169,70171,70173,70175],{"class":76,"line":21183},[74,70152,3164],{"class":80},[74,70154,1620],{"class":84},[74,70156,56128],{"class":80},[74,70158,13717],{"class":84},[74,70160,131],{"class":80},[74,70162,4056],{"class":134},[74,70164,13724],{"class":84},[74,70166,996],{"class":80},[74,70168,70110],{"class":84},[74,70170,56249],{"class":134},[74,70172,3177],{"class":84},[74,70174,2254],{"class":80},[74,70176,16721],{"class":84},[74,70178,70179],{"class":76,"line":21188},[74,70180,70181],{"class":144},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[74,70183,70184,70187,70189,70191,70193,70195,70197],{"class":76,"line":21193},[74,70185,70186],{"class":84},"      cks[i].",[74,70188,62094],{"class":1925},[74,70190,85],{"class":84},[74,70192,62099],{"class":190},[74,70194,16714],{"class":84},[74,70196,58730],{"class":80},[74,70198,58733],{"class":84},[74,70200,70201],{"class":76,"line":21206},[74,70202,70203],{"class":144},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[74,70205,70206],{"class":76,"line":21211},[74,70207,70208],{"class":144},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[74,70210,70211],{"class":76,"line":36914},[74,70212,70213],{"class":144},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[74,70215,70216],{"class":76,"line":36920},[74,70217,70218],{"class":144},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[74,70220,70221,70224,70226,70228,70230,70232,70235,70237,70239,70241,70243],{"class":76,"line":36926},[74,70222,70223],{"class":84},"        checkAll.checked ",[74,70225,131],{"class":80},[74,70227,58677],{"class":84},[74,70229,59962],{"class":1925},[74,70231,85],{"class":84},[74,70233,70234],{"class":190},"'.ck:checked'",[74,70236,35107],{"class":84},[74,70238,56249],{"class":134},[74,70240,62187],{"class":80},[74,70242,70110],{"class":84},[74,70244,60112],{"class":134},[74,70246,70247],{"class":76,"line":36932},[74,70248,69096],{"class":84},[74,70250,70251],{"class":76,"line":36938},[74,70252,2149],{"class":84},[74,70254,70255,70257,70259],{"class":76,"line":36949},[74,70256,56698],{"class":84},[74,70258,56094],{"class":55581},[74,70260,55588],{"class":84},[74,70262,70263,70265,70267],{"class":76,"line":36955},[74,70264,56066],{"class":84},[74,70266,56081],{"class":55581},[74,70268,55588],{"class":84},[74,70270,70271],{"class":76,"line":36975},[74,70272,2363],{"emptyLinePlaceholder":2362},[74,70274,70275,70277,70279],{"class":76,"line":36981},[74,70276,56066],{"class":84},[74,70278,54916],{"class":55581},[74,70280,55588],{"class":84},[19,70282,70283],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,70285,70286],{},"用好之间比较得到的布尔值！！！",[19,70288,70289,70290,70293,70294,1620,70297,670,70299,70302],{},"在 JS 里访问的时候，",[71,70291,70292],{},"checkbox.checked"," 是一个 ",[235,70295,70296],{},"布尔值",[71,70298,1324],{},[71,70300,70301],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,70304,70305,70306,70309,70310],{},"HTML 的 ",[71,70307,70308],{},"checked=\"checked\""," 只是 ",[235,70311,70312,70313,70316],{},"初始值；JS 的 ",[71,70314,70315],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,70318,70319],{},"：checked是一个伪类选择器",[19,70321,70322],{},[1424,70323],{"alt":69,"src":70324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,70326,70327,70330],{},[70328,70329],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,70332,70333],{},[1424,70334],{"alt":69,"src":70335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,70337,70339],{"id":70338},"_33-dom事件进阶","3.3 DOM事件进阶",[44,70341,70343],{"id":70342},"_331-事件流","3.3.1 事件流",[19,70345,70346],{},[1424,70347],{"alt":69,"src":70348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[26277,70350,70352],{"id":70351},"_3311-事件捕获","3.3.1.1 事件捕获",[19,70354,70355],{},[1424,70356],{"alt":69,"src":70357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[64,70359,70361],{"className":54914,"code":70360,"language":54916,"meta":69,"style":69},"\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",[71,70362,70363,70373,70387,70391,70399,70413,70433,70445,70453,70460,70472,70484,70494,70498,70502,70509,70521,70533,70543,70547,70555,70563,70567,70575,70590,70609,70617,70625,70645,70665,70681,70692,70700,70717,70728,70736,70753,70764,70772,70780,70788,70792],{"__ignoreMap":69},[74,70364,70365,70367,70369,70371],{"class":76,"line":77},[74,70366,55578],{"class":84},[74,70368,55582],{"class":55581},[74,70370,55585],{"class":1925},[74,70372,55588],{"class":84},[74,70374,70375,70377,70379,70381,70383,70385],{"class":76,"line":94},[74,70376,996],{"class":84},[74,70378,54916],{"class":55581},[74,70380,55597],{"class":1925},[74,70382,131],{"class":84},[74,70384,55602],{"class":190},[74,70386,55588],{"class":84},[74,70388,70389],{"class":76,"line":1141},[74,70390,2363],{"emptyLinePlaceholder":2362},[74,70392,70393,70395,70397],{"class":76,"line":1156},[74,70394,996],{"class":84},[74,70396,55615],{"class":55581},[74,70398,55588],{"class":84},[74,70400,70401,70403,70405,70407,70409,70411],{"class":76,"line":1162},[74,70402,56425],{"class":84},[74,70404,55625],{"class":55581},[74,70406,55628],{"class":1925},[74,70408,131],{"class":84},[74,70410,55633],{"class":190},[74,70412,55588],{"class":84},[74,70414,70415,70417,70419,70421,70423,70425,70427,70429,70431],{"class":76,"line":1176},[74,70416,56425],{"class":84},[74,70418,55625],{"class":55581},[74,70420,19199],{"class":1925},[74,70422,131],{"class":84},[74,70424,55672],{"class":190},[74,70426,55652],{"class":1925},[74,70428,131],{"class":84},[74,70430,55679],{"class":190},[74,70432,55588],{"class":84},[74,70434,70435,70437,70439,70441,70443],{"class":76,"line":1182},[74,70436,56425],{"class":84},[74,70438,55688],{"class":55581},[74,70440,55691],{"class":84},[74,70442,55688],{"class":55581},[74,70444,55588],{"class":84},[74,70446,70447,70449,70451],{"class":76,"line":1273},[74,70448,56425],{"class":84},[74,70450,5090],{"class":55581},[74,70452,55588],{"class":84},[74,70454,70455,70458],{"class":76,"line":1279},[74,70456,70457],{"class":1925},"    .father",[74,70459,19851],{"class":84},[74,70461,70462,70464,70466,70468,70470],{"class":76,"line":1291},[74,70463,59052],{"class":134},[74,70465,55718],{"class":84},[74,70467,69355],{"class":134},[74,70469,55773],{"class":80},[74,70471,1252],{"class":84},[74,70473,70474,70476,70478,70480,70482],{"class":76,"line":1574},[74,70475,59066],{"class":134},[74,70477,55718],{"class":84},[74,70479,69355],{"class":134},[74,70481,55773],{"class":80},[74,70483,1252],{"class":84},[74,70485,70486,70488,70490,70492],{"class":76,"line":1579},[74,70487,59165],{"class":134},[74,70489,55718],{"class":84},[74,70491,55926],{"class":134},[74,70493,1252],{"class":84},[74,70495,70496],{"class":76,"line":1585},[74,70497,2149],{"class":84},[74,70499,70500],{"class":76,"line":1590},[74,70501,2363],{"emptyLinePlaceholder":2362},[74,70503,70504,70507],{"class":76,"line":1604},[74,70505,70506],{"class":1925},"    .son",[74,70508,19851],{"class":84},[74,70510,70511,70513,70515,70517,70519],{"class":76,"line":1609},[74,70512,59052],{"class":134},[74,70514,55718],{"class":84},[74,70516,1684],{"class":134},[74,70518,55773],{"class":80},[74,70520,1252],{"class":84},[74,70522,70523,70525,70527,70529,70531],{"class":76,"line":1615},[74,70524,59066],{"class":134},[74,70526,55718],{"class":84},[74,70528,1684],{"class":134},[74,70530,55773],{"class":80},[74,70532,1252],{"class":84},[74,70534,70535,70537,70539,70541],{"class":76,"line":1636},[74,70536,59165],{"class":134},[74,70538,55718],{"class":84},[74,70540,59170],{"class":134},[74,70542,1252],{"class":84},[74,70544,70545],{"class":76,"line":1641},[74,70546,2149],{"class":84},[74,70548,70549,70551,70553],{"class":76,"line":1655},[74,70550,56698],{"class":84},[74,70552,5090],{"class":55581},[74,70554,55588],{"class":84},[74,70556,70557,70559,70561],{"class":76,"line":1660},[74,70558,56066],{"class":84},[74,70560,55615],{"class":55581},[74,70562,55588],{"class":84},[74,70564,70565],{"class":76,"line":1689},[74,70566,2363],{"emptyLinePlaceholder":2362},[74,70568,70569,70571,70573],{"class":76,"line":1694},[74,70570,996],{"class":84},[74,70572,56081],{"class":55581},[74,70574,55588],{"class":84},[74,70576,70577,70579,70581,70583,70585,70588],{"class":76,"line":1711},[74,70578,56425],{"class":84},[74,70580,55892],{"class":55581},[74,70582,57767],{"class":1925},[74,70584,131],{"class":84},[74,70586,70587],{"class":190},"\"father\"",[74,70589,55588],{"class":84},[74,70591,70592,70594,70596,70598,70600,70603,70605,70607],{"class":76,"line":1716},[74,70593,55622],{"class":84},[74,70595,55892],{"class":55581},[74,70597,57767],{"class":1925},[74,70599,131],{"class":84},[74,70601,70602],{"class":190},"\"son\"",[74,70604,59595],{"class":84},[74,70606,55892],{"class":55581},[74,70608,55588],{"class":84},[74,70610,70611,70613,70615],{"class":76,"line":1721},[74,70612,56698],{"class":84},[74,70614,55892],{"class":55581},[74,70616,55588],{"class":84},[74,70618,70619,70621,70623],{"class":76,"line":1726},[74,70620,56425],{"class":84},[74,70622,56094],{"class":55581},[74,70624,55588],{"class":84},[74,70626,70627,70629,70632,70634,70636,70638,70640,70643],{"class":76,"line":1740},[74,70628,15500],{"class":80},[74,70630,70631],{"class":134}," fa",[74,70633,17843],{"class":80},[74,70635,58677],{"class":84},[74,70637,58680],{"class":1925},[74,70639,85],{"class":84},[74,70641,70642],{"class":190},"'.father'",[74,70644,91],{"class":84},[74,70646,70647,70649,70652,70654,70656,70658,70660,70663],{"class":76,"line":1745},[74,70648,15500],{"class":80},[74,70650,70651],{"class":134}," son",[74,70653,17843],{"class":80},[74,70655,58677],{"class":84},[74,70657,58680],{"class":1925},[74,70659,85],{"class":84},[74,70661,70662],{"class":190},"'.son'",[74,70664,91],{"class":84},[74,70666,70667,70669,70671,70673,70675,70677,70679],{"class":76,"line":2540},[74,70668,56688],{"class":84},[74,70670,62094],{"class":1925},[74,70672,85],{"class":84},[74,70674,62099],{"class":190},[74,70676,16714],{"class":84},[74,70678,58730],{"class":80},[74,70680,58733],{"class":84},[74,70682,70683,70685,70687,70690],{"class":76,"line":2554},[74,70684,63206],{"class":1925},[74,70686,85],{"class":84},[74,70688,70689],{"class":190},"'woshiu1'",[74,70691,91],{"class":84},[74,70693,70694,70696,70698],{"class":76,"line":2562},[74,70695,58816],{"class":84},[74,70697,1324],{"class":134},[74,70699,91],{"class":84},[74,70701,70702,70705,70707,70709,70711,70713,70715],{"class":76,"line":2567},[74,70703,70704],{"class":84},"    fa.",[74,70706,62094],{"class":1925},[74,70708,85],{"class":84},[74,70710,62099],{"class":190},[74,70712,16714],{"class":84},[74,70714,58730],{"class":80},[74,70716,58733],{"class":84},[74,70718,70719,70721,70723,70726],{"class":76,"line":2573},[74,70720,63206],{"class":1925},[74,70722,85],{"class":84},[74,70724,70725],{"class":190},"'1'",[74,70727,91],{"class":84},[74,70729,70730,70732,70734],{"class":76,"line":2579},[74,70731,58816],{"class":84},[74,70733,1324],{"class":134},[74,70735,91],{"class":84},[74,70737,70738,70741,70743,70745,70747,70749,70751],{"class":76,"line":2584},[74,70739,70740],{"class":84},"    son.",[74,70742,62094],{"class":1925},[74,70744,85],{"class":84},[74,70746,62099],{"class":190},[74,70748,16714],{"class":84},[74,70750,58730],{"class":80},[74,70752,58733],{"class":84},[74,70754,70755,70757,70759,70762],{"class":76,"line":12227},[74,70756,63206],{"class":1925},[74,70758,85],{"class":84},[74,70760,70761],{"class":190},"'2'",[74,70763,91],{"class":84},[74,70765,70766,70768,70770],{"class":76,"line":12251},[74,70767,58816],{"class":84},[74,70769,1324],{"class":134},[74,70771,91],{"class":84},[74,70773,70774,70776,70778],{"class":76,"line":12256},[74,70775,56698],{"class":84},[74,70777,56094],{"class":55581},[74,70779,55588],{"class":84},[74,70781,70782,70784,70786],{"class":76,"line":12262},[74,70783,56066],{"class":84},[74,70785,56081],{"class":55581},[74,70787,55588],{"class":84},[74,70789,70790],{"class":76,"line":12289},[74,70791,2363],{"emptyLinePlaceholder":2362},[74,70793,70794,70796,70798],{"class":76,"line":12294},[74,70795,56066],{"class":84},[74,70797,54916],{"class":55581},[74,70799,55588],{"class":84},[19,70801,70802],{},[1424,70803],{"alt":69,"src":70804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,70806,70807],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[26277,70809,70811],{"id":70810},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,70813,70814],{},[1424,70815],{"alt":69,"src":70816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,70818,70819],{},"反着来",[19,70821,70822],{},"注意是同名事件，比如都是‘click’",[26277,70824,70826],{"id":70825},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,70828,70829],{},[1424,70830],{"alt":69,"src":70831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[26277,70833,70835],{"id":70834},"_3314-解绑事件","3.3.1.4 解绑事件",[19,70837,70838],{},[1424,70839],{"alt":69,"src":70840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,70842,70843],{},[1424,70844],{"alt":69,"src":70845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[26277,70847,70849],{"id":70848},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[27,70851,70852],{},[30,70853,70854],{},"事件类型的区别",[19,70856,70857],{},[1424,70858],{"alt":69,"src":70859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,70861,70862],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[27,70864,70865],{"start":94},[30,70866,70867],{},"注册事件的区别",[19,70869,70870],{},[1424,70871],{"alt":69,"src":70872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[26277,70874,70876],{"id":70875},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,70878,70879],{},[1424,70880],{"alt":69,"src":70881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,70883,70884],{},[1424,70885],{"alt":69,"src":70886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[64,70888,70890],{"className":57348,"code":70889,"language":57350,"meta":69,"style":69},"\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",[71,70891,70892,70900,70917,70940,70948,70953,70958,70963,70967,70975,70983],{"__ignoreMap":69},[74,70893,70894,70896,70898],{"class":76,"line":77},[74,70895,996],{"class":84},[74,70897,56081],{"class":55581},[74,70899,55588],{"class":84},[74,70901,70902,70904,70907,70910,70912,70915],{"class":76,"line":94},[74,70903,56425],{"class":84},[74,70905,70906],{"class":55581},"form",[74,70908,70909],{"class":1925}," action",[74,70911,131],{"class":84},[74,70913,70914],{"class":190},"\"http:\u002F\u002Fwww.itcast.cn\"",[74,70916,55588],{"class":84},[74,70918,70919,70921,70923,70925,70927,70930,70933,70935,70938],{"class":76,"line":1141},[74,70920,55622],{"class":84},[74,70922,58102],{"class":55581},[74,70924,58105],{"class":1925},[74,70926,131],{"class":84},[74,70928,70929],{"class":190},"\"submit\"",[74,70931,70932],{"class":1925}," value",[74,70934,131],{"class":84},[74,70936,70937],{"class":190},"\"免费注册\"",[74,70939,55588],{"class":84},[74,70941,70942,70944,70946],{"class":76,"line":1156},[74,70943,55622],{"class":84},[74,70945,56094],{"class":55581},[74,70947,55588],{"class":84},[74,70949,70950],{"class":76,"line":1162},[74,70951,70952],{"class":84},"      const form = document.querySelector('form')\n",[74,70954,70955],{"class":76,"line":1176},[74,70956,70957],{"class":84},"      form.addEventListener('submit', function (e) {\n",[74,70959,70960],{"class":76,"line":1182},[74,70961,70962],{"class":84},"        e.preventDefault()\n",[74,70964,70965],{"class":76,"line":1273},[74,70966,69096],{"class":84},[74,70968,70969,70971,70973],{"class":76,"line":1279},[74,70970,56057],{"class":84},[74,70972,56094],{"class":55581},[74,70974,55588],{"class":84},[74,70976,70977,70979,70981],{"class":76,"line":1291},[74,70978,56698],{"class":84},[74,70980,70906],{"class":55581},[74,70982,55588],{"class":84},[74,70984,70985,70987,70989],{"class":76,"line":1574},[74,70986,56066],{"class":84},[74,70988,56081],{"class":55581},[74,70990,55588],{"class":84},[19,70992,70993],{},"点击不在跳转！！！",[44,70995,70997],{"id":70996},"_332-事件委托","3.3.2 事件委托",[19,70999,71000],{},[1424,71001],{"alt":69,"src":71002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[64,71004,71006],{"className":54914,"code":71005,"language":54916,"meta":69,"style":69},"\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",[71,71007,71008,71018,71032,71036,71044,71058,71078,71090,71098,71102,71110,71118,71130,71142,71154,71166,71178,71191,71199,71207,71212,71231,71252,71257,71262,71267,71272,71281,71285,71295,71299,71304,71309,71323,71333,71337,71341,71349,71357,71361],{"__ignoreMap":69},[74,71009,71010,71012,71014,71016],{"class":76,"line":77},[74,71011,55578],{"class":84},[74,71013,55582],{"class":55581},[74,71015,55585],{"class":1925},[74,71017,55588],{"class":84},[74,71019,71020,71022,71024,71026,71028,71030],{"class":76,"line":94},[74,71021,996],{"class":84},[74,71023,54916],{"class":55581},[74,71025,55597],{"class":1925},[74,71027,131],{"class":84},[74,71029,55602],{"class":190},[74,71031,55588],{"class":84},[74,71033,71034],{"class":76,"line":1141},[74,71035,2363],{"emptyLinePlaceholder":2362},[74,71037,71038,71040,71042],{"class":76,"line":1156},[74,71039,996],{"class":84},[74,71041,55615],{"class":55581},[74,71043,55588],{"class":84},[74,71045,71046,71048,71050,71052,71054,71056],{"class":76,"line":1162},[74,71047,56425],{"class":84},[74,71049,55625],{"class":55581},[74,71051,55628],{"class":1925},[74,71053,131],{"class":84},[74,71055,55633],{"class":190},[74,71057,55588],{"class":84},[74,71059,71060,71062,71064,71066,71068,71070,71072,71074,71076],{"class":76,"line":1176},[74,71061,56425],{"class":84},[74,71063,55625],{"class":55581},[74,71065,19199],{"class":1925},[74,71067,131],{"class":84},[74,71069,55672],{"class":190},[74,71071,55652],{"class":1925},[74,71073,131],{"class":84},[74,71075,55679],{"class":190},[74,71077,55588],{"class":84},[74,71079,71080,71082,71084,71086,71088],{"class":76,"line":1182},[74,71081,56425],{"class":84},[74,71083,55688],{"class":55581},[74,71085,55691],{"class":84},[74,71087,55688],{"class":55581},[74,71089,55588],{"class":84},[74,71091,71092,71094,71096],{"class":76,"line":1273},[74,71093,56066],{"class":84},[74,71095,55615],{"class":55581},[74,71097,55588],{"class":84},[74,71099,71100],{"class":76,"line":1279},[74,71101,2363],{"emptyLinePlaceholder":2362},[74,71103,71104,71106,71108],{"class":76,"line":1291},[74,71105,996],{"class":84},[74,71107,56081],{"class":55581},[74,71109,55588],{"class":84},[74,71111,71112,71114,71116],{"class":76,"line":1574},[74,71113,56425],{"class":84},[74,71115,1093],{"class":55581},[74,71117,55588],{"class":84},[74,71119,71120,71122,71124,71126,71128],{"class":76,"line":1579},[74,71121,55622],{"class":84},[74,71123,30],{"class":55581},[74,71125,58247],{"class":84},[74,71127,30],{"class":55581},[74,71129,55588],{"class":84},[74,71131,71132,71134,71136,71138,71140],{"class":76,"line":1585},[74,71133,55622],{"class":84},[74,71135,30],{"class":55581},[74,71137,58266],{"class":84},[74,71139,30],{"class":55581},[74,71141,55588],{"class":84},[74,71143,71144,71146,71148,71150,71152],{"class":76,"line":1590},[74,71145,55622],{"class":84},[74,71147,30],{"class":55581},[74,71149,58285],{"class":84},[74,71151,30],{"class":55581},[74,71153,55588],{"class":84},[74,71155,71156,71158,71160,71162,71164],{"class":76,"line":1604},[74,71157,55622],{"class":84},[74,71159,30],{"class":55581},[74,71161,58304],{"class":84},[74,71163,30],{"class":55581},[74,71165,55588],{"class":84},[74,71167,71168,71170,71172,71174,71176],{"class":76,"line":1609},[74,71169,55622],{"class":84},[74,71171,30],{"class":55581},[74,71173,58323],{"class":84},[74,71175,30],{"class":55581},[74,71177,55588],{"class":84},[74,71179,71180,71182,71184,71187,71189],{"class":76,"line":1615},[74,71181,55622],{"class":84},[74,71183,19],{"class":55581},[74,71185,71186],{"class":84},">我不需要变色\u003C\u002F",[74,71188,19],{"class":55581},[74,71190,55588],{"class":84},[74,71192,71193,71195,71197],{"class":76,"line":1636},[74,71194,56698],{"class":84},[74,71196,1093],{"class":55581},[74,71198,55588],{"class":84},[74,71200,71201,71203,71205],{"class":76,"line":1641},[74,71202,56425],{"class":84},[74,71204,56094],{"class":55581},[74,71206,55588],{"class":84},[74,71208,71209],{"class":76,"line":1655},[74,71210,71211],{"class":144},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[74,71213,71214,71216,71218,71220,71222,71224,71226,71229],{"class":76,"line":1660},[74,71215,15500],{"class":80},[74,71217,65573],{"class":134},[74,71219,17843],{"class":80},[74,71221,58677],{"class":84},[74,71223,58680],{"class":1925},[74,71225,85],{"class":84},[74,71227,71228],{"class":190},"'ul'",[74,71230,91],{"class":84},[74,71232,71233,71236,71238,71240,71242,71244,71246,71248,71250],{"class":76,"line":1689},[74,71234,71235],{"class":84},"    ul.",[74,71237,62094],{"class":1925},[74,71239,85],{"class":84},[74,71241,62099],{"class":190},[74,71243,16714],{"class":84},[74,71245,58730],{"class":80},[74,71247,1620],{"class":84},[74,71249,160],{"class":9495},[74,71251,16721],{"class":84},[74,71253,71254],{"class":76,"line":1694},[74,71255,71256],{"class":144},"      \u002F\u002F alert(1)\n",[74,71258,71259],{"class":76,"line":1711},[74,71260,71261],{"class":144},"      \u002F\u002F e.target就是我们点击的对象\n",[74,71263,71264],{"class":76,"line":1716},[74,71265,71266],{"class":144},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[74,71268,71269],{"class":76,"line":1721},[74,71270,71271],{"class":144},"      \u002F\u002F e.target.style.color = 'red'\n",[74,71273,71274,71276,71278],{"class":76,"line":1726},[74,71275,62525],{"class":84},[74,71277,62528],{"class":1925},[74,71279,71280],{"class":84},"(e)\n",[74,71282,71283],{"class":76,"line":1740},[74,71284,2363],{"emptyLinePlaceholder":2362},[74,71286,71287,71289,71292],{"class":76,"line":1745},[74,71288,62525],{"class":84},[74,71290,71291],{"class":1925},"dir",[74,71293,71294],{"class":84},"(e.target)\n",[74,71296,71297],{"class":76,"line":2540},[74,71298,2363],{"emptyLinePlaceholder":2362},[74,71300,71301],{"class":76,"line":2554},[74,71302,71303],{"class":144},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[74,71305,71306],{"class":76,"line":2562},[74,71307,71308],{"class":144},"      \u002F\u002F 通过tagName来进行判断\n",[74,71310,71311,71313,71316,71318,71321],{"class":76,"line":2567},[74,71312,58761],{"class":80},[74,71314,71315],{"class":84}," (e.target.tagName ",[74,71317,58767],{"class":80},[74,71319,71320],{"class":190}," 'LI'",[74,71322,16721],{"class":84},[74,71324,71325,71328,71330],{"class":76,"line":2573},[74,71326,71327],{"class":84},"        e.target.style.color ",[74,71329,131],{"class":80},[74,71331,71332],{"class":190}," 'red'\n",[74,71334,71335],{"class":76,"line":2579},[74,71336,56679],{"class":84},[74,71338,71339],{"class":76,"line":2584},[74,71340,37742],{"class":84},[74,71342,71343,71345,71347],{"class":76,"line":12227},[74,71344,56698],{"class":84},[74,71346,56094],{"class":55581},[74,71348,55588],{"class":84},[74,71350,71351,71353,71355],{"class":76,"line":12251},[74,71352,56066],{"class":84},[74,71354,56081],{"class":55581},[74,71356,55588],{"class":84},[74,71358,71359],{"class":76,"line":12256},[74,71360,2363],{"emptyLinePlaceholder":2362},[74,71362,71363,71365,71367],{"class":76,"line":12262},[74,71364,56066],{"class":84},[74,71366,54916],{"class":55581},[74,71368,55588],{"class":84},[19,71370,71371],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,71373,71374],{},"if(e.target.ragName==='P') {}",[19,71376,71377],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,71379,71380],{},"通过事件委托的方式实现tab栏切换改造：",[19,71382,71383],{},"一定要记住自定义属性！！！！！！",[19,71385,71386],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,71388,71389],{},"id是自定义的属性名",[19,71391,71392],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[64,71394,71396],{"className":54914,"code":71395,"language":54916,"meta":69,"style":69},"\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",[71,71397,71398,71408,71422,71426,71434,71448,71468,71488,71500,71508,71514,71524,71534,71538,71542,71548,71560,71572,71584,71600,71604,71608,71614,71626,71638,71650,71660,71670,71674,71678,71686,71698,71708,71720,71724,71728,71736,71746,71756,71766,71770,71774,71784,71798,71810,71814,71818,71830,71840,71856,71866,71870,71874,71888,71898,71908,71912,71916,71922,71936,71940,71944,71952,71962,71966,71970,71979,71989,71993,72001,72009,72013,72021,72035,72049,72061,72069,72108,72140,72172,72204,72236,72244,72252,72266,72300,72334,72368,72402,72436,72444,72452,72460,72465,72470,72489,72494,72514,72522,72527,72540,72561,72574,72578,72583,72588,72601,72621,72649,72653,72657,72661,72669,72677,72681],{"__ignoreMap":69},[74,71399,71400,71402,71404,71406],{"class":76,"line":77},[74,71401,55578],{"class":84},[74,71403,55582],{"class":55581},[74,71405,55585],{"class":1925},[74,71407,55588],{"class":84},[74,71409,71410,71412,71414,71416,71418,71420],{"class":76,"line":94},[74,71411,996],{"class":84},[74,71413,54916],{"class":55581},[74,71415,55597],{"class":1925},[74,71417,131],{"class":84},[74,71419,55602],{"class":190},[74,71421,55588],{"class":84},[74,71423,71424],{"class":76,"line":1141},[74,71425,2363],{"emptyLinePlaceholder":2362},[74,71427,71428,71430,71432],{"class":76,"line":1156},[74,71429,996],{"class":84},[74,71431,55615],{"class":55581},[74,71433,55588],{"class":84},[74,71435,71436,71438,71440,71442,71444,71446],{"class":76,"line":1162},[74,71437,56425],{"class":84},[74,71439,55625],{"class":55581},[74,71441,55628],{"class":1925},[74,71443,131],{"class":84},[74,71445,55633],{"class":190},[74,71447,63408],{"class":84},[74,71449,71450,71452,71454,71456,71458,71460,71462,71464,71466],{"class":76,"line":1176},[74,71451,56425],{"class":84},[74,71453,55625],{"class":55581},[74,71455,55644],{"class":1925},[74,71457,131],{"class":84},[74,71459,55649],{"class":190},[74,71461,55652],{"class":1925},[74,71463,131],{"class":84},[74,71465,55657],{"class":190},[74,71467,63408],{"class":84},[74,71469,71470,71472,71474,71476,71478,71480,71482,71484,71486],{"class":76,"line":1182},[74,71471,56425],{"class":84},[74,71473,55625],{"class":55581},[74,71475,19199],{"class":1925},[74,71477,131],{"class":84},[74,71479,55672],{"class":190},[74,71481,55652],{"class":1925},[74,71483,131],{"class":84},[74,71485,55679],{"class":190},[74,71487,63408],{"class":84},[74,71489,71490,71492,71494,71496,71498],{"class":76,"line":1273},[74,71491,56425],{"class":84},[74,71493,55688],{"class":55581},[74,71495,67906],{"class":84},[74,71497,55688],{"class":55581},[74,71499,55588],{"class":84},[74,71501,71502,71504,71506],{"class":76,"line":1279},[74,71503,56425],{"class":84},[74,71505,5090],{"class":55581},[74,71507,55588],{"class":84},[74,71509,71510,71512],{"class":76,"line":1291},[74,71511,10682],{"class":55581},[74,71513,19851],{"class":84},[74,71515,71516,71518,71520,71522],{"class":76,"line":1574},[74,71517,58987],{"class":134},[74,71519,55718],{"class":84},[74,71521,277],{"class":134},[74,71523,1252],{"class":84},[74,71525,71526,71528,71530,71532],{"class":76,"line":1579},[74,71527,58976],{"class":134},[74,71529,55718],{"class":84},[74,71531,277],{"class":134},[74,71533,1252],{"class":84},[74,71535,71536],{"class":76,"line":1585},[74,71537,2149],{"class":84},[74,71539,71540],{"class":76,"line":1590},[74,71541,2363],{"emptyLinePlaceholder":2362},[74,71543,71544,71546],{"class":76,"line":1604},[74,71545,67957],{"class":1925},[74,71547,19851],{"class":84},[74,71549,71550,71552,71554,71556,71558],{"class":76,"line":1609},[74,71551,59052],{"class":134},[74,71553,55718],{"class":84},[74,71555,67968],{"class":134},[74,71557,55773],{"class":80},[74,71559,1252],{"class":84},[74,71561,71562,71564,71566,71568,71570],{"class":76,"line":1615},[74,71563,59066],{"class":134},[74,71565,55718],{"class":84},[74,71567,67981],{"class":134},[74,71569,55773],{"class":80},[74,71571,1252],{"class":84},[74,71573,71574,71576,71578,71580,71582],{"class":76,"line":1636},[74,71575,58987],{"class":134},[74,71577,55718],{"class":84},[74,71579,786],{"class":134},[74,71581,55773],{"class":80},[74,71583,1252],{"class":84},[74,71585,71586,71588,71590,71592,71594,71596,71598],{"class":76,"line":1641},[74,71587,66258],{"class":134},[74,71589,55718],{"class":84},[74,71591,303],{"class":134},[74,71593,55773],{"class":80},[74,71595,55802],{"class":134},[74,71597,66525],{"class":134},[74,71599,1252],{"class":84},[74,71601,71602],{"class":76,"line":1655},[74,71603,2149],{"class":84},[74,71605,71606],{"class":76,"line":1660},[74,71607,2363],{"emptyLinePlaceholder":2362},[74,71609,71610,71612],{"class":76,"line":1689},[74,71611,68026],{"class":1925},[74,71613,19851],{"class":84},[74,71615,71616,71618,71620,71622,71624],{"class":76,"line":1694},[74,71617,59052],{"class":134},[74,71619,55718],{"class":84},[74,71621,397],{"class":134},[74,71623,414],{"class":80},[74,71625,1252],{"class":84},[74,71627,71628,71630,71632,71634,71636],{"class":76,"line":1711},[74,71629,59066],{"class":134},[74,71631,55718],{"class":84},[74,71633,993],{"class":134},[74,71635,55773],{"class":80},[74,71637,1252],{"class":84},[74,71639,71640,71642,71644,71646,71648],{"class":76,"line":1716},[74,71641,61640],{"class":134},[74,71643,55718],{"class":84},[74,71645,993],{"class":134},[74,71647,55773],{"class":80},[74,71649,1252],{"class":84},[74,71651,71652,71654,71656,71658],{"class":76,"line":1721},[74,71653,59290],{"class":134},[74,71655,55718],{"class":84},[74,71657,55758],{"class":134},[74,71659,1252],{"class":84},[74,71661,71662,71664,71666,71668],{"class":76,"line":1726},[74,71663,59301],{"class":134},[74,71665,55718],{"class":84},[74,71667,55949],{"class":134},[74,71669,1252],{"class":84},[74,71671,71672],{"class":76,"line":1740},[74,71673,2149],{"class":84},[74,71675,71676],{"class":76,"line":1745},[74,71677,2363],{"emptyLinePlaceholder":2362},[74,71679,71680,71682,71684],{"class":76,"line":2540},[74,71681,68026],{"class":1925},[74,71683,68099],{"class":55581},[74,71685,19851],{"class":84},[74,71687,71688,71690,71692,71694,71696],{"class":76,"line":2554},[74,71689,59203],{"class":134},[74,71691,55718],{"class":84},[74,71693,886],{"class":134},[74,71695,55773],{"class":80},[74,71697,1252],{"class":84},[74,71699,71700,71702,71704,71706],{"class":76,"line":2562},[74,71701,66615],{"class":134},[74,71703,55718],{"class":84},[74,71705,68122],{"class":134},[74,71707,1252],{"class":84},[74,71709,71710,71712,71714,71716,71718],{"class":76,"line":2567},[74,71711,66281],{"class":134},[74,71713,55718],{"class":84},[74,71715,786],{"class":134},[74,71717,55773],{"class":80},[74,71719,1252],{"class":84},[74,71721,71722],{"class":76,"line":2573},[74,71723,2149],{"class":84},[74,71725,71726],{"class":76,"line":2579},[74,71727,2363],{"emptyLinePlaceholder":2362},[74,71729,71730,71732,71734],{"class":76,"line":2584},[74,71731,68026],{"class":1925},[74,71733,65573],{"class":55581},[74,71735,19851],{"class":84},[74,71737,71738,71740,71742,71744],{"class":76,"line":12227},[74,71739,59013],{"class":134},[74,71741,55718],{"class":84},[74,71743,59018],{"class":134},[74,71745,1252],{"class":84},[74,71747,71748,71750,71752,71754],{"class":76,"line":12251},[74,71749,59290],{"class":134},[74,71751,55718],{"class":84},[74,71753,55758],{"class":134},[74,71755,1252],{"class":84},[74,71757,71758,71760,71762,71764],{"class":76,"line":12256},[74,71759,59301],{"class":134},[74,71761,55718],{"class":84},[74,71763,55861],{"class":134},[74,71765,1252],{"class":84},[74,71767,71768],{"class":76,"line":12262},[74,71769,2149],{"class":84},[74,71771,71772],{"class":76,"line":12289},[74,71773,2363],{"emptyLinePlaceholder":2362},[74,71775,71776,71778,71780,71782],{"class":76,"line":12294},[74,71777,68026],{"class":1925},[74,71779,65573],{"class":55581},[74,71781,59356],{"class":55581},[74,71783,19851],{"class":84},[74,71785,71786,71788,71790,71792,71794,71796],{"class":76,"line":12300},[74,71787,58987],{"class":134},[74,71789,55718],{"class":84},[74,71791,277],{"class":134},[74,71793,13229],{"class":134},[74,71795,55773],{"class":80},[74,71797,1252],{"class":84},[74,71799,71800,71802,71804,71806,71808],{"class":76,"line":12312},[74,71801,59203],{"class":134},[74,71803,55718],{"class":84},[74,71805,635],{"class":134},[74,71807,55773],{"class":80},[74,71809,1252],{"class":84},[74,71811,71812],{"class":76,"line":12324},[74,71813,2149],{"class":84},[74,71815,71816],{"class":76,"line":12336},[74,71817,2363],{"emptyLinePlaceholder":2362},[74,71819,71820,71822,71824,71826,71828],{"class":76,"line":13995},[74,71821,68026],{"class":1925},[74,71823,65573],{"class":55581},[74,71825,59356],{"class":55581},[74,71827,1360],{"class":55581},[74,71829,19851],{"class":84},[74,71831,71832,71834,71836,71838],{"class":76,"line":14020},[74,71833,68251],{"class":134},[74,71835,55718],{"class":84},[74,71837,59018],{"class":134},[74,71839,1252],{"class":84},[74,71841,71842,71844,71846,71848,71850,71852,71854],{"class":76,"line":14043},[74,71843,66513],{"class":134},[74,71845,55718],{"class":84},[74,71847,163],{"class":134},[74,71849,55773],{"class":80},[74,71851,55802],{"class":134},[74,71853,68272],{"class":134},[74,71855,1252],{"class":84},[74,71857,71858,71860,71862,71864],{"class":76,"line":14067},[74,71859,61697],{"class":134},[74,71861,55718],{"class":84},[74,71863,66650],{"class":134},[74,71865,1252],{"class":84},[74,71867,71868],{"class":76,"line":14072},[74,71869,2149],{"class":84},[74,71871,71872],{"class":76,"line":14077},[74,71873,2363],{"emptyLinePlaceholder":2362},[74,71875,71876,71878,71880,71882,71884,71886],{"class":76,"line":14082},[74,71877,68026],{"class":1925},[74,71879,65573],{"class":55581},[74,71881,59356],{"class":55581},[74,71883,1360],{"class":55581},[74,71885,68305],{"class":1925},[74,71887,19851],{"class":84},[74,71889,71890,71892,71894,71896],{"class":76,"line":14091},[74,71891,66072],{"class":134},[74,71893,55718],{"class":84},[74,71895,68316],{"class":134},[74,71897,1252],{"class":84},[74,71899,71900,71902,71904,71906],{"class":76,"line":14096},[74,71901,61697],{"class":134},[74,71903,55718],{"class":84},[74,71905,68316],{"class":134},[74,71907,1252],{"class":84},[74,71909,71910],{"class":76,"line":14102},[74,71911,2149],{"class":84},[74,71913,71914],{"class":76,"line":14123},[74,71915,2363],{"emptyLinePlaceholder":2362},[74,71917,71918,71920],{"class":76,"line":14129},[74,71919,68341],{"class":1925},[74,71921,19851],{"class":84},[74,71923,71924,71926,71928,71930,71932,71934],{"class":76,"line":14143},[74,71925,58976],{"class":134},[74,71927,55718],{"class":84},[74,71929,277],{"class":134},[74,71931,68354],{"class":134},[74,71933,55773],{"class":80},[74,71935,1252],{"class":84},[74,71937,71938],{"class":76,"line":14149},[74,71939,2149],{"class":84},[74,71941,71942],{"class":76,"line":14176},[74,71943,2363],{"emptyLinePlaceholder":2362},[74,71945,71946,71948,71950],{"class":76,"line":14185},[74,71947,68341],{"class":1925},[74,71949,66455],{"class":1925},[74,71951,19851],{"class":84},[74,71953,71954,71956,71958,71960],{"class":76,"line":14191},[74,71955,59290],{"class":134},[74,71957,55718],{"class":84},[74,71959,59018],{"class":134},[74,71961,1252],{"class":84},[74,71963,71964],{"class":76,"line":14199},[74,71965,2149],{"class":84},[74,71967,71968],{"class":76,"line":14204},[74,71969,2363],{"emptyLinePlaceholder":2362},[74,71971,71972,71974,71977],{"class":76,"line":20883},[74,71973,68341],{"class":1925},[74,71975,71976],{"class":1925}," .active",[74,71978,19851],{"class":84},[74,71980,71981,71983,71985,71987],{"class":76,"line":20889},[74,71982,59290],{"class":134},[74,71984,55718],{"class":84},[74,71986,65150],{"class":134},[74,71988,1252],{"class":84},[74,71990,71991],{"class":76,"line":20912},[74,71992,2149],{"class":84},[74,71994,71995,71997,71999],{"class":76,"line":20918},[74,71996,56698],{"class":84},[74,71998,5090],{"class":55581},[74,72000,55588],{"class":84},[74,72002,72003,72005,72007],{"class":76,"line":20941},[74,72004,56066],{"class":84},[74,72006,55615],{"class":55581},[74,72008,55588],{"class":84},[74,72010,72011],{"class":76,"line":20955},[74,72012,2363],{"emptyLinePlaceholder":2362},[74,72014,72015,72017,72019],{"class":76,"line":20975},[74,72016,996],{"class":84},[74,72018,56081],{"class":55581},[74,72020,55588],{"class":84},[74,72022,72023,72025,72027,72029,72031,72033],{"class":76,"line":20981},[74,72024,56425],{"class":84},[74,72026,55892],{"class":55581},[74,72028,57767],{"class":1925},[74,72030,131],{"class":84},[74,72032,68456],{"class":190},[74,72034,55588],{"class":84},[74,72036,72037,72039,72041,72043,72045,72047],{"class":76,"line":20992},[74,72038,55622],{"class":84},[74,72040,55892],{"class":55581},[74,72042,57767],{"class":1925},[74,72044,131],{"class":84},[74,72046,68471],{"class":190},[74,72048,55588],{"class":84},[74,72050,72051,72053,72055,72057,72059],{"class":76,"line":21015},[74,72052,59515],{"class":84},[74,72054,44],{"class":55581},[74,72056,68482],{"class":84},[74,72058,44],{"class":55581},[74,72060,55588],{"class":84},[74,72062,72063,72065,72067],{"class":76,"line":21037},[74,72064,59515],{"class":84},[74,72066,1093],{"class":55581},[74,72068,55588],{"class":84},[74,72070,72071,72073,72075,72077,72079,72081,72083,72085,72087,72089,72091,72093,72095,72098,72100,72102,72104,72106],{"class":76,"line":21042},[74,72072,59583],{"class":84},[74,72074,30],{"class":55581},[74,72076,65333],{"class":84},[74,72078,324],{"class":55581},[74,72080,57767],{"class":1925},[74,72082,131],{"class":84},[74,72084,63987],{"class":190},[74,72086,65338],{"class":1925},[74,72088,131],{"class":84},[74,72090,68517],{"class":190},[74,72092,58232],{"class":1925},[74,72094,131],{"class":84},[74,72096,72097],{"class":190},"\"0\"",[74,72099,68520],{"class":84},[74,72101,324],{"class":55581},[74,72103,59595],{"class":84},[74,72105,30],{"class":55581},[74,72107,55588],{"class":84},[74,72109,72110,72112,72114,72116,72118,72120,72122,72124,72126,72128,72130,72132,72134,72136,72138],{"class":76,"line":21048},[74,72111,59583],{"class":84},[74,72113,30],{"class":55581},[74,72115,65333],{"class":84},[74,72117,324],{"class":55581},[74,72119,65338],{"class":1925},[74,72121,131],{"class":84},[74,72123,68517],{"class":190},[74,72125,58232],{"class":1925},[74,72127,131],{"class":84},[74,72129,3641],{"class":190},[74,72131,68547],{"class":84},[74,72133,324],{"class":55581},[74,72135,59595],{"class":84},[74,72137,30],{"class":55581},[74,72139,55588],{"class":84},[74,72141,72142,72144,72146,72148,72150,72152,72154,72156,72158,72160,72162,72164,72166,72168,72170],{"class":76,"line":21062},[74,72143,59583],{"class":84},[74,72145,30],{"class":55581},[74,72147,65333],{"class":84},[74,72149,324],{"class":55581},[74,72151,65338],{"class":1925},[74,72153,131],{"class":84},[74,72155,68517],{"class":190},[74,72157,58232],{"class":1925},[74,72159,131],{"class":84},[74,72161,3664],{"class":190},[74,72163,68574],{"class":84},[74,72165,324],{"class":55581},[74,72167,59595],{"class":84},[74,72169,30],{"class":55581},[74,72171,55588],{"class":84},[74,72173,72174,72176,72178,72180,72182,72184,72186,72188,72190,72192,72194,72196,72198,72200,72202],{"class":76,"line":21075},[74,72175,59583],{"class":84},[74,72177,30],{"class":55581},[74,72179,65333],{"class":84},[74,72181,324],{"class":55581},[74,72183,65338],{"class":1925},[74,72185,131],{"class":84},[74,72187,68517],{"class":190},[74,72189,58232],{"class":1925},[74,72191,131],{"class":84},[74,72193,3677],{"class":190},[74,72195,68601],{"class":84},[74,72197,324],{"class":55581},[74,72199,59595],{"class":84},[74,72201,30],{"class":55581},[74,72203,55588],{"class":84},[74,72205,72206,72208,72210,72212,72214,72216,72218,72220,72222,72224,72226,72228,72230,72232,72234],{"class":76,"line":21080},[74,72207,59583],{"class":84},[74,72209,30],{"class":55581},[74,72211,65333],{"class":84},[74,72213,324],{"class":55581},[74,72215,65338],{"class":1925},[74,72217,131],{"class":84},[74,72219,68517],{"class":190},[74,72221,58232],{"class":1925},[74,72223,131],{"class":84},[74,72225,3690],{"class":190},[74,72227,68628],{"class":84},[74,72229,324],{"class":55581},[74,72231,59595],{"class":84},[74,72233,30],{"class":55581},[74,72235,55588],{"class":84},[74,72237,72238,72240,72242],{"class":76,"line":21094},[74,72239,59688],{"class":84},[74,72241,1093],{"class":55581},[74,72243,55588],{"class":84},[74,72245,72246,72248,72250],{"class":76,"line":21099},[74,72247,56057],{"class":84},[74,72249,55892],{"class":55581},[74,72251,55588],{"class":84},[74,72253,72254,72256,72258,72260,72262,72264],{"class":76,"line":21105},[74,72255,55622],{"class":84},[74,72257,55892],{"class":55581},[74,72259,57767],{"class":1925},[74,72261,131],{"class":84},[74,72263,68665],{"class":190},[74,72265,55588],{"class":84},[74,72267,72268,72270,72272,72274,72276,72278,72280,72282,72284,72286,72288,72290,72292,72294,72296,72298],{"class":76,"line":21110},[74,72269,59515],{"class":84},[74,72271,55892],{"class":55581},[74,72273,57767],{"class":1925},[74,72275,131],{"class":84},[74,72277,68680],{"class":190},[74,72279,65333],{"class":84},[74,72281,1424],{"class":55581},[74,72283,59520],{"class":1925},[74,72285,131],{"class":84},[74,72287,68691],{"class":190},[74,72289,59528],{"class":1925},[74,72291,131],{"class":84},[74,72293,11931],{"class":190},[74,72295,68700],{"class":84},[74,72297,55892],{"class":55581},[74,72299,55588],{"class":84},[74,72301,72302,72304,72306,72308,72310,72312,72314,72316,72318,72320,72322,72324,72326,72328,72330,72332],{"class":76,"line":21124},[74,72303,59515],{"class":84},[74,72305,55892],{"class":55581},[74,72307,57767],{"class":1925},[74,72309,131],{"class":84},[74,72311,66904],{"class":190},[74,72313,65333],{"class":84},[74,72315,1424],{"class":55581},[74,72317,59520],{"class":1925},[74,72319,131],{"class":84},[74,72321,68727],{"class":190},[74,72323,59528],{"class":1925},[74,72325,131],{"class":84},[74,72327,11931],{"class":190},[74,72329,68700],{"class":84},[74,72331,55892],{"class":55581},[74,72333,55588],{"class":84},[74,72335,72336,72338,72340,72342,72344,72346,72348,72350,72352,72354,72356,72358,72360,72362,72364,72366],{"class":76,"line":21129},[74,72337,59515],{"class":84},[74,72339,55892],{"class":55581},[74,72341,57767],{"class":1925},[74,72343,131],{"class":84},[74,72345,66904],{"class":190},[74,72347,65333],{"class":84},[74,72349,1424],{"class":55581},[74,72351,59520],{"class":1925},[74,72353,131],{"class":84},[74,72355,68762],{"class":190},[74,72357,59528],{"class":1925},[74,72359,131],{"class":84},[74,72361,11931],{"class":190},[74,72363,68700],{"class":84},[74,72365,55892],{"class":55581},[74,72367,55588],{"class":84},[74,72369,72370,72372,72374,72376,72378,72380,72382,72384,72386,72388,72390,72392,72394,72396,72398,72400],{"class":76,"line":21134},[74,72371,59515],{"class":84},[74,72373,55892],{"class":55581},[74,72375,57767],{"class":1925},[74,72377,131],{"class":84},[74,72379,66904],{"class":190},[74,72381,65333],{"class":84},[74,72383,1424],{"class":55581},[74,72385,59520],{"class":1925},[74,72387,131],{"class":84},[74,72389,68797],{"class":190},[74,72391,59528],{"class":1925},[74,72393,131],{"class":84},[74,72395,11931],{"class":190},[74,72397,68700],{"class":84},[74,72399,55892],{"class":55581},[74,72401,55588],{"class":84},[74,72403,72404,72406,72408,72410,72412,72414,72416,72418,72420,72422,72424,72426,72428,72430,72432,72434],{"class":76,"line":21148},[74,72405,59515],{"class":84},[74,72407,55892],{"class":55581},[74,72409,57767],{"class":1925},[74,72411,131],{"class":84},[74,72413,66904],{"class":190},[74,72415,65333],{"class":84},[74,72417,1424],{"class":55581},[74,72419,59520],{"class":1925},[74,72421,131],{"class":84},[74,72423,68832],{"class":190},[74,72425,59528],{"class":1925},[74,72427,131],{"class":84},[74,72429,11931],{"class":190},[74,72431,68700],{"class":84},[74,72433,55892],{"class":55581},[74,72435,55588],{"class":84},[74,72437,72438,72440,72442],{"class":76,"line":21160},[74,72439,56057],{"class":84},[74,72441,55892],{"class":55581},[74,72443,55588],{"class":84},[74,72445,72446,72448,72450],{"class":76,"line":21165},[74,72447,56698],{"class":84},[74,72449,55892],{"class":55581},[74,72451,55588],{"class":84},[74,72453,72454,72456,72458],{"class":76,"line":21178},[74,72455,56425],{"class":84},[74,72457,56094],{"class":55581},[74,72459,55588],{"class":84},[74,72461,72462],{"class":76,"line":21183},[74,72463,72464],{"class":144},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[74,72466,72467],{"class":76,"line":21188},[74,72468,72469],{"class":144},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[74,72471,72472,72474,72476,72478,72480,72482,72484,72487],{"class":76,"line":21193},[74,72473,15500],{"class":80},[74,72475,65573],{"class":134},[74,72477,17843],{"class":80},[74,72479,58677],{"class":84},[74,72481,58680],{"class":1925},[74,72483,85],{"class":84},[74,72485,72486],{"class":190},"'.tab-nav ul'",[74,72488,91],{"class":84},[74,72490,72491],{"class":76,"line":21206},[74,72492,72493],{"class":144},"    \u002F\u002F 2.添加事件\n",[74,72495,72496,72498,72500,72502,72504,72506,72508,72510,72512],{"class":76,"line":21211},[74,72497,71235],{"class":84},[74,72499,62094],{"class":1925},[74,72501,85],{"class":84},[74,72503,62099],{"class":190},[74,72505,16714],{"class":84},[74,72507,58730],{"class":80},[74,72509,1620],{"class":84},[74,72511,160],{"class":9495},[74,72513,16721],{"class":84},[74,72515,72516,72518,72520],{"class":76,"line":36914},[74,72517,62525],{"class":84},[74,72519,71291],{"class":1925},[74,72521,71294],{"class":84},[74,72523,72524],{"class":76,"line":36920},[74,72525,72526],{"class":144},"      \u002F\u002Fe.targer是我们点击的对象\n",[74,72528,72529,72531,72533,72535,72538],{"class":76,"line":36926},[74,72530,58761],{"class":80},[74,72532,71315],{"class":84},[74,72534,58767],{"class":80},[74,72536,72537],{"class":190}," 'A'",[74,72539,16721],{"class":84},[74,72541,72542,72544,72546,72548,72551,72553,72555,72557,72559],{"class":76,"line":36932},[74,72543,56206],{"class":84},[74,72545,58680],{"class":1925},[74,72547,85],{"class":84},[74,72549,72550],{"class":190},"'.active'",[74,72552,61284],{"class":84},[74,72554,61287],{"class":1925},[74,72556,85],{"class":84},[74,72558,68995],{"class":190},[74,72560,91],{"class":84},[74,72562,72563,72566,72568,72570,72572],{"class":76,"line":36938},[74,72564,72565],{"class":84},"        e.target.classList.",[74,72567,9613],{"class":1925},[74,72569,85],{"class":84},[74,72571,68995],{"class":190},[74,72573,91],{"class":84},[74,72575,72576],{"class":76,"line":36949},[74,72577,2363],{"emptyLinePlaceholder":2362},[74,72579,72580],{"class":76,"line":36955},[74,72581,72582],{"class":144},"        \u002F\u002F 下面大盒子模块\n",[74,72584,72585],{"class":76,"line":36975},[74,72586,72587],{"class":144},"        \u002F\u002F console.log(e.target.dataset.id)\n",[74,72589,72590,72592,72594,72596,72598],{"class":76,"line":36981},[74,72591,65551],{"class":80},[74,72593,2995],{"class":134},[74,72595,17843],{"class":80},[74,72597,49847],{"class":80},[74,72599,72600],{"class":84},"e.target.dataset.id\n",[74,72602,72603,72605,72607,72609,72611,72613,72615,72617,72619],{"class":76,"line":36992},[74,72604,56206],{"class":84},[74,72606,58680],{"class":1925},[74,72608,85],{"class":84},[74,72610,69043],{"class":190},[74,72612,61284],{"class":84},[74,72614,61287],{"class":1925},[74,72616,85],{"class":84},[74,72618,68995],{"class":190},[74,72620,91],{"class":84},[74,72622,72623,72625,72627,72629,72631,72633,72635,72637,72639,72641,72643,72645,72647],{"class":76,"line":36998},[74,72624,56206],{"class":84},[74,72626,58680],{"class":1925},[74,72628,85],{"class":84},[74,72630,69069],{"class":190},[74,72632,527],{"class":84},[74,72634,49847],{"class":80},[74,72636,29399],{"class":134},[74,72638,61313],{"class":190},[74,72640,61284],{"class":84},[74,72642,9613],{"class":1925},[74,72644,85],{"class":84},[74,72646,68995],{"class":190},[74,72648,91],{"class":84},[74,72650,72651],{"class":76,"line":37004},[74,72652,2363],{"emptyLinePlaceholder":2362},[74,72654,72655],{"class":76,"line":37010},[74,72656,56679],{"class":84},[74,72658,72659],{"class":76,"line":37016},[74,72660,37742],{"class":84},[74,72662,72663,72665,72667],{"class":76,"line":37022},[74,72664,56698],{"class":84},[74,72666,56094],{"class":55581},[74,72668,55588],{"class":84},[74,72670,72671,72673,72675],{"class":76,"line":37028},[74,72672,56066],{"class":84},[74,72674,56081],{"class":55581},[74,72676,55588],{"class":84},[74,72678,72679],{"class":76,"line":37034},[74,72680,2363],{"emptyLinePlaceholder":2362},[74,72682,72683,72685,72687],{"class":76,"line":37054},[74,72684,56066],{"class":84},[74,72686,54916],{"class":55581},[74,72688,55588],{"class":84},[44,72690,72692],{"id":72691},"_333-页面加载事件","3.3.3 页面加载事件",[27,72694,72695],{},[30,72696,72697],{},"load",[19,72699,72700],{},[1424,72701],{"alt":69,"src":72702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,72704,72705],{},"window代表整个窗口，比document还要大",[19,72707,72708],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,72710,72711],{},"img.addEventListener('load', function () {",[19,72713,72714],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,72716,56745],{},[27,72718,72719],{"start":94},[30,72720,72721],{},"DOMContentLoaded",[19,72723,72724],{},[1424,72725],{"alt":69,"src":72726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,72728,72729],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[44,72731,72733],{"id":72732},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,72735,72736],{},[1424,72737],{"alt":69,"src":72738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,72740,72741],{},[1424,72742],{"alt":69,"src":72743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,72745,72746],{},[1424,72747],{"alt":69,"src":72748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,72750,72751],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,72753,72754],{},"获得的是数字型数据，不带单位",[19,72756,72757],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,72759,72760],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,72762,72763],{},"它是通过document.documentElement来获取",[19,72765,72766],{},[1424,72767],{"alt":69,"src":72768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,72770,72771],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[44,72773,72775],{"id":72774},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,72777,72778],{},[1424,72779],{"alt":69,"src":72780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,72782,72783],{},[1424,72784],{"alt":69,"src":72785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[44,72787,72789],{"id":72788},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,72791,72792],{},[1424,72793],{"alt":69,"src":72794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,72796,72797],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,72799,72800],{},[1424,72801],{"alt":69,"src":72802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,72804,72805],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,72807,72808],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,72810,72811],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,72813,72814],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,72816,72817],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,72819,72820],{},[1424,72821],{"alt":69,"src":72822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,72824,72825],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,72827,72828],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,72830,72831],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,72833,72834],{},"e.pageX-box.getBoundingClientRect()",[44,72836,72838],{"id":72837},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,72840,72841],{},[1424,72842],{"alt":69,"src":72843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,72845,72846],{},"这个是相对于视口来说的，它是个方法，不是属性值",[44,72848,72850],{"id":72849},"_338-总结","3.3.8 总结",[19,72852,72853],{},[1424,72854],{"alt":69,"src":72855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,72857,72858],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,72860,72861],{},"修改盒子的宽高只能通过width和height来实现",[44,72863,72865],{"id":72864},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[64,72867,72869],{"className":54914,"code":72868,"language":54916,"meta":69,"style":69},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[71,72870,72871,72876,72881,72886,72891],{"__ignoreMap":69},[74,72872,72873],{"class":76,"line":77},[74,72874,72875],{"class":84},"\u002F* 页面滑动 *\u002F\n",[74,72877,72878],{"class":76,"line":94},[74,72879,72880],{"class":84},"html {\n",[74,72882,72883],{"class":76,"line":1141},[74,72884,72885],{"class":84},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[74,72887,72888],{"class":76,"line":1156},[74,72889,72890],{"class":84},"  scroll-behavior: smooth;\n",[74,72892,72893],{"class":76,"line":1162},[74,72894,1527],{"class":84},[19,72896,72897],{},"默认是auto",[44,72899,72901],{"id":72900},"_3310-日期对象","3.3.10 日期对象",[26277,72903,72905],{"id":72904},"_33101-实例化","3.3.10.1 实例化",[19,72907,72908],{},[1424,72909],{"alt":69,"src":72910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[26277,72912,72914],{"id":72913},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,72916,72917],{},[1424,72918],{"alt":69,"src":72919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,72921,72922],{},"月份+1",[19,72924,72925],{},"老外认为第一天为0，星期天",[19,72927,72928],{},"方法使用的时候必须要跟括号",[19,72930,72931],{},"快速获得日期",[19,72933,72934],{},"\u002F\u002F 得到年月日",[19,72936,72937],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,72939,72940],{},"\u002F\u002F 得到当地日期",[19,72942,72943],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,72945,72946],{},"\u002F\u002F 得到当地时间",[19,72948,72949],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,72951,72952],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,72954,72955],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[56094,72957,72958],{},"\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",[19,72960,72961],{},"学会去封装函数！",[26277,72963,72965],{"id":72964},"_33103-时间戳","3.3.10.3 时间戳",[19,72967,72968],{},[1424,72969],{"alt":69,"src":72970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,72972,72973],{},[1424,72974],{"alt":69,"src":72975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,72977,72978],{},"三种方法记住一个就可以",[44,72980,72982],{"id":72981},"_3311-节点操作","3.3.11 节点操作",[26277,72984,72986],{"id":72985},"_33111-dom节点","3.3.11.1 DOM节点",[19,72988,72989],{},[1424,72990],{"alt":69,"src":72991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,72993,72994],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[26277,72996,72998],{"id":72997},"_33112-查找节点","3.3.11.2 查找节点",[19,73000,73001],{},"前边的document.querySelector()是获取的元素",[19,73003,73004],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,73006,73007],{},[1424,73008],{"alt":69,"src":73009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[27,73011,73012],{},[30,73013,73014],{},"父节点",[19,73016,73017],{},[1424,73018],{"alt":69,"src":73019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[27,73021,73022],{"start":94},[30,73023,73024],{},"子节点",[19,73026,73027],{},[1424,73028],{"alt":69,"src":73029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,73031,73032],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,73034,73035],{},"children获得的是伪数组，是亲儿子",[27,73037,73038],{"start":1141},[30,73039,73040],{},"兄弟节点",[19,73042,73043],{},[1424,73044],{"alt":69,"src":73045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[26277,73047,73049],{"id":73048},"_33113-增加节点","3.3.11.3 增加节点",[19,73051,73052],{},[1424,73053],{"alt":69,"src":73054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,73056,73057],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,73059,73060],{},[1424,73061],{"alt":69,"src":73062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,73064,73065],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,73067,73068],{},"下面是写法的部分展示，就按照下边的格式来写",[19,73070,73071],{},"例：",[56094,73073,73074],{},"\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",[19,73076,73077],{},[1424,73078],{"alt":69,"src":73079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,73081,73082],{},"false只克隆标签，里边的内容不会克隆过来",[64,73084,73086],{"className":54914,"code":73085,"language":54916,"meta":69,"style":69},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[71,73087,73088],{"__ignoreMap":69},[74,73089,73090],{"class":76,"line":77},[74,73091,73085],{"class":84},[26277,73093,73095],{"id":73094},"_33114-删除节点","3.3.11.4 删除节点",[19,73097,73098],{},[1424,73099],{"alt":69,"src":73100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,73102,73103],{},"父亲删儿子",[19,73105,73106],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[44,73108,73110],{"id":73109},"_3312-m端事件","3.3.12 M端事件",[19,73112,73113],{},"M端就是移动端",[19,73115,73116],{},[1424,73117],{"alt":69,"src":73118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[44,73120,73122],{"id":73121},"_3313-插件","3.3.13 插件",[19,73124,73125],{},"要熟悉官网！！！",[19,73127,73128],{},[324,73129,73130],{"href":73130,"rel":73131},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[28145],[19,73133,73134],{},[324,73135,73136],{"href":73136,"rel":73137},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[28145],[44,73139,73141],{"id":73140},"_3314-学生信息表","3.3.14 学生信息表",[27,73143,73144,73147,73150,73153,73156,73159,73162,73165],{},[30,73145,73146],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[30,73148,73149],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[30,73151,73152],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[30,73154,73155],{},"用好表单元素自带的属性，value,name等",[30,73157,73158],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[30,73160,73161],{},"不要忘记事件对象",[30,73163,73164],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[30,73166,73167],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,73169,73170],{},"结构：",[64,73172,73174],{"className":54914,"code":73173,"language":54916,"meta":69,"style":69},"\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",[71,73175,73176,73186,73200,73204,73212,73226,73246,73267,73280,73304,73312,73316,73324,73337,73358,73386,73414,73419,73441,73461,73480,73488,73516,73538,73558,73578,73598,73618,73638,73646,73666,73674,73678,73691,73699,73707,73715,73728,73741,73754,73767,73780,73793,73806,73814,73822,73830,73835,73840,73845,73850,73855,73860,73865,73870,73875,73880,73885,73890,73895,73903,73911,73919,73923,73943,73962,73982,74002,74022,74042,74046,74051,74071,74076,74086,74091,74096,74116,74138,74143,74153,74157,74161,74166,74171,74200,74214,74229,74233,74237,74241,74246,74257,74270,74275,74280,74285,74290,74295,74299,74304,74309,74318,74323,74328,74340,74345,74352,74356,74361,74371,74376,74386,74391,74419,74440,74450,74470,74488,74505,74522,74539,74556,74560,74570,74575,74580,74585,74596,74600,74604,74608,74613,74618,74639,74651,74656,74661,74666,74680,74685,74692,74696,74700,74708,74712,74720,74724],{"__ignoreMap":69},[74,73177,73178,73180,73182,73184],{"class":76,"line":77},[74,73179,55578],{"class":84},[74,73181,55582],{"class":55581},[74,73183,55585],{"class":1925},[74,73185,55588],{"class":84},[74,73187,73188,73190,73192,73194,73196,73198],{"class":76,"line":94},[74,73189,996],{"class":84},[74,73191,54916],{"class":55581},[74,73193,55597],{"class":1925},[74,73195,131],{"class":84},[74,73197,55602],{"class":190},[74,73199,55588],{"class":84},[74,73201,73202],{"class":76,"line":1141},[74,73203,2363],{"emptyLinePlaceholder":2362},[74,73205,73206,73208,73210],{"class":76,"line":1156},[74,73207,996],{"class":84},[74,73209,55615],{"class":55581},[74,73211,55588],{"class":84},[74,73213,73214,73216,73218,73220,73222,73224],{"class":76,"line":1162},[74,73215,56425],{"class":84},[74,73217,55625],{"class":55581},[74,73219,55628],{"class":1925},[74,73221,131],{"class":84},[74,73223,55633],{"class":190},[74,73225,63408],{"class":84},[74,73227,73228,73230,73232,73234,73236,73238,73240,73242,73244],{"class":76,"line":1176},[74,73229,56425],{"class":84},[74,73231,55625],{"class":55581},[74,73233,19199],{"class":1925},[74,73235,131],{"class":84},[74,73237,55672],{"class":190},[74,73239,55652],{"class":1925},[74,73241,131],{"class":84},[74,73243,55679],{"class":190},[74,73245,63408],{"class":84},[74,73247,73248,73250,73252,73254,73256,73258,73260,73262,73265],{"class":76,"line":1182},[74,73249,56425],{"class":84},[74,73251,55625],{"class":55581},[74,73253,55644],{"class":1925},[74,73255,131],{"class":84},[74,73257,55649],{"class":190},[74,73259,55652],{"class":1925},[74,73261,131],{"class":84},[74,73263,73264],{"class":190},"\"ie=edge\"",[74,73266,63408],{"class":84},[74,73268,73269,73271,73273,73276,73278],{"class":76,"line":1273},[74,73270,56425],{"class":84},[74,73272,55688],{"class":55581},[74,73274,73275],{"class":84},">学生信息管理\u003C\u002F",[74,73277,55688],{"class":55581},[74,73279,55588],{"class":84},[74,73281,73282,73284,73287,73290,73292,73295,73297,73299,73302],{"class":76,"line":1279},[74,73283,56425],{"class":84},[74,73285,73286],{"class":55581},"link",[74,73288,73289],{"class":1925}," rel",[74,73291,131],{"class":84},[74,73293,73294],{"class":190},"\"stylesheet\"",[74,73296,65338],{"class":1925},[74,73298,131],{"class":84},[74,73300,73301],{"class":190},"\"css\u002Findex.css\"",[74,73303,63408],{"class":84},[74,73305,73306,73308,73310],{"class":76,"line":1291},[74,73307,56066],{"class":84},[74,73309,55615],{"class":55581},[74,73311,55588],{"class":84},[74,73313,73314],{"class":76,"line":1574},[74,73315,2363],{"emptyLinePlaceholder":2362},[74,73317,73318,73320,73322],{"class":76,"line":1579},[74,73319,996],{"class":84},[74,73321,56081],{"class":55581},[74,73323,55588],{"class":84},[74,73325,73326,73328,73330,73333,73335],{"class":76,"line":1585},[74,73327,56425],{"class":84},[74,73329,10],{"class":55581},[74,73331,73332],{"class":84},">新增学员\u003C\u002F",[74,73334,10],{"class":55581},[74,73336,55588],{"class":84},[74,73338,73339,73341,73343,73345,73347,73349,73352,73354,73356],{"class":76,"line":1590},[74,73340,56425],{"class":84},[74,73342,70906],{"class":55581},[74,73344,57767],{"class":1925},[74,73346,131],{"class":84},[74,73348,66945],{"class":190},[74,73350,73351],{"class":1925}," autocomplete",[74,73353,131],{"class":84},[74,73355,36057],{"class":190},[74,73357,55588],{"class":84},[74,73359,73360,73363,73365,73367,73369,73371,73373,73375,73378,73380,73382,73384],{"class":76,"line":1604},[74,73361,73362],{"class":84},"    姓名：\u003C",[74,73364,58102],{"class":55581},[74,73366,58105],{"class":1925},[74,73368,131],{"class":84},[74,73370,66980],{"class":190},[74,73372,57767],{"class":1925},[74,73374,131],{"class":84},[74,73376,73377],{"class":190},"\"uname\"",[74,73379,19199],{"class":1925},[74,73381,131],{"class":84},[74,73383,73377],{"class":190},[74,73385,63408],{"class":84},[74,73387,73388,73391,73393,73395,73397,73399,73401,73403,73406,73408,73410,73412],{"class":76,"line":1609},[74,73389,73390],{"class":84},"    年龄：\u003C",[74,73392,58102],{"class":55581},[74,73394,58105],{"class":1925},[74,73396,131],{"class":84},[74,73398,66980],{"class":190},[74,73400,57767],{"class":1925},[74,73402,131],{"class":84},[74,73404,73405],{"class":190},"\"age\"",[74,73407,19199],{"class":1925},[74,73409,131],{"class":84},[74,73411,73405],{"class":190},[74,73413,63408],{"class":84},[74,73415,73416],{"class":76,"line":1615},[74,73417,73418],{"class":84},"    性别:\n",[74,73420,73421,73423,73426,73428,73430,73433,73435,73437,73439],{"class":76,"line":1636},[74,73422,55622],{"class":84},[74,73424,73425],{"class":55581},"select",[74,73427,19199],{"class":1925},[74,73429,131],{"class":84},[74,73431,73432],{"class":190},"\"gender\"",[74,73434,57767],{"class":1925},[74,73436,131],{"class":84},[74,73438,73432],{"class":190},[74,73440,55588],{"class":84},[74,73442,73443,73445,73448,73450,73452,73454,73457,73459],{"class":76,"line":1641},[74,73444,59515],{"class":84},[74,73446,73447],{"class":55581},"option",[74,73449,70932],{"class":1925},[74,73451,131],{"class":84},[74,73453,14240],{"class":190},[74,73455,73456],{"class":84},">男\u003C\u002F",[74,73458,73447],{"class":55581},[74,73460,55588],{"class":84},[74,73462,73463,73465,73467,73469,73471,73473,73476,73478],{"class":76,"line":1655},[74,73464,59515],{"class":84},[74,73466,73447],{"class":55581},[74,73468,70932],{"class":1925},[74,73470,131],{"class":84},[74,73472,14309],{"class":190},[74,73474,73475],{"class":84},">女\u003C\u002F",[74,73477,73447],{"class":55581},[74,73479,55588],{"class":84},[74,73481,73482,73484,73486],{"class":76,"line":1660},[74,73483,56057],{"class":84},[74,73485,73425],{"class":55581},[74,73487,55588],{"class":84},[74,73489,73490,73493,73495,73497,73499,73501,73503,73505,73508,73510,73512,73514],{"class":76,"line":1689},[74,73491,73492],{"class":84},"    薪资：\u003C",[74,73494,58102],{"class":55581},[74,73496,58105],{"class":1925},[74,73498,131],{"class":84},[74,73500,66980],{"class":190},[74,73502,57767],{"class":1925},[74,73504,131],{"class":84},[74,73506,73507],{"class":190},"\"salary\"",[74,73509,19199],{"class":1925},[74,73511,131],{"class":84},[74,73513,73507],{"class":190},[74,73515,63408],{"class":84},[74,73517,73518,73521,73523,73525,73527,73530,73532,73534,73536],{"class":76,"line":1694},[74,73519,73520],{"class":84},"    就业城市：\u003C",[74,73522,73425],{"class":55581},[74,73524,19199],{"class":1925},[74,73526,131],{"class":84},[74,73528,73529],{"class":190},"\"city\"",[74,73531,57767],{"class":1925},[74,73533,131],{"class":84},[74,73535,73529],{"class":190},[74,73537,55588],{"class":84},[74,73539,73540,73542,73544,73546,73548,73551,73554,73556],{"class":76,"line":1711},[74,73541,59515],{"class":84},[74,73543,73447],{"class":55581},[74,73545,70932],{"class":1925},[74,73547,131],{"class":84},[74,73549,73550],{"class":190},"\"北京\"",[74,73552,73553],{"class":84},">北京\u003C\u002F",[74,73555,73447],{"class":55581},[74,73557,55588],{"class":84},[74,73559,73560,73562,73564,73566,73568,73571,73574,73576],{"class":76,"line":1716},[74,73561,59515],{"class":84},[74,73563,73447],{"class":55581},[74,73565,70932],{"class":1925},[74,73567,131],{"class":84},[74,73569,73570],{"class":190},"\"上海\"",[74,73572,73573],{"class":84},">上海\u003C\u002F",[74,73575,73447],{"class":55581},[74,73577,55588],{"class":84},[74,73579,73580,73582,73584,73586,73588,73591,73594,73596],{"class":76,"line":1721},[74,73581,59515],{"class":84},[74,73583,73447],{"class":55581},[74,73585,70932],{"class":1925},[74,73587,131],{"class":84},[74,73589,73590],{"class":190},"\"广州\"",[74,73592,73593],{"class":84},">广州\u003C\u002F",[74,73595,73447],{"class":55581},[74,73597,55588],{"class":84},[74,73599,73600,73602,73604,73606,73608,73611,73614,73616],{"class":76,"line":1726},[74,73601,59515],{"class":84},[74,73603,73447],{"class":55581},[74,73605,70932],{"class":1925},[74,73607,131],{"class":84},[74,73609,73610],{"class":190},"\"深圳\"",[74,73612,73613],{"class":84},">深圳\u003C\u002F",[74,73615,73447],{"class":55581},[74,73617,55588],{"class":84},[74,73619,73620,73622,73624,73626,73628,73631,73634,73636],{"class":76,"line":1740},[74,73621,59515],{"class":84},[74,73623,73447],{"class":55581},[74,73625,70932],{"class":1925},[74,73627,131],{"class":84},[74,73629,73630],{"class":190},"\"曹县\"",[74,73632,73633],{"class":84},">曹县\u003C\u002F",[74,73635,73447],{"class":55581},[74,73637,55588],{"class":84},[74,73639,73640,73642,73644],{"class":76,"line":1745},[74,73641,56057],{"class":84},[74,73643,73425],{"class":55581},[74,73645,55588],{"class":84},[74,73647,73648,73650,73652,73654,73656,73659,73662,73664],{"class":76,"line":2540},[74,73649,55622],{"class":84},[74,73651,58168],{"class":55581},[74,73653,57767],{"class":1925},[74,73655,131],{"class":84},[74,73657,73658],{"class":190},"\"add\"",[74,73660,73661],{"class":84},">录入\u003C\u002F",[74,73663,58168],{"class":55581},[74,73665,55588],{"class":84},[74,73667,73668,73670,73672],{"class":76,"line":2554},[74,73669,56698],{"class":84},[74,73671,70906],{"class":55581},[74,73673,55588],{"class":84},[74,73675,73676],{"class":76,"line":2562},[74,73677,2363],{"emptyLinePlaceholder":2362},[74,73679,73680,73682,73684,73687,73689],{"class":76,"line":2567},[74,73681,56425],{"class":84},[74,73683,10],{"class":55581},[74,73685,73686],{"class":84},">就业榜\u003C\u002F",[74,73688,10],{"class":55581},[74,73690,55588],{"class":84},[74,73692,73693,73695,73697],{"class":76,"line":2573},[74,73694,56425],{"class":84},[74,73696,223],{"class":55581},[74,73698,55588],{"class":84},[74,73700,73701,73703,73705],{"class":76,"line":2579},[74,73702,55622],{"class":84},[74,73704,226],{"class":55581},[74,73706,55588],{"class":84},[74,73708,73709,73711,73713],{"class":76,"line":2584},[74,73710,59515],{"class":84},[74,73712,229],{"class":55581},[74,73714,55588],{"class":84},[74,73716,73717,73719,73721,73724,73726],{"class":76,"line":12227},[74,73718,59583],{"class":84},[74,73720,232],{"class":55581},[74,73722,73723],{"class":84},">序号\u003C\u002F",[74,73725,232],{"class":55581},[74,73727,55588],{"class":84},[74,73729,73730,73732,73734,73737,73739],{"class":76,"line":12251},[74,73731,59583],{"class":84},[74,73733,232],{"class":55581},[74,73735,73736],{"class":84},">姓名\u003C\u002F",[74,73738,232],{"class":55581},[74,73740,55588],{"class":84},[74,73742,73743,73745,73747,73750,73752],{"class":76,"line":12256},[74,73744,59583],{"class":84},[74,73746,232],{"class":55581},[74,73748,73749],{"class":84},">年龄\u003C\u002F",[74,73751,232],{"class":55581},[74,73753,55588],{"class":84},[74,73755,73756,73758,73760,73763,73765],{"class":76,"line":12262},[74,73757,59583],{"class":84},[74,73759,232],{"class":55581},[74,73761,73762],{"class":84},">性别\u003C\u002F",[74,73764,232],{"class":55581},[74,73766,55588],{"class":84},[74,73768,73769,73771,73773,73776,73778],{"class":76,"line":12289},[74,73770,59583],{"class":84},[74,73772,232],{"class":55581},[74,73774,73775],{"class":84},">薪资\u003C\u002F",[74,73777,232],{"class":55581},[74,73779,55588],{"class":84},[74,73781,73782,73784,73786,73789,73791],{"class":76,"line":12294},[74,73783,59583],{"class":84},[74,73785,232],{"class":55581},[74,73787,73788],{"class":84},">就业城市\u003C\u002F",[74,73790,232],{"class":55581},[74,73792,55588],{"class":84},[74,73794,73795,73797,73799,73802,73804],{"class":76,"line":12300},[74,73796,59583],{"class":84},[74,73798,232],{"class":55581},[74,73800,73801],{"class":84},">操作\u003C\u002F",[74,73803,232],{"class":55581},[74,73805,55588],{"class":84},[74,73807,73808,73810,73812],{"class":76,"line":12312},[74,73809,59688],{"class":84},[74,73811,229],{"class":55581},[74,73813,55588],{"class":84},[74,73815,73816,73818,73820],{"class":76,"line":12324},[74,73817,56057],{"class":84},[74,73819,226],{"class":55581},[74,73821,55588],{"class":84},[74,73823,73824,73826,73828],{"class":76,"line":12336},[74,73825,55622],{"class":84},[74,73827,270],{"class":55581},[74,73829,55588],{"class":84},[74,73831,73832],{"class":76,"line":13995},[74,73833,73834],{"class":144},"      \u003C!-- \n",[74,73836,73837],{"class":76,"line":14020},[74,73838,73839],{"class":144},"        \u003Ctr>\n",[74,73841,73842],{"class":76,"line":14043},[74,73843,73844],{"class":144},"          \u003Ctd>1001\u003C\u002Ftd>\n",[74,73846,73847],{"class":76,"line":14067},[74,73848,73849],{"class":144},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[74,73851,73852],{"class":76,"line":14072},[74,73853,73854],{"class":144},"          \u003Ctd>19\u003C\u002Ftd>\n",[74,73856,73857],{"class":76,"line":14077},[74,73858,73859],{"class":144},"          \u003Ctd>男\u003C\u002Ftd>\n",[74,73861,73862],{"class":76,"line":14082},[74,73863,73864],{"class":144},"          \u003Ctd>15000\u003C\u002Ftd>\n",[74,73866,73867],{"class":76,"line":14091},[74,73868,73869],{"class":144},"          \u003Ctd>上海\u003C\u002Ftd>\n",[74,73871,73872],{"class":76,"line":14096},[74,73873,73874],{"class":144},"          \u003Ctd>\n",[74,73876,73877],{"class":76,"line":14102},[74,73878,73879],{"class":144},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[74,73881,73882],{"class":76,"line":14123},[74,73883,73884],{"class":144},"          \u003C\u002Ftd>\n",[74,73886,73887],{"class":76,"line":14129},[74,73888,73889],{"class":144},"        \u003C\u002Ftr> \n",[74,73891,73892],{"class":76,"line":14143},[74,73893,73894],{"class":144},"        -->\n",[74,73896,73897,73899,73901],{"class":76,"line":14149},[74,73898,56057],{"class":84},[74,73900,270],{"class":55581},[74,73902,55588],{"class":84},[74,73904,73905,73907,73909],{"class":76,"line":14176},[74,73906,56698],{"class":84},[74,73908,223],{"class":55581},[74,73910,55588],{"class":84},[74,73912,73913,73915,73917],{"class":76,"line":14185},[74,73914,56425],{"class":84},[74,73916,56094],{"class":55581},[74,73918,55588],{"class":84},[74,73920,73921],{"class":76,"line":14191},[74,73922,64239],{"class":144},[74,73924,73925,73927,73930,73932,73934,73936,73938,73941],{"class":76,"line":14199},[74,73926,15500],{"class":80},[74,73928,73929],{"class":134}," uname",[74,73931,17843],{"class":80},[74,73933,58677],{"class":84},[74,73935,58680],{"class":1925},[74,73937,85],{"class":84},[74,73939,73940],{"class":190},"'.uname'",[74,73942,91],{"class":84},[74,73944,73945,73947,73949,73951,73953,73955,73957,73960],{"class":76,"line":14204},[74,73946,15500],{"class":80},[74,73948,19968],{"class":134},[74,73950,17843],{"class":80},[74,73952,58677],{"class":84},[74,73954,58680],{"class":1925},[74,73956,85],{"class":84},[74,73958,73959],{"class":190},"'.age'",[74,73961,91],{"class":84},[74,73963,73964,73966,73969,73971,73973,73975,73977,73980],{"class":76,"line":20883},[74,73965,15500],{"class":80},[74,73967,73968],{"class":134}," gender",[74,73970,17843],{"class":80},[74,73972,58677],{"class":84},[74,73974,58680],{"class":1925},[74,73976,85],{"class":84},[74,73978,73979],{"class":190},"'.gender'",[74,73981,91],{"class":84},[74,73983,73984,73986,73989,73991,73993,73995,73997,74000],{"class":76,"line":20889},[74,73985,15500],{"class":80},[74,73987,73988],{"class":134}," salary",[74,73990,17843],{"class":80},[74,73992,58677],{"class":84},[74,73994,58680],{"class":1925},[74,73996,85],{"class":84},[74,73998,73999],{"class":190},"'.salary'",[74,74001,91],{"class":84},[74,74003,74004,74006,74009,74011,74013,74015,74017,74020],{"class":76,"line":20912},[74,74005,15500],{"class":80},[74,74007,74008],{"class":134}," city",[74,74010,17843],{"class":80},[74,74012,58677],{"class":84},[74,74014,58680],{"class":1925},[74,74016,85],{"class":84},[74,74018,74019],{"class":190},"'.city'",[74,74021,91],{"class":84},[74,74023,74024,74026,74029,74031,74033,74035,74037,74040],{"class":76,"line":20918},[74,74025,15500],{"class":80},[74,74027,74028],{"class":134}," tbody",[74,74030,17843],{"class":80},[74,74032,58677],{"class":84},[74,74034,58680],{"class":1925},[74,74036,85],{"class":84},[74,74038,74039],{"class":190},"'tbody'",[74,74041,91],{"class":84},[74,74043,74044],{"class":76,"line":20941},[74,74045,2363],{"emptyLinePlaceholder":2362},[74,74047,74048],{"class":76,"line":20955},[74,74049,74050],{"class":144},"    \u002F\u002F 获取所有带有name属性的元素\n",[74,74052,74053,74055,74058,74060,74062,74064,74066,74069],{"class":76,"line":20975},[74,74054,15500],{"class":80},[74,74056,74057],{"class":134}," items",[74,74059,17843],{"class":80},[74,74061,58677],{"class":84},[74,74063,59962],{"class":1925},[74,74065,85],{"class":84},[74,74067,74068],{"class":190},"'[name]'",[74,74070,91],{"class":84},[74,74072,74073],{"class":76,"line":20981},[74,74074,74075],{"class":144},"    \u002F\u002F 声明一个空的数组\n",[74,74077,74078,74080,74082,74084],{"class":76,"line":20992},[74,74079,15500],{"class":80},[74,74081,61976],{"class":134},[74,74083,17843],{"class":80},[74,74085,56119],{"class":84},[74,74087,74088],{"class":76,"line":21015},[74,74089,74090],{"class":144},"    \u002F\u002F 1.录入模块\n",[74,74092,74093],{"class":76,"line":21037},[74,74094,74095],{"class":144},"    \u002F\u002F 1.1这是一个表单提交事件\n",[74,74097,74098,74100,74103,74105,74107,74109,74111,74114],{"class":76,"line":21042},[74,74099,15500],{"class":80},[74,74101,74102],{"class":134}," info",[74,74104,17843],{"class":80},[74,74106,58677],{"class":84},[74,74108,58680],{"class":1925},[74,74110,85],{"class":84},[74,74112,74113],{"class":190},"'.info'",[74,74115,91],{"class":84},[74,74117,74118,74121,74123,74125,74128,74130,74132,74134,74136],{"class":76,"line":21048},[74,74119,74120],{"class":84},"    info.",[74,74122,62094],{"class":1925},[74,74124,85],{"class":84},[74,74126,74127],{"class":190},"'submit'",[74,74129,16714],{"class":84},[74,74131,58730],{"class":80},[74,74133,1620],{"class":84},[74,74135,160],{"class":9495},[74,74137,16721],{"class":84},[74,74139,74140],{"class":76,"line":21062},[74,74141,74142],{"class":144},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[74,74144,74145,74148,74151],{"class":76,"line":21075},[74,74146,74147],{"class":84},"      e.",[74,74149,74150],{"class":1925},"preventDefault",[74,74152,1938],{"class":84},[74,74154,74155],{"class":76,"line":21080},[74,74156,64293],{"class":144},[74,74158,74159],{"class":76,"line":21094},[74,74160,2363],{"emptyLinePlaceholder":2362},[74,74162,74163],{"class":76,"line":21099},[74,74164,74165],{"class":144},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[74,74167,74168],{"class":76,"line":21105},[74,74169,74170],{"class":144},"      \u002F\u002F 先遍历循环\n",[74,74172,74173,74175,74177,74179,74181,74183,74185,74187,74189,74192,74194,74196,74198],{"class":76,"line":21110},[74,74174,56565],{"class":80},[74,74176,1620],{"class":84},[74,74178,56128],{"class":80},[74,74180,13717],{"class":84},[74,74182,131],{"class":80},[74,74184,4056],{"class":134},[74,74186,13724],{"class":84},[74,74188,996],{"class":80},[74,74190,74191],{"class":84}," items.",[74,74193,56249],{"class":134},[74,74195,3177],{"class":84},[74,74197,2254],{"class":80},[74,74199,16721],{"class":84},[74,74201,74202,74204,74207,74209,74212],{"class":76,"line":21124},[74,74203,2460],{"class":80},[74,74205,74206],{"class":84}," (items[i].value ",[74,74208,58767],{"class":80},[74,74210,74211],{"class":190}," ''",[74,74213,16721],{"class":84},[74,74215,74216,74219,74222,74224,74227],{"class":76,"line":21129},[74,74217,74218],{"class":80},"          return",[74,74220,74221],{"class":1925}," alert",[74,74223,85],{"class":84},[74,74225,74226],{"class":190},"'输入内容不能为空'",[74,74228,91],{"class":84},[74,74230,74231],{"class":76,"line":21134},[74,74232,2492],{"class":84},[74,74234,74235],{"class":76,"line":21148},[74,74236,56679],{"class":84},[74,74238,74239],{"class":76,"line":21160},[74,74240,2363],{"emptyLinePlaceholder":2362},[74,74242,74243],{"class":76,"line":21165},[74,74244,74245],{"class":144},"      \u002F\u002F 创建新的对象\n",[74,74247,74248,74250,74253,74255],{"class":76,"line":21178},[74,74249,62509],{"class":80},[74,74251,74252],{"class":134}," obj",[74,74254,17843],{"class":80},[74,74256,19851],{"class":84},[74,74258,74259,74262,74264,74266,74268],{"class":76,"line":21183},[74,74260,74261],{"class":84},"        stuID: arr.",[74,74263,56249],{"class":134},[74,74265,49847],{"class":80},[74,74267,29399],{"class":134},[74,74269,35747],{"class":84},[74,74271,74272],{"class":76,"line":21188},[74,74273,74274],{"class":84},"        uname: uname.value,\n",[74,74276,74277],{"class":76,"line":21193},[74,74278,74279],{"class":84},"        age: age.value,\n",[74,74281,74282],{"class":76,"line":21206},[74,74283,74284],{"class":84},"        gender: gender.value,\n",[74,74286,74287],{"class":76,"line":21211},[74,74288,74289],{"class":84},"        salary: salary.value,\n",[74,74291,74292],{"class":76,"line":36914},[74,74293,74294],{"class":84},"        city: city.value\n",[74,74296,74297],{"class":76,"line":36920},[74,74298,56679],{"class":84},[74,74300,74301],{"class":76,"line":36926},[74,74302,74303],{"class":144},"      \u002F\u002F console.log(obj);\n",[74,74305,74306],{"class":76,"line":36932},[74,74307,74308],{"class":144},"      \u002F\u002F 追加到数组里面\n",[74,74310,74311,74313,74315],{"class":76,"line":36938},[74,74312,62288],{"class":84},[74,74314,56165],{"class":1925},[74,74316,74317],{"class":84},"(obj)\n",[74,74319,74320],{"class":76,"line":36949},[74,74321,74322],{"class":144},"      \u002F\u002F console.log(arr);\n",[74,74324,74325],{"class":76,"line":36955},[74,74326,74327],{"class":144},"      \u002F\u002F 清空表单  reset重置表单\n",[74,74329,74330,74333,74335,74338],{"class":76,"line":36975},[74,74331,74332],{"class":134},"      this",[74,74334,644],{"class":84},[74,74336,74337],{"class":1925},"reset",[74,74339,1938],{"class":84},[74,74341,74342],{"class":76,"line":36981},[74,74343,74344],{"class":144},"      \u002F\u002F 调用渲染函数\n",[74,74346,74347,74350],{"class":76,"line":36992},[74,74348,74349],{"class":1925},"      render",[74,74351,1938],{"class":84},[74,74353,74354],{"class":76,"line":36998},[74,74355,37742],{"class":84},[74,74357,74358],{"class":76,"line":37004},[74,74359,74360],{"class":144},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[74,74362,74363,74366,74369],{"class":76,"line":37010},[74,74364,74365],{"class":80},"    function",[74,74367,74368],{"class":1925}," render",[74,74370,15132],{"class":84},[74,74372,74373],{"class":76,"line":37016},[74,74374,74375],{"class":144},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[74,74377,74378,74381,74383],{"class":76,"line":37022},[74,74379,74380],{"class":84},"      tbody.innerHTML ",[74,74382,131],{"class":80},[74,74384,74385],{"class":190}," ''\n",[74,74387,74388],{"class":76,"line":37028},[74,74389,74390],{"class":144},"      \u002F\u002F 遍历数组\n",[74,74392,74393,74395,74397,74399,74401,74403,74405,74407,74409,74411,74413,74415,74417],{"class":76,"line":37034},[74,74394,56565],{"class":80},[74,74396,1620],{"class":84},[74,74398,56128],{"class":80},[74,74400,13717],{"class":84},[74,74402,131],{"class":80},[74,74404,4056],{"class":134},[74,74406,13724],{"class":84},[74,74408,996],{"class":80},[74,74410,56246],{"class":84},[74,74412,56249],{"class":134},[74,74414,3177],{"class":84},[74,74416,2254],{"class":80},[74,74418,16721],{"class":84},[74,74420,74421,74423,74426,74428,74430,74433,74435,74438],{"class":76,"line":37054},[74,74422,65551],{"class":80},[74,74424,74425],{"class":134}," tr",[74,74427,17843],{"class":80},[74,74429,58677],{"class":84},[74,74431,74432],{"class":1925},"createElement",[74,74434,85],{"class":84},[74,74436,74437],{"class":190},"'tr'",[74,74439,91],{"class":84},[74,74441,74442,74445,74447],{"class":76,"line":37060},[74,74443,74444],{"class":84},"        tr.innerHTML ",[74,74446,131],{"class":80},[74,74448,74449],{"class":190}," `\n",[74,74451,74452,74455,74457,74459,74461,74464,74467],{"class":76,"line":37076},[74,74453,74454],{"class":190},"        \u003Ctd>${",[74,74456,3843],{"class":84},[74,74458,976],{"class":190},[74,74460,527],{"class":84},[74,74462,74463],{"class":190},"].",[74,74465,74466],{"class":84},"stuID",[74,74468,74469],{"class":190},"}\u003C\u002Ftd>\n",[74,74471,74472,74475,74477,74479,74481,74483,74486],{"class":76,"line":37082},[74,74473,74474],{"class":190},"          \u003Ctd>${",[74,74476,3843],{"class":84},[74,74478,976],{"class":190},[74,74480,527],{"class":84},[74,74482,74463],{"class":190},[74,74484,74485],{"class":84},"uname",[74,74487,74469],{"class":190},[74,74489,74490,74492,74494,74496,74498,74500,74503],{"class":76,"line":37096},[74,74491,74474],{"class":190},[74,74493,3843],{"class":84},[74,74495,976],{"class":190},[74,74497,527],{"class":84},[74,74499,74463],{"class":190},[74,74501,74502],{"class":84},"age",[74,74504,74469],{"class":190},[74,74506,74507,74509,74511,74513,74515,74517,74520],{"class":76,"line":37102},[74,74508,74474],{"class":190},[74,74510,3843],{"class":84},[74,74512,976],{"class":190},[74,74514,527],{"class":84},[74,74516,74463],{"class":190},[74,74518,74519],{"class":84},"gender",[74,74521,74469],{"class":190},[74,74523,74524,74526,74528,74530,74532,74534,74537],{"class":76,"line":37117},[74,74525,74474],{"class":190},[74,74527,3843],{"class":84},[74,74529,976],{"class":190},[74,74531,527],{"class":84},[74,74533,74463],{"class":190},[74,74535,74536],{"class":84},"salary",[74,74538,74469],{"class":190},[74,74540,74541,74543,74545,74547,74549,74551,74554],{"class":76,"line":37123},[74,74542,74474],{"class":190},[74,74544,3843],{"class":84},[74,74546,976],{"class":190},[74,74548,527],{"class":84},[74,74550,74463],{"class":190},[74,74552,74553],{"class":84},"city",[74,74555,74469],{"class":190},[74,74557,74558],{"class":76,"line":37132},[74,74559,73874],{"class":190},[74,74561,74562,74565,74567],{"class":76,"line":37138},[74,74563,74564],{"class":190},"            \u003Ca href=\"javascript:\" data-id=${",[74,74566,527],{"class":84},[74,74568,74569],{"class":190},"}>删除\u003C\u002Fa>\n",[74,74571,74572],{"class":76,"line":37147},[74,74573,74574],{"class":190},"          \u003C\u002Ftd> \n",[74,74576,74577],{"class":76,"line":37153},[74,74578,74579],{"class":190},"          `\n",[74,74581,74582],{"class":76,"line":37159},[74,74583,74584],{"class":144},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[74,74586,74587,74590,74593],{"class":76,"line":37168},[74,74588,74589],{"class":84},"        tbody.",[74,74591,74592],{"class":1925},"appendChild",[74,74594,74595],{"class":84},"(tr)\n",[74,74597,74598],{"class":76,"line":37174},[74,74599,56679],{"class":84},[74,74601,74602],{"class":76,"line":37185},[74,74603,2149],{"class":84},[74,74605,74606],{"class":76,"line":37191},[74,74607,2363],{"emptyLinePlaceholder":2362},[74,74609,74610],{"class":76,"line":37210},[74,74611,74612],{"class":144},"    \u002F\u002F 3.删除委托\n",[74,74614,74615],{"class":76,"line":37216},[74,74616,74617],{"class":144},"    \u002F\u002F 3.1 事件委托 tbody\n",[74,74619,74620,74623,74625,74627,74629,74631,74633,74635,74637],{"class":76,"line":37227},[74,74621,74622],{"class":84},"    tbody.",[74,74624,62094],{"class":1925},[74,74626,85],{"class":84},[74,74628,62099],{"class":190},[74,74630,16714],{"class":84},[74,74632,58730],{"class":80},[74,74634,1620],{"class":84},[74,74636,160],{"class":9495},[74,74638,16721],{"class":84},[74,74640,74641,74643,74645,74647,74649],{"class":76,"line":37233},[74,74642,58761],{"class":80},[74,74644,71315],{"class":84},[74,74646,58767],{"class":80},[74,74648,72537],{"class":190},[74,74650,16721],{"class":84},[74,74652,74653],{"class":76,"line":37253},[74,74654,74655],{"class":144},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[74,74657,74658],{"class":76,"line":37269},[74,74659,74660],{"class":144},"        \u002F\u002F console.log(e.target.dataset.id);\n",[74,74662,74663],{"class":76,"line":37275},[74,74664,74665],{"class":144},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[74,74667,74668,74671,74673,74676,74678],{"class":76,"line":37289},[74,74669,74670],{"class":84},"        arr.",[74,74672,62291],{"class":1925},[74,74674,74675],{"class":84},"(e.target.dataset.id, ",[74,74677,303],{"class":134},[74,74679,91],{"class":84},[74,74681,74682],{"class":76,"line":37295},[74,74683,74684],{"class":144},"        \u002F\u002F 重新渲染一次\n",[74,74686,74687,74690],{"class":76,"line":37301},[74,74688,74689],{"class":1925},"        render",[74,74691,1938],{"class":84},[74,74693,74694],{"class":76,"line":37312},[74,74695,56679],{"class":84},[74,74697,74698],{"class":76,"line":37318},[74,74699,37742],{"class":84},[74,74701,74702,74704,74706],{"class":76,"line":37324},[74,74703,56698],{"class":84},[74,74705,56094],{"class":55581},[74,74707,55588],{"class":84},[74,74709,74710],{"class":76,"line":37334},[74,74711,2363],{"emptyLinePlaceholder":2362},[74,74713,74714,74716,74718],{"class":76,"line":37340},[74,74715,56066],{"class":84},[74,74717,56081],{"class":55581},[74,74719,55588],{"class":84},[74,74721,74722],{"class":76,"line":37351},[74,74723,2363],{"emptyLinePlaceholder":2362},[74,74725,74726,74728,74730],{"class":76,"line":37357},[74,74727,56066],{"class":84},[74,74729,54916],{"class":55581},[74,74731,55588],{"class":84},[19,74733,74734],{},"样式：",[64,74736,74740],{"className":74737,"code":74738,"language":74739,"meta":69,"style":69},"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",[71,74741,74742,74747,74757,74766,74770,74774,74779,74789,74794,74798,74803,74813,74818,74827,74831,74835,74840,74845,74855,74865,74870,74874,74879,74888,74898,74903,74913,74923,74927,74932,74940,74944,74949,74954,74959,74967,74976,74980,74985,74994,74998,75003,75012,75016,75021,75030,75039,75047,75051,75056,75065,75075,75084,75094,75100,75109,75119,75129,75133,75138,75147,75155,75165,75173,75182,75191,75201,75209,75213,75218,75227],{"__ignoreMap":69},[74,74743,74744],{"class":76,"line":77},[74,74745,74746],{"class":84},"* {\n",[74,74748,74749,74752,74754],{"class":76,"line":94},[74,74750,74751],{"class":55581},"  margin",[74,74753,55718],{"class":84},[74,74755,74756],{"class":190},"0;\n",[74,74758,74759,74762,74764],{"class":76,"line":1141},[74,74760,74761],{"class":190},"  padding",[74,74763,55718],{"class":84},[74,74765,74756],{"class":190},[74,74767,74768],{"class":76,"line":1156},[74,74769,1527],{"class":84},[74,74771,74772],{"class":76,"line":1162},[74,74773,2363],{"emptyLinePlaceholder":2362},[74,74775,74776],{"class":76,"line":1176},[74,74777,74778],{"class":190},"a {\n",[74,74780,74781,74784,74786],{"class":76,"line":1182},[74,74782,74783],{"class":55581},"  text-decoration",[74,74785,55718],{"class":84},[74,74787,74788],{"class":190},"none;\n",[74,74790,74791],{"class":76,"line":1273},[74,74792,74793],{"class":190},"  color:#721c24;\n",[74,74795,74796],{"class":76,"line":1279},[74,74797,1527],{"class":84},[74,74799,74800],{"class":76,"line":1291},[74,74801,74802],{"class":190},"h1 {\n",[74,74804,74805,74808,74810],{"class":76,"line":1574},[74,74806,74807],{"class":55581},"  text-align",[74,74809,55718],{"class":84},[74,74811,74812],{"class":190},"center;\n",[74,74814,74815],{"class":76,"line":1579},[74,74816,74817],{"class":190},"  color:#333;\n",[74,74819,74820,74822,74824],{"class":76,"line":1585},[74,74821,74751],{"class":55581},[74,74823,55718],{"class":84},[74,74825,74826],{"class":190},"20px 0;\n",[74,74828,74829],{"class":76,"line":1590},[74,74830,2637],{"class":84},[74,74832,74833],{"class":76,"line":1604},[74,74834,1527],{"class":84},[74,74836,74837],{"class":76,"line":1609},[74,74838,74839],{"class":190},"table {\n",[74,74841,74842],{"class":76,"line":1615},[74,74843,74844],{"class":190},"  margin:0 auto;\n",[74,74846,74847,74850,74852],{"class":76,"line":1636},[74,74848,74849],{"class":55581},"  width",[74,74851,55718],{"class":84},[74,74853,74854],{"class":190},"800px;\n",[74,74856,74857,74860,74862],{"class":76,"line":1641},[74,74858,74859],{"class":55581},"  border-collapse",[74,74861,55718],{"class":84},[74,74863,74864],{"class":190},"collapse;\n",[74,74866,74867],{"class":76,"line":1655},[74,74868,74869],{"class":190},"  color:#004085;\n",[74,74871,74872],{"class":76,"line":1660},[74,74873,1527],{"class":84},[74,74875,74876],{"class":76,"line":1689},[74,74877,74878],{"class":190},"th {\n",[74,74880,74881,74883,74885],{"class":76,"line":1694},[74,74882,74761],{"class":55581},[74,74884,55718],{"class":84},[74,74886,74887],{"class":190},"10px;\n",[74,74889,74890,74893,74895],{"class":76,"line":1711},[74,74891,74892],{"class":55581},"  background",[74,74894,55718],{"class":84},[74,74896,74897],{"class":144},"#cfe5ff;\n",[74,74899,74900],{"class":76,"line":1716},[74,74901,74902],{"class":84},"  \n",[74,74904,74905,74908,74910],{"class":76,"line":1721},[74,74906,74907],{"class":55581},"  font-size",[74,74909,55718],{"class":84},[74,74911,74912],{"class":190},"20px;\n",[74,74914,74915,74918,74920],{"class":76,"line":1726},[74,74916,74917],{"class":55581},"  font-weight",[74,74919,55718],{"class":84},[74,74921,74922],{"class":190},"400;\n",[74,74924,74925],{"class":76,"line":1740},[74,74926,1527],{"class":84},[74,74928,74929],{"class":76,"line":1745},[74,74930,74931],{"class":190},"td,th {\n",[74,74933,74934,74937],{"class":76,"line":2540},[74,74935,74936],{"class":190},"  border:1px solid",[74,74938,74939],{"class":144}," #b8daff;\n",[74,74941,74942],{"class":76,"line":2554},[74,74943,1527],{"class":84},[74,74945,74946],{"class":76,"line":2562},[74,74947,74948],{"class":190},"td {\n",[74,74950,74951],{"class":76,"line":2567},[74,74952,74953],{"class":190},"  padding:10px;\n",[74,74955,74956],{"class":76,"line":2573},[74,74957,74958],{"class":190},"  color:#666;\n",[74,74960,74961,74963,74965],{"class":76,"line":2579},[74,74962,74807],{"class":55581},[74,74964,55718],{"class":84},[74,74966,74812],{"class":190},[74,74968,74969,74971,74973],{"class":76,"line":2584},[74,74970,74907],{"class":55581},[74,74972,55718],{"class":84},[74,74974,74975],{"class":190},"16px;\n",[74,74977,74978],{"class":76,"line":12227},[74,74979,1527],{"class":84},[74,74981,74982],{"class":76,"line":12251},[74,74983,74984],{"class":190},"tbody tr {\n",[74,74986,74987,74989,74991],{"class":76,"line":12256},[74,74988,74892],{"class":55581},[74,74990,55718],{"class":84},[74,74992,74993],{"class":144},"#fff;\n",[74,74995,74996],{"class":76,"line":12262},[74,74997,1527],{"class":84},[74,74999,75000],{"class":76,"line":12289},[74,75001,75002],{"class":190},"tbody tr:hover {\n",[74,75004,75005,75007,75009],{"class":76,"line":12294},[74,75006,74892],{"class":55581},[74,75008,55718],{"class":84},[74,75010,75011],{"class":144},"#e1ecf8;\n",[74,75013,75014],{"class":76,"line":12300},[74,75015,1527],{"class":84},[74,75017,75018],{"class":76,"line":12312},[74,75019,75020],{"class":190},".info {\n",[74,75022,75023,75025,75027],{"class":76,"line":12324},[74,75024,74849],{"class":55581},[74,75026,55718],{"class":84},[74,75028,75029],{"class":190},"900px;\n",[74,75031,75032,75034,75036],{"class":76,"line":12336},[74,75033,74751],{"class":55581},[74,75035,55718],{"class":84},[74,75037,75038],{"class":190},"50px auto;\n",[74,75040,75041,75043,75045],{"class":76,"line":13995},[74,75042,74807],{"class":55581},[74,75044,55718],{"class":84},[74,75046,74812],{"class":190},[74,75048,75049],{"class":76,"line":14020},[74,75050,1527],{"class":84},[74,75052,75053],{"class":76,"line":14043},[74,75054,75055],{"class":190},".info  input, .info select {\n",[74,75057,75058,75060,75062],{"class":76,"line":14067},[74,75059,74849],{"class":55581},[74,75061,55718],{"class":84},[74,75063,75064],{"class":190},"80px;\n",[74,75066,75067,75070,75072],{"class":76,"line":14072},[74,75068,75069],{"class":55581},"  height",[74,75071,55718],{"class":84},[74,75073,75074],{"class":190},"27px;\n",[74,75076,75077,75080,75082],{"class":76,"line":14077},[74,75078,75079],{"class":55581},"  outline",[74,75081,55718],{"class":84},[74,75083,74788],{"class":190},[74,75085,75086,75089,75091],{"class":76,"line":14082},[74,75087,75088],{"class":55581},"  border-radius",[74,75090,55718],{"class":84},[74,75092,75093],{"class":190},"5px;\n",[74,75095,75096,75098],{"class":76,"line":14091},[74,75097,74936],{"class":190},[74,75099,74939],{"class":144},[74,75101,75102,75105,75107],{"class":76,"line":14096},[74,75103,75104],{"class":55581},"  padding-left",[74,75106,55718],{"class":84},[74,75108,75093],{"class":190},[74,75110,75111,75114,75116],{"class":76,"line":14102},[74,75112,75113],{"class":55581},"  box-sizing",[74,75115,55718],{"class":84},[74,75117,75118],{"class":190},"border-box;\n",[74,75120,75121,75124,75126],{"class":76,"line":14123},[74,75122,75123],{"class":55581},"  margin-right",[74,75125,55718],{"class":84},[74,75127,75128],{"class":190},"15px;\n",[74,75130,75131],{"class":76,"line":14129},[74,75132,1527],{"class":84},[74,75134,75135],{"class":76,"line":14143},[74,75136,75137],{"class":190},".info button {\n",[74,75139,75140,75142,75144],{"class":76,"line":14149},[74,75141,74849],{"class":55581},[74,75143,55718],{"class":84},[74,75145,75146],{"class":190},"60px;\n",[74,75148,75149,75151,75153],{"class":76,"line":14176},[74,75150,75069],{"class":55581},[74,75152,55718],{"class":84},[74,75154,75074],{"class":190},[74,75156,75157,75160,75162],{"class":76,"line":14185},[74,75158,75159],{"class":55581},"  background-color",[74,75161,55718],{"class":84},[74,75163,75164],{"class":144},"#004085;\n",[74,75166,75167,75169,75171],{"class":76,"line":14191},[74,75168,75079],{"class":55581},[74,75170,55718],{"class":84},[74,75172,74788],{"class":190},[74,75174,75175,75178,75180],{"class":76,"line":14199},[74,75176,75177],{"class":55581},"  border",[74,75179,55718],{"class":84},[74,75181,74756],{"class":190},[74,75183,75184,75187,75189],{"class":76,"line":14204},[74,75185,75186],{"class":55581},"  color",[74,75188,55718],{"class":84},[74,75190,74993],{"class":144},[74,75192,75193,75196,75198],{"class":76,"line":20883},[74,75194,75195],{"class":55581},"  cursor",[74,75197,55718],{"class":84},[74,75199,75200],{"class":190},"pointer;\n",[74,75202,75203,75205,75207],{"class":76,"line":20889},[74,75204,75088],{"class":55581},[74,75206,55718],{"class":84},[74,75208,75093],{"class":190},[74,75210,75211],{"class":76,"line":20912},[74,75212,1527],{"class":84},[74,75214,75215],{"class":76,"line":20918},[74,75216,75217],{"class":190},".info .age {\n",[74,75219,75220,75222,75224],{"class":76,"line":20941},[74,75221,74849],{"class":55581},[74,75223,55718],{"class":84},[74,75225,75226],{"class":190},"50px;\n",[74,75228,75229],{"class":76,"line":20955},[74,75230,1527],{"class":84},[19,75232,75233],{},"思路：",[19,75235,75236],{},[1424,75237],{"alt":69,"src":75238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,75240,75241],{},[1424,75242],{"alt":69,"src":75243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,75245,75246],{},[1424,75247],{"alt":69,"src":75248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[44,75250,75252],{"id":75251},"_3315-重绘回流","3.3.15 重绘回流",[19,75254,75255],{},[1424,75256],{"alt":69,"src":75257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,75259,75260],{},[1424,75261],{"alt":69,"src":75262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,75264,75265],{},[1424,75266],{"alt":69,"src":75267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,75269,75271],{"id":75270},"_34-bom","3.4 BOM",[19,75273,75274],{},[1424,75275],{"alt":69,"src":75276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,75278,75279],{},"平时写的document省略了window而已，实际上是window.document",[19,75281,75282],{},"函数也是这样，调用的时候实际为window.fn()",[19,75284,75285],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,75287,75288],{},"window大部分情况下可以省略",[44,75290,75292],{"id":75291},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,75294,75295],{},"只执行一次",[19,75297,75298],{},[1424,75299],{"alt":69,"src":75300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,75302,75303],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,75305,75306],{},[1424,75307],{"alt":69,"src":75308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[44,75310,75312],{"id":75311},"_342-js执行机制","3.4.2 JS执行机制",[19,75314,75315],{},[1424,75316],{"alt":69,"src":75317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,75319,75320],{},"两个的结果都是1111 3333 2222",[19,75322,75323],{},[1424,75324],{"alt":69,"src":75325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,75327,75328],{},[1424,75329],{"alt":69,"src":75330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,75332,75333],{},[1424,75334],{"alt":69,"src":75335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,75337,75338],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,75340,75341],{},"工作流程：",[19,75343,75344],{},[1424,75345],{"alt":69,"src":75346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,75348,75349],{},[1424,75350],{"alt":69,"src":75351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,75353,75354],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,75356,75357],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[44,75359,75361],{"id":75360},"_343-location对象","3.4.3 location对象",[19,75363,75364],{},"location对象属于window这个全局对象下的，可以 省略window",[19,75366,75367],{},[1424,75368],{"alt":69,"src":75369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,75371,75372],{},"href可以跳转页面",[27,75374,75375],{},[30,75376,75377],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,75379,75380],{},"search得到提交信息之后网站后边的地址",[19,75382,75383],{},[1424,75384],{"alt":69,"src":75385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,75387,75388],{},[1424,75389],{"alt":69,"src":75390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[27,75392,75393],{"start":94},[30,75394,75395],{},"hash:这个获取单页面应用#后边的地址",[19,75397,75398],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,75400,75401],{},[1424,75402],{"alt":69,"src":75403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[64,75405,75407],{"className":57348,"code":75406,"language":57350,"meta":69,"style":69},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[71,75408,75409,75429,75449],{"__ignoreMap":69},[74,75410,75411,75413,75415,75417,75419,75422,75425,75427],{"class":76,"line":77},[74,75412,56425],{"class":84},[74,75414,324],{"class":55581},[74,75416,65338],{"class":1925},[74,75418,131],{"class":84},[74,75420,75421],{"class":190},"\"#\u002Fmy\"",[74,75423,75424],{"class":84},">我的\u003C\u002F",[74,75426,324],{"class":55581},[74,75428,55588],{"class":84},[74,75430,75431,75433,75435,75437,75439,75442,75445,75447],{"class":76,"line":94},[74,75432,56425],{"class":84},[74,75434,324],{"class":55581},[74,75436,65338],{"class":1925},[74,75438,131],{"class":84},[74,75440,75441],{"class":190},"\"#\u002Ffriend\"",[74,75443,75444],{"class":84},">关注\u003C\u002F",[74,75446,324],{"class":55581},[74,75448,55588],{"class":84},[74,75450,75451,75453,75455,75457,75459,75462,75465,75467],{"class":76,"line":1141},[74,75452,56425],{"class":84},[74,75454,324],{"class":55581},[74,75456,65338],{"class":1925},[74,75458,131],{"class":84},[74,75460,75461],{"class":190},"\"#\u002Fdownload\"",[74,75463,75464],{"class":84},">下载\u003C\u002F",[74,75466,324],{"class":55581},[74,75468,55588],{"class":84},[19,75470,75471],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[27,75473,75474],{"start":1141},[30,75475,75476,75477,75479,75480,75482],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[57997,75478],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[57997,75481],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[44,75484,75486],{"id":75485},"_345-navigator对象","3.4.5 navigator对象",[19,75488,75489],{},[1424,75490],{"alt":69,"src":75491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[64,75493,75497],{"className":75494,"code":75495,"language":75496,"meta":69,"style":69},"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",[71,75498,75499,75504,75515,75527,75532,75583,75624,75629,75642,75654,75659],{"__ignoreMap":69},[74,75500,75501],{"class":76,"line":77},[74,75502,75503],{"class":144},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[74,75505,75506,75508,75510,75512],{"class":76,"line":94},[74,75507,312],{"class":80},[74,75509,85],{"class":84},[74,75511,58730],{"class":80},[74,75513,75514],{"class":84}," () { \n",[74,75516,75517,75519,75522,75524],{"class":76,"line":1141},[74,75518,11071],{"class":80},[74,75520,75521],{"class":134}," userAgent",[74,75523,17843],{"class":80},[74,75525,75526],{"class":84}," navigator.userAgent \n",[74,75528,75529],{"class":76,"line":1156},[74,75530,75531],{"class":144},"\u002F\u002F 验证是否为Android或iPhone \n",[74,75533,75534,75536,75539,75541,75544,75547,75549,75551,75554,75556,75559,75563,75565,75567,75569,75572,75574,75576,75578,75580],{"class":76,"line":1162},[74,75535,11071],{"class":80},[74,75537,75538],{"class":134}," android",[74,75540,17843],{"class":80},[74,75542,75543],{"class":84}," userAgent.",[74,75545,75546],{"class":1925},"match",[74,75548,85],{"class":84},[74,75550,670],{"class":190},[74,75552,75553],{"class":52258},"(Android);",[74,75555,1072],{"class":80},[74,75557,75558],{"class":134},"[\\s",[74,75560,75562],{"class":75561},"snhLl","\\\u002F",[74,75564,1026],{"class":134},[74,75566,567],{"class":80},[74,75568,85],{"class":52258},[74,75570,75571],{"class":134},"[\\d.]",[74,75573,567],{"class":80},[74,75575,515],{"class":52258},[74,75577,1072],{"class":80},[74,75579,670],{"class":190},[74,75581,75582],{"class":84},") \n",[74,75584,75585,75587,75590,75592,75594,75596,75598,75600,75603,75606,75609,75611,75613,75616,75618,75620,75622],{"class":76,"line":1176},[74,75586,11071],{"class":80},[74,75588,75589],{"class":134}," iphone",[74,75591,17843],{"class":80},[74,75593,75543],{"class":84},[74,75595,75546],{"class":1925},[74,75597,85],{"class":84},[74,75599,670],{"class":190},[74,75601,75602],{"class":52258},"(iPhone",[74,75604,75605],{"class":134},"\\s",[74,75607,75608],{"class":52258},"OS)",[74,75610,75605],{"class":134},[74,75612,85],{"class":52258},[74,75614,75615],{"class":134},"[\\d_]",[74,75617,567],{"class":80},[74,75619,515],{"class":52258},[74,75621,670],{"class":190},[74,75623,75582],{"class":84},[74,75625,75626],{"class":76,"line":1182},[74,75627,75628],{"class":144},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[74,75630,75631,75633,75636,75639],{"class":76,"line":1273},[74,75632,1493],{"class":80},[74,75634,75635],{"class":84}," (android ",[74,75637,75638],{"class":80},"||",[74,75640,75641],{"class":84}," iphone) { \n",[74,75643,75644,75647,75649,75652],{"class":76,"line":1279},[74,75645,75646],{"class":84},"location.href ",[74,75648,131],{"class":80},[74,75650,75651],{"class":190}," 'http:\u002F\u002Fm.itcast.cn'",[74,75653,2637],{"class":84},[74,75655,75656],{"class":76,"line":1291},[74,75657,75658],{"class":84},"} \n",[74,75660,75661],{"class":76,"line":1574},[74,75662,75663],{"class":84},"})()\n",[44,75665,75667],{"id":75666},"_346-histroy对象","3.4.6 histroy对象",[19,75669,75670],{},[1424,75671],{"alt":69,"src":75672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,75674,75675],{},"浏览器地址的前进与后退!!!",[19,75677,75678],{},"history.back() 等效于 history.go(-1)",[19,75680,75681],{},"history.forward() 等效于 history.go(1)",[14,75683,75685],{"id":75684},"_35-本地存储","3.5 本地存储",[27,75687,75688,75691,75694],{},[30,75689,75690],{},"数据存储在用户浏览器中",[30,75692,75693],{},"设置、读取方便、甚至页面刷新不丢失数据",[30,75695,75696],{},"容量较大，sessionStorage和localStorage约 5M 左右",[44,75698,75700],{"id":75699},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,75702,75703],{},"只能存储字符串",[19,75705,75706],{},[1424,75707],{"alt":69,"src":75708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,75710,75711],{},[1424,75712],{"alt":69,"src":75713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,75715,75716],{},"键值对要加引号,不然就会当变量来看了",[19,75718,75719],{},"localStorage.setItem('uname', 'pink')",[19,75721,75722],{},"刷新之后信息不再丢失",[19,75724,75725],{},"操作key,value会跟着变",[19,75727,75728],{},"删除只删除键就可以,即名字",[19,75730,75719],{},[19,75732,75733],{},"改:",[19,75735,75736],{},"localStorage.setItem('uname','red')",[19,75738,75739],{},"有这个键就是改,没有这个键就是改",[19,75741,75742],{},[1424,75743],{"alt":69,"src":75744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,75746,75747],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,75749,75750],{},[1424,75751],{"alt":69,"src":75752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,75754,75755],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[44,75757,75759],{"id":75758},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,75761,75762],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,75764,75765],{},"特性:",[27,75767,75768,75771,75774,75777],{},[30,75769,75770],{},"生命周期为关闭浏览器窗口",[30,75772,75773],{},"在同一个窗口(页面)下数据可以共享",[30,75775,75776],{},"以键值对的形式存储使用",[30,75778,75779],{},"用法跟localStorage 基本相同",[44,75781,75783],{"id":75782},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,75785,75786],{},"本地只能存储字符串,无法直接存储复杂数据类型",[64,75788,75790],{"className":57348,"code":75789,"language":57350,"meta":69,"style":69},"\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",[71,75791,75792,75800,75805,75810,75815,75820,75824,75829,75834],{"__ignoreMap":69},[74,75793,75794,75796,75798],{"class":76,"line":77},[74,75795,996],{"class":84},[74,75797,56094],{"class":55581},[74,75799,55588],{"class":84},[74,75801,75802],{"class":76,"line":94},[74,75803,75804],{"class":84},"    const obj = {\n",[74,75806,75807],{"class":76,"line":1141},[74,75808,75809],{"class":84},"      uname: 'pink老师',\n",[74,75811,75812],{"class":76,"line":1156},[74,75813,75814],{"class":84},"      age: 18,\n",[74,75816,75817],{"class":76,"line":1162},[74,75818,75819],{"class":84},"      gender: '女'\n",[74,75821,75822],{"class":76,"line":1176},[74,75823,2149],{"class":84},[74,75825,75826],{"class":76,"line":1182},[74,75827,75828],{"class":84},"    \u002F\u002F 存储复杂数据类型\n",[74,75830,75831],{"class":76,"line":1273},[74,75832,75833],{"class":84},"    localStorage.setItem('obj', obj)\n",[74,75835,75836,75838,75840],{"class":76,"line":1279},[74,75837,56698],{"class":84},[74,75839,56094],{"class":55581},[74,75841,55588],{"class":84},[19,75843,75844],{},[1424,75845],{"alt":69,"src":75846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,75848,75849],{},"如果获取一下数据:",[19,75851,75852],{},"log(localStorage.getItem('obj'))",[19,75854,75855],{},[1424,75856],{"alt":69,"src":75857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,75859,75860],{},"发现直接存对象是使用不了的!!!",[26277,75862,75864],{"id":75863},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,75866,75867],{},[1424,75868],{"alt":69,"src":75869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[64,75871,75873],{"className":54914,"code":75872,"language":54916,"meta":69,"style":69},"\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",[71,75874,75875,75883,75893,75903,75912,75920,75924,75928,75954,75973,75981,75985,75990,75995],{"__ignoreMap":69},[74,75876,75877,75879,75881],{"class":76,"line":77},[74,75878,996],{"class":84},[74,75880,56094],{"class":55581},[74,75882,55588],{"class":84},[74,75884,75885,75887,75889,75891],{"class":76,"line":94},[74,75886,15500],{"class":80},[74,75888,74252],{"class":134},[74,75890,17843],{"class":80},[74,75892,19851],{"class":84},[74,75894,75895,75898,75901],{"class":76,"line":1141},[74,75896,75897],{"class":84},"      uname: ",[74,75899,75900],{"class":190},"'pink老师'",[74,75902,35747],{"class":84},[74,75904,75905,75908,75910],{"class":76,"line":1156},[74,75906,75907],{"class":84},"      age: ",[74,75909,736],{"class":134},[74,75911,35747],{"class":84},[74,75913,75914,75917],{"class":76,"line":1162},[74,75915,75916],{"class":84},"      gender: ",[74,75918,75919],{"class":190},"'女'\n",[74,75921,75922],{"class":76,"line":1176},[74,75923,2149],{"class":84},[74,75925,75926],{"class":76,"line":1182},[74,75927,75828],{"class":144},[74,75929,75930,75933,75936,75938,75941,75943,75946,75948,75951],{"class":76,"line":1273},[74,75931,75932],{"class":84},"  localStorage.",[74,75934,75935],{"class":1925},"setItem",[74,75937,85],{"class":84},[74,75939,75940],{"class":190},"'obj'",[74,75942,16714],{"class":84},[74,75944,75945],{"class":134},"JSON",[74,75947,644],{"class":84},[74,75949,75950],{"class":1925},"stringify",[74,75952,75953],{"class":84},"(obj))\n",[74,75955,75956,75959,75961,75964,75967,75969,75971],{"class":76,"line":1279},[74,75957,75958],{"class":84},"  console.",[74,75960,62528],{"class":1925},[74,75962,75963],{"class":84},"(localStorage.",[74,75965,75966],{"class":1925},"getItem",[74,75968,85],{"class":84},[74,75970,75940],{"class":190},[74,75972,34778],{"class":84},[74,75974,75975,75977,75979],{"class":76,"line":1291},[74,75976,56698],{"class":84},[74,75978,56094],{"class":55581},[74,75980,55588],{"class":84},[74,75982,75983],{"class":76,"line":1574},[74,75984,74902],{"class":84},[74,75986,75987],{"class":76,"line":1579},[74,75988,75989],{"class":84},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[74,75991,75992],{"class":76,"line":1585},[74,75993,75994],{"class":84},"  类型是字符串的\n",[74,75996,75997],{"class":76,"line":1590},[74,75998,75999],{"class":84},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[26277,76001,76003],{"id":76002},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,76005,76006],{},[1424,76007],{"alt":69,"src":76008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,76010,76011],{},[1424,76012],{"alt":69,"src":76013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[64,76015,76017],{"className":57348,"code":76016,"language":57350,"meta":69,"style":69},"  \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",[71,76018,76019,76027,76031,76035,76039,76043,76047,76052,76057,76062,76067,76072,76077,76082,76087],{"__ignoreMap":69},[74,76020,76021,76023,76025],{"class":76,"line":77},[74,76022,56425],{"class":84},[74,76024,56094],{"class":55581},[74,76026,55588],{"class":84},[74,76028,76029],{"class":76,"line":94},[74,76030,75804],{"class":84},[74,76032,76033],{"class":76,"line":1141},[74,76034,75809],{"class":84},[74,76036,76037],{"class":76,"line":1156},[74,76038,75814],{"class":84},[74,76040,76041],{"class":76,"line":1162},[74,76042,75819],{"class":84},[74,76044,76045],{"class":76,"line":1176},[74,76046,2149],{"class":84},[74,76048,76049],{"class":76,"line":1182},[74,76050,76051],{"class":84},"    \u002F\u002F 1.存储复杂数据类型\n",[74,76053,76054],{"class":76,"line":1273},[74,76055,76056],{"class":84},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[74,76058,76059],{"class":76,"line":1279},[74,76060,76061],{"class":84},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[74,76063,76064],{"class":76,"line":1291},[74,76065,76066],{"class":84},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[74,76068,76069],{"class":76,"line":1574},[74,76070,76071],{"class":84},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[74,76073,76074],{"class":76,"line":1579},[74,76075,76076],{"class":84},"    \u002F\u002F 取\n",[74,76078,76079],{"class":76,"line":1585},[74,76080,76081],{"class":84},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[74,76083,76084],{"class":76,"line":1590},[74,76085,76086],{"class":84},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[74,76088,76089,76091,76093],{"class":76,"line":1604},[74,76090,56698],{"class":84},[74,76092,56094],{"class":55581},[74,76094,55588],{"class":84},[19,76096,76097],{},[1424,76098],{"alt":69,"src":76099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[44,76101,76103],{"id":76102},"_356-数组map方法","3.5.6 数组map方法",[19,76105,76106],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,76108,76109],{},[1424,76110],{"alt":69,"src":76111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,76113,76114],{},[1424,76115],{"alt":69,"src":76116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,76118,76119,76122],{},[235,76120,76121],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,76124,76125],{},"map有返回值，但是forEach没有返回值",[19,76127,76128],{},"map是个方法。用的时候要加 ()",[19,76130,76131],{},"map返回的是一个数组",[44,76133,76135],{"id":76134},"_357-数组中join方法","3.5.7 数组中join方法",[19,76137,76138],{},[1424,76139],{"alt":69,"src":76140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,76142,76143],{},"类似于python中拼接字符串一样！",[27,76145,76146,76149,76152],{},[30,76147,76148],{},"小括号为空则逗号分开",[30,76150,76151],{},"小括号为空字符串 ''，则元素之间没有分隔符",[30,76153,76154],{},"小括号用啥符号就用进行分割",[44,76156,76158],{"id":76157},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[27,76160,76161,76164,76167,76170,76173],{},[30,76162,76163],{},"记住本地时间获取快速方式：new Date().toDateString()",[30,76165,76166],{},"尽量减少DOM操作，用好map+join的渲染方式",[30,76168,76169],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[30,76171,76172],{},"return可以实现函数的结束",[30,76174,76175],{},"禁止跳转是 preventDefault() 不要忘记",[64,76177,76179],{"className":54914,"code":76178,"language":54916,"meta":69,"style":69},"\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",[71,76180,76181,76191,76205,76209,76217,76231,76251,76263,76271,76277,76287,76297,76301,76305,76311,76321,76333,76337,76341,76348,76360,76374,76384,76388,76392,76399,76406,76413,76425,76437,76447,76459,76463,76467,76474,76481,76493,76505,76515,76527,76557,76561,76565,76572,76584,76596,76620,76630,76640,76644,76648,76656,76667,76679,76691,76703,76720,76732,76744,76748,76752,76759,76771,76783,76795,76806,76824,76837,76849,76873,76884,76888,76892,76900,76910,76914,76918,76924,76936,76947,76957,76961,76965,76971,76993,76997,77001,77007,77013,77025,77035,77047,77077,77090,77107,77111,77115,77126,77148,77158,77162,77166,77179,77189,77201,77213,77225,77237,77247,77257,77267,77278,77291,77295,77303,77311,77315,77323,77336,77356,77389,77422,77455,77481,77499,77517,77525,77551,77569,77587,77605,77623,77641,77649,77657,77675,77683,77712,77720,77728,77736,77749,77761,77773,77785,77797,77809,77822,77834,77842,77850,77858,77863,77868,77872,77876,77880,77884,77888,77892,77897,77902,77907,77912,77920,77928,77936,77941,77946,77951,77956,77961,77966,77971,77976,77981,77986,77991,77996,78001,78006,78010,78015,78020,78030,78039,78043,78048,78057,78073,78115,78155,78194,78259,78267,78271,78276,78294,78302,78307,78312,78342,78348,78353,78366,78378,78390,78402,78414,78426,78438,78442,78452,78456,78461,78466,78470,78479,78483,78488,78493,78512,78517,78537,78541,78546,78550,78555,78573,78591,78609,78628,78647,78666,78671,78677,78698,78704,78713,78719,78725,78731,78758,78771,78776,78786,78792,78798,78804,78810,78815,78821,78827,78833,78839,78872,78877,78882,78887,78892,78898,78904,78910,78921,78926,78932,78939,78953,78959,78983,78988,78993,78999,79005,79026,79032,79045,79051,79057,79063,79069,79074,79080,79086,79092,79110,79124,79130,79138,79144,79166,79171,79176,79181,79186,79191,79200,79209,79214],{"__ignoreMap":69},[74,76182,76183,76185,76187,76189],{"class":76,"line":77},[74,76184,55578],{"class":84},[74,76186,55582],{"class":55581},[74,76188,55585],{"class":1925},[74,76190,55588],{"class":84},[74,76192,76193,76195,76197,76199,76201,76203],{"class":76,"line":94},[74,76194,996],{"class":84},[74,76196,54916],{"class":55581},[74,76198,55597],{"class":1925},[74,76200,131],{"class":84},[74,76202,55602],{"class":190},[74,76204,55588],{"class":84},[74,76206,76207],{"class":76,"line":1141},[74,76208,2363],{"emptyLinePlaceholder":2362},[74,76210,76211,76213,76215],{"class":76,"line":1156},[74,76212,996],{"class":84},[74,76214,55615],{"class":55581},[74,76216,55588],{"class":84},[74,76218,76219,76221,76223,76225,76227,76229],{"class":76,"line":1162},[74,76220,56425],{"class":84},[74,76222,55625],{"class":55581},[74,76224,55628],{"class":1925},[74,76226,131],{"class":84},[74,76228,55633],{"class":190},[74,76230,55588],{"class":84},[74,76232,76233,76235,76237,76239,76241,76243,76245,76247,76249],{"class":76,"line":1176},[74,76234,56425],{"class":84},[74,76236,55625],{"class":55581},[74,76238,19199],{"class":1925},[74,76240,131],{"class":84},[74,76242,55672],{"class":190},[74,76244,55652],{"class":1925},[74,76246,131],{"class":84},[74,76248,55679],{"class":190},[74,76250,55588],{"class":84},[74,76252,76253,76255,76257,76259,76261],{"class":76,"line":1182},[74,76254,56425],{"class":84},[74,76256,55688],{"class":55581},[74,76258,55691],{"class":84},[74,76260,55688],{"class":55581},[74,76262,55588],{"class":84},[74,76264,76265,76267,76269],{"class":76,"line":1273},[74,76266,56425],{"class":84},[74,76268,5090],{"class":55581},[74,76270,55588],{"class":84},[74,76272,76273,76275],{"class":76,"line":1279},[74,76274,10682],{"class":55581},[74,76276,19851],{"class":84},[74,76278,76279,76281,76283,76285],{"class":76,"line":1291},[74,76280,58976],{"class":134},[74,76282,55718],{"class":84},[74,76284,277],{"class":134},[74,76286,1252],{"class":84},[74,76288,76289,76291,76293,76295],{"class":76,"line":1574},[74,76290,58987],{"class":134},[74,76292,55718],{"class":84},[74,76294,277],{"class":134},[74,76296,1252],{"class":84},[74,76298,76299],{"class":76,"line":1579},[74,76300,2149],{"class":84},[74,76302,76303],{"class":76,"line":1585},[74,76304,2363],{"emptyLinePlaceholder":2362},[74,76306,76307,76309],{"class":76,"line":1590},[74,76308,61560],{"class":55581},[74,76310,19851],{"class":84},[74,76312,76313,76315,76317,76319],{"class":76,"line":1604},[74,76314,61567],{"class":134},[74,76316,55718],{"class":84},[74,76318,55873],{"class":134},[74,76320,1252],{"class":84},[74,76322,76323,76325,76327,76329,76331],{"class":76,"line":1609},[74,76324,66358],{"class":134},[74,76326,55718],{"class":84},[74,76328,786],{"class":134},[74,76330,55773],{"class":80},[74,76332,1252],{"class":84},[74,76334,76335],{"class":76,"line":1615},[74,76336,2149],{"class":84},[74,76338,76339],{"class":76,"line":1636},[74,76340,2363],{"emptyLinePlaceholder":2362},[74,76342,76343,76346],{"class":76,"line":1641},[74,76344,76345],{"class":1925},"    .info",[74,76347,19851],{"class":84},[74,76349,76350,76352,76354,76356,76358],{"class":76,"line":1655},[74,76351,59052],{"class":134},[74,76353,55718],{"class":84},[74,76355,55770],{"class":134},[74,76357,55773],{"class":80},[74,76359,1252],{"class":84},[74,76361,76362,76364,76366,76368,76370,76372],{"class":76,"line":1660},[74,76363,58987],{"class":134},[74,76365,55718],{"class":84},[74,76367,532],{"class":134},[74,76369,55773],{"class":80},[74,76371,55837],{"class":134},[74,76373,1252],{"class":84},[74,76375,76376,76378,76380,76382],{"class":76,"line":1689},[74,76377,61567],{"class":134},[74,76379,55718],{"class":84},[74,76381,55873],{"class":134},[74,76383,1252],{"class":84},[74,76385,76386],{"class":76,"line":1694},[74,76387,2149],{"class":84},[74,76389,76390],{"class":76,"line":1711},[74,76391,2363],{"emptyLinePlaceholder":2362},[74,76393,76394,76397],{"class":76,"line":1716},[74,76395,76396],{"class":1925},"    .uname",[74,76398,35747],{"class":84},[74,76400,76401,76404],{"class":76,"line":1721},[74,76402,76403],{"class":1925},"    .age",[74,76405,35747],{"class":84},[74,76407,76408,76411],{"class":76,"line":1726},[74,76409,76410],{"class":1925},"    .salary",[74,76412,19851],{"class":84},[74,76414,76415,76417,76419,76421,76423],{"class":76,"line":1740},[74,76416,59052],{"class":134},[74,76418,55718],{"class":84},[74,76420,397],{"class":134},[74,76422,55773],{"class":80},[74,76424,1252],{"class":84},[74,76426,76427,76429,76431,76433,76435],{"class":76,"line":1745},[74,76428,59066],{"class":134},[74,76430,55718],{"class":84},[74,76432,786],{"class":134},[74,76434,55773],{"class":80},[74,76436,1252],{"class":84},[74,76438,76439,76441,76443,76445],{"class":76,"line":2540},[74,76440,66061],{"class":134},[74,76442,55718],{"class":84},[74,76444,59018],{"class":134},[74,76446,1252],{"class":84},[74,76448,76449,76451,76453,76455,76457],{"class":76,"line":2554},[74,76450,66031],{"class":134},[74,76452,55718],{"class":84},[74,76454,661],{"class":134},[74,76456,55773],{"class":80},[74,76458,1252],{"class":84},[74,76460,76461],{"class":76,"line":2562},[74,76462,2149],{"class":84},[74,76464,76465],{"class":76,"line":2567},[74,76466,2363],{"emptyLinePlaceholder":2362},[74,76468,76469,76472],{"class":76,"line":2573},[74,76470,76471],{"class":1925},"    .gender",[74,76473,35747],{"class":84},[74,76475,76476,76479],{"class":76,"line":2579},[74,76477,76478],{"class":1925},"    .city",[74,76480,19851],{"class":84},[74,76482,76483,76485,76487,76489,76491],{"class":76,"line":2584},[74,76484,59052],{"class":134},[74,76486,55718],{"class":84},[74,76488,397],{"class":134},[74,76490,55773],{"class":80},[74,76492,1252],{"class":84},[74,76494,76495,76497,76499,76501,76503],{"class":76,"line":12227},[74,76496,59066],{"class":134},[74,76498,55718],{"class":84},[74,76500,911],{"class":134},[74,76502,55773],{"class":80},[74,76504,1252],{"class":84},[74,76506,76507,76509,76511,76513],{"class":76,"line":12251},[74,76508,66061],{"class":134},[74,76510,55718],{"class":84},[74,76512,59018],{"class":134},[74,76514,1252],{"class":84},[74,76516,76517,76519,76521,76523,76525],{"class":76,"line":12256},[74,76518,66031],{"class":134},[74,76520,55718],{"class":84},[74,76522,661],{"class":134},[74,76524,55773],{"class":80},[74,76526,1252],{"class":84},[74,76528,76529,76531,76533,76535,76537,76539,76542,76544,76546,76548,76551,76553,76555],{"class":76,"line":12262},[74,76530,66258],{"class":134},[74,76532,55718],{"class":84},[74,76534,303],{"class":134},[74,76536,55773],{"class":80},[74,76538,55802],{"class":134},[74,76540,76541],{"class":134}," rgb",[74,76543,85],{"class":84},[74,76545,1684],{"class":134},[74,76547,16714],{"class":84},[74,76549,76550],{"class":134},"197",[74,76552,16714],{"class":84},[74,76554,76550],{"class":134},[74,76556,2682],{"class":84},[74,76558,76559],{"class":76,"line":12289},[74,76560,2149],{"class":84},[74,76562,76563],{"class":76,"line":12294},[74,76564,2363],{"emptyLinePlaceholder":2362},[74,76566,76567,76570],{"class":76,"line":12300},[74,76568,76569],{"class":55581},"    button",[74,76571,19851],{"class":84},[74,76573,76574,76576,76578,76580,76582],{"class":76,"line":12312},[74,76575,59066],{"class":134},[74,76577,55718],{"class":84},[74,76579,911],{"class":134},[74,76581,55773],{"class":80},[74,76583,1252],{"class":84},[74,76585,76586,76588,76590,76592,76594],{"class":76,"line":12324},[74,76587,59052],{"class":134},[74,76589,55718],{"class":84},[74,76591,570],{"class":134},[74,76593,55773],{"class":80},[74,76595,1252],{"class":84},[74,76597,76598,76600,76602,76605,76607,76609,76611,76614,76616,76618],{"class":76,"line":12336},[74,76599,59165],{"class":134},[74,76601,55718],{"class":84},[74,76603,76604],{"class":134},"rgb",[74,76606,85],{"class":84},[74,76608,1055],{"class":134},[74,76610,16714],{"class":84},[74,76612,76613],{"class":134},"187",[74,76615,16714],{"class":84},[74,76617,385],{"class":134},[74,76619,2682],{"class":84},[74,76621,76622,76624,76626,76628],{"class":76,"line":13995},[74,76623,61697],{"class":134},[74,76625,55718],{"class":84},[74,76627,65123],{"class":134},[74,76629,1252],{"class":84},[74,76631,76632,76634,76636,76638],{"class":76,"line":14020},[74,76633,66258],{"class":134},[74,76635,55718],{"class":84},[74,76637,277],{"class":134},[74,76639,1252],{"class":84},[74,76641,76642],{"class":76,"line":14043},[74,76643,2149],{"class":84},[74,76645,76646],{"class":76,"line":14067},[74,76647,2363],{"emptyLinePlaceholder":2362},[74,76649,76650,76652,76654],{"class":76,"line":14072},[74,76651,76569],{"class":55581},[74,76653,55969],{"class":55581},[74,76655,19851],{"class":84},[74,76657,76658,76660,76662,76665],{"class":76,"line":14077},[74,76659,59290],{"class":134},[74,76661,55718],{"class":84},[74,76663,76664],{"class":134},"inline-block",[74,76666,1252],{"class":84},[74,76668,76669,76671,76673,76675,76677],{"class":76,"line":14082},[74,76670,59052],{"class":134},[74,76672,55718],{"class":84},[74,76674,532],{"class":134},[74,76676,55773],{"class":80},[74,76678,1252],{"class":84},[74,76680,76681,76683,76685,76687,76689],{"class":76,"line":14091},[74,76682,59066],{"class":134},[74,76684,55718],{"class":84},[74,76686,532],{"class":134},[74,76688,55773],{"class":80},[74,76690,1252],{"class":84},[74,76692,76693,76695,76697,76699,76701],{"class":76,"line":14096},[74,76694,61640],{"class":134},[74,76696,55718],{"class":84},[74,76698,558],{"class":134},[74,76700,55773],{"class":80},[74,76702,1252],{"class":84},[74,76704,76705,76707,76709,76711,76713,76715,76718],{"class":76,"line":14102},[74,76706,66258],{"class":134},[74,76708,55718],{"class":84},[74,76710,303],{"class":134},[74,76712,55773],{"class":80},[74,76714,55802],{"class":134},[74,76716,76717],{"class":134}," #fff",[74,76719,1252],{"class":84},[74,76721,76722,76724,76726,76728,76730],{"class":76,"line":14123},[74,76723,59415],{"class":134},[74,76725,55718],{"class":84},[74,76727,405],{"class":134},[74,76729,55773],{"class":80},[74,76731,1252],{"class":84},[74,76733,76734,76736,76738,76740,76742],{"class":76,"line":14129},[74,76735,66031],{"class":134},[74,76737,55718],{"class":84},[74,76739,303],{"class":134},[74,76741,55773],{"class":80},[74,76743,1252],{"class":84},[74,76745,76746],{"class":76,"line":14143},[74,76747,2149],{"class":84},[74,76749,76750],{"class":76,"line":14149},[74,76751,2363],{"emptyLinePlaceholder":2362},[74,76753,76754,76757],{"class":76,"line":14176},[74,76755,76756],{"class":1925},"    .total",[74,76758,19851],{"class":84},[74,76760,76761,76763,76765,76767,76769],{"class":76,"line":14185},[74,76762,59052],{"class":134},[74,76764,55718],{"class":84},[74,76766,65910],{"class":134},[74,76768,55773],{"class":80},[74,76770,1252],{"class":84},[74,76772,76773,76775,76777,76779,76781],{"class":76,"line":14191},[74,76774,59066],{"class":134},[74,76776,55718],{"class":84},[74,76778,487],{"class":134},[74,76780,55773],{"class":80},[74,76782,1252],{"class":84},[74,76784,76785,76787,76789,76791,76793],{"class":76,"line":14199},[74,76786,61640],{"class":134},[74,76788,55718],{"class":84},[74,76790,487],{"class":134},[74,76792,55773],{"class":80},[74,76794,1252],{"class":84},[74,76796,76797,76799,76801,76804],{"class":76,"line":14204},[74,76798,61567],{"class":134},[74,76800,55718],{"class":84},[74,76802,76803],{"class":134},"right",[74,76805,1252],{"class":84},[74,76807,76808,76810,76812,76814,76816,76818,76820,76822],{"class":76,"line":20883},[74,76809,58987],{"class":134},[74,76811,55718],{"class":84},[74,76813,487],{"class":134},[74,76815,55773],{"class":80},[74,76817,55837],{"class":134},[74,76819,2000],{"class":134},[74,76821,55773],{"class":80},[74,76823,1252],{"class":84},[74,76825,76826,76829,76831,76833,76835],{"class":76,"line":20889},[74,76827,76828],{"class":134},"      padding-right",[74,76830,55718],{"class":84},[74,76832,532],{"class":134},[74,76834,55773],{"class":80},[74,76836,1252],{"class":84},[74,76838,76839,76841,76843,76845,76847],{"class":76,"line":20912},[74,76840,59203],{"class":134},[74,76842,55718],{"class":84},[74,76844,609],{"class":134},[74,76846,55773],{"class":80},[74,76848,1252],{"class":84},[74,76850,76851,76853,76855,76857,76859,76862,76864,76867,76869,76871],{"class":76,"line":20918},[74,76852,59165],{"class":134},[74,76854,55718],{"class":84},[74,76856,76604],{"class":134},[74,76858,85],{"class":84},[74,76860,76861],{"class":134},"237",[74,76863,16714],{"class":84},[74,76865,76866],{"class":134},"235",[74,76868,16714],{"class":84},[74,76870,76866],{"class":134},[74,76872,2682],{"class":84},[74,76874,76875,76878,76880,76882],{"class":76,"line":20941},[74,76876,76877],{"class":134},"      box-sizing",[74,76879,55718],{"class":84},[74,76881,64786],{"class":134},[74,76883,1252],{"class":84},[74,76885,76886],{"class":76,"line":20955},[74,76887,2149],{"class":84},[74,76889,76890],{"class":76,"line":20975},[74,76891,2363],{"emptyLinePlaceholder":2362},[74,76893,76894,76896,76898],{"class":76,"line":20981},[74,76895,76756],{"class":1925},[74,76897,55969],{"class":55581},[74,76899,19851],{"class":84},[74,76901,76902,76904,76906,76908],{"class":76,"line":20992},[74,76903,61697],{"class":134},[74,76905,55718],{"class":84},[74,76907,61702],{"class":134},[74,76909,1252],{"class":84},[74,76911,76912],{"class":76,"line":21015},[74,76913,2149],{"class":84},[74,76915,76916],{"class":76,"line":21037},[74,76917,2363],{"emptyLinePlaceholder":2362},[74,76919,76920,76922],{"class":76,"line":21042},[74,76921,69304],{"class":55581},[74,76923,19851],{"class":84},[74,76925,76926,76928,76930,76932,76934],{"class":76,"line":21048},[74,76927,59052],{"class":134},[74,76929,55718],{"class":84},[74,76931,65910],{"class":134},[74,76933,55773],{"class":80},[74,76935,1252],{"class":84},[74,76937,76938,76940,76942,76945],{"class":76,"line":21062},[74,76939,58987],{"class":134},[74,76941,55718],{"class":84},[74,76943,76944],{"class":134},"auto",[74,76946,1252],{"class":84},[74,76948,76949,76951,76953,76955],{"class":76,"line":21075},[74,76950,69311],{"class":134},[74,76952,55718],{"class":84},[74,76954,69316],{"class":134},[74,76956,1252],{"class":84},[74,76958,76959],{"class":76,"line":21080},[74,76960,2149],{"class":84},[74,76962,76963],{"class":76,"line":21094},[74,76964,2363],{"emptyLinePlaceholder":2362},[74,76966,76967,76969],{"class":76,"line":21099},[74,76968,69396],{"class":55581},[74,76970,19851],{"class":84},[74,76972,76973,76975,76977,76979,76981,76983,76985,76987,76989,76991],{"class":76,"line":21105},[74,76974,59165],{"class":134},[74,76976,55718],{"class":84},[74,76978,76604],{"class":134},[74,76980,85],{"class":84},[74,76982,76861],{"class":134},[74,76984,16714],{"class":84},[74,76986,76866],{"class":134},[74,76988,16714],{"class":84},[74,76990,76866],{"class":134},[74,76992,2682],{"class":84},[74,76994,76995],{"class":76,"line":21110},[74,76996,2149],{"class":84},[74,76998,76999],{"class":76,"line":21124},[74,77000,2363],{"emptyLinePlaceholder":2362},[74,77002,77003,77005],{"class":76,"line":21129},[74,77004,69396],{"class":55581},[74,77006,35747],{"class":84},[74,77008,77009,77011],{"class":76,"line":21134},[74,77010,69462],{"class":55581},[74,77012,19851],{"class":84},[74,77014,77015,77017,77019,77021,77023],{"class":76,"line":21148},[74,77016,59066],{"class":134},[74,77018,55718],{"class":84},[74,77020,359],{"class":134},[74,77022,55773],{"class":80},[74,77024,1252],{"class":84},[74,77026,77027,77029,77031,77033],{"class":76,"line":21160},[74,77028,61567],{"class":134},[74,77030,55718],{"class":84},[74,77032,28016],{"class":134},[74,77034,1252],{"class":84},[74,77036,77037,77039,77041,77043,77045],{"class":76,"line":21165},[74,77038,59203],{"class":134},[74,77040,55718],{"class":84},[74,77042,635],{"class":134},[74,77044,55773],{"class":80},[74,77046,1252],{"class":84},[74,77048,77049,77051,77053,77055,77057,77059,77061,77063,77066,77068,77071,77073,77075],{"class":76,"line":21178},[74,77050,66258],{"class":134},[74,77052,55718],{"class":84},[74,77054,303],{"class":134},[74,77056,55773],{"class":80},[74,77058,55802],{"class":134},[74,77060,76541],{"class":134},[74,77062,85],{"class":84},[74,77064,77065],{"class":134},"228",[74,77067,16714],{"class":84},[74,77069,77070],{"class":134},"225",[74,77072,16714],{"class":84},[74,77074,77070],{"class":134},[74,77076,2682],{"class":84},[74,77078,77079,77082,77084,77086,77088],{"class":76,"line":21183},[74,77080,77081],{"class":134},"      padding-left",[74,77083,55718],{"class":84},[74,77085,405],{"class":134},[74,77087,55773],{"class":80},[74,77089,1252],{"class":84},[74,77091,77092,77094,77096,77098,77101,77103,77105],{"class":76,"line":21188},[74,77093,66141],{"class":134},[74,77095,55718],{"class":84},[74,77097,32402],{"class":134},[74,77099,77100],{"class":134}," linear",[74,77102,66148],{"class":134},[74,77104,781],{"class":80},[74,77106,1252],{"class":84},[74,77108,77109],{"class":76,"line":21193},[74,77110,2149],{"class":84},[74,77112,77113],{"class":76,"line":21206},[74,77114,2363],{"emptyLinePlaceholder":2362},[74,77116,77117,77120,77122,77124],{"class":76,"line":21211},[74,77118,77119],{"class":55581},"    tbody",[74,77121,74425],{"class":55581},[74,77123,65221],{"class":1925},[74,77125,19851],{"class":84},[74,77127,77128,77130,77132,77134,77136,77138,77140,77142,77144,77146],{"class":76,"line":36914},[74,77129,59165],{"class":134},[74,77131,55718],{"class":84},[74,77133,76604],{"class":134},[74,77135,85],{"class":84},[74,77137,76861],{"class":134},[74,77139,16714],{"class":84},[74,77141,76866],{"class":134},[74,77143,16714],{"class":84},[74,77145,76866],{"class":134},[74,77147,2682],{"class":84},[74,77149,77150,77152,77154,77156],{"class":76,"line":36920},[74,77151,66306],{"class":134},[74,77153,55718],{"class":84},[74,77155,66311],{"class":134},[74,77157,1252],{"class":84},[74,77159,77160],{"class":76,"line":36926},[74,77161,2149],{"class":84},[74,77163,77164],{"class":76,"line":36932},[74,77165,2363],{"emptyLinePlaceholder":2362},[74,77167,77168,77170,77172,77175,77177],{"class":76,"line":36938},[74,77169,77119],{"class":55581},[74,77171,74425],{"class":55581},[74,77173,77174],{"class":55581}," td",[74,77176,1360],{"class":55581},[74,77178,19851],{"class":84},[74,77180,77181,77183,77185,77187],{"class":76,"line":36949},[74,77182,59290],{"class":134},[74,77184,55718],{"class":84},[74,77186,65150],{"class":134},[74,77188,1252],{"class":84},[74,77190,77191,77193,77195,77197,77199],{"class":76,"line":36955},[74,77192,59052],{"class":134},[74,77194,55718],{"class":84},[74,77196,993],{"class":134},[74,77198,55773],{"class":80},[74,77200,1252],{"class":84},[74,77202,77203,77205,77207,77209,77211],{"class":76,"line":36975},[74,77204,59066],{"class":134},[74,77206,55718],{"class":84},[74,77208,911],{"class":134},[74,77210,55773],{"class":80},[74,77212,1252],{"class":84},[74,77214,77215,77217,77219,77221,77223],{"class":76,"line":36981},[74,77216,61640],{"class":134},[74,77218,55718],{"class":84},[74,77220,911],{"class":134},[74,77222,55773],{"class":80},[74,77224,1252],{"class":84},[74,77226,77227,77229,77231,77233,77235],{"class":76,"line":36992},[74,77228,66358],{"class":134},[74,77230,55718],{"class":84},[74,77232,163],{"class":134},[74,77234,55773],{"class":80},[74,77236,1252],{"class":84},[74,77238,77239,77241,77243,77245],{"class":76,"line":36998},[74,77240,61697],{"class":134},[74,77242,55718],{"class":84},[74,77244,65123],{"class":134},[74,77246,1252],{"class":84},[74,77248,77249,77251,77253,77255],{"class":76,"line":37004},[74,77250,61567],{"class":134},[74,77252,55718],{"class":84},[74,77254,55873],{"class":134},[74,77256,1252],{"class":84},[74,77258,77259,77261,77263,77265],{"class":76,"line":37010},[74,77260,68251],{"class":134},[74,77262,55718],{"class":84},[74,77264,59018],{"class":134},[74,77266,1252],{"class":84},[74,77268,77269,77271,77273,77276],{"class":76,"line":37016},[74,77270,59165],{"class":134},[74,77272,55718],{"class":84},[74,77274,77275],{"class":134},"orange",[74,77277,1252],{"class":84},[74,77279,77280,77282,77284,77287,77289],{"class":76,"line":37022},[74,77281,59415],{"class":134},[74,77283,55718],{"class":84},[74,77285,77286],{"class":134},"12.5",[74,77288,55773],{"class":80},[74,77290,1252],{"class":84},[74,77292,77293],{"class":76,"line":37028},[74,77294,2149],{"class":84},[74,77296,77297,77299,77301],{"class":76,"line":37034},[74,77298,56698],{"class":84},[74,77300,5090],{"class":55581},[74,77302,55588],{"class":84},[74,77304,77305,77307,77309],{"class":76,"line":37054},[74,77306,56066],{"class":84},[74,77308,55615],{"class":55581},[74,77310,55588],{"class":84},[74,77312,77313],{"class":76,"line":37060},[74,77314,2363],{"emptyLinePlaceholder":2362},[74,77316,77317,77319,77321],{"class":76,"line":37076},[74,77318,996],{"class":84},[74,77320,56081],{"class":55581},[74,77322,55588],{"class":84},[74,77324,77325,77327,77329,77332,77334],{"class":76,"line":37082},[74,77326,56425],{"class":84},[74,77328,14],{"class":55581},[74,77330,77331],{"class":84},">学生就业统计表\u003C\u002F",[74,77333,14],{"class":55581},[74,77335,55588],{"class":84},[74,77337,77338,77340,77342,77344,77346,77348,77350,77352,77354],{"class":76,"line":37096},[74,77339,56425],{"class":84},[74,77341,70906],{"class":55581},[74,77343,57767],{"class":1925},[74,77345,131],{"class":84},[74,77347,66945],{"class":190},[74,77349,73351],{"class":1925},[74,77351,131],{"class":84},[74,77353,36057],{"class":190},[74,77355,55588],{"class":84},[74,77357,77358,77360,77362,77364,77366,77368,77370,77372,77374,77376,77378,77381,77383,77385,77387],{"class":76,"line":37102},[74,77359,55622],{"class":84},[74,77361,58102],{"class":55581},[74,77363,58105],{"class":1925},[74,77365,131],{"class":84},[74,77367,66980],{"class":190},[74,77369,19199],{"class":1925},[74,77371,131],{"class":84},[74,77373,73377],{"class":190},[74,77375,65301],{"class":1925},[74,77377,131],{"class":84},[74,77379,77380],{"class":190},"\"姓名\"",[74,77382,57767],{"class":1925},[74,77384,131],{"class":84},[74,77386,73377],{"class":190},[74,77388,55588],{"class":84},[74,77390,77391,77393,77395,77397,77399,77401,77403,77405,77407,77409,77411,77414,77416,77418,77420],{"class":76,"line":37117},[74,77392,55622],{"class":84},[74,77394,58102],{"class":55581},[74,77396,58105],{"class":1925},[74,77398,131],{"class":84},[74,77400,66980],{"class":190},[74,77402,19199],{"class":1925},[74,77404,131],{"class":84},[74,77406,73405],{"class":190},[74,77408,65301],{"class":1925},[74,77410,131],{"class":84},[74,77412,77413],{"class":190},"\"年龄\"",[74,77415,57767],{"class":1925},[74,77417,131],{"class":84},[74,77419,73405],{"class":190},[74,77421,55588],{"class":84},[74,77423,77424,77426,77428,77430,77432,77434,77436,77438,77440,77442,77444,77447,77449,77451,77453],{"class":76,"line":37123},[74,77425,55622],{"class":84},[74,77427,58102],{"class":55581},[74,77429,58105],{"class":1925},[74,77431,131],{"class":84},[74,77433,66980],{"class":190},[74,77435,19199],{"class":1925},[74,77437,131],{"class":84},[74,77439,73507],{"class":190},[74,77441,65301],{"class":1925},[74,77443,131],{"class":84},[74,77445,77446],{"class":190},"\"薪资\"",[74,77448,57767],{"class":1925},[74,77450,131],{"class":84},[74,77452,73507],{"class":190},[74,77454,55588],{"class":84},[74,77456,77457,77459,77461,77463,77465,77467,77469,77471,77473,77475,77477,77479],{"class":76,"line":37132},[74,77458,55622],{"class":84},[74,77460,73425],{"class":55581},[74,77462,19199],{"class":1925},[74,77464,131],{"class":84},[74,77466,73432],{"class":190},[74,77468,19238],{"class":1925},[74,77470,131],{"class":84},[74,77472,11931],{"class":190},[74,77474,57767],{"class":1925},[74,77476,131],{"class":84},[74,77478,73432],{"class":190},[74,77480,55588],{"class":84},[74,77482,77483,77485,77487,77489,77491,77493,77495,77497],{"class":76,"line":37138},[74,77484,59515],{"class":84},[74,77486,73447],{"class":55581},[74,77488,70932],{"class":1925},[74,77490,131],{"class":84},[74,77492,14240],{"class":190},[74,77494,73456],{"class":84},[74,77496,73447],{"class":55581},[74,77498,55588],{"class":84},[74,77500,77501,77503,77505,77507,77509,77511,77513,77515],{"class":76,"line":37147},[74,77502,59515],{"class":84},[74,77504,73447],{"class":55581},[74,77506,70932],{"class":1925},[74,77508,131],{"class":84},[74,77510,14309],{"class":190},[74,77512,73475],{"class":84},[74,77514,73447],{"class":55581},[74,77516,55588],{"class":84},[74,77518,77519,77521,77523],{"class":76,"line":37153},[74,77520,56057],{"class":84},[74,77522,73425],{"class":55581},[74,77524,55588],{"class":84},[74,77526,77527,77529,77531,77533,77535,77537,77539,77541,77543,77545,77547,77549],{"class":76,"line":37159},[74,77528,55622],{"class":84},[74,77530,73425],{"class":55581},[74,77532,19199],{"class":1925},[74,77534,131],{"class":84},[74,77536,73529],{"class":190},[74,77538,19238],{"class":1925},[74,77540,131],{"class":84},[74,77542,11931],{"class":190},[74,77544,57767],{"class":1925},[74,77546,131],{"class":84},[74,77548,73529],{"class":190},[74,77550,55588],{"class":84},[74,77552,77553,77555,77557,77559,77561,77563,77565,77567],{"class":76,"line":37168},[74,77554,59515],{"class":84},[74,77556,73447],{"class":55581},[74,77558,70932],{"class":1925},[74,77560,131],{"class":84},[74,77562,73550],{"class":190},[74,77564,73553],{"class":84},[74,77566,73447],{"class":55581},[74,77568,55588],{"class":84},[74,77570,77571,77573,77575,77577,77579,77581,77583,77585],{"class":76,"line":37174},[74,77572,59515],{"class":84},[74,77574,73447],{"class":55581},[74,77576,70932],{"class":1925},[74,77578,131],{"class":84},[74,77580,73570],{"class":190},[74,77582,73573],{"class":84},[74,77584,73447],{"class":55581},[74,77586,55588],{"class":84},[74,77588,77589,77591,77593,77595,77597,77599,77601,77603],{"class":76,"line":37185},[74,77590,59515],{"class":84},[74,77592,73447],{"class":55581},[74,77594,70932],{"class":1925},[74,77596,131],{"class":84},[74,77598,73590],{"class":190},[74,77600,73593],{"class":84},[74,77602,73447],{"class":55581},[74,77604,55588],{"class":84},[74,77606,77607,77609,77611,77613,77615,77617,77619,77621],{"class":76,"line":37191},[74,77608,59515],{"class":84},[74,77610,73447],{"class":55581},[74,77612,70932],{"class":1925},[74,77614,131],{"class":84},[74,77616,73610],{"class":190},[74,77618,73613],{"class":84},[74,77620,73447],{"class":55581},[74,77622,55588],{"class":84},[74,77624,77625,77627,77629,77631,77633,77635,77637,77639],{"class":76,"line":37210},[74,77626,59515],{"class":84},[74,77628,73447],{"class":55581},[74,77630,70932],{"class":1925},[74,77632,131],{"class":84},[74,77634,73630],{"class":190},[74,77636,73633],{"class":84},[74,77638,73447],{"class":55581},[74,77640,55588],{"class":84},[74,77642,77643,77645,77647],{"class":76,"line":37216},[74,77644,56057],{"class":84},[74,77646,73425],{"class":55581},[74,77648,55588],{"class":84},[74,77650,77651,77653,77655],{"class":76,"line":37227},[74,77652,55622],{"class":84},[74,77654,58168],{"class":55581},[74,77656,55588],{"class":84},[74,77658,77659,77661,77663,77666,77668,77671,77673],{"class":76,"line":37233},[74,77660,59515],{"class":84},[74,77662,74],{"class":55581},[74,77664,77665],{"class":84},">+\u003C\u002F",[74,77667,74],{"class":55581},[74,77669,77670],{"class":84},">添加\u003C\u002F",[74,77672,58168],{"class":55581},[74,77674,55588],{"class":84},[74,77676,77677,77679,77681],{"class":76,"line":37253},[74,77678,56698],{"class":84},[74,77680,70906],{"class":55581},[74,77682,55588],{"class":84},[74,77684,77685,77687,77689,77691,77693,77695,77698,77700,77703,77705,77708,77710],{"class":76,"line":37269},[74,77686,56425],{"class":84},[74,77688,55892],{"class":55581},[74,77690,57767],{"class":1925},[74,77692,131],{"class":84},[74,77694,66861],{"class":190},[74,77696,77697],{"class":84},">共有数据 \u003C",[74,77699,74],{"class":55581},[74,77701,77702],{"class":84},">0\u003C\u002F",[74,77704,74],{"class":55581},[74,77706,77707],{"class":84},"> 条\u003C\u002F",[74,77709,55892],{"class":55581},[74,77711,55588],{"class":84},[74,77713,77714,77716,77718],{"class":76,"line":37275},[74,77715,56425],{"class":84},[74,77717,223],{"class":55581},[74,77719,55588],{"class":84},[74,77721,77722,77724,77726],{"class":76,"line":37289},[74,77723,55622],{"class":84},[74,77725,226],{"class":55581},[74,77727,55588],{"class":84},[74,77729,77730,77732,77734],{"class":76,"line":37295},[74,77731,59515],{"class":84},[74,77733,229],{"class":55581},[74,77735,55588],{"class":84},[74,77737,77738,77740,77742,77745,77747],{"class":76,"line":37301},[74,77739,59583],{"class":84},[74,77741,232],{"class":55581},[74,77743,77744],{"class":84},">ID\u003C\u002F",[74,77746,232],{"class":55581},[74,77748,55588],{"class":84},[74,77750,77751,77753,77755,77757,77759],{"class":76,"line":37312},[74,77752,59583],{"class":84},[74,77754,232],{"class":55581},[74,77756,73736],{"class":84},[74,77758,232],{"class":55581},[74,77760,55588],{"class":84},[74,77762,77763,77765,77767,77769,77771],{"class":76,"line":37318},[74,77764,59583],{"class":84},[74,77766,232],{"class":55581},[74,77768,73749],{"class":84},[74,77770,232],{"class":55581},[74,77772,55588],{"class":84},[74,77774,77775,77777,77779,77781,77783],{"class":76,"line":37324},[74,77776,59583],{"class":84},[74,77778,232],{"class":55581},[74,77780,73762],{"class":84},[74,77782,232],{"class":55581},[74,77784,55588],{"class":84},[74,77786,77787,77789,77791,77793,77795],{"class":76,"line":37334},[74,77788,59583],{"class":84},[74,77790,232],{"class":55581},[74,77792,73775],{"class":84},[74,77794,232],{"class":55581},[74,77796,55588],{"class":84},[74,77798,77799,77801,77803,77805,77807],{"class":76,"line":37340},[74,77800,59583],{"class":84},[74,77802,232],{"class":55581},[74,77804,73788],{"class":84},[74,77806,232],{"class":55581},[74,77808,55588],{"class":84},[74,77810,77811,77813,77815,77818,77820],{"class":76,"line":37351},[74,77812,59583],{"class":84},[74,77814,232],{"class":55581},[74,77816,77817],{"class":84},">录入时间\u003C\u002F",[74,77819,232],{"class":55581},[74,77821,55588],{"class":84},[74,77823,77824,77826,77828,77830,77832],{"class":76,"line":37357},[74,77825,59583],{"class":84},[74,77827,232],{"class":55581},[74,77829,73801],{"class":84},[74,77831,232],{"class":55581},[74,77833,55588],{"class":84},[74,77835,77836,77838,77840],{"class":76,"line":37367},[74,77837,59688],{"class":84},[74,77839,229],{"class":55581},[74,77841,55588],{"class":84},[74,77843,77844,77846,77848],{"class":76,"line":37372},[74,77845,56057],{"class":84},[74,77847,226],{"class":55581},[74,77849,55588],{"class":84},[74,77851,77852,77854,77856],{"class":76,"line":37378},[74,77853,55622],{"class":84},[74,77855,270],{"class":55581},[74,77857,55588],{"class":84},[74,77859,77860],{"class":76,"line":37427},[74,77861,77862],{"class":144},"      \u003C!-- \u003Ctr>\n",[74,77864,77865],{"class":76,"line":37474},[74,77866,77867],{"class":144},"        \u003Ctd>1\u003C\u002Ftd>\n",[74,77869,77870],{"class":76,"line":37479},[74,77871,77867],{"class":144},[74,77873,77874],{"class":76,"line":37485},[74,77875,77867],{"class":144},[74,77877,77878],{"class":76,"line":37504},[74,77879,77867],{"class":144},[74,77881,77882],{"class":76,"line":37510},[74,77883,77867],{"class":144},[74,77885,77886],{"class":76,"line":37530},[74,77887,77867],{"class":144},[74,77889,77890],{"class":76,"line":37536},[74,77891,77867],{"class":144},[74,77893,77894],{"class":76,"line":37542},[74,77895,77896],{"class":144},"        \u003Ctd>\n",[74,77898,77899],{"class":76,"line":37552},[74,77900,77901],{"class":144},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[74,77903,77904],{"class":76,"line":37557},[74,77905,77906],{"class":144},"        \u003C\u002Ftd>\n",[74,77908,77909],{"class":76,"line":37563},[74,77910,77911],{"class":144},"      \u003C\u002Ftr> -->\n",[74,77913,77914,77916,77918],{"class":76,"line":37579},[74,77915,56057],{"class":84},[74,77917,270],{"class":55581},[74,77919,55588],{"class":84},[74,77921,77922,77924,77926],{"class":76,"line":37624},[74,77923,56698],{"class":84},[74,77925,223],{"class":55581},[74,77927,55588],{"class":84},[74,77929,77930,77932,77934],{"class":76,"line":37630},[74,77931,56425],{"class":84},[74,77933,56094],{"class":55581},[74,77935,55588],{"class":84},[74,77937,77938],{"class":76,"line":37636},[74,77939,77940],{"class":144},"    \u002F\u002F const initData = [{\n",[74,77942,77943],{"class":76,"line":37642},[74,77944,77945],{"class":144},"    \u002F\u002F   unameId: 1,\n",[74,77947,77948],{"class":76,"line":37653},[74,77949,77950],{"class":144},"    \u002F\u002F   uname: '华晨宇',\n",[74,77952,77953],{"class":76,"line":37659},[74,77954,77955],{"class":144},"    \u002F\u002F   age: 22,\n",[74,77957,77958],{"class":76,"line":37665},[74,77959,77960],{"class":144},"    \u002F\u002F   salary: 12000,\n",[74,77962,77963],{"class":76,"line":37671},[74,77964,77965],{"class":144},"    \u002F\u002F   gender: '男',\n",[74,77967,77968],{"class":76,"line":37689},[74,77969,77970],{"class":144},"    \u002F\u002F   city: '北京',\n",[74,77972,77973],{"class":76,"line":37703},[74,77974,77975],{"class":144},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[74,77977,77978],{"class":76,"line":37712},[74,77979,77980],{"class":144},"    \u002F\u002F }]\n",[74,77982,77983],{"class":76,"line":37721},[74,77984,77985],{"class":144},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[74,77987,77988],{"class":76,"line":37730},[74,77989,77990],{"class":144},"    \u002F\u002F 1.渲染业务\n",[74,77992,77993],{"class":76,"line":37739},[74,77994,77995],{"class":144},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[74,77997,77998],{"class":76,"line":37745},[74,77999,78000],{"class":144},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[74,78002,78003],{"class":76,"line":37751},[74,78004,78005],{"class":144},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[74,78007,78008],{"class":76,"line":37759},[74,78009,2363],{"emptyLinePlaceholder":2362},[74,78011,78012],{"class":76,"line":37764},[74,78013,78014],{"class":144},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[74,78016,78017],{"class":76,"line":37770},[74,78018,78019],{"class":144},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[74,78021,78022,78024,78026,78028],{"class":76,"line":37781},[74,78023,15500],{"class":80},[74,78025,61976],{"class":134},[74,78027,17843],{"class":80},[74,78029,56119],{"class":84},[74,78031,78032,78035,78037],{"class":76,"line":37787},[74,78033,78034],{"class":84},"    console.",[74,78036,62528],{"class":1925},[74,78038,56693],{"class":84},[74,78040,78041],{"class":76,"line":37807},[74,78042,2363],{"emptyLinePlaceholder":2362},[74,78044,78045],{"class":76,"line":37813},[74,78046,78047],{"class":144},"    \u002F\u002F 时间函数\n",[74,78049,78050,78052,78055],{"class":76,"line":37819},[74,78051,74365],{"class":80},[74,78053,78054],{"class":1925}," getTime",[74,78056,15132],{"class":84},[74,78058,78059,78061,78064,78066,78068,78071],{"class":76,"line":37825},[74,78060,62509],{"class":80},[74,78062,78063],{"class":134}," date",[74,78065,17843],{"class":80},[74,78067,15857],{"class":80},[74,78069,78070],{"class":1925}," Date",[74,78072,1938],{"class":84},[74,78074,78075,78077,78079,78081,78084,78087,78089,78091,78093,78096,78099,78101,78103,78105,78107,78109,78111,78113],{"class":76,"line":37842},[74,78076,62509],{"class":80},[74,78078,20370],{"class":134},[74,78080,17843],{"class":80},[74,78082,78083],{"class":84}," date.",[74,78085,78086],{"class":1925},"getHours",[74,78088,17329],{"class":84},[74,78090,996],{"class":80},[74,78092,2000],{"class":134},[74,78094,78095],{"class":80}," ?",[74,78097,78098],{"class":190}," '0'",[74,78100,49847],{"class":80},[74,78102,78083],{"class":84},[74,78104,78086],{"class":1925},[74,78106,17329],{"class":84},[74,78108,945],{"class":80},[74,78110,78083],{"class":84},[74,78112,78086],{"class":1925},[74,78114,1938],{"class":84},[74,78116,78117,78119,78122,78124,78126,78129,78131,78133,78135,78137,78139,78141,78143,78145,78147,78149,78151,78153],{"class":76,"line":37848},[74,78118,62509],{"class":80},[74,78120,78121],{"class":134}," m",[74,78123,17843],{"class":80},[74,78125,78083],{"class":84},[74,78127,78128],{"class":1925},"getMinutes",[74,78130,17329],{"class":84},[74,78132,996],{"class":80},[74,78134,2000],{"class":134},[74,78136,78095],{"class":80},[74,78138,78098],{"class":190},[74,78140,49847],{"class":80},[74,78142,78083],{"class":84},[74,78144,78128],{"class":1925},[74,78146,17329],{"class":84},[74,78148,945],{"class":80},[74,78150,78083],{"class":84},[74,78152,78128],{"class":1925},[74,78154,1938],{"class":84},[74,78156,78157,78159,78161,78163,78165,78168,78170,78172,78174,78176,78178,78180,78182,78184,78186,78188,78190,78192],{"class":76,"line":37854},[74,78158,62509],{"class":80},[74,78160,12707],{"class":134},[74,78162,17843],{"class":80},[74,78164,78083],{"class":84},[74,78166,78167],{"class":1925},"getSeconds",[74,78169,17329],{"class":84},[74,78171,996],{"class":80},[74,78173,2000],{"class":134},[74,78175,78095],{"class":80},[74,78177,78098],{"class":190},[74,78179,49847],{"class":80},[74,78181,78083],{"class":84},[74,78183,78167],{"class":1925},[74,78185,17329],{"class":84},[74,78187,945],{"class":80},[74,78189,78083],{"class":84},[74,78191,78167],{"class":1925},[74,78193,1938],{"class":84},[74,78195,78196,78198,78201,78203,78205,78208,78210,78213,78215,78218,78220,78222,78225,78227,78229,78231,78233,78235,78237,78240,78242,78245,78247,78250,78252,78254,78256],{"class":76,"line":37860},[74,78197,62509],{"class":80},[74,78199,78200],{"class":134}," str",[74,78202,17843],{"class":80},[74,78204,67184],{"class":190},[74,78206,78207],{"class":84},"date",[74,78209,644],{"class":190},[74,78211,78212],{"class":1925},"getFullYear",[74,78214,2390],{"class":190},[74,78216,78217],{"class":190},"}\u002F${",[74,78219,78207],{"class":84},[74,78221,644],{"class":190},[74,78223,78224],{"class":1925},"getMonth",[74,78226,17329],{"class":190},[74,78228,567],{"class":80},[74,78230,29399],{"class":134},[74,78232,78217],{"class":190},[74,78234,78207],{"class":84},[74,78236,644],{"class":190},[74,78238,78239],{"class":1925},"getDate",[74,78241,2390],{"class":190},[74,78243,78244],{"class":190},"} ${",[74,78246,501],{"class":84},[74,78248,78249],{"class":190},"}:${",[74,78251,630],{"class":84},[74,78253,78249],{"class":190},[74,78255,781],{"class":84},[74,78257,78258],{"class":190},"}`\n",[74,78260,78261,78264],{"class":76,"line":37866},[74,78262,78263],{"class":80},"      return",[74,78265,78266],{"class":84}," str\n",[74,78268,78269],{"class":76,"line":37872},[74,78270,2149],{"class":84},[74,78272,78273],{"class":76,"line":37899},[74,78274,78275],{"class":144},"    \u002F\u002F 渲染函数\n",[74,78277,78278,78280,78282,78284,78286,78288,78290,78292],{"class":76,"line":37923},[74,78279,15500],{"class":80},[74,78281,74028],{"class":134},[74,78283,17843],{"class":80},[74,78285,58677],{"class":84},[74,78287,58680],{"class":1925},[74,78289,85],{"class":84},[74,78291,74039],{"class":190},[74,78293,91],{"class":84},[74,78295,78296,78298,78300],{"class":76,"line":37929},[74,78297,74365],{"class":80},[74,78299,74368],{"class":1925},[74,78301,15132],{"class":84},[74,78303,78304],{"class":76,"line":37935},[74,78305,78306],{"class":144},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[74,78308,78309],{"class":76,"line":37941},[74,78310,78311],{"class":144},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[74,78313,78314,78316,78319,78321,78323,78326,78328,78330,78332,78335,78337,78340],{"class":76,"line":37952},[74,78315,62509],{"class":80},[74,78317,78318],{"class":134}," trArr",[74,78320,17843],{"class":80},[74,78322,56246],{"class":84},[74,78324,78325],{"class":1925},"map",[74,78327,85],{"class":84},[74,78329,58730],{"class":80},[74,78331,1620],{"class":84},[74,78333,78334],{"class":9495},"ele",[74,78336,16714],{"class":84},[74,78338,78339],{"class":9495},"index",[74,78341,16721],{"class":84},[74,78343,78344,78346],{"class":76,"line":37963},[74,78345,19031],{"class":80},[74,78347,74449],{"class":190},[74,78349,78350],{"class":76,"line":37969},[74,78351,78352],{"class":190},"      \u003Ctr>\n",[74,78354,78355,78357,78359,78361,78364],{"class":76,"line":37986},[74,78356,74454],{"class":190},[74,78358,78334],{"class":84},[74,78360,644],{"class":190},[74,78362,78363],{"class":84},"unameId",[74,78365,74469],{"class":190},[74,78367,78368,78370,78372,78374,78376],{"class":76,"line":38009},[74,78369,74454],{"class":190},[74,78371,78334],{"class":84},[74,78373,644],{"class":190},[74,78375,74485],{"class":84},[74,78377,74469],{"class":190},[74,78379,78380,78382,78384,78386,78388],{"class":76,"line":38032},[74,78381,74454],{"class":190},[74,78383,78334],{"class":84},[74,78385,644],{"class":190},[74,78387,74502],{"class":84},[74,78389,74469],{"class":190},[74,78391,78392,78394,78396,78398,78400],{"class":76,"line":38038},[74,78393,74454],{"class":190},[74,78395,78334],{"class":84},[74,78397,644],{"class":190},[74,78399,74519],{"class":84},[74,78401,74469],{"class":190},[74,78403,78404,78406,78408,78410,78412],{"class":76,"line":38043},[74,78405,74454],{"class":190},[74,78407,78334],{"class":84},[74,78409,644],{"class":190},[74,78411,74536],{"class":84},[74,78413,74469],{"class":190},[74,78415,78416,78418,78420,78422,78424],{"class":76,"line":38052},[74,78417,74454],{"class":190},[74,78419,78334],{"class":84},[74,78421,644],{"class":190},[74,78423,74553],{"class":84},[74,78425,74469],{"class":190},[74,78427,78428,78430,78432,78434,78436],{"class":76,"line":38062},[74,78429,74454],{"class":190},[74,78431,78334],{"class":84},[74,78433,644],{"class":190},[74,78435,2349],{"class":84},[74,78437,74469],{"class":190},[74,78439,78440],{"class":76,"line":38068},[74,78441,77896],{"class":190},[74,78443,78444,78447,78449],{"class":76,"line":38073},[74,78445,78446],{"class":190},"          \u003Ca href=\"#\" data-id=\"${",[74,78448,78339],{"class":84},[74,78450,78451],{"class":190},"}\">删除\u003C\u002Fa>\n",[74,78453,78454],{"class":76,"line":38079},[74,78455,77906],{"class":190},[74,78457,78458],{"class":76,"line":38092},[74,78459,78460],{"class":190},"      \u003C\u002Ftr>\n",[74,78462,78463],{"class":76,"line":38098},[74,78464,78465],{"class":190},"  `\n",[74,78467,78468],{"class":76,"line":38109},[74,78469,69096],{"class":84},[74,78471,78472,78474,78476],{"class":76,"line":38120},[74,78473,62525],{"class":84},[74,78475,62528],{"class":1925},[74,78477,78478],{"class":84},"(trArr)\n",[74,78480,78481],{"class":76,"line":38139},[74,78482,2363],{"emptyLinePlaceholder":2362},[74,78484,78485],{"class":76,"line":53799},[74,78486,78487],{"class":144},"      \u002F\u002F (2) 把数组转换为字符串join\n",[74,78489,78490],{"class":76,"line":53804},[74,78491,78492],{"class":144},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[74,78494,78495,78497,78499,78502,78505,78507,78510],{"class":76,"line":53813},[74,78496,74380],{"class":84},[74,78498,131],{"class":80},[74,78500,78501],{"class":84}," trArr.",[74,78503,78504],{"class":1925},"join",[74,78506,85],{"class":84},[74,78508,78509],{"class":190},"''",[74,78511,91],{"class":84},[74,78513,78514],{"class":76,"line":53822},[74,78515,78516],{"class":144},"      \u002F\u002F 显示共有几条\n",[74,78518,78519,78521,78523,78525,78528,78531,78533,78535],{"class":76,"line":53827},[74,78520,60052],{"class":84},[74,78522,58680],{"class":1925},[74,78524,85],{"class":84},[74,78526,78527],{"class":190},"'.total span'",[74,78529,78530],{"class":84},").innerHTML ",[74,78532,131],{"class":80},[74,78534,56246],{"class":84},[74,78536,60112],{"class":134},[74,78538,78539],{"class":76,"line":53832},[74,78540,2149],{"class":84},[74,78542,78543],{"class":76,"line":53837},[74,78544,78545],{"class":144},"    \u002F\u002F render()\n",[74,78547,78548],{"class":76,"line":53850},[74,78549,2363],{"emptyLinePlaceholder":2362},[74,78551,78552],{"class":76,"line":53855},[74,78553,78554],{"class":144},"    \u002F\u002F 获取DOM对象\n",[74,78556,78557,78559,78561,78563,78565,78567,78569,78571],{"class":76,"line":53864},[74,78558,15500],{"class":80},[74,78560,74102],{"class":134},[74,78562,17843],{"class":80},[74,78564,58677],{"class":84},[74,78566,58680],{"class":1925},[74,78568,85],{"class":84},[74,78570,74113],{"class":190},[74,78572,91],{"class":84},[74,78574,78575,78577,78579,78581,78583,78585,78587,78589],{"class":76,"line":53873},[74,78576,15500],{"class":80},[74,78578,73929],{"class":134},[74,78580,17843],{"class":80},[74,78582,58677],{"class":84},[74,78584,58680],{"class":1925},[74,78586,85],{"class":84},[74,78588,73940],{"class":190},[74,78590,91],{"class":84},[74,78592,78593,78595,78597,78599,78601,78603,78605,78607],{"class":76,"line":53890},[74,78594,15500],{"class":80},[74,78596,19968],{"class":134},[74,78598,17843],{"class":80},[74,78600,58677],{"class":84},[74,78602,58680],{"class":1925},[74,78604,85],{"class":84},[74,78606,73959],{"class":190},[74,78608,91],{"class":84},[74,78610,78612,78614,78616,78618,78620,78622,78624,78626],{"class":76,"line":78611},231,[74,78613,15500],{"class":80},[74,78615,73988],{"class":134},[74,78617,17843],{"class":80},[74,78619,58677],{"class":84},[74,78621,58680],{"class":1925},[74,78623,85],{"class":84},[74,78625,73999],{"class":190},[74,78627,91],{"class":84},[74,78629,78631,78633,78635,78637,78639,78641,78643,78645],{"class":76,"line":78630},232,[74,78632,15500],{"class":80},[74,78634,73968],{"class":134},[74,78636,17843],{"class":80},[74,78638,58677],{"class":84},[74,78640,58680],{"class":1925},[74,78642,85],{"class":84},[74,78644,73979],{"class":190},[74,78646,91],{"class":84},[74,78648,78650,78652,78654,78656,78658,78660,78662,78664],{"class":76,"line":78649},233,[74,78651,15500],{"class":80},[74,78653,74008],{"class":134},[74,78655,17843],{"class":80},[74,78657,58677],{"class":84},[74,78659,58680],{"class":1925},[74,78661,85],{"class":84},[74,78663,74019],{"class":190},[74,78665,91],{"class":84},[74,78667,78669],{"class":76,"line":78668},234,[74,78670,2363],{"emptyLinePlaceholder":2362},[74,78672,78674],{"class":76,"line":78673},235,[74,78675,78676],{"class":144},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[74,78678,78680,78682,78684,78686,78688,78690,78692,78694,78696],{"class":76,"line":78679},236,[74,78681,74120],{"class":84},[74,78683,62094],{"class":1925},[74,78685,85],{"class":84},[74,78687,74127],{"class":190},[74,78689,16714],{"class":84},[74,78691,58730],{"class":80},[74,78693,1620],{"class":84},[74,78695,160],{"class":9495},[74,78697,16721],{"class":84},[74,78699,78701],{"class":76,"line":78700},237,[74,78702,78703],{"class":144},"      \u002F\u002F 禁止浏览器跳转\n",[74,78705,78707,78709,78711],{"class":76,"line":78706},238,[74,78708,74147],{"class":84},[74,78710,74150],{"class":1925},[74,78712,1938],{"class":84},[74,78714,78716],{"class":76,"line":78715},239,[74,78717,78718],{"class":144},"      \u002F\u002F 非空判断\n",[74,78720,78722],{"class":76,"line":78721},240,[74,78723,78724],{"class":144},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[74,78726,78728],{"class":76,"line":78727},241,[74,78729,78730],{"class":144},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[74,78732,78734,78736,78738,78740,78743,78745,78748,78751,78753,78755],{"class":76,"line":78733},242,[74,78735,58761],{"class":80},[74,78737,1620],{"class":84},[74,78739,312],{"class":80},[74,78741,78742],{"class":84},"uname.value ",[74,78744,75638],{"class":80},[74,78746,78747],{"class":80}," !",[74,78749,78750],{"class":84},"age.value ",[74,78752,75638],{"class":80},[74,78754,78747],{"class":80},[74,78756,78757],{"class":84},"salary.value) {\n",[74,78759,78761,78763,78765,78767,78769],{"class":76,"line":78760},243,[74,78762,19031],{"class":80},[74,78764,74221],{"class":1925},[74,78766,85],{"class":84},[74,78768,74226],{"class":190},[74,78770,91],{"class":84},[74,78772,78774],{"class":76,"line":78773},244,[74,78775,56679],{"class":84},[74,78777,78779,78781,78783],{"class":76,"line":78778},245,[74,78780,62288],{"class":84},[74,78782,56165],{"class":1925},[74,78784,78785],{"class":84},"({\n",[74,78787,78789],{"class":76,"line":78788},246,[74,78790,78791],{"class":144},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[74,78793,78795],{"class":76,"line":78794},247,[74,78796,78797],{"class":144},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[74,78799,78801],{"class":76,"line":78800},248,[74,78802,78803],{"class":144},"        \u002F\u002F 对象的序号应为数组长度+1\n",[74,78805,78807],{"class":76,"line":78806},249,[74,78808,78809],{"class":144},"        \u002F\u002F unameId: arr.length + 1,\n",[74,78811,78813],{"class":76,"line":78812},250,[74,78814,2363],{"emptyLinePlaceholder":2362},[74,78816,78818],{"class":76,"line":78817},251,[74,78819,78820],{"class":144},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[74,78822,78824],{"class":76,"line":78823},252,[74,78825,78826],{"class":144},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[74,78828,78830],{"class":76,"line":78829},253,[74,78831,78832],{"class":144},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[74,78834,78836],{"class":76,"line":78835},254,[74,78837,78838],{"class":144},"        \u002F\u002F 0当假看\n",[74,78840,78842,78845,78847,78849,78852,78854,78856,78858,78861,78863,78865,78868,78870],{"class":76,"line":78841},255,[74,78843,78844],{"class":84},"        unameId: arr.",[74,78846,56249],{"class":134},[74,78848,78095],{"class":80},[74,78850,78851],{"class":84}," arr[arr.",[74,78853,56249],{"class":134},[74,78855,56552],{"class":80},[74,78857,29399],{"class":134},[74,78859,78860],{"class":84},"].unameId ",[74,78862,567],{"class":80},[74,78864,29399],{"class":134},[74,78866,78867],{"class":80}," :",[74,78869,29399],{"class":134},[74,78871,35747],{"class":84},[74,78873,78875],{"class":76,"line":78874},256,[74,78876,74274],{"class":84},[74,78878,78880],{"class":76,"line":78879},257,[74,78881,74279],{"class":84},[74,78883,78885],{"class":76,"line":78884},258,[74,78886,74289],{"class":84},[74,78888,78890],{"class":76,"line":78889},259,[74,78891,74284],{"class":84},[74,78893,78895],{"class":76,"line":78894},260,[74,78896,78897],{"class":84},"        city: city.value,\n",[74,78899,78901],{"class":76,"line":78900},261,[74,78902,78903],{"class":144},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[74,78905,78907],{"class":76,"line":78906},262,[74,78908,78909],{"class":144},"        \u002F\u002F time: new Date().toDateString()\n",[74,78911,78913,78916,78919],{"class":76,"line":78912},263,[74,78914,78915],{"class":84},"        time: ",[74,78917,78918],{"class":1925},"getTime",[74,78920,1938],{"class":84},[74,78922,78924],{"class":76,"line":78923},264,[74,78925,69096],{"class":84},[74,78927,78929],{"class":76,"line":78928},265,[74,78930,78931],{"class":144},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[74,78933,78935,78937],{"class":76,"line":78934},266,[74,78936,74349],{"class":1925},[74,78938,1938],{"class":84},[74,78940,78942,78944,78946,78948,78950],{"class":76,"line":78941},267,[74,78943,74332],{"class":134},[74,78945,644],{"class":84},[74,78947,74337],{"class":1925},[74,78949,17329],{"class":84},[74,78951,78952],{"class":144},"\u002F\u002F重置表单\n",[74,78954,78956],{"class":76,"line":78955},268,[74,78957,78958],{"class":144},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[74,78960,78962,78965,78967,78969,78972,78974,78976,78978,78980],{"class":76,"line":78961},269,[74,78963,78964],{"class":84},"      localStorage.",[74,78966,75935],{"class":1925},[74,78968,85],{"class":84},[74,78970,78971],{"class":190},"'data'",[74,78973,16714],{"class":84},[74,78975,75945],{"class":134},[74,78977,644],{"class":84},[74,78979,75950],{"class":1925},[74,78981,78982],{"class":84},"(arr))\n",[74,78984,78986],{"class":76,"line":78985},270,[74,78987,37742],{"class":84},[74,78989,78991],{"class":76,"line":78990},271,[74,78992,2363],{"emptyLinePlaceholder":2362},[74,78994,78996],{"class":76,"line":78995},272,[74,78997,78998],{"class":144},"    \u002F\u002F 3.删除业务\n",[74,79000,79002],{"class":76,"line":79001},273,[74,79003,79004],{"class":144},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[74,79006,79008,79010,79012,79014,79016,79018,79020,79022,79024],{"class":76,"line":79007},274,[74,79009,74622],{"class":84},[74,79011,62094],{"class":1925},[74,79013,85],{"class":84},[74,79015,62099],{"class":190},[74,79017,16714],{"class":84},[74,79019,58730],{"class":80},[74,79021,1620],{"class":84},[74,79023,160],{"class":9495},[74,79025,16721],{"class":84},[74,79027,79029],{"class":76,"line":79028},275,[74,79030,79031],{"class":144},"      \u002F\u002F 判断是否点击的是删除按钮\n",[74,79033,79035,79037,79039,79041,79043],{"class":76,"line":79034},276,[74,79036,58761],{"class":80},[74,79038,71315],{"class":84},[74,79040,58767],{"class":80},[74,79042,72537],{"class":190},[74,79044,16721],{"class":84},[74,79046,79048],{"class":76,"line":79047},277,[74,79049,79050],{"class":144},"        \u002F\u002F alert(1)\n",[74,79052,79054],{"class":76,"line":79053},278,[74,79055,79056],{"class":144},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[74,79058,79060],{"class":76,"line":79059},279,[74,79061,79062],{"class":144},"        \u002F\u002F console.log(e.target)\n",[74,79064,79066],{"class":76,"line":79065},280,[74,79067,79068],{"class":144},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[74,79070,79072],{"class":76,"line":79071},281,[74,79073,2363],{"emptyLinePlaceholder":2362},[74,79075,79077],{"class":76,"line":79076},282,[74,79078,79079],{"class":144},"        \u002F\u002F 确认框，确然是否真的要删除\n",[74,79081,79083],{"class":76,"line":79082},283,[74,79084,79085],{"class":144},"        \u002F\u002F confirm()为确认框\n",[74,79087,79089],{"class":76,"line":79088},284,[74,79090,79091],{"class":144},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[74,79093,79095,79097,79099,79102,79104,79107],{"class":76,"line":79094},285,[74,79096,2460],{"class":80},[74,79098,1620],{"class":84},[74,79100,79101],{"class":1925},"confirm",[74,79103,85],{"class":84},[74,79105,79106],{"class":190},"'您确定要删除这条数据吗？'",[74,79108,79109],{"class":84},")) {\n",[74,79111,79113,79116,79118,79120,79122],{"class":76,"line":79112},286,[74,79114,79115],{"class":84},"          arr.",[74,79117,62291],{"class":1925},[74,79119,74675],{"class":84},[74,79121,303],{"class":134},[74,79123,91],{"class":84},[74,79125,79127],{"class":76,"line":79126},287,[74,79128,79129],{"class":144},"          \u002F\u002F 3.4 重新渲染页面\n",[74,79131,79133,79136],{"class":76,"line":79132},288,[74,79134,79135],{"class":1925},"          render",[74,79137,1938],{"class":84},[74,79139,79141],{"class":76,"line":79140},289,[74,79142,79143],{"class":144},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[74,79145,79147,79150,79152,79154,79156,79158,79160,79162,79164],{"class":76,"line":79146},290,[74,79148,79149],{"class":84},"          localStorage.",[74,79151,75935],{"class":1925},[74,79153,85],{"class":84},[74,79155,78971],{"class":190},[74,79157,16714],{"class":84},[74,79159,75945],{"class":134},[74,79161,644],{"class":84},[74,79163,75950],{"class":1925},[74,79165,78982],{"class":84},[74,79167,79169],{"class":76,"line":79168},291,[74,79170,2492],{"class":84},[74,79172,79174],{"class":76,"line":79173},292,[74,79175,56679],{"class":84},[74,79177,79179],{"class":76,"line":79178},293,[74,79180,2363],{"emptyLinePlaceholder":2362},[74,79182,79184],{"class":76,"line":79183},294,[74,79185,37742],{"class":84},[74,79187,79189],{"class":76,"line":79188},295,[74,79190,2363],{"emptyLinePlaceholder":2362},[74,79192,79194,79196,79198],{"class":76,"line":79193},296,[74,79195,56698],{"class":84},[74,79197,56094],{"class":55581},[74,79199,55588],{"class":84},[74,79201,79203,79205,79207],{"class":76,"line":79202},297,[74,79204,56066],{"class":84},[74,79206,56081],{"class":55581},[74,79208,55588],{"class":84},[74,79210,79212],{"class":76,"line":79211},298,[74,79213,2363],{"emptyLinePlaceholder":2362},[74,79215,79217,79219,79221],{"class":76,"line":79216},299,[74,79218,56066],{"class":84},[74,79220,54916],{"class":55581},[74,79222,55588],{"class":84},[14,79224,79226],{"id":79225},"_36-正则表达式","3.6 正则表达式",[19,79228,79229],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,79231,79232],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,79234,79235],{},"正则表达式的作用：",[1093,79237,79238,79245,79251],{},[30,79239,79240,79241,79244],{},"表单验证（ ",[235,79242,79243],{},"匹配"," ）",[30,79246,79247,79248,79244],{},"过滤敏感词（ ",[235,79249,79250],{},"替换",[30,79252,79253,79254,79244],{},"字符串中提取我们想要的部分（ ",[235,79255,79256],{},"提取",[44,79258,79260],{"id":79259},"_361-语法","3.6.1 语法",[19,79262,79263],{},"正则表达式使用步骤：",[27,79265,79266,79269],{},[30,79267,79268],{},"定义规则",[30,79270,79271],{},"查找是否匹配",[19,79273,79274],{},"正则表达式里边不需要写引号",[19,79276,79277],{},[1424,79278],{"alt":69,"src":79279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,79281,79282],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,79284,79285],{},"reg.test(str)",[19,79287,79288],{},[1424,79289],{"alt":69,"src":79290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,79292,79293],{},[1424,79294],{"alt":69,"src":79295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[44,79297,79299],{"id":79298},"_362-元字符","3.6.2 元字符",[27,79301,79302,79305,79308,79311,79318],{},[30,79303,79304],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[30,79306,79307],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[30,79309,79310],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[30,79312,79313,79314],{},"正则验证工具：",[324,79315,79316],{"href":79316,"rel":79317},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[28145],[30,79319,79320],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[26277,79322,79324],{"id":79323},"_3621-边界符","3.6.2.1 边界符",[19,79326,79327],{},[1424,79328],{"alt":69,"src":79329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,79331,79332],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,79334,79335],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,79337,79338],{},"只匹配一次",[19,79340,79341],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[26277,79343,79345],{"id":79344},"_3622-量词","3.6.2.2 量词",[19,79347,79348],{},[1424,79349],{"alt":69,"src":79350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,79352,79353],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[26277,79355,79357],{"id":79356},"_3623-元字符","3.6.2.3 元字符",[19,79359,79360],{},[1424,79361],{"alt":69,"src":79362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,79364,79365],{},"匹配的是a或b或c []只选一个",[19,79367,79368],{},[1424,79369],{"alt":69,"src":79370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,79372,79373],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,79375,79376],{},[1424,79377],{"alt":69,"src":79378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,79380,79381],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,79383,79384],{},[1424,79385],{"alt":69,"src":79386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[64,79388,79390],{"className":54914,"code":79389,"language":54916,"meta":69,"style":69},"\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",[71,79391,79392,79402,79416,79420,79428,79442,79462,79474,79482,79486,79494,79502,79507,79538,79565,79593,79597,79602,79630,79661,79666,79671,79702,79734,79766,79770,79775,79806,79836,79866,79870,79875,79906,79937,79967,79997,80001,80006,80039,80043,80048,80079,80110,80114,80119,80150,80180,80211,80215,80220,80252,80283,80314,80341,80372,80404,80437,80468,80499,80531,80562,80570,80578,80582],{"__ignoreMap":69},[74,79393,79394,79396,79398,79400],{"class":76,"line":77},[74,79395,55578],{"class":84},[74,79397,55582],{"class":55581},[74,79399,55585],{"class":1925},[74,79401,55588],{"class":84},[74,79403,79404,79406,79408,79410,79412,79414],{"class":76,"line":94},[74,79405,996],{"class":84},[74,79407,54916],{"class":55581},[74,79409,55597],{"class":1925},[74,79411,131],{"class":84},[74,79413,55602],{"class":190},[74,79415,55588],{"class":84},[74,79417,79418],{"class":76,"line":1141},[74,79419,2363],{"emptyLinePlaceholder":2362},[74,79421,79422,79424,79426],{"class":76,"line":1156},[74,79423,996],{"class":84},[74,79425,55615],{"class":55581},[74,79427,55588],{"class":84},[74,79429,79430,79432,79434,79436,79438,79440],{"class":76,"line":1162},[74,79431,56425],{"class":84},[74,79433,55625],{"class":55581},[74,79435,55628],{"class":1925},[74,79437,131],{"class":84},[74,79439,55633],{"class":190},[74,79441,55588],{"class":84},[74,79443,79444,79446,79448,79450,79452,79454,79456,79458,79460],{"class":76,"line":1176},[74,79445,56425],{"class":84},[74,79447,55625],{"class":55581},[74,79449,19199],{"class":1925},[74,79451,131],{"class":84},[74,79453,55672],{"class":190},[74,79455,55652],{"class":1925},[74,79457,131],{"class":84},[74,79459,55679],{"class":190},[74,79461,55588],{"class":84},[74,79463,79464,79466,79468,79470,79472],{"class":76,"line":1182},[74,79465,56425],{"class":84},[74,79467,55688],{"class":55581},[74,79469,55691],{"class":84},[74,79471,55688],{"class":55581},[74,79473,55588],{"class":84},[74,79475,79476,79478,79480],{"class":76,"line":1273},[74,79477,56066],{"class":84},[74,79479,55615],{"class":55581},[74,79481,55588],{"class":84},[74,79483,79484],{"class":76,"line":1279},[74,79485,2363],{"emptyLinePlaceholder":2362},[74,79487,79488,79490,79492],{"class":76,"line":1291},[74,79489,996],{"class":84},[74,79491,56081],{"class":55581},[74,79493,55588],{"class":84},[74,79495,79496,79498,79500],{"class":76,"line":1574},[74,79497,56425],{"class":84},[74,79499,56094],{"class":55581},[74,79501,55588],{"class":84},[74,79503,79504],{"class":76,"line":1579},[74,79505,79506],{"class":144},"    \u002F\u002F 元字符中\n",[74,79508,79509,79511,79513,79515,79517,79520,79522,79524,79527,79529,79532,79535],{"class":76,"line":1585},[74,79510,78034],{"class":84},[74,79512,62528],{"class":1925},[74,79514,85],{"class":84},[74,79516,670],{"class":190},[74,79518,79519],{"class":52258},"哈",[74,79521,670],{"class":190},[74,79523,644],{"class":84},[74,79525,79526],{"class":1925},"test",[74,79528,85],{"class":84},[74,79530,79531],{"class":190},"'哈'",[74,79533,79534],{"class":84},"))  ",[74,79536,79537],{"class":144},"\u002F\u002Ftrue\n",[74,79539,79540,79542,79544,79546,79548,79550,79552,79554,79556,79558,79561,79563],{"class":76,"line":1590},[74,79541,78034],{"class":84},[74,79543,62528],{"class":1925},[74,79545,85],{"class":84},[74,79547,670],{"class":190},[74,79549,79519],{"class":52258},[74,79551,670],{"class":190},[74,79553,644],{"class":84},[74,79555,79526],{"class":1925},[74,79557,85],{"class":84},[74,79559,79560],{"class":190},"'哈哈'",[74,79562,79534],{"class":84},[74,79564,79537],{"class":144},[74,79566,79567,79569,79571,79573,79575,79577,79579,79581,79583,79585,79588,79591],{"class":76,"line":1604},[74,79568,78034],{"class":84},[74,79570,62528],{"class":1925},[74,79572,85],{"class":84},[74,79574,670],{"class":190},[74,79576,79519],{"class":52258},[74,79578,670],{"class":190},[74,79580,644],{"class":84},[74,79582,79526],{"class":1925},[74,79584,85],{"class":84},[74,79586,79587],{"class":190},"'二哈'",[74,79589,79590],{"class":84},"))   ",[74,79592,79537],{"class":144},[74,79594,79595],{"class":76,"line":1609},[74,79596,2363],{"emptyLinePlaceholder":2362},[74,79598,79599],{"class":76,"line":1615},[74,79600,79601],{"class":144},"    \u002F\u002F 1.边界符\n",[74,79603,79604,79606,79608,79610,79612,79614,79616,79618,79620,79622,79624,79626,79628],{"class":76,"line":1636},[74,79605,78034],{"class":84},[74,79607,62528],{"class":1925},[74,79609,85],{"class":84},[74,79611,670],{"class":190},[74,79613,1052],{"class":80},[74,79615,79519],{"class":52258},[74,79617,670],{"class":190},[74,79619,644],{"class":84},[74,79621,79526],{"class":1925},[74,79623,85],{"class":84},[74,79625,79531],{"class":190},[74,79627,79534],{"class":84},[74,79629,79537],{"class":144},[74,79631,79632,79634,79636,79638,79640,79642,79644,79646,79648,79650,79652,79654,79656,79658],{"class":76,"line":1641},[74,79633,78034],{"class":84},[74,79635,62528],{"class":1925},[74,79637,85],{"class":84},[74,79639,670],{"class":190},[74,79641,1052],{"class":80},[74,79643,79519],{"class":52258},[74,79645,388],{"class":80},[74,79647,670],{"class":190},[74,79649,644],{"class":84},[74,79651,79526],{"class":1925},[74,79653,85],{"class":84},[74,79655,79560],{"class":190},[74,79657,79534],{"class":84},[74,79659,79660],{"class":144},"\u002F\u002Ffalse\n",[74,79662,79663],{"class":76,"line":1655},[74,79664,79665],{"class":144},"    \u002F\u002F 2.量词\n",[74,79667,79668],{"class":76,"line":1660},[74,79669,79670],{"class":144},"    \u002F\u002F 量词 * 类似于 >= 0\n",[74,79672,79673,79675,79677,79679,79681,79683,79685,79688,79690,79692,79694,79696,79698,79700],{"class":76,"line":1689},[74,79674,78034],{"class":84},[74,79676,62528],{"class":1925},[74,79678,85],{"class":84},[74,79680,670],{"class":190},[74,79682,1052],{"class":80},[74,79684,79519],{"class":52258},[74,79686,79687],{"class":80},"*$",[74,79689,670],{"class":190},[74,79691,644],{"class":84},[74,79693,79526],{"class":1925},[74,79695,85],{"class":84},[74,79697,79560],{"class":190},[74,79699,79534],{"class":84},[74,79701,79537],{"class":144},[74,79703,79704,79706,79708,79710,79712,79714,79716,79718,79720,79722,79724,79726,79729,79731],{"class":76,"line":1694},[74,79705,78034],{"class":84},[74,79707,62528],{"class":1925},[74,79709,85],{"class":84},[74,79711,670],{"class":190},[74,79713,1052],{"class":80},[74,79715,79519],{"class":52258},[74,79717,79687],{"class":80},[74,79719,670],{"class":190},[74,79721,644],{"class":84},[74,79723,79526],{"class":1925},[74,79725,85],{"class":84},[74,79727,79728],{"class":190},"'二哈好傻'",[74,79730,79534],{"class":84},[74,79732,79733],{"class":144},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[74,79735,79736,79738,79740,79742,79744,79746,79748,79750,79752,79754,79756,79758,79761,79763],{"class":76,"line":1711},[74,79737,78034],{"class":84},[74,79739,62528],{"class":1925},[74,79741,85],{"class":84},[74,79743,670],{"class":190},[74,79745,1052],{"class":80},[74,79747,79519],{"class":52258},[74,79749,79687],{"class":80},[74,79751,670],{"class":190},[74,79753,644],{"class":84},[74,79755,79526],{"class":1925},[74,79757,85],{"class":84},[74,79759,79760],{"class":190},"'哈好哈'",[74,79762,79590],{"class":84},[74,79764,79765],{"class":144},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[74,79767,79768],{"class":76,"line":1716},[74,79769,2363],{"emptyLinePlaceholder":2362},[74,79771,79772],{"class":76,"line":1721},[74,79773,79774],{"class":144},"    \u002F\u002F +类似于>=1\n",[74,79776,79777,79779,79781,79783,79785,79787,79789,79792,79794,79796,79798,79800,79802,79804],{"class":76,"line":1726},[74,79778,78034],{"class":84},[74,79780,62528],{"class":1925},[74,79782,85],{"class":84},[74,79784,670],{"class":190},[74,79786,1052],{"class":80},[74,79788,79519],{"class":52258},[74,79790,79791],{"class":80},"+$",[74,79793,670],{"class":190},[74,79795,644],{"class":84},[74,79797,79526],{"class":1925},[74,79799,85],{"class":84},[74,79801,79560],{"class":190},[74,79803,79534],{"class":84},[74,79805,79537],{"class":144},[74,79807,79808,79810,79812,79814,79816,79818,79820,79822,79824,79826,79828,79830,79832,79834],{"class":76,"line":1740},[74,79809,78034],{"class":84},[74,79811,62528],{"class":1925},[74,79813,85],{"class":84},[74,79815,670],{"class":190},[74,79817,1052],{"class":80},[74,79819,79519],{"class":52258},[74,79821,79791],{"class":80},[74,79823,670],{"class":190},[74,79825,644],{"class":84},[74,79827,79526],{"class":1925},[74,79829,85],{"class":84},[74,79831,79728],{"class":190},[74,79833,79534],{"class":84},[74,79835,79733],{"class":144},[74,79837,79838,79840,79842,79844,79846,79848,79850,79852,79854,79856,79858,79860,79862,79864],{"class":76,"line":1745},[74,79839,78034],{"class":84},[74,79841,62528],{"class":1925},[74,79843,85],{"class":84},[74,79845,670],{"class":190},[74,79847,1052],{"class":80},[74,79849,79519],{"class":52258},[74,79851,79791],{"class":80},[74,79853,670],{"class":190},[74,79855,644],{"class":84},[74,79857,79526],{"class":1925},[74,79859,85],{"class":84},[74,79861,79760],{"class":190},[74,79863,79590],{"class":84},[74,79865,79660],{"class":144},[74,79867,79868],{"class":76,"line":2540},[74,79869,2363],{"emptyLinePlaceholder":2362},[74,79871,79872],{"class":76,"line":2554},[74,79873,79874],{"class":144},"    \u002F\u002F ?类似于0次或一次\n",[74,79876,79877,79879,79881,79883,79885,79887,79890,79892,79894,79896,79898,79900,79902,79904],{"class":76,"line":2562},[74,79878,78034],{"class":84},[74,79880,62528],{"class":1925},[74,79882,85],{"class":84},[74,79884,670],{"class":190},[74,79886,1052],{"class":80},[74,79888,79889],{"class":52258},"哈？",[74,79891,388],{"class":80},[74,79893,670],{"class":190},[74,79895,644],{"class":84},[74,79897,79526],{"class":1925},[74,79899,85],{"class":84},[74,79901,78509],{"class":190},[74,79903,79590],{"class":84},[74,79905,79537],{"class":144},[74,79907,79908,79910,79912,79914,79916,79918,79920,79923,79925,79927,79929,79931,79933,79935],{"class":76,"line":2567},[74,79909,78034],{"class":84},[74,79911,62528],{"class":1925},[74,79913,85],{"class":84},[74,79915,670],{"class":190},[74,79917,1052],{"class":80},[74,79919,79519],{"class":52258},[74,79921,79922],{"class":80},"?$",[74,79924,670],{"class":190},[74,79926,644],{"class":84},[74,79928,79526],{"class":1925},[74,79930,85],{"class":84},[74,79932,79560],{"class":190},[74,79934,79534],{"class":84},[74,79936,79660],{"class":144},[74,79938,79939,79941,79943,79945,79947,79949,79951,79953,79955,79957,79959,79961,79963,79965],{"class":76,"line":2573},[74,79940,78034],{"class":84},[74,79942,62528],{"class":1925},[74,79944,85],{"class":84},[74,79946,670],{"class":190},[74,79948,1052],{"class":80},[74,79950,79519],{"class":52258},[74,79952,79922],{"class":80},[74,79954,670],{"class":190},[74,79956,644],{"class":84},[74,79958,79526],{"class":1925},[74,79960,85],{"class":84},[74,79962,79728],{"class":190},[74,79964,79534],{"class":84},[74,79966,79733],{"class":144},[74,79968,79969,79971,79973,79975,79977,79979,79981,79983,79985,79987,79989,79991,79993,79995],{"class":76,"line":2579},[74,79970,78034],{"class":84},[74,79972,62528],{"class":1925},[74,79974,85],{"class":84},[74,79976,670],{"class":190},[74,79978,1052],{"class":80},[74,79980,79519],{"class":52258},[74,79982,79922],{"class":80},[74,79984,670],{"class":190},[74,79986,644],{"class":84},[74,79988,79526],{"class":1925},[74,79990,85],{"class":84},[74,79992,79760],{"class":190},[74,79994,79534],{"class":84},[74,79996,79660],{"class":144},[74,79998,79999],{"class":76,"line":2584},[74,80000,2363],{"emptyLinePlaceholder":2362},[74,80002,80003],{"class":76,"line":12227},[74,80004,80005],{"class":144},"    \u002F\u002F {n}写几，就必须出现几次\n",[74,80007,80008,80010,80012,80014,80016,80018,80020,80023,80025,80027,80029,80031,80034,80037],{"class":76,"line":12251},[74,80009,78034],{"class":84},[74,80011,62528],{"class":1925},[74,80013,85],{"class":84},[74,80015,670],{"class":190},[74,80017,1052],{"class":80},[74,80019,79519],{"class":52258},[74,80021,80022],{"class":80},"{4}$",[74,80024,670],{"class":190},[74,80026,644],{"class":84},[74,80028,79526],{"class":1925},[74,80030,85],{"class":84},[74,80032,80033],{"class":190},"'哈哈哈哈'",[74,80035,80036],{"class":84},")) ",[74,80038,79537],{"class":144},[74,80040,80041],{"class":76,"line":12256},[74,80042,2363],{"emptyLinePlaceholder":2362},[74,80044,80045],{"class":76,"line":12262},[74,80046,80047],{"class":144},"    \u002F\u002F {n,}大于等于n次\n",[74,80049,80050,80052,80054,80056,80058,80060,80062,80065,80067,80069,80071,80073,80075,80077],{"class":76,"line":12289},[74,80051,78034],{"class":84},[74,80053,62528],{"class":1925},[74,80055,85],{"class":84},[74,80057,670],{"class":190},[74,80059,1052],{"class":80},[74,80061,79519],{"class":52258},[74,80063,80064],{"class":80},"{4,}$",[74,80066,670],{"class":190},[74,80068,644],{"class":84},[74,80070,79526],{"class":1925},[74,80072,85],{"class":84},[74,80074,80033],{"class":190},[74,80076,80036],{"class":84},[74,80078,79537],{"class":144},[74,80080,80081,80083,80085,80087,80089,80091,80093,80095,80097,80099,80101,80103,80106,80108],{"class":76,"line":12294},[74,80082,78034],{"class":84},[74,80084,62528],{"class":1925},[74,80086,85],{"class":84},[74,80088,670],{"class":190},[74,80090,1052],{"class":80},[74,80092,79519],{"class":52258},[74,80094,80064],{"class":80},[74,80096,670],{"class":190},[74,80098,644],{"class":84},[74,80100,79526],{"class":1925},[74,80102,85],{"class":84},[74,80104,80105],{"class":190},"'哈哈哈哈哈'",[74,80107,80036],{"class":84},[74,80109,79537],{"class":144},[74,80111,80112],{"class":76,"line":12300},[74,80113,2363],{"emptyLinePlaceholder":2362},[74,80115,80116],{"class":76,"line":12312},[74,80117,80118],{"class":144},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[74,80120,80121,80123,80125,80127,80129,80131,80133,80136,80138,80140,80142,80144,80146,80148],{"class":76,"line":12324},[74,80122,78034],{"class":84},[74,80124,62528],{"class":1925},[74,80126,85],{"class":84},[74,80128,670],{"class":190},[74,80130,1052],{"class":80},[74,80132,79519],{"class":52258},[74,80134,80135],{"class":80},"{4,6}$",[74,80137,670],{"class":190},[74,80139,644],{"class":84},[74,80141,79526],{"class":1925},[74,80143,85],{"class":84},[74,80145,80033],{"class":190},[74,80147,80036],{"class":84},[74,80149,79537],{"class":144},[74,80151,80152,80154,80156,80158,80160,80162,80164,80166,80168,80170,80172,80174,80176,80178],{"class":76,"line":12336},[74,80153,78034],{"class":84},[74,80155,62528],{"class":1925},[74,80157,85],{"class":84},[74,80159,670],{"class":190},[74,80161,1052],{"class":80},[74,80163,79519],{"class":52258},[74,80165,80135],{"class":80},[74,80167,670],{"class":190},[74,80169,644],{"class":84},[74,80171,79526],{"class":1925},[74,80173,85],{"class":84},[74,80175,80105],{"class":190},[74,80177,80036],{"class":84},[74,80179,79537],{"class":144},[74,80181,80182,80184,80186,80188,80190,80192,80194,80196,80198,80200,80202,80204,80207,80209],{"class":76,"line":13995},[74,80183,78034],{"class":84},[74,80185,62528],{"class":1925},[74,80187,85],{"class":84},[74,80189,670],{"class":190},[74,80191,1052],{"class":80},[74,80193,79519],{"class":52258},[74,80195,80135],{"class":80},[74,80197,670],{"class":190},[74,80199,644],{"class":84},[74,80201,79526],{"class":1925},[74,80203,85],{"class":84},[74,80205,80206],{"class":190},"'哈哈哈哈哈哈哈'",[74,80208,80036],{"class":84},[74,80210,79660],{"class":144},[74,80212,80213],{"class":76,"line":14020},[74,80214,2363],{"emptyLinePlaceholder":2362},[74,80216,80217],{"class":76,"line":14043},[74,80218,80219],{"class":144},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[74,80221,80222,80224,80226,80228,80230,80232,80235,80237,80239,80241,80243,80245,80248,80250],{"class":76,"line":14067},[74,80223,78034],{"class":84},[74,80225,62528],{"class":1925},[74,80227,85],{"class":84},[74,80229,670],{"class":190},[74,80231,1052],{"class":80},[74,80233,80234],{"class":134},"[abc]",[74,80236,388],{"class":80},[74,80238,670],{"class":190},[74,80240,644],{"class":84},[74,80242,79526],{"class":1925},[74,80244,85],{"class":84},[74,80246,80247],{"class":190},"'a'",[74,80249,79534],{"class":84},[74,80251,79537],{"class":144},[74,80253,80254,80256,80258,80260,80262,80264,80266,80268,80270,80272,80274,80276,80279,80281],{"class":76,"line":14072},[74,80255,78034],{"class":84},[74,80257,62528],{"class":1925},[74,80259,85],{"class":84},[74,80261,670],{"class":190},[74,80263,1052],{"class":80},[74,80265,80234],{"class":134},[74,80267,388],{"class":80},[74,80269,670],{"class":190},[74,80271,644],{"class":84},[74,80273,79526],{"class":1925},[74,80275,85],{"class":84},[74,80277,80278],{"class":190},"'b'",[74,80280,79534],{"class":84},[74,80282,79537],{"class":144},[74,80284,80285,80287,80289,80291,80293,80295,80297,80299,80301,80303,80305,80307,80310,80312],{"class":76,"line":14077},[74,80286,78034],{"class":84},[74,80288,62528],{"class":1925},[74,80290,85],{"class":84},[74,80292,670],{"class":190},[74,80294,1052],{"class":80},[74,80296,80234],{"class":134},[74,80298,388],{"class":80},[74,80300,670],{"class":190},[74,80302,644],{"class":84},[74,80304,79526],{"class":1925},[74,80306,85],{"class":84},[74,80308,80309],{"class":190},"'c'",[74,80311,79534],{"class":84},[74,80313,79537],{"class":144},[74,80315,80316,80318,80320,80322,80324,80326,80328,80330,80332,80334,80337,80339],{"class":76,"line":14082},[74,80317,78034],{"class":84},[74,80319,62528],{"class":1925},[74,80321,85],{"class":84},[74,80323,670],{"class":190},[74,80325,80234],{"class":134},[74,80327,670],{"class":190},[74,80329,644],{"class":84},[74,80331,79526],{"class":1925},[74,80333,85],{"class":84},[74,80335,80336],{"class":190},"'ab'",[74,80338,79534],{"class":84},[74,80340,79537],{"class":144},[74,80342,80343,80345,80347,80349,80351,80353,80355,80357,80359,80361,80363,80365,80367,80369],{"class":76,"line":14091},[74,80344,78034],{"class":84},[74,80346,62528],{"class":1925},[74,80348,85],{"class":84},[74,80350,670],{"class":190},[74,80352,1052],{"class":80},[74,80354,80234],{"class":134},[74,80356,388],{"class":80},[74,80358,670],{"class":190},[74,80360,644],{"class":84},[74,80362,79526],{"class":1925},[74,80364,85],{"class":84},[74,80366,80336],{"class":190},[74,80368,79534],{"class":84},[74,80370,80371],{"class":144},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[74,80373,80374,80376,80378,80380,80382,80384,80386,80389,80391,80393,80395,80397,80399,80401],{"class":76,"line":14096},[74,80375,78034],{"class":84},[74,80377,62528],{"class":1925},[74,80379,85],{"class":84},[74,80381,670],{"class":190},[74,80383,1052],{"class":80},[74,80385,80234],{"class":134},[74,80387,80388],{"class":80},"{2}$",[74,80390,670],{"class":190},[74,80392,644],{"class":84},[74,80394,79526],{"class":1925},[74,80396,85],{"class":84},[74,80398,80336],{"class":190},[74,80400,79534],{"class":84},[74,80402,80403],{"class":144},"\u002F\u002Ftrue   可以选两个\n",[74,80405,80406,80408,80410,80412,80414,80416,80419,80421,80423,80425,80427,80429,80432,80434],{"class":76,"line":14102},[74,80407,78034],{"class":84},[74,80409,62528],{"class":1925},[74,80411,85],{"class":84},[74,80413,670],{"class":190},[74,80415,1052],{"class":80},[74,80417,80418],{"class":134},"[a-z]",[74,80420,388],{"class":80},[74,80422,670],{"class":190},[74,80424,644],{"class":84},[74,80426,79526],{"class":1925},[74,80428,85],{"class":84},[74,80430,80431],{"class":190},"'p'",[74,80433,79590],{"class":84},[74,80435,80436],{"class":144},"\u002F\u002Ftrue   依然只能选一个\n",[74,80438,80439,80441,80443,80445,80447,80449,80452,80454,80456,80458,80460,80462,80464,80466],{"class":76,"line":14123},[74,80440,78034],{"class":84},[74,80442,62528],{"class":1925},[74,80444,85],{"class":84},[74,80446,670],{"class":190},[74,80448,1052],{"class":80},[74,80450,80451],{"class":134},"[A-Z]",[74,80453,388],{"class":80},[74,80455,670],{"class":190},[74,80457,644],{"class":84},[74,80459,79526],{"class":1925},[74,80461,85],{"class":84},[74,80463,80431],{"class":190},[74,80465,79590],{"class":84},[74,80467,79660],{"class":144},[74,80469,80470,80472,80474,80476,80478,80480,80482,80484,80486,80488,80490,80492,80495,80497],{"class":76,"line":14129},[74,80471,78034],{"class":84},[74,80473,62528],{"class":1925},[74,80475,85],{"class":84},[74,80477,670],{"class":190},[74,80479,1052],{"class":80},[74,80481,80451],{"class":134},[74,80483,388],{"class":80},[74,80485,670],{"class":190},[74,80487,644],{"class":84},[74,80489,79526],{"class":1925},[74,80491,85],{"class":84},[74,80493,80494],{"class":190},"'P'",[74,80496,79590],{"class":84},[74,80498,79537],{"class":144},[74,80500,80501,80503,80505,80507,80509,80511,80514,80516,80518,80520,80522,80524,80527,80529],{"class":76,"line":14143},[74,80502,78034],{"class":84},[74,80504,62528],{"class":1925},[74,80506,85],{"class":84},[74,80508,670],{"class":190},[74,80510,1052],{"class":80},[74,80512,80513],{"class":134},"[0-9]",[74,80515,388],{"class":80},[74,80517,670],{"class":190},[74,80519,644],{"class":84},[74,80521,79526],{"class":1925},[74,80523,85],{"class":84},[74,80525,80526],{"class":190},"'0'",[74,80528,79590],{"class":84},[74,80530,79537],{"class":144},[74,80532,80533,80535,80537,80539,80541,80543,80546,80548,80550,80552,80554,80556,80558,80560],{"class":76,"line":14149},[74,80534,78034],{"class":84},[74,80536,62528],{"class":1925},[74,80538,85],{"class":84},[74,80540,670],{"class":190},[74,80542,1052],{"class":80},[74,80544,80545],{"class":134},"[a-zA-Z0-9]",[74,80547,388],{"class":80},[74,80549,670],{"class":190},[74,80551,644],{"class":84},[74,80553,79526],{"class":1925},[74,80555,85],{"class":84},[74,80557,80431],{"class":190},[74,80559,79534],{"class":84},[74,80561,79537],{"class":144},[74,80563,80564,80566,80568],{"class":76,"line":14176},[74,80565,56698],{"class":84},[74,80567,56094],{"class":55581},[74,80569,55588],{"class":84},[74,80571,80572,80574,80576],{"class":76,"line":14185},[74,80573,56066],{"class":84},[74,80575,56081],{"class":55581},[74,80577,55588],{"class":84},[74,80579,80580],{"class":76,"line":14191},[74,80581,2363],{"emptyLinePlaceholder":2362},[74,80583,80584,80586,80588],{"class":76,"line":14199},[74,80585,56066],{"class":84},[74,80587,54916],{"class":55581},[74,80589,55588],{"class":84},[26277,80591,80593],{"id":80592},"_3624-修饰符","3.6.2.4 修饰符",[19,80595,80596],{},[1424,80597],{"alt":69,"src":80598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,80600,80601],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,80603,80604],{},[1424,80605],{"alt":69,"src":80606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[64,80608,80610],{"className":54914,"code":80609,"language":54916,"meta":69,"style":69},"\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",[71,80611,80612,80622,80636,80644,80658,80678,80690,80698,80706,80714,80746,80777,80782,80814,80825,80858,80867,80875,80883],{"__ignoreMap":69},[74,80613,80614,80616,80618,80620],{"class":76,"line":77},[74,80615,55578],{"class":84},[74,80617,55582],{"class":55581},[74,80619,55585],{"class":1925},[74,80621,55588],{"class":84},[74,80623,80624,80626,80628,80630,80632,80634],{"class":76,"line":94},[74,80625,996],{"class":84},[74,80627,54916],{"class":55581},[74,80629,55597],{"class":1925},[74,80631,131],{"class":84},[74,80633,55602],{"class":190},[74,80635,55588],{"class":84},[74,80637,80638,80640,80642],{"class":76,"line":1141},[74,80639,996],{"class":84},[74,80641,55615],{"class":55581},[74,80643,55588],{"class":84},[74,80645,80646,80648,80650,80652,80654,80656],{"class":76,"line":1156},[74,80647,56425],{"class":84},[74,80649,55625],{"class":55581},[74,80651,55628],{"class":1925},[74,80653,131],{"class":84},[74,80655,55633],{"class":190},[74,80657,55588],{"class":84},[74,80659,80660,80662,80664,80666,80668,80670,80672,80674,80676],{"class":76,"line":1162},[74,80661,56425],{"class":84},[74,80663,55625],{"class":55581},[74,80665,19199],{"class":1925},[74,80667,131],{"class":84},[74,80669,55672],{"class":190},[74,80671,55652],{"class":1925},[74,80673,131],{"class":84},[74,80675,55679],{"class":190},[74,80677,55588],{"class":84},[74,80679,80680,80682,80684,80686,80688],{"class":76,"line":1176},[74,80681,56425],{"class":84},[74,80683,55688],{"class":55581},[74,80685,55691],{"class":84},[74,80687,55688],{"class":55581},[74,80689,55588],{"class":84},[74,80691,80692,80694,80696],{"class":76,"line":1182},[74,80693,56066],{"class":84},[74,80695,55615],{"class":55581},[74,80697,55588],{"class":84},[74,80699,80700,80702,80704],{"class":76,"line":1273},[74,80701,996],{"class":84},[74,80703,56081],{"class":55581},[74,80705,55588],{"class":84},[74,80707,80708,80710,80712],{"class":76,"line":1279},[74,80709,56425],{"class":84},[74,80711,56094],{"class":55581},[74,80713,55588],{"class":84},[74,80715,80716,80718,80720,80722,80724,80726,80729,80731,80733,80735,80737,80739,80742,80744],{"class":76,"line":1291},[74,80717,78034],{"class":84},[74,80719,62528],{"class":1925},[74,80721,85],{"class":84},[74,80723,670],{"class":190},[74,80725,1052],{"class":80},[74,80727,80728],{"class":52258},"java",[74,80730,388],{"class":80},[74,80732,670],{"class":190},[74,80734,644],{"class":84},[74,80736,79526],{"class":1925},[74,80738,85],{"class":84},[74,80740,80741],{"class":190},"'java'",[74,80743,80036],{"class":84},[74,80745,79537],{"class":144},[74,80747,80748,80750,80752,80754,80756,80758,80760,80762,80764,80766,80768,80770,80773,80775],{"class":76,"line":1574},[74,80749,78034],{"class":84},[74,80751,62528],{"class":1925},[74,80753,85],{"class":84},[74,80755,670],{"class":190},[74,80757,1052],{"class":80},[74,80759,80728],{"class":52258},[74,80761,388],{"class":80},[74,80763,670],{"class":190},[74,80765,644],{"class":84},[74,80767,79526],{"class":1925},[74,80769,85],{"class":84},[74,80771,80772],{"class":190},"'Java'",[74,80774,80036],{"class":84},[74,80776,79660],{"class":144},[74,80778,80779],{"class":76,"line":1579},[74,80780,80781],{"class":144},"    \u002F\u002F 不区分大小写、\n",[74,80783,80784,80786,80788,80790,80792,80794,80796,80798,80800,80802,80804,80806,80808,80810,80812],{"class":76,"line":1585},[74,80785,78034],{"class":84},[74,80787,62528],{"class":1925},[74,80789,85],{"class":84},[74,80791,670],{"class":190},[74,80793,1052],{"class":80},[74,80795,80728],{"class":52258},[74,80797,388],{"class":80},[74,80799,670],{"class":190},[74,80801,527],{"class":80},[74,80803,644],{"class":84},[74,80805,79526],{"class":1925},[74,80807,85],{"class":84},[74,80809,80772],{"class":190},[74,80811,80036],{"class":84},[74,80813,79537],{"class":144},[74,80815,80816,80818,80820,80822],{"class":76,"line":1590},[74,80817,15500],{"class":80},[74,80819,78200],{"class":134},[74,80821,17843],{"class":80},[74,80823,80824],{"class":190}," 'java是一门编程语言，学完java工资很高'\n",[74,80826,80827,80829,80832,80834,80837,80840,80842,80844,80846,80848,80851,80853,80856],{"class":76,"line":1604},[74,80828,15500],{"class":80},[74,80830,80831],{"class":134}," result",[74,80833,17843],{"class":80},[74,80835,80836],{"class":84}," str.",[74,80838,80839],{"class":1925},"replace",[74,80841,85],{"class":84},[74,80843,670],{"class":190},[74,80845,80728],{"class":52258},[74,80847,670],{"class":190},[74,80849,80850],{"class":80},"ig",[74,80852,16714],{"class":84},[74,80854,80855],{"class":190},"'前端'",[74,80857,91],{"class":84},[74,80859,80860,80862,80864],{"class":76,"line":1609},[74,80861,78034],{"class":84},[74,80863,62528],{"class":1925},[74,80865,80866],{"class":84},"(result)\n",[74,80868,80869,80871,80873],{"class":76,"line":1615},[74,80870,56698],{"class":84},[74,80872,56094],{"class":55581},[74,80874,55588],{"class":84},[74,80876,80877,80879,80881],{"class":76,"line":1636},[74,80878,56066],{"class":84},[74,80880,56081],{"class":55581},[74,80882,55588],{"class":84},[74,80884,80885,80887,80889],{"class":76,"line":1641},[74,80886,56066],{"class":84},[74,80888,54916],{"class":55581},[74,80890,55588],{"class":84},[5090,80892,80893],{},"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":69,"searchDepth":94,"depth":94,"links":80895},[80896,80906,80918,80935,80942,80950],{"id":57641,"depth":94,"text":57642,"children":80897},[80898,80899,80900,80901,80902,80903,80904,80905],{"id":57645,"depth":1141,"text":57646},{"id":57678,"depth":1141,"text":57679},{"id":57717,"depth":1141,"text":57718},{"id":57875,"depth":1141,"text":57876},{"id":57923,"depth":1141,"text":57924},{"id":58060,"depth":1141,"text":58061},{"id":58382,"depth":1141,"text":58383},{"id":61370,"depth":1141,"text":61371},{"id":61398,"depth":94,"text":61399,"children":80907},[80908,80909,80910,80911,80912,80913,80914,80915,80916,80917],{"id":61402,"depth":1141,"text":61403},{"id":61425,"depth":1141,"text":61426},{"id":62340,"depth":1141,"text":62341},{"id":63030,"depth":1141,"text":63031},{"id":63312,"depth":1141,"text":63313},{"id":67473,"depth":1141,"text":67474},{"id":67643,"depth":1141,"text":67644},{"id":67771,"depth":1141,"text":67772},{"id":67796,"depth":1141,"text":67797},{"id":69185,"depth":1141,"text":69186},{"id":70338,"depth":94,"text":70339,"children":80919},[80920,80921,80922,80923,80924,80925,80926,80927,80928,80929,80930,80931,80932,80933,80934],{"id":70342,"depth":1141,"text":70343},{"id":70996,"depth":1141,"text":70997},{"id":72691,"depth":1141,"text":72692},{"id":72732,"depth":1141,"text":72733},{"id":72774,"depth":1141,"text":72775},{"id":72788,"depth":1141,"text":72789},{"id":72837,"depth":1141,"text":72838},{"id":72849,"depth":1141,"text":72850},{"id":72864,"depth":1141,"text":72865},{"id":72900,"depth":1141,"text":72901},{"id":72981,"depth":1141,"text":72982},{"id":73109,"depth":1141,"text":73110},{"id":73121,"depth":1141,"text":73122},{"id":73140,"depth":1141,"text":73141},{"id":75251,"depth":1141,"text":75252},{"id":75270,"depth":94,"text":75271,"children":80936},[80937,80938,80939,80940,80941],{"id":75291,"depth":1141,"text":75292},{"id":75311,"depth":1141,"text":75312},{"id":75360,"depth":1141,"text":75361},{"id":75485,"depth":1141,"text":75486},{"id":75666,"depth":1141,"text":75667},{"id":75684,"depth":94,"text":75685,"children":80943},[80944,80945,80946,80947,80948,80949],{"id":75699,"depth":1141,"text":75700},{"id":75758,"depth":1141,"text":75759},{"id":75782,"depth":1141,"text":75783},{"id":76102,"depth":1141,"text":76103},{"id":76134,"depth":1141,"text":76135},{"id":76157,"depth":1141,"text":76158},{"id":79225,"depth":94,"text":79226,"children":80951},[80952,80953],{"id":79259,"depth":1141,"text":79260},{"id":79298,"depth":1141,"text":79299},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":57613,"description":27656},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":80960,"title":80961,"body":80962,"description":27656,"extension":5121,"meta":97099,"navigation":2362,"path":97100,"seo":97101,"stem":97102,"__hash__":97103},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":80963,"toc":97035},[80964,80967,80970,80974,80978,80983,80988,80999,81003,81008,81011,81015,81018,81023,81027,81031,81034,81039,81042,81046,81049,81057,81060,81064,81069,81074,81077,81081,81086,81091,81094,81098,81103,81106,81111,81114,81119,81122,81127,81132,81135,81138,81142,81147,81152,81155,81159,81163,81166,81169,81172,81176,81180,81185,81190,81193,81197,81202,81207,81210,81213,81216,81219,81222,81225,81228,81231,81234,81239,81243,81248,81253,81256,81259,81262,81265,81268,81271,81274,81277,81281,81285,81288,81291,81294,81299,81301,81304,81307,81310,81313,81316,81319,81322,81325,81328,81331,81334,81337,81340,81345,81350,81355,81358,81362,81365,81370,81374,81376,81387,81392,81493,81496,81499,81502,81505,81508,81511,81514,81517,81519,81522,81525,81528,81531,81534,81536,81539,81542,81545,81548,81551,81554,81556,81559,81561,81563,81566,81570,81574,81577,81580,81583,81586,81589,81592,81595,81598,81601,81606,81726,81729,81732,81737,81740,81743,81746,81749,81754,81757,81760,81763,81766,81771,81774,81874,81939,82013,82017,82020,82023,82027,82030,82044,82073,82076,82079,82082,82085,82088,82091,82094,82096,82099,82102,82105,82108,82112,82117,82121,82126,82201,82204,82387,82390,82393,82396,82399,82402,82404,82407,82410,82413,82416,82419,82422,82424,82428,82431,82436,82439,82442,82445,82448,82450,82455,82458,82461,82464,82467,82469,82474,82477,82480,82482,82484,82487,82491,82494,82497,82502,82505,82508,82511,82561,82566,82570,82575,82578,82647,82650,82659,82663,82668,82671,82674,82682,82685,82702,84504,84508,84512,84517,84520,84524,84530,84536,84688,84693,84698,84701,84704,84707,84710,84713,84716,84719,84722,84725,84728,84731,84734,84739,84743,84746,84757,84761,84766,84769,84772,84775,84778,84781,84783,84786,84789,84792,84795,84797,84814,84817,84821,84824,84829,84834,84837,84840,84844,84847,84850,84859,84862,84866,84869,84874,84879,84946,84950,84953,84956,84961,84966,85052,85057,85061,85064,85067,85082,85085,85090,85094,85099,85208,85211,85222,85372,85376,85381,85490,85494,85499,85504,85509,85512,85519,85539,85575,85739,85744,85747,85752,85759,85762,85765,85768,85827,85883,85939,85943,85948,86263,86266,86270,86273,86278,86387,86392,86396,86401,86405,86476,86480,86482,86485,86488,86526,86802,86806,86823,86889,86923,86927,86930,86935,86964,86971,86980,86985,87000,87005,87014,87017,87154,87158,87220,87224,87229,87474,87478,87483,87486,87489,87492,87495,87499,87504,89085,89089,89093,89099,89102,89107,89111,89114,89119,89122,89133,89137,89142,89146,89151,89156,89159,89164,89168,89172,89175,89180,89185,89188,89191,89194,89316,89321,89423,89426,89429,89433,89438,89610,89615,89619,89622,89627,89693,89698,89701,89832,89835,89840,89843,89846,89937,89942,89945,89948,89951,89954,89959,89964,89967,89972,89977,89982,89986,89989,89992,89997,90002,90007,90012,90066,90069,90072,90077,90080,90083,90088,90093,90098,90102,90107,90121,90126,90129,90134,90138,90143,90148,90153,90158,90163,90168,90173,90178,90181,90185,90190,90193,90196,90199,90204,90209,90212,90215,90219,90222,90225,90230,90235,90240,90245,90248,90253,90258,90319,90324,90327,90332,91573,91578,91582,91586,91591,91594,91599,91604,91607,91612,91614,91619,91623,91626,91629,91640,91644,91649,91654,91709,91714,91719,91724,91935,91940,91944,91949,91952,91954,91957,91960,92407,92412,92419,92425,92428,92431,92695,92700,92704,92969,92974,92978,92983,92988,92993,92998,93329,93332,93337,93342,93345,93349,93353,93358,93363,93368,93373,93378,93383,93387,93390,93395,93400,93403,93477,93482,93487,93492,93494,93497,93867,93872,93877,93882,93885,93888,93990,93995,94000,94103,94107,94112,94116,94120,94125,94130,94133,94138,94141,94144,94537,94542,94545,94548,94551,94554,95074,95078,95083,95088,95093,95096,95101,95104,95107,95489,95494,95496,95498,95501,95504,96016,96020,96081,96084,96087,96090,96094,96097,96102,96107,97032],[10,80965,80961],{"id":80966},"_4js进阶",[19,80968,80969],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,80971,80973],{"id":80972},"_41-作用域","4.1 作用域",[44,80975,80977],{"id":80976},"_411-局部作用域","4.1.1 局部作用域",[19,80979,80980],{},[1424,80981],{"alt":69,"src":80982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,80984,80985],{},[1424,80986],{"alt":69,"src":80987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1093,80989,80990,80993,80996],{},[30,80991,80992],{},"函数作用域在函数内部",[30,80994,80995],{},"块级作用域在{}",[30,80997,80998],{},"对象的那个{}不是作用域，不是块作用域",[44,81000,81002],{"id":81001},"_412-全局作用域","4.1.2 全局作用域",[19,81004,81005],{},[1424,81006],{"alt":69,"src":81007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,81009,81010],{},"window.a=10不要这样写",[44,81012,81014],{"id":81013},"_413-作用域链","4.1.3 作用域链",[19,81016,81017],{},"变量查找机制",[19,81019,81020],{},[1424,81021],{"alt":69,"src":81022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,81024,81026],{"id":81025},"_42-垃圾回收机制","4.2 垃圾回收机制",[44,81028,81030],{"id":81029},"_421-大体介绍","4.2.1 大体介绍",[19,81032,81033],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,81035,81036],{},[1424,81037],{"alt":69,"src":81038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,81040,81041],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[44,81043,81045],{"id":81044},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,81047,81048],{},"堆栈空间分配区别：",[27,81050,81051,81054],{},[30,81052,81053],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[30,81055,81056],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,81058,81059],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[26277,81061,81063],{"id":81062},"_4221-引用计数","4.2.2.1 引用计数",[19,81065,81066],{},[1424,81067],{"alt":69,"src":81068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,81070,81071],{},[1424,81072],{"alt":69,"src":81073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,81075,81076],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[26277,81078,81080],{"id":81079},"_4222-标记清除法","4.2.2.2 标记清除法",[19,81082,81083],{},[1424,81084],{"alt":69,"src":81085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,81087,81088],{},[1424,81089],{"alt":69,"src":81090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,81092,81093],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,81095,81097],{"id":81096},"_43-闭包","4.3 闭包",[19,81099,81100],{},[1424,81101],{"alt":69,"src":81102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,81104,81105],{},"闭包：内层函数+外层函数的变量",[19,81107,81108],{},[1424,81109],{"alt":69,"src":81110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,81112,81113],{},"closure就是闭包",[19,81115,81116],{},[1424,81117],{"alt":69,"src":81118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,81120,81121],{},"内层函数必须包含外层函数的变量才是闭包",[19,81123,81124],{},[1424,81125],{"alt":69,"src":81126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,81128,81129],{},[1424,81130],{"alt":69,"src":81131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,81133,81134],{},"闭包可能会引起内存泄漏",[19,81136,81137],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,81139,81141],{"id":81140},"_44-变量提升","4.4 变量提升",[19,81143,81144],{},[1424,81145],{"alt":69,"src":81146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,81148,81149],{},[1424,81150],{"alt":69,"src":81151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,81153,81154],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,81156,81158],{"id":81157},"_45-函数进阶","4.5 函数进阶",[44,81160,81162],{"id":81161},"_451-函数提升","4.5.1 函数提升",[19,81164,81165],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,81167,81168],{},"只提升函数声明，不提升函数调用",[56094,81170,81171],{},"\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",[44,81173,81175],{"id":81174},"_452-函数参数","4.5.2 函数参数",[26277,81177,81179],{"id":81178},"_4521-动态参数","4.5.2.1 动态参数",[19,81181,81182],{},[1424,81183],{"alt":69,"src":81184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,81186,81187],{},[1424,81188],{"alt":69,"src":81189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,81191,81192],{},"箭头函数里边没有arguments",[26277,81194,81196],{"id":81195},"_4522-剩余参数","4.5.2.2 剩余参数",[19,81198,81199],{},[1424,81200],{"alt":69,"src":81201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,81203,81204],{},[1424,81205],{"alt":69,"src":81206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,81208,81209],{},"剩余参数使用的时候不需要写...",[19,81211,81212],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,81214,81215],{},"  function getSum(a,b,...arr) {",[19,81217,81218],{},"  console.log(11)",[19,81220,81221],{},"  }",[19,81223,81224],{},"  getSum(1,2,3,4)",[19,81226,81227],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,81229,81230],{},"  getSum(1,2)",[19,81232,81233],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,81235,81236],{},[1424,81237],{"alt":69,"src":81238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[26277,81240,81242],{"id":81241},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,81244,81245],{},[1424,81246],{"alt":69,"src":81247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,81249,81250],{},[1424,81251],{"alt":69,"src":81252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,81254,81255],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,81257,81258],{},"展开运算符可以用于数组之间的合并：",[19,81260,81261],{},"const arr1 = [1, 2, 3]",[19,81263,81264],{},"const arr2 = [3, 4, 5]",[19,81266,81267],{},"const arr = [...arr1, ...arr2]",[19,81269,81270],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,81272,81273],{},"剩余参数：函数参数使用，得到真数组",[19,81275,81276],{},"展开运算符：数组中使用，数组展开",[44,81278,81280],{"id":81279},"_453-箭头函数","4.5.3 箭头函数",[26277,81282,81284],{"id":81283},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,81286,81287],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,81289,81290],{},"它不是万能的！！！",[19,81292,81293],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,81295,81296],{},[1424,81297],{"alt":69,"src":81298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,81300,115],{},[19,81302,81303],{},"① 只有一个形参的时候，可以省略小括号：",[19,81305,81306],{},"const fn=x=>{console.log(x)}",[19,81308,81309],{},"② 只有一行代码时可以省略大括号：",[19,81311,81312],{},"const fn=x=>console.log(11)",[19,81314,81315],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,81317,81318],{},"const fn=x=>x+x",[19,81320,81321],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,81323,81324],{},"⑤ 阻止表单默认提交：",[19,81326,81327],{},"const form = document.querySelector('form')",[19,81329,81330],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,81332,81333],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,81335,81336],{},"const fn=uname=>({uname:uname})",[19,81338,81339],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,81341,81342],{},[1424,81343],{"alt":69,"src":81344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,81346,81347],{},[1424,81348],{"alt":69,"src":81349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,81351,81352],{},[1424,81353],{"alt":69,"src":81354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,81356,81357],{},"一定不要忘记用()，有()就理解为自带return",[26277,81359,81361],{"id":81360},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,81363,81364],{},"箭头函数是没有动态参数的arguments",[19,81366,81367],{},[1424,81368],{"alt":69,"src":81369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[26277,81371,81373],{"id":81372},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,81375,15611],{},[27,81377,81378,81381,81384],{},[30,81379,81380],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[30,81382,81383],{},"事件回调函数使用箭头函数时，this 为全局的 window",[30,81385,81386],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,81388,81389],{},[1424,81390],{"alt":69,"src":81391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[64,81393,81395],{"className":57348,"code":81394,"language":57350,"meta":69,"style":69},"  \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",[71,81396,81397,81405,81410,81415,81420,81425,81430,81434,81439,81443,81447,81452,81457,81462,81466,81470,81475,81480,81485],{"__ignoreMap":69},[74,81398,81399,81401,81403],{"class":76,"line":77},[74,81400,56425],{"class":84},[74,81402,56094],{"class":55581},[74,81404,55588],{"class":84},[74,81406,81407],{"class":76,"line":94},[74,81408,81409],{"class":84},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[74,81411,81412],{"class":76,"line":1141},[74,81413,81414],{"class":84},"    console.log(this) \u002F\u002F指向window\n",[74,81416,81417],{"class":76,"line":1156},[74,81418,81419],{"class":84},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[74,81421,81422],{"class":76,"line":1162},[74,81423,81424],{"class":84},"    function fn() {\n",[74,81426,81427],{"class":76,"line":1176},[74,81428,81429],{"class":84},"      console.log(this)  \u002F\u002F指向window\n",[74,81431,81432],{"class":76,"line":1182},[74,81433,2149],{"class":84},[74,81435,81436],{"class":76,"line":1273},[74,81437,81438],{"class":84},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[74,81440,81441],{"class":76,"line":1279},[74,81442,2363],{"emptyLinePlaceholder":2362},[74,81444,81445],{"class":76,"line":1291},[74,81446,75804],{"class":84},[74,81448,81449],{"class":76,"line":1574},[74,81450,81451],{"class":84},"      name: 'andy',\n",[74,81453,81454],{"class":76,"line":1579},[74,81455,81456],{"class":84},"      sayHai: function () {\n",[74,81458,81459],{"class":76,"line":1585},[74,81460,81461],{"class":84},"        console.log(this)\n",[74,81463,81464],{"class":76,"line":1590},[74,81465,56679],{"class":84},[74,81467,81468],{"class":76,"line":1604},[74,81469,2149],{"class":84},[74,81471,81472],{"class":76,"line":1609},[74,81473,81474],{"class":84},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[74,81476,81477],{"class":76,"line":1615},[74,81478,81479],{"class":84},"    \u002F\u002F 2.箭头函数的this\n",[74,81481,81482],{"class":76,"line":1636},[74,81483,81484],{"class":84},"    const fn = () => console.log(this)\n",[74,81486,81487,81489,81491],{"class":76,"line":1641},[74,81488,56698],{"class":84},[74,81490,56094],{"class":55581},[74,81492,55588],{"class":84},[19,81494,81495],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,81497,81498],{},"const fn = () => console.log(this)",[19,81500,81501],{},"fn() \u002F\u002F指向window",[19,81503,81504],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,81506,81507],{},"①",[19,81509,81510],{},"const obj = {",[19,81512,81513],{},"uname: 'pink老师',",[19,81515,81516],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,81518,1032],{},[19,81520,81521],{},"调用对象里边的函数",[19,81523,81524],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,81526,81527],{},"obj.sayHai()",[19,81529,81530],{},"②",[19,81532,81533],{},"const obj1 = {",[19,81535,81513],{},[19,81537,81538],{},"sayHai: function () {",[19,81540,81541],{},"let i = 10",[19,81543,81544],{},"const count = () => {",[19,81546,81547],{},"console.log(this)",[19,81549,81550],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,81552,81553],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,81555,1032],{},[19,81557,81558],{},"count()",[19,81560,1032],{},[19,81562,1032],{},[19,81564,81565],{},"obj1.sayHai()",[14,81567,81569],{"id":81568},"_46-解构赋值","4.6 解构赋值",[44,81571,81573],{"id":81572},"_461-数组解构","4.6.1 数组解构",[19,81575,81576],{},"以前要是使用数组中的值的话：",[19,81578,81579],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,81581,81582],{},"const arr=[100,60,80]",[19,81584,81585],{},"const max=arr[0]",[19,81587,81588],{},"const min=arr[1]",[19,81590,81591],{},"const avg=arr[2]",[19,81593,81594],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,81596,81597],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,81599,81600],{},"这个写法就类似于上边的那种用很多const的方法",[19,81602,81603],{},[1424,81604],{"alt":69,"src":81605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[64,81607,81609],{"className":54914,"code":81608,"language":54916,"meta":69,"style":69},"①变量之间交换值:\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",[71,81610,81611,81616,81621,81626,81631,81636,81640,81644,81649,81653,81658,81663,81667,81672,81677,81688,81698,81703,81708,81713,81717,81721],{"__ignoreMap":69},[74,81612,81613],{"class":76,"line":77},[74,81614,81615],{"class":84},"①变量之间交换值:\n",[74,81617,81618],{"class":76,"line":94},[74,81619,81620],{"class":84},"let a=1\n",[74,81622,81623],{"class":76,"line":1141},[74,81624,81625],{"class":84},"let b=2;\n",[74,81627,81628],{"class":76,"line":1156},[74,81629,81630],{"class":84},"必须加这行代码，不然就会报错\n",[74,81632,81633],{"class":76,"line":1162},[74,81634,81635],{"class":84},"[b,a]=[a,b]\n",[74,81637,81638],{"class":76,"line":1176},[74,81639,2363],{"emptyLinePlaceholder":2362},[74,81641,81642],{"class":76,"line":1182},[74,81643,2363],{"emptyLinePlaceholder":2362},[74,81645,81646],{"class":76,"line":1273},[74,81647,81648],{"class":84},"可以写成下面的方式：\n",[74,81650,81651],{"class":76,"line":1279},[74,81652,81620],{"class":84},[74,81654,81655],{"class":76,"line":1291},[74,81656,81657],{"class":84},"let b=2\n",[74,81659,81660],{"class":76,"line":1574},[74,81661,81662],{"class":84},";[b,a]=[a,b]\n",[74,81664,81665],{"class":76,"line":1579},[74,81666,2363],{"emptyLinePlaceholder":2362},[74,81668,81669],{"class":76,"line":1585},[74,81670,81671],{"class":84},"②排序\n",[74,81673,81674],{"class":76,"line":1590},[74,81675,81676],{"class":84},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[74,81678,81679,81682,81685],{"class":76,"line":1604},[74,81680,81681],{"class":84},"for (let i = 0; i ",[74,81683,996],{"class":81684},"s7hpK",[74,81686,81687],{"class":84}," arr1.length; i++) {\n",[74,81689,81690,81693,81695],{"class":76,"line":1609},[74,81691,81692],{"class":84},"   for (let j = 0; j ",[74,81694,996],{"class":81684},[74,81696,81697],{"class":84}," arr1.length - 1; j++) {\n",[74,81699,81700],{"class":76,"line":1615},[74,81701,81702],{"class":84},"      if (arr1[j] > arr1[j + 1]) {\n",[74,81704,81705],{"class":76,"line":1636},[74,81706,81707],{"class":84},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[74,81709,81710],{"class":76,"line":1641},[74,81711,81712],{"class":84},"       }\n",[74,81714,81715],{"class":76,"line":1655},[74,81716,4272],{"class":84},[74,81718,81719],{"class":76,"line":1660},[74,81720,1527],{"class":84},[74,81722,81723],{"class":76,"line":1689},[74,81724,81725],{"class":84},"console.log(arr1)\n",[19,81727,81728],{},"数组解构的细节：",[19,81730,81731],{},"①变量多，单元值少",[19,81733,81734],{},[1424,81735],{"alt":69,"src":81736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,81738,81739],{},"防止出现undefined的方法：",[19,81741,81742],{},"const [a=0,b=0] =[1]",[19,81744,81745],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,81747,81748],{},"②变量少，单元值多",[19,81750,81751],{},[1424,81752],{"alt":69,"src":81753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,81755,81756],{},"此时可以使用剩余参数来接收多余的值",[19,81758,81759],{},"const [a,b,...c]=[1,2,3,4]",[19,81761,81762],{},"console.log(c) 输出[3,4]",[19,81764,81765],{},"③可以按需导入，忽略某些返回值",[19,81767,81768],{},[1424,81769],{"alt":69,"src":81770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,81772,81773],{},"④支持多维数组的结构",[64,81775,81779],{"className":81776,"code":81777,"language":81778,"meta":69,"style":69},"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",[71,81780,81781,81809,81825,81840,81855],{"__ignoreMap":69},[74,81782,81783,81785,81787,81789,81791,81793,81795,81797,81800,81802,81804,81806],{"class":76,"line":77},[74,81784,11071],{"class":80},[74,81786,56114],{"class":84},[74,81788,131],{"class":80},[74,81790,56507],{"class":84},[74,81792,303],{"class":134},[74,81794,16714],{"class":84},[74,81796,163],{"class":134},[74,81798,81799],{"class":84},", [",[74,81801,157],{"class":134},[74,81803,16714],{"class":84},[74,81805,379],{"class":134},[74,81807,81808],{"class":84},"]]\n",[74,81810,81811,81814,81816,81818,81820,81822],{"class":76,"line":94},[74,81812,81813],{"class":84},"console.",[74,81815,62528],{"class":1925},[74,81817,3814],{"class":84},[74,81819,277],{"class":134},[74,81821,4179],{"class":84},[74,81823,81824],{"class":144},"  \u002F\u002F1\n",[74,81826,81827,81829,81831,81833,81835,81837],{"class":76,"line":1141},[74,81828,81813],{"class":84},[74,81830,62528],{"class":1925},[74,81832,3814],{"class":84},[74,81834,303],{"class":134},[74,81836,4179],{"class":84},[74,81838,81839],{"class":144},"  \u002F\u002F2\n",[74,81841,81842,81844,81846,81848,81850,81852],{"class":76,"line":1156},[74,81843,81813],{"class":84},[74,81845,62528],{"class":1925},[74,81847,3814],{"class":84},[74,81849,163],{"class":134},[74,81851,4179],{"class":84},[74,81853,81854],{"class":144},"  \u002F\u002F[3,4]\n",[74,81856,81857,81859,81861,81863,81865,81867,81869,81871],{"class":76,"line":1162},[74,81858,81813],{"class":84},[74,81860,62528],{"class":1925},[74,81862,3814],{"class":84},[74,81864,163],{"class":134},[74,81866,4864],{"class":84},[74,81868,277],{"class":134},[74,81870,4179],{"class":84},[74,81872,81873],{"class":144},"  \u002F\u002F3\n",[64,81875,81877],{"className":81776,"code":81876,"language":81778,"meta":69,"style":69},"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",[71,81878,81879,81906,81917,81928],{"__ignoreMap":69},[74,81880,81881,81883,81886,81888,81890,81892,81894,81896,81898,81900,81902,81904],{"class":76,"line":77},[74,81882,11071],{"class":80},[74,81884,81885],{"class":84}," [a, b, c] ",[74,81887,131],{"class":80},[74,81889,56507],{"class":84},[74,81891,303],{"class":134},[74,81893,16714],{"class":84},[74,81895,163],{"class":134},[74,81897,81799],{"class":84},[74,81899,157],{"class":134},[74,81901,16714],{"class":84},[74,81903,379],{"class":134},[74,81905,81808],{"class":84},[74,81907,81908,81910,81912,81915],{"class":76,"line":94},[74,81909,81813],{"class":84},[74,81911,62528],{"class":1925},[74,81913,81914],{"class":84},"(a)",[74,81916,81824],{"class":144},[74,81918,81919,81921,81923,81926],{"class":76,"line":1141},[74,81920,81813],{"class":84},[74,81922,62528],{"class":1925},[74,81924,81925],{"class":84},"(b)",[74,81927,81839],{"class":144},[74,81929,81930,81932,81934,81937],{"class":76,"line":1156},[74,81931,81813],{"class":84},[74,81933,62528],{"class":1925},[74,81935,81936],{"class":84},"(c)",[74,81938,81854],{"class":144},[64,81940,81942],{"className":81776,"code":81941,"language":81778,"meta":69,"style":69},"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",[71,81943,81944,81971,81981,81991,82001],{"__ignoreMap":69},[74,81945,81946,81948,81951,81953,81955,81957,81959,81961,81963,81965,81967,81969],{"class":76,"line":77},[74,81947,11071],{"class":80},[74,81949,81950],{"class":84}," [a, b, [c, d]] ",[74,81952,131],{"class":80},[74,81954,56507],{"class":84},[74,81956,303],{"class":134},[74,81958,16714],{"class":84},[74,81960,163],{"class":134},[74,81962,81799],{"class":84},[74,81964,157],{"class":134},[74,81966,16714],{"class":84},[74,81968,379],{"class":134},[74,81970,81808],{"class":84},[74,81972,81973,81975,81977,81979],{"class":76,"line":94},[74,81974,81813],{"class":84},[74,81976,62528],{"class":1925},[74,81978,81914],{"class":84},[74,81980,81824],{"class":144},[74,81982,81983,81985,81987,81989],{"class":76,"line":1141},[74,81984,81813],{"class":84},[74,81986,62528],{"class":1925},[74,81988,81925],{"class":84},[74,81990,81839],{"class":144},[74,81992,81993,81995,81997,81999],{"class":76,"line":1156},[74,81994,81813],{"class":84},[74,81996,62528],{"class":1925},[74,81998,81936],{"class":84},[74,82000,81873],{"class":144},[74,82002,82003,82005,82007,82010],{"class":76,"line":1162},[74,82004,81813],{"class":84},[74,82006,62528],{"class":1925},[74,82008,82009],{"class":84},"(d)",[74,82011,82012],{"class":144},"  \u002F\u002F4\n",[44,82014,82016],{"id":82015},"_462-对象解构","4.6.2 对象解构",[19,82018,82019],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,82021,82022],{},"用的非常非常多！！！！！！",[26277,82024,82026],{"id":82025},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,82028,82029],{},"基本语法：",[27,82031,82032,82035,82038,82041],{},[30,82033,82034],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[30,82036,82037],{},"对象属性的值将被赋值给与属性名相同的变量",[30,82039,82040],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[30,82042,82043],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[64,82045,82047],{"className":54914,"code":82046,"language":54916,"meta":69,"style":69},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[71,82048,82049,82054,82059,82064,82068],{"__ignoreMap":69},[74,82050,82051],{"class":76,"line":77},[74,82052,82053],{"class":84},"const obj = {\n",[74,82055,82056],{"class":76,"line":94},[74,82057,82058],{"class":84},"   uname: 'pink老师',\n",[74,82060,82061],{"class":76,"line":1141},[74,82062,82063],{"class":84},"   age: 18,\n",[74,82065,82066],{"class":76,"line":1156},[74,82067,1527],{"class":84},[74,82069,82070],{"class":76,"line":1162},[74,82071,82072],{"class":84},"const { uname, age } = obj\n",[19,82074,82075],{},"上方代码这样写等价于：",[19,82077,82078],{},"const uname等价于obj.uname",[19,82080,82081],{},"变量名可以重新改名：",[19,82083,82084],{},"const uname='red老师'",[19,82086,82087],{},"const user={",[19,82089,82090],{},"  uname:'pink老师',",[19,82092,82093],{},"  age:18",[19,82095,1032],{},[19,82097,82098],{},"const {uname,age}=user",[19,82100,82101],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,82103,82104],{},"const {旧变量名：新变量名}=对象",[19,82106,82107],{},"const {uname:username,age}=user",[26277,82109,82111],{"id":82110},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,82113,82114],{},[1424,82115],{"alt":69,"src":82116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[26277,82118,82120],{"id":82119},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,82122,82123],{},[1424,82124],{"alt":69,"src":82125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[64,82127,82129],{"className":57348,"code":82128,"language":57350,"meta":69,"style":69},"  \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",[71,82130,82131,82139,82144,82149,82154,82159,82164,82169,82174,82179,82183,82188,82193],{"__ignoreMap":69},[74,82132,82133,82135,82137],{"class":76,"line":77},[74,82134,56425],{"class":84},[74,82136,56094],{"class":55581},[74,82138,55588],{"class":84},[74,82140,82141],{"class":76,"line":94},[74,82142,82143],{"class":84},"    const pig = {\n",[74,82145,82146],{"class":76,"line":1141},[74,82147,82148],{"class":84},"      name: '佩奇',\n",[74,82150,82151],{"class":76,"line":1156},[74,82152,82153],{"class":84},"      family: {\n",[74,82155,82156],{"class":76,"line":1162},[74,82157,82158],{"class":84},"        mother: '猪妈妈',\n",[74,82160,82161],{"class":76,"line":1176},[74,82162,82163],{"class":84},"        father: '猪爸爸',\n",[74,82165,82166],{"class":76,"line":1182},[74,82167,82168],{"class":84},"        sister: '乔治'\n",[74,82170,82171],{"class":76,"line":1273},[74,82172,82173],{"class":84},"      },\n",[74,82175,82176],{"class":76,"line":1279},[74,82177,82178],{"class":84},"      age: 6\n",[74,82180,82181],{"class":76,"line":1291},[74,82182,2149],{"class":84},[74,82184,82185],{"class":76,"line":1574},[74,82186,82187],{"class":84},"    \u002F\u002F 多级对象解构\n",[74,82189,82190],{"class":76,"line":1579},[74,82191,82192],{"class":84},"    const { name, family: { mother, father, sister }, age } = pig\n",[74,82194,82195,82197,82199],{"class":76,"line":1585},[74,82196,56698],{"class":84},[74,82198,56094],{"class":55581},[74,82200,55588],{"class":84},[19,82202,82203],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[64,82205,82208],{"className":82206,"code":82207,"language":80728,"meta":69,"style":69},"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",[71,82209,82210,82215,82226,82238,82250,82259,82263,82274,82286,82296,82301,82305,82315,82326,82335,82339,82343,82354,82365,82374,82378,82383],{"__ignoreMap":69},[74,82211,82212],{"class":76,"line":77},[74,82213,82214],{"class":144},"    \u002F\u002F 这是后台传递过来的数据\n",[74,82216,82217,82219,82222,82224],{"class":76,"line":94},[74,82218,15500],{"class":80},[74,82220,82221],{"class":84}," msg ",[74,82223,131],{"class":80},[74,82225,19851],{"class":84},[74,82227,82228,82231,82233,82236],{"class":76,"line":1141},[74,82229,82230],{"class":190},"      \"code\"",[74,82232,945],{"class":80},[74,82234,82235],{"class":134}," 200",[74,82237,35747],{"class":84},[74,82239,82240,82243,82245,82248],{"class":76,"line":1156},[74,82241,82242],{"class":190},"      \"msg\"",[74,82244,945],{"class":80},[74,82246,82247],{"class":190}," \"获取新闻列表成功\"",[74,82249,35747],{"class":84},[74,82251,82252,82255,82257],{"class":76,"line":1162},[74,82253,82254],{"class":190},"      \"data\"",[74,82256,945],{"class":80},[74,82258,59728],{"class":84},[74,82260,82261],{"class":76,"line":1176},[74,82262,2473],{"class":84},[74,82264,82265,82268,82270,82272],{"class":76,"line":1182},[74,82266,82267],{"class":190},"          \"id\"",[74,82269,945],{"class":80},[74,82271,29399],{"class":134},[74,82273,35747],{"class":84},[74,82275,82276,82279,82281,82284],{"class":76,"line":1273},[74,82277,82278],{"class":190},"          \"title\"",[74,82280,945],{"class":80},[74,82282,82283],{"class":190}," \"5G商用自己，三大运用商收入下降\"",[74,82285,35747],{"class":84},[74,82287,82288,82291,82293],{"class":76,"line":1279},[74,82289,82290],{"class":190},"          \"count\"",[74,82292,945],{"class":80},[74,82294,82295],{"class":134}," 58\n",[74,82297,82298],{"class":76,"line":1291},[74,82299,82300],{"class":84},"        },\n",[74,82302,82303],{"class":76,"line":1574},[74,82304,2473],{"class":84},[74,82306,82307,82309,82311,82313],{"class":76,"line":1579},[74,82308,82267],{"class":190},[74,82310,945],{"class":80},[74,82312,19034],{"class":134},[74,82314,35747],{"class":84},[74,82316,82317,82319,82321,82324],{"class":76,"line":1585},[74,82318,82278],{"class":190},[74,82320,945],{"class":80},[74,82322,82323],{"class":190}," \"国际媒体头条速览\"",[74,82325,35747],{"class":84},[74,82327,82328,82330,82332],{"class":76,"line":1590},[74,82329,82290],{"class":190},[74,82331,945],{"class":80},[74,82333,82334],{"class":134}," 56\n",[74,82336,82337],{"class":76,"line":1604},[74,82338,82300],{"class":84},[74,82340,82341],{"class":76,"line":1609},[74,82342,2473],{"class":84},[74,82344,82345,82347,82349,82352],{"class":76,"line":1615},[74,82346,82267],{"class":190},[74,82348,945],{"class":80},[74,82350,82351],{"class":134}," 3",[74,82353,35747],{"class":84},[74,82355,82356,82358,82360,82363],{"class":76,"line":1636},[74,82357,82278],{"class":190},[74,82359,945],{"class":80},[74,82361,82362],{"class":190}," \"乌克兰和俄罗斯持续冲突\"",[74,82364,35747],{"class":84},[74,82366,82367,82369,82371],{"class":76,"line":1641},[74,82368,82290],{"class":190},[74,82370,945],{"class":80},[74,82372,82373],{"class":134}," 1669\n",[74,82375,82376],{"class":76,"line":1655},[74,82377,82300],{"class":84},[74,82379,82380],{"class":76,"line":1660},[74,82381,82382],{"class":84},"      ]\n",[74,82384,82385],{"class":76,"line":1689},[74,82386,2149],{"class":84},[19,82388,82389],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,82391,82392],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,82394,82395],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,82397,82398],{},"function({data}) {",[19,82400,82401],{},"console.log(data)",[19,82403,1032],{},[19,82405,82406],{},"render(msg)",[19,82408,82409],{},"实参传递给形参的时候解构了",[19,82411,82412],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,82414,82415],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,82417,82418],{},"function render({data:mydata}) {",[19,82420,82421],{},"  console.log(data)",[19,82423,1032],{},[44,82425,82427],{"id":82426},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,82429,82430],{},"有两种情况：一个是数组结构，一个是立即执行函数",[27,82432,82433],{},[30,82434,82435],{},"如果对一个数组进行遍历，有两种方式：",[19,82437,82438],{},"①法1",[19,82440,82441],{},"const arr=[1,2,3]",[19,82443,82444],{},"arr.map(function(item,index) {",[19,82446,82447],{},"  console.log(item)",[19,82449,56745],{},[19,82451,82452],{},[1424,82453],{"alt":69,"src":82454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,82456,82457],{},"②法2",[19,82459,82460],{},"const str='pink'",[19,82462,82463],{},"[1,2,3].map(function(item,index) {",[19,82465,82466],{},"console.log(item)",[19,82468,56745],{},[19,82470,82471],{},[1424,82472],{"alt":69,"src":82473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,82475,82476],{},"此时会报错",[19,82478,82479],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,82481,82466],{},[19,82483,56745],{},[19,82485,82486],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,82488,82490],{"id":82489},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,82492,82493],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,82495,82496],{},"可以理解为加强版的for循环",[19,82498,82499],{},[1424,82500],{"alt":69,"src":82501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,82503,82504],{},"里边不写return，不返回数组，只遍历不返回",[19,82506,82507],{},"map是返回数组",[19,82509,82510],{},"forEach主要用于遍历数组对象",[64,82512,82514],{"className":57348,"code":82513,"language":57350,"meta":69,"style":69},"  \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",[71,82515,82516,82524,82529,82534,82539,82544,82548,82553],{"__ignoreMap":69},[74,82517,82518,82520,82522],{"class":76,"line":77},[74,82519,56425],{"class":84},[74,82521,56094],{"class":55581},[74,82523,55588],{"class":84},[74,82525,82526],{"class":76,"line":94},[74,82527,82528],{"class":84},"    const arr = ['red', 'green', 'pink']\n",[74,82530,82531],{"class":76,"line":1141},[74,82532,82533],{"class":84},"    const result = arr.forEach(function (item, index) {\n",[74,82535,82536],{"class":76,"line":1156},[74,82537,82538],{"class":84},"      console.log(item)\n",[74,82540,82541],{"class":76,"line":1162},[74,82542,82543],{"class":84},"      console.log(index)\n",[74,82545,82546],{"class":76,"line":1176},[74,82547,37742],{"class":84},[74,82549,82550],{"class":76,"line":1182},[74,82551,82552],{"class":84},"    console.log(result)\n",[74,82554,82555,82557,82559],{"class":76,"line":1273},[74,82556,56698],{"class":84},[74,82558,56094],{"class":55581},[74,82560,55588],{"class":84},[19,82562,82563],{},[1424,82564],{"alt":69,"src":82565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,82567,82569],{"id":82568},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,82571,82572],{},[1424,82573],{"alt":69,"src":82574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,82576,82577],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[64,82579,82581],{"className":57348,"code":82580,"language":57350,"meta":69,"style":69},"\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",[71,82582,82583,82591,82599,82604,82609,82613,82617,82622,82626,82631,82639],{"__ignoreMap":69},[74,82584,82585,82587,82589],{"class":76,"line":77},[74,82586,996],{"class":84},[74,82588,56081],{"class":55581},[74,82590,55588],{"class":84},[74,82592,82593,82595,82597],{"class":76,"line":94},[74,82594,56425],{"class":84},[74,82596,56094],{"class":55581},[74,82598,55588],{"class":84},[74,82600,82601],{"class":76,"line":1141},[74,82602,82603],{"class":84},"    const arr = [10, 20, 30]\n",[74,82605,82606],{"class":76,"line":1156},[74,82607,82608],{"class":84},"    const newArr = arr.filter(function (item, index) {\n",[74,82610,82611],{"class":76,"line":1162},[74,82612,82538],{"class":84},[74,82614,82615],{"class":76,"line":1176},[74,82616,82543],{"class":84},[74,82618,82619],{"class":76,"line":1182},[74,82620,82621],{"class":84},"      return item >= 20\n",[74,82623,82624],{"class":76,"line":1273},[74,82625,37742],{"class":84},[74,82627,82628],{"class":76,"line":1279},[74,82629,82630],{"class":84},"    console.log(newArr)\n",[74,82632,82633,82635,82637],{"class":76,"line":1291},[74,82634,56698],{"class":84},[74,82636,56094],{"class":55581},[74,82638,55588],{"class":84},[74,82640,82641,82643,82645],{"class":76,"line":1574},[74,82642,56066],{"class":84},[74,82644,56081],{"class":55581},[74,82646,55588],{"class":84},[19,82648,82649],{},"这个也可以写成箭头函数：",[64,82651,82653],{"className":54914,"code":82652,"language":54916,"meta":69,"style":69},"const newArr = arr.filter(item => item >= 20)\n",[71,82654,82655],{"__ignoreMap":69},[74,82656,82657],{"class":76,"line":77},[74,82658,82652],{"class":84},[14,82660,82662],{"id":82661},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,82664,82665],{},[1424,82666],{"alt":69,"src":82667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,82669,82670],{},"步骤：",[19,82672,82673],{},"①：渲染页面模块",[1093,82675,82676,82679],{},[30,82677,82678],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[30,82680,82681],{},"用forEach+字符串的形式",[19,82683,82684],{},"②：点击不同需求，显示不同页面内容",[1093,82686,82687,82690,82693,82696,82699],{},[30,82688,82689],{},"点击采取事件委托方式 .filter",[30,82691,82692],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[30,82694,82695],{},"筛选条件是根据点击的 data-index 来判断",[30,82697,82698],{},"可以使用对象解构，把事件对象解构",[30,82700,82701],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[64,82703,82705],{"className":54914,"code":82704,"language":54916,"meta":69,"style":69},"\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",[71,82706,82707,82717,82731,82735,82743,82757,82777,82789,82797,82803,82813,82823,82833,82837,82841,82847,82860,82872,82882,82894,82898,82902,82909,82922,82934,82951,82969,82982,82986,82990,83002,83012,83016,83020,83027,83068,83095,83105,83109,83113,83121,83133,83137,83141,83149,83161,83173,83184,83188,83192,83201,83213,83224,83228,83232,83241,83253,83265,83269,83273,83280,83290,83302,83314,83329,83333,83337,83345,83361,83371,83381,83391,83403,83407,83411,83421,83432,83442,83446,83454,83462,83466,83474,83489,83515,83540,83565,83584,83592,83606,83611,83616,83621,83626,83631,83639,83647,83652,83663,83668,83678,83688,83698,83708,83712,83716,83725,83734,83743,83752,83756,83760,83769,83778,83787,83796,83800,83804,83813,83822,83831,83840,83844,83848,83857,83866,83875,83884,83888,83892,83901,83910,83919,83928,83932,83936,83945,83954,83963,83972,83976,83980,83989,83998,84006,84015,84019,84023,84027,84032,84044,84049,84061,84065,84082,84110,84119,84124,84134,84144,84153,84158,84163,84167,84172,84189,84193,84198,84206,84211,84238,84243,84263,84268,84280,84285,84290,84295,84306,84320,84357,84375,84408,84425,84449,84453,84458,84464,84468,84472,84476,84484,84492,84496],{"__ignoreMap":69},[74,82708,82709,82711,82713,82715],{"class":76,"line":77},[74,82710,55578],{"class":84},[74,82712,55582],{"class":55581},[74,82714,55585],{"class":1925},[74,82716,55588],{"class":84},[74,82718,82719,82721,82723,82725,82727,82729],{"class":76,"line":94},[74,82720,996],{"class":84},[74,82722,54916],{"class":55581},[74,82724,55597],{"class":1925},[74,82726,131],{"class":84},[74,82728,55602],{"class":190},[74,82730,55588],{"class":84},[74,82732,82733],{"class":76,"line":1141},[74,82734,2363],{"emptyLinePlaceholder":2362},[74,82736,82737,82739,82741],{"class":76,"line":1156},[74,82738,996],{"class":84},[74,82740,55615],{"class":55581},[74,82742,55588],{"class":84},[74,82744,82745,82747,82749,82751,82753,82755],{"class":76,"line":1162},[74,82746,56425],{"class":84},[74,82748,55625],{"class":55581},[74,82750,55628],{"class":1925},[74,82752,131],{"class":84},[74,82754,55633],{"class":190},[74,82756,55588],{"class":84},[74,82758,82759,82761,82763,82765,82767,82769,82771,82773,82775],{"class":76,"line":1176},[74,82760,56425],{"class":84},[74,82762,55625],{"class":55581},[74,82764,19199],{"class":1925},[74,82766,131],{"class":84},[74,82768,55672],{"class":190},[74,82770,55652],{"class":1925},[74,82772,131],{"class":84},[74,82774,55679],{"class":190},[74,82776,55588],{"class":84},[74,82778,82779,82781,82783,82785,82787],{"class":76,"line":1182},[74,82780,56425],{"class":84},[74,82782,55688],{"class":55581},[74,82784,55691],{"class":84},[74,82786,55688],{"class":55581},[74,82788,55588],{"class":84},[74,82790,82791,82793,82795],{"class":76,"line":1273},[74,82792,56425],{"class":84},[74,82794,5090],{"class":55581},[74,82796,55588],{"class":84},[74,82798,82799,82801],{"class":76,"line":1279},[74,82800,10682],{"class":55581},[74,82802,19851],{"class":84},[74,82804,82805,82807,82809,82811],{"class":76,"line":1291},[74,82806,58976],{"class":134},[74,82808,55718],{"class":84},[74,82810,277],{"class":134},[74,82812,1252],{"class":84},[74,82814,82815,82817,82819,82821],{"class":76,"line":1574},[74,82816,58987],{"class":134},[74,82818,55718],{"class":84},[74,82820,277],{"class":134},[74,82822,1252],{"class":84},[74,82824,82825,82827,82829,82831],{"class":76,"line":1579},[74,82826,76877],{"class":134},[74,82828,55718],{"class":84},[74,82830,64786],{"class":134},[74,82832,1252],{"class":84},[74,82834,82835],{"class":76,"line":1585},[74,82836,2149],{"class":84},[74,82838,82839],{"class":76,"line":1590},[74,82840,2363],{"emptyLinePlaceholder":2362},[74,82842,82843,82845],{"class":76,"line":1604},[74,82844,66404],{"class":1925},[74,82846,19851],{"class":84},[74,82848,82849,82851,82853,82856,82858],{"class":76,"line":1609},[74,82850,59052],{"class":134},[74,82852,55718],{"class":84},[74,82854,82855],{"class":134},"990",[74,82857,55773],{"class":80},[74,82859,1252],{"class":84},[74,82861,82862,82864,82866,82868,82870],{"class":76,"line":1615},[74,82863,58987],{"class":134},[74,82865,55718],{"class":84},[74,82867,277],{"class":134},[74,82869,55837],{"class":134},[74,82871,1252],{"class":84},[74,82873,82874,82876,82878,82880],{"class":76,"line":1636},[74,82875,59290],{"class":134},[74,82877,55718],{"class":84},[74,82879,55758],{"class":134},[74,82881,1252],{"class":84},[74,82883,82884,82887,82889,82892],{"class":76,"line":1641},[74,82885,82886],{"class":134},"      flex-wrap",[74,82888,55718],{"class":84},[74,82890,82891],{"class":134},"wrap",[74,82893,1252],{"class":84},[74,82895,82896],{"class":76,"line":1655},[74,82897,2149],{"class":84},[74,82899,82900],{"class":76,"line":1660},[74,82901,2363],{"emptyLinePlaceholder":2362},[74,82903,82904,82907],{"class":76,"line":1689},[74,82905,82906],{"class":1925},"    .item",[74,82908,19851],{"class":84},[74,82910,82911,82913,82915,82918,82920],{"class":76,"line":1694},[74,82912,59052],{"class":134},[74,82914,55718],{"class":84},[74,82916,82917],{"class":134},"240",[74,82919,55773],{"class":80},[74,82921,1252],{"class":84},[74,82923,82924,82926,82928,82930,82932],{"class":76,"line":1711},[74,82925,66281],{"class":134},[74,82927,55718],{"class":84},[74,82929,532],{"class":134},[74,82931,55773],{"class":80},[74,82933,1252],{"class":84},[74,82935,82936,82938,82940,82942,82944,82947,82949],{"class":76,"line":1716},[74,82937,58976],{"class":134},[74,82939,55718],{"class":84},[74,82941,786],{"class":134},[74,82943,55773],{"class":80},[74,82945,82946],{"class":134}," 30",[74,82948,55773],{"class":80},[74,82950,1252],{"class":84},[74,82952,82953,82955,82957,82959,82962,82965,82967],{"class":76,"line":1721},[74,82954,66141],{"class":134},[74,82956,55718],{"class":84},[74,82958,32402],{"class":134},[74,82960,82961],{"class":134}," ease",[74,82963,82964],{"class":134}," .5",[74,82966,781],{"class":80},[74,82968,1252],{"class":84},[74,82970,82971,82974,82976,82978,82980],{"class":76,"line":1726},[74,82972,82973],{"class":134},"      margin-bottom",[74,82975,55718],{"class":84},[74,82977,786],{"class":134},[74,82979,55773],{"class":80},[74,82981,1252],{"class":84},[74,82983,82984],{"class":76,"line":1740},[74,82985,2149],{"class":84},[74,82987,82988],{"class":76,"line":1745},[74,82989,2363],{"emptyLinePlaceholder":2362},[74,82991,82992,82995,82997,83000],{"class":76,"line":2540},[74,82993,82994],{"class":1925},"    .item:nth-child",[74,82996,85],{"class":84},[74,82998,82999],{"class":134},"4n",[74,83001,16721],{"class":84},[74,83003,83004,83006,83008,83010],{"class":76,"line":2554},[74,83005,66281],{"class":134},[74,83007,55718],{"class":84},[74,83009,277],{"class":134},[74,83011,1252],{"class":84},[74,83013,83014],{"class":76,"line":2562},[74,83015,2149],{"class":84},[74,83017,83018],{"class":76,"line":2567},[74,83019,2363],{"emptyLinePlaceholder":2362},[74,83021,83022,83025],{"class":76,"line":2573},[74,83023,83024],{"class":1925},"    .item:hover",[74,83026,19851],{"class":84},[74,83028,83029,83032,83034,83036,83038,83040,83042,83044,83046,83049,83051,83053,83055,83057,83059,83061,83063,83066],{"class":76,"line":2579},[74,83030,83031],{"class":134},"      box-shadow",[74,83033,55718],{"class":84},[74,83035,277],{"class":134},[74,83037,55773],{"class":80},[74,83039,4056],{"class":134},[74,83041,55773],{"class":80},[74,83043,2110],{"class":134},[74,83045,55773],{"class":80},[74,83047,83048],{"class":134}," rgba",[74,83050,85],{"class":84},[74,83052,277],{"class":134},[74,83054,16714],{"class":84},[74,83056,277],{"class":134},[74,83058,16714],{"class":84},[74,83060,277],{"class":134},[74,83062,16714],{"class":84},[74,83064,83065],{"class":134},".2",[74,83067,2682],{"class":84},[74,83069,83070,83073,83075,83078,83080,83082,83084,83087,83089,83091,83093],{"class":76,"line":2584},[74,83071,83072],{"class":134},"      transform",[74,83074,55718],{"class":84},[74,83076,83077],{"class":134},"translate3d",[74,83079,85],{"class":84},[74,83081,277],{"class":134},[74,83083,16714],{"class":84},[74,83085,83086],{"class":134},"-4",[74,83088,55773],{"class":80},[74,83090,16714],{"class":84},[74,83092,277],{"class":134},[74,83094,2682],{"class":84},[74,83096,83097,83099,83101,83103],{"class":76,"line":12227},[74,83098,66306],{"class":134},[74,83100,55718],{"class":84},[74,83102,66311],{"class":134},[74,83104,1252],{"class":84},[74,83106,83107],{"class":76,"line":12251},[74,83108,2149],{"class":84},[74,83110,83111],{"class":76,"line":12256},[74,83112,2363],{"emptyLinePlaceholder":2362},[74,83114,83115,83117,83119],{"class":76,"line":12262},[74,83116,82906],{"class":1925},[74,83118,59896],{"class":55581},[74,83120,19851],{"class":84},[74,83122,83123,83125,83127,83129,83131],{"class":76,"line":12289},[74,83124,59052],{"class":134},[74,83126,55718],{"class":84},[74,83128,397],{"class":134},[74,83130,414],{"class":80},[74,83132,1252],{"class":84},[74,83134,83135],{"class":76,"line":12294},[74,83136,2149],{"class":84},[74,83138,83139],{"class":76,"line":12300},[74,83140,2363],{"emptyLinePlaceholder":2362},[74,83142,83143,83145,83147],{"class":76,"line":12312},[74,83144,82906],{"class":1925},[74,83146,66585],{"class":1925},[74,83148,19851],{"class":84},[74,83150,83151,83153,83155,83157,83159],{"class":76,"line":12324},[74,83152,59203],{"class":134},[74,83154,55718],{"class":84},[74,83156,736],{"class":134},[74,83158,55773],{"class":80},[74,83160,1252],{"class":84},[74,83162,83163,83165,83167,83169,83171],{"class":76,"line":12336},[74,83164,82973],{"class":134},[74,83166,55718],{"class":84},[74,83168,532],{"class":134},[74,83170,55773],{"class":80},[74,83172,1252],{"class":84},[74,83174,83175,83177,83179,83182],{"class":76,"line":13995},[74,83176,61697],{"class":134},[74,83178,55718],{"class":84},[74,83180,83181],{"class":134},"#666",[74,83183,1252],{"class":84},[74,83185,83186],{"class":76,"line":14020},[74,83187,2149],{"class":84},[74,83189,83190],{"class":76,"line":14043},[74,83191,2363],{"emptyLinePlaceholder":2362},[74,83193,83194,83196,83199],{"class":76,"line":14067},[74,83195,82906],{"class":1925},[74,83197,83198],{"class":1925}," .price",[74,83200,19851],{"class":84},[74,83202,83203,83205,83207,83209,83211],{"class":76,"line":14072},[74,83204,59203],{"class":134},[74,83206,55718],{"class":84},[74,83208,836],{"class":134},[74,83210,55773],{"class":80},[74,83212,1252],{"class":84},[74,83214,83215,83217,83219,83222],{"class":76,"line":14077},[74,83216,61697],{"class":134},[74,83218,55718],{"class":84},[74,83220,83221],{"class":134},"firebrick",[74,83223,1252],{"class":84},[74,83225,83226],{"class":76,"line":14082},[74,83227,2149],{"class":84},[74,83229,83230],{"class":76,"line":14091},[74,83231,2363],{"emptyLinePlaceholder":2362},[74,83233,83234,83236,83239],{"class":76,"line":14096},[74,83235,82906],{"class":1925},[74,83237,83238],{"class":1925}," .price::before",[74,83240,19851],{"class":84},[74,83242,83243,83246,83248,83251],{"class":76,"line":14102},[74,83244,83245],{"class":134},"      content",[74,83247,55718],{"class":84},[74,83249,83250],{"class":190},"'￥'",[74,83252,1252],{"class":84},[74,83254,83255,83257,83259,83261,83263],{"class":76,"line":14123},[74,83256,59203],{"class":134},[74,83258,55718],{"class":84},[74,83260,635],{"class":134},[74,83262,55773],{"class":80},[74,83264,1252],{"class":84},[74,83266,83267],{"class":76,"line":14129},[74,83268,2149],{"class":84},[74,83270,83271],{"class":76,"line":14143},[74,83272,2363],{"emptyLinePlaceholder":2362},[74,83274,83275,83278],{"class":76,"line":14149},[74,83276,83277],{"class":1925},"    .filter",[74,83279,19851],{"class":84},[74,83281,83282,83284,83286,83288],{"class":76,"line":14176},[74,83283,59290],{"class":134},[74,83285,55718],{"class":84},[74,83287,55758],{"class":134},[74,83289,1252],{"class":84},[74,83291,83292,83294,83296,83298,83300],{"class":76,"line":14185},[74,83293,59052],{"class":134},[74,83295,55718],{"class":84},[74,83297,82855],{"class":134},[74,83299,55773],{"class":80},[74,83301,1252],{"class":84},[74,83303,83304,83306,83308,83310,83312],{"class":76,"line":14191},[74,83305,58987],{"class":134},[74,83307,55718],{"class":84},[74,83309,277],{"class":134},[74,83311,55837],{"class":134},[74,83313,1252],{"class":84},[74,83315,83316,83318,83320,83322,83324,83326],{"class":76,"line":14199},[74,83317,58976],{"class":134},[74,83319,55718],{"class":84},[74,83321,742],{"class":134},[74,83323,55773],{"class":80},[74,83325,82946],{"class":134},[74,83327,83328],{"class":80},"px\n",[74,83330,83331],{"class":76,"line":14204},[74,83332,2149],{"class":84},[74,83334,83335],{"class":76,"line":20883},[74,83336,2363],{"emptyLinePlaceholder":2362},[74,83338,83339,83341,83343],{"class":76,"line":20889},[74,83340,83277],{"class":1925},[74,83342,1360],{"class":55581},[74,83344,19851],{"class":84},[74,83346,83347,83349,83351,83353,83355,83357,83359],{"class":76,"line":20912},[74,83348,58976],{"class":134},[74,83350,55718],{"class":84},[74,83352,532],{"class":134},[74,83354,55773],{"class":80},[74,83356,13229],{"class":134},[74,83358,55773],{"class":80},[74,83360,1252],{"class":84},[74,83362,83363,83365,83367,83369],{"class":76,"line":20918},[74,83364,66002],{"class":134},[74,83366,55718],{"class":84},[74,83368,66099],{"class":134},[74,83370,1252],{"class":84},[74,83372,83373,83375,83377,83379],{"class":76,"line":20941},[74,83374,61697],{"class":134},[74,83376,55718],{"class":84},[74,83378,83181],{"class":134},[74,83380,1252],{"class":84},[74,83382,83383,83385,83387,83389],{"class":76,"line":20955},[74,83384,68251],{"class":134},[74,83386,55718],{"class":84},[74,83388,59018],{"class":134},[74,83390,1252],{"class":84},[74,83392,83393,83395,83397,83399,83401],{"class":76,"line":20975},[74,83394,66031],{"class":134},[74,83396,55718],{"class":84},[74,83398,786],{"class":134},[74,83400,55773],{"class":80},[74,83402,1252],{"class":84},[74,83404,83405],{"class":76,"line":20981},[74,83406,2149],{"class":84},[74,83408,83409],{"class":76,"line":20992},[74,83410,2363],{"emptyLinePlaceholder":2362},[74,83412,83413,83415,83417,83419],{"class":76,"line":21015},[74,83414,83277],{"class":1925},[74,83416,1360],{"class":55581},[74,83418,66181],{"class":1925},[74,83420,19851],{"class":84},[74,83422,83423,83425,83427,83430],{"class":76,"line":21037},[74,83424,59165],{"class":134},[74,83426,55718],{"class":84},[74,83428,83429],{"class":134},"#05943c",[74,83431,1252],{"class":84},[74,83433,83434,83436,83438,83440],{"class":76,"line":21042},[74,83435,61697],{"class":134},[74,83437,55718],{"class":84},[74,83439,65123],{"class":134},[74,83441,1252],{"class":84},[74,83443,83444],{"class":76,"line":21048},[74,83445,2149],{"class":84},[74,83447,83448,83450,83452],{"class":76,"line":21062},[74,83449,56698],{"class":84},[74,83451,5090],{"class":55581},[74,83453,55588],{"class":84},[74,83455,83456,83458,83460],{"class":76,"line":21075},[74,83457,56066],{"class":84},[74,83459,55615],{"class":55581},[74,83461,55588],{"class":84},[74,83463,83464],{"class":76,"line":21080},[74,83465,2363],{"emptyLinePlaceholder":2362},[74,83467,83468,83470,83472],{"class":76,"line":21094},[74,83469,996],{"class":84},[74,83471,56081],{"class":55581},[74,83473,55588],{"class":84},[74,83475,83476,83478,83480,83482,83484,83487],{"class":76,"line":21099},[74,83477,56425],{"class":84},[74,83479,55892],{"class":55581},[74,83481,57767],{"class":1925},[74,83483,131],{"class":84},[74,83485,83486],{"class":190},"\"filter\"",[74,83488,55588],{"class":84},[74,83490,83491,83493,83495,83497,83499,83501,83504,83506,83508,83511,83513],{"class":76,"line":21105},[74,83492,55622],{"class":84},[74,83494,324],{"class":55581},[74,83496,65338],{"class":1925},[74,83498,131],{"class":84},[74,83500,65343],{"class":190},[74,83502,83503],{"class":1925}," data-index",[74,83505,131],{"class":84},[74,83507,3641],{"class":190},[74,83509,83510],{"class":84},">0-100元\u003C\u002F",[74,83512,324],{"class":55581},[74,83514,55588],{"class":84},[74,83516,83517,83519,83521,83523,83525,83527,83529,83531,83533,83536,83538],{"class":76,"line":21110},[74,83518,55622],{"class":84},[74,83520,324],{"class":55581},[74,83522,65338],{"class":1925},[74,83524,131],{"class":84},[74,83526,65343],{"class":190},[74,83528,83503],{"class":1925},[74,83530,131],{"class":84},[74,83532,3664],{"class":190},[74,83534,83535],{"class":84},">100-300元\u003C\u002F",[74,83537,324],{"class":55581},[74,83539,55588],{"class":84},[74,83541,83542,83544,83546,83548,83550,83552,83554,83556,83558,83561,83563],{"class":76,"line":21124},[74,83543,55622],{"class":84},[74,83545,324],{"class":55581},[74,83547,65338],{"class":1925},[74,83549,131],{"class":84},[74,83551,65343],{"class":190},[74,83553,83503],{"class":1925},[74,83555,131],{"class":84},[74,83557,3677],{"class":190},[74,83559,83560],{"class":84},">300元以上\u003C\u002F",[74,83562,324],{"class":55581},[74,83564,55588],{"class":84},[74,83566,83567,83569,83571,83573,83575,83577,83580,83582],{"class":76,"line":21129},[74,83568,55622],{"class":84},[74,83570,324],{"class":55581},[74,83572,65338],{"class":1925},[74,83574,131],{"class":84},[74,83576,65343],{"class":190},[74,83578,83579],{"class":84},">全部区间\u003C\u002F",[74,83581,324],{"class":55581},[74,83583,55588],{"class":84},[74,83585,83586,83588,83590],{"class":76,"line":21134},[74,83587,56698],{"class":84},[74,83589,55892],{"class":55581},[74,83591,55588],{"class":84},[74,83593,83594,83596,83598,83600,83602,83604],{"class":76,"line":21148},[74,83595,56425],{"class":84},[74,83597,55892],{"class":55581},[74,83599,57767],{"class":1925},[74,83601,131],{"class":84},[74,83603,66889],{"class":190},[74,83605,55588],{"class":84},[74,83607,83608],{"class":76,"line":21160},[74,83609,83610],{"class":144},"    \u003C!-- \u003Cdiv class=\"item\">\n",[74,83612,83613],{"class":76,"line":21165},[74,83614,83615],{"class":144},"      \u003Cimg src=\"\" alt=\"\">\n",[74,83617,83618],{"class":76,"line":21178},[74,83619,83620],{"class":144},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[74,83622,83623],{"class":76,"line":21183},[74,83624,83625],{"class":144},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[74,83627,83628],{"class":76,"line":21188},[74,83629,83630],{"class":144},"    \u003C\u002Fdiv> -->\n",[74,83632,83633,83635,83637],{"class":76,"line":21193},[74,83634,56698],{"class":84},[74,83636,55892],{"class":55581},[74,83638,55588],{"class":84},[74,83640,83641,83643,83645],{"class":76,"line":21206},[74,83642,56425],{"class":84},[74,83644,56094],{"class":55581},[74,83646,55588],{"class":84},[74,83648,83649],{"class":76,"line":21211},[74,83650,83651],{"class":144},"    \u002F\u002F 2. 初始化数据\n",[74,83653,83654,83656,83659,83661],{"class":76,"line":36914},[74,83655,15500],{"class":80},[74,83657,83658],{"class":134}," goodsList",[74,83660,17843],{"class":80},[74,83662,59728],{"class":84},[74,83664,83665],{"class":76,"line":36920},[74,83666,83667],{"class":84},"      {\n",[74,83669,83670,83673,83676],{"class":76,"line":36926},[74,83671,83672],{"class":84},"        id: ",[74,83674,83675],{"class":190},"'4001172'",[74,83677,35747],{"class":84},[74,83679,83680,83683,83686],{"class":76,"line":36932},[74,83681,83682],{"class":84},"        name: ",[74,83684,83685],{"class":190},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[74,83687,35747],{"class":84},[74,83689,83690,83693,83696],{"class":76,"line":36938},[74,83691,83692],{"class":84},"        price: ",[74,83694,83695],{"class":190},"'289.00'",[74,83697,35747],{"class":84},[74,83699,83700,83703,83706],{"class":76,"line":36949},[74,83701,83702],{"class":84},"        picture: ",[74,83704,83705],{"class":190},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[74,83707,35747],{"class":84},[74,83709,83710],{"class":76,"line":36955},[74,83711,82173],{"class":84},[74,83713,83714],{"class":76,"line":36975},[74,83715,83667],{"class":84},[74,83717,83718,83720,83723],{"class":76,"line":36981},[74,83719,83672],{"class":84},[74,83721,83722],{"class":190},"'4001594'",[74,83724,35747],{"class":84},[74,83726,83727,83729,83732],{"class":76,"line":36992},[74,83728,83682],{"class":84},[74,83730,83731],{"class":190},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[74,83733,35747],{"class":84},[74,83735,83736,83738,83741],{"class":76,"line":36998},[74,83737,83692],{"class":84},[74,83739,83740],{"class":190},"'288.00'",[74,83742,35747],{"class":84},[74,83744,83745,83747,83750],{"class":76,"line":37004},[74,83746,83702],{"class":84},[74,83748,83749],{"class":190},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[74,83751,35747],{"class":84},[74,83753,83754],{"class":76,"line":37010},[74,83755,82173],{"class":84},[74,83757,83758],{"class":76,"line":37016},[74,83759,83667],{"class":84},[74,83761,83762,83764,83767],{"class":76,"line":37022},[74,83763,83672],{"class":84},[74,83765,83766],{"class":190},"'4001009'",[74,83768,35747],{"class":84},[74,83770,83771,83773,83776],{"class":76,"line":37028},[74,83772,83682],{"class":84},[74,83774,83775],{"class":190},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[74,83777,35747],{"class":84},[74,83779,83780,83782,83785],{"class":76,"line":37034},[74,83781,83692],{"class":84},[74,83783,83784],{"class":190},"'109.00'",[74,83786,35747],{"class":84},[74,83788,83789,83791,83794],{"class":76,"line":37054},[74,83790,83702],{"class":84},[74,83792,83793],{"class":190},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[74,83795,35747],{"class":84},[74,83797,83798],{"class":76,"line":37060},[74,83799,82173],{"class":84},[74,83801,83802],{"class":76,"line":37076},[74,83803,83667],{"class":84},[74,83805,83806,83808,83811],{"class":76,"line":37082},[74,83807,83672],{"class":84},[74,83809,83810],{"class":190},"'4001874'",[74,83812,35747],{"class":84},[74,83814,83815,83817,83820],{"class":76,"line":37096},[74,83816,83682],{"class":84},[74,83818,83819],{"class":190},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[74,83821,35747],{"class":84},[74,83823,83824,83826,83829],{"class":76,"line":37102},[74,83825,83692],{"class":84},[74,83827,83828],{"class":190},"'488.00'",[74,83830,35747],{"class":84},[74,83832,83833,83835,83838],{"class":76,"line":37117},[74,83834,83702],{"class":84},[74,83836,83837],{"class":190},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[74,83839,35747],{"class":84},[74,83841,83842],{"class":76,"line":37123},[74,83843,82173],{"class":84},[74,83845,83846],{"class":76,"line":37132},[74,83847,83667],{"class":84},[74,83849,83850,83852,83855],{"class":76,"line":37138},[74,83851,83672],{"class":84},[74,83853,83854],{"class":190},"'4001649'",[74,83856,35747],{"class":84},[74,83858,83859,83861,83864],{"class":76,"line":37147},[74,83860,83682],{"class":84},[74,83862,83863],{"class":190},"'大师监制龙泉青瓷茶叶罐'",[74,83865,35747],{"class":84},[74,83867,83868,83870,83873],{"class":76,"line":37153},[74,83869,83692],{"class":84},[74,83871,83872],{"class":190},"'139.00'",[74,83874,35747],{"class":84},[74,83876,83877,83879,83882],{"class":76,"line":37159},[74,83878,83702],{"class":84},[74,83880,83881],{"class":190},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[74,83883,35747],{"class":84},[74,83885,83886],{"class":76,"line":37168},[74,83887,82173],{"class":84},[74,83889,83890],{"class":76,"line":37174},[74,83891,83667],{"class":84},[74,83893,83894,83896,83899],{"class":76,"line":37185},[74,83895,83672],{"class":84},[74,83897,83898],{"class":190},"'3997185'",[74,83900,35747],{"class":84},[74,83902,83903,83905,83908],{"class":76,"line":37191},[74,83904,83682],{"class":84},[74,83906,83907],{"class":190},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[74,83909,35747],{"class":84},[74,83911,83912,83914,83917],{"class":76,"line":37210},[74,83913,83692],{"class":84},[74,83915,83916],{"class":190},"'108.00'",[74,83918,35747],{"class":84},[74,83920,83921,83923,83926],{"class":76,"line":37216},[74,83922,83702],{"class":84},[74,83924,83925],{"class":190},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[74,83927,35747],{"class":84},[74,83929,83930],{"class":76,"line":37227},[74,83931,82173],{"class":84},[74,83933,83934],{"class":76,"line":37233},[74,83935,83667],{"class":84},[74,83937,83938,83940,83943],{"class":76,"line":37253},[74,83939,83672],{"class":84},[74,83941,83942],{"class":190},"'3997403'",[74,83944,35747],{"class":84},[74,83946,83947,83949,83952],{"class":76,"line":37269},[74,83948,83682],{"class":84},[74,83950,83951],{"class":190},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[74,83953,35747],{"class":84},[74,83955,83956,83958,83961],{"class":76,"line":37275},[74,83957,83692],{"class":84},[74,83959,83960],{"class":190},"'100.00'",[74,83962,35747],{"class":84},[74,83964,83965,83967,83970],{"class":76,"line":37289},[74,83966,83702],{"class":84},[74,83968,83969],{"class":190},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[74,83971,35747],{"class":84},[74,83973,83974],{"class":76,"line":37295},[74,83975,82173],{"class":84},[74,83977,83978],{"class":76,"line":37301},[74,83979,83667],{"class":84},[74,83981,83982,83984,83987],{"class":76,"line":37312},[74,83983,83672],{"class":84},[74,83985,83986],{"class":190},"'3998274'",[74,83988,35747],{"class":84},[74,83990,83991,83993,83996],{"class":76,"line":37318},[74,83992,83682],{"class":84},[74,83994,83995],{"class":190},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[74,83997,35747],{"class":84},[74,83999,84000,84002,84004],{"class":76,"line":37324},[74,84001,83692],{"class":84},[74,84003,83872],{"class":190},[74,84005,35747],{"class":84},[74,84007,84008,84010,84013],{"class":76,"line":37334},[74,84009,83702],{"class":84},[74,84011,84012],{"class":190},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[74,84014,35747],{"class":84},[74,84016,84017],{"class":76,"line":37340},[74,84018,82173],{"class":84},[74,84020,84021],{"class":76,"line":37351},[74,84022,57390],{"class":84},[74,84024,84025],{"class":76,"line":37357},[74,84026,2363],{"emptyLinePlaceholder":2362},[74,84028,84029],{"class":76,"line":37367},[74,84030,84031],{"class":144},"    \u002F\u002F 1.渲染函数\n",[74,84033,84034,84036,84038,84040,84042],{"class":76,"line":37372},[74,84035,74365],{"class":80},[74,84037,74368],{"class":1925},[74,84039,85],{"class":84},[74,84041,3843],{"class":9495},[74,84043,16721],{"class":84},[74,84045,84046],{"class":76,"line":37378},[74,84047,84048],{"class":144},"      \u002F\u002F 声明空字符串\n",[74,84050,84051,84054,84057,84059],{"class":76,"line":37427},[74,84052,84053],{"class":80},"      let",[74,84055,84056],{"class":84}," str ",[74,84058,131],{"class":80},[74,84060,74385],{"class":190},[74,84062,84063],{"class":76,"line":37474},[74,84064,74390],{"class":144},[74,84066,84067,84069,84072,84074,84077,84080],{"class":76,"line":37479},[74,84068,62288],{"class":84},[74,84070,84071],{"class":1925},"forEach",[74,84073,85],{"class":84},[74,84075,84076],{"class":9495},"item",[74,84078,84079],{"class":80}," =>",[74,84081,19851],{"class":84},[74,84083,84084,84086,84089,84092,84094,84097,84099,84102,84105,84107],{"class":76,"line":37485},[74,84085,65551],{"class":80},[74,84087,84088],{"class":84}," { ",[74,84090,84091],{"class":134},"name",[74,84093,16714],{"class":84},[74,84095,84096],{"class":134},"price",[74,84098,16714],{"class":84},[74,84100,84101],{"class":134},"picture",[74,84103,84104],{"class":84}," } ",[74,84106,131],{"class":80},[74,84108,84109],{"class":84}," item\n",[74,84111,84112,84115,84117],{"class":76,"line":37504},[74,84113,84114],{"class":84},"        str ",[74,84116,13756],{"class":80},[74,84118,74449],{"class":190},[74,84120,84121],{"class":76,"line":37510},[74,84122,84123],{"class":190},"          \u003Cdiv class=\"item\">\n",[74,84125,84126,84129,84131],{"class":76,"line":37530},[74,84127,84128],{"class":190},"            \u003Cimg src=\"${",[74,84130,84101],{"class":84},[74,84132,84133],{"class":190},"}\" alt=\"\">\n",[74,84135,84136,84139,84141],{"class":76,"line":37536},[74,84137,84138],{"class":190},"            \u003Cp class=\"name\">${",[74,84140,84091],{"class":84},[74,84142,84143],{"class":190},"}\u003C\u002Fp>\n",[74,84145,84146,84149,84151],{"class":76,"line":37542},[74,84147,84148],{"class":190},"            \u003Cp class=\"price\">${",[74,84150,84096],{"class":84},[74,84152,84143],{"class":190},[74,84154,84155],{"class":76,"line":37552},[74,84156,84157],{"class":190},"          \u003C\u002Fdiv>\n",[74,84159,84160],{"class":76,"line":37557},[74,84161,84162],{"class":190},"        `\n",[74,84164,84165],{"class":76,"line":37563},[74,84166,69096],{"class":84},[74,84168,84169],{"class":76,"line":37579},[74,84170,84171],{"class":144},"      \u002F\u002F 追加给List\n",[74,84173,84174,84176,84178,84180,84183,84185,84187],{"class":76,"line":37624},[74,84175,60052],{"class":84},[74,84177,58680],{"class":1925},[74,84179,85],{"class":84},[74,84181,84182],{"class":190},"'.list'",[74,84184,78530],{"class":84},[74,84186,131],{"class":80},[74,84188,78266],{"class":84},[74,84190,84191],{"class":76,"line":37630},[74,84192,2149],{"class":84},[74,84194,84195],{"class":76,"line":37636},[74,84196,84197],{"class":144},"    \u002F\u002F 页面一打开就需要渲染\n",[74,84199,84200,84203],{"class":76,"line":37642},[74,84201,84202],{"class":1925},"    render",[74,84204,84205],{"class":84},"(goodsList)\n",[74,84207,84208],{"class":76,"line":37653},[74,84209,84210],{"class":144},"    \u002F\u002F 2.过滤筛选\n",[74,84212,84213,84215,84217,84219,84222,84224,84226,84228,84230,84232,84234,84236],{"class":76,"line":37659},[74,84214,56688],{"class":84},[74,84216,58680],{"class":1925},[74,84218,85],{"class":84},[74,84220,84221],{"class":190},"'.filter'",[74,84223,35107],{"class":84},[74,84225,62094],{"class":1925},[74,84227,85],{"class":84},[74,84229,62099],{"class":190},[74,84231,16714],{"class":84},[74,84233,160],{"class":9495},[74,84235,84079],{"class":80},[74,84237,19851],{"class":84},[74,84239,84240],{"class":76,"line":37665},[74,84241,84242],{"class":144},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[74,84244,84245,84247,84249,84252,84254,84256,84258,84260],{"class":76,"line":37671},[74,84246,62509],{"class":80},[74,84248,84088],{"class":84},[74,84250,84251],{"class":134},"tagName",[74,84253,16714],{"class":84},[74,84255,35818],{"class":134},[74,84257,84104],{"class":84},[74,84259,131],{"class":80},[74,84261,84262],{"class":84}," e.target\n",[74,84264,84265],{"class":76,"line":37689},[74,84266,84267],{"class":144},"      \u002F\u002F 判断\n",[74,84269,84270,84272,84274,84276,84278],{"class":76,"line":37703},[74,84271,58761],{"class":80},[74,84273,71315],{"class":84},[74,84275,58767],{"class":80},[74,84277,72537],{"class":190},[74,84279,16721],{"class":84},[74,84281,84282],{"class":76,"line":37712},[74,84283,84284],{"class":144},"        \u002F\u002F console.log(11)\n",[74,84286,84287],{"class":76,"line":37721},[74,84288,84289],{"class":144},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[74,84291,84292],{"class":76,"line":37730},[74,84293,84294],{"class":144},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[74,84296,84297,84299,84301,84303],{"class":76,"line":37739},[74,84298,56111],{"class":80},[74,84300,56114],{"class":84},[74,84302,131],{"class":80},[74,84304,84305],{"class":84}," goodsList\n",[74,84307,84308,84310,84313,84315,84318],{"class":76,"line":37745},[74,84309,2460],{"class":80},[74,84311,84312],{"class":84}," (dataset.index ",[74,84314,58767],{"class":80},[74,84316,84317],{"class":190}," '1'",[74,84319,16721],{"class":84},[74,84321,84322,84325,84327,84330,84333,84335,84337,84339,84342,84344,84346,84349,84351,84353,84355],{"class":76,"line":37751},[74,84323,84324],{"class":84},"          arr ",[74,84326,131],{"class":80},[74,84328,84329],{"class":84}," goodsList.",[74,84331,84332],{"class":1925},"filter",[74,84334,85],{"class":84},[74,84336,84076],{"class":9495},[74,84338,84079],{"class":80},[74,84340,84341],{"class":84}," item.price ",[74,84343,1672],{"class":80},[74,84345,4056],{"class":134},[74,84347,84348],{"class":80}," &&",[74,84350,84341],{"class":84},[74,84352,1550],{"class":80},[74,84354,10033],{"class":134},[74,84356,91],{"class":84},[74,84358,84359,84362,84364,84366,84368,84370,84373],{"class":76,"line":37759},[74,84360,84361],{"class":84},"        } ",[74,84363,1663],{"class":80},[74,84365,1666],{"class":80},[74,84367,84312],{"class":84},[74,84369,58767],{"class":80},[74,84371,84372],{"class":190}," '2'",[74,84374,16721],{"class":84},[74,84376,84377,84379,84381,84383,84385,84387,84389,84391,84393,84395,84397,84399,84401,84403,84406],{"class":76,"line":37764},[74,84378,84324],{"class":84},[74,84380,131],{"class":80},[74,84382,84329],{"class":84},[74,84384,84332],{"class":1925},[74,84386,85],{"class":84},[74,84388,84076],{"class":9495},[74,84390,84079],{"class":80},[74,84392,84341],{"class":84},[74,84394,1672],{"class":80},[74,84396,10033],{"class":134},[74,84398,84348],{"class":80},[74,84400,84341],{"class":84},[74,84402,1550],{"class":80},[74,84404,84405],{"class":134}," 300",[74,84407,91],{"class":84},[74,84409,84410,84412,84414,84416,84418,84420,84423],{"class":76,"line":37770},[74,84411,84361],{"class":84},[74,84413,1663],{"class":80},[74,84415,1666],{"class":80},[74,84417,84312],{"class":84},[74,84419,58767],{"class":80},[74,84421,84422],{"class":190}," '3'",[74,84424,16721],{"class":84},[74,84426,84427,84429,84431,84433,84435,84437,84439,84441,84443,84445,84447],{"class":76,"line":37781},[74,84428,84324],{"class":84},[74,84430,131],{"class":80},[74,84432,84329],{"class":84},[74,84434,84332],{"class":1925},[74,84436,85],{"class":84},[74,84438,84076],{"class":9495},[74,84440,84079],{"class":80},[74,84442,84341],{"class":84},[74,84444,1672],{"class":80},[74,84446,84405],{"class":134},[74,84448,91],{"class":84},[74,84450,84451],{"class":76,"line":37787},[74,84452,2492],{"class":84},[74,84454,84455],{"class":76,"line":37807},[74,84456,84457],{"class":144},"        \u002F\u002F 渲染函数\n",[74,84459,84460,84462],{"class":76,"line":37813},[74,84461,74689],{"class":1925},[74,84463,56693],{"class":84},[74,84465,84466],{"class":76,"line":37819},[74,84467,56679],{"class":84},[74,84469,84470],{"class":76,"line":37825},[74,84471,2363],{"emptyLinePlaceholder":2362},[74,84473,84474],{"class":76,"line":37842},[74,84475,37742],{"class":84},[74,84477,84478,84480,84482],{"class":76,"line":37848},[74,84479,56698],{"class":84},[74,84481,56094],{"class":55581},[74,84483,55588],{"class":84},[74,84485,84486,84488,84490],{"class":76,"line":37854},[74,84487,56066],{"class":84},[74,84489,56081],{"class":55581},[74,84491,55588],{"class":84},[74,84493,84494],{"class":76,"line":37860},[74,84495,2363],{"emptyLinePlaceholder":2362},[74,84497,84498,84500,84502],{"class":76,"line":37866},[74,84499,56066],{"class":84},[74,84501,54916],{"class":55581},[74,84503,55588],{"class":84},[14,84505,84507],{"id":84506},"_410-深入了解对象","4.10 深入了解对象",[44,84509,84511],{"id":84510},"_4101-创建对象","4.10.1 创建对象",[19,84513,84514],{},[1424,84515],{"alt":69,"src":84516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,84518,84519],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[44,84521,84523],{"id":84522},"_4102-构造函数","4.10.2 构造函数",[19,84525,84526,84529],{},[235,84527,84528],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,84531,84532,84535],{},[235,84533,84534],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[64,84537,84539],{"className":54914,"code":84538,"language":54916,"meta":69,"style":69},"\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",[71,84540,84541,84549,84554,84575,84588,84600,84612,84616,84621,84648,84653,84680],{"__ignoreMap":69},[74,84542,84543,84545,84547],{"class":76,"line":77},[74,84544,996],{"class":84},[74,84546,56094],{"class":55581},[74,84548,55588],{"class":84},[74,84550,84551],{"class":76,"line":94},[74,84552,84553],{"class":144},"\u002F\u002F例：\n",[74,84555,84556,84558,84561,84563,84565,84567,84569,84571,84573],{"class":76,"line":1141},[74,84557,58730],{"class":80},[74,84559,84560],{"class":1925}," Pig",[74,84562,85],{"class":84},[74,84564,84091],{"class":9495},[74,84566,464],{"class":84},[74,84568,74502],{"class":9495},[74,84570,464],{"class":84},[74,84572,74519],{"class":9495},[74,84574,16721],{"class":84},[74,84576,84577,84580,84583,84585],{"class":76,"line":1156},[74,84578,84579],{"class":134},"    this",[74,84581,84582],{"class":84},".name",[74,84584,131],{"class":80},[74,84586,84587],{"class":84},"name\n",[74,84589,84590,84592,84595,84597],{"class":76,"line":1162},[74,84591,84579],{"class":134},[74,84593,84594],{"class":84},".age",[74,84596,131],{"class":80},[74,84598,84599],{"class":84},"age\n",[74,84601,84602,84604,84607,84609],{"class":76,"line":1176},[74,84603,84579],{"class":134},[74,84605,84606],{"class":84},".gender",[74,84608,131],{"class":80},[74,84610,84611],{"class":84},"gender    \n",[74,84613,84614],{"class":76,"line":1182},[74,84615,1527],{"class":84},[74,84617,84618],{"class":76,"line":1273},[74,84619,84620],{"class":144},"\u002F\u002F创建佩奇对象\n",[74,84622,84623,84625,84628,84630,84632,84634,84637,84639,84641,84643,84646],{"class":76,"line":1279},[74,84624,11071],{"class":80},[74,84626,84627],{"class":134}," Peppa",[74,84629,15996],{"class":80},[74,84631,84560],{"class":1925},[74,84633,85],{"class":84},[74,84635,84636],{"class":190},"'佩奇'",[74,84638,464],{"class":84},[74,84640,430],{"class":134},[74,84642,464],{"class":84},[74,84644,84645],{"class":190},"'女'",[74,84647,91],{"class":84},[74,84649,84650],{"class":76,"line":1291},[74,84651,84652],{"class":144},"\u002F\u002F创建乔治对象\n",[74,84654,84655,84657,84660,84662,84664,84666,84669,84671,84673,84675,84678],{"class":76,"line":1574},[74,84656,11071],{"class":80},[74,84658,84659],{"class":134}," George",[74,84661,15996],{"class":80},[74,84663,84560],{"class":1925},[74,84665,85],{"class":84},[74,84667,84668],{"class":190},"'乔治'",[74,84670,464],{"class":84},[74,84672,157],{"class":134},[74,84674,464],{"class":84},[74,84676,84677],{"class":190},"'男'",[74,84679,91],{"class":84},[74,84681,84682,84684,84686],{"class":76,"line":1579},[74,84683,56066],{"class":84},[74,84685,56094],{"class":55581},[74,84687,55588],{"class":84},[19,84689,84690],{},[1424,84691],{"alt":69,"src":84692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,84694,84695],{},[1424,84696],{"alt":69,"src":84697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,84699,84700],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,84702,84703],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,84705,84706],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,84708,84709],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,84711,84712],{},"这里用等号是因为：对象.属性=值",[19,84714,84715],{},"①利用对象字面量创建对象",[19,84717,84718],{},"const o={",[19,84720,84721],{},"name:'pink'",[19,84723,84724],{},"} ②利用new Object创建对象",[19,84726,84727],{},"const o=new Object({name:'pink'})",[19,84729,84730],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,84732,84733],{},"构造函数创建对象的执行过程：",[19,84735,84736],{},[1424,84737],{"alt":69,"src":84738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[44,84740,84742],{"id":84741},"_4103-实例成员","4.10.3 实例成员",[19,84744,84745],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[27,84747,84748,84751,84754],{},[30,84749,84750],{},"实例对象的属性和方法即为实例成员",[30,84752,84753],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[30,84755,84756],{},"构造函数创建的实例对象彼此独立互不影响",[44,84758,84760],{"id":84759},"_4104-静态成员","4.10.4 静态成员",[19,84762,84763],{},[1424,84764],{"alt":69,"src":84765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,84767,84768],{},"静态成员有Date.now() Math.PI Math.random()",[19,84770,84771],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,84773,84774],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,84776,84777],{},"function Pig(name) n {",[19,84779,84780],{},"this.name=name",[19,84782,1032],{},[19,84784,84785],{},"Pig.eyes=2",[19,84787,84788],{},"Pig.sayHai=function () { console.log(this) }",[19,84790,84791],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,84793,84794],{},"console.log(Pig.eyes) \u002F\u002F2",[19,84796,15611],{},[27,84798,84799,84802,84805,84808,84811],{},[30,84800,84801],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[30,84803,84804],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[30,84806,84807],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[30,84809,84810],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[30,84812,84813],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,84815,84816],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[44,84818,84820],{"id":84819},"_4105-内置构造函数","4.10.5 内置构造函数",[19,84822,84823],{},"内置构造函数包含：",[19,84825,84826],{},[1424,84827],{"alt":69,"src":84828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,84830,84831],{},[1424,84832],{"alt":69,"src":84833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,84835,84836],{},"这些基本数据类型，js对他们进行了包装",[56094,84838,84839],{},"\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",[26277,84841,84843],{"id":84842},"_41051-object","4.10.5.1 Object",[19,84845,84846],{},"Object 是内置的构造函数，用于创建普通对象",[19,84848,84849],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[64,84851,84853],{"className":54914,"code":84852,"language":54916,"meta":69,"style":69},"const user=new Object({name:'小明',age:15})\n",[71,84854,84855],{"__ignoreMap":69},[74,84856,84857],{"class":76,"line":77},[74,84858,84852],{"class":84},[19,84860,84861],{},"三个常用的静态方法：",[27189,84863,84865],{"id":84864},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,84867,84868],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,84870,84871],{},[1424,84872],{"alt":69,"src":84873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,84875,84876],{},[1424,84877],{"alt":69,"src":84878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[64,84880,84882],{"className":57348,"code":84881,"language":57350,"meta":69,"style":69},"\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",[71,84883,84884,84892,84900,84905,84910,84915,84920,84925,84930,84938],{"__ignoreMap":69},[74,84885,84886,84888,84890],{"class":76,"line":77},[74,84887,996],{"class":84},[74,84889,56081],{"class":55581},[74,84891,55588],{"class":84},[74,84893,84894,84896,84898],{"class":76,"line":94},[74,84895,56425],{"class":84},[74,84897,56094],{"class":55581},[74,84899,55588],{"class":84},[74,84901,84902],{"class":76,"line":1141},[74,84903,84904],{"class":84},"    const o = { name: 'pink', age: 6 }\n",[74,84906,84907],{"class":76,"line":1156},[74,84908,84909],{"class":84},"    \u002F\u002F 获得所有属性名\n",[74,84911,84912],{"class":76,"line":1162},[74,84913,84914],{"class":84},"    const arr = Object.keys(o)\n",[74,84916,84917],{"class":76,"line":1176},[74,84918,84919],{"class":84},"    console.log(arr)\n",[74,84921,84922],{"class":76,"line":1182},[74,84923,84924],{"class":84},"    \u002F\u002F 获得所有属性值\n",[74,84926,84927],{"class":76,"line":1273},[74,84928,84929],{"class":84},"    console.log(Object.values(o))\n",[74,84931,84932,84934,84936],{"class":76,"line":1279},[74,84933,56698],{"class":84},[74,84935,56094],{"class":55581},[74,84937,55588],{"class":84},[74,84939,84940,84942,84944],{"class":76,"line":1291},[74,84941,56066],{"class":84},[74,84943,56081],{"class":55581},[74,84945,55588],{"class":84},[27189,84947,84949],{"id":84948},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,84951,84952],{},"Object.assign(oo,o)",[19,84954,84955],{},"后的东西添加给前 是追加",[19,84957,84958],{},[1424,84959],{"alt":69,"src":84960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,84962,84963],{},[1424,84964],{"alt":69,"src":84965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[64,84967,84969],{"className":57348,"code":84968,"language":57350,"meta":69,"style":69},"\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",[71,84970,84971,84979,84987,84991,84995,84999,85003,85007,85011,85016,85021,85026,85031,85036,85044],{"__ignoreMap":69},[74,84972,84973,84975,84977],{"class":76,"line":77},[74,84974,996],{"class":84},[74,84976,56081],{"class":55581},[74,84978,55588],{"class":84},[74,84980,84981,84983,84985],{"class":76,"line":94},[74,84982,56425],{"class":84},[74,84984,56094],{"class":55581},[74,84986,55588],{"class":84},[74,84988,84989],{"class":76,"line":1141},[74,84990,84904],{"class":84},[74,84992,84993],{"class":76,"line":1156},[74,84994,84909],{"class":84},[74,84996,84997],{"class":76,"line":1162},[74,84998,84914],{"class":84},[74,85000,85001],{"class":76,"line":1176},[74,85002,84919],{"class":84},[74,85004,85005],{"class":76,"line":1182},[74,85006,84924],{"class":84},[74,85008,85009],{"class":76,"line":1273},[74,85010,84929],{"class":84},[74,85012,85013],{"class":76,"line":1279},[74,85014,85015],{"class":84},"    const oo = {}\n",[74,85017,85018],{"class":76,"line":1291},[74,85019,85020],{"class":84},"    Object.assign(oo, o)\n",[74,85022,85023],{"class":76,"line":1574},[74,85024,85025],{"class":84},"    console.log(oo)\n",[74,85027,85028],{"class":76,"line":1579},[74,85029,85030],{"class":84},"    Object.assign(o, { gender: '女' })\n",[74,85032,85033],{"class":76,"line":1585},[74,85034,85035],{"class":84},"    console.log(o)\n",[74,85037,85038,85040,85042],{"class":76,"line":1590},[74,85039,56698],{"class":84},[74,85041,56094],{"class":55581},[74,85043,55588],{"class":84},[74,85045,85046,85048,85050],{"class":76,"line":1604},[74,85047,56066],{"class":84},[74,85049,56081],{"class":55581},[74,85051,55588],{"class":84},[19,85053,85054],{},[1424,85055],{"alt":69,"src":85056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[26277,85058,85060],{"id":85059},"_41052-array","4.10.5.2 Array",[19,85062,85063],{},"Array 是内置的构造函数，用于创建数组",[19,85065,85066],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[64,85068,85070],{"className":54914,"code":85069,"language":54916,"meta":69,"style":69},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[71,85071,85072,85077],{"__ignoreMap":69},[74,85073,85074],{"class":76,"line":77},[74,85075,85076],{"class":84},"const arr=new Array(3,5)\n",[74,85078,85079],{"class":76,"line":94},[74,85080,85081],{"class":84},"console.log(arr)  \u002F\u002F[3,5]\n",[19,85083,85084],{},"Array的实例方法，这个方法是实例成员",[19,85086,85087],{},[1424,85088],{"alt":69,"src":85089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[27189,85091,85093],{"id":85092},"_410521-reduce","4.10.5.2.1 reduce",[19,85095,85096],{},[1424,85097],{"alt":69,"src":85098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[64,85100,85102],{"className":57348,"code":85101,"language":57350,"meta":69,"style":69},"\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",[71,85103,85104,85112,85120,85125,85130,85135,85140,85144,85149,85154,85159,85163,85168,85173,85177,85182,85187,85192,85200],{"__ignoreMap":69},[74,85105,85106,85108,85110],{"class":76,"line":77},[74,85107,996],{"class":84},[74,85109,56081],{"class":55581},[74,85111,55588],{"class":84},[74,85113,85114,85116,85118],{"class":76,"line":94},[74,85115,56425],{"class":84},[74,85117,56094],{"class":55581},[74,85119,55588],{"class":84},[74,85121,85122],{"class":76,"line":1141},[74,85123,85124],{"class":84},"    const arr = [1, 5, 8]\n",[74,85126,85127],{"class":76,"line":1156},[74,85128,85129],{"class":84},"    \u002F\u002F 1.没有初始值\n",[74,85131,85132],{"class":76,"line":1162},[74,85133,85134],{"class":84},"    const total = arr.reduce(function (prev, current) {\n",[74,85136,85137],{"class":76,"line":1176},[74,85138,85139],{"class":84},"      return prev + current\n",[74,85141,85142],{"class":76,"line":1182},[74,85143,37742],{"class":84},[74,85145,85146],{"class":76,"line":1273},[74,85147,85148],{"class":84},"    console.log(total)   \u002F\u002F14\n",[74,85150,85151],{"class":76,"line":1279},[74,85152,85153],{"class":84},"    \u002F\u002F 2.有初始值\n",[74,85155,85156],{"class":76,"line":1291},[74,85157,85158],{"class":84},"    const total1 = arr.reduce(function (prev, current) {\n",[74,85160,85161],{"class":76,"line":1574},[74,85162,85139],{"class":84},[74,85164,85165],{"class":76,"line":1579},[74,85166,85167],{"class":84},"    }, 10)\n",[74,85169,85170],{"class":76,"line":1585},[74,85171,85172],{"class":84},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[74,85174,85175],{"class":76,"line":1590},[74,85176,2363],{"emptyLinePlaceholder":2362},[74,85178,85179],{"class":76,"line":1604},[74,85180,85181],{"class":84},"    \u002F\u002F 3.箭头函数写法\n",[74,85183,85184],{"class":76,"line":1609},[74,85185,85186],{"class":84},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[74,85188,85189],{"class":76,"line":1615},[74,85190,85191],{"class":84},"    console.log(total2)   \u002F\u002F24\n",[74,85193,85194,85196,85198],{"class":76,"line":1636},[74,85195,56698],{"class":84},[74,85197,56094],{"class":55581},[74,85199,55588],{"class":84},[74,85201,85202,85204,85206],{"class":76,"line":1641},[74,85203,56066],{"class":84},[74,85205,56081],{"class":55581},[74,85207,55588],{"class":84},[19,85209,85210],{},"执行过程：",[27,85212,85213,85216,85219],{},[30,85214,85215],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[30,85217,85218],{},"每一次循环，把返回值给作为下一次循环的上一次值",[30,85220,85221],{},"如果有起始值，则起始值作为上一次值",[64,85223,85225],{"className":57348,"code":85224,"language":57350,"meta":69,"style":69},"\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",[71,85226,85227,85235,85243,85247,85251,85255,85259,85263,85267,85272,85277,85282,85287,85292,85296,85300,85304,85308,85312,85316,85321,85325,85330,85334,85339,85344,85348,85352,85356,85364],{"__ignoreMap":69},[74,85228,85229,85231,85233],{"class":76,"line":77},[74,85230,996],{"class":84},[74,85232,56081],{"class":55581},[74,85234,55588],{"class":84},[74,85236,85237,85239,85241],{"class":76,"line":94},[74,85238,56425],{"class":84},[74,85240,56094],{"class":55581},[74,85242,55588],{"class":84},[74,85244,85245],{"class":76,"line":1141},[74,85246,85124],{"class":84},[74,85248,85249],{"class":76,"line":1156},[74,85250,85129],{"class":84},[74,85252,85253],{"class":76,"line":1162},[74,85254,85134],{"class":84},[74,85256,85257],{"class":76,"line":1176},[74,85258,85139],{"class":84},[74,85260,85261],{"class":76,"line":1182},[74,85262,37742],{"class":84},[74,85264,85265],{"class":76,"line":1273},[74,85266,85148],{"class":84},[74,85268,85269],{"class":76,"line":1279},[74,85270,85271],{"class":84},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[74,85273,85274],{"class":76,"line":1291},[74,85275,85276],{"class":84},"    \u002F\u002F     1              5                    6\n",[74,85278,85279],{"class":76,"line":1574},[74,85280,85281],{"class":84},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[74,85283,85284],{"class":76,"line":1579},[74,85285,85286],{"class":84},"    \u002F\u002F     6              8                    14\n",[74,85288,85289],{"class":76,"line":1585},[74,85290,85291],{"class":84},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[74,85293,85294],{"class":76,"line":1590},[74,85295,85153],{"class":84},[74,85297,85298],{"class":76,"line":1604},[74,85299,85158],{"class":84},[74,85301,85302],{"class":76,"line":1609},[74,85303,85139],{"class":84},[74,85305,85306],{"class":76,"line":1615},[74,85307,85167],{"class":84},[74,85309,85310],{"class":76,"line":1636},[74,85311,85172],{"class":84},[74,85313,85314],{"class":76,"line":1641},[74,85315,85271],{"class":84},[74,85317,85318],{"class":76,"line":1655},[74,85319,85320],{"class":84},"    \u002F\u002F     10             1                     11\n",[74,85322,85323],{"class":76,"line":1660},[74,85324,85281],{"class":84},[74,85326,85327],{"class":76,"line":1689},[74,85328,85329],{"class":84},"    \u002F\u002F     11             5                    16\n",[74,85331,85332],{"class":76,"line":1694},[74,85333,85281],{"class":84},[74,85335,85336],{"class":76,"line":1711},[74,85337,85338],{"class":84},"    \u002F\u002F     16             8                    24\n",[74,85340,85341],{"class":76,"line":1716},[74,85342,85343],{"class":84},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[74,85345,85346],{"class":76,"line":1721},[74,85347,85181],{"class":84},[74,85349,85350],{"class":76,"line":1726},[74,85351,85186],{"class":84},[74,85353,85354],{"class":76,"line":1740},[74,85355,85191],{"class":84},[74,85357,85358,85360,85362],{"class":76,"line":1745},[74,85359,56698],{"class":84},[74,85361,56094],{"class":55581},[74,85363,55588],{"class":84},[74,85365,85366,85368,85370],{"class":76,"line":2540},[74,85367,56066],{"class":84},[74,85369,56081],{"class":55581},[74,85371,55588],{"class":84},[27189,85373,85375],{"id":85374},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,85377,85378],{},[1424,85379],{"alt":69,"src":85380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[64,85382,85384],{"className":57348,"code":85383,"language":57350,"meta":69,"style":69},"\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",[71,85385,85386,85394,85402,85407,85412,85417,85422,85426,85431,85436,85441,85446,85451,85456,85460,85465,85469,85474,85482],{"__ignoreMap":69},[74,85387,85388,85390,85392],{"class":76,"line":77},[74,85389,996],{"class":84},[74,85391,56081],{"class":55581},[74,85393,55588],{"class":84},[74,85395,85396,85398,85400],{"class":76,"line":94},[74,85397,56425],{"class":84},[74,85399,56094],{"class":55581},[74,85401,55588],{"class":84},[74,85403,85404],{"class":76,"line":1141},[74,85405,85406],{"class":84},"    const arr = [\n",[74,85408,85409],{"class":76,"line":1156},[74,85410,85411],{"class":84},"      { name: '张三', salary: 10000 },\n",[74,85413,85414],{"class":76,"line":1162},[74,85415,85416],{"class":84},"      { name: '李四', salary: 10000 },\n",[74,85418,85419],{"class":76,"line":1176},[74,85420,85421],{"class":84},"      { name: '王五', salary: 10000 }\n",[74,85423,85424],{"class":76,"line":1182},[74,85425,57390],{"class":84},[74,85427,85428],{"class":76,"line":1273},[74,85429,85430],{"class":84},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[74,85432,85433],{"class":76,"line":1279},[74,85434,85435],{"class":84},"    \u002F\u002F prev是累计值\n",[74,85437,85438],{"class":76,"line":1291},[74,85439,85440],{"class":84},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[74,85442,85443],{"class":76,"line":1574},[74,85444,85445],{"class":84},"    console.log(total)\n",[74,85447,85448],{"class":76,"line":1579},[74,85449,85450],{"class":84},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[74,85452,85453],{"class":76,"line":1585},[74,85454,85455],{"class":84},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[74,85457,85458],{"class":76,"line":1590},[74,85459,85450],{"class":84},[74,85461,85462],{"class":76,"line":1604},[74,85463,85464],{"class":84},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[74,85466,85467],{"class":76,"line":1609},[74,85468,85450],{"class":84},[74,85470,85471],{"class":76,"line":1615},[74,85472,85473],{"class":84},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[74,85475,85476,85478,85480],{"class":76,"line":1636},[74,85477,56698],{"class":84},[74,85479,56094],{"class":55581},[74,85481,55588],{"class":84},[74,85483,85484,85486,85488],{"class":76,"line":1641},[74,85485,56066],{"class":84},[74,85487,56081],{"class":55581},[74,85489,55588],{"class":84},[27189,85491,85493],{"id":85492},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,85495,85496],{},[1424,85497],{"alt":69,"src":85498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,85500,85501],{},[1424,85502],{"alt":69,"src":85503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[27,85505,85506],{},[30,85507,85508],{},"find()",[19,85510,85511],{},"循环查找，找到第一个就ok",[19,85513,85514],{},[324,85515,85518],{"href":85516,"rel":85517},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[28145],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[64,85520,85522],{"className":54914,"code":85521,"language":54916,"meta":69,"style":69},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[71,85523,85524,85529,85534],{"__ignoreMap":69},[74,85525,85526],{"class":76,"line":77},[74,85527,85528],{"class":84},"const array1 = [5, 12, 8, 130, 44]\n",[74,85530,85531],{"class":76,"line":94},[74,85532,85533],{"class":84},"const found = array1.find((element) => element > 10)\n",[74,85535,85536],{"class":76,"line":1141},[74,85537,85538],{"class":84},"console.log(found)  \u002F\u002F12\n",[19,85540,85541,85543,85544,85549,85550,85553,85554,85556,85557,85562,85563,85565,85566,85568,85569,85571,85572],{},[71,85542,85508],{}," 方法是一个",[324,85545,85548],{"href":85546,"rel":85547},"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",[28145],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[71,85551,85552],{},"callbackFn"," 函数，直到 ",[71,85555,85552],{}," 返回一个",[324,85558,85561],{"href":85559,"rel":85560},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[28145],"真值","。然后 ",[71,85564,85508],{}," 返回该元素并停止迭代数组。如果 ",[71,85567,85552],{}," 从未返回真值，则 ",[71,85570,85508],{}," 返回 ",[71,85573,85574],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[64,85576,85578],{"className":57348,"code":85577,"language":57350,"meta":69,"style":69},"\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",[71,85579,85580,85588,85596,85601,85606,85611,85615,85620,85625,85629,85634,85639,85643,85647,85652,85657,85661,85665,85670,85675,85680,85685,85690,85694,85699,85704,85709,85714,85718,85723,85731],{"__ignoreMap":69},[74,85581,85582,85584,85586],{"class":76,"line":77},[74,85583,996],{"class":84},[74,85585,56081],{"class":55581},[74,85587,55588],{"class":84},[74,85589,85590,85592,85594],{"class":76,"line":94},[74,85591,56425],{"class":84},[74,85593,56094],{"class":55581},[74,85595,55588],{"class":84},[74,85597,85598],{"class":76,"line":1141},[74,85599,85600],{"class":84},"    const arr = ['red', 'blue', 'green']\n",[74,85602,85603],{"class":76,"line":1156},[74,85604,85605],{"class":84},"    const found = arr.find(item => item === 'pink')\n",[74,85607,85608],{"class":76,"line":1162},[74,85609,85610],{"class":84},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[74,85612,85613],{"class":76,"line":1176},[74,85614,2363],{"emptyLinePlaceholder":2362},[74,85616,85617],{"class":76,"line":1182},[74,85618,85619],{"class":84},"    \u002F\u002F 使用场景，用于查找数据\n",[74,85621,85622],{"class":76,"line":1273},[74,85623,85624],{"class":84},"    const arr1 = [\n",[74,85626,85627],{"class":76,"line":1279},[74,85628,83667],{"class":84},[74,85630,85631],{"class":76,"line":1291},[74,85632,85633],{"class":84},"        name: '小米',\n",[74,85635,85636],{"class":76,"line":1574},[74,85637,85638],{"class":84},"        price: 1999\n",[74,85640,85641],{"class":76,"line":1579},[74,85642,82173],{"class":84},[74,85644,85645],{"class":76,"line":1585},[74,85646,83667],{"class":84},[74,85648,85649],{"class":76,"line":1590},[74,85650,85651],{"class":84},"        name: '华为',\n",[74,85653,85654],{"class":76,"line":1604},[74,85655,85656],{"class":84},"        price: 3999\n",[74,85658,85659],{"class":76,"line":1609},[74,85660,56679],{"class":84},[74,85662,85663],{"class":76,"line":1615},[74,85664,57390],{"class":84},[74,85666,85667],{"class":76,"line":1636},[74,85668,85669],{"class":84},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[74,85671,85672],{"class":76,"line":1641},[74,85673,85674],{"class":84},"    \u002F\u002F const found1 = arr1.find(item => {\n",[74,85676,85677],{"class":76,"line":1655},[74,85678,85679],{"class":84},"    \u002F\u002F   if (item.name === '小米') {\n",[74,85681,85682],{"class":76,"line":1660},[74,85683,85684],{"class":84},"    \u002F\u002F     return item\n",[74,85686,85687],{"class":76,"line":1689},[74,85688,85689],{"class":84},"    \u002F\u002F   }\n",[74,85691,85692],{"class":76,"line":1694},[74,85693,67571],{"class":84},[74,85695,85696],{"class":76,"line":1711},[74,85697,85698],{"class":84},"    \u002F\u002F 另一种写法\n",[74,85700,85701],{"class":76,"line":1716},[74,85702,85703],{"class":84},"    const found1 = arr1.find(item => {\n",[74,85705,85706],{"class":76,"line":1721},[74,85707,85708],{"class":84},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[74,85710,85711],{"class":76,"line":1726},[74,85712,85713],{"class":84},"      return item.name = '小米'\n",[74,85715,85716],{"class":76,"line":1740},[74,85717,37742],{"class":84},[74,85719,85720],{"class":76,"line":1745},[74,85721,85722],{"class":84},"    console.log(found1)\n",[74,85724,85725,85727,85729],{"class":76,"line":2540},[74,85726,56698],{"class":84},[74,85728,56094],{"class":55581},[74,85730,55588],{"class":84},[74,85732,85733,85735,85737],{"class":76,"line":2554},[74,85734,56066],{"class":84},[74,85736,56081],{"class":55581},[74,85738,55588],{"class":84},[19,85740,85741],{},[1424,85742],{"alt":69,"src":85743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,85745,85746],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[27,85748,85749],{"start":94},[30,85750,85751],{},"every()返回的是布尔值",[19,85753,85754],{},[324,85755,85758],{"href":85756,"rel":85757},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[28145],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,85760,85761],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,85763,85764],{},"some是只有有一个就没问题",[19,85766,85767],{},"every是必须全是才行",[64,85769,85773],{"className":85770,"code":85771,"language":85772,"meta":69,"style":69},"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",[71,85774,85775,85791,85805,85809,85818],{"__ignoreMap":69},[74,85776,85777,85779,85782,85784,85786,85789],{"class":76,"line":77},[74,85778,58730],{"class":80},[74,85780,85781],{"class":84}," isBigEnough(element, ",[74,85783,78339],{"class":80},[74,85785,16714],{"class":84},[74,85787,85788],{"class":80},"array",[74,85790,16721],{"class":84},[74,85792,85793,85796,85799,85801,85803],{"class":76,"line":94},[74,85794,85795],{"class":80},"  return",[74,85797,85798],{"class":84}," element ",[74,85800,1672],{"class":80},[74,85802,2000],{"class":134},[74,85804,1252],{"class":84},[74,85806,85807],{"class":76,"line":1141},[74,85808,1527],{"class":84},[74,85810,85811,85814,85816],{"class":76,"line":1156},[74,85812,85813],{"class":84},"[12, 5, 8, 130, 44].every(isBigEnough); ",[74,85815,37610],{"class":80},[74,85817,58797],{"class":84},[74,85819,85820,85823,85825],{"class":76,"line":1162},[74,85821,85822],{"class":84},"[12, 54, 18, 130, 44].every(isBigEnough); ",[74,85824,37610],{"class":80},[74,85826,62221],{"class":84},[64,85828,85830],{"className":57348,"code":85829,"language":57350,"meta":69,"style":69},"\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",[71,85831,85832,85840,85848,85853,85857,85862,85867,85875],{"__ignoreMap":69},[74,85833,85834,85836,85838],{"class":76,"line":77},[74,85835,996],{"class":84},[74,85837,56081],{"class":55581},[74,85839,55588],{"class":84},[74,85841,85842,85844,85846],{"class":76,"line":94},[74,85843,56425],{"class":84},[74,85845,56094],{"class":55581},[74,85847,55588],{"class":84},[74,85849,85850],{"class":76,"line":1141},[74,85851,85852],{"class":84},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[74,85854,85855],{"class":76,"line":1156},[74,85856,82603],{"class":84},[74,85858,85859],{"class":76,"line":1162},[74,85860,85861],{"class":84},"    const flag = arr.every(item => item >= 10)\n",[74,85863,85864],{"class":76,"line":1176},[74,85865,85866],{"class":84},"    console.log(flag)    \u002F\u002Ftrue\n",[74,85868,85869,85871,85873],{"class":76,"line":1182},[74,85870,56698],{"class":84},[74,85872,56094],{"class":55581},[74,85874,55588],{"class":84},[74,85876,85877,85879,85881],{"class":76,"line":1273},[74,85878,56066],{"class":84},[74,85880,56081],{"class":55581},[74,85882,55588],{"class":84},[64,85884,85886],{"className":57348,"code":85885,"language":57350,"meta":69,"style":69},"\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",[71,85887,85888,85896,85904,85908,85913,85918,85923,85931],{"__ignoreMap":69},[74,85889,85890,85892,85894],{"class":76,"line":77},[74,85891,996],{"class":84},[74,85893,56081],{"class":55581},[74,85895,55588],{"class":84},[74,85897,85898,85900,85902],{"class":76,"line":94},[74,85899,56425],{"class":84},[74,85901,56094],{"class":55581},[74,85903,55588],{"class":84},[74,85905,85906],{"class":76,"line":1141},[74,85907,85852],{"class":84},[74,85909,85910],{"class":76,"line":1156},[74,85911,85912],{"class":84},"    const arr = [10, 0, 5]\n",[74,85914,85915],{"class":76,"line":1162},[74,85916,85917],{"class":84},"    const flag = arr.some(item => item >= 10)\n",[74,85919,85920],{"class":76,"line":1176},[74,85921,85922],{"class":84},"    console.log(flag)   \u002F\u002Ftrue\n",[74,85924,85925,85927,85929],{"class":76,"line":1182},[74,85926,56698],{"class":84},[74,85928,56094],{"class":55581},[74,85930,55588],{"class":84},[74,85932,85933,85935,85937],{"class":76,"line":1273},[74,85934,56066],{"class":84},[74,85936,56081],{"class":55581},[74,85938,55588],{"class":84},[27189,85940,85942],{"id":85941},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,85944,85945],{},[1424,85946],{"alt":69,"src":85947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[64,85949,85951],{"className":54914,"code":85950,"language":54916,"meta":69,"style":69},"\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",[71,85952,85953,85963,85977,85981,85989,86003,86023,86035,86043,86050,86062,86074,86086,86098,86108,86118,86122,86130,86138,86142,86150,86162,86170,86192,86197,86202,86235,86243,86251,86255],{"__ignoreMap":69},[74,85954,85955,85957,85959,85961],{"class":76,"line":77},[74,85956,55578],{"class":84},[74,85958,55582],{"class":55581},[74,85960,55585],{"class":1925},[74,85962,55588],{"class":84},[74,85964,85965,85967,85969,85971,85973,85975],{"class":76,"line":94},[74,85966,996],{"class":84},[74,85968,54916],{"class":55581},[74,85970,55597],{"class":1925},[74,85972,131],{"class":84},[74,85974,55602],{"class":190},[74,85976,55588],{"class":84},[74,85978,85979],{"class":76,"line":1141},[74,85980,2363],{"emptyLinePlaceholder":2362},[74,85982,85983,85985,85987],{"class":76,"line":1156},[74,85984,996],{"class":84},[74,85986,55615],{"class":55581},[74,85988,55588],{"class":84},[74,85990,85991,85993,85995,85997,85999,86001],{"class":76,"line":1162},[74,85992,56425],{"class":84},[74,85994,55625],{"class":55581},[74,85996,55628],{"class":1925},[74,85998,131],{"class":84},[74,86000,55633],{"class":190},[74,86002,55588],{"class":84},[74,86004,86005,86007,86009,86011,86013,86015,86017,86019,86021],{"class":76,"line":1176},[74,86006,56425],{"class":84},[74,86008,55625],{"class":55581},[74,86010,19199],{"class":1925},[74,86012,131],{"class":84},[74,86014,55672],{"class":190},[74,86016,55652],{"class":1925},[74,86018,131],{"class":84},[74,86020,55679],{"class":190},[74,86022,55588],{"class":84},[74,86024,86025,86027,86029,86031,86033],{"class":76,"line":1182},[74,86026,56425],{"class":84},[74,86028,55688],{"class":55581},[74,86030,55691],{"class":84},[74,86032,55688],{"class":55581},[74,86034,55588],{"class":84},[74,86036,86037,86039,86041],{"class":76,"line":1273},[74,86038,56425],{"class":84},[74,86040,5090],{"class":55581},[74,86042,55588],{"class":84},[74,86044,86045,86048],{"class":76,"line":1279},[74,86046,86047],{"class":55581},"    div",[74,86049,19851],{"class":84},[74,86051,86052,86054,86056,86058,86060],{"class":76,"line":1291},[74,86053,59052],{"class":134},[74,86055,55718],{"class":84},[74,86057,1684],{"class":134},[74,86059,55773],{"class":80},[74,86061,1252],{"class":84},[74,86063,86064,86066,86068,86070,86072],{"class":76,"line":1574},[74,86065,59066],{"class":134},[74,86067,55718],{"class":84},[74,86069,487],{"class":134},[74,86071,55773],{"class":80},[74,86073,1252],{"class":84},[74,86075,86076,86078,86080,86082,86084],{"class":76,"line":1579},[74,86077,61640],{"class":134},[74,86079,55718],{"class":84},[74,86081,487],{"class":134},[74,86083,55773],{"class":80},[74,86085,1252],{"class":84},[74,86087,86088,86090,86092,86094,86096],{"class":76,"line":1585},[74,86089,69414],{"class":134},[74,86091,55718],{"class":84},[74,86093,584],{"class":134},[74,86095,55773],{"class":80},[74,86097,1252],{"class":84},[74,86099,86100,86102,86104,86106],{"class":76,"line":1590},[74,86101,61567],{"class":134},[74,86103,55718],{"class":84},[74,86105,55873],{"class":134},[74,86107,1252],{"class":84},[74,86109,86110,86112,86114,86116],{"class":76,"line":1604},[74,86111,59165],{"class":134},[74,86113,55718],{"class":84},[74,86115,55926],{"class":134},[74,86117,1252],{"class":84},[74,86119,86120],{"class":76,"line":1609},[74,86121,2149],{"class":84},[74,86123,86124,86126,86128],{"class":76,"line":1615},[74,86125,56698],{"class":84},[74,86127,5090],{"class":55581},[74,86129,55588],{"class":84},[74,86131,86132,86134,86136],{"class":76,"line":1636},[74,86133,56066],{"class":84},[74,86135,55615],{"class":55581},[74,86137,55588],{"class":84},[74,86139,86140],{"class":76,"line":1641},[74,86141,2363],{"emptyLinePlaceholder":2362},[74,86143,86144,86146,86148],{"class":76,"line":1655},[74,86145,996],{"class":84},[74,86147,56081],{"class":55581},[74,86149,55588],{"class":84},[74,86151,86152,86154,86156,86158,86160],{"class":76,"line":1660},[74,86153,56425],{"class":84},[74,86155,55892],{"class":55581},[74,86157,59595],{"class":84},[74,86159,55892],{"class":55581},[74,86161,55588],{"class":84},[74,86163,86164,86166,86168],{"class":76,"line":1689},[74,86165,56425],{"class":84},[74,86167,56094],{"class":55581},[74,86169,55588],{"class":84},[74,86171,86172,86174,86177,86179,86182,86185,86187,86190],{"class":76,"line":1694},[74,86173,15500],{"class":80},[74,86175,86176],{"class":134}," spec",[74,86178,17843],{"class":80},[74,86180,86181],{"class":84}," { size: ",[74,86183,86184],{"class":190},"'40cm*40cm'",[74,86186,59745],{"class":84},[74,86188,86189],{"class":190},"'黑色'",[74,86191,59885],{"class":84},[74,86193,86194],{"class":76,"line":1711},[74,86195,86196],{"class":144},"    \u002F\u002F const arr = Object.values(spec)\n",[74,86198,86199],{"class":76,"line":1716},[74,86200,86201],{"class":144},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[74,86203,86204,86206,86208,86210,86213,86215,86217,86220,86223,86226,86228,86230,86233],{"class":76,"line":1721},[74,86205,56688],{"class":84},[74,86207,58680],{"class":1925},[74,86209,85],{"class":84},[74,86211,86212],{"class":190},"'div'",[74,86214,78530],{"class":84},[74,86216,131],{"class":80},[74,86218,86219],{"class":84}," Object.",[74,86221,86222],{"class":1925},"values",[74,86224,86225],{"class":84},"(spec).",[74,86227,78504],{"class":1925},[74,86229,85],{"class":84},[74,86231,86232],{"class":190},"'\u002F'",[74,86234,91],{"class":84},[74,86236,86237,86239,86241],{"class":76,"line":1726},[74,86238,56698],{"class":84},[74,86240,56094],{"class":55581},[74,86242,55588],{"class":84},[74,86244,86245,86247,86249],{"class":76,"line":1740},[74,86246,56066],{"class":84},[74,86248,56081],{"class":55581},[74,86250,55588],{"class":84},[74,86252,86253],{"class":76,"line":1745},[74,86254,2363],{"emptyLinePlaceholder":2362},[74,86256,86257,86259,86261],{"class":76,"line":2540},[74,86258,56066],{"class":84},[74,86260,54916],{"class":55581},[74,86262,55588],{"class":84},[19,86264,86265],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[27189,86267,86269],{"id":86268},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,86271,86272],{},"静态方法，将伪数组转换为真数组",[19,86274,86275],{},[1424,86276],{"alt":69,"src":86277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[64,86279,86281],{"className":57348,"code":86280,"language":57350,"meta":69,"style":69},"\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",[71,86282,86283,86291,86299,86311,86323,86335,86343,86351,86356,86361,86366,86371,86379],{"__ignoreMap":69},[74,86284,86285,86287,86289],{"class":76,"line":77},[74,86286,996],{"class":84},[74,86288,56081],{"class":55581},[74,86290,55588],{"class":84},[74,86292,86293,86295,86297],{"class":76,"line":94},[74,86294,56425],{"class":84},[74,86296,1093],{"class":55581},[74,86298,55588],{"class":84},[74,86300,86301,86303,86305,86307,86309],{"class":76,"line":1141},[74,86302,55622],{"class":84},[74,86304,30],{"class":55581},[74,86306,59595],{"class":84},[74,86308,30],{"class":55581},[74,86310,55588],{"class":84},[74,86312,86313,86315,86317,86319,86321],{"class":76,"line":1156},[74,86314,55622],{"class":84},[74,86316,30],{"class":55581},[74,86318,59595],{"class":84},[74,86320,30],{"class":55581},[74,86322,55588],{"class":84},[74,86324,86325,86327,86329,86331,86333],{"class":76,"line":1162},[74,86326,55622],{"class":84},[74,86328,30],{"class":55581},[74,86330,59595],{"class":84},[74,86332,30],{"class":55581},[74,86334,55588],{"class":84},[74,86336,86337,86339,86341],{"class":76,"line":1176},[74,86338,56698],{"class":84},[74,86340,1093],{"class":55581},[74,86342,55588],{"class":84},[74,86344,86345,86347,86349],{"class":76,"line":1182},[74,86346,56425],{"class":84},[74,86348,56094],{"class":55581},[74,86350,55588],{"class":84},[74,86352,86353],{"class":76,"line":1273},[74,86354,86355],{"class":84},"    const lis = document.querySelectorAll('li')\n",[74,86357,86358],{"class":76,"line":1279},[74,86359,86360],{"class":84},"    const liss = Array.from(lis)\n",[74,86362,86363],{"class":76,"line":1291},[74,86364,86365],{"class":84},"    liss.pop()\n",[74,86367,86368],{"class":76,"line":1574},[74,86369,86370],{"class":84},"    console.log(liss)\n",[74,86372,86373,86375,86377],{"class":76,"line":1579},[74,86374,56698],{"class":84},[74,86376,56094],{"class":55581},[74,86378,55588],{"class":84},[74,86380,86381,86383,86385],{"class":76,"line":1585},[74,86382,56066],{"class":84},[74,86384,56081],{"class":55581},[74,86386,55588],{"class":84},[19,86388,86389],{},[1424,86390],{"alt":69,"src":86391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[26277,86393,86395],{"id":86394},"_41053-string","4.10.5.3 String",[19,86397,86398],{},[1424,86399],{"alt":69,"src":86400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[27189,86402,86404],{"id":86403},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[64,86406,86408],{"className":57348,"code":86407,"language":57350,"meta":69,"style":69},"\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",[71,86409,86410,86418,86426,86431,86436,86441,86445,86450,86455,86460,86468],{"__ignoreMap":69},[74,86411,86412,86414,86416],{"class":76,"line":77},[74,86413,996],{"class":84},[74,86415,56081],{"class":55581},[74,86417,55588],{"class":84},[74,86419,86420,86422,86424],{"class":76,"line":94},[74,86421,56425],{"class":84},[74,86423,56094],{"class":55581},[74,86425,55588],{"class":84},[74,86427,86428],{"class":76,"line":1141},[74,86429,86430],{"class":84},"    \u002F\u002F 把字符串转化为数组\n",[74,86432,86433],{"class":76,"line":1156},[74,86434,86435],{"class":84},"    const str = 'pink,red'\n",[74,86437,86438],{"class":76,"line":1162},[74,86439,86440],{"class":84},"    const arr = str.split(',')\n",[74,86442,86443],{"class":76,"line":1176},[74,86444,84919],{"class":84},[74,86446,86447],{"class":76,"line":1182},[74,86448,86449],{"class":84},"    const str1 = '2025-8-25'\n",[74,86451,86452],{"class":76,"line":1273},[74,86453,86454],{"class":84},"    const arr1 = str1.split('-')\n",[74,86456,86457],{"class":76,"line":1279},[74,86458,86459],{"class":84},"    console.log(arr1)\n",[74,86461,86462,86464,86466],{"class":76,"line":1291},[74,86463,56698],{"class":84},[74,86465,56094],{"class":55581},[74,86467,55588],{"class":84},[74,86469,86470,86472,86474],{"class":76,"line":1574},[74,86471,56066],{"class":84},[74,86473,56081],{"class":55581},[74,86475,55588],{"class":84},[27189,86477,86479],{"id":86478},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,86481,9460],{},[19,86483,86484],{},"substring(indexStart)",[19,86486,86487],{},"substring(indexStart, indexEnd)",[1093,86489,86490,86501,86513,86523],{},[30,86491,86492,86493,86496,86497,86500],{},"如果省略了 ",[71,86494,86495],{},"indexEnd","，则 ",[71,86498,86499],{},"substring()"," 提取字符直到字符串的末尾",[30,86502,86503,86504,86507,86508,86496,86510,86512],{},"如果 ",[71,86505,86506],{},"indexStart"," 等于 ",[71,86509,86495],{},[71,86511,86499],{}," 返回一个空字符串",[30,86514,86503,86515,86517,86518,86496,86520,86522],{},[71,86516,86506],{}," 大于 ",[71,86519,86495],{},[71,86521,86499],{}," 的效果就像交换了这两个参数一样",[30,86524,86525],{},"结束的索引号不包含想要截取的部分",[64,86527,86529],{"className":85770,"code":86528,"language":85772,"meta":69,"style":69},"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",[71,86530,86531,86543,86547,86581,86611,86615,86646,86650,86677,86707,86737,86741,86772],{"__ignoreMap":69},[74,86532,86533,86536,86538,86541],{"class":76,"line":77},[74,86534,86535],{"class":84},"const anyString ",[74,86537,131],{"class":80},[74,86539,86540],{"class":190}," \"Mozilla\"",[74,86542,1252],{"class":84},[74,86544,86545],{"class":76,"line":94},[74,86546,2363],{"emptyLinePlaceholder":2362},[74,86548,86549,86552,86554,86556,86558,86561,86563,86566,86568,86570,86572,86574,86576,86578],{"class":76,"line":1141},[74,86550,86551],{"class":134},"console",[74,86553,644],{"class":84},[74,86555,62528],{"class":134},[74,86557,85],{"class":84},[74,86559,86560],{"class":134},"anyString",[74,86562,644],{"class":84},[74,86564,86565],{"class":134},"substring",[74,86567,85],{"class":84},[74,86569,277],{"class":134},[74,86571,16714],{"class":84},[74,86573,303],{"class":134},[74,86575,79534],{"class":84},[74,86577,37610],{"class":80},[74,86579,86580],{"class":190}," 'M'\n",[74,86582,86583,86585,86587,86589,86591,86593,86595,86597,86599,86601,86603,86605,86607,86609],{"class":76,"line":1156},[74,86584,86551],{"class":134},[74,86586,644],{"class":84},[74,86588,62528],{"class":134},[74,86590,85],{"class":84},[74,86592,86560],{"class":134},[74,86594,644],{"class":84},[74,86596,86565],{"class":134},[74,86598,85],{"class":84},[74,86600,303],{"class":134},[74,86602,16714],{"class":84},[74,86604,277],{"class":134},[74,86606,79534],{"class":84},[74,86608,37610],{"class":80},[74,86610,86580],{"class":190},[74,86612,86613],{"class":76,"line":1162},[74,86614,2363],{"emptyLinePlaceholder":2362},[74,86616,86617,86619,86621,86623,86625,86627,86629,86631,86633,86635,86637,86639,86641,86643],{"class":76,"line":1176},[74,86618,86551],{"class":134},[74,86620,644],{"class":84},[74,86622,62528],{"class":134},[74,86624,85],{"class":84},[74,86626,86560],{"class":134},[74,86628,644],{"class":84},[74,86630,86565],{"class":134},[74,86632,85],{"class":84},[74,86634,277],{"class":134},[74,86636,16714],{"class":84},[74,86638,430],{"class":134},[74,86640,79534],{"class":84},[74,86642,37610],{"class":80},[74,86644,86645],{"class":190}," 'Mozill'\n",[74,86647,86648],{"class":76,"line":1182},[74,86649,2363],{"emptyLinePlaceholder":2362},[74,86651,86652,86654,86656,86658,86660,86662,86664,86666,86668,86670,86672,86674],{"class":76,"line":1273},[74,86653,86551],{"class":134},[74,86655,644],{"class":84},[74,86657,62528],{"class":134},[74,86659,85],{"class":84},[74,86661,86560],{"class":134},[74,86663,644],{"class":84},[74,86665,86565],{"class":134},[74,86667,85],{"class":84},[74,86669,379],{"class":134},[74,86671,79534],{"class":84},[74,86673,37610],{"class":80},[74,86675,86676],{"class":190}," 'lla'\n",[74,86678,86679,86681,86683,86685,86687,86689,86691,86693,86695,86697,86699,86701,86703,86705],{"class":76,"line":1279},[74,86680,86551],{"class":134},[74,86682,644],{"class":84},[74,86684,62528],{"class":134},[74,86686,85],{"class":84},[74,86688,86560],{"class":134},[74,86690,644],{"class":84},[74,86692,86565],{"class":134},[74,86694,85],{"class":84},[74,86696,379],{"class":134},[74,86698,16714],{"class":84},[74,86700,455],{"class":134},[74,86702,79590],{"class":84},[74,86704,37610],{"class":80},[74,86706,86676],{"class":190},[74,86708,86709,86711,86713,86715,86717,86719,86721,86723,86725,86727,86729,86731,86733,86735],{"class":76,"line":1291},[74,86710,86551],{"class":134},[74,86712,644],{"class":84},[74,86714,62528],{"class":134},[74,86716,85],{"class":84},[74,86718,86560],{"class":134},[74,86720,644],{"class":84},[74,86722,86565],{"class":134},[74,86724,85],{"class":84},[74,86726,455],{"class":134},[74,86728,16714],{"class":84},[74,86730,379],{"class":134},[74,86732,79534],{"class":84},[74,86734,37610],{"class":80},[74,86736,86676],{"class":190},[74,86738,86739],{"class":76,"line":1574},[74,86740,2363],{"emptyLinePlaceholder":2362},[74,86742,86743,86745,86747,86749,86751,86753,86755,86757,86759,86761,86763,86765,86767,86769],{"class":76,"line":1579},[74,86744,86551],{"class":134},[74,86746,644],{"class":84},[74,86748,62528],{"class":134},[74,86750,85],{"class":84},[74,86752,86560],{"class":134},[74,86754,644],{"class":84},[74,86756,86565],{"class":134},[74,86758,85],{"class":84},[74,86760,277],{"class":134},[74,86762,16714],{"class":84},[74,86764,455],{"class":134},[74,86766,79534],{"class":84},[74,86768,37610],{"class":80},[74,86770,86771],{"class":190}," 'Mozilla'\n",[74,86773,86774,86776,86778,86780,86782,86784,86786,86788,86790,86792,86794,86796,86798,86800],{"class":76,"line":1585},[74,86775,86551],{"class":134},[74,86777,644],{"class":84},[74,86779,62528],{"class":134},[74,86781,85],{"class":84},[74,86783,86560],{"class":134},[74,86785,644],{"class":84},[74,86787,86565],{"class":134},[74,86789,85],{"class":84},[74,86791,277],{"class":134},[74,86793,16714],{"class":84},[74,86795,532],{"class":134},[74,86797,79534],{"class":84},[74,86799,37610],{"class":80},[74,86801,86771],{"class":190},[27189,86803,86805],{"id":86804},"_410533-startswith","4.10.5.3.3 startsWith",[19,86807,86808,86811,86812,86817,86818,86820,86821],{},[71,86809,86810],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[235,86813,86814],{},[71,86815,86816],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[71,86819,1324],{}," 或 ",[71,86822,70301],{},[64,86824,86826],{"className":81776,"code":86825,"language":81778,"meta":69,"style":69},"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",[71,86827,86828,86840,86859,86864,86884],{"__ignoreMap":69},[74,86829,86830,86832,86835,86837],{"class":76,"line":77},[74,86831,11071],{"class":80},[74,86833,86834],{"class":84}," str1 ",[74,86836,131],{"class":80},[74,86838,86839],{"class":190}," \"Saturday night plans\"\n",[74,86841,86842,86844,86846,86849,86852,86854,86857],{"class":76,"line":94},[74,86843,81813],{"class":84},[74,86845,62528],{"class":1925},[74,86847,86848],{"class":84},"(str1.",[74,86850,86851],{"class":1925},"startsWith",[74,86853,85],{"class":84},[74,86855,86856],{"class":190},"\"Sat\"",[74,86858,34778],{"class":84},[74,86860,86861],{"class":76,"line":1141},[74,86862,86863],{"class":144},"\u002F\u002F Expected output: true\n",[74,86865,86866,86868,86870,86872,86874,86876,86878,86880,86882],{"class":76,"line":1156},[74,86867,81813],{"class":84},[74,86869,62528],{"class":1925},[74,86871,86848],{"class":84},[74,86873,86851],{"class":1925},[74,86875,85],{"class":84},[74,86877,86856],{"class":190},[74,86879,16714],{"class":84},[74,86881,157],{"class":134},[74,86883,34778],{"class":84},[74,86885,86886],{"class":76,"line":1162},[74,86887,86888],{"class":144},"\u002F\u002F Expected output: false\n",[64,86890,86892],{"className":54914,"code":86891,"language":54916,"meta":69,"style":69},"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",[71,86893,86894,86899,86904,86908,86913,86918],{"__ignoreMap":69},[74,86895,86896],{"class":76,"line":77},[74,86897,86898],{"class":84},"startsWith(searchString)\n",[74,86900,86901],{"class":76,"line":94},[74,86902,86903],{"class":84},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[74,86905,86906],{"class":76,"line":1141},[74,86907,2363],{"emptyLinePlaceholder":2362},[74,86909,86910],{"class":76,"line":1156},[74,86911,86912],{"class":84},"const str3 = 'pink老师上课中'\n",[74,86914,86915],{"class":76,"line":1162},[74,86916,86917],{"class":84},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[74,86919,86920],{"class":76,"line":1176},[74,86921,86922],{"class":84},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[27189,86924,86926],{"id":86925},"_410534-includes","4.10.5.3.4 includes",[19,86928,86929],{},"includes(searchString) includes(searchString, position)",[27,86931,86932],{},[30,86933,86934],{},"searchString:",[19,86936,86937,86938,86940,86941,86946,86947,86952,86953,25779,86956,86959,86960,86963],{},"一个要在 ",[71,86939,1261],{}," 中查找的字符串。",[324,86942,86945],{"href":86943,"rel":86944},"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",[28145],"不能是正则表达式","。所有非正则表达式的值都会被",[324,86948,86951],{"href":86949,"rel":86950},"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",[28145],"强制转换为字符串","，因此如果该参数被省略或传入 ",[71,86954,86955],{},"undefined",[71,86957,86958],{},"includes()"," 方法会在字符串中搜索 ",[71,86961,86962],{},"\"undefined\"","，这通常不是你想要的",[27,86965,86966],{"start":94},[30,86967,86968,945],{},[71,86969,86970],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,86972,86973,86974,86977,86978],{},"在字符串中开始搜索 ",[71,86975,86976],{},"searchString"," 的位置。默认值为 ",[71,86979,277],{},[27,86981,86982],{"start":1141},[30,86983,86984],{},"返回值：",[19,86986,86987,86988,86990,86991,86995,86996],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[71,86989,86976],{}," 为空字符串的情况），则返回 ",[235,86992,86993],{},[71,86994,1324],{}," ，否则返回 ",[235,86997,86998],{},[71,86999,70301],{},[27,87001,87002],{"start":1156},[30,87003,87004],{},"异常：",[19,87006,86503,87007,18074,87009,87013],{},[71,87008,86976],{},[324,87010,87012],{"href":86943,"rel":87011},[28145],"是一个正则表达式","，则会抛出",[19,87015,87016],{},"只要是有就是true，不需要非得以谁开头结尾",[64,87018,87020],{"className":81776,"code":87019,"language":81778,"meta":69,"style":69},"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",[71,87021,87022,87033,87056,87075,87095,87117,87136],{"__ignoreMap":69},[74,87023,87024,87026,87028,87030],{"class":76,"line":77},[74,87025,11071],{"class":80},[74,87027,84056],{"class":84},[74,87029,131],{"class":80},[74,87031,87032],{"class":190}," \"To be, or not to be, that is the question.\"\n",[74,87034,87035,87037,87039,87042,87045,87047,87050,87053],{"class":76,"line":94},[74,87036,81813],{"class":84},[74,87038,62528],{"class":1925},[74,87040,87041],{"class":84},"(str.",[74,87043,87044],{"class":1925},"includes",[74,87046,85],{"class":84},[74,87048,87049],{"class":190},"\"To be\"",[74,87051,87052],{"class":84},"))",[74,87054,87055],{"class":144},"  \u002F\u002F true\n",[74,87057,87058,87060,87062,87064,87066,87068,87071,87073],{"class":76,"line":1141},[74,87059,81813],{"class":84},[74,87061,62528],{"class":1925},[74,87063,87041],{"class":84},[74,87065,87044],{"class":1925},[74,87067,85],{"class":84},[74,87069,87070],{"class":190},"\"question\"",[74,87072,87052],{"class":84},[74,87074,87055],{"class":144},[74,87076,87077,87079,87081,87083,87085,87087,87090,87092],{"class":76,"line":1156},[74,87078,81813],{"class":84},[74,87080,62528],{"class":1925},[74,87082,87041],{"class":84},[74,87084,87044],{"class":1925},[74,87086,85],{"class":84},[74,87088,87089],{"class":190},"\"nonexistent\"",[74,87091,87052],{"class":84},[74,87093,87094],{"class":144},"  \u002F\u002F false\n",[74,87096,87097,87099,87101,87103,87105,87107,87109,87111,87113,87115],{"class":76,"line":1162},[74,87098,81813],{"class":84},[74,87100,62528],{"class":1925},[74,87102,87041],{"class":84},[74,87104,87044],{"class":1925},[74,87106,85],{"class":84},[74,87108,87049],{"class":190},[74,87110,16714],{"class":84},[74,87112,303],{"class":134},[74,87114,87052],{"class":84},[74,87116,87094],{"class":144},[74,87118,87119,87121,87123,87125,87127,87129,87132,87134],{"class":76,"line":1176},[74,87120,81813],{"class":84},[74,87122,62528],{"class":1925},[74,87124,87041],{"class":84},[74,87126,87044],{"class":1925},[74,87128,85],{"class":84},[74,87130,87131],{"class":190},"\"TO BE\"",[74,87133,87052],{"class":84},[74,87135,87094],{"class":144},[74,87137,87138,87140,87142,87144,87146,87148,87150,87152],{"class":76,"line":1182},[74,87139,81813],{"class":84},[74,87141,62528],{"class":1925},[74,87143,87041],{"class":84},[74,87145,87044],{"class":1925},[74,87147,85],{"class":84},[74,87149,11931],{"class":190},[74,87151,87052],{"class":84},[74,87153,87055],{"class":144},[27189,87155,87157],{"id":87156},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[64,87159,87161],{"className":57348,"code":87160,"language":57350,"meta":69,"style":69},"\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",[71,87162,87163,87171,87179,87184,87189,87194,87199,87204,87212],{"__ignoreMap":69},[74,87164,87165,87167,87169],{"class":76,"line":77},[74,87166,996],{"class":84},[74,87168,56081],{"class":55581},[74,87170,55588],{"class":84},[74,87172,87173,87175,87177],{"class":76,"line":94},[74,87174,56425],{"class":84},[74,87176,56094],{"class":55581},[74,87178,55588],{"class":84},[74,87180,87181],{"class":76,"line":1141},[74,87182,87183],{"class":84},"    const num = 10\n",[74,87185,87186],{"class":76,"line":1156},[74,87187,87188],{"class":84},"    \u002F\u002F 强制转换\n",[74,87190,87191],{"class":76,"line":1162},[74,87192,87193],{"class":84},"    console.log(String(num))\n",[74,87195,87196],{"class":76,"line":1176},[74,87197,87198],{"class":84},"    \u002F\u002F toString()方法转换\n",[74,87200,87201],{"class":76,"line":1182},[74,87202,87203],{"class":84},"    console.log(num.toString())\n",[74,87205,87206,87208,87210],{"class":76,"line":1273},[74,87207,56698],{"class":84},[74,87209,56094],{"class":55581},[74,87211,55588],{"class":84},[74,87213,87214,87216,87218],{"class":76,"line":1279},[74,87215,56066],{"class":84},[74,87217,56081],{"class":55581},[74,87219,55588],{"class":84},[27189,87221,87223],{"id":87222},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,87225,87226],{},[1424,87227],{"alt":69,"src":87228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[64,87230,87232],{"className":54914,"code":87231,"language":54916,"meta":69,"style":69},"\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",[71,87233,87234,87244,87258,87262,87270,87284,87304,87316,87324,87328,87336,87348,87356,87368,87373,87378,87383,87430,87446,87454,87462,87466],{"__ignoreMap":69},[74,87235,87236,87238,87240,87242],{"class":76,"line":77},[74,87237,55578],{"class":84},[74,87239,55582],{"class":55581},[74,87241,55585],{"class":1925},[74,87243,55588],{"class":84},[74,87245,87246,87248,87250,87252,87254,87256],{"class":76,"line":94},[74,87247,996],{"class":84},[74,87249,54916],{"class":55581},[74,87251,55597],{"class":1925},[74,87253,131],{"class":84},[74,87255,55602],{"class":190},[74,87257,55588],{"class":84},[74,87259,87260],{"class":76,"line":1141},[74,87261,2363],{"emptyLinePlaceholder":2362},[74,87263,87264,87266,87268],{"class":76,"line":1156},[74,87265,996],{"class":84},[74,87267,55615],{"class":55581},[74,87269,55588],{"class":84},[74,87271,87272,87274,87276,87278,87280,87282],{"class":76,"line":1162},[74,87273,56425],{"class":84},[74,87275,55625],{"class":55581},[74,87277,55628],{"class":1925},[74,87279,131],{"class":84},[74,87281,55633],{"class":190},[74,87283,55588],{"class":84},[74,87285,87286,87288,87290,87292,87294,87296,87298,87300,87302],{"class":76,"line":1176},[74,87287,56425],{"class":84},[74,87289,55625],{"class":55581},[74,87291,19199],{"class":1925},[74,87293,131],{"class":84},[74,87295,55672],{"class":190},[74,87297,55652],{"class":1925},[74,87299,131],{"class":84},[74,87301,55679],{"class":190},[74,87303,55588],{"class":84},[74,87305,87306,87308,87310,87312,87314],{"class":76,"line":1182},[74,87307,56425],{"class":84},[74,87309,55688],{"class":55581},[74,87311,55691],{"class":84},[74,87313,55688],{"class":55581},[74,87315,55588],{"class":84},[74,87317,87318,87320,87322],{"class":76,"line":1273},[74,87319,56066],{"class":84},[74,87321,55615],{"class":55581},[74,87323,55588],{"class":84},[74,87325,87326],{"class":76,"line":1279},[74,87327,2363],{"emptyLinePlaceholder":2362},[74,87329,87330,87332,87334],{"class":76,"line":1291},[74,87331,996],{"class":84},[74,87333,56081],{"class":55581},[74,87335,55588],{"class":84},[74,87337,87338,87340,87342,87344,87346],{"class":76,"line":1574},[74,87339,56425],{"class":84},[74,87341,55892],{"class":55581},[74,87343,59595],{"class":84},[74,87345,55892],{"class":55581},[74,87347,55588],{"class":84},[74,87349,87350,87352,87354],{"class":76,"line":1579},[74,87351,56425],{"class":84},[74,87353,56094],{"class":55581},[74,87355,55588],{"class":84},[74,87357,87358,87360,87363,87365],{"class":76,"line":1585},[74,87359,15500],{"class":80},[74,87361,87362],{"class":134}," gift",[74,87364,17843],{"class":80},[74,87366,87367],{"class":190}," '50g的茶叶，清洗球'\n",[74,87369,87370],{"class":76,"line":1590},[74,87371,87372],{"class":144},"    \u002F\u002F 1.把字符串拆分为数组\n",[74,87374,87375],{"class":76,"line":1604},[74,87376,87377],{"class":144},"    \u002F\u002F console.log(gift.split(','))\n",[74,87379,87380],{"class":76,"line":1609},[74,87381,87382],{"class":144},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[74,87384,87385,87387,87389,87391,87394,87397,87399,87402,87404,87406,87408,87410,87412,87415,87417,87420,87422,87424,87426,87428],{"class":76,"line":1615},[74,87386,15500],{"class":80},[74,87388,78200],{"class":134},[74,87390,17843],{"class":80},[74,87392,87393],{"class":84}," gift.",[74,87395,87396],{"class":1925},"split",[74,87398,85],{"class":84},[74,87400,87401],{"class":190},"'，'",[74,87403,35107],{"class":84},[74,87405,78325],{"class":1925},[74,87407,85],{"class":84},[74,87409,84076],{"class":9495},[74,87411,84079],{"class":80},[74,87413,87414],{"class":190}," `\u003Cspan>【赠品】${",[74,87416,84076],{"class":84},[74,87418,87419],{"class":190},"}\u003C\u002Fspan>\u003Cbr>`",[74,87421,35107],{"class":84},[74,87423,78504],{"class":1925},[74,87425,85],{"class":84},[74,87427,78509],{"class":190},[74,87429,91],{"class":84},[74,87431,87432,87434,87436,87438,87440,87442,87444],{"class":76,"line":1636},[74,87433,56688],{"class":84},[74,87435,58680],{"class":1925},[74,87437,85],{"class":84},[74,87439,86212],{"class":190},[74,87441,78530],{"class":84},[74,87443,131],{"class":80},[74,87445,78266],{"class":84},[74,87447,87448,87450,87452],{"class":76,"line":1641},[74,87449,56698],{"class":84},[74,87451,56094],{"class":55581},[74,87453,55588],{"class":84},[74,87455,87456,87458,87460],{"class":76,"line":1655},[74,87457,56066],{"class":84},[74,87459,56081],{"class":55581},[74,87461,55588],{"class":84},[74,87463,87464],{"class":76,"line":1660},[74,87465,2363],{"emptyLinePlaceholder":2362},[74,87467,87468,87470,87472],{"class":76,"line":1689},[74,87469,56066],{"class":84},[74,87471,54916],{"class":55581},[74,87473,55588],{"class":84},[26277,87475,87477],{"id":87476},"_41054-number","4.10.5.4 Number",[19,87479,87480],{},[1424,87481],{"alt":69,"src":87482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,87484,87485],{},"整数也可以进行toFixed来保留小数",[19,87487,87488],{},"比如：",[19,87490,87491],{},"const price=10",[19,87493,87494],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[26277,87496,87498],{"id":87497},"_41055-购物车展示","4.10.5.5 购物车展示",[19,87500,87501],{},[1424,87502],{"alt":69,"src":87503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[64,87505,87507],{"className":54914,"code":87506,"language":54916,"meta":69,"style":69},"\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",[71,87508,87509,87519,87533,87537,87545,87559,87579,87591,87599,87605,87615,87625,87635,87639,87643,87649,87661,87675,87679,87683,87689,87701,87717,87727,87743,87747,87751,87757,87767,87777,87781,87785,87793,87805,87817,87829,87833,87837,87845,87857,87861,87865,87876,87886,87898,87910,87920,87924,87928,87936,87945,87957,87967,87977,87981,87985,87993,88002,88009,88019,88031,88035,88039,88048,88058,88069,88081,88093,88097,88101,88110,88120,88131,88135,88139,88145,88157,88169,88179,88189,88207,88219,88223,88227,88236,88248,88258,88268,88280,88284,88292,88300,88304,88312,88326,88334,88348,88376,88384,88392,88402,88406,88414,88422,88431,88439,88448,88458,88462,88466,88474,88482,88491,88499,88507,88520,88524,88528,88536,88544,88553,88561,88569,88584,88588,88592,88600,88608,88617,88625,88633,88647,88655,88659,88663,88668,88694,88699,88736,88741,88764,88769,88823,88828,88864,88868,88874,88879,88888,88902,88911,88930,88939,88949,88954,88959,88972,88977,89031,89057,89065,89073,89077],{"__ignoreMap":69},[74,87510,87511,87513,87515,87517],{"class":76,"line":77},[74,87512,55578],{"class":84},[74,87514,55582],{"class":55581},[74,87516,55585],{"class":1925},[74,87518,55588],{"class":84},[74,87520,87521,87523,87525,87527,87529,87531],{"class":76,"line":94},[74,87522,996],{"class":84},[74,87524,54916],{"class":55581},[74,87526,55597],{"class":1925},[74,87528,131],{"class":84},[74,87530,55602],{"class":190},[74,87532,55588],{"class":84},[74,87534,87535],{"class":76,"line":1141},[74,87536,2363],{"emptyLinePlaceholder":2362},[74,87538,87539,87541,87543],{"class":76,"line":1156},[74,87540,996],{"class":84},[74,87542,55615],{"class":55581},[74,87544,55588],{"class":84},[74,87546,87547,87549,87551,87553,87555,87557],{"class":76,"line":1162},[74,87548,56425],{"class":84},[74,87550,55625],{"class":55581},[74,87552,55628],{"class":1925},[74,87554,131],{"class":84},[74,87556,55633],{"class":190},[74,87558,55588],{"class":84},[74,87560,87561,87563,87565,87567,87569,87571,87573,87575,87577],{"class":76,"line":1176},[74,87562,56425],{"class":84},[74,87564,55625],{"class":55581},[74,87566,19199],{"class":1925},[74,87568,131],{"class":84},[74,87570,55672],{"class":190},[74,87572,55652],{"class":1925},[74,87574,131],{"class":84},[74,87576,55679],{"class":190},[74,87578,55588],{"class":84},[74,87580,87581,87583,87585,87587,87589],{"class":76,"line":1182},[74,87582,56425],{"class":84},[74,87584,55688],{"class":55581},[74,87586,55691],{"class":84},[74,87588,55688],{"class":55581},[74,87590,55588],{"class":84},[74,87592,87593,87595,87597],{"class":76,"line":1273},[74,87594,56425],{"class":84},[74,87596,5090],{"class":55581},[74,87598,55588],{"class":84},[74,87600,87601,87603],{"class":76,"line":1279},[74,87602,10682],{"class":55581},[74,87604,19851],{"class":84},[74,87606,87607,87609,87611,87613],{"class":76,"line":1291},[74,87608,58976],{"class":134},[74,87610,55718],{"class":84},[74,87612,277],{"class":134},[74,87614,1252],{"class":84},[74,87616,87617,87619,87621,87623],{"class":76,"line":1574},[74,87618,58987],{"class":134},[74,87620,55718],{"class":84},[74,87622,277],{"class":134},[74,87624,1252],{"class":84},[74,87626,87627,87629,87631,87633],{"class":76,"line":1579},[74,87628,76877],{"class":134},[74,87630,55718],{"class":84},[74,87632,64786],{"class":134},[74,87634,1252],{"class":84},[74,87636,87637],{"class":76,"line":1585},[74,87638,2149],{"class":84},[74,87640,87641],{"class":76,"line":1590},[74,87642,2363],{"emptyLinePlaceholder":2362},[74,87644,87645,87647],{"class":76,"line":1604},[74,87646,66404],{"class":1925},[74,87648,19851],{"class":84},[74,87650,87651,87653,87655,87657,87659],{"class":76,"line":1609},[74,87652,59052],{"class":134},[74,87654,55718],{"class":84},[74,87656,82855],{"class":134},[74,87658,55773],{"class":80},[74,87660,1252],{"class":84},[74,87662,87663,87665,87667,87669,87671,87673],{"class":76,"line":1615},[74,87664,58987],{"class":134},[74,87666,55718],{"class":84},[74,87668,397],{"class":134},[74,87670,55773],{"class":80},[74,87672,55837],{"class":134},[74,87674,1252],{"class":84},[74,87676,87677],{"class":76,"line":1636},[74,87678,2149],{"class":84},[74,87680,87681],{"class":76,"line":1641},[74,87682,2363],{"emptyLinePlaceholder":2362},[74,87684,87685,87687],{"class":76,"line":1655},[74,87686,82906],{"class":1925},[74,87688,19851],{"class":84},[74,87690,87691,87693,87695,87697,87699],{"class":76,"line":1660},[74,87692,58976],{"class":134},[74,87694,55718],{"class":84},[74,87696,661],{"class":134},[74,87698,55773],{"class":80},[74,87700,1252],{"class":84},[74,87702,87703,87705,87707,87709,87711,87713,87715],{"class":76,"line":1689},[74,87704,66141],{"class":134},[74,87706,55718],{"class":84},[74,87708,32402],{"class":134},[74,87710,82961],{"class":134},[74,87712,82964],{"class":134},[74,87714,781],{"class":80},[74,87716,1252],{"class":84},[74,87718,87719,87721,87723,87725],{"class":76,"line":1694},[74,87720,59290],{"class":134},[74,87722,55718],{"class":84},[74,87724,55758],{"class":134},[74,87726,1252],{"class":84},[74,87728,87729,87731,87733,87735,87737,87739,87741],{"class":76,"line":1711},[74,87730,66258],{"class":134},[74,87732,55718],{"class":84},[74,87734,303],{"class":134},[74,87736,55773],{"class":80},[74,87738,55802],{"class":134},[74,87740,66525],{"class":134},[74,87742,1252],{"class":84},[74,87744,87745],{"class":76,"line":1716},[74,87746,2149],{"class":84},[74,87748,87749],{"class":76,"line":1721},[74,87750,2363],{"emptyLinePlaceholder":2362},[74,87752,87753,87755],{"class":76,"line":1726},[74,87754,83024],{"class":1925},[74,87756,19851],{"class":84},[74,87758,87759,87761,87763,87765],{"class":76,"line":1740},[74,87760,66306],{"class":134},[74,87762,55718],{"class":84},[74,87764,66311],{"class":134},[74,87766,1252],{"class":84},[74,87768,87769,87771,87773,87775],{"class":76,"line":1745},[74,87770,59165],{"class":134},[74,87772,55718],{"class":84},[74,87774,66099],{"class":134},[74,87776,1252],{"class":84},[74,87778,87779],{"class":76,"line":2540},[74,87780,2149],{"class":84},[74,87782,87783],{"class":76,"line":2554},[74,87784,2363],{"emptyLinePlaceholder":2362},[74,87786,87787,87789,87791],{"class":76,"line":2562},[74,87788,82906],{"class":1925},[74,87790,59896],{"class":55581},[74,87792,19851],{"class":84},[74,87794,87795,87797,87799,87801,87803],{"class":76,"line":2567},[74,87796,59052],{"class":134},[74,87798,55718],{"class":84},[74,87800,698],{"class":134},[74,87802,55773],{"class":80},[74,87804,1252],{"class":84},[74,87806,87807,87809,87811,87813,87815],{"class":76,"line":2573},[74,87808,59066],{"class":134},[74,87810,55718],{"class":84},[74,87812,698],{"class":134},[74,87814,55773],{"class":80},[74,87816,1252],{"class":84},[74,87818,87819,87821,87823,87825,87827],{"class":76,"line":2579},[74,87820,66031],{"class":134},[74,87822,55718],{"class":84},[74,87824,405],{"class":134},[74,87826,55773],{"class":80},[74,87828,1252],{"class":84},[74,87830,87831],{"class":76,"line":2584},[74,87832,2149],{"class":84},[74,87834,87835],{"class":76,"line":12227},[74,87836,2363],{"emptyLinePlaceholder":2362},[74,87838,87839,87841,87843],{"class":76,"line":12251},[74,87840,82906],{"class":1925},[74,87842,66585],{"class":1925},[74,87844,19851],{"class":84},[74,87846,87847,87849,87851,87853,87855],{"class":76,"line":12256},[74,87848,59052],{"class":134},[74,87850,55718],{"class":84},[74,87852,1684],{"class":134},[74,87854,55773],{"class":80},[74,87856,1252],{"class":84},[74,87858,87859],{"class":76,"line":12262},[74,87860,2149],{"class":84},[74,87862,87863],{"class":76,"line":12289},[74,87864,2363],{"emptyLinePlaceholder":2362},[74,87866,87867,87869,87871,87874],{"class":76,"line":12294},[74,87868,82906],{"class":1925},[74,87870,66585],{"class":1925},[74,87872,87873],{"class":1925}," .tag",[74,87875,19851],{"class":84},[74,87877,87878,87880,87882,87884],{"class":76,"line":12300},[74,87879,59290],{"class":134},[74,87881,55718],{"class":84},[74,87883,65150],{"class":134},[74,87885,1252],{"class":84},[74,87887,87888,87890,87892,87894,87896],{"class":76,"line":12312},[74,87889,58976],{"class":134},[74,87891,55718],{"class":84},[74,87893,163],{"class":134},[74,87895,55773],{"class":80},[74,87897,1252],{"class":84},[74,87899,87900,87902,87904,87906,87908],{"class":76,"line":12324},[74,87901,59203],{"class":134},[74,87903,55718],{"class":84},[74,87905,584],{"class":134},[74,87907,55773],{"class":80},[74,87909,1252],{"class":84},[74,87911,87912,87914,87916,87918],{"class":76,"line":12336},[74,87913,61697],{"class":134},[74,87915,55718],{"class":84},[74,87917,66351],{"class":134},[74,87919,1252],{"class":84},[74,87921,87922],{"class":76,"line":13995},[74,87923,2149],{"class":84},[74,87925,87926],{"class":76,"line":14020},[74,87927,2363],{"emptyLinePlaceholder":2362},[74,87929,87930,87932,87934],{"class":76,"line":14043},[74,87931,82906],{"class":1925},[74,87933,83198],{"class":1925},[74,87935,35747],{"class":84},[74,87937,87938,87940,87943],{"class":76,"line":14067},[74,87939,82906],{"class":1925},[74,87941,87942],{"class":1925}," .sub-total",[74,87944,19851],{"class":84},[74,87946,87947,87949,87951,87953,87955],{"class":76,"line":14072},[74,87948,59203],{"class":134},[74,87950,55718],{"class":84},[74,87952,736],{"class":134},[74,87954,55773],{"class":80},[74,87956,1252],{"class":84},[74,87958,87959,87961,87963,87965],{"class":76,"line":14077},[74,87960,61697],{"class":134},[74,87962,55718],{"class":84},[74,87964,83221],{"class":134},[74,87966,1252],{"class":84},[74,87968,87969,87971,87973,87975],{"class":76,"line":14082},[74,87970,66118],{"class":134},[74,87972,55718],{"class":84},[74,87974,303],{"class":134},[74,87976,1252],{"class":84},[74,87978,87979],{"class":76,"line":14091},[74,87980,2149],{"class":84},[74,87982,87983],{"class":76,"line":14096},[74,87984,2363],{"emptyLinePlaceholder":2362},[74,87986,87987,87989,87991],{"class":76,"line":14102},[74,87988,82906],{"class":1925},[74,87990,83238],{"class":1925},[74,87992,35747],{"class":84},[74,87994,87995,87997,88000],{"class":76,"line":14123},[74,87996,82906],{"class":1925},[74,87998,87999],{"class":1925}," .sub-total::before",[74,88001,35747],{"class":84},[74,88003,88004,88007],{"class":76,"line":14129},[74,88005,88006],{"class":1925},"    .amount::before",[74,88008,19851],{"class":84},[74,88010,88011,88013,88015,88017],{"class":76,"line":14143},[74,88012,83245],{"class":134},[74,88014,55718],{"class":84},[74,88016,83250],{"class":190},[74,88018,1252],{"class":84},[74,88020,88021,88023,88025,88027,88029],{"class":76,"line":14149},[74,88022,59203],{"class":134},[74,88024,55718],{"class":84},[74,88026,584],{"class":134},[74,88028,55773],{"class":80},[74,88030,1252],{"class":84},[74,88032,88033],{"class":76,"line":14176},[74,88034,2149],{"class":84},[74,88036,88037],{"class":76,"line":14185},[74,88038,2363],{"emptyLinePlaceholder":2362},[74,88040,88041,88043,88046],{"class":76,"line":14191},[74,88042,82906],{"class":1925},[74,88044,88045],{"class":1925}," .spec",[74,88047,19851],{"class":84},[74,88049,88050,88052,88054,88056],{"class":76,"line":14199},[74,88051,66118],{"class":134},[74,88053,55718],{"class":84},[74,88055,163],{"class":134},[74,88057,1252],{"class":84},[74,88059,88060,88062,88064,88067],{"class":76,"line":14204},[74,88061,61697],{"class":134},[74,88063,55718],{"class":84},[74,88065,88066],{"class":134},"#888",[74,88068,1252],{"class":84},[74,88070,88071,88073,88075,88077,88079],{"class":76,"line":20883},[74,88072,59203],{"class":134},[74,88074,55718],{"class":84},[74,88076,635],{"class":134},[74,88078,55773],{"class":80},[74,88080,1252],{"class":84},[74,88082,88083,88085,88087,88089,88091],{"class":76,"line":20889},[74,88084,66281],{"class":134},[74,88086,55718],{"class":84},[74,88088,786],{"class":134},[74,88090,55773],{"class":80},[74,88092,1252],{"class":84},[74,88094,88095],{"class":76,"line":20912},[74,88096,2149],{"class":84},[74,88098,88099],{"class":76,"line":20918},[74,88100,2363],{"emptyLinePlaceholder":2362},[74,88102,88103,88105,88108],{"class":76,"line":20941},[74,88104,82906],{"class":1925},[74,88106,88107],{"class":1925}," .count",[74,88109,19851],{"class":84},[74,88111,88112,88114,88116,88118],{"class":76,"line":20955},[74,88113,66118],{"class":134},[74,88115,55718],{"class":84},[74,88117,303],{"class":134},[74,88119,1252],{"class":84},[74,88121,88122,88124,88126,88129],{"class":76,"line":20975},[74,88123,61697],{"class":134},[74,88125,55718],{"class":84},[74,88127,88128],{"class":134},"#aaa",[74,88130,1252],{"class":84},[74,88132,88133],{"class":76,"line":20981},[74,88134,2149],{"class":84},[74,88136,88137],{"class":76,"line":20992},[74,88138,2363],{"emptyLinePlaceholder":2362},[74,88140,88141,88143],{"class":76,"line":21015},[74,88142,76756],{"class":1925},[74,88144,19851],{"class":84},[74,88146,88147,88149,88151,88153,88155],{"class":76,"line":21037},[74,88148,59052],{"class":134},[74,88150,55718],{"class":84},[74,88152,82855],{"class":134},[74,88154,55773],{"class":80},[74,88156,1252],{"class":84},[74,88158,88159,88161,88163,88165,88167],{"class":76,"line":21042},[74,88160,58987],{"class":134},[74,88162,55718],{"class":84},[74,88164,277],{"class":134},[74,88166,55837],{"class":134},[74,88168,1252],{"class":84},[74,88170,88171,88173,88175,88177],{"class":76,"line":21048},[74,88172,59290],{"class":134},[74,88174,55718],{"class":84},[74,88176,55758],{"class":134},[74,88178,1252],{"class":84},[74,88180,88181,88183,88185,88187],{"class":76,"line":21062},[74,88182,59301],{"class":134},[74,88184,55718],{"class":84},[74,88186,55861],{"class":134},[74,88188,1252],{"class":84},[74,88190,88191,88194,88196,88198,88200,88202,88205],{"class":76,"line":21075},[74,88192,88193],{"class":134},"      border-top",[74,88195,55718],{"class":84},[74,88197,303],{"class":134},[74,88199,55773],{"class":80},[74,88201,55802],{"class":134},[74,88203,88204],{"class":134}," #4e4e4e",[74,88206,1252],{"class":84},[74,88208,88209,88211,88213,88215,88217],{"class":76,"line":21080},[74,88210,58976],{"class":134},[74,88212,55718],{"class":84},[74,88214,786],{"class":134},[74,88216,55773],{"class":80},[74,88218,1252],{"class":84},[74,88220,88221],{"class":76,"line":21094},[74,88222,2149],{"class":84},[74,88224,88225],{"class":76,"line":21099},[74,88226,2363],{"emptyLinePlaceholder":2362},[74,88228,88229,88231,88234],{"class":76,"line":21105},[74,88230,76756],{"class":1925},[74,88232,88233],{"class":1925}," .amount",[74,88235,19851],{"class":84},[74,88237,88238,88240,88242,88244,88246],{"class":76,"line":21110},[74,88239,59203],{"class":134},[74,88241,55718],{"class":84},[74,88243,736],{"class":134},[74,88245,55773],{"class":80},[74,88247,1252],{"class":84},[74,88249,88250,88252,88254,88256],{"class":76,"line":21124},[74,88251,61697],{"class":134},[74,88253,55718],{"class":84},[74,88255,83221],{"class":134},[74,88257,1252],{"class":84},[74,88259,88260,88262,88264,88266],{"class":76,"line":21129},[74,88261,66615],{"class":134},[74,88263,55718],{"class":84},[74,88265,55770],{"class":134},[74,88267,1252],{"class":84},[74,88269,88270,88272,88274,88276,88278],{"class":76,"line":21134},[74,88271,66031],{"class":134},[74,88273,55718],{"class":84},[74,88275,742],{"class":134},[74,88277,55773],{"class":80},[74,88279,1252],{"class":84},[74,88281,88282],{"class":76,"line":21148},[74,88283,2149],{"class":84},[74,88285,88286,88288,88290],{"class":76,"line":21160},[74,88287,56698],{"class":84},[74,88289,5090],{"class":55581},[74,88291,55588],{"class":84},[74,88293,88294,88296,88298],{"class":76,"line":21165},[74,88295,56066],{"class":84},[74,88297,55615],{"class":55581},[74,88299,55588],{"class":84},[74,88301,88302],{"class":76,"line":21178},[74,88303,2363],{"emptyLinePlaceholder":2362},[74,88305,88306,88308,88310],{"class":76,"line":21183},[74,88307,996],{"class":84},[74,88309,56081],{"class":55581},[74,88311,55588],{"class":84},[74,88313,88314,88316,88318,88320,88322,88324],{"class":76,"line":21188},[74,88315,56425],{"class":84},[74,88317,55892],{"class":55581},[74,88319,57767],{"class":1925},[74,88321,131],{"class":84},[74,88323,66889],{"class":190},[74,88325,55588],{"class":84},[74,88327,88328,88330,88332],{"class":76,"line":21193},[74,88329,56698],{"class":84},[74,88331,55892],{"class":55581},[74,88333,55588],{"class":84},[74,88335,88336,88338,88340,88342,88344,88346],{"class":76,"line":21206},[74,88337,56425],{"class":84},[74,88339,55892],{"class":55581},[74,88341,57767],{"class":1925},[74,88343,131],{"class":84},[74,88345,66861],{"class":190},[74,88347,55588],{"class":84},[74,88349,88350,88352,88354,88357,88359,88361,88363,88366,88368,88370,88372,88374],{"class":76,"line":21211},[74,88351,55622],{"class":84},[74,88353,55892],{"class":55581},[74,88355,88356],{"class":84},">合计：\u003C",[74,88358,74],{"class":55581},[74,88360,57767],{"class":1925},[74,88362,131],{"class":84},[74,88364,88365],{"class":190},"\"amount\"",[74,88367,59595],{"class":84},[74,88369,74],{"class":55581},[74,88371,59595],{"class":84},[74,88373,55892],{"class":55581},[74,88375,55588],{"class":84},[74,88377,88378,88380,88382],{"class":76,"line":36914},[74,88379,56698],{"class":84},[74,88381,55892],{"class":55581},[74,88383,55588],{"class":84},[74,88385,88386,88388,88390],{"class":76,"line":36920},[74,88387,56425],{"class":84},[74,88389,56094],{"class":55581},[74,88391,55588],{"class":84},[74,88393,88394,88396,88398,88400],{"class":76,"line":36926},[74,88395,15500],{"class":80},[74,88397,83658],{"class":134},[74,88399,17843],{"class":80},[74,88401,59728],{"class":84},[74,88403,88404],{"class":76,"line":36932},[74,88405,83667],{"class":84},[74,88407,88408,88410,88412],{"class":76,"line":36938},[74,88409,83672],{"class":84},[74,88411,83675],{"class":190},[74,88413,35747],{"class":84},[74,88415,88416,88418,88420],{"class":76,"line":36949},[74,88417,83682],{"class":84},[74,88419,83685],{"class":190},[74,88421,35747],{"class":84},[74,88423,88424,88426,88429],{"class":76,"line":36955},[74,88425,83692],{"class":84},[74,88427,88428],{"class":134},"289.9",[74,88430,35747],{"class":84},[74,88432,88433,88435,88437],{"class":76,"line":36975},[74,88434,83702],{"class":84},[74,88436,83705],{"class":190},[74,88438,35747],{"class":84},[74,88440,88441,88444,88446],{"class":76,"line":36981},[74,88442,88443],{"class":84},"        count: ",[74,88445,163],{"class":134},[74,88447,35747],{"class":84},[74,88449,88450,88453,88456],{"class":76,"line":36992},[74,88451,88452],{"class":84},"        spec: { color: ",[74,88454,88455],{"class":190},"'白色'",[74,88457,59885],{"class":84},[74,88459,88460],{"class":76,"line":36998},[74,88461,82173],{"class":84},[74,88463,88464],{"class":76,"line":37004},[74,88465,83667],{"class":84},[74,88467,88468,88470,88472],{"class":76,"line":37010},[74,88469,83672],{"class":84},[74,88471,83766],{"class":190},[74,88473,35747],{"class":84},[74,88475,88476,88478,88480],{"class":76,"line":37016},[74,88477,83682],{"class":84},[74,88479,83775],{"class":190},[74,88481,35747],{"class":84},[74,88483,88484,88486,88489],{"class":76,"line":37022},[74,88485,83692],{"class":84},[74,88487,88488],{"class":134},"109.8",[74,88490,35747],{"class":84},[74,88492,88493,88495,88497],{"class":76,"line":37028},[74,88494,83702],{"class":84},[74,88496,83793],{"class":190},[74,88498,35747],{"class":84},[74,88500,88501,88503,88505],{"class":76,"line":37034},[74,88502,88443],{"class":84},[74,88504,157],{"class":134},[74,88506,35747],{"class":84},[74,88508,88509,88512,88514,88516,88518],{"class":76,"line":37054},[74,88510,88511],{"class":84},"        spec: { size: ",[74,88513,86184],{"class":190},[74,88515,59745],{"class":84},[74,88517,86189],{"class":190},[74,88519,59885],{"class":84},[74,88521,88522],{"class":76,"line":37060},[74,88523,82173],{"class":84},[74,88525,88526],{"class":76,"line":37076},[74,88527,83667],{"class":84},[74,88529,88530,88532,88534],{"class":76,"line":37082},[74,88531,83672],{"class":84},[74,88533,83810],{"class":190},[74,88535,35747],{"class":84},[74,88537,88538,88540,88542],{"class":76,"line":37096},[74,88539,83682],{"class":84},[74,88541,83819],{"class":190},[74,88543,35747],{"class":84},[74,88545,88546,88548,88551],{"class":76,"line":37102},[74,88547,83692],{"class":84},[74,88549,88550],{"class":134},"488",[74,88552,35747],{"class":84},[74,88554,88555,88557,88559],{"class":76,"line":37117},[74,88556,83702],{"class":84},[74,88558,83837],{"class":190},[74,88560,35747],{"class":84},[74,88562,88563,88565,88567],{"class":76,"line":37123},[74,88564,88443],{"class":84},[74,88566,303],{"class":134},[74,88568,35747],{"class":84},[74,88570,88571,88573,88576,88579,88582],{"class":76,"line":37132},[74,88572,88452],{"class":84},[74,88574,88575],{"class":190},"'青色'",[74,88577,88578],{"class":84},", sum: ",[74,88580,88581],{"class":190},"'一大四小'",[74,88583,59885],{"class":84},[74,88585,88586],{"class":76,"line":37138},[74,88587,82173],{"class":84},[74,88589,88590],{"class":76,"line":37147},[74,88591,83667],{"class":84},[74,88593,88594,88596,88598],{"class":76,"line":37153},[74,88595,83672],{"class":84},[74,88597,83854],{"class":190},[74,88599,35747],{"class":84},[74,88601,88602,88604,88606],{"class":76,"line":37159},[74,88603,83682],{"class":84},[74,88605,83863],{"class":190},[74,88607,35747],{"class":84},[74,88609,88610,88612,88615],{"class":76,"line":37168},[74,88611,83692],{"class":84},[74,88613,88614],{"class":134},"139",[74,88616,35747],{"class":84},[74,88618,88619,88621,88623],{"class":76,"line":37174},[74,88620,83702],{"class":84},[74,88622,83881],{"class":190},[74,88624,35747],{"class":84},[74,88626,88627,88629,88631],{"class":76,"line":37185},[74,88628,88443],{"class":84},[74,88630,303],{"class":134},[74,88632,35747],{"class":84},[74,88634,88635,88637,88640,88642,88645],{"class":76,"line":37191},[74,88636,88511],{"class":84},[74,88638,88639],{"class":190},"'小号'",[74,88641,59745],{"class":84},[74,88643,88644],{"class":190},"'紫色'",[74,88646,59751],{"class":84},[74,88648,88649,88652],{"class":76,"line":37210},[74,88650,88651],{"class":84},"        gift: ",[74,88653,88654],{"class":190},"'50g茶叶,清洗球'\n",[74,88656,88657],{"class":76,"line":37216},[74,88658,56679],{"class":84},[74,88660,88661],{"class":76,"line":37227},[74,88662,57390],{"class":84},[74,88664,88665],{"class":76,"line":37233},[74,88666,88667],{"class":144},"    \u002F\u002F  1.根据数据渲染页面\n",[74,88669,88670,88672,88674,88676,88678,88680,88682,88684,88686,88688,88690,88692],{"class":76,"line":37253},[74,88671,56688],{"class":84},[74,88673,58680],{"class":1925},[74,88675,85],{"class":84},[74,88677,84182],{"class":190},[74,88679,78530],{"class":84},[74,88681,131],{"class":80},[74,88683,84329],{"class":84},[74,88685,78325],{"class":1925},[74,88687,85],{"class":84},[74,88689,84076],{"class":9495},[74,88691,84079],{"class":80},[74,88693,19851],{"class":84},[74,88695,88696],{"class":76,"line":37269},[74,88697,88698],{"class":144},"      \u002F\u002F 对象解构\n",[74,88700,88701,88703,88705,88707,88709,88711,88713,88716,88718,88720,88722,88725,88727,88730,88732,88734],{"class":76,"line":37275},[74,88702,62509],{"class":80},[74,88704,84088],{"class":84},[74,88706,84101],{"class":134},[74,88708,16714],{"class":84},[74,88710,84091],{"class":134},[74,88712,16714],{"class":84},[74,88714,88715],{"class":134},"count",[74,88717,16714],{"class":84},[74,88719,84096],{"class":134},[74,88721,16714],{"class":84},[74,88723,88724],{"class":134},"spec",[74,88726,16714],{"class":84},[74,88728,88729],{"class":134},"gift",[74,88731,84104],{"class":84},[74,88733,131],{"class":80},[74,88735,84109],{"class":84},[74,88737,88738],{"class":76,"line":37289},[74,88739,88740],{"class":144},"      \u002F\u002F 规格文字模块处理\n",[74,88742,88743,88745,88748,88750,88752,88754,88756,88758,88760,88762],{"class":76,"line":37295},[74,88744,62509],{"class":80},[74,88746,88747],{"class":134}," text",[74,88749,17843],{"class":80},[74,88751,86219],{"class":84},[74,88753,86222],{"class":1925},[74,88755,86225],{"class":84},[74,88757,78504],{"class":1925},[74,88759,85],{"class":84},[74,88761,86232],{"class":190},[74,88763,91],{"class":84},[74,88765,88766],{"class":76,"line":37301},[74,88767,88768],{"class":144},"      \u002F\u002F 处理赠品模块\n",[74,88770,88771,88773,88775,88777,88780,88782,88784,88786,88788,88791,88793,88795,88797,88799,88801,88804,88806,88809,88811,88813,88815,88817,88819,88821],{"class":76,"line":37312},[74,88772,62509],{"class":80},[74,88774,78200],{"class":134},[74,88776,17843],{"class":80},[74,88778,88779],{"class":84}," gift ",[74,88781,1072],{"class":80},[74,88783,87393],{"class":84},[74,88785,87396],{"class":1925},[74,88787,85],{"class":84},[74,88789,88790],{"class":190},"','",[74,88792,35107],{"class":84},[74,88794,78325],{"class":1925},[74,88796,85],{"class":84},[74,88798,84076],{"class":9495},[74,88800,84079],{"class":80},[74,88802,88803],{"class":190}," `\u003Cspan class=\"tag\">【赠品】${",[74,88805,84076],{"class":84},[74,88807,88808],{"class":190},"}\u003C\u002Fspan>`",[74,88810,35107],{"class":84},[74,88812,78504],{"class":1925},[74,88814,85],{"class":84},[74,88816,78509],{"class":190},[74,88818,17993],{"class":84},[74,88820,945],{"class":80},[74,88822,74385],{"class":190},[74,88824,88825],{"class":76,"line":37318},[74,88826,88827],{"class":144},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[74,88829,88830,88832,88835,88837,88840,88842,88844,88846,88849,88851,88853,88855,88858,88860,88862],{"class":76,"line":37324},[74,88831,62509],{"class":80},[74,88833,88834],{"class":134}," subtotal",[74,88836,17843],{"class":80},[74,88838,88839],{"class":84}," ((price ",[74,88841,541],{"class":80},[74,88843,10033],{"class":134},[74,88845,10797],{"class":80},[74,88847,88848],{"class":84}," count) ",[74,88850,670],{"class":80},[74,88852,10033],{"class":134},[74,88854,35107],{"class":84},[74,88856,88857],{"class":1925},"toFixed",[74,88859,85],{"class":84},[74,88861,163],{"class":134},[74,88863,91],{"class":84},[74,88865,88866],{"class":76,"line":37334},[74,88867,2363],{"emptyLinePlaceholder":2362},[74,88869,88870,88872],{"class":76,"line":37340},[74,88871,78263],{"class":80},[74,88873,74449],{"class":190},[74,88875,88876],{"class":76,"line":37351},[74,88877,88878],{"class":190},"        \u003Cdiv class=\"item\">\n",[74,88880,88881,88884,88886],{"class":76,"line":37357},[74,88882,88883],{"class":190},"          \u003Cimg src=\"${",[74,88885,84101],{"class":84},[74,88887,84133],{"class":190},[74,88889,88890,88893,88895,88898,88900],{"class":76,"line":37367},[74,88891,88892],{"class":190},"          \u003Cp class=\"name\">${",[74,88894,84091],{"class":84},[74,88896,88897],{"class":190},"}${",[74,88899,1261],{"class":84},[74,88901,84143],{"class":190},[74,88903,88904,88907,88909],{"class":76,"line":37372},[74,88905,88906],{"class":190},"          \u003Cp class=\"spec\">${",[74,88908,9466],{"class":84},[74,88910,84143],{"class":190},[74,88912,88913,88916,88918,88920,88922,88924,88926,88928],{"class":76,"line":37378},[74,88914,88915],{"class":190},"          \u003Cp class=\"price\">${",[74,88917,84096],{"class":84},[74,88919,644],{"class":190},[74,88921,88857],{"class":1925},[74,88923,85],{"class":190},[74,88925,163],{"class":134},[74,88927,515],{"class":190},[74,88929,84143],{"class":190},[74,88931,88932,88935,88937],{"class":76,"line":37427},[74,88933,88934],{"class":190},"          \u003Cp class=\"count\">x${",[74,88936,88715],{"class":84},[74,88938,84143],{"class":190},[74,88940,88941,88944,88947],{"class":76,"line":37474},[74,88942,88943],{"class":190},"          \u003Cp class=\"sub-total\">${",[74,88945,88946],{"class":84},"subtotal",[74,88948,84143],{"class":190},[74,88950,88951],{"class":76,"line":37479},[74,88952,88953],{"class":190},"        \u003C\u002Fdiv> \n",[74,88955,88956],{"class":76,"line":37485},[74,88957,88958],{"class":190},"             `\n",[74,88960,88961,88964,88966,88968,88970],{"class":76,"line":37504},[74,88962,88963],{"class":84},"    }).",[74,88965,78504],{"class":1925},[74,88967,85],{"class":84},[74,88969,78509],{"class":190},[74,88971,91],{"class":84},[74,88973,88974],{"class":76,"line":37510},[74,88975,88976],{"class":144},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[74,88978,88979,88981,88983,88985,88987,88990,88992,88995,88997,88999,89001,89004,89007,89009,89012,89014,89016,89018,89021,89023,89025,89027,89029],{"class":76,"line":37530},[74,88980,15500],{"class":80},[74,88982,67066],{"class":134},[74,88984,17843],{"class":80},[74,88986,84329],{"class":84},[74,88988,88989],{"class":1925},"reduce",[74,88991,2338],{"class":84},[74,88993,88994],{"class":9495},"prev",[74,88996,16714],{"class":84},[74,88998,84076],{"class":9495},[74,89000,17993],{"class":84},[74,89002,89003],{"class":80},"=>",[74,89005,89006],{"class":84}," prev ",[74,89008,567],{"class":80},[74,89010,89011],{"class":84}," (item.price ",[74,89013,541],{"class":80},[74,89015,10033],{"class":134},[74,89017,10797],{"class":80},[74,89019,89020],{"class":84}," item.count) ",[74,89022,670],{"class":80},[74,89024,10033],{"class":134},[74,89026,16714],{"class":84},[74,89028,277],{"class":134},[74,89030,91],{"class":84},[74,89032,89033,89035,89037,89039,89042,89044,89046,89049,89051,89053,89055],{"class":76,"line":37536},[74,89034,56688],{"class":84},[74,89036,58680],{"class":1925},[74,89038,85],{"class":84},[74,89040,89041],{"class":190},"'.amount'",[74,89043,78530],{"class":84},[74,89045,131],{"class":80},[74,89047,89048],{"class":84}," total.",[74,89050,88857],{"class":1925},[74,89052,85],{"class":84},[74,89054,163],{"class":134},[74,89056,91],{"class":84},[74,89058,89059,89061,89063],{"class":76,"line":37542},[74,89060,56698],{"class":84},[74,89062,56094],{"class":55581},[74,89064,55588],{"class":84},[74,89066,89067,89069,89071],{"class":76,"line":37552},[74,89068,56066],{"class":84},[74,89070,56081],{"class":55581},[74,89072,55588],{"class":84},[74,89074,89075],{"class":76,"line":37557},[74,89076,2363],{"emptyLinePlaceholder":2362},[74,89078,89079,89081,89083],{"class":76,"line":37563},[74,89080,56066],{"class":84},[74,89082,54916],{"class":55581},[74,89084,55588],{"class":84},[14,89086,89088],{"id":89087},"_411-编程思想","4.11 编程思想",[44,89090,89092],{"id":89091},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,89094,89095,89098],{},[235,89096,89097],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,89100,89101],{},"调用就可以了",[19,89103,89104],{},[1424,89105],{"alt":69,"src":89106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[44,89108,89110],{"id":89109},"_4112-面向对象","4.11.2 面向对象",[19,89112,89113],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,89115,89116],{},[1424,89117],{"alt":69,"src":89118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,89120,89121],{},"面向对象的特性：",[1093,89123,89124,89127,89130],{},[30,89125,89126],{},"封装性",[30,89128,89129],{},"继承性",[30,89131,89132],{},"多态性",[44,89134,89136],{"id":89135},"_4113-两者比较","4.11.3 两者比较",[19,89138,89139],{},[1424,89140],{"alt":69,"src":89141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,89143,89145],{"id":89144},"_412-构造函数回顾","4.12 构造函数回顾",[19,89147,89148],{},[1424,89149],{"alt":69,"src":89150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,89152,89153],{},[1424,89154],{"alt":69,"src":89155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,89157,89158],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,89160,89161],{},[1424,89162],{"alt":69,"src":89163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,89165,89167],{"id":89166},"_413-原型","4.13 原型",[44,89169,89171],{"id":89170},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,89173,89174],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,89176,89177],{},[1424,89178],{"alt":69,"src":89179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,89181,89182],{},[1424,89183],{"alt":69,"src":89184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,89186,89187],{},"原型是构造函数的属性，它也是一个对象",[19,89189,89190],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,89192,89193],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[64,89195,89197],{"className":57348,"code":89196,"language":57350,"meta":69,"style":69},"\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",[71,89198,89199,89207,89212,89220,89225,89230,89235,89240,89245,89249,89253,89257,89262,89267,89271,89276,89281,89286,89291,89296,89300,89308],{"__ignoreMap":69},[74,89200,89201,89203,89205],{"class":76,"line":77},[74,89202,996],{"class":84},[74,89204,56081],{"class":55581},[74,89206,55588],{"class":84},[74,89208,89209],{"class":76,"line":94},[74,89210,89211],{"class":144},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[74,89213,89214,89216,89218],{"class":76,"line":1141},[74,89215,56425],{"class":84},[74,89217,56094],{"class":55581},[74,89219,55588],{"class":84},[74,89221,89222],{"class":76,"line":1156},[74,89223,89224],{"class":84},"    function Star(uname, age) {\n",[74,89226,89227],{"class":76,"line":1162},[74,89228,89229],{"class":84},"      this.uname = uname,\n",[74,89231,89232],{"class":76,"line":1176},[74,89233,89234],{"class":84},"        this.age = age\n",[74,89236,89237],{"class":76,"line":1182},[74,89238,89239],{"class":84},"      \u002F\u002F this.sing = function () {\n",[74,89241,89242],{"class":76,"line":1273},[74,89243,89244],{"class":84},"      \u002F\u002F   console.log('唱歌')\n",[74,89246,89247],{"class":76,"line":1279},[74,89248,2363],{"emptyLinePlaceholder":2362},[74,89250,89251],{"class":76,"line":1291},[74,89252,64318],{"class":84},[74,89254,89255],{"class":76,"line":1574},[74,89256,2149],{"class":84},[74,89258,89259],{"class":76,"line":1579},[74,89260,89261],{"class":84},"    Star.prototype.sing = function () {\n",[74,89263,89264],{"class":76,"line":1585},[74,89265,89266],{"class":84},"      console.log('唱歌')\n",[74,89268,89269],{"class":76,"line":1590},[74,89270,2149],{"class":84},[74,89272,89273],{"class":76,"line":1604},[74,89274,89275],{"class":84},"    \u002F\u002F console.dir(Star.prototype)\n",[74,89277,89278],{"class":76,"line":1609},[74,89279,89280],{"class":84},"    const pink = new Star('pink', 18)\n",[74,89282,89283],{"class":76,"line":1615},[74,89284,89285],{"class":84},"    const red = new Star('red', 20)\n",[74,89287,89288],{"class":76,"line":1636},[74,89289,89290],{"class":84},"    pink.sing()\n",[74,89292,89293],{"class":76,"line":1641},[74,89294,89295],{"class":84},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[74,89297,89298],{"class":76,"line":1655},[74,89299,2363],{"emptyLinePlaceholder":2362},[74,89301,89302,89304,89306],{"class":76,"line":1660},[74,89303,56698],{"class":84},[74,89305,56094],{"class":55581},[74,89307,55588],{"class":84},[74,89309,89310,89312,89314],{"class":76,"line":1689},[74,89311,56066],{"class":84},[74,89313,56081],{"class":55581},[74,89315,55588],{"class":84},[19,89317,89318],{},[1424,89319],{"alt":69,"src":89320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[64,89322,89324],{"className":57348,"code":89323,"language":57350,"meta":69,"style":69},"\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",[71,89325,89326,89334,89342,89347,89352,89357,89362,89366,89371,89376,89381,89385,89390,89394,89398,89403,89407,89415],{"__ignoreMap":69},[74,89327,89328,89330,89332],{"class":76,"line":77},[74,89329,996],{"class":84},[74,89331,56081],{"class":55581},[74,89333,55588],{"class":84},[74,89335,89336,89338,89340],{"class":76,"line":94},[74,89337,56425],{"class":84},[74,89339,56094],{"class":55581},[74,89341,55588],{"class":84},[74,89343,89344],{"class":76,"line":1141},[74,89345,89346],{"class":84},"    let that\n",[74,89348,89349],{"class":76,"line":1156},[74,89350,89351],{"class":84},"    function Star(uname) {\n",[74,89353,89354],{"class":76,"line":1162},[74,89355,89356],{"class":84},"      this.uname = uname\n",[74,89358,89359],{"class":76,"line":1176},[74,89360,89361],{"class":84},"      that = this\n",[74,89363,89364],{"class":76,"line":1182},[74,89365,2149],{"class":84},[74,89367,89368],{"class":76,"line":1273},[74,89369,89370],{"class":84},"    \u002F\u002F 实例对象是 ldh\n",[74,89372,89373],{"class":76,"line":1279},[74,89374,89375],{"class":84},"    const ldh = new Star('刘德华')\n",[74,89377,89378],{"class":76,"line":1291},[74,89379,89380],{"class":84},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[74,89382,89383],{"class":76,"line":1574},[74,89384,2363],{"emptyLinePlaceholder":2362},[74,89386,89387],{"class":76,"line":1579},[74,89388,89389],{"class":84},"    Star.sing = function () {\n",[74,89391,89392],{"class":76,"line":1585},[74,89393,89266],{"class":84},[74,89395,89396],{"class":76,"line":1590},[74,89397,2149],{"class":84},[74,89399,89400],{"class":76,"line":1604},[74,89401,89402],{"class":84},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[74,89404,89405],{"class":76,"line":1609},[74,89406,2363],{"emptyLinePlaceholder":2362},[74,89408,89409,89411,89413],{"class":76,"line":1615},[74,89410,56698],{"class":84},[74,89412,56094],{"class":55581},[74,89414,55588],{"class":84},[74,89416,89417,89419,89421],{"class":76,"line":1636},[74,89418,56066],{"class":84},[74,89420,56081],{"class":55581},[74,89422,55588],{"class":84},[19,89424,89425],{},"构造函数的this指向的是实例对象；",[19,89427,89428],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[44,89430,89432],{"id":89431},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,89434,89435],{},[1424,89436],{"alt":69,"src":89437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[64,89439,89441],{"className":57348,"code":89440,"language":57350,"meta":69,"style":69},"\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",[71,89442,89443,89451,89459,89464,89469,89474,89479,89484,89489,89494,89499,89504,89509,89513,89518,89523,89528,89533,89537,89542,89547,89552,89557,89561,89566,89571,89576,89581,89585,89590,89594,89602],{"__ignoreMap":69},[74,89444,89445,89447,89449],{"class":76,"line":77},[74,89446,996],{"class":84},[74,89448,56081],{"class":55581},[74,89450,55588],{"class":84},[74,89452,89453,89455,89457],{"class":76,"line":94},[74,89454,56425],{"class":84},[74,89456,56094],{"class":55581},[74,89458,55588],{"class":84},[74,89460,89461],{"class":76,"line":1141},[74,89462,89463],{"class":84},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[74,89465,89466],{"class":76,"line":1156},[74,89467,89468],{"class":84},"    const arr = [1, 2, 3]\n",[74,89470,89471],{"class":76,"line":1162},[74,89472,89473],{"class":84},"    \u002F\u002F 自己定义数组的扩展方法\n",[74,89475,89476],{"class":76,"line":1176},[74,89477,89478],{"class":84},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[74,89480,89481],{"class":76,"line":1182},[74,89482,89483],{"class":84},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[74,89485,89486],{"class":76,"line":1273},[74,89487,89488],{"class":84},"    \u002F\u002F ①.最大值\n",[74,89490,89491],{"class":76,"line":1279},[74,89492,89493],{"class":84},"    Array.prototype.max = function () {\n",[74,89495,89496],{"class":76,"line":1291},[74,89497,89498],{"class":84},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[74,89500,89501],{"class":76,"line":1574},[74,89502,89503],{"class":84},"      return Math.max(...this)\n",[74,89505,89506],{"class":76,"line":1579},[74,89507,89508],{"class":84},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[74,89510,89511],{"class":76,"line":1585},[74,89512,2149],{"class":84},[74,89514,89515],{"class":76,"line":1590},[74,89516,89517],{"class":84},"    console.log(arr.max())\n",[74,89519,89520],{"class":76,"line":1604},[74,89521,89522],{"class":84},"    \u002F\u002F ②最小值\n",[74,89524,89525],{"class":76,"line":1609},[74,89526,89527],{"class":84},"    Array.prototype.min = function () {\n",[74,89529,89530],{"class":76,"line":1615},[74,89531,89532],{"class":84},"      return Math.min(...this)\n",[74,89534,89535],{"class":76,"line":1636},[74,89536,2149],{"class":84},[74,89538,89539],{"class":76,"line":1641},[74,89540,89541],{"class":84},"    console.log(arr.min())\n",[74,89543,89544],{"class":76,"line":1655},[74,89545,89546],{"class":84},"    \u002F\u002F③求和\n",[74,89548,89549],{"class":76,"line":1660},[74,89550,89551],{"class":84},"    Array.prototype.sum = function () {\n",[74,89553,89554],{"class":76,"line":1689},[74,89555,89556],{"class":84},"      return this.reduce((prev, current) => prev + current, 0)\n",[74,89558,89559],{"class":76,"line":1694},[74,89560,2149],{"class":84},[74,89562,89563],{"class":76,"line":1711},[74,89564,89565],{"class":84},"    console.log(arr.sum())\n",[74,89567,89568],{"class":76,"line":1716},[74,89569,89570],{"class":84},"    \u002F\u002F ③排序\n",[74,89572,89573],{"class":76,"line":1721},[74,89574,89575],{"class":84},"    Array.prototype.rever = function () {\n",[74,89577,89578],{"class":76,"line":1726},[74,89579,89580],{"class":84},"      return this.reverse()\n",[74,89582,89583],{"class":76,"line":1740},[74,89584,2149],{"class":84},[74,89586,89587],{"class":76,"line":1745},[74,89588,89589],{"class":84},"    console.log(arr.rever())\n",[74,89591,89592],{"class":76,"line":2540},[74,89593,2363],{"emptyLinePlaceholder":2362},[74,89595,89596,89598,89600],{"class":76,"line":2554},[74,89597,56698],{"class":84},[74,89599,56094],{"class":55581},[74,89601,55588],{"class":84},[74,89603,89604,89606,89608],{"class":76,"line":2562},[74,89605,56066],{"class":84},[74,89607,56081],{"class":55581},[74,89609,55588],{"class":84},[19,89611,89612],{},[1424,89613],{"alt":69,"src":89614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[44,89616,89618],{"id":89617},"_4133-constructor-属性","4.13.3 constructor 属性",[19,89620,89621],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,89623,89624],{},[1424,89625],{"alt":69,"src":89626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[64,89628,89630],{"className":57348,"code":89629,"language":57350,"meta":69,"style":69},"\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",[71,89631,89632,89640,89648,89653,89658,89662,89667,89672,89677,89685],{"__ignoreMap":69},[74,89633,89634,89636,89638],{"class":76,"line":77},[74,89635,996],{"class":84},[74,89637,56081],{"class":55581},[74,89639,55588],{"class":84},[74,89641,89642,89644,89646],{"class":76,"line":94},[74,89643,56425],{"class":84},[74,89645,56094],{"class":55581},[74,89647,55588],{"class":84},[74,89649,89650],{"class":76,"line":1141},[74,89651,89652],{"class":84},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[74,89654,89655],{"class":76,"line":1156},[74,89656,89657],{"class":84},"    function Star() {\n",[74,89659,89660],{"class":76,"line":1162},[74,89661,2149],{"class":84},[74,89663,89664],{"class":76,"line":1176},[74,89665,89666],{"class":84},"    const ldh = new Star()\n",[74,89668,89669],{"class":76,"line":1182},[74,89670,89671],{"class":84},"    console.log(Star.prototype)\n",[74,89673,89674],{"class":76,"line":1273},[74,89675,89676],{"class":84},"    console.log(Star.prototype.constructor === Star)\n",[74,89678,89679,89681,89683],{"class":76,"line":1279},[74,89680,56698],{"class":84},[74,89682,56094],{"class":55581},[74,89684,55588],{"class":84},[74,89686,89687,89689,89691],{"class":76,"line":1291},[74,89688,56066],{"class":84},[74,89690,56081],{"class":55581},[74,89692,55588],{"class":84},[19,89694,89695],{},[1424,89696],{"alt":69,"src":89697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,89699,89700],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[64,89702,89704],{"className":57348,"code":89703,"language":57350,"meta":69,"style":69},"  \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",[71,89705,89706,89714,89718,89722,89726,89731,89736,89741,89745,89750,89755,89760,89765,89770,89775,89779,89783,89788,89793,89798,89802,89807,89812,89816,89820,89824],{"__ignoreMap":69},[74,89707,89708,89710,89712],{"class":76,"line":77},[74,89709,56425],{"class":84},[74,89711,56094],{"class":55581},[74,89713,55588],{"class":84},[74,89715,89716],{"class":76,"line":94},[74,89717,89652],{"class":84},[74,89719,89720],{"class":76,"line":1141},[74,89721,89657],{"class":84},[74,89723,89724],{"class":76,"line":1156},[74,89725,2149],{"class":84},[74,89727,89728],{"class":76,"line":1162},[74,89729,89730],{"class":84},"    \u002F\u002F const ldh = new Star()\n",[74,89732,89733],{"class":76,"line":1176},[74,89734,89735],{"class":84},"    \u002F\u002F console.log(Star.prototype)\n",[74,89737,89738],{"class":76,"line":1182},[74,89739,89740],{"class":84},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[74,89742,89743],{"class":76,"line":1273},[74,89744,2363],{"emptyLinePlaceholder":2362},[74,89746,89747],{"class":76,"line":1279},[74,89748,89749],{"class":84},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[74,89751,89752],{"class":76,"line":1291},[74,89753,89754],{"class":84},"    \u002F\u002F Star.prototype.sing = function () {\n",[74,89756,89757],{"class":76,"line":1574},[74,89758,89759],{"class":84},"    \u002F\u002F   console.log('唱歌')\n",[74,89761,89762],{"class":76,"line":1579},[74,89763,89764],{"class":84},"    \u002F\u002F }\n",[74,89766,89767],{"class":76,"line":1585},[74,89768,89769],{"class":84},"    \u002F\u002F Star.prototype.dance = function () {\n",[74,89771,89772],{"class":76,"line":1590},[74,89773,89774],{"class":84},"    \u002F\u002F   console.log('跳舞')\n",[74,89776,89777],{"class":76,"line":1604},[74,89778,89764],{"class":84},[74,89780,89781],{"class":76,"line":1609},[74,89782,89671],{"class":84},[74,89784,89785],{"class":76,"line":1615},[74,89786,89787],{"class":84},"    Star.prototype = {\n",[74,89789,89790],{"class":76,"line":1636},[74,89791,89792],{"class":84},"      sing: function () {\n",[74,89794,89795],{"class":76,"line":1641},[74,89796,89797],{"class":84},"        console.log('唱歌')\n",[74,89799,89800],{"class":76,"line":1655},[74,89801,82173],{"class":84},[74,89803,89804],{"class":76,"line":1660},[74,89805,89806],{"class":84},"      dance: function () {\n",[74,89808,89809],{"class":76,"line":1689},[74,89810,89811],{"class":84},"        console.log('跳舞')\n",[74,89813,89814],{"class":76,"line":1694},[74,89815,56679],{"class":84},[74,89817,89818],{"class":76,"line":1711},[74,89819,2149],{"class":84},[74,89821,89822],{"class":76,"line":1716},[74,89823,89671],{"class":84},[74,89825,89826,89828,89830],{"class":76,"line":1721},[74,89827,56698],{"class":84},[74,89829,56094],{"class":55581},[74,89831,55588],{"class":84},[19,89833,89834],{},"进行输出结果后会发现：",[19,89836,89837],{},[1424,89838],{"alt":69,"src":89839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,89841,89842],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,89844,89845],{},"所以，要重新指回创造这个原型对象的构造函数",[64,89847,89849],{"className":75494,"code":89848,"language":75496,"meta":69,"style":69},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[71,89850,89851,89865,89870,89875,89886,89899,89904,89915,89929,89933],{"__ignoreMap":69},[74,89852,89853,89856,89858,89861,89863],{"class":76,"line":77},[74,89854,89855],{"class":134},"Star",[74,89857,644],{"class":84},[74,89859,89860],{"class":134},"prototype",[74,89862,17843],{"class":80},[74,89864,19851],{"class":84},[74,89866,89867],{"class":76,"line":94},[74,89868,89869],{"class":144},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[74,89871,89872],{"class":76,"line":1141},[74,89873,89874],{"class":84},"  constructor: Star,\n",[74,89876,89877,89880,89882,89884],{"class":76,"line":1156},[74,89878,89879],{"class":1925},"  sing",[74,89881,55718],{"class":84},[74,89883,58730],{"class":80},[74,89885,58733],{"class":84},[74,89887,89888,89890,89892,89894,89897],{"class":76,"line":1162},[74,89889,78034],{"class":84},[74,89891,62528],{"class":1925},[74,89893,85],{"class":84},[74,89895,89896],{"class":190},"'唱歌'",[74,89898,91],{"class":84},[74,89900,89901],{"class":76,"line":1176},[74,89902,89903],{"class":84},"   },\n",[74,89905,89906,89909,89911,89913],{"class":76,"line":1182},[74,89907,89908],{"class":1925},"   dance",[74,89910,55718],{"class":84},[74,89912,58730],{"class":80},[74,89914,58733],{"class":84},[74,89916,89917,89920,89922,89924,89927],{"class":76,"line":1273},[74,89918,89919],{"class":84},"     console.",[74,89921,62528],{"class":1925},[74,89923,85],{"class":84},[74,89925,89926],{"class":190},"'跳舞'",[74,89928,91],{"class":84},[74,89930,89931],{"class":76,"line":1279},[74,89932,4272],{"class":84},[74,89934,89935],{"class":76,"line":1291},[74,89936,1527],{"class":84},[19,89938,89939],{},[1424,89940],{"alt":69,"src":89941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,89943,89944],{},"总结1：",[19,89946,89947],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,89949,89950],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,89952,89953],{},"constructor指的是他的来源",[19,89955,89956],{},[1424,89957],{"alt":69,"src":89958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,89960,89961],{},[1424,89962],{"alt":69,"src":89963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,89965,89966],{},"总结2：",[19,89968,89969],{},[1424,89970],{"alt":69,"src":89971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,89973,89974],{},[1424,89975],{"alt":69,"src":89976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,89978,89979],{},[1424,89980],{"alt":69,"src":89981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[44,89983,89985],{"id":89984},"_4134-对象原型","4.13.4 对象原型",[19,89987,89988],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,89990,89991],{},"对象原型就是__proto__这个属性",[19,89993,89994],{},[1424,89995],{"alt":69,"src":89996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,89998,89999],{},[1424,90000],{"alt":69,"src":90001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,90003,90004],{},[1424,90005],{"alt":69,"src":90006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,90008,90009],{},[1424,90010],{"alt":69,"src":90011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[64,90013,90015],{"className":57348,"code":90014,"language":57350,"meta":69,"style":69},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[71,90016,90017,90025,90033,90037,90041,90045,90050,90058],{"__ignoreMap":69},[74,90018,90019,90021,90023],{"class":76,"line":77},[74,90020,996],{"class":84},[74,90022,56081],{"class":55581},[74,90024,55588],{"class":84},[74,90026,90027,90029,90031],{"class":76,"line":94},[74,90028,56425],{"class":84},[74,90030,56094],{"class":55581},[74,90032,55588],{"class":84},[74,90034,90035],{"class":76,"line":1141},[74,90036,89657],{"class":84},[74,90038,90039],{"class":76,"line":1156},[74,90040,2149],{"class":84},[74,90042,90043],{"class":76,"line":1162},[74,90044,89666],{"class":84},[74,90046,90047],{"class":76,"line":1176},[74,90048,90049],{"class":84},"    console.log(ldh)\n",[74,90051,90052,90054,90056],{"class":76,"line":1182},[74,90053,56698],{"class":84},[74,90055,56094],{"class":55581},[74,90057,55588],{"class":84},[74,90059,90060,90062,90064],{"class":76,"line":1273},[74,90061,56066],{"class":84},[74,90063,56081],{"class":55581},[74,90065,55588],{"class":84},[19,90067,90068],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,90070,90071],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,90073,90074],{},[1424,90075],{"alt":69,"src":90076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,90078,90079],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,90081,90082],{},"对象原型指向原型对象",[19,90084,90085],{},[1424,90086],{"alt":69,"src":90087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,90089,90090],{},[1424,90091],{"alt":69,"src":90092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,90094,90095],{},[1424,90096],{"alt":69,"src":90097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[44,90099,90101],{"id":90100},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,90103,90104],{},[1424,90105],{"alt":69,"src":90106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[27,90108,90109,90112,90115,90118],{},[30,90110,90111],{},"构造函数通过new的形式实例化得到实例对象",[30,90113,90114],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[30,90116,90117],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[30,90119,90120],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,90122,90123],{},[1424,90124],{"alt":69,"src":90125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,90127,90128],{},"题目梳理：",[19,90130,90131],{},[1424,90132],{"alt":69,"src":90133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[44,90135,90137],{"id":90136},"_4136-原型继承","4.13.6 原型继承",[19,90139,90140],{},[1424,90141],{"alt":69,"src":90142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,90144,90145],{},[1424,90146],{"alt":69,"src":90147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,90149,90150],{},[1424,90151],{"alt":69,"src":90152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,90154,90155],{},[1424,90156],{"alt":69,"src":90157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,90159,90160],{},[1424,90161],{"alt":69,"src":90162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,90164,90165],{},[1424,90166],{"alt":69,"src":90167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,90169,90170],{},[1424,90171],{"alt":69,"src":90172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,90174,90175],{},[1424,90176],{"alt":69,"src":90177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,90179,90180],{},"回顾：构造函数每次new得到对象都是不同的",[44,90182,90184],{"id":90183},"_4137-原型链","4.13.7 原型链",[19,90186,90187],{},[1424,90188],{"alt":69,"src":90189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,90191,90192],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,90194,90195],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,90197,90198],{},"大哥是Object",[19,90200,90201],{},[1424,90202],{"alt":69,"src":90203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,90205,90206],{},[1424,90207],{"alt":69,"src":90208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,90210,90211],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,90213,90214],{},"万物皆对象",[44,90216,90218],{"id":90217},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,90220,90221],{},"模态框",[19,90223,90224],{},"以后遇见这个效果直接使用这个就行",[19,90226,90227],{},[1424,90228],{"alt":69,"src":90229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,90231,90232],{},[1424,90233],{"alt":69,"src":90234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,90236,90237],{},[1424,90238],{"alt":69,"src":90239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,90241,90242],{},[1424,90243],{"alt":69,"src":90244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,90246,90247],{},"补充知识点：",[27,90249,90250],{},[30,90251,90252],{},"append()",[19,90254,90255],{},[1424,90256],{"alt":69,"src":90257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[64,90259,90261],{"className":54914,"code":90260,"language":54916,"meta":69,"style":69},"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",[71,90262,90263,90268,90273,90278,90282,90286,90290,90295,90300,90305,90309],{"__ignoreMap":69},[74,90264,90265],{"class":76,"line":77},[74,90266,90267],{"class":84},"append(param1)\n",[74,90269,90270],{"class":76,"line":94},[74,90271,90272],{"class":84},"append(param1, param2)\n",[74,90274,90275],{"class":76,"line":1141},[74,90276,90277],{"class":84},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[74,90279,90280],{"class":76,"line":1156},[74,90281,2363],{"emptyLinePlaceholder":2362},[74,90283,90284],{"class":76,"line":1162},[74,90285,2363],{"emptyLinePlaceholder":2362},[74,90287,90288],{"class":76,"line":1176},[74,90289,2363],{"emptyLinePlaceholder":2362},[74,90291,90292],{"class":76,"line":1182},[74,90293,90294],{"class":84},"let div = document.createElement(\"div\");\n",[74,90296,90297],{"class":76,"line":1273},[74,90298,90299],{"class":84},"let p = document.createElement(\"p\");\n",[74,90301,90302],{"class":76,"line":1279},[74,90303,90304],{"class":84},"div.append(p);\n",[74,90306,90307],{"class":76,"line":1291},[74,90308,2363],{"emptyLinePlaceholder":2362},[74,90310,90311,90314,90316],{"class":76,"line":1574},[74,90312,90313],{"class":84},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[74,90315,19],{"class":55581},[74,90317,90318],{"class":84},"> ]\n",[27,90320,90321],{"start":94},[30,90322,90323],{},"remove()",[19,90325,90326],{},"自己删自己",[19,90328,90329],{},[1424,90330],{"alt":69,"src":90331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[64,90333,90335],{"className":54914,"code":90334,"language":54916,"meta":69,"style":69},"\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",[71,90336,90337,90347,90361,90365,90373,90387,90407,90419,90427,90434,90446,90459,90494,90506,90517,90529,90541,90553,90580,90590,90594,90598,90607,90619,90633,90643,90655,90659,90663,90673,90684,90694,90704,90717,90730,90740,90744,90748,90757,90767,90779,90783,90787,90796,90806,90816,90828,90832,90836,90846,90862,90873,90883,90893,90905,90917,90929,90933,90937,90950,90961,90965,90973,90981,90985,90993,91013,91033,91041,91046,91072,91077,91082,91101,91106,91118,91123,91134,91144,91154,91159,91164,91168,91173,91178,91183,91203,91208,91228,91233,91247,91252,91257,91262,91278,91282,91287,91316,91321,91326,91331,91342,91346,91350,91354,91359,91384,91389,91414,91419,91428,91432,91437,91462,91466,91491,91495,91504,91508,91513,91531,91541,91545,91553,91561,91565],{"__ignoreMap":69},[74,90338,90339,90341,90343,90345],{"class":76,"line":77},[74,90340,55578],{"class":84},[74,90342,55582],{"class":55581},[74,90344,55585],{"class":1925},[74,90346,55588],{"class":84},[74,90348,90349,90351,90353,90355,90357,90359],{"class":76,"line":94},[74,90350,996],{"class":84},[74,90352,54916],{"class":55581},[74,90354,55597],{"class":1925},[74,90356,131],{"class":84},[74,90358,55602],{"class":190},[74,90360,55588],{"class":84},[74,90362,90363],{"class":76,"line":1141},[74,90364,2363],{"emptyLinePlaceholder":2362},[74,90366,90367,90369,90371],{"class":76,"line":1156},[74,90368,996],{"class":84},[74,90370,55615],{"class":55581},[74,90372,55588],{"class":84},[74,90374,90375,90377,90379,90381,90383,90385],{"class":76,"line":1162},[74,90376,56425],{"class":84},[74,90378,55625],{"class":55581},[74,90380,55628],{"class":1925},[74,90382,131],{"class":84},[74,90384,55633],{"class":190},[74,90386,55588],{"class":84},[74,90388,90389,90391,90393,90395,90397,90399,90401,90403,90405],{"class":76,"line":1176},[74,90390,56425],{"class":84},[74,90392,55625],{"class":55581},[74,90394,19199],{"class":1925},[74,90396,131],{"class":84},[74,90398,55672],{"class":190},[74,90400,55652],{"class":1925},[74,90402,131],{"class":84},[74,90404,55679],{"class":190},[74,90406,55588],{"class":84},[74,90408,90409,90411,90413,90415,90417],{"class":76,"line":1182},[74,90410,56425],{"class":84},[74,90412,55688],{"class":55581},[74,90414,55691],{"class":84},[74,90416,55688],{"class":55581},[74,90418,55588],{"class":84},[74,90420,90421,90423,90425],{"class":76,"line":1273},[74,90422,56425],{"class":84},[74,90424,5090],{"class":55581},[74,90426,55588],{"class":84},[74,90428,90429,90432],{"class":76,"line":1279},[74,90430,90431],{"class":1925},"    .modal",[74,90433,19851],{"class":84},[74,90435,90436,90438,90440,90442,90444],{"class":76,"line":1291},[74,90437,59052],{"class":134},[74,90439,55718],{"class":84},[74,90441,3936],{"class":134},[74,90443,55773],{"class":80},[74,90445,1252],{"class":84},[74,90447,90448,90451,90453,90455,90457],{"class":76,"line":1574},[74,90449,90450],{"class":134},"      min-height",[74,90452,55718],{"class":84},[74,90454,397],{"class":134},[74,90456,55773],{"class":80},[74,90458,1252],{"class":84},[74,90460,90461,90463,90465,90467,90469,90471,90473,90475,90477,90479,90481,90483,90485,90487,90489,90492],{"class":76,"line":1579},[74,90462,83031],{"class":134},[74,90464,55718],{"class":84},[74,90466,277],{"class":134},[74,90468,4056],{"class":134},[74,90470,2000],{"class":134},[74,90472,55773],{"class":80},[74,90474,83048],{"class":134},[74,90476,85],{"class":84},[74,90478,277],{"class":134},[74,90480,16714],{"class":84},[74,90482,277],{"class":134},[74,90484,16714],{"class":84},[74,90486,277],{"class":134},[74,90488,16714],{"class":84},[74,90490,90491],{"class":134},"0.1",[74,90493,2682],{"class":84},[74,90495,90496,90498,90500,90502,90504],{"class":76,"line":1585},[74,90497,59415],{"class":134},[74,90499,55718],{"class":84},[74,90501,379],{"class":134},[74,90503,55773],{"class":80},[74,90505,1252],{"class":84},[74,90507,90508,90510,90512,90515],{"class":76,"line":1590},[74,90509,59040],{"class":134},[74,90511,55718],{"class":84},[74,90513,90514],{"class":134},"fixed",[74,90516,1252],{"class":84},[74,90518,90519,90522,90524,90527],{"class":76,"line":1604},[74,90520,90521],{"class":134},"      z-index",[74,90523,55718],{"class":84},[74,90525,90526],{"class":134},"999",[74,90528,1252],{"class":84},[74,90530,90531,90533,90535,90537,90539],{"class":76,"line":1609},[74,90532,59119],{"class":134},[74,90534,55718],{"class":84},[74,90536,742],{"class":134},[74,90538,414],{"class":80},[74,90540,1252],{"class":84},[74,90542,90543,90545,90547,90549,90551],{"class":76,"line":1615},[74,90544,59228],{"class":134},[74,90546,55718],{"class":84},[74,90548,742],{"class":134},[74,90550,414],{"class":80},[74,90552,1252],{"class":84},[74,90554,90555,90557,90559,90561,90563,90566,90568,90570,90572,90574,90576,90578],{"class":76,"line":1636},[74,90556,83072],{"class":134},[74,90558,55718],{"class":84},[74,90560,83077],{"class":134},[74,90562,85],{"class":84},[74,90564,90565],{"class":134},"-50",[74,90567,414],{"class":80},[74,90569,16714],{"class":84},[74,90571,90565],{"class":134},[74,90573,414],{"class":80},[74,90575,16714],{"class":84},[74,90577,277],{"class":134},[74,90579,2682],{"class":84},[74,90581,90582,90584,90586,90588],{"class":76,"line":1641},[74,90583,59165],{"class":134},[74,90585,55718],{"class":84},[74,90587,65123],{"class":134},[74,90589,1252],{"class":84},[74,90591,90592],{"class":76,"line":1655},[74,90593,2149],{"class":84},[74,90595,90596],{"class":76,"line":1660},[74,90597,2363],{"emptyLinePlaceholder":2362},[74,90599,90600,90602,90605],{"class":76,"line":1689},[74,90601,90431],{"class":1925},[74,90603,90604],{"class":1925}," .header",[74,90606,19851],{"class":84},[74,90608,90609,90611,90613,90615,90617],{"class":76,"line":1694},[74,90610,61640],{"class":134},[74,90612,55718],{"class":84},[74,90614,487],{"class":134},[74,90616,55773],{"class":80},[74,90618,1252],{"class":84},[74,90620,90621,90623,90625,90627,90629,90631],{"class":76,"line":1711},[74,90622,58976],{"class":134},[74,90624,55718],{"class":84},[74,90626,277],{"class":134},[74,90628,2000],{"class":134},[74,90630,55773],{"class":80},[74,90632,1252],{"class":84},[74,90634,90635,90637,90639,90641],{"class":76,"line":1716},[74,90636,59040],{"class":134},[74,90638,55718],{"class":84},[74,90640,59045],{"class":134},[74,90642,1252],{"class":84},[74,90644,90645,90647,90649,90651,90653],{"class":76,"line":1721},[74,90646,59203],{"class":134},[74,90648,55718],{"class":84},[74,90650,786],{"class":134},[74,90652,55773],{"class":80},[74,90654,1252],{"class":84},[74,90656,90657],{"class":76,"line":1726},[74,90658,2149],{"class":84},[74,90660,90661],{"class":76,"line":1740},[74,90662,2363],{"emptyLinePlaceholder":2362},[74,90664,90665,90667,90669,90671],{"class":76,"line":1745},[74,90666,90431],{"class":1925},[74,90668,90604],{"class":1925},[74,90670,2995],{"class":55581},[74,90672,19851],{"class":84},[74,90674,90675,90678,90680,90682],{"class":76,"line":2540},[74,90676,90677],{"class":134},"      font-style",[74,90679,55718],{"class":84},[74,90681,68122],{"class":134},[74,90683,1252],{"class":84},[74,90685,90686,90688,90690,90692],{"class":76,"line":2554},[74,90687,61697],{"class":134},[74,90689,55718],{"class":84},[74,90691,66351],{"class":134},[74,90693,1252],{"class":84},[74,90695,90696,90698,90700,90702],{"class":76,"line":2562},[74,90697,59040],{"class":134},[74,90699,55718],{"class":84},[74,90701,59112],{"class":134},[74,90703,1252],{"class":84},[74,90705,90706,90709,90711,90713,90715],{"class":76,"line":2567},[74,90707,90708],{"class":134},"      right",[74,90710,55718],{"class":84},[74,90712,661],{"class":134},[74,90714,55773],{"class":80},[74,90716,1252],{"class":84},[74,90718,90719,90721,90723,90726,90728],{"class":76,"line":2573},[74,90720,59228],{"class":134},[74,90722,55718],{"class":84},[74,90724,90725],{"class":134},"-2",[74,90727,55773],{"class":80},[74,90729,1252],{"class":84},[74,90731,90732,90734,90736,90738],{"class":76,"line":2579},[74,90733,66306],{"class":134},[74,90735,55718],{"class":84},[74,90737,66311],{"class":134},[74,90739,1252],{"class":84},[74,90741,90742],{"class":76,"line":2584},[74,90743,2149],{"class":84},[74,90745,90746],{"class":76,"line":12227},[74,90747,2363],{"emptyLinePlaceholder":2362},[74,90749,90750,90752,90755],{"class":76,"line":12251},[74,90751,90431],{"class":1925},[74,90753,90754],{"class":1925}," .body",[74,90756,19851],{"class":84},[74,90758,90759,90761,90763,90765],{"class":76,"line":12256},[74,90760,61567],{"class":134},[74,90762,55718],{"class":84},[74,90764,55873],{"class":134},[74,90766,1252],{"class":84},[74,90768,90769,90771,90773,90775,90777],{"class":76,"line":12262},[74,90770,58976],{"class":134},[74,90772,55718],{"class":84},[74,90774,532],{"class":134},[74,90776,55773],{"class":80},[74,90778,1252],{"class":84},[74,90780,90781],{"class":76,"line":12289},[74,90782,2149],{"class":84},[74,90784,90785],{"class":76,"line":12294},[74,90786,2363],{"emptyLinePlaceholder":2362},[74,90788,90789,90791,90794],{"class":76,"line":12300},[74,90790,90431],{"class":1925},[74,90792,90793],{"class":1925}," .footer",[74,90795,19851],{"class":84},[74,90797,90798,90800,90802,90804],{"class":76,"line":12312},[74,90799,59290],{"class":134},[74,90801,55718],{"class":84},[74,90803,55758],{"class":134},[74,90805,1252],{"class":84},[74,90807,90808,90810,90812,90814],{"class":76,"line":12324},[74,90809,59301],{"class":134},[74,90811,55718],{"class":84},[74,90813,55861],{"class":134},[74,90815,1252],{"class":84},[74,90817,90818,90820,90822,90824,90826],{"class":76,"line":12336},[74,90819,58976],{"class":134},[74,90821,55718],{"class":84},[74,90823,532],{"class":134},[74,90825,55773],{"class":80},[74,90827,1252],{"class":84},[74,90829,90830],{"class":76,"line":13995},[74,90831,2149],{"class":84},[74,90833,90834],{"class":76,"line":14020},[74,90835,2363],{"emptyLinePlaceholder":2362},[74,90837,90838,90840,90842,90844],{"class":76,"line":14043},[74,90839,90431],{"class":1925},[74,90841,90793],{"class":1925},[74,90843,1360],{"class":55581},[74,90845,19851],{"class":84},[74,90847,90848,90850,90852,90854,90856,90858,90860],{"class":76,"line":14067},[74,90849,58976],{"class":134},[74,90851,55718],{"class":84},[74,90853,157],{"class":134},[74,90855,55773],{"class":80},[74,90857,2045],{"class":134},[74,90859,55773],{"class":80},[74,90861,1252],{"class":84},[74,90863,90864,90866,90868,90871],{"class":76,"line":14072},[74,90865,66002],{"class":134},[74,90867,55718],{"class":84},[74,90869,90870],{"class":134},"#ccc",[74,90872,1252],{"class":84},[74,90874,90875,90877,90879,90881],{"class":76,"line":14077},[74,90876,68251],{"class":134},[74,90878,55718],{"class":84},[74,90880,59018],{"class":134},[74,90882,1252],{"class":84},[74,90884,90885,90887,90889,90891],{"class":76,"line":14082},[74,90886,61697],{"class":134},[74,90888,55718],{"class":84},[74,90890,65123],{"class":134},[74,90892,1252],{"class":84},[74,90894,90895,90897,90899,90901,90903],{"class":76,"line":14091},[74,90896,59415],{"class":134},[74,90898,55718],{"class":84},[74,90900,163],{"class":134},[74,90902,55773],{"class":80},[74,90904,1252],{"class":84},[74,90906,90907,90909,90911,90913,90915],{"class":76,"line":14096},[74,90908,66031],{"class":134},[74,90910,55718],{"class":84},[74,90912,532],{"class":134},[74,90914,55773],{"class":80},[74,90916,1252],{"class":84},[74,90918,90919,90921,90923,90925,90927],{"class":76,"line":14102},[74,90920,59203],{"class":134},[74,90922,55718],{"class":84},[74,90924,635],{"class":134},[74,90926,55773],{"class":80},[74,90928,1252],{"class":84},[74,90930,90931],{"class":76,"line":14123},[74,90932,2149],{"class":84},[74,90934,90935],{"class":76,"line":14129},[74,90936,2363],{"emptyLinePlaceholder":2362},[74,90938,90939,90941,90943,90945,90948],{"class":76,"line":14143},[74,90940,90431],{"class":1925},[74,90942,90793],{"class":1925},[74,90944,1360],{"class":55581},[74,90946,90947],{"class":1925},".submit",[74,90949,19851],{"class":84},[74,90951,90952,90954,90956,90959],{"class":76,"line":14149},[74,90953,59165],{"class":134},[74,90955,55718],{"class":84},[74,90957,90958],{"class":134},"#369",[74,90960,1252],{"class":84},[74,90962,90963],{"class":76,"line":14176},[74,90964,2149],{"class":84},[74,90966,90967,90969,90971],{"class":76,"line":14185},[74,90968,56698],{"class":84},[74,90970,5090],{"class":55581},[74,90972,55588],{"class":84},[74,90974,90975,90977,90979],{"class":76,"line":14191},[74,90976,56066],{"class":84},[74,90978,55615],{"class":55581},[74,90980,55588],{"class":84},[74,90982,90983],{"class":76,"line":14199},[74,90984,2363],{"emptyLinePlaceholder":2362},[74,90986,90987,90989,90991],{"class":76,"line":14204},[74,90988,996],{"class":84},[74,90990,56081],{"class":55581},[74,90992,55588],{"class":84},[74,90994,90995,90997,90999,91001,91003,91006,91009,91011],{"class":76,"line":20883},[74,90996,56425],{"class":84},[74,90998,58168],{"class":55581},[74,91000,19238],{"class":1925},[74,91002,131],{"class":84},[74,91004,91005],{"class":190},"\"delete\"",[74,91007,91008],{"class":84},">删除\u003C\u002F",[74,91010,58168],{"class":55581},[74,91012,55588],{"class":84},[74,91014,91015,91017,91019,91021,91023,91026,91029,91031],{"class":76,"line":20889},[74,91016,56425],{"class":84},[74,91018,58168],{"class":55581},[74,91020,19238],{"class":1925},[74,91022,131],{"class":84},[74,91024,91025],{"class":190},"\"login\"",[74,91027,91028],{"class":84},">登录\u003C\u002F",[74,91030,58168],{"class":55581},[74,91032,55588],{"class":84},[74,91034,91035,91037,91039],{"class":76,"line":20912},[74,91036,56425],{"class":84},[74,91038,56094],{"class":55581},[74,91040,55588],{"class":84},[74,91042,91043],{"class":76,"line":20918},[74,91044,91045],{"class":144},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[74,91047,91048,91050,91053,91055,91057,91059,91061,91063,91066,91068,91070],{"class":76,"line":20941},[74,91049,74365],{"class":80},[74,91051,91052],{"class":1925}," Modal",[74,91054,85],{"class":84},[74,91056,55688],{"class":9495},[74,91058,17843],{"class":80},[74,91060,74211],{"class":190},[74,91062,16714],{"class":84},[74,91064,91065],{"class":9495},"message",[74,91067,17843],{"class":80},[74,91069,74211],{"class":190},[74,91071,16721],{"class":84},[74,91073,91074],{"class":76,"line":20955},[74,91075,91076],{"class":144},"      \u002F\u002F 创建Model 模态框盒子\n",[74,91078,91079],{"class":76,"line":20975},[74,91080,91081],{"class":144},"      \u002F\u002F 1.1 创建div标签\n",[74,91083,91084,91086,91089,91091,91093,91095,91097,91099],{"class":76,"line":20981},[74,91085,74332],{"class":134},[74,91087,91088],{"class":84},".modalBox ",[74,91090,131],{"class":80},[74,91092,58677],{"class":84},[74,91094,74432],{"class":1925},[74,91096,85],{"class":84},[74,91098,86212],{"class":190},[74,91100,91],{"class":84},[74,91102,91103],{"class":76,"line":20992},[74,91104,91105],{"class":144},"      \u002F\u002F 1.2 给div 添加类名为model\n",[74,91107,91108,91110,91113,91115],{"class":76,"line":21015},[74,91109,74332],{"class":134},[74,91111,91112],{"class":84},".modalBox.className ",[74,91114,131],{"class":80},[74,91116,91117],{"class":190}," 'modal'\n",[74,91119,91120],{"class":76,"line":21037},[74,91121,91122],{"class":144},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[74,91124,91125,91127,91130,91132],{"class":76,"line":21042},[74,91126,74332],{"class":134},[74,91128,91129],{"class":84},".modalBox.innerHTML ",[74,91131,131],{"class":80},[74,91133,74449],{"class":190},[74,91135,91136,91139,91141],{"class":76,"line":21048},[74,91137,91138],{"class":190},"        \u003Cdiv class=\"header\">${",[74,91140,55688],{"class":84},[74,91142,91143],{"class":190},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[74,91145,91146,91149,91151],{"class":76,"line":21062},[74,91147,91148],{"class":190},"        \u003Cdiv class=\"body\">${",[74,91150,91065],{"class":84},[74,91152,91153],{"class":190},"}\u003C\u002Fdiv>\n",[74,91155,91156],{"class":76,"line":21075},[74,91157,91158],{"class":190},"      `\n",[74,91160,91161],{"class":76,"line":21080},[74,91162,91163],{"class":144},"      \u002F\u002F console.log(this.modalBox)\n",[74,91165,91166],{"class":76,"line":21094},[74,91167,2149],{"class":84},[74,91169,91170],{"class":76,"line":21099},[74,91171,91172],{"class":144},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[74,91174,91175],{"class":76,"line":21105},[74,91176,91177],{"class":144},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[74,91179,91180],{"class":76,"line":21110},[74,91181,91182],{"class":144},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[74,91184,91185,91188,91190,91192,91194,91197,91199,91201],{"class":76,"line":21124},[74,91186,91187],{"class":134},"    Modal",[74,91189,644],{"class":84},[74,91191,89860],{"class":134},[74,91193,644],{"class":84},[74,91195,91196],{"class":1925},"open",[74,91198,17843],{"class":80},[74,91200,63199],{"class":80},[74,91202,58733],{"class":84},[74,91204,91205],{"class":76,"line":21129},[74,91206,91207],{"class":144},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[74,91209,91210,91212,91215,91217,91219,91221,91223,91226],{"class":76,"line":21134},[74,91211,62509],{"class":80},[74,91213,91214],{"class":134}," box",[74,91216,17843],{"class":80},[74,91218,58677],{"class":84},[74,91220,58680],{"class":1925},[74,91222,85],{"class":84},[74,91224,91225],{"class":190},"'.modal'",[74,91227,91],{"class":84},[74,91229,91230],{"class":76,"line":21148},[74,91231,91232],{"class":144},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[74,91234,91235,91238,91240,91243,91245],{"class":76,"line":21160},[74,91236,91237],{"class":84},"      box ",[74,91239,1677],{"class":80},[74,91241,91242],{"class":84}," box.",[74,91244,61287],{"class":1925},[74,91246,1938],{"class":84},[74,91248,91249],{"class":76,"line":21165},[74,91250,91251],{"class":144},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[74,91253,91254],{"class":76,"line":21178},[74,91255,91256],{"class":144},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[74,91258,91259],{"class":76,"line":21183},[74,91260,91261],{"class":144},"      \u002F\u002F append可以增加对象\n",[74,91263,91264,91267,91270,91272,91275],{"class":76,"line":21188},[74,91265,91266],{"class":84},"      document.body.",[74,91268,91269],{"class":1925},"append",[74,91271,85],{"class":84},[74,91273,91274],{"class":134},"this",[74,91276,91277],{"class":84},".modalBox)\n",[74,91279,91280],{"class":76,"line":21193},[74,91281,2363],{"emptyLinePlaceholder":2362},[74,91283,91284],{"class":76,"line":21206},[74,91285,91286],{"class":144},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[74,91288,91289,91291,91294,91296,91298,91301,91303,91305,91307,91309,91312,91314],{"class":76,"line":21211},[74,91290,74332],{"class":134},[74,91292,91293],{"class":84},".modalBox.",[74,91295,58680],{"class":1925},[74,91297,85],{"class":84},[74,91299,91300],{"class":190},"'i'",[74,91302,35107],{"class":84},[74,91304,62094],{"class":1925},[74,91306,85],{"class":84},[74,91308,62099],{"class":190},[74,91310,91311],{"class":84},", () ",[74,91313,89003],{"class":80},[74,91315,19851],{"class":84},[74,91317,91318],{"class":76,"line":36914},[74,91319,91320],{"class":144},"        \u002F\u002F 这个地方需要用到箭头函数\n",[74,91322,91323],{"class":76,"line":36920},[74,91324,91325],{"class":144},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[74,91327,91328],{"class":76,"line":36926},[74,91329,91330],{"class":144},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[74,91332,91333,91335,91337,91340],{"class":76,"line":36932},[74,91334,69007],{"class":134},[74,91336,644],{"class":84},[74,91338,91339],{"class":1925},"close",[74,91341,1938],{"class":84},[74,91343,91344],{"class":76,"line":36938},[74,91345,69096],{"class":84},[74,91347,91348],{"class":76,"line":36949},[74,91349,2149],{"class":84},[74,91351,91352],{"class":76,"line":36955},[74,91353,2363],{"emptyLinePlaceholder":2362},[74,91355,91356],{"class":76,"line":36975},[74,91357,91358],{"class":144},"    \u002F\u002F 测试一下 点击 删除按钮\n",[74,91360,91361,91363,91365,91367,91370,91372,91374,91376,91378,91380,91382],{"class":76,"line":36981},[74,91362,56688],{"class":84},[74,91364,58680],{"class":1925},[74,91366,85],{"class":84},[74,91368,91369],{"class":190},"'#delete'",[74,91371,35107],{"class":84},[74,91373,62094],{"class":1925},[74,91375,85],{"class":84},[74,91377,62099],{"class":190},[74,91379,91311],{"class":84},[74,91381,89003],{"class":80},[74,91383,19851],{"class":84},[74,91385,91386],{"class":76,"line":36992},[74,91387,91388],{"class":144},"      \u002F\u002F 先调用Model构造函数\n",[74,91390,91391,91393,91396,91398,91400,91402,91404,91407,91409,91412],{"class":76,"line":36998},[74,91392,62509],{"class":80},[74,91394,91395],{"class":134}," del",[74,91397,17843],{"class":80},[74,91399,15857],{"class":80},[74,91401,91052],{"class":1925},[74,91403,85],{"class":84},[74,91405,91406],{"class":190},"'温馨的提示'",[74,91408,16714],{"class":84},[74,91410,91411],{"class":190},"'您没有删除权限操作'",[74,91413,91],{"class":84},[74,91415,91416],{"class":76,"line":37004},[74,91417,91418],{"class":144},"      \u002F\u002F 实例对象调用open方法\n",[74,91420,91421,91424,91426],{"class":76,"line":37010},[74,91422,91423],{"class":84},"      del.",[74,91425,91196],{"class":1925},[74,91427,1938],{"class":84},[74,91429,91430],{"class":76,"line":37016},[74,91431,37742],{"class":84},[74,91433,91434],{"class":76,"line":37022},[74,91435,91436],{"class":144},"    \u002F\u002F 测试一下 点击 登录按钮\n",[74,91438,91439,91441,91443,91445,91448,91450,91452,91454,91456,91458,91460],{"class":76,"line":37028},[74,91440,56688],{"class":84},[74,91442,58680],{"class":1925},[74,91444,85],{"class":84},[74,91446,91447],{"class":190},"'#login'",[74,91449,35107],{"class":84},[74,91451,62094],{"class":1925},[74,91453,85],{"class":84},[74,91455,62099],{"class":190},[74,91457,91311],{"class":84},[74,91459,89003],{"class":80},[74,91461,19851],{"class":84},[74,91463,91464],{"class":76,"line":37034},[74,91465,91388],{"class":144},[74,91467,91468,91470,91473,91475,91477,91479,91481,91484,91486,91489],{"class":76,"line":37054},[74,91469,62509],{"class":80},[74,91471,91472],{"class":134}," log",[74,91474,17843],{"class":80},[74,91476,15857],{"class":80},[74,91478,91052],{"class":1925},[74,91480,85],{"class":84},[74,91482,91483],{"class":190},"'友情提示'",[74,91485,16714],{"class":84},[74,91487,91488],{"class":190},"'您还没有登录呢'",[74,91490,91],{"class":84},[74,91492,91493],{"class":76,"line":37060},[74,91494,91418],{"class":144},[74,91496,91497,91500,91502],{"class":76,"line":37076},[74,91498,91499],{"class":84},"      log.",[74,91501,91196],{"class":1925},[74,91503,1938],{"class":84},[74,91505,91506],{"class":76,"line":37082},[74,91507,37742],{"class":84},[74,91509,91510],{"class":76,"line":37096},[74,91511,91512],{"class":144},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[74,91514,91515,91517,91519,91521,91523,91525,91527,91529],{"class":76,"line":37102},[74,91516,91187],{"class":134},[74,91518,644],{"class":84},[74,91520,89860],{"class":134},[74,91522,644],{"class":84},[74,91524,91339],{"class":1925},[74,91526,17843],{"class":80},[74,91528,63199],{"class":80},[74,91530,58733],{"class":84},[74,91532,91533,91535,91537,91539],{"class":76,"line":37117},[74,91534,74332],{"class":134},[74,91536,91293],{"class":84},[74,91538,61287],{"class":1925},[74,91540,1938],{"class":84},[74,91542,91543],{"class":76,"line":37123},[74,91544,2149],{"class":84},[74,91546,91547,91549,91551],{"class":76,"line":37132},[74,91548,56698],{"class":84},[74,91550,56094],{"class":55581},[74,91552,55588],{"class":84},[74,91554,91555,91557,91559],{"class":76,"line":37138},[74,91556,56066],{"class":84},[74,91558,56081],{"class":55581},[74,91560,55588],{"class":84},[74,91562,91563],{"class":76,"line":37147},[74,91564,2363],{"emptyLinePlaceholder":2362},[74,91566,91567,91569,91571],{"class":76,"line":37153},[74,91568,56066],{"class":84},[74,91570,54916],{"class":55581},[74,91572,55588],{"class":84},[19,91574,91575],{},[1424,91576],{"alt":69,"src":91577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,91579,91581],{"id":91580},"_414-深浅拷贝","4.14 深浅拷贝",[44,91583,91585],{"id":91584},"_4141-浅拷贝","4.14.1 浅拷贝",[19,91587,91588],{},[1424,91589],{"alt":69,"src":91590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,91592,91593],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,91595,91596],{},[1424,91597],{"alt":69,"src":91598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,91600,91601],{},[1424,91602],{"alt":69,"src":91603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,91605,91606],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,91608,91609],{},[1424,91610],{"alt":69,"src":91611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,91613,15611],{},[19,91615,91616],{},[1424,91617],{"alt":69,"src":91618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[44,91620,91622],{"id":91621},"_4142-深拷贝","4.14.2 深拷贝",[19,91624,91625],{},"深拷贝：拷贝的是对象，不是地址",[19,91627,91628],{},"常用的三种方法：",[27,91630,91631,91634,91637],{},[30,91632,91633],{},"通过递归实现深拷贝",[30,91635,91636],{},"lodash\u002FcloneDeep",[30,91638,91639],{},"通过JSON.stringify()实现",[26277,91641,91643],{"id":91642},"_41421-递归函数","4.14.2.1 递归函数",[19,91645,91646],{},[1424,91647],{"alt":69,"src":91648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[27,91650,91651],{},[30,91652,91653],{},"死递归占溢出：",[64,91655,91657],{"className":57348,"code":91656,"language":57350,"meta":69,"style":69},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[71,91658,91659,91667,91675,91679,91684,91688,91693,91701],{"__ignoreMap":69},[74,91660,91661,91663,91665],{"class":76,"line":77},[74,91662,996],{"class":84},[74,91664,56081],{"class":55581},[74,91666,55588],{"class":84},[74,91668,91669,91671,91673],{"class":76,"line":94},[74,91670,56425],{"class":84},[74,91672,56094],{"class":55581},[74,91674,55588],{"class":84},[74,91676,91677],{"class":76,"line":1141},[74,91678,81424],{"class":84},[74,91680,91681],{"class":76,"line":1156},[74,91682,91683],{"class":84},"      fn()\n",[74,91685,91686],{"class":76,"line":1162},[74,91687,2149],{"class":84},[74,91689,91690],{"class":76,"line":1176},[74,91691,91692],{"class":84},"    fn()\n",[74,91694,91695,91697,91699],{"class":76,"line":1182},[74,91696,56698],{"class":84},[74,91698,56094],{"class":55581},[74,91700,55588],{"class":84},[74,91702,91703,91705,91707],{"class":76,"line":1273},[74,91704,56066],{"class":84},[74,91706,56081],{"class":55581},[74,91708,55588],{"class":84},[27,91710,91711],{"start":94},[30,91712,91713],{},"递归函数要加判断条件：",[19,91715,91716],{},[1424,91717],{"alt":69,"src":91718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[27,91720,91721],{"start":1141},[30,91722,91723],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[64,91725,91727],{"className":54914,"code":91726,"language":54916,"meta":69,"style":69},"\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",[71,91728,91729,91739,91753,91757,91765,91779,91799,91811,91819,91823,91831,91843,91851,91859,91884,91896,91900,91907,91915,91923,91927],{"__ignoreMap":69},[74,91730,91731,91733,91735,91737],{"class":76,"line":77},[74,91732,55578],{"class":84},[74,91734,55582],{"class":55581},[74,91736,55585],{"class":1925},[74,91738,55588],{"class":84},[74,91740,91741,91743,91745,91747,91749,91751],{"class":76,"line":94},[74,91742,996],{"class":84},[74,91744,54916],{"class":55581},[74,91746,55597],{"class":1925},[74,91748,131],{"class":84},[74,91750,55602],{"class":190},[74,91752,55588],{"class":84},[74,91754,91755],{"class":76,"line":1141},[74,91756,2363],{"emptyLinePlaceholder":2362},[74,91758,91759,91761,91763],{"class":76,"line":1156},[74,91760,996],{"class":84},[74,91762,55615],{"class":55581},[74,91764,55588],{"class":84},[74,91766,91767,91769,91771,91773,91775,91777],{"class":76,"line":1162},[74,91768,56425],{"class":84},[74,91770,55625],{"class":55581},[74,91772,55628],{"class":1925},[74,91774,131],{"class":84},[74,91776,55633],{"class":190},[74,91778,55588],{"class":84},[74,91780,91781,91783,91785,91787,91789,91791,91793,91795,91797],{"class":76,"line":1176},[74,91782,56425],{"class":84},[74,91784,55625],{"class":55581},[74,91786,19199],{"class":1925},[74,91788,131],{"class":84},[74,91790,55672],{"class":190},[74,91792,55652],{"class":1925},[74,91794,131],{"class":84},[74,91796,55679],{"class":190},[74,91798,55588],{"class":84},[74,91800,91801,91803,91805,91807,91809],{"class":76,"line":1182},[74,91802,56425],{"class":84},[74,91804,55688],{"class":55581},[74,91806,55691],{"class":84},[74,91808,55688],{"class":55581},[74,91810,55588],{"class":84},[74,91812,91813,91815,91817],{"class":76,"line":1273},[74,91814,56066],{"class":84},[74,91816,55615],{"class":55581},[74,91818,55588],{"class":84},[74,91820,91821],{"class":76,"line":1279},[74,91822,2363],{"emptyLinePlaceholder":2362},[74,91824,91825,91827,91829],{"class":76,"line":1291},[74,91826,996],{"class":84},[74,91828,56081],{"class":55581},[74,91830,55588],{"class":84},[74,91832,91833,91835,91837,91839,91841],{"class":76,"line":1574},[74,91834,56425],{"class":84},[74,91836,55892],{"class":55581},[74,91838,59595],{"class":84},[74,91840,55892],{"class":55581},[74,91842,55588],{"class":84},[74,91844,91845,91847,91849],{"class":76,"line":1579},[74,91846,56425],{"class":84},[74,91848,56094],{"class":55581},[74,91850,55588],{"class":84},[74,91852,91853,91855,91857],{"class":76,"line":1585},[74,91854,74365],{"class":80},[74,91856,78054],{"class":1925},[74,91858,15132],{"class":84},[74,91860,91861,91863,91865,91867,91869,91871,91873,91875,91877,91879,91882],{"class":76,"line":1590},[74,91862,60052],{"class":84},[74,91864,58680],{"class":1925},[74,91866,85],{"class":84},[74,91868,86212],{"class":190},[74,91870,78530],{"class":84},[74,91872,131],{"class":80},[74,91874,15857],{"class":80},[74,91876,78070],{"class":1925},[74,91878,21540],{"class":84},[74,91880,91881],{"class":1925},"toLocaleString",[74,91883,1938],{"class":84},[74,91885,91886,91889,91892,91894],{"class":76,"line":1604},[74,91887,91888],{"class":1925},"      setTimeout",[74,91890,91891],{"class":84},"(getTime, ",[74,91893,10689],{"class":134},[74,91895,91],{"class":84},[74,91897,91898],{"class":76,"line":1609},[74,91899,2149],{"class":84},[74,91901,91902,91905],{"class":76,"line":1615},[74,91903,91904],{"class":1925},"    getTime",[74,91906,1938],{"class":84},[74,91908,91909,91911,91913],{"class":76,"line":1636},[74,91910,56698],{"class":84},[74,91912,56094],{"class":55581},[74,91914,55588],{"class":84},[74,91916,91917,91919,91921],{"class":76,"line":1641},[74,91918,56066],{"class":84},[74,91920,56081],{"class":55581},[74,91922,55588],{"class":84},[74,91924,91925],{"class":76,"line":1655},[74,91926,2363],{"emptyLinePlaceholder":2362},[74,91928,91929,91931,91933],{"class":76,"line":1660},[74,91930,56066],{"class":84},[74,91932,54916],{"class":55581},[74,91934,55588],{"class":84},[19,91936,91937],{},[1424,91938],{"alt":69,"src":91939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[27,91941,91942],{"start":1156},[30,91943,91633],{},[19,91945,91946],{},[1424,91947],{"alt":69,"src":91948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,91950,91951],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,91953,43470],{},[19,91955,91956],{},"这个是简易版的递归函数深拷贝",[19,91958,91959],{},"一定要注意先数组再对象，因为万物皆可对象",[64,91961,91963],{"className":54914,"code":91962,"language":54916,"meta":69,"style":69},"\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",[71,91964,91965,91975,91989,91993,92001,92015,92035,92047,92055,92059,92067,92075,92085,92094,92102,92118,92122,92130,92134,92138,92150,92155,92174,92190,92195,92200,92205,92220,92225,92230,92239,92247,92264,92272,92278,92286,92291,92296,92305,92309,92313,92317,92328,92337,92347,92361,92371,92379,92387,92395,92399],{"__ignoreMap":69},[74,91966,91967,91969,91971,91973],{"class":76,"line":77},[74,91968,55578],{"class":84},[74,91970,55582],{"class":55581},[74,91972,55585],{"class":1925},[74,91974,55588],{"class":84},[74,91976,91977,91979,91981,91983,91985,91987],{"class":76,"line":94},[74,91978,996],{"class":84},[74,91980,54916],{"class":55581},[74,91982,55597],{"class":1925},[74,91984,131],{"class":84},[74,91986,55602],{"class":190},[74,91988,55588],{"class":84},[74,91990,91991],{"class":76,"line":1141},[74,91992,2363],{"emptyLinePlaceholder":2362},[74,91994,91995,91997,91999],{"class":76,"line":1156},[74,91996,996],{"class":84},[74,91998,55615],{"class":55581},[74,92000,55588],{"class":84},[74,92002,92003,92005,92007,92009,92011,92013],{"class":76,"line":1162},[74,92004,56425],{"class":84},[74,92006,55625],{"class":55581},[74,92008,55628],{"class":1925},[74,92010,131],{"class":84},[74,92012,55633],{"class":190},[74,92014,55588],{"class":84},[74,92016,92017,92019,92021,92023,92025,92027,92029,92031,92033],{"class":76,"line":1176},[74,92018,56425],{"class":84},[74,92020,55625],{"class":55581},[74,92022,19199],{"class":1925},[74,92024,131],{"class":84},[74,92026,55672],{"class":190},[74,92028,55652],{"class":1925},[74,92030,131],{"class":84},[74,92032,55679],{"class":190},[74,92034,55588],{"class":84},[74,92036,92037,92039,92041,92043,92045],{"class":76,"line":1182},[74,92038,56425],{"class":84},[74,92040,55688],{"class":55581},[74,92042,55691],{"class":84},[74,92044,55688],{"class":55581},[74,92046,55588],{"class":84},[74,92048,92049,92051,92053],{"class":76,"line":1273},[74,92050,56066],{"class":84},[74,92052,55615],{"class":55581},[74,92054,55588],{"class":84},[74,92056,92057],{"class":76,"line":1279},[74,92058,2363],{"emptyLinePlaceholder":2362},[74,92060,92061,92063,92065],{"class":76,"line":1291},[74,92062,996],{"class":84},[74,92064,56081],{"class":55581},[74,92066,55588],{"class":84},[74,92068,92069,92071,92073],{"class":76,"line":1574},[74,92070,56425],{"class":84},[74,92072,56094],{"class":55581},[74,92074,55588],{"class":84},[74,92076,92077,92079,92081,92083],{"class":76,"line":1579},[74,92078,15500],{"class":80},[74,92080,74252],{"class":134},[74,92082,17843],{"class":80},[74,92084,19851],{"class":84},[74,92086,92087,92089,92092],{"class":76,"line":1585},[74,92088,75897],{"class":84},[74,92090,92091],{"class":190},"'pink'",[74,92093,35747],{"class":84},[74,92095,92096,92098,92100],{"class":76,"line":1590},[74,92097,75907],{"class":84},[74,92099,736],{"class":134},[74,92101,35747],{"class":84},[74,92103,92104,92107,92110,92112,92115],{"class":76,"line":1604},[74,92105,92106],{"class":84},"      hobby: [",[74,92108,92109],{"class":190},"'乒乓球'",[74,92111,16714],{"class":84},[74,92113,92114],{"class":190},"'足球'",[74,92116,92117],{"class":84},"],\n",[74,92119,92120],{"class":76,"line":1609},[74,92121,82153],{"class":84},[74,92123,92124,92127],{"class":76,"line":1615},[74,92125,92126],{"class":84},"        baby: ",[74,92128,92129],{"class":190},"'小pink'\n",[74,92131,92132],{"class":76,"line":1636},[74,92133,56679],{"class":84},[74,92135,92136],{"class":76,"line":1641},[74,92137,2149],{"class":84},[74,92139,92140,92142,92145,92147],{"class":76,"line":1655},[74,92141,15500],{"class":80},[74,92143,92144],{"class":134}," o",[74,92146,17843],{"class":80},[74,92148,92149],{"class":84}," {}\n",[74,92151,92152],{"class":76,"line":1660},[74,92153,92154],{"class":144},"    \u002F\u002F 拷贝函数\n",[74,92156,92157,92159,92162,92164,92167,92169,92172],{"class":76,"line":1689},[74,92158,74365],{"class":80},[74,92160,92161],{"class":1925}," deepCopy",[74,92163,85],{"class":84},[74,92165,92166],{"class":9495},"newObj",[74,92168,16714],{"class":84},[74,92170,92171],{"class":9495},"oldObj",[74,92173,16721],{"class":84},[74,92175,92176,92178,92180,92182,92185,92187],{"class":76,"line":1694},[74,92177,56565],{"class":80},[74,92179,1620],{"class":84},[74,92181,56128],{"class":80},[74,92183,92184],{"class":84}," k ",[74,92186,30324],{"class":80},[74,92188,92189],{"class":84}," oldObj) {\n",[74,92191,92192],{"class":76,"line":1711},[74,92193,92194],{"class":144},"        \u002F\u002F 处理数组的问题\n",[74,92196,92197],{"class":76,"line":1716},[74,92198,92199],{"class":144},"        \u002F\u002F 判断是否属于数组\n",[74,92201,92202],{"class":76,"line":1721},[74,92203,92204],{"class":144},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[74,92206,92207,92209,92212,92215,92218],{"class":76,"line":1726},[74,92208,2460],{"class":80},[74,92210,92211],{"class":84}," (oldObj[k] ",[74,92213,92214],{"class":80},"instanceof",[74,92216,92217],{"class":1925}," Array",[74,92219,16721],{"class":84},[74,92221,92222],{"class":76,"line":1740},[74,92223,92224],{"class":144},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[74,92226,92227],{"class":76,"line":1745},[74,92228,92229],{"class":144},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[74,92231,92232,92235,92237],{"class":76,"line":2540},[74,92233,92234],{"class":84},"          newObj[k] ",[74,92236,131],{"class":80},[74,92238,56119],{"class":84},[74,92240,92241,92244],{"class":76,"line":2554},[74,92242,92243],{"class":1925},"          deepCopy",[74,92245,92246],{"class":84},"(newObj[k], oldObj[k])\n",[74,92248,92249,92251,92253,92255,92257,92259,92262],{"class":76,"line":2562},[74,92250,84361],{"class":84},[74,92252,1663],{"class":80},[74,92254,1666],{"class":80},[74,92256,92211],{"class":84},[74,92258,92214],{"class":80},[74,92260,92261],{"class":1925}," Object",[74,92263,16721],{"class":84},[74,92265,92266,92268,92270],{"class":76,"line":2567},[74,92267,92234],{"class":84},[74,92269,131],{"class":80},[74,92271,92149],{"class":84},[74,92273,92274,92276],{"class":76,"line":2573},[74,92275,92243],{"class":1925},[74,92277,92246],{"class":84},[74,92279,92280,92282,92284],{"class":76,"line":2579},[74,92281,84361],{"class":84},[74,92283,1663],{"class":80},[74,92285,19851],{"class":84},[74,92287,92288],{"class":76,"line":2584},[74,92289,92290],{"class":144},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[74,92292,92293],{"class":76,"line":12227},[74,92294,92295],{"class":144},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[74,92297,92298,92300,92302],{"class":76,"line":12251},[74,92299,92234],{"class":84},[74,92301,131],{"class":80},[74,92303,92304],{"class":84}," oldObj[k]\n",[74,92306,92307],{"class":76,"line":12256},[74,92308,2492],{"class":84},[74,92310,92311],{"class":76,"line":12262},[74,92312,56679],{"class":84},[74,92314,92315],{"class":76,"line":12289},[74,92316,2149],{"class":84},[74,92318,92319,92322,92325],{"class":76,"line":12294},[74,92320,92321],{"class":1925},"    deepCopy",[74,92323,92324],{"class":84},"(o, obj) ",[74,92326,92327],{"class":144},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[74,92329,92330,92332,92334],{"class":76,"line":12300},[74,92331,78034],{"class":84},[74,92333,62528],{"class":1925},[74,92335,92336],{"class":84},"(o)\n",[74,92338,92339,92342,92344],{"class":76,"line":12312},[74,92340,92341],{"class":84},"    o.age ",[74,92343,131],{"class":80},[74,92345,92346],{"class":134}," 20\n",[74,92348,92349,92352,92354,92356,92358],{"class":76,"line":12324},[74,92350,92351],{"class":84},"    o.hobby[",[74,92353,277],{"class":134},[74,92355,4406],{"class":84},[74,92357,131],{"class":80},[74,92359,92360],{"class":190}," '篮球'\n",[74,92362,92363,92366,92368],{"class":76,"line":12336},[74,92364,92365],{"class":84},"    o.family ",[74,92367,131],{"class":80},[74,92369,92370],{"class":190}," '老pink'\n",[74,92372,92373,92375,92377],{"class":76,"line":13995},[74,92374,78034],{"class":84},[74,92376,62528],{"class":1925},[74,92378,74317],{"class":84},[74,92380,92381,92383,92385],{"class":76,"line":14020},[74,92382,56698],{"class":84},[74,92384,56094],{"class":55581},[74,92386,55588],{"class":84},[74,92388,92389,92391,92393],{"class":76,"line":14043},[74,92390,56066],{"class":84},[74,92392,56081],{"class":55581},[74,92394,55588],{"class":84},[74,92396,92397],{"class":76,"line":14067},[74,92398,2363],{"emptyLinePlaceholder":2362},[74,92400,92401,92403,92405],{"class":76,"line":14072},[74,92402,56066],{"class":84},[74,92404,54916],{"class":55581},[74,92406,55588],{"class":84},[19,92408,92409],{},[1424,92410],{"alt":69,"src":92411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[26277,92413,92415,92416],{"id":92414},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[235,92417,92418],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,92420,92421],{},[324,92422,92423],{"href":92423,"rel":92424},"https:\u002F\u002Fwww.lodashjs.com\u002F",[28145],[19,92426,92427],{},"lodash里边的方法都要加上一个下划线_",[19,92429,92430],{},"_.cloneDeep()",[64,92432,92434],{"className":54914,"code":92433,"language":54916,"meta":69,"style":69},"\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",[71,92435,92436,92446,92460,92464,92472,92486,92506,92518,92526,92530,92538,92543,92562,92570,92580,92588,92596,92608,92612,92618,92622,92626,92642,92650,92659,92667,92675,92683,92687],{"__ignoreMap":69},[74,92437,92438,92440,92442,92444],{"class":76,"line":77},[74,92439,55578],{"class":84},[74,92441,55582],{"class":55581},[74,92443,55585],{"class":1925},[74,92445,55588],{"class":84},[74,92447,92448,92450,92452,92454,92456,92458],{"class":76,"line":94},[74,92449,996],{"class":84},[74,92451,54916],{"class":55581},[74,92453,55597],{"class":1925},[74,92455,131],{"class":84},[74,92457,55602],{"class":190},[74,92459,55588],{"class":84},[74,92461,92462],{"class":76,"line":1141},[74,92463,2363],{"emptyLinePlaceholder":2362},[74,92465,92466,92468,92470],{"class":76,"line":1156},[74,92467,996],{"class":84},[74,92469,55615],{"class":55581},[74,92471,55588],{"class":84},[74,92473,92474,92476,92478,92480,92482,92484],{"class":76,"line":1162},[74,92475,56425],{"class":84},[74,92477,55625],{"class":55581},[74,92479,55628],{"class":1925},[74,92481,131],{"class":84},[74,92483,55633],{"class":190},[74,92485,55588],{"class":84},[74,92487,92488,92490,92492,92494,92496,92498,92500,92502,92504],{"class":76,"line":1176},[74,92489,56425],{"class":84},[74,92491,55625],{"class":55581},[74,92493,19199],{"class":1925},[74,92495,131],{"class":84},[74,92497,55672],{"class":190},[74,92499,55652],{"class":1925},[74,92501,131],{"class":84},[74,92503,55679],{"class":190},[74,92505,55588],{"class":84},[74,92507,92508,92510,92512,92514,92516],{"class":76,"line":1182},[74,92509,56425],{"class":84},[74,92511,55688],{"class":55581},[74,92513,55691],{"class":84},[74,92515,55688],{"class":55581},[74,92517,55588],{"class":84},[74,92519,92520,92522,92524],{"class":76,"line":1273},[74,92521,56066],{"class":84},[74,92523,55615],{"class":55581},[74,92525,55588],{"class":84},[74,92527,92528],{"class":76,"line":1279},[74,92529,2363],{"emptyLinePlaceholder":2362},[74,92531,92532,92534,92536],{"class":76,"line":1291},[74,92533,996],{"class":84},[74,92535,56081],{"class":55581},[74,92537,55588],{"class":84},[74,92539,92540],{"class":76,"line":1574},[74,92541,92542],{"class":144},"  \u003C!-- 先引用这个库 -->\n",[74,92544,92545,92547,92549,92551,92553,92556,92558,92560],{"class":76,"line":1579},[74,92546,56425],{"class":84},[74,92548,56094],{"class":55581},[74,92550,59520],{"class":1925},[74,92552,131],{"class":84},[74,92554,92555],{"class":190},"\"lodash.min.js\"",[74,92557,59595],{"class":84},[74,92559,56094],{"class":55581},[74,92561,55588],{"class":84},[74,92563,92564,92566,92568],{"class":76,"line":1585},[74,92565,56425],{"class":84},[74,92567,56094],{"class":55581},[74,92569,55588],{"class":84},[74,92571,92572,92574,92576,92578],{"class":76,"line":1590},[74,92573,15500],{"class":80},[74,92575,74252],{"class":134},[74,92577,17843],{"class":80},[74,92579,19851],{"class":84},[74,92581,92582,92584,92586],{"class":76,"line":1604},[74,92583,75897],{"class":84},[74,92585,92091],{"class":190},[74,92587,35747],{"class":84},[74,92589,92590,92592,92594],{"class":76,"line":1609},[74,92591,75907],{"class":84},[74,92593,736],{"class":134},[74,92595,35747],{"class":84},[74,92597,92598,92600,92602,92604,92606],{"class":76,"line":1615},[74,92599,92106],{"class":84},[74,92601,92109],{"class":190},[74,92603,16714],{"class":84},[74,92605,92114],{"class":190},[74,92607,92117],{"class":84},[74,92609,92610],{"class":76,"line":1636},[74,92611,82153],{"class":84},[74,92613,92614,92616],{"class":76,"line":1641},[74,92615,92126],{"class":84},[74,92617,92129],{"class":190},[74,92619,92620],{"class":76,"line":1655},[74,92621,56679],{"class":84},[74,92623,92624],{"class":76,"line":1660},[74,92625,2149],{"class":84},[74,92627,92628,92630,92632,92634,92637,92640],{"class":76,"line":1689},[74,92629,15500],{"class":80},[74,92631,92144],{"class":134},[74,92633,17843],{"class":80},[74,92635,92636],{"class":84}," _.",[74,92638,92639],{"class":1925},"cloneDeep",[74,92641,74317],{"class":84},[74,92643,92644,92646,92648],{"class":76,"line":1694},[74,92645,78034],{"class":84},[74,92647,62528],{"class":1925},[74,92649,92336],{"class":84},[74,92651,92652,92655,92657],{"class":76,"line":1711},[74,92653,92654],{"class":84},"    o.family.baby ",[74,92656,131],{"class":80},[74,92658,92370],{"class":190},[74,92660,92661,92663,92665],{"class":76,"line":1716},[74,92662,78034],{"class":84},[74,92664,62528],{"class":1925},[74,92666,74317],{"class":84},[74,92668,92669,92671,92673],{"class":76,"line":1721},[74,92670,56698],{"class":84},[74,92672,56094],{"class":55581},[74,92674,55588],{"class":84},[74,92676,92677,92679,92681],{"class":76,"line":1726},[74,92678,56066],{"class":84},[74,92680,56081],{"class":55581},[74,92682,55588],{"class":84},[74,92684,92685],{"class":76,"line":1740},[74,92686,2363],{"emptyLinePlaceholder":2362},[74,92688,92689,92691,92693],{"class":76,"line":1745},[74,92690,56066],{"class":84},[74,92692,54916],{"class":55581},[74,92694,55588],{"class":84},[19,92696,92697],{},[1424,92698],{"alt":69,"src":92699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[26277,92701,92703],{"id":92702},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[64,92705,92707],{"className":54914,"code":92706,"language":54916,"meta":69,"style":69},"\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",[71,92708,92709,92719,92733,92737,92745,92759,92779,92791,92799,92803,92811,92819,92829,92837,92845,92857,92861,92867,92871,92875,92880,92885,92890,92916,92924,92933,92941,92949,92957,92961],{"__ignoreMap":69},[74,92710,92711,92713,92715,92717],{"class":76,"line":77},[74,92712,55578],{"class":84},[74,92714,55582],{"class":55581},[74,92716,55585],{"class":1925},[74,92718,55588],{"class":84},[74,92720,92721,92723,92725,92727,92729,92731],{"class":76,"line":94},[74,92722,996],{"class":84},[74,92724,54916],{"class":55581},[74,92726,55597],{"class":1925},[74,92728,131],{"class":84},[74,92730,55602],{"class":190},[74,92732,55588],{"class":84},[74,92734,92735],{"class":76,"line":1141},[74,92736,2363],{"emptyLinePlaceholder":2362},[74,92738,92739,92741,92743],{"class":76,"line":1156},[74,92740,996],{"class":84},[74,92742,55615],{"class":55581},[74,92744,55588],{"class":84},[74,92746,92747,92749,92751,92753,92755,92757],{"class":76,"line":1162},[74,92748,56425],{"class":84},[74,92750,55625],{"class":55581},[74,92752,55628],{"class":1925},[74,92754,131],{"class":84},[74,92756,55633],{"class":190},[74,92758,55588],{"class":84},[74,92760,92761,92763,92765,92767,92769,92771,92773,92775,92777],{"class":76,"line":1176},[74,92762,56425],{"class":84},[74,92764,55625],{"class":55581},[74,92766,19199],{"class":1925},[74,92768,131],{"class":84},[74,92770,55672],{"class":190},[74,92772,55652],{"class":1925},[74,92774,131],{"class":84},[74,92776,55679],{"class":190},[74,92778,55588],{"class":84},[74,92780,92781,92783,92785,92787,92789],{"class":76,"line":1182},[74,92782,56425],{"class":84},[74,92784,55688],{"class":55581},[74,92786,55691],{"class":84},[74,92788,55688],{"class":55581},[74,92790,55588],{"class":84},[74,92792,92793,92795,92797],{"class":76,"line":1273},[74,92794,56066],{"class":84},[74,92796,55615],{"class":55581},[74,92798,55588],{"class":84},[74,92800,92801],{"class":76,"line":1279},[74,92802,2363],{"emptyLinePlaceholder":2362},[74,92804,92805,92807,92809],{"class":76,"line":1291},[74,92806,996],{"class":84},[74,92808,56081],{"class":55581},[74,92810,55588],{"class":84},[74,92812,92813,92815,92817],{"class":76,"line":1574},[74,92814,56425],{"class":84},[74,92816,56094],{"class":55581},[74,92818,55588],{"class":84},[74,92820,92821,92823,92825,92827],{"class":76,"line":1579},[74,92822,15500],{"class":80},[74,92824,74252],{"class":134},[74,92826,17843],{"class":80},[74,92828,19851],{"class":84},[74,92830,92831,92833,92835],{"class":76,"line":1585},[74,92832,75897],{"class":84},[74,92834,92091],{"class":190},[74,92836,35747],{"class":84},[74,92838,92839,92841,92843],{"class":76,"line":1590},[74,92840,75907],{"class":84},[74,92842,736],{"class":134},[74,92844,35747],{"class":84},[74,92846,92847,92849,92851,92853,92855],{"class":76,"line":1604},[74,92848,92106],{"class":84},[74,92850,92109],{"class":190},[74,92852,16714],{"class":84},[74,92854,92114],{"class":190},[74,92856,92117],{"class":84},[74,92858,92859],{"class":76,"line":1609},[74,92860,82153],{"class":84},[74,92862,92863,92865],{"class":76,"line":1615},[74,92864,92126],{"class":84},[74,92866,92129],{"class":190},[74,92868,92869],{"class":76,"line":1636},[74,92870,56679],{"class":84},[74,92872,92873],{"class":76,"line":1641},[74,92874,2149],{"class":84},[74,92876,92877],{"class":76,"line":1655},[74,92878,92879],{"class":144},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[74,92881,92882],{"class":76,"line":1660},[74,92883,92884],{"class":144},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[74,92886,92887],{"class":76,"line":1689},[74,92888,92889],{"class":144},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[74,92891,92892,92894,92896,92898,92901,92903,92906,92908,92910,92912,92914],{"class":76,"line":1694},[74,92893,15500],{"class":80},[74,92895,92144],{"class":134},[74,92897,17843],{"class":80},[74,92899,92900],{"class":134}," JSON",[74,92902,644],{"class":84},[74,92904,92905],{"class":1925},"parse",[74,92907,85],{"class":84},[74,92909,75945],{"class":134},[74,92911,644],{"class":84},[74,92913,75950],{"class":1925},[74,92915,75953],{"class":84},[74,92917,92918,92920,92922],{"class":76,"line":1711},[74,92919,78034],{"class":84},[74,92921,62528],{"class":1925},[74,92923,92336],{"class":84},[74,92925,92926,92928,92930],{"class":76,"line":1716},[74,92927,92654],{"class":84},[74,92929,131],{"class":80},[74,92931,92932],{"class":190}," '123'\n",[74,92934,92935,92937,92939],{"class":76,"line":1721},[74,92936,78034],{"class":84},[74,92938,62528],{"class":1925},[74,92940,74317],{"class":84},[74,92942,92943,92945,92947],{"class":76,"line":1726},[74,92944,56698],{"class":84},[74,92946,56094],{"class":55581},[74,92948,55588],{"class":84},[74,92950,92951,92953,92955],{"class":76,"line":1740},[74,92952,56066],{"class":84},[74,92954,56081],{"class":55581},[74,92956,55588],{"class":84},[74,92958,92959],{"class":76,"line":1745},[74,92960,2363],{"emptyLinePlaceholder":2362},[74,92962,92963,92965,92967],{"class":76,"line":2540},[74,92964,56066],{"class":84},[74,92966,54916],{"class":55581},[74,92968,55588],{"class":84},[19,92970,92971],{},[1424,92972],{"alt":69,"src":92973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,92975,92977],{"id":92976},"_415-异常处理","4.15 异常处理",[27,92979,92980],{},[30,92981,92982],{},"throw抛异常",[19,92984,92985],{},[1424,92986],{"alt":69,"src":92987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[27,92989,92990],{"start":94},[30,92991,92992],{},"try\u002Fcatch 捕获错误信息",[19,92994,92995],{},[1424,92996],{"alt":69,"src":92997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[64,92999,93001],{"className":54914,"code":93000,"language":54916,"meta":69,"style":69},"\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",[71,93002,93003,93013,93027,93031,93039,93053,93073,93085,93093,93097,93105,93117,93125,93134,93141,93146,93165,93174,93185,93190,93200,93205,93210,93215,93232,93236,93241,93248,93260,93264,93276,93280,93284,93289,93294,93301,93309,93317,93321],{"__ignoreMap":69},[74,93004,93005,93007,93009,93011],{"class":76,"line":77},[74,93006,55578],{"class":84},[74,93008,55582],{"class":55581},[74,93010,55585],{"class":1925},[74,93012,55588],{"class":84},[74,93014,93015,93017,93019,93021,93023,93025],{"class":76,"line":94},[74,93016,996],{"class":84},[74,93018,54916],{"class":55581},[74,93020,55597],{"class":1925},[74,93022,131],{"class":84},[74,93024,55602],{"class":190},[74,93026,55588],{"class":84},[74,93028,93029],{"class":76,"line":1141},[74,93030,2363],{"emptyLinePlaceholder":2362},[74,93032,93033,93035,93037],{"class":76,"line":1156},[74,93034,996],{"class":84},[74,93036,55615],{"class":55581},[74,93038,55588],{"class":84},[74,93040,93041,93043,93045,93047,93049,93051],{"class":76,"line":1162},[74,93042,56425],{"class":84},[74,93044,55625],{"class":55581},[74,93046,55628],{"class":1925},[74,93048,131],{"class":84},[74,93050,55633],{"class":190},[74,93052,55588],{"class":84},[74,93054,93055,93057,93059,93061,93063,93065,93067,93069,93071],{"class":76,"line":1176},[74,93056,56425],{"class":84},[74,93058,55625],{"class":55581},[74,93060,19199],{"class":1925},[74,93062,131],{"class":84},[74,93064,55672],{"class":190},[74,93066,55652],{"class":1925},[74,93068,131],{"class":84},[74,93070,55679],{"class":190},[74,93072,55588],{"class":84},[74,93074,93075,93077,93079,93081,93083],{"class":76,"line":1182},[74,93076,56425],{"class":84},[74,93078,55688],{"class":55581},[74,93080,55691],{"class":84},[74,93082,55688],{"class":55581},[74,93084,55588],{"class":84},[74,93086,93087,93089,93091],{"class":76,"line":1273},[74,93088,56066],{"class":84},[74,93090,55615],{"class":55581},[74,93092,55588],{"class":84},[74,93094,93095],{"class":76,"line":1279},[74,93096,2363],{"emptyLinePlaceholder":2362},[74,93098,93099,93101,93103],{"class":76,"line":1291},[74,93100,996],{"class":84},[74,93102,56081],{"class":55581},[74,93104,55588],{"class":84},[74,93106,93107,93109,93111,93113,93115],{"class":76,"line":1574},[74,93108,56425],{"class":84},[74,93110,19],{"class":55581},[74,93112,57775],{"class":84},[74,93114,19],{"class":55581},[74,93116,55588],{"class":84},[74,93118,93119,93121,93123],{"class":76,"line":1579},[74,93120,56425],{"class":84},[74,93122,56094],{"class":55581},[74,93124,55588],{"class":84},[74,93126,93127,93129,93132],{"class":76,"line":1585},[74,93128,74365],{"class":80},[74,93130,93131],{"class":1925}," fn",[74,93133,15132],{"class":84},[74,93135,93136,93139],{"class":76,"line":1590},[74,93137,93138],{"class":80},"      try",[74,93140,19851],{"class":84},[74,93142,93143],{"class":76,"line":1604},[74,93144,93145],{"class":144},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[74,93147,93148,93150,93152,93154,93156,93158,93160,93163],{"class":76,"line":1609},[74,93149,65551],{"class":80},[74,93151,11104],{"class":134},[74,93153,17843],{"class":80},[74,93155,58677],{"class":84},[74,93157,58680],{"class":1925},[74,93159,85],{"class":84},[74,93161,93162],{"class":190},"'.p'",[74,93164,91],{"class":84},[74,93166,93167,93170,93172],{"class":76,"line":1615},[74,93168,93169],{"class":84},"        p.style.color ",[74,93171,131],{"class":80},[74,93173,71332],{"class":190},[74,93175,93176,93179,93182],{"class":76,"line":1636},[74,93177,93178],{"class":84},"      } ",[74,93180,93181],{"class":80},"catch",[74,93183,93184],{"class":84}," (err) {\n",[74,93186,93187],{"class":76,"line":1641},[74,93188,93189],{"class":144},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[74,93191,93192,93195,93197],{"class":76,"line":1655},[74,93193,93194],{"class":84},"        console.",[74,93196,62528],{"class":1925},[74,93198,93199],{"class":84},"(err.message)\n",[74,93201,93202],{"class":76,"line":1660},[74,93203,93204],{"class":144},"        \u002F\u002F 想要中断程序，需要加return\n",[74,93206,93207],{"class":76,"line":1689},[74,93208,93209],{"class":144},"        \u002F\u002F return\n",[74,93211,93212],{"class":76,"line":1694},[74,93213,93214],{"class":144},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[74,93216,93217,93220,93222,93225,93227,93230],{"class":76,"line":1711},[74,93218,93219],{"class":80},"        throw",[74,93221,15857],{"class":80},[74,93223,93224],{"class":1925}," Error",[74,93226,85],{"class":84},[74,93228,93229],{"class":190},"'你看看，选择器错误了吧'",[74,93231,91],{"class":84},[74,93233,93234],{"class":76,"line":1716},[74,93235,56679],{"class":84},[74,93237,93238],{"class":76,"line":1721},[74,93239,93240],{"class":144},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[74,93242,93243,93246],{"class":76,"line":1726},[74,93244,93245],{"class":80},"      finally",[74,93247,19851],{"class":84},[74,93249,93250,93253,93255,93258],{"class":76,"line":1740},[74,93251,93252],{"class":1925},"        alert",[74,93254,85],{"class":84},[74,93256,93257],{"class":190},"'弹出对话框'",[74,93259,91],{"class":84},[74,93261,93262],{"class":76,"line":1745},[74,93263,56679],{"class":84},[74,93265,93266,93268,93270,93272,93274],{"class":76,"line":2540},[74,93267,62525],{"class":84},[74,93269,62528],{"class":1925},[74,93271,85],{"class":84},[74,93273,558],{"class":134},[74,93275,91],{"class":84},[74,93277,93278],{"class":76,"line":2554},[74,93279,2363],{"emptyLinePlaceholder":2362},[74,93281,93282],{"class":76,"line":2562},[74,93283,2149],{"class":84},[74,93285,93286],{"class":76,"line":2567},[74,93287,93288],{"class":144},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[74,93290,93291],{"class":76,"line":2573},[74,93292,93293],{"class":144},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[74,93295,93296,93299],{"class":76,"line":2579},[74,93297,93298],{"class":1925},"    fn",[74,93300,1938],{"class":84},[74,93302,93303,93305,93307],{"class":76,"line":2584},[74,93304,56698],{"class":84},[74,93306,56094],{"class":55581},[74,93308,55588],{"class":84},[74,93310,93311,93313,93315],{"class":76,"line":12227},[74,93312,56066],{"class":84},[74,93314,56081],{"class":55581},[74,93316,55588],{"class":84},[74,93318,93319],{"class":76,"line":12251},[74,93320,2363],{"emptyLinePlaceholder":2362},[74,93322,93323,93325,93327],{"class":76,"line":12256},[74,93324,56066],{"class":84},[74,93326,54916],{"class":55581},[74,93328,55588],{"class":84},[19,93330,93331],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[27,93333,93334],{"start":1141},[30,93335,93336],{},"debugger",[19,93338,93339],{},[1424,93340],{"alt":69,"src":93341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,93343,93344],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,93346,93348],{"id":93347},"_416-处理this","4.16 处理this",[44,93350,93352],{"id":93351},"_4161-this的指向","4.16.1 this的指向",[27,93354,93355],{},[30,93356,93357],{},"普通函数的this",[19,93359,93360],{},[1424,93361],{"alt":69,"src":93362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[27,93364,93365],{"start":94},[30,93366,93367],{},"箭头函数的this",[19,93369,93370],{},[1424,93371],{"alt":69,"src":93372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,93374,93375],{},[1424,93376],{"alt":69,"src":93377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,93379,93380],{},[1424,93381],{"alt":69,"src":93382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[44,93384,93386],{"id":93385},"_4162-this的改变","4.16.2 this的改变",[19,93388,93389],{},"call() apply() bind()",[27,93391,93392],{},[30,93393,93394],{},"call()",[19,93396,93397],{},[1424,93398],{"alt":69,"src":93399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,93401,93402],{},"两个作用：①调用函数；②改变this指向",[64,93404,93406],{"className":57348,"code":93405,"language":57350,"meta":69,"style":69},"\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",[71,93407,93408,93416,93424,93428,93433,93437,93442,93447,93452,93456,93461,93469],{"__ignoreMap":69},[74,93409,93410,93412,93414],{"class":76,"line":77},[74,93411,996],{"class":84},[74,93413,56081],{"class":55581},[74,93415,55588],{"class":84},[74,93417,93418,93420,93422],{"class":76,"line":94},[74,93419,56425],{"class":84},[74,93421,56094],{"class":55581},[74,93423,55588],{"class":84},[74,93425,93426],{"class":76,"line":1141},[74,93427,75804],{"class":84},[74,93429,93430],{"class":76,"line":1156},[74,93431,93432],{"class":84},"      uname: 'pink'\n",[74,93434,93435],{"class":76,"line":1162},[74,93436,2149],{"class":84},[74,93438,93439],{"class":76,"line":1176},[74,93440,93441],{"class":84},"    function fn(x, y) {\n",[74,93443,93444],{"class":76,"line":1182},[74,93445,93446],{"class":84},"      console.log(this)  \u002F\u002Fwindow\n",[74,93448,93449],{"class":76,"line":1273},[74,93450,93451],{"class":84},"      console.log(x + y)\n",[74,93453,93454],{"class":76,"line":1279},[74,93455,2149],{"class":84},[74,93457,93458],{"class":76,"line":1291},[74,93459,93460],{"class":84},"    fn.call(obj, 1, 2)\n",[74,93462,93463,93465,93467],{"class":76,"line":1574},[74,93464,56698],{"class":84},[74,93466,56094],{"class":55581},[74,93468,55588],{"class":84},[74,93470,93471,93473,93475],{"class":76,"line":1579},[74,93472,56066],{"class":84},[74,93474,56081],{"class":55581},[74,93476,55588],{"class":84},[19,93478,93479],{},[1424,93480],{"alt":69,"src":93481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[27,93483,93484],{"start":94},[30,93485,93486],{},"apply()",[19,93488,93489],{},[1424,93490],{"alt":69,"src":93491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,93493,93402],{},[19,93495,93496],{},"call传递的是普通参数，而apply必须传递的是数组",[64,93498,93500],{"className":54914,"code":93499,"language":54916,"meta":69,"style":69},"\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",[71,93501,93502,93512,93526,93530,93538,93552,93572,93584,93592,93596,93604,93612,93622,93629,93633,93638,93654,93666,93680,93684,93689,93708,93713,93717,93722,93727,93735,93740,93762,93767,93783,93799,93811,93815,93820,93839,93847,93855,93859],{"__ignoreMap":69},[74,93503,93504,93506,93508,93510],{"class":76,"line":77},[74,93505,55578],{"class":84},[74,93507,55582],{"class":55581},[74,93509,55585],{"class":1925},[74,93511,55588],{"class":84},[74,93513,93514,93516,93518,93520,93522,93524],{"class":76,"line":94},[74,93515,996],{"class":84},[74,93517,54916],{"class":55581},[74,93519,55597],{"class":1925},[74,93521,131],{"class":84},[74,93523,55602],{"class":190},[74,93525,55588],{"class":84},[74,93527,93528],{"class":76,"line":1141},[74,93529,2363],{"emptyLinePlaceholder":2362},[74,93531,93532,93534,93536],{"class":76,"line":1156},[74,93533,996],{"class":84},[74,93535,55615],{"class":55581},[74,93537,55588],{"class":84},[74,93539,93540,93542,93544,93546,93548,93550],{"class":76,"line":1162},[74,93541,56425],{"class":84},[74,93543,55625],{"class":55581},[74,93545,55628],{"class":1925},[74,93547,131],{"class":84},[74,93549,55633],{"class":190},[74,93551,55588],{"class":84},[74,93553,93554,93556,93558,93560,93562,93564,93566,93568,93570],{"class":76,"line":1176},[74,93555,56425],{"class":84},[74,93557,55625],{"class":55581},[74,93559,19199],{"class":1925},[74,93561,131],{"class":84},[74,93563,55672],{"class":190},[74,93565,55652],{"class":1925},[74,93567,131],{"class":84},[74,93569,55679],{"class":190},[74,93571,55588],{"class":84},[74,93573,93574,93576,93578,93580,93582],{"class":76,"line":1182},[74,93575,56425],{"class":84},[74,93577,55688],{"class":55581},[74,93579,55691],{"class":84},[74,93581,55688],{"class":55581},[74,93583,55588],{"class":84},[74,93585,93586,93588,93590],{"class":76,"line":1273},[74,93587,56066],{"class":84},[74,93589,55615],{"class":55581},[74,93591,55588],{"class":84},[74,93593,93594],{"class":76,"line":1279},[74,93595,2363],{"emptyLinePlaceholder":2362},[74,93597,93598,93600,93602],{"class":76,"line":1291},[74,93599,996],{"class":84},[74,93601,56081],{"class":55581},[74,93603,55588],{"class":84},[74,93605,93606,93608,93610],{"class":76,"line":1574},[74,93607,56425],{"class":84},[74,93609,56094],{"class":55581},[74,93611,55588],{"class":84},[74,93613,93614,93616,93618,93620],{"class":76,"line":1579},[74,93615,15500],{"class":80},[74,93617,74252],{"class":134},[74,93619,17843],{"class":80},[74,93621,19851],{"class":84},[74,93623,93624,93626],{"class":76,"line":1585},[74,93625,75907],{"class":84},[74,93627,93628],{"class":134},"18\n",[74,93630,93631],{"class":76,"line":1590},[74,93632,2149],{"class":84},[74,93634,93635],{"class":76,"line":1604},[74,93636,93637],{"class":144},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[74,93639,93640,93642,93644,93646,93648,93650,93652],{"class":76,"line":1609},[74,93641,74365],{"class":80},[74,93643,93131],{"class":1925},[74,93645,85],{"class":84},[74,93647,906],{"class":9495},[74,93649,16714],{"class":84},[74,93651,931],{"class":9495},[74,93653,16721],{"class":84},[74,93655,93656,93658,93660,93662,93664],{"class":76,"line":1615},[74,93657,62525],{"class":84},[74,93659,62528],{"class":1925},[74,93661,85],{"class":84},[74,93663,91274],{"class":134},[74,93665,91],{"class":84},[74,93667,93668,93670,93672,93675,93677],{"class":76,"line":1636},[74,93669,62525],{"class":84},[74,93671,62528],{"class":1925},[74,93673,93674],{"class":84},"(x ",[74,93676,567],{"class":80},[74,93678,93679],{"class":84}," y)\n",[74,93681,93682],{"class":76,"line":1641},[74,93683,2149],{"class":84},[74,93685,93686],{"class":76,"line":1655},[74,93687,93688],{"class":144},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[74,93690,93691,93694,93697,93700,93702,93704,93706],{"class":76,"line":1660},[74,93692,93693],{"class":84},"    fn.",[74,93695,93696],{"class":1925},"apply",[74,93698,93699],{"class":84},"(obj, [",[74,93701,303],{"class":134},[74,93703,16714],{"class":84},[74,93705,163],{"class":134},[74,93707,4620],{"class":84},[74,93709,93710],{"class":76,"line":1689},[74,93711,93712],{"class":144},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[74,93714,93715],{"class":76,"line":1694},[74,93716,2363],{"emptyLinePlaceholder":2362},[74,93718,93719],{"class":76,"line":1711},[74,93720,93721],{"class":144},"    \u002F\u002F 使用场景：求数组最大值\n",[74,93723,93724],{"class":76,"line":1716},[74,93725,93726],{"class":144},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[74,93728,93729,93732],{"class":76,"line":1721},[74,93730,93731],{"class":144},"    \u002F\u002F console.log(max)",[74,93733,93734],{"class":144},"   \u002F\u002F3\n",[74,93736,93737],{"class":76,"line":1726},[74,93738,93739],{"class":144},"    \u002F\u002F 指向空或者Math都是可以的\n",[74,93741,93742,93744,93746,93748,93750,93752,93754,93756,93758,93760],{"class":76,"line":1740},[74,93743,15500],{"class":80},[74,93745,61976],{"class":134},[74,93747,17843],{"class":80},[74,93749,56507],{"class":84},[74,93751,397],{"class":134},[74,93753,16714],{"class":84},[74,93755,590],{"class":134},[74,93757,16714],{"class":84},[74,93759,621],{"class":134},[74,93761,37527],{"class":84},[74,93763,93764],{"class":76,"line":1745},[74,93765,93766],{"class":144},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[74,93768,93769,93771,93773,93775,93778,93780],{"class":76,"line":2540},[74,93770,15500],{"class":80},[74,93772,10230],{"class":134},[74,93774,17843],{"class":80},[74,93776,93777],{"class":84}," Math.max.",[74,93779,93696],{"class":1925},[74,93781,93782],{"class":84},"(Math, arr)\n",[74,93784,93785,93787,93790,93792,93795,93797],{"class":76,"line":2554},[74,93786,15500],{"class":80},[74,93788,93789],{"class":134}," min",[74,93791,17843],{"class":80},[74,93793,93794],{"class":84}," Math.min.",[74,93796,93696],{"class":1925},[74,93798,93782],{"class":84},[74,93800,93801,93803,93805,93808],{"class":76,"line":2562},[74,93802,78034],{"class":84},[74,93804,62528],{"class":1925},[74,93806,93807],{"class":84},"(max, min)     ",[74,93809,93810],{"class":144},"\u002F\u002F100,4\n",[74,93812,93813],{"class":76,"line":2567},[74,93814,2363],{"emptyLinePlaceholder":2362},[74,93816,93817],{"class":76,"line":2573},[74,93818,93819],{"class":144},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[74,93821,93822,93824,93826,93829,93831,93833,93836],{"class":76,"line":2579},[74,93823,78034],{"class":84},[74,93825,62528],{"class":1925},[74,93827,93828],{"class":84},"(Max.",[74,93830,10294],{"class":1925},[74,93832,85],{"class":84},[74,93834,93835],{"class":80},"...",[74,93837,93838],{"class":84},"arr))\n",[74,93840,93841,93843,93845],{"class":76,"line":2584},[74,93842,56698],{"class":84},[74,93844,56094],{"class":55581},[74,93846,55588],{"class":84},[74,93848,93849,93851,93853],{"class":76,"line":12227},[74,93850,56066],{"class":84},[74,93852,56081],{"class":55581},[74,93854,55588],{"class":84},[74,93856,93857],{"class":76,"line":12251},[74,93858,2363],{"emptyLinePlaceholder":2362},[74,93860,93861,93863,93865],{"class":76,"line":12256},[74,93862,56066],{"class":84},[74,93864,54916],{"class":55581},[74,93866,55588],{"class":84},[19,93868,93869],{},[1424,93870],{"alt":69,"src":93871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[27,93873,93874],{"start":1141},[30,93875,93876],{},"bind()",[19,93878,93879],{},[1424,93880],{"alt":69,"src":93881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,93883,93884],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,93886,93887],{},"bind的语法跟call很相似",[64,93889,93891],{"className":57348,"code":93890,"language":57350,"meta":69,"style":69},"\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",[71,93892,93893,93901,93909,93913,93918,93922,93926,93931,93935,93940,93945,93950,93955,93960,93965,93970,93974,93982],{"__ignoreMap":69},[74,93894,93895,93897,93899],{"class":76,"line":77},[74,93896,996],{"class":84},[74,93898,56081],{"class":55581},[74,93900,55588],{"class":84},[74,93902,93903,93905,93907],{"class":76,"line":94},[74,93904,56425],{"class":84},[74,93906,56094],{"class":55581},[74,93908,55588],{"class":84},[74,93910,93911],{"class":76,"line":1141},[74,93912,75804],{"class":84},[74,93914,93915],{"class":76,"line":1156},[74,93916,93917],{"class":84},"      age: 18\n",[74,93919,93920],{"class":76,"line":1162},[74,93921,2149],{"class":84},[74,93923,93924],{"class":76,"line":1176},[74,93925,81424],{"class":84},[74,93927,93928],{"class":76,"line":1182},[74,93929,93930],{"class":84},"      console.log(this)\n",[74,93932,93933],{"class":76,"line":1273},[74,93934,2149],{"class":84},[74,93936,93937],{"class":76,"line":1279},[74,93938,93939],{"class":84},"    \u002F\u002F 1.bind 不会调用函数\n",[74,93941,93942],{"class":76,"line":1291},[74,93943,93944],{"class":84},"    \u002F\u002F 2.bind能改变this的指向\n",[74,93946,93947],{"class":76,"line":1574},[74,93948,93949],{"class":84},"    fn.bind()\n",[74,93951,93952],{"class":76,"line":1579},[74,93953,93954],{"class":84},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[74,93956,93957],{"class":76,"line":1585},[74,93958,93959],{"class":84},"    const fun = fn.bind(obj)\n",[74,93961,93962],{"class":76,"line":1590},[74,93963,93964],{"class":84},"    \u002F\u002F console.log(fun)\n",[74,93966,93967],{"class":76,"line":1604},[74,93968,93969],{"class":84},"    \u002F\u002F 调用,查看this的指向\n",[74,93971,93972],{"class":76,"line":1609},[74,93973,56932],{"class":84},[74,93975,93976,93978,93980],{"class":76,"line":1615},[74,93977,56698],{"class":84},[74,93979,56094],{"class":55581},[74,93981,55588],{"class":84},[74,93983,93984,93986,93988],{"class":76,"line":1636},[74,93985,56066],{"class":84},[74,93987,56081],{"class":55581},[74,93989,55588],{"class":84},[19,93991,93992],{},[1424,93993],{"alt":69,"src":93994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[27,93996,93997],{"start":1156},[30,93998,93999],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[64,94001,94003],{"className":57348,"code":94002,"language":57350,"meta":69,"style":69},"\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",[71,94004,94005,94013,94026,94034,94039,94043,94048,94053,94058,94063,94068,94073,94078,94083,94087,94095],{"__ignoreMap":69},[74,94006,94007,94009,94011],{"class":76,"line":77},[74,94008,996],{"class":84},[74,94010,56081],{"class":55581},[74,94012,55588],{"class":84},[74,94014,94015,94017,94019,94022,94024],{"class":76,"line":94},[74,94016,56425],{"class":84},[74,94018,58168],{"class":55581},[74,94020,94021],{"class":84},">禁用\u003C\u002F",[74,94023,58168],{"class":55581},[74,94025,55588],{"class":84},[74,94027,94028,94030,94032],{"class":76,"line":1141},[74,94029,56425],{"class":84},[74,94031,56094],{"class":55581},[74,94033,55588],{"class":84},[74,94035,94036],{"class":76,"line":1156},[74,94037,94038],{"class":84},"    const btn = document.querySelector('button')\n",[74,94040,94041],{"class":76,"line":1162},[74,94042,63297],{"class":84},[74,94044,94045],{"class":76,"line":1176},[74,94046,94047],{"class":84},"      this.disabled = true\n",[74,94049,94050],{"class":76,"line":1182},[74,94051,94052],{"class":84},"      \u002F\u002F 定时器是window进行调用的\n",[74,94054,94055],{"class":76,"line":1273},[74,94056,94057],{"class":84},"      setTimeout(function () {\n",[74,94059,94060],{"class":76,"line":1279},[74,94061,94062],{"class":84},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[74,94064,94065],{"class":76,"line":1291},[74,94066,94067],{"class":84},"        this.disabled = false\n",[74,94069,94070],{"class":76,"line":1574},[74,94071,94072],{"class":84},"      }.bind(this), 2000)\n",[74,94074,94075],{"class":76,"line":1579},[74,94076,94077],{"class":84},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[74,94079,94080],{"class":76,"line":1585},[74,94081,94082],{"class":84},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[74,94084,94085],{"class":76,"line":1590},[74,94086,37742],{"class":84},[74,94088,94089,94091,94093],{"class":76,"line":1604},[74,94090,56698],{"class":84},[74,94092,56094],{"class":55581},[74,94094,55588],{"class":84},[74,94096,94097,94099,94101],{"class":76,"line":1609},[74,94098,56066],{"class":84},[74,94100,56081],{"class":55581},[74,94102,55588],{"class":84},[27,94104,94105],{"start":1162},[30,94106,26232],{},[19,94108,94109],{},[1424,94110],{"alt":69,"src":94111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,94113,94115],{"id":94114},"_417-性能优化","4.17 性能优化",[44,94117,94119],{"id":94118},"_4171-防抖","4.17.1 防抖",[19,94121,94122],{},[1424,94123],{"alt":69,"src":94124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,94126,94127],{},[235,94128,94129],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,94131,94132],{},"防抖实现方式：",[1093,94134,94135],{},[30,94136,94137],{},"lodash 提供了防抖处理",[19,94139,94140],{},"_.debounce(func,[wait=0],[options={}])",[19,94142,94143],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[64,94145,94147],{"className":54914,"code":94146,"language":54916,"meta":69,"style":69},"\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",[71,94148,94149,94159,94173,94177,94185,94199,94219,94231,94239,94245,94255,94267,94279,94290,94302,94312,94322,94335,94339,94347,94355,94359,94367,94385,94403,94411,94430,94440,94449,94460,94465,94469,94474,94479,94484,94509,94517,94525,94529],{"__ignoreMap":69},[74,94150,94151,94153,94155,94157],{"class":76,"line":77},[74,94152,55578],{"class":84},[74,94154,55582],{"class":55581},[74,94156,55585],{"class":1925},[74,94158,55588],{"class":84},[74,94160,94161,94163,94165,94167,94169,94171],{"class":76,"line":94},[74,94162,996],{"class":84},[74,94164,54916],{"class":55581},[74,94166,55597],{"class":1925},[74,94168,131],{"class":84},[74,94170,55602],{"class":190},[74,94172,55588],{"class":84},[74,94174,94175],{"class":76,"line":1141},[74,94176,2363],{"emptyLinePlaceholder":2362},[74,94178,94179,94181,94183],{"class":76,"line":1156},[74,94180,996],{"class":84},[74,94182,55615],{"class":55581},[74,94184,55588],{"class":84},[74,94186,94187,94189,94191,94193,94195,94197],{"class":76,"line":1162},[74,94188,56425],{"class":84},[74,94190,55625],{"class":55581},[74,94192,55628],{"class":1925},[74,94194,131],{"class":84},[74,94196,55633],{"class":190},[74,94198,55588],{"class":84},[74,94200,94201,94203,94205,94207,94209,94211,94213,94215,94217],{"class":76,"line":1176},[74,94202,56425],{"class":84},[74,94204,55625],{"class":55581},[74,94206,19199],{"class":1925},[74,94208,131],{"class":84},[74,94210,55672],{"class":190},[74,94212,55652],{"class":1925},[74,94214,131],{"class":84},[74,94216,55679],{"class":190},[74,94218,55588],{"class":84},[74,94220,94221,94223,94225,94227,94229],{"class":76,"line":1182},[74,94222,56425],{"class":84},[74,94224,55688],{"class":55581},[74,94226,55691],{"class":84},[74,94228,55688],{"class":55581},[74,94230,55588],{"class":84},[74,94232,94233,94235,94237],{"class":76,"line":1273},[74,94234,56425],{"class":84},[74,94236,5090],{"class":55581},[74,94238,55588],{"class":84},[74,94240,94241,94243],{"class":76,"line":1279},[74,94242,59033],{"class":1925},[74,94244,19851],{"class":84},[74,94246,94247,94249,94251,94253],{"class":76,"line":1291},[74,94248,76877],{"class":134},[74,94250,55718],{"class":84},[74,94252,64786],{"class":134},[74,94254,1252],{"class":84},[74,94256,94257,94259,94261,94263,94265],{"class":76,"line":1574},[74,94258,59052],{"class":134},[74,94260,55718],{"class":84},[74,94262,1684],{"class":134},[74,94264,55773],{"class":80},[74,94266,1252],{"class":84},[74,94268,94269,94271,94273,94275,94277],{"class":76,"line":1579},[74,94270,59066],{"class":134},[74,94272,55718],{"class":84},[74,94274,1684],{"class":134},[74,94276,55773],{"class":80},[74,94278,1252],{"class":84},[74,94280,94281,94283,94285,94288],{"class":76,"line":1585},[74,94282,59165],{"class":134},[74,94284,55718],{"class":84},[74,94286,94287],{"class":134},"gray",[74,94289,1252],{"class":84},[74,94291,94292,94294,94296,94298,94300],{"class":76,"line":1590},[74,94293,59203],{"class":134},[74,94295,55718],{"class":84},[74,94297,911],{"class":134},[74,94299,55773],{"class":80},[74,94301,1252],{"class":84},[74,94303,94304,94306,94308,94310],{"class":76,"line":1604},[74,94305,61697],{"class":134},[74,94307,55718],{"class":84},[74,94309,65123],{"class":134},[74,94311,1252],{"class":84},[74,94313,94314,94316,94318,94320],{"class":76,"line":1609},[74,94315,61567],{"class":134},[74,94317,55718],{"class":84},[74,94319,55873],{"class":134},[74,94321,1252],{"class":84},[74,94323,94324,94327,94329,94331,94333],{"class":76,"line":1615},[74,94325,94326],{"class":134},"      padding-top",[74,94328,55718],{"class":84},[74,94330,405],{"class":134},[74,94332,55773],{"class":80},[74,94334,1252],{"class":84},[74,94336,94337],{"class":76,"line":1636},[74,94338,2149],{"class":84},[74,94340,94341,94343,94345],{"class":76,"line":1641},[74,94342,56698],{"class":84},[74,94344,5090],{"class":55581},[74,94346,55588],{"class":84},[74,94348,94349,94351,94353],{"class":76,"line":1655},[74,94350,56066],{"class":84},[74,94352,55615],{"class":55581},[74,94354,55588],{"class":84},[74,94356,94357],{"class":76,"line":1660},[74,94358,2363],{"emptyLinePlaceholder":2362},[74,94360,94361,94363,94365],{"class":76,"line":1689},[74,94362,996],{"class":84},[74,94364,56081],{"class":55581},[74,94366,55588],{"class":84},[74,94368,94369,94371,94373,94375,94377,94379,94381,94383],{"class":76,"line":1694},[74,94370,56425],{"class":84},[74,94372,55892],{"class":55581},[74,94374,57767],{"class":1925},[74,94376,131],{"class":84},[74,94378,57772],{"class":190},[74,94380,59595],{"class":84},[74,94382,55892],{"class":55581},[74,94384,55588],{"class":84},[74,94386,94387,94389,94391,94393,94395,94397,94399,94401],{"class":76,"line":1711},[74,94388,56425],{"class":84},[74,94390,56094],{"class":55581},[74,94392,59520],{"class":1925},[74,94394,131],{"class":84},[74,94396,92555],{"class":190},[74,94398,59595],{"class":84},[74,94400,56094],{"class":55581},[74,94402,55588],{"class":84},[74,94404,94405,94407,94409],{"class":76,"line":1716},[74,94406,56425],{"class":84},[74,94408,56094],{"class":55581},[74,94410,55588],{"class":84},[74,94412,94413,94415,94417,94419,94421,94423,94425,94428],{"class":76,"line":1721},[74,94414,15500],{"class":80},[74,94416,91214],{"class":134},[74,94418,17843],{"class":80},[74,94420,58677],{"class":84},[74,94422,58680],{"class":1925},[74,94424,85],{"class":84},[74,94426,94427],{"class":190},"'.box'",[74,94429,91],{"class":84},[74,94431,94432,94434,94436,94438],{"class":76,"line":1726},[74,94433,56500],{"class":80},[74,94435,13717],{"class":84},[74,94437,131],{"class":80},[74,94439,51614],{"class":134},[74,94441,94442,94444,94447],{"class":76,"line":1740},[74,94443,74365],{"class":80},[74,94445,94446],{"class":1925}," mouseMove",[74,94448,15132],{"class":84},[74,94450,94451,94454,94456,94458],{"class":76,"line":1745},[74,94452,94453],{"class":84},"      box.innerHTML ",[74,94455,131],{"class":80},[74,94457,2995],{"class":84},[74,94459,2665],{"class":80},[74,94461,94462],{"class":76,"line":2540},[74,94463,94464],{"class":144},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[74,94466,94467],{"class":76,"line":2554},[74,94468,2149],{"class":84},[74,94470,94471],{"class":76,"line":2562},[74,94472,94473],{"class":144},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[74,94475,94476],{"class":76,"line":2567},[74,94477,94478],{"class":144},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[74,94480,94481],{"class":76,"line":2573},[74,94482,94483],{"class":144},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[74,94485,94486,94489,94491,94493,94496,94499,94502,94505,94507],{"class":76,"line":2579},[74,94487,94488],{"class":84},"    box.",[74,94490,62094],{"class":1925},[74,94492,85],{"class":84},[74,94494,94495],{"class":190},"'mousemove'",[74,94497,94498],{"class":84},", _.",[74,94500,94501],{"class":1925},"debounce",[74,94503,94504],{"class":84},"(mouseMove, ",[74,94506,69355],{"class":134},[74,94508,34778],{"class":84},[74,94510,94511,94513,94515],{"class":76,"line":2584},[74,94512,56698],{"class":84},[74,94514,56094],{"class":55581},[74,94516,55588],{"class":84},[74,94518,94519,94521,94523],{"class":76,"line":12227},[74,94520,56066],{"class":84},[74,94522,56081],{"class":55581},[74,94524,55588],{"class":84},[74,94526,94527],{"class":76,"line":12251},[74,94528,2363],{"emptyLinePlaceholder":2362},[74,94530,94531,94533,94535],{"class":76,"line":12256},[74,94532,56066],{"class":84},[74,94534,54916],{"class":55581},[74,94536,55588],{"class":84},[1093,94538,94539],{},[30,94540,94541],{},"手写一个防抖函数来处理",[19,94543,94544],{},"防抖的核心就是利用定时器来实现的：",[19,94546,94547],{},"①声明一个定时器变量",[19,94549,94550],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,94552,94553],{},"③如果没有定时器则开启定时器，记得存到变量里面",[64,94555,94557],{"className":54914,"code":94556,"language":54916,"meta":69,"style":69},"\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",[71,94558,94559,94569,94583,94587,94595,94609,94629,94641,94649,94655,94665,94677,94689,94699,94711,94721,94731,94743,94747,94755,94763,94767,94775,94793,94811,94819,94837,94847,94855,94865,94869,94873,94877,94882,94887,94892,94897,94902,94907,94925,94932,94937,94945,94950,94963,94979,94989,94994,94998,95002,95022,95026,95031,95036,95041,95046,95054,95062,95066],{"__ignoreMap":69},[74,94560,94561,94563,94565,94567],{"class":76,"line":77},[74,94562,55578],{"class":84},[74,94564,55582],{"class":55581},[74,94566,55585],{"class":1925},[74,94568,55588],{"class":84},[74,94570,94571,94573,94575,94577,94579,94581],{"class":76,"line":94},[74,94572,996],{"class":84},[74,94574,54916],{"class":55581},[74,94576,55597],{"class":1925},[74,94578,131],{"class":84},[74,94580,55602],{"class":190},[74,94582,55588],{"class":84},[74,94584,94585],{"class":76,"line":1141},[74,94586,2363],{"emptyLinePlaceholder":2362},[74,94588,94589,94591,94593],{"class":76,"line":1156},[74,94590,996],{"class":84},[74,94592,55615],{"class":55581},[74,94594,55588],{"class":84},[74,94596,94597,94599,94601,94603,94605,94607],{"class":76,"line":1162},[74,94598,56425],{"class":84},[74,94600,55625],{"class":55581},[74,94602,55628],{"class":1925},[74,94604,131],{"class":84},[74,94606,55633],{"class":190},[74,94608,55588],{"class":84},[74,94610,94611,94613,94615,94617,94619,94621,94623,94625,94627],{"class":76,"line":1176},[74,94612,56425],{"class":84},[74,94614,55625],{"class":55581},[74,94616,19199],{"class":1925},[74,94618,131],{"class":84},[74,94620,55672],{"class":190},[74,94622,55652],{"class":1925},[74,94624,131],{"class":84},[74,94626,55679],{"class":190},[74,94628,55588],{"class":84},[74,94630,94631,94633,94635,94637,94639],{"class":76,"line":1182},[74,94632,56425],{"class":84},[74,94634,55688],{"class":55581},[74,94636,55691],{"class":84},[74,94638,55688],{"class":55581},[74,94640,55588],{"class":84},[74,94642,94643,94645,94647],{"class":76,"line":1273},[74,94644,56425],{"class":84},[74,94646,5090],{"class":55581},[74,94648,55588],{"class":84},[74,94650,94651,94653],{"class":76,"line":1279},[74,94652,59033],{"class":1925},[74,94654,19851],{"class":84},[74,94656,94657,94659,94661,94663],{"class":76,"line":1291},[74,94658,76877],{"class":134},[74,94660,55718],{"class":84},[74,94662,64786],{"class":134},[74,94664,1252],{"class":84},[74,94666,94667,94669,94671,94673,94675],{"class":76,"line":1574},[74,94668,59052],{"class":134},[74,94670,55718],{"class":84},[74,94672,1684],{"class":134},[74,94674,55773],{"class":80},[74,94676,1252],{"class":84},[74,94678,94679,94681,94683,94685,94687],{"class":76,"line":1579},[74,94680,59066],{"class":134},[74,94682,55718],{"class":84},[74,94684,1684],{"class":134},[74,94686,55773],{"class":80},[74,94688,1252],{"class":84},[74,94690,94691,94693,94695,94697],{"class":76,"line":1585},[74,94692,59165],{"class":134},[74,94694,55718],{"class":84},[74,94696,94287],{"class":134},[74,94698,1252],{"class":84},[74,94700,94701,94703,94705,94707,94709],{"class":76,"line":1590},[74,94702,59203],{"class":134},[74,94704,55718],{"class":84},[74,94706,911],{"class":134},[74,94708,55773],{"class":80},[74,94710,1252],{"class":84},[74,94712,94713,94715,94717,94719],{"class":76,"line":1604},[74,94714,61697],{"class":134},[74,94716,55718],{"class":84},[74,94718,65123],{"class":134},[74,94720,1252],{"class":84},[74,94722,94723,94725,94727,94729],{"class":76,"line":1609},[74,94724,61567],{"class":134},[74,94726,55718],{"class":84},[74,94728,55873],{"class":134},[74,94730,1252],{"class":84},[74,94732,94733,94735,94737,94739,94741],{"class":76,"line":1615},[74,94734,94326],{"class":134},[74,94736,55718],{"class":84},[74,94738,405],{"class":134},[74,94740,55773],{"class":80},[74,94742,1252],{"class":84},[74,94744,94745],{"class":76,"line":1636},[74,94746,2149],{"class":84},[74,94748,94749,94751,94753],{"class":76,"line":1641},[74,94750,56698],{"class":84},[74,94752,5090],{"class":55581},[74,94754,55588],{"class":84},[74,94756,94757,94759,94761],{"class":76,"line":1655},[74,94758,56066],{"class":84},[74,94760,55615],{"class":55581},[74,94762,55588],{"class":84},[74,94764,94765],{"class":76,"line":1660},[74,94766,2363],{"emptyLinePlaceholder":2362},[74,94768,94769,94771,94773],{"class":76,"line":1689},[74,94770,996],{"class":84},[74,94772,56081],{"class":55581},[74,94774,55588],{"class":84},[74,94776,94777,94779,94781,94783,94785,94787,94789,94791],{"class":76,"line":1694},[74,94778,56425],{"class":84},[74,94780,55892],{"class":55581},[74,94782,57767],{"class":1925},[74,94784,131],{"class":84},[74,94786,57772],{"class":190},[74,94788,59595],{"class":84},[74,94790,55892],{"class":55581},[74,94792,55588],{"class":84},[74,94794,94795,94797,94799,94801,94803,94805,94807,94809],{"class":76,"line":1711},[74,94796,56425],{"class":84},[74,94798,56094],{"class":55581},[74,94800,59520],{"class":1925},[74,94802,131],{"class":84},[74,94804,92555],{"class":190},[74,94806,59595],{"class":84},[74,94808,56094],{"class":55581},[74,94810,55588],{"class":84},[74,94812,94813,94815,94817],{"class":76,"line":1716},[74,94814,56425],{"class":84},[74,94816,56094],{"class":55581},[74,94818,55588],{"class":84},[74,94820,94821,94823,94825,94827,94829,94831,94833,94835],{"class":76,"line":1721},[74,94822,15500],{"class":80},[74,94824,91214],{"class":134},[74,94826,17843],{"class":80},[74,94828,58677],{"class":84},[74,94830,58680],{"class":1925},[74,94832,85],{"class":84},[74,94834,94427],{"class":190},[74,94836,91],{"class":84},[74,94838,94839,94841,94843,94845],{"class":76,"line":1726},[74,94840,56500],{"class":80},[74,94842,13717],{"class":84},[74,94844,131],{"class":80},[74,94846,51614],{"class":134},[74,94848,94849,94851,94853],{"class":76,"line":1740},[74,94850,74365],{"class":80},[74,94852,94446],{"class":1925},[74,94854,15132],{"class":84},[74,94856,94857,94859,94861,94863],{"class":76,"line":1745},[74,94858,94453],{"class":84},[74,94860,131],{"class":80},[74,94862,2995],{"class":84},[74,94864,2665],{"class":80},[74,94866,94867],{"class":76,"line":2540},[74,94868,94464],{"class":144},[74,94870,94871],{"class":76,"line":2554},[74,94872,2149],{"class":84},[74,94874,94875],{"class":76,"line":2562},[74,94876,94473],{"class":144},[74,94878,94879],{"class":76,"line":2567},[74,94880,94881],{"class":144},"    \u002F\u002F 手写防抖函数\n",[74,94883,94884],{"class":76,"line":2573},[74,94885,94886],{"class":144},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[74,94888,94889],{"class":76,"line":2579},[74,94890,94891],{"class":144},"    \u002F\u002F 1.声明定时器变量\n",[74,94893,94894],{"class":76,"line":2584},[74,94895,94896],{"class":144},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[74,94898,94899],{"class":76,"line":12227},[74,94900,94901],{"class":144},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[74,94903,94904],{"class":76,"line":12251},[74,94905,94906],{"class":144},"    \u002F\u002F 4.定时器里面写函数调用\n",[74,94908,94909,94911,94914,94916,94919,94921,94923],{"class":76,"line":12256},[74,94910,74365],{"class":80},[74,94912,94913],{"class":1925}," debounce",[74,94915,85],{"class":84},[74,94917,94918],{"class":9495},"fn",[74,94920,16714],{"class":84},[74,94922,806],{"class":9495},[74,94924,16721],{"class":84},[74,94926,94927,94929],{"class":76,"line":12262},[74,94928,84053],{"class":80},[74,94930,94931],{"class":84}," timer\n",[74,94933,94934],{"class":76,"line":12289},[74,94935,94936],{"class":144},"      \u002F\u002F return 返回一个匿名函数\n",[74,94938,94939,94941,94943],{"class":76,"line":12294},[74,94940,78263],{"class":80},[74,94942,63199],{"class":80},[74,94944,58733],{"class":84},[74,94946,94947],{"class":76,"line":12300},[74,94948,94949],{"class":144},"        \u002F\u002F 这里边写第二三四步\n",[74,94951,94952,94954,94957,94960],{"class":76,"line":12312},[74,94953,2460],{"class":80},[74,94955,94956],{"class":84}," (timer) ",[74,94958,94959],{"class":1925},"clearTimeout",[74,94961,94962],{"class":84},"(timer)\n",[74,94964,94965,94968,94970,94973,94975,94977],{"class":76,"line":12324},[74,94966,94967],{"class":84},"        timer ",[74,94969,131],{"class":80},[74,94971,94972],{"class":1925}," setTimeout",[74,94974,85],{"class":84},[74,94976,58730],{"class":80},[74,94978,58733],{"class":84},[74,94980,94981,94984,94986],{"class":76,"line":12336},[74,94982,94983],{"class":1925},"          fn",[74,94985,17329],{"class":84},[74,94987,94988],{"class":144},"\u002F\u002F加小括号调用fn }, t)\n",[74,94990,94991],{"class":76,"line":13995},[74,94992,94993],{"class":84},"        }, t)\n",[74,94995,94996],{"class":76,"line":14020},[74,94997,56679],{"class":84},[74,94999,95000],{"class":76,"line":14043},[74,95001,2149],{"class":84},[74,95003,95004,95006,95008,95010,95012,95014,95016,95018,95020],{"class":76,"line":14067},[74,95005,94488],{"class":84},[74,95007,62094],{"class":1925},[74,95009,85],{"class":84},[74,95011,94495],{"class":190},[74,95013,16714],{"class":84},[74,95015,94501],{"class":1925},[74,95017,94504],{"class":84},[74,95019,69355],{"class":134},[74,95021,34778],{"class":84},[74,95023,95024],{"class":76,"line":14072},[74,95025,2363],{"emptyLinePlaceholder":2362},[74,95027,95028],{"class":76,"line":14077},[74,95029,95030],{"class":144},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[74,95032,95033],{"class":76,"line":14082},[74,95034,95035],{"class":144},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[74,95037,95038],{"class":76,"line":14091},[74,95039,95040],{"class":144},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[74,95042,95043],{"class":76,"line":14096},[74,95044,95045],{"class":144},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[74,95047,95048,95050,95052],{"class":76,"line":14102},[74,95049,56698],{"class":84},[74,95051,56094],{"class":55581},[74,95053,55588],{"class":84},[74,95055,95056,95058,95060],{"class":76,"line":14123},[74,95057,56066],{"class":84},[74,95059,56081],{"class":55581},[74,95061,55588],{"class":84},[74,95063,95064],{"class":76,"line":14129},[74,95065,2363],{"emptyLinePlaceholder":2362},[74,95067,95068,95070,95072],{"class":76,"line":14143},[74,95069,56066],{"class":84},[74,95071,54916],{"class":55581},[74,95073,55588],{"class":84},[44,95075,95077],{"id":95076},"_4172-节流","4.17.2 节流",[19,95079,95080],{},[1424,95081],{"alt":69,"src":95082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,95084,95085],{},[1424,95086],{"alt":69,"src":95087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,95089,95090],{},[235,95091,95092],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,95094,95095],{},"实现方式：",[1093,95097,95098],{},[30,95099,95100],{},"lodash 提供的节流函数来处理",[19,95102,95103],{},"_.throttle(func,[wait=0],[options=])",[19,95105,95106],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[64,95108,95110],{"className":54914,"code":95109,"language":54916,"meta":69,"style":69},"\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",[71,95111,95112,95122,95136,95140,95148,95162,95182,95194,95202,95208,95218,95230,95242,95252,95264,95274,95284,95296,95300,95308,95316,95320,95328,95346,95364,95372,95390,95400,95408,95418,95422,95426,95430,95435,95440,95461,95469,95477,95481],{"__ignoreMap":69},[74,95113,95114,95116,95118,95120],{"class":76,"line":77},[74,95115,55578],{"class":84},[74,95117,55582],{"class":55581},[74,95119,55585],{"class":1925},[74,95121,55588],{"class":84},[74,95123,95124,95126,95128,95130,95132,95134],{"class":76,"line":94},[74,95125,996],{"class":84},[74,95127,54916],{"class":55581},[74,95129,55597],{"class":1925},[74,95131,131],{"class":84},[74,95133,55602],{"class":190},[74,95135,55588],{"class":84},[74,95137,95138],{"class":76,"line":1141},[74,95139,2363],{"emptyLinePlaceholder":2362},[74,95141,95142,95144,95146],{"class":76,"line":1156},[74,95143,996],{"class":84},[74,95145,55615],{"class":55581},[74,95147,55588],{"class":84},[74,95149,95150,95152,95154,95156,95158,95160],{"class":76,"line":1162},[74,95151,56425],{"class":84},[74,95153,55625],{"class":55581},[74,95155,55628],{"class":1925},[74,95157,131],{"class":84},[74,95159,55633],{"class":190},[74,95161,55588],{"class":84},[74,95163,95164,95166,95168,95170,95172,95174,95176,95178,95180],{"class":76,"line":1176},[74,95165,56425],{"class":84},[74,95167,55625],{"class":55581},[74,95169,19199],{"class":1925},[74,95171,131],{"class":84},[74,95173,55672],{"class":190},[74,95175,55652],{"class":1925},[74,95177,131],{"class":84},[74,95179,55679],{"class":190},[74,95181,55588],{"class":84},[74,95183,95184,95186,95188,95190,95192],{"class":76,"line":1182},[74,95185,56425],{"class":84},[74,95187,55688],{"class":55581},[74,95189,55691],{"class":84},[74,95191,55688],{"class":55581},[74,95193,55588],{"class":84},[74,95195,95196,95198,95200],{"class":76,"line":1273},[74,95197,56425],{"class":84},[74,95199,5090],{"class":55581},[74,95201,55588],{"class":84},[74,95203,95204,95206],{"class":76,"line":1279},[74,95205,59033],{"class":1925},[74,95207,19851],{"class":84},[74,95209,95210,95212,95214,95216],{"class":76,"line":1291},[74,95211,76877],{"class":134},[74,95213,55718],{"class":84},[74,95215,64786],{"class":134},[74,95217,1252],{"class":84},[74,95219,95220,95222,95224,95226,95228],{"class":76,"line":1574},[74,95221,59052],{"class":134},[74,95223,55718],{"class":84},[74,95225,1684],{"class":134},[74,95227,55773],{"class":80},[74,95229,1252],{"class":84},[74,95231,95232,95234,95236,95238,95240],{"class":76,"line":1579},[74,95233,59066],{"class":134},[74,95235,55718],{"class":84},[74,95237,1684],{"class":134},[74,95239,55773],{"class":80},[74,95241,1252],{"class":84},[74,95243,95244,95246,95248,95250],{"class":76,"line":1585},[74,95245,59165],{"class":134},[74,95247,55718],{"class":84},[74,95249,94287],{"class":134},[74,95251,1252],{"class":84},[74,95253,95254,95256,95258,95260,95262],{"class":76,"line":1590},[74,95255,59203],{"class":134},[74,95257,55718],{"class":84},[74,95259,911],{"class":134},[74,95261,55773],{"class":80},[74,95263,1252],{"class":84},[74,95265,95266,95268,95270,95272],{"class":76,"line":1604},[74,95267,61697],{"class":134},[74,95269,55718],{"class":84},[74,95271,65123],{"class":134},[74,95273,1252],{"class":84},[74,95275,95276,95278,95280,95282],{"class":76,"line":1609},[74,95277,61567],{"class":134},[74,95279,55718],{"class":84},[74,95281,55873],{"class":134},[74,95283,1252],{"class":84},[74,95285,95286,95288,95290,95292,95294],{"class":76,"line":1615},[74,95287,94326],{"class":134},[74,95289,55718],{"class":84},[74,95291,405],{"class":134},[74,95293,55773],{"class":80},[74,95295,1252],{"class":84},[74,95297,95298],{"class":76,"line":1636},[74,95299,2149],{"class":84},[74,95301,95302,95304,95306],{"class":76,"line":1641},[74,95303,56698],{"class":84},[74,95305,5090],{"class":55581},[74,95307,55588],{"class":84},[74,95309,95310,95312,95314],{"class":76,"line":1655},[74,95311,56066],{"class":84},[74,95313,55615],{"class":55581},[74,95315,55588],{"class":84},[74,95317,95318],{"class":76,"line":1660},[74,95319,2363],{"emptyLinePlaceholder":2362},[74,95321,95322,95324,95326],{"class":76,"line":1689},[74,95323,996],{"class":84},[74,95325,56081],{"class":55581},[74,95327,55588],{"class":84},[74,95329,95330,95332,95334,95336,95338,95340,95342,95344],{"class":76,"line":1694},[74,95331,56425],{"class":84},[74,95333,55892],{"class":55581},[74,95335,57767],{"class":1925},[74,95337,131],{"class":84},[74,95339,57772],{"class":190},[74,95341,59595],{"class":84},[74,95343,55892],{"class":55581},[74,95345,55588],{"class":84},[74,95347,95348,95350,95352,95354,95356,95358,95360,95362],{"class":76,"line":1711},[74,95349,56425],{"class":84},[74,95351,56094],{"class":55581},[74,95353,59520],{"class":1925},[74,95355,131],{"class":84},[74,95357,92555],{"class":190},[74,95359,59595],{"class":84},[74,95361,56094],{"class":55581},[74,95363,55588],{"class":84},[74,95365,95366,95368,95370],{"class":76,"line":1716},[74,95367,56425],{"class":84},[74,95369,56094],{"class":55581},[74,95371,55588],{"class":84},[74,95373,95374,95376,95378,95380,95382,95384,95386,95388],{"class":76,"line":1721},[74,95375,15500],{"class":80},[74,95377,91214],{"class":134},[74,95379,17843],{"class":80},[74,95381,58677],{"class":84},[74,95383,58680],{"class":1925},[74,95385,85],{"class":84},[74,95387,94427],{"class":190},[74,95389,91],{"class":84},[74,95391,95392,95394,95396,95398],{"class":76,"line":1726},[74,95393,56500],{"class":80},[74,95395,13717],{"class":84},[74,95397,131],{"class":80},[74,95399,51614],{"class":134},[74,95401,95402,95404,95406],{"class":76,"line":1740},[74,95403,74365],{"class":80},[74,95405,94446],{"class":1925},[74,95407,15132],{"class":84},[74,95409,95410,95412,95414,95416],{"class":76,"line":1745},[74,95411,94453],{"class":84},[74,95413,131],{"class":80},[74,95415,2995],{"class":84},[74,95417,2665],{"class":80},[74,95419,95420],{"class":76,"line":2540},[74,95421,94464],{"class":144},[74,95423,95424],{"class":76,"line":2554},[74,95425,2149],{"class":84},[74,95427,95428],{"class":76,"line":2562},[74,95429,94473],{"class":144},[74,95431,95432],{"class":76,"line":2567},[74,95433,95434],{"class":144},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[74,95436,95437],{"class":76,"line":2573},[74,95438,95439],{"class":144},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[74,95441,95442,95444,95446,95448,95450,95452,95455,95457,95459],{"class":76,"line":2579},[74,95443,94488],{"class":84},[74,95445,62094],{"class":1925},[74,95447,85],{"class":84},[74,95449,94495],{"class":190},[74,95451,94498],{"class":84},[74,95453,95454],{"class":1925},"throttle",[74,95456,94504],{"class":84},[74,95458,69355],{"class":134},[74,95460,34778],{"class":84},[74,95462,95463,95465,95467],{"class":76,"line":2584},[74,95464,56698],{"class":84},[74,95466,56094],{"class":55581},[74,95468,55588],{"class":84},[74,95470,95471,95473,95475],{"class":76,"line":12227},[74,95472,56066],{"class":84},[74,95474,56081],{"class":55581},[74,95476,55588],{"class":84},[74,95478,95479],{"class":76,"line":12251},[74,95480,2363],{"emptyLinePlaceholder":2362},[74,95482,95483,95485,95487],{"class":76,"line":12256},[74,95484,56066],{"class":84},[74,95486,54916],{"class":55581},[74,95488,55588],{"class":84},[1093,95490,95491],{},[30,95492,95493],{},"手写一个节流函数来处理",[19,95495,75233],{},[19,95497,94547],{},[19,95499,95500],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,95502,95503],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[64,95505,95507],{"className":54914,"code":95506,"language":54916,"meta":69,"style":69},"\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",[71,95508,95509,95519,95533,95537,95545,95559,95579,95591,95599,95605,95615,95627,95639,95649,95661,95671,95681,95693,95697,95705,95713,95717,95725,95743,95761,95769,95787,95797,95805,95815,95819,95823,95827,95832,95837,95842,95847,95852,95857,95874,95880,95888,95899,95914,95921,95926,95931,95941,95946,95951,95956,95960,95964,95968,95988,95996,96004,96008],{"__ignoreMap":69},[74,95510,95511,95513,95515,95517],{"class":76,"line":77},[74,95512,55578],{"class":84},[74,95514,55582],{"class":55581},[74,95516,55585],{"class":1925},[74,95518,55588],{"class":84},[74,95520,95521,95523,95525,95527,95529,95531],{"class":76,"line":94},[74,95522,996],{"class":84},[74,95524,54916],{"class":55581},[74,95526,55597],{"class":1925},[74,95528,131],{"class":84},[74,95530,55602],{"class":190},[74,95532,55588],{"class":84},[74,95534,95535],{"class":76,"line":1141},[74,95536,2363],{"emptyLinePlaceholder":2362},[74,95538,95539,95541,95543],{"class":76,"line":1156},[74,95540,996],{"class":84},[74,95542,55615],{"class":55581},[74,95544,55588],{"class":84},[74,95546,95547,95549,95551,95553,95555,95557],{"class":76,"line":1162},[74,95548,56425],{"class":84},[74,95550,55625],{"class":55581},[74,95552,55628],{"class":1925},[74,95554,131],{"class":84},[74,95556,55633],{"class":190},[74,95558,55588],{"class":84},[74,95560,95561,95563,95565,95567,95569,95571,95573,95575,95577],{"class":76,"line":1176},[74,95562,56425],{"class":84},[74,95564,55625],{"class":55581},[74,95566,19199],{"class":1925},[74,95568,131],{"class":84},[74,95570,55672],{"class":190},[74,95572,55652],{"class":1925},[74,95574,131],{"class":84},[74,95576,55679],{"class":190},[74,95578,55588],{"class":84},[74,95580,95581,95583,95585,95587,95589],{"class":76,"line":1182},[74,95582,56425],{"class":84},[74,95584,55688],{"class":55581},[74,95586,55691],{"class":84},[74,95588,55688],{"class":55581},[74,95590,55588],{"class":84},[74,95592,95593,95595,95597],{"class":76,"line":1273},[74,95594,56425],{"class":84},[74,95596,5090],{"class":55581},[74,95598,55588],{"class":84},[74,95600,95601,95603],{"class":76,"line":1279},[74,95602,59033],{"class":1925},[74,95604,19851],{"class":84},[74,95606,95607,95609,95611,95613],{"class":76,"line":1291},[74,95608,76877],{"class":134},[74,95610,55718],{"class":84},[74,95612,64786],{"class":134},[74,95614,1252],{"class":84},[74,95616,95617,95619,95621,95623,95625],{"class":76,"line":1574},[74,95618,59052],{"class":134},[74,95620,55718],{"class":84},[74,95622,1684],{"class":134},[74,95624,55773],{"class":80},[74,95626,1252],{"class":84},[74,95628,95629,95631,95633,95635,95637],{"class":76,"line":1579},[74,95630,59066],{"class":134},[74,95632,55718],{"class":84},[74,95634,1684],{"class":134},[74,95636,55773],{"class":80},[74,95638,1252],{"class":84},[74,95640,95641,95643,95645,95647],{"class":76,"line":1585},[74,95642,59165],{"class":134},[74,95644,55718],{"class":84},[74,95646,94287],{"class":134},[74,95648,1252],{"class":84},[74,95650,95651,95653,95655,95657,95659],{"class":76,"line":1590},[74,95652,59203],{"class":134},[74,95654,55718],{"class":84},[74,95656,911],{"class":134},[74,95658,55773],{"class":80},[74,95660,1252],{"class":84},[74,95662,95663,95665,95667,95669],{"class":76,"line":1604},[74,95664,61697],{"class":134},[74,95666,55718],{"class":84},[74,95668,65123],{"class":134},[74,95670,1252],{"class":84},[74,95672,95673,95675,95677,95679],{"class":76,"line":1609},[74,95674,61567],{"class":134},[74,95676,55718],{"class":84},[74,95678,55873],{"class":134},[74,95680,1252],{"class":84},[74,95682,95683,95685,95687,95689,95691],{"class":76,"line":1615},[74,95684,94326],{"class":134},[74,95686,55718],{"class":84},[74,95688,405],{"class":134},[74,95690,55773],{"class":80},[74,95692,1252],{"class":84},[74,95694,95695],{"class":76,"line":1636},[74,95696,2149],{"class":84},[74,95698,95699,95701,95703],{"class":76,"line":1641},[74,95700,56698],{"class":84},[74,95702,5090],{"class":55581},[74,95704,55588],{"class":84},[74,95706,95707,95709,95711],{"class":76,"line":1655},[74,95708,56066],{"class":84},[74,95710,55615],{"class":55581},[74,95712,55588],{"class":84},[74,95714,95715],{"class":76,"line":1660},[74,95716,2363],{"emptyLinePlaceholder":2362},[74,95718,95719,95721,95723],{"class":76,"line":1689},[74,95720,996],{"class":84},[74,95722,56081],{"class":55581},[74,95724,55588],{"class":84},[74,95726,95727,95729,95731,95733,95735,95737,95739,95741],{"class":76,"line":1694},[74,95728,56425],{"class":84},[74,95730,55892],{"class":55581},[74,95732,57767],{"class":1925},[74,95734,131],{"class":84},[74,95736,57772],{"class":190},[74,95738,59595],{"class":84},[74,95740,55892],{"class":55581},[74,95742,55588],{"class":84},[74,95744,95745,95747,95749,95751,95753,95755,95757,95759],{"class":76,"line":1711},[74,95746,56425],{"class":84},[74,95748,56094],{"class":55581},[74,95750,59520],{"class":1925},[74,95752,131],{"class":84},[74,95754,92555],{"class":190},[74,95756,59595],{"class":84},[74,95758,56094],{"class":55581},[74,95760,55588],{"class":84},[74,95762,95763,95765,95767],{"class":76,"line":1716},[74,95764,56425],{"class":84},[74,95766,56094],{"class":55581},[74,95768,55588],{"class":84},[74,95770,95771,95773,95775,95777,95779,95781,95783,95785],{"class":76,"line":1721},[74,95772,15500],{"class":80},[74,95774,91214],{"class":134},[74,95776,17843],{"class":80},[74,95778,58677],{"class":84},[74,95780,58680],{"class":1925},[74,95782,85],{"class":84},[74,95784,94427],{"class":190},[74,95786,91],{"class":84},[74,95788,95789,95791,95793,95795],{"class":76,"line":1726},[74,95790,56500],{"class":80},[74,95792,13717],{"class":84},[74,95794,131],{"class":80},[74,95796,51614],{"class":134},[74,95798,95799,95801,95803],{"class":76,"line":1740},[74,95800,74365],{"class":80},[74,95802,94446],{"class":1925},[74,95804,15132],{"class":84},[74,95806,95807,95809,95811,95813],{"class":76,"line":1745},[74,95808,94453],{"class":84},[74,95810,131],{"class":80},[74,95812,2995],{"class":84},[74,95814,2665],{"class":80},[74,95816,95817],{"class":76,"line":2540},[74,95818,94464],{"class":144},[74,95820,95821],{"class":76,"line":2554},[74,95822,2149],{"class":84},[74,95824,95825],{"class":76,"line":2562},[74,95826,94473],{"class":144},[74,95828,95829],{"class":76,"line":2567},[74,95830,95831],{"class":144},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[74,95833,95834],{"class":76,"line":2573},[74,95835,95836],{"class":144},"    \u002F\u002F 1.声明一个定时器变量\n",[74,95838,95839],{"class":76,"line":2579},[74,95840,95841],{"class":144},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[74,95843,95844],{"class":76,"line":2584},[74,95845,95846],{"class":144},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[74,95848,95849],{"class":76,"line":12227},[74,95850,95851],{"class":144},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[74,95853,95854],{"class":76,"line":12251},[74,95855,95856],{"class":144},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[74,95858,95859,95861,95864,95866,95868,95870,95872],{"class":76,"line":12256},[74,95860,74365],{"class":80},[74,95862,95863],{"class":1925}," throttle",[74,95865,85],{"class":84},[74,95867,94918],{"class":9495},[74,95869,16714],{"class":84},[74,95871,806],{"class":9495},[74,95873,16721],{"class":84},[74,95875,95876,95878],{"class":76,"line":12262},[74,95877,84053],{"class":80},[74,95879,94931],{"class":84},[74,95881,95882,95884,95886],{"class":76,"line":12289},[74,95883,78263],{"class":80},[74,95885,63199],{"class":80},[74,95887,58733],{"class":84},[74,95889,95890,95892,95894,95896],{"class":76,"line":12294},[74,95891,2460],{"class":80},[74,95893,1620],{"class":84},[74,95895,312],{"class":80},[74,95897,95898],{"class":84},"timer) {\n",[74,95900,95901,95904,95906,95908,95910,95912],{"class":76,"line":12300},[74,95902,95903],{"class":84},"          timer ",[74,95905,131],{"class":80},[74,95907,94972],{"class":1925},[74,95909,85],{"class":84},[74,95911,58730],{"class":80},[74,95913,58733],{"class":84},[74,95915,95916,95919],{"class":76,"line":12312},[74,95917,95918],{"class":1925},"            fn",[74,95920,1938],{"class":84},[74,95922,95923],{"class":76,"line":12324},[74,95924,95925],{"class":144},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[74,95927,95928],{"class":76,"line":12336},[74,95929,95930],{"class":144},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[74,95932,95933,95936,95938],{"class":76,"line":13995},[74,95934,95935],{"class":84},"            timer ",[74,95937,131],{"class":80},[74,95939,95940],{"class":134}," null\n",[74,95942,95943],{"class":76,"line":14020},[74,95944,95945],{"class":144},"            \u002F\u002F 不能用clearTimeout(timer)\n",[74,95947,95948],{"class":76,"line":14043},[74,95949,95950],{"class":144},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[74,95952,95953],{"class":76,"line":14067},[74,95954,95955],{"class":84},"          }, t)\n",[74,95957,95958],{"class":76,"line":14072},[74,95959,2492],{"class":84},[74,95961,95962],{"class":76,"line":14077},[74,95963,56679],{"class":84},[74,95965,95966],{"class":76,"line":14082},[74,95967,2149],{"class":84},[74,95969,95970,95972,95974,95976,95978,95980,95982,95984,95986],{"class":76,"line":14091},[74,95971,94488],{"class":84},[74,95973,62094],{"class":1925},[74,95975,85],{"class":84},[74,95977,94495],{"class":190},[74,95979,16714],{"class":84},[74,95981,95454],{"class":1925},[74,95983,94504],{"class":84},[74,95985,69355],{"class":134},[74,95987,34778],{"class":84},[74,95989,95990,95992,95994],{"class":76,"line":14096},[74,95991,56698],{"class":84},[74,95993,56094],{"class":55581},[74,95995,55588],{"class":84},[74,95997,95998,96000,96002],{"class":76,"line":14102},[74,95999,56066],{"class":84},[74,96001,56081],{"class":55581},[74,96003,55588],{"class":84},[74,96005,96006],{"class":76,"line":14123},[74,96007,2363],{"emptyLinePlaceholder":2362},[74,96009,96010,96012,96014],{"class":76,"line":14129},[74,96011,56066],{"class":84},[74,96013,54916],{"class":55581},[74,96015,55588],{"class":84},[44,96017,96019],{"id":96018},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[64,96021,96023],{"className":57348,"code":96022,"language":57350,"meta":69,"style":69},"\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",[71,96024,96025,96033,96041,96046,96051,96056,96061,96065,96073],{"__ignoreMap":69},[74,96026,96027,96029,96031],{"class":76,"line":77},[74,96028,996],{"class":84},[74,96030,56081],{"class":55581},[74,96032,55588],{"class":84},[74,96034,96035,96037,96039],{"class":76,"line":94},[74,96036,56425],{"class":84},[74,96038,56094],{"class":55581},[74,96040,55588],{"class":84},[74,96042,96043],{"class":76,"line":1141},[74,96044,96045],{"class":84},"    let timer = null\n",[74,96047,96048],{"class":76,"line":1156},[74,96049,96050],{"class":84},"    timer = setTimeout(() => {\n",[74,96052,96053],{"class":76,"line":1162},[74,96054,96055],{"class":84},"      clearTimeout(timer)\n",[74,96057,96058],{"class":76,"line":1176},[74,96059,96060],{"class":84},"      console.log(timer)\n",[74,96062,96063],{"class":76,"line":1182},[74,96064,64506],{"class":84},[74,96066,96067,96069,96071],{"class":76,"line":1273},[74,96068,56698],{"class":84},[74,96070,56094],{"class":55581},[74,96072,55588],{"class":84},[74,96074,96075,96077,96079],{"class":76,"line":1279},[74,96076,56066],{"class":84},[74,96078,56081],{"class":55581},[74,96080,55588],{"class":84},[19,96082,96083],{},"输出为1",[19,96085,96086],{},"在开启的定时器里边写清除定时器",[19,96088,96089],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[44,96091,96093],{"id":96092},"_4174-节流综合案例","4.17.4 节流综合案例",[19,96095,96096],{},"页面打开，可以记录上一次的视频播放位置",[19,96098,96099],{},[1424,96100],{"alt":69,"src":96101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,96103,96104],{},[1424,96105],{"alt":69,"src":96106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[64,96108,96110],{"className":54914,"code":96109,"language":54916,"meta":69,"style":69},"\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",[71,96111,96112,96122,96136,96140,96148,96162,96182,96202,96224,96237,96245,96251,96261,96271,96281,96285,96289,96296,96309,96321,96325,96329,96339,96351,96365,96369,96373,96380,96390,96403,96415,96425,96435,96451,96463,96467,96471,96479,96489,96501,96511,96521,96531,96535,96539,96549,96560,96564,96572,96580,96584,96592,96607,96622,96637,96658,96666,96674,96689,96711,96719,96734,96760,96786,96812,96820,96828,96847,96855,96860,96879,96884,96902,96907,96912,96920,96925,96939,96947,96952,96969,96973,96978,97000,97004,97012,97020,97024],{"__ignoreMap":69},[74,96113,96114,96116,96118,96120],{"class":76,"line":77},[74,96115,55578],{"class":84},[74,96117,55582],{"class":55581},[74,96119,55585],{"class":1925},[74,96121,55588],{"class":84},[74,96123,96124,96126,96128,96130,96132,96134],{"class":76,"line":94},[74,96125,996],{"class":84},[74,96127,54916],{"class":55581},[74,96129,55597],{"class":1925},[74,96131,131],{"class":84},[74,96133,55602],{"class":190},[74,96135,55588],{"class":84},[74,96137,96138],{"class":76,"line":1141},[74,96139,2363],{"emptyLinePlaceholder":2362},[74,96141,96142,96144,96146],{"class":76,"line":1156},[74,96143,996],{"class":84},[74,96145,55615],{"class":55581},[74,96147,55588],{"class":84},[74,96149,96150,96152,96154,96156,96158,96160],{"class":76,"line":1162},[74,96151,56425],{"class":84},[74,96153,55625],{"class":55581},[74,96155,55628],{"class":1925},[74,96157,131],{"class":84},[74,96159,55633],{"class":190},[74,96161,63408],{"class":84},[74,96163,96164,96166,96168,96170,96172,96174,96176,96178,96180],{"class":76,"line":1176},[74,96165,56425],{"class":84},[74,96167,55625],{"class":55581},[74,96169,55644],{"class":1925},[74,96171,131],{"class":84},[74,96173,55649],{"class":190},[74,96175,55652],{"class":1925},[74,96177,131],{"class":84},[74,96179,55657],{"class":190},[74,96181,63408],{"class":84},[74,96183,96184,96186,96188,96190,96192,96194,96196,96198,96200],{"class":76,"line":1182},[74,96185,56425],{"class":84},[74,96187,55625],{"class":55581},[74,96189,19199],{"class":1925},[74,96191,131],{"class":84},[74,96193,55672],{"class":190},[74,96195,55652],{"class":1925},[74,96197,131],{"class":84},[74,96199,55679],{"class":190},[74,96201,63408],{"class":84},[74,96203,96204,96206,96208,96210,96212,96215,96217,96219,96222],{"class":76,"line":1273},[74,96205,56425],{"class":84},[74,96207,55625],{"class":55581},[74,96209,19199],{"class":1925},[74,96211,131],{"class":84},[74,96213,96214],{"class":190},"\"referrer\"",[74,96216,55652],{"class":1925},[74,96218,131],{"class":84},[74,96220,96221],{"class":190},"\"never\"",[74,96223,63408],{"class":84},[74,96225,96226,96228,96230,96233,96235],{"class":76,"line":1279},[74,96227,56425],{"class":84},[74,96229,55688],{"class":55581},[74,96231,96232],{"class":84},">综合案例\u003C\u002F",[74,96234,55688],{"class":55581},[74,96236,55588],{"class":84},[74,96238,96239,96241,96243],{"class":76,"line":1291},[74,96240,56425],{"class":84},[74,96242,5090],{"class":55581},[74,96244,55588],{"class":84},[74,96246,96247,96249],{"class":76,"line":1574},[74,96248,10682],{"class":55581},[74,96250,19851],{"class":84},[74,96252,96253,96255,96257,96259],{"class":76,"line":1579},[74,96254,58976],{"class":134},[74,96256,55718],{"class":84},[74,96258,277],{"class":134},[74,96260,1252],{"class":84},[74,96262,96263,96265,96267,96269],{"class":76,"line":1585},[74,96264,58987],{"class":134},[74,96266,55718],{"class":84},[74,96268,277],{"class":134},[74,96270,1252],{"class":84},[74,96272,96273,96275,96277,96279],{"class":76,"line":1590},[74,96274,76877],{"class":134},[74,96276,55718],{"class":84},[74,96278,64786],{"class":134},[74,96280,1252],{"class":84},[74,96282,96283],{"class":76,"line":1604},[74,96284,2149],{"class":84},[74,96286,96287],{"class":76,"line":1609},[74,96288,2363],{"emptyLinePlaceholder":2362},[74,96290,96291,96294],{"class":76,"line":1615},[74,96292,96293],{"class":1925},"    .container",[74,96295,19851],{"class":84},[74,96297,96298,96300,96302,96305,96307],{"class":76,"line":1636},[74,96299,59052],{"class":134},[74,96301,55718],{"class":84},[74,96303,96304],{"class":134},"1200",[74,96306,55773],{"class":80},[74,96308,1252],{"class":84},[74,96310,96311,96313,96315,96317,96319],{"class":76,"line":1641},[74,96312,58987],{"class":134},[74,96314,55718],{"class":84},[74,96316,277],{"class":134},[74,96318,55837],{"class":134},[74,96320,1252],{"class":84},[74,96322,96323],{"class":76,"line":1655},[74,96324,2149],{"class":84},[74,96326,96327],{"class":76,"line":1660},[74,96328,2363],{"emptyLinePlaceholder":2362},[74,96330,96331,96334,96337],{"class":76,"line":1689},[74,96332,96333],{"class":1925},"    .video",[74,96335,96336],{"class":55581}," video",[74,96338,19851],{"class":84},[74,96340,96341,96343,96345,96347,96349],{"class":76,"line":1694},[74,96342,59052],{"class":134},[74,96344,55718],{"class":84},[74,96346,397],{"class":134},[74,96348,414],{"class":80},[74,96350,1252],{"class":84},[74,96352,96353,96355,96357,96359,96361,96363],{"class":76,"line":1711},[74,96354,58976],{"class":134},[74,96356,55718],{"class":84},[74,96358,786],{"class":134},[74,96360,55773],{"class":80},[74,96362,4056],{"class":134},[74,96364,1252],{"class":84},[74,96366,96367],{"class":76,"line":1716},[74,96368,2149],{"class":84},[74,96370,96371],{"class":76,"line":1721},[74,96372,2363],{"emptyLinePlaceholder":2362},[74,96374,96375,96378],{"class":76,"line":1726},[74,96376,96377],{"class":1925},"    .elevator",[74,96379,19851],{"class":84},[74,96381,96382,96384,96386,96388],{"class":76,"line":1740},[74,96383,59040],{"class":134},[74,96385,55718],{"class":84},[74,96387,90514],{"class":134},[74,96389,1252],{"class":84},[74,96391,96392,96394,96396,96399,96401],{"class":76,"line":1745},[74,96393,59228],{"class":134},[74,96395,55718],{"class":84},[74,96397,96398],{"class":134},"280",[74,96400,55773],{"class":80},[74,96402,1252],{"class":84},[74,96404,96405,96407,96409,96411,96413],{"class":76,"line":2540},[74,96406,90708],{"class":134},[74,96408,55718],{"class":84},[74,96410,786],{"class":134},[74,96412,55773],{"class":80},[74,96414,1252],{"class":84},[74,96416,96417,96419,96421,96423],{"class":76,"line":2554},[74,96418,90521],{"class":134},[74,96420,55718],{"class":84},[74,96422,90526],{"class":134},[74,96424,1252],{"class":84},[74,96426,96427,96429,96431,96433],{"class":76,"line":2562},[74,96428,66002],{"class":134},[74,96430,55718],{"class":84},[74,96432,65123],{"class":134},[74,96434,1252],{"class":84},[74,96436,96437,96439,96441,96443,96445,96447,96449],{"class":76,"line":2567},[74,96438,66258],{"class":134},[74,96440,55718],{"class":84},[74,96442,303],{"class":134},[74,96444,55773],{"class":80},[74,96446,55802],{"class":134},[74,96448,66525],{"class":134},[74,96450,1252],{"class":84},[74,96452,96453,96455,96457,96459,96461],{"class":76,"line":2573},[74,96454,59052],{"class":134},[74,96456,55718],{"class":84},[74,96458,993],{"class":134},[74,96460,55773],{"class":80},[74,96462,1252],{"class":84},[74,96464,96465],{"class":76,"line":2579},[74,96466,2149],{"class":84},[74,96468,96469],{"class":76,"line":2584},[74,96470,2363],{"emptyLinePlaceholder":2362},[74,96472,96473,96475,96477],{"class":76,"line":12227},[74,96474,96377],{"class":1925},[74,96476,1360],{"class":55581},[74,96478,19851],{"class":84},[74,96480,96481,96483,96485,96487],{"class":76,"line":12251},[74,96482,59290],{"class":134},[74,96484,55718],{"class":84},[74,96486,65150],{"class":134},[74,96488,1252],{"class":84},[74,96490,96491,96493,96495,96497,96499],{"class":76,"line":12256},[74,96492,58976],{"class":134},[74,96494,55718],{"class":84},[74,96496,532],{"class":134},[74,96498,55773],{"class":80},[74,96500,1252],{"class":84},[74,96502,96503,96505,96507,96509],{"class":76,"line":12262},[74,96504,68251],{"class":134},[74,96506,55718],{"class":84},[74,96508,59018],{"class":134},[74,96510,1252],{"class":84},[74,96512,96513,96515,96517,96519],{"class":76,"line":12289},[74,96514,61567],{"class":134},[74,96516,55718],{"class":84},[74,96518,55873],{"class":134},[74,96520,1252],{"class":84},[74,96522,96523,96525,96527,96529],{"class":76,"line":12294},[74,96524,61697],{"class":134},[74,96526,55718],{"class":84},[74,96528,66351],{"class":134},[74,96530,1252],{"class":84},[74,96532,96533],{"class":76,"line":12300},[74,96534,2149],{"class":84},[74,96536,96537],{"class":76,"line":12312},[74,96538,2363],{"emptyLinePlaceholder":2362},[74,96540,96541,96543,96545,96547],{"class":76,"line":12324},[74,96542,96377],{"class":1925},[74,96544,1360],{"class":55581},[74,96546,68305],{"class":1925},[74,96548,19851],{"class":84},[74,96550,96551,96553,96555,96558],{"class":76,"line":12336},[74,96552,61697],{"class":134},[74,96554,55718],{"class":84},[74,96556,96557],{"class":134},"#1286ff",[74,96559,1252],{"class":84},[74,96561,96562],{"class":76,"line":13995},[74,96563,2149],{"class":84},[74,96565,96566,96568,96570],{"class":76,"line":14020},[74,96567,56698],{"class":84},[74,96569,5090],{"class":55581},[74,96571,55588],{"class":84},[74,96573,96574,96576,96578],{"class":76,"line":14043},[74,96575,56066],{"class":84},[74,96577,55615],{"class":55581},[74,96579,55588],{"class":84},[74,96581,96582],{"class":76,"line":14067},[74,96583,2363],{"emptyLinePlaceholder":2362},[74,96585,96586,96588,96590],{"class":76,"line":14072},[74,96587,996],{"class":84},[74,96589,56081],{"class":55581},[74,96591,55588],{"class":84},[74,96593,96594,96596,96598,96600,96602,96605],{"class":76,"line":14077},[74,96595,56425],{"class":84},[74,96597,55892],{"class":55581},[74,96599,57767],{"class":1925},[74,96601,131],{"class":84},[74,96603,96604],{"class":190},"\"container\"",[74,96606,55588],{"class":84},[74,96608,96609,96611,96613,96615,96617,96620],{"class":76,"line":14082},[74,96610,55622],{"class":84},[74,96612,55892],{"class":55581},[74,96614,57767],{"class":1925},[74,96616,131],{"class":84},[74,96618,96619],{"class":190},"\"header\"",[74,96621,55588],{"class":84},[74,96623,96624,96626,96628,96630,96632,96635],{"class":76,"line":14091},[74,96625,59515],{"class":84},[74,96627,324],{"class":55581},[74,96629,65338],{"class":1925},[74,96631,131],{"class":84},[74,96633,96634],{"class":190},"\"http:\u002F\u002Fpip.itcast.cn\"",[74,96636,55588],{"class":84},[74,96638,96639,96641,96643,96645,96647,96650,96652,96654,96656],{"class":76,"line":14096},[74,96640,59583],{"class":84},[74,96642,1424],{"class":55581},[74,96644,59520],{"class":1925},[74,96646,131],{"class":84},[74,96648,96649],{"class":190},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[74,96651,59528],{"class":1925},[74,96653,131],{"class":84},[74,96655,11931],{"class":190},[74,96657,63408],{"class":84},[74,96659,96660,96662,96664],{"class":76,"line":14102},[74,96661,59688],{"class":84},[74,96663,324],{"class":55581},[74,96665,55588],{"class":84},[74,96667,96668,96670,96672],{"class":76,"line":14123},[74,96669,56057],{"class":84},[74,96671,55892],{"class":55581},[74,96673,55588],{"class":84},[74,96675,96676,96678,96680,96682,96684,96687],{"class":76,"line":14129},[74,96677,55622],{"class":84},[74,96679,55892],{"class":55581},[74,96681,57767],{"class":1925},[74,96683,131],{"class":84},[74,96685,96686],{"class":190},"\"video\"",[74,96688,55588],{"class":84},[74,96690,96691,96693,96695,96697,96699,96702,96705,96707,96709],{"class":76,"line":14143},[74,96692,59515],{"class":84},[74,96694,32464],{"class":55581},[74,96696,59520],{"class":1925},[74,96698,131],{"class":84},[74,96700,96701],{"class":190},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[74,96703,96704],{"class":1925}," controls",[74,96706,59595],{"class":84},[74,96708,32464],{"class":55581},[74,96710,55588],{"class":84},[74,96712,96713,96715,96717],{"class":76,"line":14149},[74,96714,56057],{"class":84},[74,96716,55892],{"class":55581},[74,96718,55588],{"class":84},[74,96720,96721,96723,96725,96727,96729,96732],{"class":76,"line":14176},[74,96722,55622],{"class":84},[74,96724,55892],{"class":55581},[74,96726,57767],{"class":1925},[74,96728,131],{"class":84},[74,96730,96731],{"class":190},"\"elevator\"",[74,96733,55588],{"class":84},[74,96735,96736,96738,96740,96742,96744,96746,96749,96751,96753,96756,96758],{"class":76,"line":14185},[74,96737,59515],{"class":84},[74,96739,324],{"class":55581},[74,96741,65338],{"class":1925},[74,96743,131],{"class":84},[74,96745,68517],{"class":190},[74,96747,96748],{"class":1925}," data-ref",[74,96750,131],{"class":84},[74,96752,96686],{"class":190},[74,96754,96755],{"class":84},">视频介绍\u003C\u002F",[74,96757,324],{"class":55581},[74,96759,55588],{"class":84},[74,96761,96762,96764,96766,96768,96770,96772,96774,96776,96779,96782,96784],{"class":76,"line":14191},[74,96763,59515],{"class":84},[74,96765,324],{"class":55581},[74,96767,65338],{"class":1925},[74,96769,131],{"class":84},[74,96771,68517],{"class":190},[74,96773,96748],{"class":1925},[74,96775,131],{"class":84},[74,96777,96778],{"class":190},"\"intro\"",[74,96780,96781],{"class":84},">课程简介\u003C\u002F",[74,96783,324],{"class":55581},[74,96785,55588],{"class":84},[74,96787,96788,96790,96792,96794,96796,96798,96800,96802,96805,96808,96810],{"class":76,"line":14199},[74,96789,59515],{"class":84},[74,96791,324],{"class":55581},[74,96793,65338],{"class":1925},[74,96795,131],{"class":84},[74,96797,68517],{"class":190},[74,96799,96748],{"class":1925},[74,96801,131],{"class":84},[74,96803,96804],{"class":190},"\"outline\"",[74,96806,96807],{"class":84},">评论列表\u003C\u002F",[74,96809,324],{"class":55581},[74,96811,55588],{"class":84},[74,96813,96814,96816,96818],{"class":76,"line":14204},[74,96815,56057],{"class":84},[74,96817,55892],{"class":55581},[74,96819,55588],{"class":84},[74,96821,96822,96824,96826],{"class":76,"line":20883},[74,96823,56698],{"class":84},[74,96825,55892],{"class":55581},[74,96827,55588],{"class":84},[74,96829,96830,96832,96834,96836,96838,96841,96843,96845],{"class":76,"line":20889},[74,96831,56425],{"class":84},[74,96833,56094],{"class":55581},[74,96835,59520],{"class":1925},[74,96837,131],{"class":84},[74,96839,96840],{"class":190},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[74,96842,59595],{"class":84},[74,96844,56094],{"class":55581},[74,96846,55588],{"class":84},[74,96848,96849,96851,96853],{"class":76,"line":20912},[74,96850,56425],{"class":84},[74,96852,56094],{"class":55581},[74,96854,55588],{"class":84},[74,96856,96857],{"class":76,"line":20918},[74,96858,96859],{"class":144},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[74,96861,96862,96864,96866,96868,96870,96872,96874,96877],{"class":76,"line":20941},[74,96863,15500],{"class":80},[74,96865,96336],{"class":134},[74,96867,17843],{"class":80},[74,96869,58677],{"class":84},[74,96871,58680],{"class":1925},[74,96873,85],{"class":84},[74,96875,96876],{"class":190},"'video'",[74,96878,91],{"class":84},[74,96880,96881],{"class":76,"line":20955},[74,96882,96883],{"class":144},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[74,96885,96886,96889,96891,96893,96895,96898,96900],{"class":76,"line":20975},[74,96887,96888],{"class":84},"    video.ontimeupdate ",[74,96890,131],{"class":80},[74,96892,92636],{"class":84},[74,96894,95454],{"class":1925},[74,96896,96897],{"class":84},"(() ",[74,96899,89003],{"class":80},[74,96901,19851],{"class":84},[74,96903,96904],{"class":76,"line":20981},[74,96905,96906],{"class":144},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[74,96908,96909],{"class":76,"line":20992},[74,96910,96911],{"class":144},"      \u002F\u002F 控制台输出当前的时间\n",[74,96913,96914,96917],{"class":76,"line":21015},[74,96915,96916],{"class":144},"      \u002F\u002F console.log(video.currentTime)",[74,96918,96919],{"class":144},"  \u002F\u002F获得当前的视频时间\n",[74,96921,96922],{"class":76,"line":21037},[74,96923,96924],{"class":144},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[74,96926,96927,96929,96931,96933,96936],{"class":76,"line":21042},[74,96928,78964],{"class":84},[74,96930,75935],{"class":1925},[74,96932,85],{"class":84},[74,96934,96935],{"class":190},"'currentTime'",[74,96937,96938],{"class":84},", video.currentTime)\n",[74,96940,96941,96943,96945],{"class":76,"line":21048},[74,96942,58816],{"class":84},[74,96944,10689],{"class":134},[74,96946,91],{"class":84},[74,96948,96949],{"class":76,"line":21062},[74,96950,96951],{"class":144},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[74,96953,96954,96957,96960,96962,96965,96967],{"class":76,"line":21075},[74,96955,96956],{"class":84},"    video.",[74,96958,96959],{"class":1925},"onloadeddata",[74,96961,17843],{"class":80},[74,96963,96964],{"class":84}," () ",[74,96966,89003],{"class":80},[74,96968,19851],{"class":84},[74,96970,96971],{"class":76,"line":21080},[74,96972,64293],{"class":144},[74,96974,96975],{"class":76,"line":21094},[74,96976,96977],{"class":144},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[74,96979,96980,96983,96985,96988,96990,96992,96994,96996,96998],{"class":76,"line":21099},[74,96981,96982],{"class":84},"      video.currentTime ",[74,96984,131],{"class":80},[74,96986,96987],{"class":84}," localStorage.",[74,96989,75966],{"class":1925},[74,96991,85],{"class":84},[74,96993,96935],{"class":190},[74,96995,17993],{"class":84},[74,96997,75638],{"class":80},[74,96999,51614],{"class":134},[74,97001,97002],{"class":76,"line":21105},[74,97003,2149],{"class":84},[74,97005,97006,97008,97010],{"class":76,"line":21110},[74,97007,56698],{"class":84},[74,97009,56094],{"class":55581},[74,97011,55588],{"class":84},[74,97013,97014,97016,97018],{"class":76,"line":21124},[74,97015,56066],{"class":84},[74,97017,56081],{"class":55581},[74,97019,55588],{"class":84},[74,97021,97022],{"class":76,"line":21129},[74,97023,2363],{"emptyLinePlaceholder":2362},[74,97025,97026,97028,97030],{"class":76,"line":21134},[74,97027,56066],{"class":84},[74,97029,54916],{"class":55581},[74,97031,55588],{"class":84},[5090,97033,97034],{},"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":69,"searchDepth":94,"depth":94,"links":97036},[97037,97042,97046,97047,97048,97053,97058,97059,97060,97061,97068,97073,97074,97084,97088,97089,97093],{"id":80972,"depth":94,"text":80973,"children":97038},[97039,97040,97041],{"id":80976,"depth":1141,"text":80977},{"id":81001,"depth":1141,"text":81002},{"id":81013,"depth":1141,"text":81014},{"id":81025,"depth":94,"text":81026,"children":97043},[97044,97045],{"id":81029,"depth":1141,"text":81030},{"id":81044,"depth":1141,"text":81045},{"id":81096,"depth":94,"text":81097},{"id":81140,"depth":94,"text":81141},{"id":81157,"depth":94,"text":81158,"children":97049},[97050,97051,97052],{"id":81161,"depth":1141,"text":81162},{"id":81174,"depth":1141,"text":81175},{"id":81279,"depth":1141,"text":81280},{"id":81568,"depth":94,"text":81569,"children":97054},[97055,97056,97057],{"id":81572,"depth":1141,"text":81573},{"id":82015,"depth":1141,"text":82016},{"id":82426,"depth":1141,"text":82427},{"id":82489,"depth":94,"text":82490},{"id":82568,"depth":94,"text":82569},{"id":82661,"depth":94,"text":82662},{"id":84506,"depth":94,"text":84507,"children":97062},[97063,97064,97065,97066,97067],{"id":84510,"depth":1141,"text":84511},{"id":84522,"depth":1141,"text":84523},{"id":84741,"depth":1141,"text":84742},{"id":84759,"depth":1141,"text":84760},{"id":84819,"depth":1141,"text":84820},{"id":89087,"depth":94,"text":89088,"children":97069},[97070,97071,97072],{"id":89091,"depth":1141,"text":89092},{"id":89109,"depth":1141,"text":89110},{"id":89135,"depth":1141,"text":89136},{"id":89144,"depth":94,"text":89145},{"id":89166,"depth":94,"text":89167,"children":97075},[97076,97077,97078,97079,97080,97081,97082,97083],{"id":89170,"depth":1141,"text":89171},{"id":89431,"depth":1141,"text":89432},{"id":89617,"depth":1141,"text":89618},{"id":89984,"depth":1141,"text":89985},{"id":90100,"depth":1141,"text":90101},{"id":90136,"depth":1141,"text":90137},{"id":90183,"depth":1141,"text":90184},{"id":90217,"depth":1141,"text":90218},{"id":91580,"depth":94,"text":91581,"children":97085},[97086,97087],{"id":91584,"depth":1141,"text":91585},{"id":91621,"depth":1141,"text":91622},{"id":92976,"depth":94,"text":92977},{"id":93347,"depth":94,"text":93348,"children":97090},[97091,97092],{"id":93351,"depth":1141,"text":93352},{"id":93385,"depth":1141,"text":93386},{"id":94114,"depth":94,"text":94115,"children":97094},[97095,97096,97097,97098],{"id":94118,"depth":1141,"text":94119},{"id":95076,"depth":1141,"text":95077},{"id":96018,"depth":1141,"text":96019},{"id":96092,"depth":1141,"text":96093},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":80961,"description":27656},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":97105,"title":97106,"body":97107,"description":97118,"extension":5121,"meta":97119,"navigation":2362,"path":97121,"seo":97122,"stem":97123,"__hash__":97124},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":97108,"toc":97116},[97109],[19,97110,97111,97112],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[324,97113,97114],{"href":97114,"rel":97115},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[28145],{"title":69,"searchDepth":94,"depth":94,"links":97117},[],"三件套第三套学习",{"category":97120},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":97106,"description":97118},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":97126,"title":97127,"body":97128,"description":27656,"extension":5121,"meta":97233,"navigation":2362,"path":97234,"seo":97235,"stem":97236,"__hash__":97237},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":97129,"toc":97228},[97130,97137,97140,97143,97146,97150,97159,97162,97165,97169,97178,97181,97185,97188,97208,97211,97225],[19,97131,97132],{},[324,97133,97136],{"href":97134,"rel":97135},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[28145],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,97138,97127],{"id":97139},"_1安装",[19,97141,97142],{},"numpy是科学计算基础库,底层是C语言",[19,97144,97145],{},"三种方式：",[14,97147,97149],{"id":97148},"_11-通过pip安装","1.1 通过pip安装",[64,97151,97153],{"className":34659,"code":97152,"language":34661,"meta":69,"style":69},"pip install numpy\n",[71,97154,97155],{"__ignoreMap":69},[74,97156,97157],{"class":76,"line":77},[74,97158,97152],{"class":84},[19,97160,97161],{},"首选方式，自动处理依赖项",[19,97163,97164],{},"在提示系统命令符中使用cmd",[14,97166,97168],{"id":97167},"_12-通过anaconda安装","1.2 通过Anaconda安装",[64,97170,97172],{"className":34659,"code":97171,"language":34661,"meta":69,"style":69},"conda install numpy\n",[71,97173,97174],{"__ignoreMap":69},[74,97175,97176],{"class":76,"line":77},[74,97177,97171],{"class":84},[19,97179,97180],{},"自动解决环境依赖",[14,97182,97184],{"id":97183},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,97186,97187],{},"对于Debian\u002FUbuntu",[64,97189,97191],{"className":34659,"code":97190,"language":34661,"meta":69,"style":69},"sudo apt-get install python3-numpy\n",[71,97192,97193],{"__ignoreMap":69},[74,97194,97195,97198,97200,97203,97205],{"class":76,"line":77},[74,97196,97197],{"class":84},"sudo apt",[74,97199,618],{"class":80},[74,97201,97202],{"class":84},"get install python3",[74,97204,618],{"class":80},[74,97206,97207],{"class":84},"numpy\n",[19,97209,97210],{},"对于Fedora:",[64,97212,97214],{"className":34659,"code":97213,"language":34661,"meta":69,"style":69},"sudo dnf install python3-numpy\n",[71,97215,97216],{"__ignoreMap":69},[74,97217,97218,97221,97223],{"class":76,"line":77},[74,97219,97220],{"class":84},"sudo dnf install python3",[74,97222,618],{"class":80},[74,97224,97207],{"class":84},[5090,97226,97227],{},"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":69,"searchDepth":94,"depth":94,"links":97229},[97230,97231,97232],{"id":97148,"depth":94,"text":97149},{"id":97167,"depth":94,"text":97168},{"id":97183,"depth":94,"text":97184},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":97127,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":97239,"title":97240,"body":97241,"description":27656,"extension":5121,"meta":97354,"navigation":2362,"path":97355,"seo":97356,"stem":97357,"__hash__":97358},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":97242,"toc":97352},[97243,97246,97249,97252,97255,97258,97261,97264,97267,97270,97346,97349],[10,97244,97240],{"id":97245},"_10算数函数",[19,97247,97248],{},"加减乘除运算跟python基础语法没区别",[19,97250,97251],{},"除了python那种方法外还可以使用函数",[19,97253,97254],{},"加：np.add(a,b)",[19,97256,97257],{},"减：np.subtract(a,b)",[19,97259,97260],{},"乘：np.multiply(a,b)",[19,97262,97263],{},"除：np.divide(a,b) == a\u002Fb",[19,97265,97266],{},"取余：np.mod(a,b) == a%b",[19,97268,97269],{},"必须会的用法：",[64,97271,97273],{"className":34659,"code":97272,"language":34661,"meta":69,"style":69},"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",[71,97274,97275,97297,97318,97328,97341],{"__ignoreMap":69},[74,97276,97277,97279,97281,97284,97286,97289,97291,97293,97295],{"class":76,"line":77},[74,97278,324],{"class":84},[74,97280,131],{"class":80},[74,97282,97283],{"class":84},"np.arange(",[74,97285,506],{"class":134},[74,97287,97288],{"class":84},").reshape(",[74,97290,157],{"class":134},[74,97292,464],{"class":84},[74,97294,157],{"class":134},[74,97296,91],{"class":84},[74,97298,97299,97301,97303,97306,97308,97310,97312,97314,97316],{"class":76,"line":94},[74,97300,349],{"class":84},[74,97302,131],{"class":80},[74,97304,97305],{"class":84},"np.array([",[74,97307,532],{"class":134},[74,97309,464],{"class":84},[74,97311,532],{"class":134},[74,97313,464],{"class":84},[74,97315,532],{"class":134},[74,97317,4620],{"class":84},[74,97319,97320,97323,97325],{"class":76,"line":1141},[74,97321,97322],{"class":84},"result",[74,97324,131],{"class":80},[74,97326,97327],{"class":84},"np.empty_like(a)\n",[74,97329,97330,97333,97336,97338],{"class":76,"line":1156},[74,97331,97332],{"class":84},"np.add(a,b,",[74,97334,97335],{"class":9495},"out",[74,97337,131],{"class":80},[74,97339,97340],{"class":84},"result)\n",[74,97342,97343],{"class":76,"line":1162},[74,97344,97345],{"class":84},"result\n",[19,97347,97348],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5090,97350,97351],{},"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":69,"searchDepth":94,"depth":94,"links":97353},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":97240,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":97360,"title":97361,"body":97362,"description":27656,"extension":5121,"meta":98124,"navigation":2362,"path":98125,"seo":98126,"stem":98127,"__hash__":98128},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":97363,"toc":98111},[97364,97367,97370,97373,97377,97416,97420,97464,97524,97528,97531,97570,97573,97618,97622,97658,97662,97731,97735,97799,97803,97806,97809,97812,97815,97851,97855,97895,97899,97971,97974,97978,98041,98045,98108],[10,97365,97361],{"id":97366},"_11统计函数",[19,97368,97369],{},"sum max min mean",[19,97371,97372],{},"这些有axis参数，可以指定方向",[14,97374,97376],{"id":97375},"_111-sum求和函数","11.1 sum()求和函数",[64,97378,97380],{"className":34659,"code":97379,"language":34661,"meta":69,"style":69},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[71,97381,97382,97387,97408],{"__ignoreMap":69},[74,97383,97384],{"class":76,"line":77},[74,97385,97386],{"class":144},"#创建一维数组\n",[74,97388,97389,97391,97393,97396,97398,97400,97402,97404,97406],{"class":76,"line":94},[74,97390,324],{"class":84},[74,97392,131],{"class":80},[74,97394,97395],{"class":84},"np.random.randint(",[74,97397,303],{"class":134},[74,97399,464],{"class":84},[74,97401,397],{"class":134},[74,97403,464],{"class":84},[74,97405,786],{"class":134},[74,97407,91],{"class":84},[74,97409,97410,97413],{"class":76,"line":1141},[74,97411,97412],{"class":84},"np.sum(a)",[74,97414,97415],{"class":144},"#求和\n",[14,97417,97419],{"id":97418},"_112-max求最大值函数","11.2 max()求最大值函数",[64,97421,97423],{"className":34659,"code":97422,"language":34661,"meta":69,"style":69},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[71,97424,97425,97429,97449,97454,97459],{"__ignoreMap":69},[74,97426,97427],{"class":76,"line":77},[74,97428,97386],{"class":144},[74,97430,97431,97433,97435,97437,97439,97441,97443,97445,97447],{"class":76,"line":94},[74,97432,324],{"class":84},[74,97434,131],{"class":80},[74,97436,97395],{"class":84},[74,97438,303],{"class":134},[74,97440,464],{"class":84},[74,97442,397],{"class":134},[74,97444,464],{"class":84},[74,97446,786],{"class":134},[74,97448,91],{"class":84},[74,97450,97451],{"class":76,"line":1141},[74,97452,97453],{"class":84},"np.max(a)\n",[74,97455,97456],{"class":76,"line":1156},[74,97457,97458],{"class":144},"#最大索引(求最大元素的索引)arg\n",[74,97460,97461],{"class":76,"line":1162},[74,97462,97463],{"class":84},"np.argmax(a)\n",[64,97465,97467],{"className":34659,"code":97466,"language":34661,"meta":69,"style":69},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[71,97468,97469,97490,97510,97514],{"__ignoreMap":69},[74,97470,97471,97473,97475,97478,97480,97482,97484,97486,97488],{"class":76,"line":77},[74,97472,15198],{"class":84},[74,97474,131],{"class":80},[74,97476,97477],{"class":84}," np.array([",[74,97479,303],{"class":134},[74,97481,16714],{"class":84},[74,97483,405],{"class":134},[74,97485,16714],{"class":84},[74,97487,157],{"class":134},[74,97489,4620],{"class":84},[74,97491,97492,97494,97496,97498,97500,97502,97504,97506,97508],{"class":76,"line":94},[74,97493,15224],{"class":84},[74,97495,131],{"class":80},[74,97497,97477],{"class":84},[74,97499,157],{"class":134},[74,97501,16714],{"class":84},[74,97503,163],{"class":134},[74,97505,16714],{"class":84},[74,97507,379],{"class":134},[74,97509,4620],{"class":84},[74,97511,97512],{"class":76,"line":1141},[74,97513,2363],{"emptyLinePlaceholder":2362},[74,97515,97516,97518,97521],{"class":76,"line":1156},[74,97517,34696],{"class":134},[74,97519,97520],{"class":84},"(np.maximum(a, b))   ",[74,97522,97523],{"class":144},"# [3 5 4]，每个位置上取较大值\n",[14,97525,97527],{"id":97526},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,97529,97530],{},"①一维数组：",[64,97532,97534],{"className":34659,"code":97533,"language":34661,"meta":69,"style":69},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[71,97535,97536,97540,97560,97565],{"__ignoreMap":69},[74,97537,97538],{"class":76,"line":77},[74,97539,97386],{"class":144},[74,97541,97542,97544,97546,97548,97550,97552,97554,97556,97558],{"class":76,"line":94},[74,97543,324],{"class":84},[74,97545,131],{"class":80},[74,97547,97395],{"class":84},[74,97549,303],{"class":134},[74,97551,464],{"class":84},[74,97553,397],{"class":134},[74,97555,464],{"class":84},[74,97557,786],{"class":134},[74,97559,91],{"class":84},[74,97561,97562],{"class":76,"line":1141},[74,97563,97564],{"class":144},"#求平均值\n",[74,97566,97567],{"class":76,"line":1156},[74,97568,97569],{"class":84},"np.mean(a)\n",[19,97571,97572],{},"②二维数组",[64,97574,97576],{"className":34659,"code":97575,"language":34661,"meta":69,"style":69},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[71,97577,97578,97583,97608,97613],{"__ignoreMap":69},[74,97579,97580],{"class":76,"line":77},[74,97581,97582],{"class":144},"#二维数组\n",[74,97584,97585,97588,97590,97592,97594,97596,97598,97600,97602,97604,97606],{"class":76,"line":94},[74,97586,97587],{"class":84},"aa",[74,97589,131],{"class":80},[74,97591,97283],{"class":84},[74,97593,303],{"class":134},[74,97595,464],{"class":84},[74,97597,609],{"class":134},[74,97599,97288],{"class":84},[74,97601,157],{"class":134},[74,97603,464],{"class":84},[74,97605,379],{"class":134},[74,97607,91],{"class":84},[74,97609,97610],{"class":76,"line":1141},[74,97611,97612],{"class":144},"#对数组中的所有数求平均\n",[74,97614,97615],{"class":76,"line":1156},[74,97616,97617],{"class":84},"np.mean(aa)\n",[14,97619,97621],{"id":97620},"_114-median求中位数函数","11.4 median()求中位数函数",[64,97623,97625],{"className":34659,"code":97624,"language":34661,"meta":69,"style":69},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[71,97626,97627,97632,97648,97653],{"__ignoreMap":69},[74,97628,97629],{"class":76,"line":77},[74,97630,97631],{"class":144},"#求中位数\n",[74,97633,97634,97636,97638,97640,97642,97644,97646],{"class":76,"line":94},[74,97635,349],{"class":84},[74,97637,131],{"class":80},[74,97639,97283],{"class":84},[74,97641,303],{"class":134},[74,97643,464],{"class":84},[74,97645,532],{"class":134},[74,97647,91],{"class":84},[74,97649,97650],{"class":76,"line":1141},[74,97651,97652],{"class":84},"np.median(b)\n",[74,97654,97655],{"class":76,"line":1156},[74,97656,97657],{"class":144},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,97659,97661],{"id":97660},"_115-power求幂运算函数","11.5 power()求幂运算函数",[64,97663,97665],{"className":34659,"code":97664,"language":34661,"meta":69,"style":69},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[71,97666,97667,97683,97688,97693,97702,97707,97716],{"__ignoreMap":69},[74,97668,97669,97671,97673,97675,97677,97679,97681],{"class":76,"line":77},[74,97670,349],{"class":84},[74,97672,131],{"class":80},[74,97674,97283],{"class":84},[74,97676,303],{"class":134},[74,97678,464],{"class":84},[74,97680,532],{"class":134},[74,97682,91],{"class":84},[74,97684,97685],{"class":76,"line":94},[74,97686,97687],{"class":144},"#幂运算\n",[74,97689,97690],{"class":76,"line":1141},[74,97691,97692],{"class":144},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[74,97694,97695,97698,97700],{"class":76,"line":1156},[74,97696,97697],{"class":84},"np.power(b,",[74,97699,163],{"class":134},[74,97701,91],{"class":84},[74,97703,97704],{"class":76,"line":1162},[74,97705,97706],{"class":144},"#或者以下代码，将数据存储起来\n",[74,97708,97709,97711,97713],{"class":76,"line":1176},[74,97710,931],{"class":84},[74,97712,131],{"class":80},[74,97714,97715],{"class":84},"np.empty_like(b)\n",[74,97717,97718,97720,97722,97724,97726,97728],{"class":76,"line":1182},[74,97719,97697],{"class":84},[74,97721,163],{"class":134},[74,97723,464],{"class":84},[74,97725,97335],{"class":9495},[74,97727,131],{"class":80},[74,97729,97730],{"class":84},"y)\n",[14,97732,97734],{"id":97733},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[64,97736,97738],{"className":34659,"code":97737,"language":34661,"meta":69,"style":69},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[71,97739,97740,97756,97761,97766,97770,97788],{"__ignoreMap":69},[74,97741,97742,97744,97746,97748,97750,97752,97754],{"class":76,"line":77},[74,97743,349],{"class":84},[74,97745,131],{"class":80},[74,97747,97283],{"class":84},[74,97749,303],{"class":134},[74,97751,464],{"class":84},[74,97753,532],{"class":134},[74,97755,91],{"class":84},[74,97757,97758],{"class":76,"line":94},[74,97759,97760],{"class":144},"#开方\n",[74,97762,97763],{"class":76,"line":1141},[74,97764,97765],{"class":84},"np.sqrt(b)\n",[74,97767,97768],{"class":76,"line":1156},[74,97769,97706],{"class":144},[74,97771,97772,97774,97776,97779,97782,97784,97786],{"class":76,"line":1162},[74,97773,931],{"class":84},[74,97775,131],{"class":80},[74,97777,97778],{"class":84},"np.empty_like(b,",[74,97780,97781],{"class":9495},"dtype",[74,97783,131],{"class":80},[74,97785,125],{"class":134},[74,97787,91],{"class":84},[74,97789,97790,97793,97795,97797],{"class":76,"line":1176},[74,97791,97792],{"class":84},"np.sqrt(b,",[74,97794,97335],{"class":9495},[74,97796,131],{"class":80},[74,97798,97730],{"class":84},[14,97800,97802],{"id":97801},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,97804,97805],{},"对数组中的元素累计求和，可指定轴",[19,97807,97808],{},"#累计求和的意思是：",[19,97810,97811],{},"a = np.array([1, 2, 3, 4])",[19,97813,97814],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[64,97816,97818],{"className":34659,"code":97817,"language":34661,"meta":69,"style":69},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[71,97819,97820,97836,97841,97846],{"__ignoreMap":69},[74,97821,97822,97824,97826,97828,97830,97832,97834],{"class":76,"line":77},[74,97823,349],{"class":84},[74,97825,131],{"class":80},[74,97827,97283],{"class":84},[74,97829,303],{"class":134},[74,97831,464],{"class":84},[74,97833,532],{"class":134},[74,97835,91],{"class":84},[74,97837,97838],{"class":76,"line":94},[74,97839,97840],{"class":84},"np.cumsum(b)\n",[74,97842,97843],{"class":76,"line":1141},[74,97844,97845],{"class":144},"#结果：\n",[74,97847,97848],{"class":76,"line":1156},[74,97849,97850],{"class":144},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,97852,97854],{"id":97853},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[64,97856,97858],{"className":34659,"code":97857,"language":34661,"meta":69,"style":69},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[71,97859,97860,97876,97881,97886,97890],{"__ignoreMap":69},[74,97861,97862,97864,97866,97868,97870,97872,97874],{"class":76,"line":77},[74,97863,349],{"class":84},[74,97865,131],{"class":80},[74,97867,97283],{"class":84},[74,97869,303],{"class":134},[74,97871,464],{"class":84},[74,97873,532],{"class":134},[74,97875,91],{"class":84},[74,97877,97878],{"class":76,"line":94},[74,97879,97880],{"class":144},"#对数组中的元素累计求积，可指定轴\n",[74,97882,97883],{"class":76,"line":1141},[74,97884,97885],{"class":84},"np.cumprod(b)\n",[74,97887,97888],{"class":76,"line":1156},[74,97889,97845],{"class":144},[74,97891,97892],{"class":76,"line":1162},[74,97893,97894],{"class":144},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,97896,97898],{"id":97897},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[64,97900,97902],{"className":34659,"code":97901,"language":34661,"meta":69,"style":69},"#删除数组中的重复数据，并对数据进行排序\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",[71,97903,97904,97909,97957,97962,97966],{"__ignoreMap":69},[74,97905,97906],{"class":76,"line":77},[74,97907,97908],{"class":144},"#删除数组中的重复数据，并对数据进行排序\n",[74,97910,97911,97913,97915,97917,97919,97921,97923,97925,97927,97929,97931,97933,97935,97937,97939,97941,97943,97945,97947,97949,97951,97953,97955],{"class":76,"line":94},[74,97912,324],{"class":84},[74,97914,131],{"class":80},[74,97916,97305],{"class":84},[74,97918,303],{"class":134},[74,97920,464],{"class":84},[74,97922,163],{"class":134},[74,97924,464],{"class":84},[74,97926,157],{"class":134},[74,97928,464],{"class":84},[74,97930,584],{"class":134},[74,97932,464],{"class":84},[74,97934,157],{"class":134},[74,97936,464],{"class":84},[74,97938,532],{"class":134},[74,97940,464],{"class":84},[74,97942,283],{"class":134},[74,97944,464],{"class":84},[74,97946,277],{"class":134},[74,97948,464],{"class":84},[74,97950,861],{"class":134},[74,97952,464],{"class":84},[74,97954,379],{"class":134},[74,97956,4620],{"class":84},[74,97958,97959],{"class":76,"line":1141},[74,97960,97961],{"class":84},"np.unique(a)\n",[74,97963,97964],{"class":76,"line":1156},[74,97965,97845],{"class":144},[74,97967,97968],{"class":76,"line":1162},[74,97969,97970],{"class":144},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,97972,97973],{},"升序形式排序",[14,97975,97977],{"id":97976},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[64,97979,97981],{"className":34659,"code":97980,"language":34661,"meta":69,"style":69},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[71,97982,97983,98031,98036],{"__ignoreMap":69},[74,97984,97985,97987,97989,97991,97993,97995,97997,97999,98001,98003,98005,98007,98009,98011,98013,98015,98017,98019,98021,98023,98025,98027,98029],{"class":76,"line":77},[74,97986,324],{"class":84},[74,97988,131],{"class":80},[74,97990,97305],{"class":84},[74,97992,303],{"class":134},[74,97994,464],{"class":84},[74,97996,163],{"class":134},[74,97998,464],{"class":84},[74,98000,157],{"class":134},[74,98002,464],{"class":84},[74,98004,584],{"class":134},[74,98006,464],{"class":84},[74,98008,157],{"class":134},[74,98010,464],{"class":84},[74,98012,532],{"class":134},[74,98014,464],{"class":84},[74,98016,283],{"class":134},[74,98018,464],{"class":84},[74,98020,277],{"class":134},[74,98022,464],{"class":84},[74,98024,861],{"class":134},[74,98026,464],{"class":84},[74,98028,379],{"class":134},[74,98030,4620],{"class":84},[74,98032,98033],{"class":76,"line":94},[74,98034,98035],{"class":144},"#返回数组中非零元素的索引\n",[74,98037,98038],{"class":76,"line":1141},[74,98039,98040],{"class":84},"np.nonzero(a)\n",[14,98042,98044],{"id":98043},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[64,98046,98048],{"className":34659,"code":98047,"language":34661,"meta":69,"style":69},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[71,98049,98050,98098,98103],{"__ignoreMap":69},[74,98051,98052,98054,98056,98058,98060,98062,98064,98066,98068,98070,98072,98074,98076,98078,98080,98082,98084,98086,98088,98090,98092,98094,98096],{"class":76,"line":77},[74,98053,324],{"class":84},[74,98055,131],{"class":80},[74,98057,97305],{"class":84},[74,98059,303],{"class":134},[74,98061,464],{"class":84},[74,98063,163],{"class":134},[74,98065,464],{"class":84},[74,98067,157],{"class":134},[74,98069,464],{"class":84},[74,98071,584],{"class":134},[74,98073,464],{"class":84},[74,98075,157],{"class":134},[74,98077,464],{"class":84},[74,98079,532],{"class":134},[74,98081,464],{"class":84},[74,98083,283],{"class":134},[74,98085,464],{"class":84},[74,98087,277],{"class":134},[74,98089,464],{"class":84},[74,98091,861],{"class":134},[74,98093,464],{"class":84},[74,98095,379],{"class":134},[74,98097,4620],{"class":84},[74,98099,98100],{"class":76,"line":94},[74,98101,98102],{"class":144},"#计算一组数中最大值与最小值的差，可指定轴\n",[74,98104,98105],{"class":76,"line":1141},[74,98106,98107],{"class":84},"np.ptp(a)\n",[5090,98109,98110],{},"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":69,"searchDepth":94,"depth":94,"links":98112},[98113,98114,98115,98116,98117,98118,98119,98120,98121,98122,98123],{"id":97375,"depth":94,"text":97376},{"id":97418,"depth":94,"text":97419},{"id":97526,"depth":94,"text":97527},{"id":97620,"depth":94,"text":97621},{"id":97660,"depth":94,"text":97661},{"id":97733,"depth":94,"text":97734},{"id":97801,"depth":94,"text":97802},{"id":97853,"depth":94,"text":97854},{"id":97897,"depth":94,"text":97898},{"id":97976,"depth":94,"text":97977},{"id":98043,"depth":94,"text":98044},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":97361,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":98130,"title":98131,"body":98132,"description":27656,"extension":5121,"meta":98787,"navigation":2362,"path":98788,"seo":98789,"stem":98790,"__hash__":98791},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":98133,"toc":98775},[98134,98137,98141,98144,98360,98364,98367,98576,98580,98646,98651,98655,98658,98661,98699,98703,98706,98711,98715,98718,98721,98726,98730,98733,98737,98740,98743,98748,98752,98755,98758,98763,98767,98772],[10,98135,98131],{"id":98136},"_12其他常用函数",[14,98138,98140],{"id":98139},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,98142,98143],{},"将数组的数据按照行列复制扩展",[64,98145,98147],{"className":34659,"code":98146,"language":34661,"meta":69,"style":69},"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",[71,98148,98149,98165,98174,98178,98183,98188,98201,98205,98210,98215,98220,98224,98229,98253,98265,98269,98273,98278,98283,98288,98293,98297,98310,98314,98318,98323,98328,98333,98338,98343,98347,98351,98356],{"__ignoreMap":69},[74,98150,98151,98153,98155,98157,98159,98161,98163],{"class":76,"line":77},[74,98152,324],{"class":84},[74,98154,131],{"class":80},[74,98156,97283],{"class":84},[74,98158,303],{"class":134},[74,98160,464],{"class":84},[74,98162,405],{"class":134},[74,98164,91],{"class":84},[74,98166,98167,98170,98172],{"class":76,"line":94},[74,98168,98169],{"class":84},"np.tile(a,",[74,98171,163],{"class":134},[74,98173,91],{"class":84},[74,98175,98176],{"class":76,"line":1141},[74,98177,97845],{"class":144},[74,98179,98180],{"class":76,"line":1156},[74,98181,98182],{"class":144},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[74,98184,98185],{"class":76,"line":1162},[74,98186,98187],{"class":144},"#行复制两次，列复制三次\n",[74,98189,98190,98193,98195,98197,98199],{"class":76,"line":1176},[74,98191,98192],{"class":84},"np.tile(a,(",[74,98194,163],{"class":134},[74,98196,464],{"class":84},[74,98198,157],{"class":134},[74,98200,34778],{"class":84},[74,98202,98203],{"class":76,"line":1182},[74,98204,97845],{"class":144},[74,98206,98207],{"class":76,"line":1273},[74,98208,98209],{"class":190},"'''\n",[74,98211,98212],{"class":76,"line":1279},[74,98213,98214],{"class":190},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[74,98216,98217],{"class":76,"line":1291},[74,98218,98219],{"class":190},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[74,98221,98222],{"class":76,"line":1574},[74,98223,98209],{"class":190},[74,98225,98226],{"class":76,"line":1579},[74,98227,98228],{"class":144},"#创建二维数组\n",[74,98230,98231,98233,98235,98237,98239,98241,98243,98245,98247,98249,98251],{"class":76,"line":1585},[74,98232,97587],{"class":84},[74,98234,131],{"class":80},[74,98236,97283],{"class":84},[74,98238,303],{"class":134},[74,98240,464],{"class":84},[74,98242,609],{"class":134},[74,98244,97288],{"class":84},[74,98246,379],{"class":134},[74,98248,464],{"class":84},[74,98250,157],{"class":134},[74,98252,91],{"class":84},[74,98254,98255,98258,98260,98262],{"class":76,"line":1590},[74,98256,98257],{"class":84},"np.tile(aa,",[74,98259,163],{"class":134},[74,98261,515],{"class":84},[74,98263,98264],{"class":144},"#一个数的时候就是行\n",[74,98266,98267],{"class":76,"line":1604},[74,98268,97845],{"class":144},[74,98270,98271],{"class":76,"line":1609},[74,98272,98209],{"class":190},[74,98274,98275],{"class":76,"line":1615},[74,98276,98277],{"class":190},"array([[ 1,  2,  3,  1,  2,  3],\n",[74,98279,98280],{"class":76,"line":1636},[74,98281,98282],{"class":190},"       [ 4,  5,  6,  4,  5,  6],\n",[74,98284,98285],{"class":76,"line":1641},[74,98286,98287],{"class":190},"       [ 7,  8,  9,  7,  8,  9],\n",[74,98289,98290],{"class":76,"line":1655},[74,98291,98292],{"class":190},"       [10, 11, 12, 10, 11, 12]])\n",[74,98294,98295],{"class":76,"line":1660},[74,98296,98209],{"class":190},[74,98298,98299,98302,98304,98306,98308],{"class":76,"line":1689},[74,98300,98301],{"class":84},"np.tile(aa,(",[74,98303,163],{"class":134},[74,98305,464],{"class":84},[74,98307,157],{"class":134},[74,98309,34778],{"class":84},[74,98311,98312],{"class":76,"line":1694},[74,98313,97845],{"class":144},[74,98315,98316],{"class":76,"line":1711},[74,98317,98209],{"class":190},[74,98319,98320],{"class":76,"line":1716},[74,98321,98322],{"class":190},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[74,98324,98325],{"class":76,"line":1721},[74,98326,98327],{"class":190},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[74,98329,98330],{"class":76,"line":1726},[74,98331,98332],{"class":190},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[74,98334,98335],{"class":76,"line":1740},[74,98336,98337],{"class":190},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[74,98339,98340],{"class":76,"line":1745},[74,98341,98342],{"class":190},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[74,98344,98345],{"class":76,"line":2540},[74,98346,98327],{"class":190},[74,98348,98349],{"class":76,"line":2554},[74,98350,98332],{"class":190},[74,98352,98353],{"class":76,"line":2562},[74,98354,98355],{"class":190},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[74,98357,98358],{"class":76,"line":2567},[74,98359,98209],{"class":190},[14,98361,98363],{"id":98362},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,98365,98366],{},"repeat()将数组中的每个元素重复若干次",[64,98368,98370],{"className":34659,"code":98369,"language":34661,"meta":69,"style":69},"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",[71,98371,98372,98388,98397,98401,98406,98430,98435,98444,98448,98453,98457,98462,98478,98482,98486,98491,98496,98501,98505,98510,98514,98519,98524,98528,98544,98548,98552,98557,98562,98567,98572],{"__ignoreMap":69},[74,98373,98374,98376,98378,98380,98382,98384,98386],{"class":76,"line":77},[74,98375,324],{"class":84},[74,98377,131],{"class":80},[74,98379,97283],{"class":84},[74,98381,303],{"class":134},[74,98383,464],{"class":84},[74,98385,405],{"class":134},[74,98387,91],{"class":84},[74,98389,98390,98393,98395],{"class":76,"line":94},[74,98391,98392],{"class":84},"np.repeat(a,",[74,98394,157],{"class":134},[74,98396,91],{"class":84},[74,98398,98399],{"class":76,"line":1141},[74,98400,97845],{"class":144},[74,98402,98403],{"class":76,"line":1156},[74,98404,98405],{"class":144},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[74,98407,98408,98410,98412,98414,98416,98418,98420,98422,98424,98426,98428],{"class":76,"line":1162},[74,98409,97587],{"class":84},[74,98411,131],{"class":80},[74,98413,97283],{"class":84},[74,98415,303],{"class":134},[74,98417,464],{"class":84},[74,98419,609],{"class":134},[74,98421,97288],{"class":84},[74,98423,379],{"class":134},[74,98425,464],{"class":84},[74,98427,157],{"class":134},[74,98429,91],{"class":84},[74,98431,98432],{"class":76,"line":1176},[74,98433,98434],{"class":144},"#这个重复之后二维变成一维\n",[74,98436,98437,98440,98442],{"class":76,"line":1182},[74,98438,98439],{"class":84},"np.repeat(aa,",[74,98441,163],{"class":134},[74,98443,91],{"class":84},[74,98445,98446],{"class":76,"line":1273},[74,98447,98209],{"class":190},[74,98449,98450],{"class":76,"line":1279},[74,98451,98452],{"class":190},"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",[74,98454,98455],{"class":76,"line":1291},[74,98456,98209],{"class":190},[74,98458,98459],{"class":76,"line":1574},[74,98460,98461],{"class":144},"#指定axis\n",[74,98463,98464,98466,98468,98470,98472,98474,98476],{"class":76,"line":1579},[74,98465,98439],{"class":84},[74,98467,163],{"class":134},[74,98469,464],{"class":84},[74,98471,51795],{"class":9495},[74,98473,131],{"class":80},[74,98475,277],{"class":134},[74,98477,91],{"class":84},[74,98479,98480],{"class":76,"line":1585},[74,98481,97845],{"class":144},[74,98483,98484],{"class":76,"line":1590},[74,98485,98209],{"class":190},[74,98487,98488],{"class":76,"line":1604},[74,98489,98490],{"class":190},"array([[ 1,  2,  3],\n",[74,98492,98493],{"class":76,"line":1609},[74,98494,98495],{"class":190},"       [ 1,  2,  3],\n",[74,98497,98498],{"class":76,"line":1615},[74,98499,98500],{"class":190},"       [ 4,  5,  6],\n",[74,98502,98503],{"class":76,"line":1636},[74,98504,98500],{"class":190},[74,98506,98507],{"class":76,"line":1641},[74,98508,98509],{"class":190},"       [ 7,  8,  9],\n",[74,98511,98512],{"class":76,"line":1655},[74,98513,98509],{"class":190},[74,98515,98516],{"class":76,"line":1660},[74,98517,98518],{"class":190},"       [10, 11, 12],\n",[74,98520,98521],{"class":76,"line":1689},[74,98522,98523],{"class":190},"       [10, 11, 12]])\n",[74,98525,98526],{"class":76,"line":1694},[74,98527,98209],{"class":190},[74,98529,98530,98532,98534,98536,98538,98540,98542],{"class":76,"line":1711},[74,98531,98439],{"class":84},[74,98533,163],{"class":134},[74,98535,464],{"class":84},[74,98537,51795],{"class":9495},[74,98539,131],{"class":80},[74,98541,303],{"class":134},[74,98543,91],{"class":84},[74,98545,98546],{"class":76,"line":1716},[74,98547,97845],{"class":144},[74,98549,98550],{"class":76,"line":1721},[74,98551,98209],{"class":190},[74,98553,98554],{"class":76,"line":1726},[74,98555,98556],{"class":190},"array([[ 1,  1,  2,  2,  3,  3],\n",[74,98558,98559],{"class":76,"line":1740},[74,98560,98561],{"class":190},"       [ 4,  4,  5,  5,  6,  6],\n",[74,98563,98564],{"class":76,"line":1745},[74,98565,98566],{"class":190},"       [ 7,  7,  8,  8,  9,  9],\n",[74,98568,98569],{"class":76,"line":2540},[74,98570,98571],{"class":190},"       [10, 10, 11, 11, 12, 12]])\n",[74,98573,98574],{"class":76,"line":2554},[74,98575,98209],{"class":190},[14,98577,98579],{"id":98578},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[64,98581,98583],{"className":34659,"code":98582,"language":34661,"meta":69,"style":69},"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",[71,98584,98585,98601,98606,98618,98622,98627,98637,98641],{"__ignoreMap":69},[74,98586,98587,98589,98591,98593,98595,98597,98599],{"class":76,"line":77},[74,98588,324],{"class":84},[74,98590,131],{"class":80},[74,98592,97283],{"class":84},[74,98594,303],{"class":134},[74,98596,464],{"class":84},[74,98598,405],{"class":134},[74,98600,91],{"class":84},[74,98602,98603],{"class":76,"line":94},[74,98604,98605],{"class":144},"#array([，2，3，4])\n",[74,98607,98608,98611,98613,98615],{"class":76,"line":1141},[74,98609,98610],{"class":84},"np.roll(a,",[74,98612,163],{"class":134},[74,98614,515],{"class":84},[74,98616,98617],{"class":144},"#传正数向后调多少位，传负数向前调多少位\n",[74,98619,98620],{"class":76,"line":1156},[74,98621,97845],{"class":144},[74,98623,98624],{"class":76,"line":1162},[74,98625,98626],{"class":144},"#array([3, 4, 1, 2])\n",[74,98628,98629,98631,98633,98635],{"class":76,"line":1176},[74,98630,98610],{"class":84},[74,98632,618],{"class":80},[74,98634,303],{"class":134},[74,98636,91],{"class":84},[74,98638,98639],{"class":76,"line":1182},[74,98640,97845],{"class":144},[74,98642,98643],{"class":76,"line":1273},[74,98644,98645],{"class":144},"#array([2, 3, 4, 1])\n",[19,98647,98648],{},[1424,98649],{"alt":69,"src":98650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,98652,98654],{"id":98653},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,98656,98657],{},"resize()重新调整数组的大小",[19,98659,98660],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[64,98662,98664],{"className":34659,"code":98663,"language":34661,"meta":69,"style":69},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[71,98665,98666,98671,98684],{"__ignoreMap":69},[74,98667,98668],{"class":76,"line":77},[74,98669,98670],{"class":144},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[74,98672,98673,98676,98678,98680,98682],{"class":76,"line":94},[74,98674,98675],{"class":84},"np.resize(aa,(",[74,98677,163],{"class":134},[74,98679,464],{"class":84},[74,98681,430],{"class":134},[74,98683,34778],{"class":84},[74,98685,98686,98688,98690,98692,98694,98696],{"class":76,"line":1141},[74,98687,98675],{"class":84},[74,98689,163],{"class":134},[74,98691,464],{"class":84},[74,98693,506],{"class":134},[74,98695,87052],{"class":84},[74,98697,98698],{"class":144},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,98700,98702],{"id":98701},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,98704,98705],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,98707,98708],{},[1424,98709],{"alt":69,"src":98710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,98712,98714],{"id":98713},"_126-保存加载文件","12.6 保存加载文件",[19,98716,98717],{},"savetxt():将数据保存到txt文件中",[19,98719,98720],{},"loadtxt():从文件加载数据",[19,98722,98723],{},[1424,98724],{"alt":69,"src":98725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,98727,98729],{"id":98728},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,98731,98732],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,98734,98736],{"id":98735},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,98738,98739],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,98741,98742],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,98744,98745],{},[1424,98746],{"alt":69,"src":98747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,98749,98751],{"id":98750},"_129-where语句","12.9 where语句",[19,98753,98754],{},"np.where(条件,x,y)",[19,98756,98757],{},"如果条件为True,对应值为x,否则对应值为y",[19,98759,98760],{},[1424,98761],{"alt":69,"src":98762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,98764,98766],{"id":98765},"_1210-dot矩阵","12.10 dot()矩阵",[19,98768,98769],{},[1424,98770],{"alt":69,"src":98771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5090,98773,98774],{},"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":69,"searchDepth":94,"depth":94,"links":98776},[98777,98778,98779,98780,98781,98782,98783,98784,98785,98786],{"id":98139,"depth":94,"text":98140},{"id":98362,"depth":94,"text":98363},{"id":98578,"depth":94,"text":98579},{"id":98653,"depth":94,"text":98654},{"id":98701,"depth":94,"text":98702},{"id":98713,"depth":94,"text":98714},{"id":98728,"depth":94,"text":98729},{"id":98735,"depth":94,"text":98736},{"id":98750,"depth":94,"text":98751},{"id":98765,"depth":94,"text":98766},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":98131,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":98793,"title":98794,"body":98795,"description":27656,"extension":5121,"meta":99148,"navigation":2362,"path":99149,"seo":99150,"stem":99151,"__hash__":99152},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":98796,"toc":99146},[98797,98800,98803,98806,98809,98812,98877,98879,99143],[10,98798,98794],{"id":98799},"_13数组排序",[19,98801,98802],{},"排序主要用到的方法是np.sort和np.argsort",[19,98804,98805],{},"其中np.sort()对数组直接排序",[19,98807,98808],{},"而np.argsort()是返回排序后的原始索引",[19,98810,98811],{},"①一维数组",[64,98813,98815],{"className":34659,"code":98814,"language":34661,"meta":69,"style":69},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[71,98816,98817,98821,98861,98869],{"__ignoreMap":69},[74,98818,98819],{"class":76,"line":77},[74,98820,97386],{"class":144},[74,98822,98823,98825,98827,98829,98831,98833,98835,98837,98839,98841,98843,98845,98847,98849,98851,98853,98855,98857,98859],{"class":76,"line":94},[74,98824,324],{"class":84},[74,98826,131],{"class":80},[74,98828,97305],{"class":84},[74,98830,157],{"class":134},[74,98832,464],{"class":84},[74,98834,584],{"class":134},[74,98836,464],{"class":84},[74,98838,481],{"class":134},[74,98840,464],{"class":84},[74,98842,861],{"class":134},[74,98844,464],{"class":84},[74,98846,365],{"class":134},[74,98848,464],{"class":84},[74,98850,979],{"class":134},[74,98852,464],{"class":84},[74,98854,430],{"class":134},[74,98856,464],{"class":84},[74,98858,532],{"class":134},[74,98860,4620],{"class":84},[74,98862,98863,98866],{"class":76,"line":1141},[74,98864,98865],{"class":84},"np.sort(a)",[74,98867,98868],{"class":144},"#升序排序\n",[74,98870,98871,98874],{"class":76,"line":1156},[74,98872,98873],{"class":84},"np.argsort(a)",[74,98875,98876],{"class":144},"#按照元素大小来索引排序\n",[19,98878,97572],{},[64,98880,98882],{"className":34659,"code":98881,"language":34661,"meta":69,"style":69},"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",[71,98883,98884,98896,98922,98927,98931,98936,98941,98946,98951,98955,98963,98967,98972,98977,98982,98987,98991,98996,99009,99013,99018,99023,99028,99033,99037,99042,99054,99058,99062,99066,99070,99074,99078,99083,99098,99103,99112,99117,99121,99125,99130,99134,99139],{"__ignoreMap":69},[74,98885,98886,98889,98891,98893],{"class":76,"line":77},[74,98887,98888],{"class":84},"np.random.seed(",[74,98890,277],{"class":134},[74,98892,515],{"class":84},[74,98894,98895],{"class":144},"#保证每次值一样\n",[74,98897,98898,98900,98902,98904,98906,98908,98910,98912,98914,98916,98918,98920],{"class":76,"line":94},[74,98899,97587],{"class":84},[74,98901,131],{"class":80},[74,98903,97395],{"class":84},[74,98905,397],{"class":134},[74,98907,464],{"class":84},[74,98909,35777],{"class":9495},[74,98911,131],{"class":80},[74,98913,85],{"class":84},[74,98915,379],{"class":134},[74,98917,464],{"class":84},[74,98919,430],{"class":134},[74,98921,34778],{"class":84},[74,98923,98924],{"class":76,"line":1141},[74,98925,98926],{"class":144},"#原数组：\n",[74,98928,98929],{"class":76,"line":1156},[74,98930,98209],{"class":190},[74,98932,98933],{"class":76,"line":1162},[74,98934,98935],{"class":190},"array([[44, 47, 64, 67, 67,  9],\n",[74,98937,98938],{"class":76,"line":1176},[74,98939,98940],{"class":190},"       [83, 21, 36, 87, 70, 88],\n",[74,98942,98943],{"class":76,"line":1182},[74,98944,98945],{"class":190},"       [88, 12, 58, 65, 39, 87],\n",[74,98947,98948],{"class":76,"line":1273},[74,98949,98950],{"class":190},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[74,98952,98953],{"class":76,"line":1279},[74,98954,98209],{"class":190},[74,98956,98957,98960],{"class":76,"line":1291},[74,98958,98959],{"class":84},"np.sort(aa)",[74,98961,98962],{"class":144},"#每行进行了排序\n",[74,98964,98965],{"class":76,"line":1574},[74,98966,98209],{"class":190},[74,98968,98969],{"class":76,"line":1579},[74,98970,98971],{"class":190},"array([[ 9, 44, 47, 64, 67, 67],\n",[74,98973,98974],{"class":76,"line":1585},[74,98975,98976],{"class":190},"       [21, 36, 70, 83, 87, 88],\n",[74,98978,98979],{"class":76,"line":1590},[74,98980,98981],{"class":190},"       [12, 39, 58, 65, 87, 88],\n",[74,98983,98984],{"class":76,"line":1604},[74,98985,98986],{"class":190},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[74,98988,98989],{"class":76,"line":1609},[74,98990,98209],{"class":190},[74,98992,98993],{"class":76,"line":1615},[74,98994,98995],{"class":144},"#axis=0时\n",[74,98997,98998,99001,99003,99005,99007],{"class":76,"line":1636},[74,98999,99000],{"class":84},"np.sort(aa,",[74,99002,51795],{"class":9495},[74,99004,131],{"class":80},[74,99006,277],{"class":134},[74,99008,91],{"class":84},[74,99010,99011],{"class":76,"line":1641},[74,99012,98209],{"class":190},[74,99014,99015],{"class":76,"line":1655},[74,99016,99017],{"class":190},"array([[44, 12, 36, 37, 25,  9],\n",[74,99019,99020],{"class":76,"line":1660},[74,99021,99022],{"class":190},"       [46, 21, 58, 65, 39, 77],\n",[74,99024,99025],{"class":76,"line":1689},[74,99026,99027],{"class":190},"       [83, 47, 64, 67, 67, 87],\n",[74,99029,99030],{"class":76,"line":1694},[74,99031,99032],{"class":190},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[74,99034,99035],{"class":76,"line":1711},[74,99036,98209],{"class":190},[74,99038,99039],{"class":76,"line":1716},[74,99040,99041],{"class":144},"#axis=1时,为默认值\n",[74,99043,99044,99046,99048,99050,99052],{"class":76,"line":1721},[74,99045,99000],{"class":84},[74,99047,51795],{"class":9495},[74,99049,131],{"class":80},[74,99051,303],{"class":134},[74,99053,91],{"class":84},[74,99055,99056],{"class":76,"line":1726},[74,99057,98209],{"class":190},[74,99059,99060],{"class":76,"line":1740},[74,99061,98971],{"class":190},[74,99063,99064],{"class":76,"line":1745},[74,99065,98976],{"class":190},[74,99067,99068],{"class":76,"line":2540},[74,99069,98981],{"class":190},[74,99071,99072],{"class":76,"line":2554},[74,99073,98986],{"class":190},[74,99075,99076],{"class":76,"line":2562},[74,99077,98209],{"class":190},[74,99079,99080],{"class":76,"line":2567},[74,99081,99082],{"class":144},"#按最后一列排序\n",[74,99084,99085,99087,99089,99092,99094,99096],{"class":76,"line":2573},[74,99086,349],{"class":84},[74,99088,131],{"class":80},[74,99090,99091],{"class":84},"aa[:,",[74,99093,618],{"class":80},[74,99095,303],{"class":134},[74,99097,37527],{"class":84},[74,99099,99100],{"class":76,"line":2579},[74,99101,99102],{"class":144},"#获取最后一列排好序的索引\n",[74,99104,99105,99107,99109],{"class":76,"line":2584},[74,99106,78339],{"class":84},[74,99108,131],{"class":80},[74,99110,99111],{"class":84},"np.argsort(b)\n",[74,99113,99114],{"class":76,"line":12227},[74,99115,99116],{"class":84},"aa[index]\n",[74,99118,99119],{"class":76,"line":12251},[74,99120,98209],{"class":190},[74,99122,99123],{"class":76,"line":12256},[74,99124,98935],{"class":190},[74,99126,99127],{"class":76,"line":12262},[74,99128,99129],{"class":190},"       [46, 88, 81, 37, 25, 77],\n",[74,99131,99132],{"class":76,"line":12289},[74,99133,98945],{"class":190},[74,99135,99136],{"class":76,"line":12294},[74,99137,99138],{"class":190},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[74,99140,99141],{"class":76,"line":12300},[74,99142,98209],{"class":190},[5090,99144,99145],{},"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":69,"searchDepth":94,"depth":94,"links":99147},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":98794,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":99154,"title":99155,"body":99156,"description":27656,"extension":5121,"meta":99186,"navigation":2362,"path":99187,"seo":99188,"stem":99189,"__hash__":99190},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":99157,"toc":99184},[99158,99161,99164,99167,99170,99173,99176,99179],[10,99159,99155],{"id":99160},"_14广播机制",[19,99162,99163],{},"广播的规则：",[19,99165,99166],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,99168,99169],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,99171,99172],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,99174,99175],{},"3.如果没有维度形状为1，则会引发异常",[19,99177,99178],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,99180,99181],{},[1424,99182],{"alt":69,"src":99183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":69,"searchDepth":94,"depth":94,"links":99185},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":99155,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":99192,"title":99193,"body":99194,"description":27656,"extension":5121,"meta":99292,"navigation":2362,"path":99293,"seo":99294,"stem":99295,"__hash__":99296},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":99195,"toc":99290},[99196,99199,99202,99287],[10,99197,99193],{"id":99198},"_15比较掩码",[19,99200,99201],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[64,99203,99205],{"className":34659,"code":99204,"language":34661,"meta":69,"style":69},"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",[71,99206,99207,99253,99264,99278,99282],{"__ignoreMap":69},[74,99208,99209,99211,99213,99216,99218,99220,99222,99224,99226,99228,99230,99232,99234,99236,99238,99240,99242,99244,99246,99248,99250],{"class":76,"line":77},[74,99210,324],{"class":84},[74,99212,131],{"class":80},[74,99214,99215],{"class":84},"np.array([[",[74,99217,303],{"class":134},[74,99219,464],{"class":84},[74,99221,163],{"class":134},[74,99223,464],{"class":84},[74,99225,157],{"class":134},[74,99227,52311],{"class":84},[74,99229,558],{"class":134},[74,99231,464],{"class":84},[74,99233,584],{"class":134},[74,99235,464],{"class":84},[74,99237,609],{"class":134},[74,99239,52311],{"class":84},[74,99241,811],{"class":134},[74,99243,464],{"class":84},[74,99245,836],{"class":134},[74,99247,464],{"class":84},[74,99249,861],{"class":134},[74,99251,99252],{"class":84},"]])\n",[74,99254,99255,99257,99259,99261],{"class":76,"line":94},[74,99256,324],{"class":84},[74,99258,996],{"class":80},[74,99260,786],{"class":134},[74,99262,99263],{"class":144},"#结果是一个由True,False组成的数组\n",[74,99265,99266,99269,99271,99273,99275],{"class":76,"line":1141},[74,99267,99268],{"class":84},"a[a",[74,99270,996],{"class":80},[74,99272,786],{"class":134},[74,99274,1026],{"class":84},[74,99276,99277],{"class":144},"#小于20的元素会存到这个数组中\n",[74,99279,99280],{"class":76,"line":1156},[74,99281,97845],{"class":144},[74,99283,99284],{"class":76,"line":1162},[74,99285,99286],{"class":144},"#array([ 1,  2,  3, 11, 12, 13])\n",[5090,99288,99289],{},"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":69,"searchDepth":94,"depth":94,"links":99291},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":99193,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":99298,"title":99299,"body":99300,"description":27656,"extension":5121,"meta":99392,"navigation":2362,"path":99393,"seo":99394,"stem":99395,"__hash__":99396},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":99301,"toc":99390},[99302,99305,99308,99311,99314,99317,99382,99387],[10,99303,99299],{"id":99304},"_16魔法命令time",[19,99306,99307],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,99309,99310],{},"%:行模式",[19,99312,99313],{},"%%:单元格模式",[19,99315,99316],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[64,99318,99320],{"className":34659,"code":99319,"language":34661,"meta":69,"style":69},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[71,99321,99322,99327,99334,99339,99348,99361,99365,99373],{"__ignoreMap":69},[74,99323,99324],{"class":76,"line":77},[74,99325,99326],{"class":144},"#程序执行时间\n",[74,99328,99329,99331],{"class":76,"line":94},[74,99330,34673],{"class":80},[74,99332,99333],{"class":84}," time \n",[74,99335,99336],{"class":76,"line":1141},[74,99337,99338],{"class":144},"#获取时间\n",[74,99340,99341,99344,99346],{"class":76,"line":1156},[74,99342,99343],{"class":84},"start",[74,99345,131],{"class":80},[74,99347,36699],{"class":84},[74,99349,99350,99353,99356,99358],{"class":76,"line":1162},[74,99351,99352],{"class":84},"time.sleep(",[74,99354,99355],{"class":134},"0.4",[74,99357,515],{"class":84},[74,99359,99360],{"class":144},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[74,99362,99363],{"class":76,"line":1176},[74,99364,99338],{"class":144},[74,99366,99367,99369,99371],{"class":76,"line":1182},[74,99368,50082],{"class":84},[74,99370,131],{"class":80},[74,99372,36699],{"class":84},[74,99374,99375,99377,99379],{"class":76,"line":1273},[74,99376,50082],{"class":84},[74,99378,618],{"class":80},[74,99380,99381],{"class":84},"start\n",[19,99383,99384],{},[1424,99385],{"alt":69,"src":99386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5090,99388,99389],{},"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":69,"searchDepth":94,"depth":94,"links":99391},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":99299,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":99398,"title":99399,"body":99400,"description":27656,"extension":5121,"meta":99435,"navigation":2362,"path":99436,"seo":99437,"stem":99438,"__hash__":99439},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":99401,"toc":99433},[99402,99405,99408,99411,99414,99417,99420,99423,99428],[10,99403,99399],{"id":99404},"_17魔法命令timeit",[19,99406,99407],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,99409,99410],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,99412,99413],{},"单元格模式：",[19,99415,99416],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,99418,99419],{},"初始化语句执行次数由轮数来决定",[19,99421,99422],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,99424,99425],{},[1424,99426],{"alt":69,"src":99427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,99429,99430],{},[1424,99431],{"alt":69,"src":99432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":69,"searchDepth":94,"depth":94,"links":99434},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":99399,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":99441,"title":99442,"body":99443,"description":27656,"extension":5121,"meta":99461,"navigation":2362,"path":99462,"seo":99463,"stem":99464,"__hash__":99465},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":99444,"toc":99459},[99445,99448,99451,99454],[10,99446,99442],{"id":99447},"_18魔法命令writefile和run",[19,99449,99450],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,99452,99453],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,99455,99456],{},[1424,99457],{"alt":69,"src":99458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":69,"searchDepth":94,"depth":94,"links":99460},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":99442,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":99467,"title":99468,"body":99469,"description":27656,"extension":5121,"meta":99522,"navigation":2362,"path":99523,"seo":99524,"stem":99525,"__hash__":99526},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":99470,"toc":99520},[99471,99474,99477,99479,99482,99485,99490,99493,99496,99499,99502,99505,99508,99511,99514,99517],[10,99472,99468],{"id":99473},"_19魔法命令memit",[19,99475,99476],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,99478,28880],{},[19,99480,99481],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,99483,99484],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,99486,99487],{},[1424,99488],{"alt":69,"src":99489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,99491,99492],{},"补充：",[19,99494,99495],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,99497,99498],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,99500,99501],{},"解决方法：",[19,99503,99504],{},"1.cmd",[19,99506,99507],{},"2.依次输入以下代码：",[19,99509,99510],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,99512,99513],{},"pip install --upgrade ipython",[19,99515,99516],{},"#升级 memory_profiler 和 setuptools",[19,99518,99519],{},"pip install --upgrade memory_profiler setuptools",{"title":69,"searchDepth":94,"depth":94,"links":99521},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":99468,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":99528,"title":99529,"body":99530,"description":27656,"extension":5121,"meta":101176,"navigation":2362,"path":101177,"seo":101178,"stem":101179,"__hash__":101180},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":99531,"toc":101146},[99532,99535,99539,99543,99604,99607,99612,99616,99621,99626,99631,99636,99639,99644,99648,99652,99685,99688,99691,99694,99746,99749,99785,99788,99830,99834,99855,99857,99894,99896,99901,99903,99908,99912,99915,99943,99947,99951,100004,100008,100100,100104,100108,100111,100116,100120,100145,100150,100154,100157,100160,100163,100166,100169,100172,100175,100187,100191,100195,100198,100230,100233,100256,100259,100285,100288,100314,100317,100351,100354,100416,100420,100423,100427,100430,100456,100459,100462,100467,100470,100539,100541,100546,100607,100610,100621,100627,100632,100636,100639,100652,100656,100671,100673,100696,100698,100724,100727,100730,100733,100781,100783,100788,100792,100796,100823,100827,100854,100857,100862,100867,100957,100961,101019,101024,101027,101030,101072,101076,101132,101137,101140,101143],[10,99533,99529],{"id":99534},"_2创建数组",[14,99536,99538],{"id":99537},"_21-array函数创建数组","2.1 array()函数创建数组",[44,99540,99542],{"id":99541},"_221-函数语句","2.2.1 函数语句",[64,99544,99546],{"className":34659,"code":99545,"language":34661,"meta":69,"style":69},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[71,99547,99548],{"__ignoreMap":69},[74,99549,99550,99553,99556,99558,99560,99562,99564,99566,99569,99571,99574,99576,99579,99581,99583,99585,99588,99590,99593,99595,99598,99600,99602],{"class":76,"line":77},[74,99551,99552],{"class":84},"numpy.array(",[74,99554,99555],{"class":134},"object",[74,99557,16714],{"class":84},[74,99559,97781],{"class":9495},[74,99561,17843],{"class":80},[74,99563,43214],{"class":134},[74,99565,16714],{"class":84},[74,99567,99568],{"class":9495},"copy",[74,99570,17843],{"class":80},[74,99572,99573],{"class":134}," True",[74,99575,16714],{"class":84},[74,99577,99578],{"class":9495},"order",[74,99580,17843],{"class":80},[74,99582,43214],{"class":134},[74,99584,16714],{"class":84},[74,99586,99587],{"class":9495},"subok",[74,99589,17843],{"class":80},[74,99591,99592],{"class":134}," False",[74,99594,16714],{"class":84},[74,99596,99597],{"class":9495},"ndmin",[74,99599,17843],{"class":80},[74,99601,4056],{"class":134},[74,99603,91],{"class":84},[19,99605,99606],{},"参数：",[19,99608,99609],{},[1424,99610],{"alt":69,"src":99611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[44,99613,99615],{"id":99614},"_222-实例","2.2.2 实例",[19,99617,99618],{},[1424,99619],{"alt":69,"src":99620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,99622,99623],{},[1424,99624],{"alt":69,"src":99625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,99627,99628],{},[1424,99629],{"alt":69,"src":99630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,99632,99633],{},[1424,99634],{"alt":69,"src":99635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,99637,99638],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,99640,99641],{},[1424,99642],{"alt":69,"src":99643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,99645,99647],{"id":99646},"_22-随机数创建数组","2.2 随机数创建数组",[44,99649,99651],{"id":99650},"_221-random语句","2.2.1 random语句",[64,99653,99655],{"className":34659,"code":99654,"language":34661,"meta":69,"style":69},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[71,99656,99657,99662,99667,99675,99680],{"__ignoreMap":69},[74,99658,99659],{"class":76,"line":77},[74,99660,99661],{"class":144},"#random.random()\n",[74,99663,99664],{"class":76,"line":94},[74,99665,99666],{"class":144},"#确定随机种子,就是每次运行结果是相同的\n",[74,99668,99669,99671,99673],{"class":76,"line":1141},[74,99670,98888],{"class":84},[74,99672,277],{"class":134},[74,99674,91],{"class":84},[74,99676,99677],{"class":76,"line":1156},[74,99678,99679],{"class":84},"np.random.random()\n",[74,99681,99682],{"class":76,"line":1162},[74,99683,99684],{"class":144},"#生成一个随机的数目\n",[19,99686,99687],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,99689,99690],{},"可以指定数组形状 size",[19,99692,99693],{},"①生成一维数组",[64,99695,99697],{"className":34659,"code":99696,"language":34661,"meta":69,"style":69},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[71,99698,99699,99704,99717,99722,99738],{"__ignoreMap":69},[74,99700,99701],{"class":76,"line":77},[74,99702,99703],{"class":144},"#random.random(size())\n",[74,99705,99706,99709,99711,99713,99715],{"class":76,"line":94},[74,99707,99708],{"class":84},"np.random.random(",[74,99710,35777],{"class":9495},[74,99712,131],{"class":80},[74,99714,405],{"class":134},[74,99716,91],{"class":84},[74,99718,99719],{"class":76,"line":1141},[74,99720,99721],{"class":144},"#生成一位的五个元素\n",[74,99723,99724,99726,99728,99730,99732,99734,99736],{"class":76,"line":1156},[74,99725,324],{"class":84},[74,99727,131],{"class":80},[74,99729,99708],{"class":84},[74,99731,35777],{"class":9495},[74,99733,131],{"class":80},[74,99735,379],{"class":134},[74,99737,91],{"class":84},[74,99739,99740,99743],{"class":76,"line":1162},[74,99741,99742],{"class":84},"a.shape ",[74,99744,99745],{"class":144},"#输出数组形状\n",[19,99747,99748],{},"②生成二维数组",[64,99750,99752],{"className":34659,"code":99751,"language":34661,"meta":69,"style":69},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[71,99753,99754,99758,99780],{"__ignoreMap":69},[74,99755,99756],{"class":76,"line":77},[74,99757,97582],{"class":144},[74,99759,99760,99762,99764,99766,99768,99770,99772,99774,99776,99778],{"class":76,"line":94},[74,99761,97587],{"class":84},[74,99763,131],{"class":80},[74,99765,99708],{"class":84},[74,99767,35777],{"class":9495},[74,99769,131],{"class":80},[74,99771,85],{"class":84},[74,99773,379],{"class":134},[74,99775,464],{"class":84},[74,99777,405],{"class":134},[74,99779,34778],{"class":84},[74,99781,99782],{"class":76,"line":1141},[74,99783,99784],{"class":144},"#生成四行五列的数组\n",[19,99786,99787],{},"③生成三维数组",[64,99789,99791],{"className":34659,"code":99790,"language":34661,"meta":69,"style":69},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[71,99792,99793,99798,99825],{"__ignoreMap":69},[74,99794,99795],{"class":76,"line":77},[74,99796,99797],{"class":144},"#三维数组\n",[74,99799,99800,99803,99805,99807,99809,99811,99813,99815,99817,99819,99821,99823],{"class":76,"line":94},[74,99801,99802],{"class":84},"aaa",[74,99804,131],{"class":80},[74,99806,99708],{"class":84},[74,99808,35777],{"class":9495},[74,99810,131],{"class":80},[74,99812,85],{"class":84},[74,99814,163],{"class":134},[74,99816,464],{"class":84},[74,99818,157],{"class":134},[74,99820,464],{"class":84},[74,99822,379],{"class":134},[74,99824,34778],{"class":84},[74,99826,99827],{"class":76,"line":1141},[74,99828,99829],{"class":84},"aaa.shape\n",[44,99831,99833],{"id":99832},"_222-randint语句","2.2.2 randint语句",[64,99835,99837],{"className":34659,"code":99836,"language":34661,"meta":69,"style":69},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[71,99838,99839,99844],{"__ignoreMap":69},[74,99840,99841],{"class":76,"line":77},[74,99842,99843],{"class":144},"#生成随机的整数 random.randint(low,high,size)\n",[74,99845,99846,99848,99850,99852],{"class":76,"line":94},[74,99847,97395],{"class":84},[74,99849,405],{"class":134},[74,99851,17993],{"class":84},[74,99853,99854],{"class":144},"#0~5中的随机一个数\n",[19,99856,99693],{},[64,99858,99860],{"className":34659,"code":99859,"language":34661,"meta":69,"style":69},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[71,99861,99862,99867,99889],{"__ignoreMap":69},[74,99863,99864],{"class":76,"line":77},[74,99865,99866],{"class":144},"#一维\n",[74,99868,99869,99871,99873,99875,99877,99879,99881,99883,99885,99887],{"class":76,"line":94},[74,99870,97395],{"class":84},[74,99872,303],{"class":134},[74,99874,464],{"class":84},[74,99876,558],{"class":134},[74,99878,464],{"class":84},[74,99880,35777],{"class":9495},[74,99882,131],{"class":80},[74,99884,85],{"class":84},[74,99886,532],{"class":134},[74,99888,34778],{"class":84},[74,99890,99891],{"class":76,"line":1141},[74,99892,99893],{"class":144},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,99895,99748],{},[19,99897,99898],{},[1424,99899],{"alt":69,"src":99900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,99902,99787],{},[19,99904,99905],{},[1424,99906],{"alt":69,"src":99907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[44,99909,99911],{"id":99910},"_222-rand语句","2.2.2 rand语句",[19,99913,99914],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[64,99916,99918],{"className":34659,"code":99917,"language":34661,"meta":69,"style":69},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[71,99919,99920,99933,99938],{"__ignoreMap":69},[74,99921,99922,99925,99927,99929,99931],{"class":76,"line":77},[74,99923,99924],{"class":84},"np.random.rand(",[74,99926,397],{"class":134},[74,99928,464],{"class":84},[74,99930,532],{"class":134},[74,99932,91],{"class":84},[74,99934,99935],{"class":76,"line":94},[74,99936,99937],{"class":144},"#第一个参数100：行数，表示有100个样本\n",[74,99939,99940],{"class":76,"line":1141},[74,99941,99942],{"class":144},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,99944,99946],{"id":99945},"_23-arange创建数组","2.3 arange()创建数组",[44,99948,99950],{"id":99949},"_231-函数语句","2.3.1 函数语句",[64,99952,99954],{"className":34659,"code":99953,"language":34661,"meta":69,"style":69},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[71,99955,99956,99970,99975,99980,99985,99990,99995,100000],{"__ignoreMap":69},[74,99957,99958,99961,99963,99965,99968],{"class":76,"line":77},[74,99959,99960],{"class":84},"numpy.arange([start,] stop[, step], ",[74,99962,97781],{"class":9495},[74,99964,131],{"class":80},[74,99966,99967],{"class":134},"None",[74,99969,91],{"class":84},[74,99971,99972],{"class":76,"line":94},[74,99973,99974],{"class":144},"#参数\n",[74,99976,99977],{"class":76,"line":1141},[74,99978,99979],{"class":190},"\"\"\"\n",[74,99981,99982],{"class":76,"line":1156},[74,99983,99984],{"class":190},"start:起始值，可选，默认从 0 开始。\n",[74,99986,99987],{"class":76,"line":1162},[74,99988,99989],{"class":190},"stop:结束值（不包含该值）。\n",[74,99991,99992],{"class":76,"line":1176},[74,99993,99994],{"class":190},"step:步长，可选，默认是 1。可以为浮点数。\n",[74,99996,99997],{"class":76,"line":1182},[74,99998,99999],{"class":190},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[74,100001,100002],{"class":76,"line":1273},[74,100003,99979],{"class":190},[44,100005,100007],{"id":100006},"_232-实例","2.3.2 实例",[64,100009,100011],{"className":34659,"code":100010,"language":34661,"meta":69,"style":69},"#创建一维数组\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",[71,100012,100013,100017,100041,100046,100051,100055,100078,100082,100086,100091,100096],{"__ignoreMap":69},[74,100014,100015],{"class":76,"line":77},[74,100016,97386],{"class":144},[74,100018,100019,100021,100023,100025,100027,100029,100031,100033,100035,100037,100039],{"class":76,"line":94},[74,100020,97283],{"class":84},[74,100022,303],{"class":134},[74,100024,464],{"class":84},[74,100026,811],{"class":134},[74,100028,464],{"class":84},[74,100030,303],{"class":134},[74,100032,464],{"class":84},[74,100034,97781],{"class":9495},[74,100036,131],{"class":80},[74,100038,88],{"class":134},[74,100040,91],{"class":84},[74,100042,100043],{"class":76,"line":1141},[74,100044,100045],{"class":144},"#输出结果：\n",[74,100047,100048],{"class":76,"line":1156},[74,100049,100050],{"class":144},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[74,100052,100053],{"class":76,"line":1162},[74,100054,98228],{"class":144},[74,100056,100057,100060,100062,100064,100066,100069,100071,100073,100075],{"class":76,"line":1176},[74,100058,100059],{"class":84},"np.array([np.arange(",[74,100061,303],{"class":134},[74,100063,464],{"class":84},[74,100065,379],{"class":134},[74,100067,100068],{"class":84},"),np.arange(",[74,100070,379],{"class":134},[74,100072,464],{"class":84},[74,100074,455],{"class":134},[74,100076,100077],{"class":84},")])\n",[74,100079,100080],{"class":76,"line":1182},[74,100081,97845],{"class":144},[74,100083,100084],{"class":76,"line":1273},[74,100085,99979],{"class":190},[74,100087,100088],{"class":76,"line":1279},[74,100089,100090],{"class":190},"array([[1, 2, 3],\n",[74,100092,100093],{"class":76,"line":1291},[74,100094,100095],{"class":190},"       [4, 5, 6]])\n",[74,100097,100098],{"class":76,"line":1574},[74,100099,99979],{"class":190},[14,100101,100103],{"id":100102},"_24-生态分布","2.4 生态分布",[44,100105,100107],{"id":100106},"_241-标准正态分布","2.4.1 标准正态分布",[19,100109,100110],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,100112,100113],{},[1424,100114],{"alt":69,"src":100115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[44,100117,100119],{"id":100118},"_242-常规正态分布","2.4.2 常规正态分布",[64,100121,100123],{"className":34659,"code":100122,"language":34661,"meta":69,"style":69},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[71,100124,100125,100130,100135,100140],{"__ignoreMap":69},[74,100126,100127],{"class":76,"line":77},[74,100128,100129],{"class":84},"random.normal(loc,scale,size)也可以生成正态分布\n",[74,100131,100132],{"class":76,"line":94},[74,100133,100134],{"class":144},"#loc:期望\n",[74,100136,100137],{"class":76,"line":1141},[74,100138,100139],{"class":144},"#scale:方差\n",[74,100141,100142],{"class":76,"line":1156},[74,100143,100144],{"class":144},"#size:用于确定是几维的数列\n",[19,100146,100147],{},[1424,100148],{"alt":69,"src":100149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,100151,100153],{"id":100152},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,100155,100156],{},"ndim:秩，维度个数",[19,100158,100159],{},"size:数组元素的个数",[19,100161,100162],{},"shape:数组的形状",[19,100164,100165],{},"dtype:数组元素的类型",[19,100167,100168],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,100170,100171],{},"他们都是属性，通过数组.属性的形式来确定",[19,100173,100174],{},"如果需要输出多个可以通过以下方式：",[64,100176,100178],{"className":34659,"code":100177,"language":34661,"meta":69,"style":69},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[71,100179,100180],{"__ignoreMap":69},[74,100181,100182,100184],{"class":76,"line":77},[74,100183,34696],{"class":134},[74,100185,100186],{"class":84},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,100188,100190],{"id":100189},"_26-其他方式创建数组","2.6 其他方式创建数组",[44,100192,100194],{"id":100193},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,100196,100197],{},"①创建一维数组",[64,100199,100201],{"className":34659,"code":100200,"language":34661,"meta":69,"style":69},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[71,100202,100203,100212,100216,100221,100226],{"__ignoreMap":69},[74,100204,100205,100208,100210],{"class":76,"line":77},[74,100206,100207],{"class":84},"np.zeros(",[74,100209,532],{"class":134},[74,100211,91],{"class":84},[74,100213,100214],{"class":76,"line":94},[74,100215,99979],{"class":190},[74,100217,100218],{"class":76,"line":1141},[74,100219,100220],{"class":190},"输出结果：\n",[74,100222,100223],{"class":76,"line":1156},[74,100224,100225],{"class":190},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[74,100227,100228],{"class":76,"line":1162},[74,100229,99979],{"class":190},[19,100231,100232],{},"上方代码等价于：",[64,100234,100236],{"className":34659,"code":100235,"language":34661,"meta":69,"style":69},"np.zeros(shape=(10))#创建10个元素的0数组\n",[71,100237,100238],{"__ignoreMap":69},[74,100239,100240,100242,100245,100247,100249,100251,100253],{"class":76,"line":77},[74,100241,100207],{"class":84},[74,100243,100244],{"class":9495},"shape",[74,100246,131],{"class":80},[74,100248,85],{"class":84},[74,100250,532],{"class":134},[74,100252,87052],{"class":84},[74,100254,100255],{"class":144},"#创建10个元素的0数组\n",[19,100257,100258],{},"也可以指定类型",[64,100260,100262],{"className":34659,"code":100261,"language":34661,"meta":69,"style":69},"#指定类型\nnp.zeros(5,dtype=int)\n",[71,100263,100264,100269],{"__ignoreMap":69},[74,100265,100266],{"class":76,"line":77},[74,100267,100268],{"class":144},"#指定类型\n",[74,100270,100271,100273,100275,100277,100279,100281,100283],{"class":76,"line":94},[74,100272,100207],{"class":84},[74,100274,405],{"class":134},[74,100276,464],{"class":84},[74,100278,97781],{"class":9495},[74,100280,131],{"class":80},[74,100282,88],{"class":134},[74,100284,91],{"class":84},[19,100286,100287],{},"②创建二维数组",[64,100289,100291],{"className":34659,"code":100290,"language":34661,"meta":69,"style":69},"np.zeros((3,4),dtype=int)\n",[71,100292,100293],{"__ignoreMap":69},[74,100294,100295,100298,100300,100302,100304,100306,100308,100310,100312],{"class":76,"line":77},[74,100296,100297],{"class":84},"np.zeros((",[74,100299,157],{"class":134},[74,100301,464],{"class":84},[74,100303,379],{"class":134},[74,100305,46537],{"class":84},[74,100307,97781],{"class":9495},[74,100309,131],{"class":80},[74,100311,88],{"class":134},[74,100313,91],{"class":84},[19,100315,100316],{},"③创建三维数组",[64,100318,100320],{"className":34659,"code":100319,"language":34661,"meta":69,"style":69},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[71,100321,100322,100327],{"__ignoreMap":69},[74,100323,100324],{"class":76,"line":77},[74,100325,100326],{"class":144},"#创建三维数组\n",[74,100328,100329,100331,100333,100335,100337,100339,100341,100343,100345,100347,100349],{"class":76,"line":94},[74,100330,100297],{"class":84},[74,100332,157],{"class":134},[74,100334,464],{"class":84},[74,100336,379],{"class":134},[74,100338,464],{"class":84},[74,100340,405],{"class":134},[74,100342,46537],{"class":84},[74,100344,97781],{"class":9495},[74,100346,131],{"class":80},[74,100348,88],{"class":134},[74,100350,91],{"class":84},[19,100352,100353],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[64,100355,100357],{"className":34659,"code":100356,"language":34661,"meta":69,"style":69},"#使用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",[71,100358,100359,100364,100379,100384,100389,100411],{"__ignoreMap":69},[74,100360,100361],{"class":76,"line":77},[74,100362,100363],{"class":144},"#使用zeros_like将创建的一维数组变成全0的数组\n",[74,100365,100366,100368,100370,100372,100374,100376],{"class":76,"line":94},[74,100367,324],{"class":84},[74,100369,131],{"class":80},[74,100371,97283],{"class":84},[74,100373,379],{"class":134},[74,100375,515],{"class":84},[74,100377,100378],{"class":144},"#这个得到的结果：一维数组0，1，2，3\n",[74,100380,100381],{"class":76,"line":1141},[74,100382,100383],{"class":84},"np.zeros_like(a)\n",[74,100385,100386],{"class":76,"line":1156},[74,100387,100388],{"class":144},"#使用zeros_like将创建的二维数组变成全0的数组\n",[74,100390,100391,100393,100395,100397,100399,100401,100403,100405,100407,100409],{"class":76,"line":1162},[74,100392,97587],{"class":84},[74,100394,131],{"class":80},[74,100396,99708],{"class":84},[74,100398,35777],{"class":9495},[74,100400,131],{"class":80},[74,100402,85],{"class":84},[74,100404,379],{"class":134},[74,100406,464],{"class":84},[74,100408,405],{"class":134},[74,100410,34778],{"class":84},[74,100412,100413],{"class":76,"line":1176},[74,100414,100415],{"class":84},"np.zeros_like(aa)\n",[44,100417,100419],{"id":100418},"_262-ones创建数组","2.6.2 ones()创建数组",[19,100421,100422],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[44,100424,100426],{"id":100425},"_263-empty创建数组","2.6.3 empty()创建数组",[19,100428,100429],{},"①empty()用法",[64,100431,100433],{"className":34659,"code":100432,"language":34661,"meta":69,"style":69},"numpy.empty(shape,dtype=float,order='c')\n",[71,100434,100435],{"__ignoreMap":69},[74,100436,100437,100440,100442,100444,100446,100448,100450,100452,100454],{"class":76,"line":77},[74,100438,100439],{"class":84},"numpy.empty(shape,",[74,100441,97781],{"class":9495},[74,100443,131],{"class":80},[74,100445,125],{"class":134},[74,100447,464],{"class":84},[74,100449,99578],{"class":9495},[74,100451,131],{"class":80},[74,100453,80309],{"class":190},[74,100455,91],{"class":84},[19,100457,100458],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,100460,100461],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,100463,100464],{},[1424,100465],{"alt":69,"src":100466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,100468,100469],{},"②empty()用法",[64,100471,100473],{"className":34659,"code":100472,"language":34661,"meta":69,"style":69},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[71,100474,100475,100496,100508,100529,100534],{"__ignoreMap":69},[74,100476,100477,100479,100481,100484,100486,100488,100490,100492,100494],{"class":76,"line":77},[74,100478,931],{"class":84},[74,100480,131],{"class":80},[74,100482,100483],{"class":84},"np.empty(",[74,100485,532],{"class":134},[74,100487,464],{"class":84},[74,100489,97781],{"class":9495},[74,100491,131],{"class":80},[74,100493,88],{"class":134},[74,100495,91],{"class":84},[74,100497,100498,100500,100502,100504,100506],{"class":76,"line":94},[74,100499,906],{"class":84},[74,100501,131],{"class":80},[74,100503,97283],{"class":84},[74,100505,405],{"class":134},[74,100507,91],{"class":84},[74,100509,100510,100513,100515,100518,100520,100522,100525,100527],{"class":76,"line":1141},[74,100511,100512],{"class":84},"np.add(",[74,100514,163],{"class":134},[74,100516,100517],{"class":84},",x,",[74,100519,97335],{"class":9495},[74,100521,131],{"class":80},[74,100523,100524],{"class":84},"y[:",[74,100526,405],{"class":134},[74,100528,4620],{"class":84},[74,100530,100531],{"class":76,"line":1156},[74,100532,100533],{"class":144},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[74,100535,100536],{"class":76,"line":1162},[74,100537,100538],{"class":84},"y\n",[19,100540,15793],{},[19,100542,100543],{},[1424,100544],{"alt":69,"src":100545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[64,100547,100549],{"className":34659,"code":100548,"language":34661,"meta":69,"style":69},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[71,100550,100551,100567,100587,100602],{"__ignoreMap":69},[74,100552,100553,100555,100557,100559,100561,100563,100565],{"class":76,"line":77},[74,100554,906],{"class":84},[74,100556,131],{"class":80},[74,100558,97283],{"class":84},[74,100560,303],{"class":134},[74,100562,464],{"class":84},[74,100564,430],{"class":134},[74,100566,91],{"class":84},[74,100568,100569,100571,100573,100575,100577,100579,100581,100583,100585],{"class":76,"line":94},[74,100570,931],{"class":84},[74,100572,131],{"class":80},[74,100574,100483],{"class":84},[74,100576,405],{"class":134},[74,100578,464],{"class":84},[74,100580,97781],{"class":9495},[74,100582,131],{"class":80},[74,100584,88],{"class":134},[74,100586,91],{"class":84},[74,100588,100589,100592,100594,100596,100598,100600],{"class":76,"line":1141},[74,100590,100591],{"class":84},"np.add(x,",[74,100593,163],{"class":134},[74,100595,464],{"class":84},[74,100597,97335],{"class":9495},[74,100599,131],{"class":80},[74,100601,97730],{"class":84},[74,100603,100604],{"class":76,"line":1156},[74,100605,100606],{"class":144},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,100608,100609],{},"③empty_like()",[19,100611,100612],{},[235,100613,100614,100615,100620],{},"创建一个",[235,100616,100617],{},[235,100618,100619],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,100622,100623,100626],{},[71,100624,100625],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,100628,100629],{},[1424,100630],{"alt":69,"src":100631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[44,100633,100635],{"id":100634},"_264-用法","2.6.4 ？？用法",[19,100637,100638],{},"当想查看一个函数的参数时，可以通过？？来实现",[64,100640,100642],{"className":34659,"code":100641,"language":34661,"meta":69,"style":69},"np.full??\n",[71,100643,100644],{"__ignoreMap":69},[74,100645,100646,100649],{"class":76,"line":77},[74,100647,100648],{"class":84},"np.full",[74,100650,100651],{"class":81684},"??\n",[44,100653,100655],{"id":100654},"_265-full创建数组","2.6.5 full()创建数组",[64,100657,100659],{"className":34659,"code":100658,"language":34661,"meta":69,"style":69},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[71,100660,100661,100666],{"__ignoreMap":69},[74,100662,100663],{"class":76,"line":77},[74,100664,100665],{"class":84},"full(shape,fill_value)\n",[74,100667,100668],{"class":76,"line":94},[74,100669,100670],{"class":84},"创建全为某个指定值的数组\n",[19,100672,98811],{},[64,100674,100676],{"className":34659,"code":100675,"language":34661,"meta":69,"style":69},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[71,100677,100678,100683],{"__ignoreMap":69},[74,100679,100680],{"class":76,"line":77},[74,100681,100682],{"class":144},"#创建一个一维数组,以20进行填充\n",[74,100684,100685,100688,100690,100692,100694],{"class":76,"line":94},[74,100686,100687],{"class":84},"np.full(",[74,100689,532],{"class":134},[74,100691,464],{"class":84},[74,100693,786],{"class":134},[74,100695,91],{"class":84},[19,100697,97572],{},[64,100699,100701],{"className":34659,"code":100700,"language":34661,"meta":69,"style":69},"#创建二维数组\nnp.full((3,5),11)\n",[71,100702,100703,100707],{"__ignoreMap":69},[74,100704,100705],{"class":76,"line":77},[74,100706,98228],{"class":144},[74,100708,100709,100712,100714,100716,100718,100720,100722],{"class":76,"line":94},[74,100710,100711],{"class":84},"np.full((",[74,100713,157],{"class":134},[74,100715,464],{"class":84},[74,100717,405],{"class":134},[74,100719,46537],{"class":84},[74,100721,558],{"class":134},[74,100723,91],{"class":84},[19,100725,100726],{},"③full_like用法",[19,100728,100729],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,100731,100732],{},"这里是指定填充而已",[64,100734,100736],{"className":34659,"code":100735,"language":34661,"meta":69,"style":69},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[71,100737,100738,100743,100767,100772],{"__ignoreMap":69},[74,100739,100740],{"class":76,"line":77},[74,100741,100742],{"class":144},"#创建一个指定形状数组\n",[74,100744,100745,100747,100749,100751,100753,100755,100757,100759,100761,100763,100765],{"class":76,"line":94},[74,100746,324],{"class":84},[74,100748,131],{"class":80},[74,100750,97283],{"class":84},[74,100752,303],{"class":134},[74,100754,464],{"class":84},[74,100756,411],{"class":134},[74,100758,97288],{"class":84},[74,100760,379],{"class":134},[74,100762,464],{"class":84},[74,100764,506],{"class":134},[74,100766,91],{"class":84},[74,100768,100769],{"class":76,"line":1141},[74,100770,100771],{"class":144},"#进行指定填充\n",[74,100773,100774,100777,100779],{"class":76,"line":1156},[74,100775,100776],{"class":84},"np.full_like(a,",[74,100778,532],{"class":134},[74,100780,91],{"class":84},[19,100782,15793],{},[19,100784,100785],{},[1424,100786],{"alt":69,"src":100787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[44,100789,100791],{"id":100790},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[26277,100793,100795],{"id":100794},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[64,100797,100799],{"className":34659,"code":100798,"language":34661,"meta":69,"style":69},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[71,100800,100801,100818],{"__ignoreMap":69},[74,100802,100803,100806,100808,100810,100812,100814,100816],{"class":76,"line":77},[74,100804,100805],{"class":84},"np.eye(",[74,100807,379],{"class":134},[74,100809,464],{"class":84},[74,100811,97781],{"class":9495},[74,100813,131],{"class":80},[74,100815,88],{"class":134},[74,100817,91],{"class":84},[74,100819,100820],{"class":76,"line":94},[74,100821,100822],{"class":144},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[26277,100824,100826],{"id":100825},"_2662-法2identity","2.6.6.2 法2：identity()",[64,100828,100830],{"className":34659,"code":100829,"language":34661,"meta":69,"style":69},"#identity()\nnp.identity(5,dtype=int)\n",[71,100831,100832,100837],{"__ignoreMap":69},[74,100833,100834],{"class":76,"line":77},[74,100835,100836],{"class":144},"#identity()\n",[74,100838,100839,100842,100844,100846,100848,100850,100852],{"class":76,"line":94},[74,100840,100841],{"class":84},"np.identity(",[74,100843,405],{"class":134},[74,100845,464],{"class":84},[74,100847,97781],{"class":9495},[74,100849,131],{"class":80},[74,100851,88],{"class":134},[74,100853,91],{"class":84},[19,100855,100856],{},"两个函数是有区别的",[19,100858,100859],{},[1424,100860],{"alt":69,"src":100861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,100863,100864],{},[1424,100865],{"alt":69,"src":100866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[64,100868,100870],{"className":34659,"code":100869,"language":34661,"meta":69,"style":69},"# 创建一个 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",[71,100871,100872,100877,100889,100894,100899,100904,100909,100913,100918,100938,100942,100947,100952],{"__ignoreMap":69},[74,100873,100874],{"class":76,"line":77},[74,100875,100876],{"class":144},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[74,100878,100879,100881,100883,100885,100887],{"class":76,"line":94},[74,100880,100805],{"class":84},[74,100882,157],{"class":134},[74,100884,16714],{"class":84},[74,100886,379],{"class":134},[74,100888,91],{"class":84},[74,100890,100891],{"class":76,"line":1141},[74,100892,100893],{"class":144},"# 输出:\n",[74,100895,100896],{"class":76,"line":1156},[74,100897,100898],{"class":144},"# [[1. 0. 0. 0.]\n",[74,100900,100901],{"class":76,"line":1162},[74,100902,100903],{"class":144},"#  [0. 1. 0. 0.]\n",[74,100905,100906],{"class":76,"line":1176},[74,100907,100908],{"class":144},"#  [0. 0. 1. 0.]]\n",[74,100910,100911],{"class":76,"line":1182},[74,100912,2363],{"emptyLinePlaceholder":2362},[74,100914,100915],{"class":76,"line":1273},[74,100916,100917],{"class":144},"# 对角线向上偏移1\n",[74,100919,100920,100922,100924,100926,100928,100930,100932,100934,100936],{"class":76,"line":1279},[74,100921,100805],{"class":84},[74,100923,157],{"class":134},[74,100925,16714],{"class":84},[74,100927,379],{"class":134},[74,100929,16714],{"class":84},[74,100931,579],{"class":9495},[74,100933,131],{"class":80},[74,100935,303],{"class":134},[74,100937,91],{"class":84},[74,100939,100940],{"class":76,"line":1291},[74,100941,100893],{"class":144},[74,100943,100944],{"class":76,"line":1574},[74,100945,100946],{"class":144},"# [[0. 1. 0. 0.]\n",[74,100948,100949],{"class":76,"line":1579},[74,100950,100951],{"class":144},"#  [0. 0. 1. 0.]\n",[74,100953,100954],{"class":76,"line":1585},[74,100955,100956],{"class":144},"#  [0. 0. 0. 1.]]\n",[44,100958,100960],{"id":100959},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[64,100962,100964],{"className":34659,"code":100963,"language":34661,"meta":69,"style":69},"#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",[71,100965,100966,100971,100975,100980,100985,100990,100995,101000,101005,101010,101015],{"__ignoreMap":69},[74,100967,100968],{"class":76,"line":77},[74,100969,100970],{"class":144},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[74,100972,100973],{"class":76,"line":94},[74,100974,99979],{"class":190},[74,100976,100977],{"class":76,"line":1141},[74,100978,100979],{"class":190},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[74,100981,100982],{"class":76,"line":1156},[74,100983,100984],{"class":190},"参数介绍：\n",[74,100986,100987],{"class":76,"line":1162},[74,100988,100989],{"class":190},"start：序列的起始值\n",[74,100991,100992],{"class":76,"line":1176},[74,100993,100994],{"class":190},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[74,100996,100997],{"class":76,"line":1182},[74,100998,100999],{"class":190},"num：要生长的等步长的样本数量，默认为50\n",[74,101001,101002],{"class":76,"line":1273},[74,101003,101004],{"class":190},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[74,101006,101007],{"class":76,"line":1279},[74,101008,101009],{"class":190},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[74,101011,101012],{"class":76,"line":1291},[74,101013,101014],{"class":190},"dtype：ndarry的数据类型\n",[74,101016,101017],{"class":76,"line":1574},[74,101018,99979],{"class":190},[19,101020,101021],{},[1424,101022],{"alt":69,"src":101023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,101025,101026],{},"这里num=是可以省略的",[19,101028,101029],{},"也就是下方两行代码结果是一模一样的",[64,101031,101033],{"className":34659,"code":101032,"language":34661,"meta":69,"style":69},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[71,101034,101035,101052],{"__ignoreMap":69},[74,101036,101037,101040,101042,101044,101046,101048,101050],{"class":76,"line":77},[74,101038,101039],{"class":84},"np.linspace(",[74,101041,303],{"class":134},[74,101043,464],{"class":84},[74,101045,405],{"class":134},[74,101047,464],{"class":84},[74,101049,405],{"class":134},[74,101051,91],{"class":84},[74,101053,101054,101056,101058,101060,101062,101064,101066,101068,101070],{"class":76,"line":94},[74,101055,101039],{"class":84},[74,101057,303],{"class":134},[74,101059,464],{"class":84},[74,101061,405],{"class":134},[74,101063,464],{"class":84},[74,101065,1627],{"class":9495},[74,101067,131],{"class":80},[74,101069,405],{"class":134},[74,101071,91],{"class":84},[44,101073,101075],{"id":101074},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[64,101077,101079],{"className":34659,"code":101078,"language":34661,"meta":69,"style":69},"#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",[71,101080,101081,101086,101090,101095,101100,101105,101110,101114,101119,101124,101128],{"__ignoreMap":69},[74,101082,101083],{"class":76,"line":77},[74,101084,101085],{"class":144},"#logspace函数用于创建一个等比数列，格式如下：\n",[74,101087,101088],{"class":76,"line":94},[74,101089,99979],{"class":190},[74,101091,101092],{"class":76,"line":1141},[74,101093,101094],{"class":190},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[74,101096,101097],{"class":76,"line":1156},[74,101098,101099],{"class":190},"参数为：\n",[74,101101,101102],{"class":76,"line":1162},[74,101103,101104],{"class":190},"start:序列的起始位置为：base**start\n",[74,101106,101107],{"class":76,"line":1176},[74,101108,101109],{"class":190},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[74,101111,101112],{"class":76,"line":1182},[74,101113,100999],{"class":190},[74,101115,101116],{"class":76,"line":1273},[74,101117,101118],{"class":190},"endpoint：是否包含 stop 这个值，默认是 True\n",[74,101120,101121],{"class":76,"line":1279},[74,101122,101123],{"class":190},"base：对数的底数，默认是 10（常见对数）\n",[74,101125,101126],{"class":76,"line":1291},[74,101127,101014],{"class":190},[74,101129,101130],{"class":76,"line":1574},[74,101131,99979],{"class":190},[19,101133,101134],{},[1424,101135],{"alt":69,"src":101136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,101138,101139],{},"logspace()函数中的num参数也是可以不写num=的",[19,101141,101142],{},"endpoint是不可以省略的",[5090,101144,101145],{},"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":69,"searchDepth":94,"depth":94,"links":101147},[101148,101152,101157,101161,101165,101166],{"id":99537,"depth":94,"text":99538,"children":101149},[101150,101151],{"id":99541,"depth":1141,"text":99542},{"id":99614,"depth":1141,"text":99615},{"id":99646,"depth":94,"text":99647,"children":101153},[101154,101155,101156],{"id":99650,"depth":1141,"text":99651},{"id":99832,"depth":1141,"text":99833},{"id":99910,"depth":1141,"text":99911},{"id":99945,"depth":94,"text":99946,"children":101158},[101159,101160],{"id":99949,"depth":1141,"text":99950},{"id":100006,"depth":1141,"text":100007},{"id":100102,"depth":94,"text":100103,"children":101162},[101163,101164],{"id":100106,"depth":1141,"text":100107},{"id":100118,"depth":1141,"text":100119},{"id":100152,"depth":94,"text":100153},{"id":100189,"depth":94,"text":100190,"children":101167},[101168,101169,101170,101171,101172,101173,101174,101175],{"id":100193,"depth":1141,"text":100194},{"id":100418,"depth":1141,"text":100419},{"id":100425,"depth":1141,"text":100426},{"id":100634,"depth":1141,"text":100635},{"id":100654,"depth":1141,"text":100655},{"id":100790,"depth":1141,"text":100791},{"id":100959,"depth":1141,"text":100960},{"id":101074,"depth":1141,"text":101075},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":99529,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":101182,"title":101183,"body":101184,"description":27656,"extension":5121,"meta":101277,"navigation":2362,"path":101278,"seo":101279,"stem":101280,"__hash__":101281},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":101185,"toc":101275},[101186,101189,101192,101195,101198,101201,101204,101207,101210,101213,101216,101219,101221,101224,101227,101232,101235,101238,101272],[10,101187,101183],{"id":101188},"_20魔法命令mprun",[19,101190,101191],{},"逐行分析数据内存的使用情况",[19,101193,101194],{},"语法格式：",[19,101196,101197],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,101199,101200],{},"分析结果列如下：",[19,101202,101203],{},"Line行号",[19,101205,101206],{},"Mem usage内存使用大小",[19,101208,101209],{},"increment内存增量",[19,101211,101212],{},"Line content代码内容",[19,101214,101215],{},"补充说明：",[19,101217,101218],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,101220,99484],{},[19,101222,101223],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,101225,101226],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,101228,101229],{},[1424,101230],{"alt":69,"src":101231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,101233,101234],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,101236,101237],{},"这时候需要重新加载模块",[64,101239,101241],{"className":34659,"code":101240,"language":34661,"meta":69,"style":69},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[71,101242,101243,101248,101255,101260],{"__ignoreMap":69},[74,101244,101245],{"class":76,"line":77},[74,101246,101247],{"class":144},"#重新加载模块\n",[74,101249,101250,101252],{"class":76,"line":94},[74,101251,34673],{"class":80},[74,101253,101254],{"class":84}," importlib\n",[74,101256,101257],{"class":76,"line":1141},[74,101258,101259],{"class":84},"importlib.reload(mprun_test)\n",[74,101261,101262,101264,101267,101269],{"class":76,"line":1156},[74,101263,414],{"class":80},[74,101265,101266],{"class":84},"mprun ",[74,101268,618],{"class":80},[74,101270,101271],{"class":84},"f mprun_test.fun_test mprun_test.fun_test()\n",[5090,101273,101274],{},"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":69,"searchDepth":94,"depth":94,"links":101276},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":101183,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":101283,"title":101284,"body":101285,"description":27656,"extension":5121,"meta":101302,"navigation":2362,"path":101303,"seo":101304,"stem":101305,"__hash__":101306},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":101286,"toc":101300},[101287,101290,101295],[10,101288,101284],{"id":101289},"_3一维数组的索引和切片",[19,101291,101292],{},[1424,101293],{"alt":69,"src":101294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,101296,101297],{},[1424,101298],{"alt":69,"src":101299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":69,"searchDepth":94,"depth":94,"links":101301},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":101284,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":101308,"title":101309,"body":101310,"description":27656,"extension":5121,"meta":101793,"navigation":2362,"path":101794,"seo":101795,"stem":101796,"__hash__":101797},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":101311,"toc":101791},[101312,101315,101318,101323,101356,101359,101397,101400,101434,101437,101542,101545,101582,101585,101686,101689,101740,101743,101785,101788],[10,101313,101309],{"id":101314},"_4二维数组的索引与切片",[19,101316,101317],{},"①获取指定单个元素",[19,101319,101320],{},[1424,101321],{"alt":69,"src":101322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[64,101324,101326],{"className":34659,"code":101325,"language":34661,"meta":69,"style":69},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[71,101327,101328,101333,101338,101343],{"__ignoreMap":69},[74,101329,101330],{"class":76,"line":77},[74,101331,101332],{"class":144},"#获取元素9\n",[74,101334,101335],{"class":76,"line":94},[74,101336,101337],{"class":144},"#先获取所在行，再获取所在列\n",[74,101339,101340],{"class":76,"line":1141},[74,101341,101342],{"class":144},"#数组[行索引号，列索引号]\n",[74,101344,101345,101348,101350,101352,101354],{"class":76,"line":1156},[74,101346,101347],{"class":84},"a[",[74,101349,303],{"class":134},[74,101351,464],{"class":84},[74,101353,163],{"class":134},[74,101355,37527],{"class":84},[19,101357,101358],{},"②获取整行元素",[64,101360,101362],{"className":34659,"code":101361,"language":34661,"meta":69,"style":69},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[71,101363,101364,101369,101374,101382,101387],{"__ignoreMap":69},[74,101365,101366],{"class":76,"line":77},[74,101367,101368],{"class":144},"#获取整行 数组[行索引号]\n",[74,101370,101371],{"class":76,"line":94},[74,101372,101373],{"class":144},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[74,101375,101376,101378,101380],{"class":76,"line":1141},[74,101377,101347],{"class":84},[74,101379,163],{"class":134},[74,101381,37527],{"class":84},[74,101383,101384],{"class":76,"line":1156},[74,101385,101386],{"class":144},"#也可以负索引获取一行\n",[74,101388,101389,101391,101393,101395],{"class":76,"line":1162},[74,101390,101347],{"class":84},[74,101392,618],{"class":80},[74,101394,303],{"class":134},[74,101396,37527],{"class":84},[19,101398,101399],{},"③获取整列元素",[64,101401,101403],{"className":34659,"code":101402,"language":34661,"meta":69,"style":69},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[71,101404,101405,101410,101419,101424],{"__ignoreMap":69},[74,101406,101407],{"class":76,"line":77},[74,101408,101409],{"class":144},"#获取整列 数组名[:,列索引]\n",[74,101411,101412,101415,101417],{"class":76,"line":94},[74,101413,101414],{"class":84},"a[:,",[74,101416,163],{"class":134},[74,101418,37527],{"class":84},[74,101420,101421],{"class":76,"line":1141},[74,101422,101423],{"class":144},"#也可以负索引获取一列\n",[74,101425,101426,101428,101430,101432],{"class":76,"line":1156},[74,101427,101414],{"class":84},[74,101429,618],{"class":80},[74,101431,303],{"class":134},[74,101433,37527],{"class":84},[19,101435,101436],{},"④部分行部分列的元素",[64,101438,101440],{"className":34659,"code":101439,"language":34661,"meta":69,"style":69},"#部分行部分列 数组名[行切片，列切片]\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",[71,101441,101442,101447,101457,101461,101465,101470,101475,101479,101491,101495,101499,101504,101509,101514,101519,101523,101528],{"__ignoreMap":69},[74,101443,101444],{"class":76,"line":77},[74,101445,101446],{"class":144},"#部分行部分列 数组名[行切片，列切片]\n",[74,101448,101449,101452,101454],{"class":76,"line":94},[74,101450,101451],{"class":84},"a[:",[74,101453,163],{"class":134},[74,101455,101456],{"class":84},",:]\n",[74,101458,101459],{"class":76,"line":1141},[74,101460,97845],{"class":144},[74,101462,101463],{"class":76,"line":1156},[74,101464,98209],{"class":190},[74,101466,101467],{"class":76,"line":1162},[74,101468,101469],{"class":190},"array([[ 1,  2,  3,  4,  5,  6],\n",[74,101471,101472],{"class":76,"line":1176},[74,101473,101474],{"class":190},"       [ 7,  8,  9, 10, 11, 12]])\n",[74,101476,101477],{"class":76,"line":1182},[74,101478,98209],{"class":190},[74,101480,101481,101483,101485,101487,101489],{"class":76,"line":1273},[74,101482,101414],{"class":84},[74,101484,303],{"class":134},[74,101486,945],{"class":84},[74,101488,379],{"class":134},[74,101490,37527],{"class":84},[74,101492,101493],{"class":76,"line":1279},[74,101494,97845],{"class":144},[74,101496,101497],{"class":76,"line":1291},[74,101498,98209],{"class":190},[74,101500,101501],{"class":76,"line":1574},[74,101502,101503],{"class":190},"array([[ 2,  3,  4],\n",[74,101505,101506],{"class":76,"line":1579},[74,101507,101508],{"class":190},"       [ 8,  9, 10],\n",[74,101510,101511],{"class":76,"line":1585},[74,101512,101513],{"class":190},"       [14, 15, 16],\n",[74,101515,101516],{"class":76,"line":1590},[74,101517,101518],{"class":190},"       [20, 21, 22]])\n",[74,101520,101521],{"class":76,"line":1604},[74,101522,98209],{"class":190},[74,101524,101525],{"class":76,"line":1609},[74,101526,101527],{"class":144},"#对列行同时进行切片，使用了step参数\n",[74,101529,101530,101533,101535,101538,101540],{"class":76,"line":1615},[74,101531,101532],{"class":84},"a[::",[74,101534,163],{"class":134},[74,101536,101537],{"class":84},",::",[74,101539,163],{"class":134},[74,101541,37527],{"class":84},[19,101543,101544],{},"⑤同时获取两个元素",[64,101546,101548],{"className":34659,"code":101547,"language":34661,"meta":69,"style":69},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[71,101549,101550,101555,101560],{"__ignoreMap":69},[74,101551,101552],{"class":76,"line":77},[74,101553,101554],{"class":144},"#同时获取第三行第二列，第四行第一列\n",[74,101556,101557],{"class":76,"line":94},[74,101558,101559],{"class":144},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[74,101561,101562,101565,101567,101569,101571,101573,101575,101577,101579],{"class":76,"line":1141},[74,101563,101564],{"class":84},"a[(",[74,101566,163],{"class":134},[74,101568,464],{"class":84},[74,101570,157],{"class":134},[74,101572,46528],{"class":84},[74,101574,303],{"class":134},[74,101576,464],{"class":84},[74,101578,277],{"class":134},[74,101580,101581],{"class":84},")]\n",[19,101583,101584],{},"⑥切片，对行进行反向获取",[64,101586,101588],{"className":34659,"code":101587,"language":34661,"meta":69,"style":69},"#切片 对所有行进行反向获取\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",[71,101589,101590,101595,101605,101609,101613,101618,101623,101628,101633,101637,101642,101658,101662,101667,101672,101677,101682],{"__ignoreMap":69},[74,101591,101592],{"class":76,"line":77},[74,101593,101594],{"class":144},"#切片 对所有行进行反向获取\n",[74,101596,101597,101599,101601,101603],{"class":76,"line":94},[74,101598,101532],{"class":84},[74,101600,618],{"class":80},[74,101602,303],{"class":134},[74,101604,37527],{"class":84},[74,101606,101607],{"class":76,"line":1141},[74,101608,97845],{"class":144},[74,101610,101611],{"class":76,"line":1156},[74,101612,98209],{"class":190},[74,101614,101615],{"class":76,"line":1162},[74,101616,101617],{"class":190},"array([[19, 20, 21, 22, 23, 24],\n",[74,101619,101620],{"class":76,"line":1176},[74,101621,101622],{"class":190},"       [13, 14, 15, 16, 17, 18],\n",[74,101624,101625],{"class":76,"line":1182},[74,101626,101627],{"class":190},"       [ 7,  8,  9, 10, 11, 12],\n",[74,101629,101630],{"class":76,"line":1273},[74,101631,101632],{"class":190},"       [ 1,  2,  3,  4,  5,  6]])\n",[74,101634,101635],{"class":76,"line":1279},[74,101636,98209],{"class":190},[74,101638,101639],{"class":76,"line":1291},[74,101640,101641],{"class":144},"#对行列都进行反向切片获取\n",[74,101643,101644,101646,101648,101650,101652,101654,101656],{"class":76,"line":1574},[74,101645,101532],{"class":84},[74,101647,618],{"class":80},[74,101649,303],{"class":134},[74,101651,101537],{"class":84},[74,101653,618],{"class":80},[74,101655,303],{"class":134},[74,101657,37527],{"class":84},[74,101659,101660],{"class":76,"line":1579},[74,101661,98209],{"class":190},[74,101663,101664],{"class":76,"line":1585},[74,101665,101666],{"class":190},"array([[24, 23, 22, 21, 20, 19],\n",[74,101668,101669],{"class":76,"line":1590},[74,101670,101671],{"class":190},"       [18, 17, 16, 15, 14, 13],\n",[74,101673,101674],{"class":76,"line":1604},[74,101675,101676],{"class":190},"       [12, 11, 10,  9,  8,  7],\n",[74,101678,101679],{"class":76,"line":1609},[74,101680,101681],{"class":190},"       [ 6,  5,  4,  3,  2,  1]])\n",[74,101683,101684],{"class":76,"line":1615},[74,101685,98209],{"class":190},[19,101687,101688],{},"⑦修改元素",[64,101690,101692],{"className":34659,"code":101691,"language":34661,"meta":69,"style":69},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[71,101693,101694,101699,101717,101722],{"__ignoreMap":69},[74,101695,101696],{"class":76,"line":77},[74,101697,101698],{"class":144},"#获取前两行和前两列\n",[74,101700,101701,101704,101706,101708,101710,101713,101715],{"class":76,"line":94},[74,101702,101703],{"class":84},"sub_a",[74,101705,131],{"class":80},[74,101707,101451],{"class":84},[74,101709,163],{"class":134},[74,101711,101712],{"class":84},",:",[74,101714,163],{"class":134},[74,101716,37527],{"class":84},[74,101718,101719],{"class":76,"line":1141},[74,101720,101721],{"class":144},"#修改sub_a第一个元素的值\n",[74,101723,101724,101727,101729,101731,101733,101735,101737],{"class":76,"line":1156},[74,101725,101726],{"class":84},"sub_a[",[74,101728,277],{"class":134},[74,101730,464],{"class":84},[74,101732,277],{"class":134},[74,101734,1026],{"class":84},[74,101736,131],{"class":80},[74,101738,101739],{"class":134},"100\n",[19,101741,101742],{},"⑧数组复制copy()",[64,101744,101746],{"className":34659,"code":101745,"language":34661,"meta":69,"style":69},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[71,101747,101748,101753,101763,101768],{"__ignoreMap":69},[74,101749,101750],{"class":76,"line":77},[74,101751,101752],{"class":144},"#数组复制\n",[74,101754,101755,101758,101760],{"class":76,"line":94},[74,101756,101757],{"class":84},"copy_a",[74,101759,131],{"class":80},[74,101761,101762],{"class":84},"np.copy(sub_a)\n",[74,101764,101765],{"class":76,"line":1141},[74,101766,101767],{"class":144},"#修改copy_a后不影响原数组\n",[74,101769,101770,101773,101775,101777,101779,101781,101783],{"class":76,"line":1156},[74,101771,101772],{"class":84},"copy_a[",[74,101774,277],{"class":134},[74,101776,464],{"class":84},[74,101778,277],{"class":134},[74,101780,1026],{"class":84},[74,101782,131],{"class":80},[74,101784,101739],{"class":134},[19,101786,101787],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5090,101789,101790],{},"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":69,"searchDepth":94,"depth":94,"links":101792},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":101309,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":101799,"title":101800,"body":101801,"description":27656,"extension":5121,"meta":102293,"navigation":2362,"path":102294,"seo":102295,"stem":102296,"__hash__":102297},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":101802,"toc":102285},[101803,101806,101810,101813,101816,101869,101872,101897,101900,101919,101939,101942,101958,101962,102008,102012,102054,102058,102061,102064,102067,102070,102073,102135,102195,102199,102202,102259,102263,102268,102277,102282],[10,101804,101800],{"id":101805},"_5改变数组的维度",[14,101807,101809],{"id":101808},"_51-使用reshape","5.1 使用reshape()",[19,101811,101812],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,101814,101815],{},"①一维数组转换为二维数组",[64,101817,101819],{"className":34659,"code":101818,"language":34661,"meta":69,"style":69},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[71,101820,101821,101837,101842,101847,101852],{"__ignoreMap":69},[74,101822,101823,101825,101827,101829,101831,101833,101835],{"class":76,"line":77},[74,101824,324],{"class":84},[74,101826,131],{"class":80},[74,101828,97283],{"class":84},[74,101830,303],{"class":134},[74,101832,464],{"class":84},[74,101834,609],{"class":134},[74,101836,91],{"class":84},[74,101838,101839],{"class":76,"line":94},[74,101840,101841],{"class":144},"#将一维数组进行转换\n",[74,101843,101844],{"class":76,"line":1141},[74,101845,101846],{"class":144},"#注意点：元素个数不可以变\n",[74,101848,101849],{"class":76,"line":1156},[74,101850,101851],{"class":144},"#转换维度要保持一致，不一致就异常！！！\n",[74,101853,101854,101856,101858,101861,101863,101865,101867],{"class":76,"line":1162},[74,101855,97587],{"class":84},[74,101857,131],{"class":80},[74,101859,101860],{"class":84},"a.reshape(",[74,101862,163],{"class":134},[74,101864,464],{"class":84},[74,101866,430],{"class":134},[74,101868,91],{"class":84},[19,101870,101871],{},"②一维数组转换为三维数组",[64,101873,101875],{"className":34659,"code":101874,"language":34661,"meta":69,"style":69},"aaa=a.reshape(2,3,2)\n",[71,101876,101877],{"__ignoreMap":69},[74,101878,101879,101881,101883,101885,101887,101889,101891,101893,101895],{"class":76,"line":77},[74,101880,99802],{"class":84},[74,101882,131],{"class":80},[74,101884,101860],{"class":84},[74,101886,163],{"class":134},[74,101888,464],{"class":84},[74,101890,157],{"class":134},[74,101892,464],{"class":84},[74,101894,163],{"class":134},[74,101896,91],{"class":84},[19,101898,101899],{},"③二维数组转化为一维数组",[64,101901,101903],{"className":34659,"code":101902,"language":34661,"meta":69,"style":69},"#知道元素个数：\naa.reshape(12)\n",[71,101904,101905,101910],{"__ignoreMap":69},[74,101906,101907],{"class":76,"line":77},[74,101908,101909],{"class":144},"#知道元素个数：\n",[74,101911,101912,101915,101917],{"class":76,"line":94},[74,101913,101914],{"class":84},"aa.reshape(",[74,101916,584],{"class":134},[74,101918,91],{"class":84},[64,101920,101922],{"className":34659,"code":101921,"language":34661,"meta":69,"style":69},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[71,101923,101924,101929],{"__ignoreMap":69},[74,101925,101926],{"class":76,"line":77},[74,101927,101928],{"class":144},"#不知道元素个数，参数传递-1\n",[74,101930,101931,101933,101935,101937],{"class":76,"line":94},[74,101932,101914],{"class":84},[74,101934,618],{"class":80},[74,101936,303],{"class":134},[74,101938,91],{"class":84},[19,101940,101941],{},"④三维数组转换为一维数组",[64,101943,101945],{"className":34659,"code":101944,"language":34661,"meta":69,"style":69},"aaa.reshape(-1)\n",[71,101946,101947],{"__ignoreMap":69},[74,101948,101949,101952,101954,101956],{"class":76,"line":77},[74,101950,101951],{"class":84},"aaa.reshape(",[74,101953,618],{"class":80},[74,101955,303],{"class":134},[74,101957,91],{"class":84},[14,101959,101961],{"id":101960},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[64,101963,101965],{"className":34659,"code":101964,"language":34661,"meta":69,"style":69},"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",[71,101966,101967,101994,101999,102003],{"__ignoreMap":69},[74,101968,101969,101971,101973,101975,101977,101979,101981,101983,101985,101987,101989,101991],{"class":76,"line":77},[74,101970,97587],{"class":84},[74,101972,131],{"class":80},[74,101974,97283],{"class":84},[74,101976,303],{"class":134},[74,101978,464],{"class":84},[74,101980,609],{"class":134},[74,101982,97288],{"class":84},[74,101984,163],{"class":134},[74,101986,464],{"class":84},[74,101988,430],{"class":134},[74,101990,515],{"class":84},[74,101992,101993],{"class":144},"#转换为2行6列的数组\n",[74,101995,101996],{"class":76,"line":94},[74,101997,101998],{"class":84},"aa.revel()\n",[74,102000,102001],{"class":76,"line":1141},[74,102002,97845],{"class":144},[74,102004,102005],{"class":76,"line":1156},[74,102006,102007],{"class":144},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,102009,102011],{"id":102010},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[64,102013,102015],{"className":34659,"code":102014,"language":34661,"meta":69,"style":69},"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",[71,102016,102017,102041,102046,102050],{"__ignoreMap":69},[74,102018,102019,102021,102023,102025,102027,102029,102031,102033,102035,102037,102039],{"class":76,"line":77},[74,102020,97587],{"class":84},[74,102022,131],{"class":80},[74,102024,97283],{"class":84},[74,102026,303],{"class":134},[74,102028,464],{"class":84},[74,102030,609],{"class":134},[74,102032,97288],{"class":84},[74,102034,163],{"class":134},[74,102036,464],{"class":84},[74,102038,430],{"class":134},[74,102040,91],{"class":84},[74,102042,102043],{"class":76,"line":94},[74,102044,102045],{"class":84},"aa.flatten()\n",[74,102047,102048],{"class":76,"line":1141},[74,102049,97845],{"class":144},[74,102051,102052],{"class":76,"line":1156},[74,102053,102007],{"class":144},[14,102055,102057],{"id":102056},"_54-使用resize","5.4 使用resize()",[19,102059,102060],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,102062,102063],{},"通过resize方法可以改变数组的维度",[19,102065,102066],{},"#resize修改数组维度",[19,102068,102069],{},"#以元组的形式指定形状",[19,102071,102072],{},"#改变的是原数组",[64,102074,102076],{"className":34659,"code":102075,"language":34661,"meta":69,"style":69},"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",[71,102077,102078,102094,102114,102127,102131],{"__ignoreMap":69},[74,102079,102080,102082,102084,102086,102088,102090,102092],{"class":76,"line":77},[74,102081,324],{"class":84},[74,102083,131],{"class":80},[74,102085,97283],{"class":84},[74,102087,303],{"class":134},[74,102089,464],{"class":84},[74,102091,609],{"class":134},[74,102093,91],{"class":84},[74,102095,102096,102099,102101,102103,102105,102107,102109,102111],{"class":76,"line":94},[74,102097,102098],{"class":84},"a.shape",[74,102100,131],{"class":80},[74,102102,85],{"class":84},[74,102104,163],{"class":134},[74,102106,464],{"class":84},[74,102108,430],{"class":134},[74,102110,515],{"class":84},[74,102112,102113],{"class":144},"#改变了原数组\n",[74,102115,102116,102118,102120,102123,102125],{"class":76,"line":1141},[74,102117,324],{"class":84},[74,102119,131],{"class":80},[74,102121,102122],{"class":84},"resize((",[74,102124,584],{"class":134},[74,102126,34778],{"class":84},[74,102128,102129],{"class":76,"line":1156},[74,102130,97845],{"class":144},[74,102132,102133],{"class":76,"line":1162},[74,102134,102007],{"class":144},[64,102136,102138],{"className":34659,"code":102137,"language":34661,"meta":69,"style":69},"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",[71,102139,102140,102153,102157,102161,102166,102171,102176,102181,102186,102191],{"__ignoreMap":69},[74,102141,102142,102145,102147,102149,102151],{"class":76,"line":77},[74,102143,102144],{"class":84},"a.resize((",[74,102146,430],{"class":134},[74,102148,464],{"class":84},[74,102150,163],{"class":134},[74,102152,34778],{"class":84},[74,102154,102155],{"class":76,"line":94},[74,102156,97845],{"class":144},[74,102158,102159],{"class":76,"line":1141},[74,102160,98209],{"class":190},[74,102162,102163],{"class":76,"line":1156},[74,102164,102165],{"class":190},"array([[ 1,  2],\n",[74,102167,102168],{"class":76,"line":1162},[74,102169,102170],{"class":190},"       [ 3,  4],\n",[74,102172,102173],{"class":76,"line":1176},[74,102174,102175],{"class":190},"       [ 5,  6],\n",[74,102177,102178],{"class":76,"line":1182},[74,102179,102180],{"class":190},"       [ 7,  8],\n",[74,102182,102183],{"class":76,"line":1273},[74,102184,102185],{"class":190},"       [ 9, 10],\n",[74,102187,102188],{"class":76,"line":1279},[74,102189,102190],{"class":190},"       [11, 12]])\n",[74,102192,102193],{"class":76,"line":1291},[74,102194,98209],{"class":190},[14,102196,102198],{"id":102197},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,102200,102201],{},"改变了原数组",[64,102203,102205],{"className":34659,"code":102204,"language":34661,"meta":69,"style":69},"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",[71,102206,102207,102223,102239,102243,102247,102251,102255],{"__ignoreMap":69},[74,102208,102209,102211,102213,102215,102217,102219,102221],{"class":76,"line":77},[74,102210,324],{"class":84},[74,102212,131],{"class":80},[74,102214,97283],{"class":84},[74,102216,303],{"class":134},[74,102218,464],{"class":84},[74,102220,609],{"class":134},[74,102222,91],{"class":84},[74,102224,102225,102227,102229,102231,102233,102235,102237],{"class":76,"line":94},[74,102226,102098],{"class":84},[74,102228,131],{"class":80},[74,102230,85],{"class":84},[74,102232,163],{"class":134},[74,102234,464],{"class":84},[74,102236,430],{"class":134},[74,102238,91],{"class":84},[74,102240,102241],{"class":76,"line":1141},[74,102242,97845],{"class":144},[74,102244,102245],{"class":76,"line":1156},[74,102246,98209],{"class":190},[74,102248,102249],{"class":76,"line":1162},[74,102250,101469],{"class":190},[74,102252,102253],{"class":76,"line":1176},[74,102254,101474],{"class":190},[74,102256,102257],{"class":76,"line":1182},[74,102258,98209],{"class":190},[14,102260,102262],{"id":102261},"_56-重要比较","5.6 重要比较：",[19,102264,102265],{},[1424,102266],{"alt":69,"src":102267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,102269,102270,102271,102273,102274,102276],{},"口诀：NumPy 函数要么用 ",[71,102272,100244],{},"，要么用 ",[71,102275,35777],{},"，创建结构用 shape，造数据用 size",[19,102278,102279],{},[1424,102280],{"alt":69,"src":102281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5090,102283,102284],{},"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":69,"searchDepth":94,"depth":94,"links":102286},[102287,102288,102289,102290,102291,102292],{"id":101808,"depth":94,"text":101809},{"id":101960,"depth":94,"text":101961},{"id":102010,"depth":94,"text":102011},{"id":102056,"depth":94,"text":102057},{"id":102197,"depth":94,"text":102198},{"id":102261,"depth":94,"text":102262},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":101800,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":102299,"title":102300,"body":102301,"description":27656,"extension":5121,"meta":103373,"navigation":2362,"path":103374,"seo":103375,"stem":103376,"__hash__":103377},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":102302,"toc":103367},[102303,102306,102310,102313,102316,102319,102384,102387,102427,102430,102512,102515,102520,102542,102544,102549,102554,102557,102560,102715,102718,102920,102924,102927,102930,102998,103000,103005,103008,103011,103091,103095,103098,103100,103173,103175,103180,103182,103262,103266,103269,103272,103275,103278,103281,103284,103364],[10,102304,102300],{"id":102305},"_6数组的拼接",[14,102307,102309],{"id":102308},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,102311,102312],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,102314,102315],{},"函数内部传两个数列构成的数列或者元组",[19,102317,102318],{},"①一维数组的拼接",[64,102320,102322],{"className":34659,"code":102321,"language":34661,"meta":69,"style":69},"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",[71,102323,102324,102344,102364,102369,102374,102379],{"__ignoreMap":69},[74,102325,102326,102328,102330,102332,102334,102336,102338,102340,102342],{"class":76,"line":77},[74,102327,324],{"class":84},[74,102329,131],{"class":80},[74,102331,97305],{"class":84},[74,102333,303],{"class":134},[74,102335,464],{"class":84},[74,102337,163],{"class":134},[74,102339,464],{"class":84},[74,102341,157],{"class":134},[74,102343,4620],{"class":84},[74,102345,102346,102348,102350,102352,102354,102356,102358,102360,102362],{"class":76,"line":94},[74,102347,349],{"class":84},[74,102349,131],{"class":80},[74,102351,97305],{"class":84},[74,102353,379],{"class":134},[74,102355,464],{"class":84},[74,102357,405],{"class":134},[74,102359,464],{"class":84},[74,102361,430],{"class":134},[74,102363,4620],{"class":84},[74,102365,102366],{"class":76,"line":1141},[74,102367,102368],{"class":144},"#调用concatenate进行数组拼接\n",[74,102370,102371],{"class":76,"line":1156},[74,102372,102373],{"class":84},"np.concatenate((a,b))\n",[74,102375,102376],{"class":76,"line":1162},[74,102377,102378],{"class":144},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[74,102380,102381],{"class":76,"line":1176},[74,102382,102383],{"class":144},"#np.concatenate([a,b])\n",[19,102385,102386],{},"②一维多个数组拼接",[64,102388,102390],{"className":34659,"code":102389,"language":34661,"meta":69,"style":69},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[71,102391,102392,102397,102417,102422],{"__ignoreMap":69},[74,102393,102394],{"class":76,"line":77},[74,102395,102396],{"class":144},"#也可以多个数组进行拼接\n",[74,102398,102399,102401,102403,102405,102407,102409,102411,102413,102415],{"class":76,"line":94},[74,102400,374],{"class":84},[74,102402,131],{"class":80},[74,102404,97305],{"class":84},[74,102406,532],{"class":134},[74,102408,464],{"class":84},[74,102410,558],{"class":134},[74,102412,464],{"class":84},[74,102414,609],{"class":134},[74,102416,4620],{"class":84},[74,102418,102419],{"class":76,"line":1141},[74,102420,102421],{"class":84},"c\n",[74,102423,102424],{"class":76,"line":1156},[74,102425,102426],{"class":84},"np.concatenate((a,b,c))\n",[19,102428,102429],{},"③二维数组拼接",[64,102431,102433],{"className":34659,"code":102432,"language":34661,"meta":69,"style":69},"#二维数组使用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",[71,102434,102435,102440,102464,102489,102494,102499],{"__ignoreMap":69},[74,102436,102437],{"class":76,"line":77},[74,102438,102439],{"class":144},"#二维数组使用concatenate进行拼接\n",[74,102441,102442,102444,102446,102448,102450,102452,102454,102456,102458,102460,102462],{"class":76,"line":94},[74,102443,97587],{"class":84},[74,102445,131],{"class":80},[74,102447,97283],{"class":84},[74,102449,303],{"class":134},[74,102451,464],{"class":84},[74,102453,609],{"class":134},[74,102455,97288],{"class":84},[74,102457,157],{"class":134},[74,102459,464],{"class":84},[74,102461,379],{"class":134},[74,102463,91],{"class":84},[74,102465,102466,102469,102471,102473,102475,102477,102479,102481,102483,102485,102487],{"class":76,"line":1141},[74,102467,102468],{"class":84},"bb",[74,102470,131],{"class":80},[74,102472,97283],{"class":84},[74,102474,423],{"class":134},[74,102476,464],{"class":84},[74,102478,728],{"class":134},[74,102480,97288],{"class":84},[74,102482,157],{"class":134},[74,102484,464],{"class":84},[74,102486,379],{"class":134},[74,102488,91],{"class":84},[74,102490,102491],{"class":76,"line":1156},[74,102492,102493],{"class":144},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[74,102495,102496],{"class":76,"line":1162},[74,102497,102498],{"class":144},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[74,102500,102501,102504,102506,102508,102510],{"class":76,"line":1176},[74,102502,102503],{"class":84},"np.concatenate((aa,bb),",[74,102505,51795],{"class":9495},[74,102507,131],{"class":80},[74,102509,277],{"class":134},[74,102511,91],{"class":84},[19,102513,102514],{},"结果：",[19,102516,102517],{},[1424,102518],{"alt":69,"src":102519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[64,102521,102523],{"className":34659,"code":102522,"language":34661,"meta":69,"style":69},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[71,102524,102525,102530],{"__ignoreMap":69},[74,102526,102527],{"class":76,"line":77},[74,102528,102529],{"class":144},"#指定axis为1进行拼接\n",[74,102531,102532,102534,102536,102538,102540],{"class":76,"line":94},[74,102533,102503],{"class":84},[74,102535,51795],{"class":9495},[74,102537,131],{"class":80},[74,102539,303],{"class":134},[74,102541,91],{"class":84},[19,102543,102514],{},[19,102545,102546],{},[1424,102547],{"alt":69,"src":102548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,102550,102551],{},[235,102552,102553],{},"二维数组总结：0竖着方向，1横着方向",[19,102555,102556],{},"④三维数组拼接",[19,102558,102559],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[64,102561,102563],{"className":34659,"code":102562,"language":34661,"meta":69,"style":69},"#两个三行六列\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",[71,102564,102565,102570,102598,102628,102633,102650,102655,102660,102665,102682,102687,102692,102697,102710],{"__ignoreMap":69},[74,102566,102567],{"class":76,"line":77},[74,102568,102569],{"class":144},"#两个三行六列\n",[74,102571,102572,102574,102576,102578,102580,102582,102584,102586,102588,102590,102592,102594,102596],{"class":76,"line":94},[74,102573,99802],{"class":84},[74,102575,131],{"class":80},[74,102577,97283],{"class":84},[74,102579,303],{"class":134},[74,102581,464],{"class":84},[74,102583,411],{"class":134},[74,102585,97288],{"class":84},[74,102587,163],{"class":134},[74,102589,464],{"class":84},[74,102591,157],{"class":134},[74,102593,464],{"class":84},[74,102595,430],{"class":134},[74,102597,91],{"class":84},[74,102599,102600,102603,102605,102607,102609,102611,102614,102616,102618,102620,102622,102624,102626],{"class":76,"line":1141},[74,102601,102602],{"class":84},"bbb",[74,102604,131],{"class":80},[74,102606,97283],{"class":84},[74,102608,423],{"class":134},[74,102610,464],{"class":84},[74,102612,102613],{"class":134},"137",[74,102615,97288],{"class":84},[74,102617,163],{"class":134},[74,102619,464],{"class":84},[74,102621,157],{"class":134},[74,102623,464],{"class":84},[74,102625,430],{"class":134},[74,102627,91],{"class":84},[74,102629,102630],{"class":76,"line":1156},[74,102631,102632],{"class":144},"#axis=0\n",[74,102634,102635,102637,102639,102642,102644,102646,102648],{"class":76,"line":1162},[74,102636,781],{"class":84},[74,102638,131],{"class":80},[74,102640,102641],{"class":84},"np.concatenate((aaa,bbb),",[74,102643,51795],{"class":9495},[74,102645,131],{"class":80},[74,102647,277],{"class":134},[74,102649,91],{"class":84},[74,102651,102652],{"class":76,"line":1176},[74,102653,102654],{"class":84},"s.shape\n",[74,102656,102657],{"class":76,"line":1182},[74,102658,102659],{"class":144},"#输出：(4,3,6)\n",[74,102661,102662],{"class":76,"line":1273},[74,102663,102664],{"class":144},"#axis=1\n",[74,102666,102667,102670,102672,102674,102676,102678,102680],{"class":76,"line":1279},[74,102668,102669],{"class":84},"ss",[74,102671,131],{"class":80},[74,102673,102641],{"class":84},[74,102675,51795],{"class":9495},[74,102677,131],{"class":80},[74,102679,303],{"class":134},[74,102681,91],{"class":84},[74,102683,102684],{"class":76,"line":1291},[74,102685,102686],{"class":84},"ss.shape\n",[74,102688,102689],{"class":76,"line":1574},[74,102690,102691],{"class":144},"#输出：(2,6,6)\n",[74,102693,102694],{"class":76,"line":1579},[74,102695,102696],{"class":144},"#axis=2\n",[74,102698,102699,102701,102703,102705,102707],{"class":76,"line":1585},[74,102700,102641],{"class":84},[74,102702,51795],{"class":9495},[74,102704,131],{"class":80},[74,102706,163],{"class":134},[74,102708,102709],{"class":84},").shape\n",[74,102711,102712],{"class":76,"line":1590},[74,102713,102714],{"class":144},"#输出：（2，3，12）\n",[19,102716,102717],{},"⑤四维数组拼接",[64,102719,102721],{"className":34659,"code":102720,"language":34661,"meta":69,"style":69},"#两个三行六列\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",[71,102722,102723,102727,102755,102783,102808,102834,102838,102851,102856,102860,102872,102877,102881,102893,102898,102903,102915],{"__ignoreMap":69},[74,102724,102725],{"class":76,"line":77},[74,102726,102569],{"class":144},[74,102728,102729,102731,102733,102735,102737,102739,102741,102743,102745,102747,102749,102751,102753],{"class":76,"line":94},[74,102730,99802],{"class":84},[74,102732,131],{"class":80},[74,102734,97283],{"class":84},[74,102736,303],{"class":134},[74,102738,464],{"class":84},[74,102740,411],{"class":134},[74,102742,97288],{"class":84},[74,102744,163],{"class":134},[74,102746,464],{"class":84},[74,102748,157],{"class":134},[74,102750,464],{"class":84},[74,102752,430],{"class":134},[74,102754,91],{"class":84},[74,102756,102757,102759,102761,102763,102765,102767,102769,102771,102773,102775,102777,102779,102781],{"class":76,"line":1141},[74,102758,102602],{"class":84},[74,102760,131],{"class":80},[74,102762,97283],{"class":84},[74,102764,423],{"class":134},[74,102766,464],{"class":84},[74,102768,102613],{"class":134},[74,102770,97288],{"class":84},[74,102772,163],{"class":134},[74,102774,464],{"class":84},[74,102776,157],{"class":134},[74,102778,464],{"class":84},[74,102780,430],{"class":134},[74,102782,91],{"class":84},[74,102784,102785,102788,102790,102792,102794,102796,102798,102800,102802,102804,102806],{"class":76,"line":1156},[74,102786,102787],{"class":84},"aaaa",[74,102789,131],{"class":80},[74,102791,101951],{"class":84},[74,102793,163],{"class":134},[74,102795,464],{"class":84},[74,102797,157],{"class":134},[74,102799,464],{"class":84},[74,102801,157],{"class":134},[74,102803,464],{"class":84},[74,102805,163],{"class":134},[74,102807,91],{"class":84},[74,102809,102810,102813,102815,102818,102820,102822,102824,102826,102828,102830,102832],{"class":76,"line":1162},[74,102811,102812],{"class":84},"bbbb",[74,102814,131],{"class":80},[74,102816,102817],{"class":84},"bbb.reshape(",[74,102819,163],{"class":134},[74,102821,464],{"class":84},[74,102823,157],{"class":134},[74,102825,464],{"class":84},[74,102827,157],{"class":134},[74,102829,464],{"class":84},[74,102831,163],{"class":134},[74,102833,91],{"class":84},[74,102835,102836],{"class":76,"line":1176},[74,102837,102632],{"class":144},[74,102839,102840,102843,102845,102847,102849],{"class":76,"line":1182},[74,102841,102842],{"class":84},"np.concatenate((aaaa,bbbb),",[74,102844,51795],{"class":9495},[74,102846,131],{"class":80},[74,102848,277],{"class":134},[74,102850,102709],{"class":84},[74,102852,102853],{"class":76,"line":1273},[74,102854,102855],{"class":144},"#结果：（4，3，3，2）\n",[74,102857,102858],{"class":76,"line":1279},[74,102859,102664],{"class":144},[74,102861,102862,102864,102866,102868,102870],{"class":76,"line":1291},[74,102863,102842],{"class":84},[74,102865,51795],{"class":9495},[74,102867,131],{"class":80},[74,102869,303],{"class":134},[74,102871,102709],{"class":84},[74,102873,102874],{"class":76,"line":1574},[74,102875,102876],{"class":144},"#结果：（2，6，3，2）\n",[74,102878,102879],{"class":76,"line":1579},[74,102880,102696],{"class":144},[74,102882,102883,102885,102887,102889,102891],{"class":76,"line":1585},[74,102884,102842],{"class":84},[74,102886,51795],{"class":9495},[74,102888,131],{"class":80},[74,102890,163],{"class":134},[74,102892,102709],{"class":84},[74,102894,102895],{"class":76,"line":1590},[74,102896,102897],{"class":144},"#结果：（2，3，6，2）\n",[74,102899,102900],{"class":76,"line":1604},[74,102901,102902],{"class":144},"#axis=3\n",[74,102904,102905,102907,102909,102911,102913],{"class":76,"line":1609},[74,102906,102842],{"class":84},[74,102908,51795],{"class":9495},[74,102910,131],{"class":80},[74,102912,157],{"class":134},[74,102914,102709],{"class":84},[74,102916,102917],{"class":76,"line":1615},[74,102918,102919],{"class":144},"#结果：（2，3，3，4）\n",[14,102921,102923],{"id":102922},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,102925,102926],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,102928,102929],{},"①二维数组",[64,102931,102933],{"className":34659,"code":102932,"language":34661,"meta":69,"style":69},"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",[71,102934,102935,102959,102983,102988,102993],{"__ignoreMap":69},[74,102936,102937,102939,102941,102943,102945,102947,102949,102951,102953,102955,102957],{"class":76,"line":77},[74,102938,97587],{"class":84},[74,102940,131],{"class":80},[74,102942,97283],{"class":84},[74,102944,303],{"class":134},[74,102946,464],{"class":84},[74,102948,609],{"class":134},[74,102950,97288],{"class":84},[74,102952,157],{"class":134},[74,102954,464],{"class":84},[74,102956,379],{"class":134},[74,102958,91],{"class":84},[74,102960,102961,102963,102965,102967,102969,102971,102973,102975,102977,102979,102981],{"class":76,"line":94},[74,102962,102468],{"class":84},[74,102964,131],{"class":80},[74,102966,97283],{"class":84},[74,102968,423],{"class":134},[74,102970,464],{"class":84},[74,102972,728],{"class":134},[74,102974,97288],{"class":84},[74,102976,157],{"class":134},[74,102978,464],{"class":84},[74,102980,379],{"class":134},[74,102982,91],{"class":84},[74,102984,102985],{"class":76,"line":1141},[74,102986,102987],{"class":84},"np.hstack((aa,bb))\n",[74,102989,102990],{"class":76,"line":1156},[74,102991,102992],{"class":144},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[74,102994,102995],{"class":76,"line":1162},[74,102996,102997],{"class":144},"#np.hstack([aa,bb])\n",[19,102999,102514],{},[19,103001,103002],{},[1424,103003],{"alt":69,"src":103004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,103006,103007],{},"等效于concatenate()函数中axis=1时的情况",[19,103009,103010],{},"②三维数组",[64,103012,103014],{"className":34659,"code":103013,"language":34661,"meta":69,"style":69},"#两个三行六列\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",[71,103015,103016,103020,103048,103076,103081,103086],{"__ignoreMap":69},[74,103017,103018],{"class":76,"line":77},[74,103019,102569],{"class":144},[74,103021,103022,103024,103026,103028,103030,103032,103034,103036,103038,103040,103042,103044,103046],{"class":76,"line":94},[74,103023,99802],{"class":84},[74,103025,131],{"class":80},[74,103027,97283],{"class":84},[74,103029,303],{"class":134},[74,103031,464],{"class":84},[74,103033,411],{"class":134},[74,103035,97288],{"class":84},[74,103037,163],{"class":134},[74,103039,464],{"class":84},[74,103041,157],{"class":134},[74,103043,464],{"class":84},[74,103045,430],{"class":134},[74,103047,91],{"class":84},[74,103049,103050,103052,103054,103056,103058,103060,103062,103064,103066,103068,103070,103072,103074],{"class":76,"line":1141},[74,103051,102602],{"class":84},[74,103053,131],{"class":80},[74,103055,97283],{"class":84},[74,103057,423],{"class":134},[74,103059,464],{"class":84},[74,103061,102613],{"class":134},[74,103063,97288],{"class":84},[74,103065,163],{"class":134},[74,103067,464],{"class":84},[74,103069,157],{"class":134},[74,103071,464],{"class":84},[74,103073,430],{"class":134},[74,103075,91],{"class":84},[74,103077,103078],{"class":76,"line":1156},[74,103079,103080],{"class":144},"#使用hstack\n",[74,103082,103083],{"class":76,"line":1162},[74,103084,103085],{"class":84},"np.hstack((aaa,bbb)).shape\n",[74,103087,103088],{"class":76,"line":1176},[74,103089,103090],{"class":144},"#输出：（2，6，6）\n",[14,103092,103094],{"id":103093},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,103096,103097],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,103099,102929],{},[64,103101,103103],{"className":34659,"code":103102,"language":34661,"meta":69,"style":69},"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",[71,103104,103105,103129,103153,103158,103163,103168],{"__ignoreMap":69},[74,103106,103107,103109,103111,103113,103115,103117,103119,103121,103123,103125,103127],{"class":76,"line":77},[74,103108,97587],{"class":84},[74,103110,131],{"class":80},[74,103112,97283],{"class":84},[74,103114,303],{"class":134},[74,103116,464],{"class":84},[74,103118,609],{"class":134},[74,103120,97288],{"class":84},[74,103122,157],{"class":134},[74,103124,464],{"class":84},[74,103126,379],{"class":134},[74,103128,91],{"class":84},[74,103130,103131,103133,103135,103137,103139,103141,103143,103145,103147,103149,103151],{"class":76,"line":94},[74,103132,102468],{"class":84},[74,103134,131],{"class":80},[74,103136,97283],{"class":84},[74,103138,423],{"class":134},[74,103140,464],{"class":84},[74,103142,728],{"class":134},[74,103144,97288],{"class":84},[74,103146,157],{"class":134},[74,103148,464],{"class":84},[74,103150,379],{"class":134},[74,103152,91],{"class":84},[74,103154,103155],{"class":76,"line":1141},[74,103156,103157],{"class":144},"#vstack 垂直方向进行堆叠\n",[74,103159,103160],{"class":76,"line":1156},[74,103161,103162],{"class":84},"np.vstack((aa,bb))\n",[74,103164,103165],{"class":76,"line":1162},[74,103166,103167],{"class":144},"#与hstack传的参数类似，等价于：\n",[74,103169,103170],{"class":76,"line":1176},[74,103171,103172],{"class":84},"np.vstack([aa,bb])\n",[19,103174,102514],{},[19,103176,103177],{},[1424,103178],{"alt":69,"src":103179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,103181,103010],{},[64,103183,103185],{"className":34659,"code":103184,"language":34661,"meta":69,"style":69},"#两个三行六列\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",[71,103186,103187,103191,103219,103247,103252,103257],{"__ignoreMap":69},[74,103188,103189],{"class":76,"line":77},[74,103190,102569],{"class":144},[74,103192,103193,103195,103197,103199,103201,103203,103205,103207,103209,103211,103213,103215,103217],{"class":76,"line":94},[74,103194,99802],{"class":84},[74,103196,131],{"class":80},[74,103198,97283],{"class":84},[74,103200,303],{"class":134},[74,103202,464],{"class":84},[74,103204,411],{"class":134},[74,103206,97288],{"class":84},[74,103208,163],{"class":134},[74,103210,464],{"class":84},[74,103212,157],{"class":134},[74,103214,464],{"class":84},[74,103216,430],{"class":134},[74,103218,91],{"class":84},[74,103220,103221,103223,103225,103227,103229,103231,103233,103235,103237,103239,103241,103243,103245],{"class":76,"line":1141},[74,103222,102602],{"class":84},[74,103224,131],{"class":80},[74,103226,97283],{"class":84},[74,103228,423],{"class":134},[74,103230,464],{"class":84},[74,103232,102613],{"class":134},[74,103234,97288],{"class":84},[74,103236,163],{"class":134},[74,103238,464],{"class":84},[74,103240,157],{"class":134},[74,103242,464],{"class":84},[74,103244,430],{"class":134},[74,103246,91],{"class":84},[74,103248,103249],{"class":76,"line":1156},[74,103250,103251],{"class":144},"#使用vstack\n",[74,103253,103254],{"class":76,"line":1162},[74,103255,103256],{"class":84},"np.vstack((aaa,bbb)).shape\n",[74,103258,103259],{"class":76,"line":1176},[74,103260,103261],{"class":144},"#输出：（4，3，6）\n",[14,103263,103265],{"id":103264},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,103267,103268],{},"该方法是三维数组特有的方法",[19,103270,103271],{},"也就是说",[19,103273,103274],{},"一维数组拼接方法用：concatenate()",[19,103276,103277],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,103279,103280],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,103282,103283],{},"四维数组及多维数组只能用concatenate进行拼接",[64,103285,103287],{"className":34659,"code":103286,"language":34661,"meta":69,"style":69},"#两个三行六列\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",[71,103288,103289,103293,103321,103349,103354,103359],{"__ignoreMap":69},[74,103290,103291],{"class":76,"line":77},[74,103292,102569],{"class":144},[74,103294,103295,103297,103299,103301,103303,103305,103307,103309,103311,103313,103315,103317,103319],{"class":76,"line":94},[74,103296,99802],{"class":84},[74,103298,131],{"class":80},[74,103300,97283],{"class":84},[74,103302,303],{"class":134},[74,103304,464],{"class":84},[74,103306,411],{"class":134},[74,103308,97288],{"class":84},[74,103310,163],{"class":134},[74,103312,464],{"class":84},[74,103314,157],{"class":134},[74,103316,464],{"class":84},[74,103318,430],{"class":134},[74,103320,91],{"class":84},[74,103322,103323,103325,103327,103329,103331,103333,103335,103337,103339,103341,103343,103345,103347],{"class":76,"line":1141},[74,103324,102602],{"class":84},[74,103326,131],{"class":80},[74,103328,97283],{"class":84},[74,103330,423],{"class":134},[74,103332,464],{"class":84},[74,103334,102613],{"class":134},[74,103336,97288],{"class":84},[74,103338,163],{"class":134},[74,103340,464],{"class":84},[74,103342,157],{"class":134},[74,103344,464],{"class":84},[74,103346,430],{"class":134},[74,103348,91],{"class":84},[74,103350,103351],{"class":76,"line":1156},[74,103352,103353],{"class":144},"#使用dstack\n",[74,103355,103356],{"class":76,"line":1162},[74,103357,103358],{"class":84},"np.dstack((aaa,bbb)).shape\n",[74,103360,103361],{"class":76,"line":1176},[74,103362,103363],{"class":144},"#结果：（2，3，12）\n",[5090,103365,103366],{},"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":69,"searchDepth":94,"depth":94,"links":103368},[103369,103370,103371,103372],{"id":102308,"depth":94,"text":102309},{"id":102922,"depth":94,"text":102923},{"id":103093,"depth":94,"text":103094},{"id":103264,"depth":94,"text":103265},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":102300,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":103379,"title":103380,"body":103381,"description":27656,"extension":5121,"meta":103656,"navigation":2362,"path":103657,"seo":103658,"stem":103659,"__hash__":103660},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":103382,"toc":103654},[103383,103386,103389,103483,103486,103489,103492,103495,103498,103501,103504,103507,103651],[10,103384,103380],{"id":103385},"_7数组转置",[19,103387,103388],{},"使用transpose()函数",[64,103390,103392],{"className":34659,"code":103391,"language":34661,"meta":69,"style":69},"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",[71,103393,103394,103404,103428,103433,103438,103443,103448,103456,103460,103464,103469,103474,103479],{"__ignoreMap":69},[74,103395,103396,103398,103400,103402],{"class":76,"line":77},[74,103397,34673],{"class":80},[74,103399,35661],{"class":84},[74,103401,35664],{"class":80},[74,103403,35667],{"class":84},[74,103405,103406,103408,103410,103412,103414,103416,103418,103420,103422,103424,103426],{"class":76,"line":94},[74,103407,324],{"class":84},[74,103409,131],{"class":80},[74,103411,35998],{"class":84},[74,103413,303],{"class":134},[74,103415,464],{"class":84},[74,103417,609],{"class":134},[74,103419,97288],{"class":84},[74,103421,379],{"class":134},[74,103423,464],{"class":84},[74,103425,157],{"class":134},[74,103427,91],{"class":84},[74,103429,103430],{"class":76,"line":1141},[74,103431,103432],{"class":144},"#二维数组转置\n",[74,103434,103435],{"class":76,"line":1156},[74,103436,103437],{"class":144},"#调用transpose()函数\n",[74,103439,103440],{"class":76,"line":1162},[74,103441,103442],{"class":84},"a.transpose()\n",[74,103444,103445],{"class":76,"line":1176},[74,103446,103447],{"class":144},"#对于二维数组也可以采用.T来实现\n",[74,103449,103450,103453],{"class":76,"line":1182},[74,103451,103452],{"class":84},"a.T",[74,103454,103455],{"class":144},"#与上述代码一样\n",[74,103457,103458],{"class":76,"line":1273},[74,103459,97845],{"class":144},[74,103461,103462],{"class":76,"line":1279},[74,103463,98209],{"class":190},[74,103465,103466],{"class":76,"line":1291},[74,103467,103468],{"class":190},"array([[ 1,  4,  7, 10],\n",[74,103470,103471],{"class":76,"line":1574},[74,103472,103473],{"class":190},"       [ 2,  5,  8, 11],\n",[74,103475,103476],{"class":76,"line":1579},[74,103477,103478],{"class":190},"       [ 3,  6,  9, 12]])\n",[74,103480,103481],{"class":76,"line":1585},[74,103482,98209],{"class":190},[19,103484,103485],{},"也可以使用np.transpose()的形式",[19,103487,103488],{},"#多维数组进行转置 np.transpose()",[19,103490,103491],{},"#对二维数组也可以使用np.transpose()进行转置",[19,103493,103494],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,103496,103497],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,103499,103500],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,103502,103503],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,103505,103506],{},"四维及以上的数组也是一样的道理",[64,103508,103510],{"className":34659,"code":103509,"language":34661,"meta":69,"style":69},"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",[71,103511,103512,103540,103545,103550,103555,103573,103578,103610,103615,103620,103625,103646],{"__ignoreMap":69},[74,103513,103514,103516,103518,103520,103522,103524,103526,103528,103530,103532,103534,103536,103538],{"class":76,"line":77},[74,103515,906],{"class":84},[74,103517,131],{"class":80},[74,103519,97283],{"class":84},[74,103521,303],{"class":134},[74,103523,464],{"class":84},[74,103525,411],{"class":134},[74,103527,97288],{"class":84},[74,103529,157],{"class":134},[74,103531,464],{"class":84},[74,103533,430],{"class":134},[74,103535,464],{"class":84},[74,103537,163],{"class":134},[74,103539,91],{"class":84},[74,103541,103542],{"class":76,"line":94},[74,103543,103544],{"class":84},"x.shape\n",[74,103546,103547],{"class":76,"line":1141},[74,103548,103549],{"class":144},"#结果：（3,6,2）\n",[74,103551,103552],{"class":76,"line":1156},[74,103553,103554],{"class":144},"#使用np.transpose()进行转置 变为(2,6,3)\n",[74,103556,103557,103560,103562,103564,103566,103568,103570],{"class":76,"line":1162},[74,103558,103559],{"class":84},"np.transpose(x,(",[74,103561,163],{"class":134},[74,103563,464],{"class":84},[74,103565,303],{"class":134},[74,103567,464],{"class":84},[74,103569,277],{"class":134},[74,103571,103572],{"class":84},")).shape\n",[74,103574,103575],{"class":76,"line":1176},[74,103576,103577],{"class":144},"#结果：(2,6,3)\n",[74,103579,103580,103582,103584,103586,103588,103590,103592,103594,103596,103598,103600,103602,103604,103606,103608],{"class":76,"line":1182},[74,103581,102787],{"class":84},[74,103583,131],{"class":80},[74,103585,97283],{"class":84},[74,103587,303],{"class":134},[74,103589,464],{"class":84},[74,103591,411],{"class":134},[74,103593,97288],{"class":84},[74,103595,157],{"class":134},[74,103597,464],{"class":84},[74,103599,163],{"class":134},[74,103601,464],{"class":84},[74,103603,303],{"class":134},[74,103605,464],{"class":84},[74,103607,430],{"class":134},[74,103609,91],{"class":84},[74,103611,103612],{"class":76,"line":1273},[74,103613,103614],{"class":84},"aaaa.shape\n",[74,103616,103617],{"class":76,"line":1279},[74,103618,103619],{"class":144},"#结果：（3，2，1，6）\n",[74,103621,103622],{"class":76,"line":1291},[74,103623,103624],{"class":144},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[74,103626,103627,103630,103632,103634,103636,103638,103640,103642,103644],{"class":76,"line":1574},[74,103628,103629],{"class":84},"np.transpose(aaaa,(",[74,103631,303],{"class":134},[74,103633,464],{"class":84},[74,103635,163],{"class":134},[74,103637,464],{"class":84},[74,103639,277],{"class":134},[74,103641,464],{"class":84},[74,103643,157],{"class":134},[74,103645,103572],{"class":84},[74,103647,103648],{"class":76,"line":1579},[74,103649,103650],{"class":144},"#结果：(2,1,3,6)\n",[5090,103652,103653],{},"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":69,"searchDepth":94,"depth":94,"links":103655},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":103380,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":103662,"title":103663,"body":103664,"description":27656,"extension":5121,"meta":104398,"navigation":2362,"path":104399,"seo":104400,"stem":104401,"__hash__":104402},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":103665,"toc":104396},[103666,103669,103672,103675,103678,103681,103684,103687,103690,103799,103802,103805,104393],[10,103667,103663],{"id":103668},"_8数组分割",[19,103670,103671],{},"split分割",[19,103673,103674],{},"numpy.split(ary,indics_or_sections,axis)",[19,103676,103677],{},"解释：",[19,103679,103680],{},"ary:被分割的数组",[19,103682,103683],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,103685,103686],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,103688,103689],{},"①一维数组的分割",[64,103691,103693],{"className":34659,"code":103692,"language":34661,"meta":69,"style":69},"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",[71,103694,103695,103711,103716,103725,103729,103734,103742,103746,103751,103756,103769,103773,103778,103790,103794],{"__ignoreMap":69},[74,103696,103697,103699,103701,103703,103705,103707,103709],{"class":76,"line":77},[74,103698,324],{"class":84},[74,103700,131],{"class":80},[74,103702,97283],{"class":84},[74,103704,303],{"class":134},[74,103706,464],{"class":84},[74,103708,506],{"class":134},[74,103710,91],{"class":84},[74,103712,103713],{"class":76,"line":94},[74,103714,103715],{"class":144},"#如果传入整数，必须能够平分，否则会报错\n",[74,103717,103718,103721,103723],{"class":76,"line":1141},[74,103719,103720],{"class":84},"np.split(a,",[74,103722,163],{"class":134},[74,103724,91],{"class":84},[74,103726,103727],{"class":76,"line":1156},[74,103728,97845],{"class":144},[74,103730,103731],{"class":76,"line":1162},[74,103732,103733],{"class":144},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[74,103735,103736,103738,103740],{"class":76,"line":1176},[74,103737,103720],{"class":84},[74,103739,379],{"class":134},[74,103741,91],{"class":84},[74,103743,103744],{"class":76,"line":1182},[74,103745,97845],{"class":144},[74,103747,103748],{"class":76,"line":1273},[74,103749,103750],{"class":144},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[74,103752,103753],{"class":76,"line":1279},[74,103754,103755],{"class":144},"#传入数组\n",[74,103757,103758,103761,103763,103765,103767],{"class":76,"line":1291},[74,103759,103760],{"class":84},"np.split(a,[",[74,103762,157],{"class":134},[74,103764,464],{"class":84},[74,103766,405],{"class":134},[74,103768,4620],{"class":84},[74,103770,103771],{"class":76,"line":1574},[74,103772,97845],{"class":144},[74,103774,103775],{"class":76,"line":1579},[74,103776,103777],{"class":144},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[74,103779,103780,103782,103784,103786,103788],{"class":76,"line":1585},[74,103781,103760],{"class":84},[74,103783,405],{"class":134},[74,103785,464],{"class":84},[74,103787,455],{"class":134},[74,103789,4620],{"class":84},[74,103791,103792],{"class":76,"line":1590},[74,103793,97845],{"class":144},[74,103795,103796],{"class":76,"line":1604},[74,103797,103798],{"class":144},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,103800,103801],{},"②二维数组的分割",[19,103803,103804],{},"使用split()",[64,103806,103808],{"className":34659,"code":103807,"language":34661,"meta":69,"style":69},"#二维数组分割\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",[71,103809,103810,103815,103839,103844,103853,103857,103861,103866,103871,103876,103881,103886,103891,103896,103900,103913,103917,103921,103925,103929,103933,103938,103943,103948,103952,103957,103973,103977,103981,103986,103991,103996,104001,104006,104011,104016,104021,104026,104031,104036,104041,104046,104051,104056,104061,104066,104071,104075,104079,104099,104103,104107,104112,104117,104122,104127,104132,104137,104142,104147,104152,104157,104162,104167,104172,104177,104182,104187,104192,104197,104201,104206,104215,104219,104223,104227,104231,104235,104239,104243,104247,104251,104260,104264,104268,104272,104276,104280,104284,104288,104292,104296,104300,104304,104308,104312,104316,104320,104324,104328,104332,104336,104340,104344,104357,104361,104365,104369,104373,104377,104381,104385,104389],{"__ignoreMap":69},[74,103811,103812],{"class":76,"line":77},[74,103813,103814],{"class":144},"#二维数组分割\n",[74,103816,103817,103819,103821,103823,103825,103827,103829,103831,103833,103835,103837],{"class":76,"line":94},[74,103818,97587],{"class":84},[74,103820,131],{"class":80},[74,103822,97283],{"class":84},[74,103824,303],{"class":134},[74,103826,464],{"class":84},[74,103828,411],{"class":134},[74,103830,97288],{"class":84},[74,103832,430],{"class":134},[74,103834,464],{"class":84},[74,103836,430],{"class":134},[74,103838,91],{"class":84},[74,103840,103841],{"class":76,"line":1141},[74,103842,103843],{"class":144},"#默认axis=0  传入整数平均分,按行来的\n",[74,103845,103846,103849,103851],{"class":76,"line":1156},[74,103847,103848],{"class":84},"np.split(aa,",[74,103850,157],{"class":134},[74,103852,91],{"class":84},[74,103854,103855],{"class":76,"line":1162},[74,103856,100045],{"class":144},[74,103858,103859],{"class":76,"line":1176},[74,103860,98209],{"class":190},[74,103862,103863],{"class":76,"line":1182},[74,103864,103865],{"class":190},"[array([[ 1,  2,  3,  4,  5,  6],\n",[74,103867,103868],{"class":76,"line":1273},[74,103869,103870],{"class":190},"        [ 7,  8,  9, 10, 11, 12]]),\n",[74,103872,103873],{"class":76,"line":1279},[74,103874,103875],{"class":190}," array([[13, 14, 15, 16, 17, 18],\n",[74,103877,103878],{"class":76,"line":1291},[74,103879,103880],{"class":190},"        [19, 20, 21, 22, 23, 24]]),\n",[74,103882,103883],{"class":76,"line":1574},[74,103884,103885],{"class":190}," array([[25, 26, 27, 28, 29, 30],\n",[74,103887,103888],{"class":76,"line":1579},[74,103889,103890],{"class":190},"        [31, 32, 33, 34, 35, 36]])]\n",[74,103892,103893],{"class":76,"line":1585},[74,103894,103895],{"class":190}," '''\n",[74,103897,103898],{"class":76,"line":1590},[74,103899,103755],{"class":144},[74,103901,103902,103905,103907,103909,103911],{"class":76,"line":1604},[74,103903,103904],{"class":84},"np.split(aa,[",[74,103906,163],{"class":134},[74,103908,464],{"class":84},[74,103910,405],{"class":134},[74,103912,4620],{"class":84},[74,103914,103915],{"class":76,"line":1609},[74,103916,100045],{"class":144},[74,103918,103919],{"class":76,"line":1615},[74,103920,98209],{"class":190},[74,103922,103923],{"class":76,"line":1636},[74,103924,103865],{"class":190},[74,103926,103927],{"class":76,"line":1641},[74,103928,103870],{"class":190},[74,103930,103931],{"class":76,"line":1655},[74,103932,103875],{"class":190},[74,103934,103935],{"class":76,"line":1660},[74,103936,103937],{"class":190},"        [19, 20, 21, 22, 23, 24],\n",[74,103939,103940],{"class":76,"line":1689},[74,103941,103942],{"class":190},"        [25, 26, 27, 28, 29, 30]]),\n",[74,103944,103945],{"class":76,"line":1694},[74,103946,103947],{"class":190}," array([[31, 32, 33, 34, 35, 36]])]\n",[74,103949,103950],{"class":76,"line":1711},[74,103951,98209],{"class":190},[74,103953,103954],{"class":76,"line":1716},[74,103955,103956],{"class":144},"#axis=1 按照列来分\n",[74,103958,103959,103961,103963,103965,103967,103969,103971],{"class":76,"line":1721},[74,103960,103848],{"class":84},[74,103962,157],{"class":134},[74,103964,464],{"class":84},[74,103966,51795],{"class":9495},[74,103968,131],{"class":80},[74,103970,303],{"class":134},[74,103972,91],{"class":84},[74,103974,103975],{"class":76,"line":1726},[74,103976,100045],{"class":144},[74,103978,103979],{"class":76,"line":1740},[74,103980,98209],{"class":190},[74,103982,103983],{"class":76,"line":1745},[74,103984,103985],{"class":190},"[array([[ 1,  2],\n",[74,103987,103988],{"class":76,"line":2540},[74,103989,103990],{"class":190},"        [ 7,  8],\n",[74,103992,103993],{"class":76,"line":2554},[74,103994,103995],{"class":190},"        [13, 14],\n",[74,103997,103998],{"class":76,"line":2562},[74,103999,104000],{"class":190},"        [19, 20],\n",[74,104002,104003],{"class":76,"line":2567},[74,104004,104005],{"class":190},"        [25, 26],\n",[74,104007,104008],{"class":76,"line":2573},[74,104009,104010],{"class":190},"        [31, 32]]),\n",[74,104012,104013],{"class":76,"line":2579},[74,104014,104015],{"class":190}," array([[ 3,  4],\n",[74,104017,104018],{"class":76,"line":2584},[74,104019,104020],{"class":190},"        [ 9, 10],\n",[74,104022,104023],{"class":76,"line":12227},[74,104024,104025],{"class":190},"        [15, 16],\n",[74,104027,104028],{"class":76,"line":12251},[74,104029,104030],{"class":190},"        [21, 22],\n",[74,104032,104033],{"class":76,"line":12256},[74,104034,104035],{"class":190},"        [27, 28],\n",[74,104037,104038],{"class":76,"line":12262},[74,104039,104040],{"class":190},"        [33, 34]]),\n",[74,104042,104043],{"class":76,"line":12289},[74,104044,104045],{"class":190}," array([[ 5,  6],\n",[74,104047,104048],{"class":76,"line":12294},[74,104049,104050],{"class":190},"        [11, 12],\n",[74,104052,104053],{"class":76,"line":12300},[74,104054,104055],{"class":190},"        [17, 18],\n",[74,104057,104058],{"class":76,"line":12312},[74,104059,104060],{"class":190},"        [23, 24],\n",[74,104062,104063],{"class":76,"line":12324},[74,104064,104065],{"class":190},"        [29, 30],\n",[74,104067,104068],{"class":76,"line":12336},[74,104069,104070],{"class":190},"        [35, 36]])]\n",[74,104072,104073],{"class":76,"line":13995},[74,104074,103895],{"class":190},[74,104076,104077],{"class":76,"line":14020},[74,104078,103755],{"class":144},[74,104080,104081,104083,104085,104087,104089,104091,104093,104095,104097],{"class":76,"line":14043},[74,104082,103904],{"class":84},[74,104084,303],{"class":134},[74,104086,464],{"class":84},[74,104088,163],{"class":134},[74,104090,45890],{"class":84},[74,104092,51795],{"class":9495},[74,104094,131],{"class":80},[74,104096,303],{"class":134},[74,104098,91],{"class":84},[74,104100,104101],{"class":76,"line":14067},[74,104102,97845],{"class":144},[74,104104,104105],{"class":76,"line":14072},[74,104106,98209],{"class":190},[74,104108,104109],{"class":76,"line":14077},[74,104110,104111],{"class":190},"[array([[ 1],\n",[74,104113,104114],{"class":76,"line":14082},[74,104115,104116],{"class":190},"        [ 7],\n",[74,104118,104119],{"class":76,"line":14091},[74,104120,104121],{"class":190},"        [13],\n",[74,104123,104124],{"class":76,"line":14096},[74,104125,104126],{"class":190},"        [19],\n",[74,104128,104129],{"class":76,"line":14102},[74,104130,104131],{"class":190},"        [25],\n",[74,104133,104134],{"class":76,"line":14123},[74,104135,104136],{"class":190},"        [31]]),\n",[74,104138,104139],{"class":76,"line":14129},[74,104140,104141],{"class":190}," array([[ 2],\n",[74,104143,104144],{"class":76,"line":14143},[74,104145,104146],{"class":190},"        [ 8],\n",[74,104148,104149],{"class":76,"line":14149},[74,104150,104151],{"class":190},"        [14],\n",[74,104153,104154],{"class":76,"line":14176},[74,104155,104156],{"class":190},"        [20],\n",[74,104158,104159],{"class":76,"line":14185},[74,104160,104161],{"class":190},"        [26],\n",[74,104163,104164],{"class":76,"line":14191},[74,104165,104166],{"class":190},"        [32]]),\n",[74,104168,104169],{"class":76,"line":14199},[74,104170,104171],{"class":190}," array([[ 3,  4,  5,  6],\n",[74,104173,104174],{"class":76,"line":14204},[74,104175,104176],{"class":190},"        [ 9, 10, 11, 12],\n",[74,104178,104179],{"class":76,"line":20883},[74,104180,104181],{"class":190},"        [15, 16, 17, 18],\n",[74,104183,104184],{"class":76,"line":20889},[74,104185,104186],{"class":190},"        [21, 22, 23, 24],\n",[74,104188,104189],{"class":76,"line":20912},[74,104190,104191],{"class":190},"        [27, 28, 29, 30],\n",[74,104193,104194],{"class":76,"line":20918},[74,104195,104196],{"class":190},"        [33, 34, 35, 36]])]\n",[74,104198,104199],{"class":76,"line":20941},[74,104200,98209],{"class":190},[74,104202,104203],{"class":76,"line":20955},[74,104204,104205],{"class":144},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[74,104207,104208,104211,104213],{"class":76,"line":20975},[74,104209,104210],{"class":84},"np.vsplit(aa,",[74,104212,157],{"class":134},[74,104214,91],{"class":84},[74,104216,104217],{"class":76,"line":20981},[74,104218,97845],{"class":144},[74,104220,104221],{"class":76,"line":20992},[74,104222,98209],{"class":190},[74,104224,104225],{"class":76,"line":21015},[74,104226,103865],{"class":190},[74,104228,104229],{"class":76,"line":21037},[74,104230,103870],{"class":190},[74,104232,104233],{"class":76,"line":21042},[74,104234,103875],{"class":190},[74,104236,104237],{"class":76,"line":21048},[74,104238,103880],{"class":190},[74,104240,104241],{"class":76,"line":21062},[74,104242,103885],{"class":190},[74,104244,104245],{"class":76,"line":21075},[74,104246,103890],{"class":190},[74,104248,104249],{"class":76,"line":21080},[74,104250,98209],{"class":190},[74,104252,104253,104256,104258],{"class":76,"line":21094},[74,104254,104255],{"class":84},"np.hsplit(aa,",[74,104257,157],{"class":134},[74,104259,91],{"class":84},[74,104261,104262],{"class":76,"line":21099},[74,104263,97845],{"class":144},[74,104265,104266],{"class":76,"line":21105},[74,104267,98209],{"class":190},[74,104269,104270],{"class":76,"line":21110},[74,104271,103985],{"class":190},[74,104273,104274],{"class":76,"line":21124},[74,104275,103990],{"class":190},[74,104277,104278],{"class":76,"line":21129},[74,104279,103995],{"class":190},[74,104281,104282],{"class":76,"line":21134},[74,104283,104000],{"class":190},[74,104285,104286],{"class":76,"line":21148},[74,104287,104005],{"class":190},[74,104289,104290],{"class":76,"line":21160},[74,104291,104010],{"class":190},[74,104293,104294],{"class":76,"line":21165},[74,104295,104015],{"class":190},[74,104297,104298],{"class":76,"line":21178},[74,104299,104020],{"class":190},[74,104301,104302],{"class":76,"line":21183},[74,104303,104025],{"class":190},[74,104305,104306],{"class":76,"line":21188},[74,104307,104030],{"class":190},[74,104309,104310],{"class":76,"line":21193},[74,104311,104035],{"class":190},[74,104313,104314],{"class":76,"line":21206},[74,104315,104040],{"class":190},[74,104317,104318],{"class":76,"line":21211},[74,104319,104045],{"class":190},[74,104321,104322],{"class":76,"line":36914},[74,104323,104050],{"class":190},[74,104325,104326],{"class":76,"line":36920},[74,104327,104055],{"class":190},[74,104329,104330],{"class":76,"line":36926},[74,104331,104060],{"class":190},[74,104333,104334],{"class":76,"line":36932},[74,104335,104065],{"class":190},[74,104337,104338],{"class":76,"line":36938},[74,104339,104070],{"class":190},[74,104341,104342],{"class":76,"line":36949},[74,104343,98209],{"class":190},[74,104345,104346,104349,104351,104353,104355],{"class":76,"line":36955},[74,104347,104348],{"class":84},"np.vsplit(aa,[",[74,104350,163],{"class":134},[74,104352,464],{"class":84},[74,104354,405],{"class":134},[74,104356,4620],{"class":84},[74,104358,104359],{"class":76,"line":36975},[74,104360,97845],{"class":144},[74,104362,104363],{"class":76,"line":36981},[74,104364,98209],{"class":190},[74,104366,104367],{"class":76,"line":36992},[74,104368,103865],{"class":190},[74,104370,104371],{"class":76,"line":36998},[74,104372,103870],{"class":190},[74,104374,104375],{"class":76,"line":37004},[74,104376,103875],{"class":190},[74,104378,104379],{"class":76,"line":37010},[74,104380,103937],{"class":190},[74,104382,104383],{"class":76,"line":37016},[74,104384,103942],{"class":190},[74,104386,104387],{"class":76,"line":37022},[74,104388,103947],{"class":190},[74,104390,104391],{"class":76,"line":37028},[74,104392,103895],{"class":190},[5090,104394,104395],{},"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":69,"searchDepth":94,"depth":94,"links":104397},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":103663,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":104404,"title":104405,"body":104406,"description":27656,"extension":5121,"meta":104900,"navigation":2362,"path":104901,"seo":104902,"stem":104903,"__hash__":104904},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":104407,"toc":104891},[104408,104411,104414,104439,104443,104502,104554,104558,104560,104596,104650,104652,104690,104761,104765,104770,104774,104777,104810,104813,104817,104820,104823,104826,104829,104834,104838,104841,104844,104847,104850,104855,104859,104864,104867,104888],[10,104409,104405],{"id":104410},"_9数学函数",[19,104412,104413],{},"补充回顾：python的列表推导式",[64,104415,104417],{"className":34659,"code":104416,"language":34661,"meta":69,"style":69},"[1\u002Fi for i in a]\n",[71,104418,104419],{"__ignoreMap":69},[74,104420,104421,104423,104425,104427,104430,104432,104434,104436],{"class":76,"line":77},[74,104422,976],{"class":84},[74,104424,303],{"class":134},[74,104426,670],{"class":80},[74,104428,104429],{"class":84},"i ",[74,104431,2988],{"class":80},[74,104433,13717],{"class":84},[74,104435,30324],{"class":80},[74,104437,104438],{"class":84}," a]\n",[14,104440,104442],{"id":104441},"_91-求倒数","9.1 求倒数",[64,104444,104446],{"className":34659,"code":104445,"language":34661,"meta":69,"style":69},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[71,104447,104448,104453,104481,104493],{"__ignoreMap":69},[74,104449,104450],{"class":76,"line":77},[74,104451,104452],{"class":144},"#数组求倒数\n",[74,104454,104455,104457,104459,104461,104463,104465,104467,104469,104471,104473,104475,104477,104479],{"class":76,"line":94},[74,104456,324],{"class":84},[74,104458,131],{"class":80},[74,104460,976],{"class":84},[74,104462,303],{"class":134},[74,104464,464],{"class":84},[74,104466,163],{"class":134},[74,104468,464],{"class":84},[74,104470,157],{"class":134},[74,104472,464],{"class":84},[74,104474,379],{"class":134},[74,104476,464],{"class":84},[74,104478,405],{"class":134},[74,104480,37527],{"class":84},[74,104482,104483,104485,104487,104490],{"class":76,"line":1141},[74,104484,349],{"class":84},[74,104486,131],{"class":80},[74,104488,104489],{"class":84},"np.array(a)",[74,104491,104492],{"class":144},"#将列表转换为数组\n",[74,104494,104495,104497,104499],{"class":76,"line":1156},[74,104496,303],{"class":134},[74,104498,670],{"class":80},[74,104500,104501],{"class":84},"b\n",[64,104503,104505],{"className":34659,"code":104504,"language":34661,"meta":69,"style":69},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[71,104506,104507,104535,104544,104549],{"__ignoreMap":69},[74,104508,104509,104511,104513,104515,104517,104519,104521,104523,104525,104527,104529,104531,104533],{"class":76,"line":77},[74,104510,324],{"class":84},[74,104512,131],{"class":80},[74,104514,976],{"class":84},[74,104516,303],{"class":134},[74,104518,464],{"class":84},[74,104520,163],{"class":134},[74,104522,464],{"class":84},[74,104524,157],{"class":134},[74,104526,464],{"class":84},[74,104528,379],{"class":134},[74,104530,464],{"class":84},[74,104532,405],{"class":134},[74,104534,37527],{"class":84},[74,104536,104537,104539,104541],{"class":76,"line":94},[74,104538,349],{"class":84},[74,104540,131],{"class":80},[74,104542,104543],{"class":84},"np.array(a)\n",[74,104545,104546],{"class":76,"line":1141},[74,104547,104548],{"class":144},"#调用numpy中的函数reciprocal()\n",[74,104550,104551],{"class":76,"line":1156},[74,104552,104553],{"class":84},"np.reciprocal(b)\n",[14,104555,104557],{"id":104556},"_92-求平方","9.2 求平方",[19,104559,98811],{},[64,104561,104563],{"className":34659,"code":104562,"language":34661,"meta":69,"style":69},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[71,104564,104565,104570,104575,104591],{"__ignoreMap":69},[74,104566,104567],{"class":76,"line":77},[74,104568,104569],{"class":144},"#square()，求平方\n",[74,104571,104572],{"class":76,"line":94},[74,104573,104574],{"class":144},"#一维数组\n",[74,104576,104577,104579,104581,104583,104585,104587,104589],{"class":76,"line":1141},[74,104578,324],{"class":84},[74,104580,131],{"class":80},[74,104582,97283],{"class":84},[74,104584,303],{"class":134},[74,104586,464],{"class":84},[74,104588,532],{"class":134},[74,104590,91],{"class":84},[74,104592,104593],{"class":76,"line":1156},[74,104594,104595],{"class":84},"np.square(a)\n",[64,104597,104599],{"className":34659,"code":104598,"language":34661,"meta":69,"style":69},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[71,104600,104601,104606,104611,104632],{"__ignoreMap":69},[74,104602,104603],{"class":76,"line":77},[74,104604,104605],{"class":144},"#或者通过循环遍历的形式来计算\n",[74,104607,104608],{"class":76,"line":94},[74,104609,104610],{"class":144},"#这是一个列表\n",[74,104612,104613,104616,104618,104620,104622,104624,104626,104629],{"class":76,"line":1141},[74,104614,104615],{"class":84},"[i",[74,104617,541],{"class":80},[74,104619,104429],{"class":84},[74,104621,2988],{"class":80},[74,104623,13717],{"class":84},[74,104625,30324],{"class":80},[74,104627,104628],{"class":84}," a]",[74,104630,104631],{"class":144},"#这个求完之后在数列当中\n",[74,104633,104634,104637,104639,104641,104643,104645,104647],{"class":76,"line":1156},[74,104635,104636],{"class":84},"np.array([i",[74,104638,541],{"class":80},[74,104640,104429],{"class":84},[74,104642,2988],{"class":80},[74,104644,13717],{"class":84},[74,104646,30324],{"class":80},[74,104648,104649],{"class":84}," a])\n",[19,104651,97572],{},[64,104653,104655],{"className":34659,"code":104654,"language":34661,"meta":69,"style":69},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[71,104656,104657,104661,104685],{"__ignoreMap":69},[74,104658,104659],{"class":76,"line":77},[74,104660,97582],{"class":144},[74,104662,104663,104665,104667,104669,104671,104673,104675,104677,104679,104681,104683],{"class":76,"line":94},[74,104664,97587],{"class":84},[74,104666,131],{"class":80},[74,104668,97283],{"class":84},[74,104670,303],{"class":134},[74,104672,464],{"class":84},[74,104674,609],{"class":134},[74,104676,97288],{"class":84},[74,104678,379],{"class":134},[74,104680,464],{"class":84},[74,104682,157],{"class":134},[74,104684,91],{"class":84},[74,104686,104687],{"class":76,"line":1141},[74,104688,104689],{"class":84},"np.square(aa)\n",[64,104691,104693],{"className":34659,"code":104692,"language":34661,"meta":69,"style":69},"#传统的方式\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",[71,104694,104695,104700,104709,104725,104741,104756],{"__ignoreMap":69},[74,104696,104697],{"class":76,"line":77},[74,104698,104699],{"class":144},"#传统的方式\n",[74,104701,104702,104704,104706],{"class":76,"line":94},[74,104703,102468],{"class":84},[74,104705,131],{"class":80},[74,104707,104708],{"class":84},"np.empty_like(aa)\n",[74,104710,104711,104713,104715,104717,104719,104721,104723],{"class":76,"line":1141},[74,104712,2988],{"class":80},[74,104714,13717],{"class":84},[74,104716,30324],{"class":80},[74,104718,36724],{"class":134},[74,104720,85],{"class":84},[74,104722,379],{"class":134},[74,104724,35067],{"class":84},[74,104726,104727,104729,104731,104733,104735,104737,104739],{"class":76,"line":1156},[74,104728,3164],{"class":80},[74,104730,13779],{"class":84},[74,104732,30324],{"class":80},[74,104734,36724],{"class":134},[74,104736,85],{"class":84},[74,104738,157],{"class":134},[74,104740,35067],{"class":84},[74,104742,104743,104746,104748,104751,104753],{"class":76,"line":1162},[74,104744,104745],{"class":84},"        bb[i,j]",[74,104747,131],{"class":80},[74,104749,104750],{"class":84},"aa[i,j]",[74,104752,541],{"class":80},[74,104754,104755],{"class":84},"aa[i,j]\n",[74,104757,104758],{"class":76,"line":1176},[74,104759,104760],{"class":84},"bb\n",[14,104762,104764],{"id":104763},"_93-求各元素的符号","9.3 求各元素的符号",[19,104766,104767],{},[1424,104768],{"alt":69,"src":104769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,104771,104773],{"id":104772},"_94-modf函数","9.4 modf函数",[19,104775,104776],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[64,104778,104780],{"className":34659,"code":104779,"language":34661,"meta":69,"style":69},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[71,104781,104782,104805],{"__ignoreMap":69},[74,104783,104784,104786,104788,104790,104792,104794,104796,104798,104800,104803],{"class":76,"line":77},[74,104785,324],{"class":84},[74,104787,131],{"class":80},[74,104789,97283],{"class":84},[74,104791,618],{"class":80},[74,104793,532],{"class":134},[74,104795,464],{"class":84},[74,104797,532],{"class":134},[74,104799,464],{"class":84},[74,104801,104802],{"class":134},"0.3",[74,104804,91],{"class":84},[74,104806,104807],{"class":76,"line":94},[74,104808,104809],{"class":84},"np.modf(a)\n",[19,104811,104812],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,104814,104816],{"id":104815},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,104818,104819],{},"np.cell()",[19,104821,104822],{},"np.floor()",[19,104824,104825],{},"np.rint()",[19,104827,104828],{},"对各元素分别向上取整、向下取整、四舍五入",[19,104830,104831],{},[1424,104832],{"alt":69,"src":104833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,104835,104837],{"id":104836},"_96-around函数","9.6 around()函数",[19,104839,104840],{},"around()函数也可以实现对数的小数位数进行操作",[19,104842,104843],{},"其中的参数：",[19,104845,104846],{},"1.要传的数组",[19,104848,104849],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,104851,104852],{},[1424,104853],{"alt":69,"src":104854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,104856,104858],{"id":104857},"_97-三角函数","9.7 三角函数",[19,104860,104861],{},[1424,104862],{"alt":69,"src":104863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,104865,104866],{},"引入图像模块非常重要",[64,104868,104870],{"className":34659,"code":104869,"language":34661,"meta":69,"style":69},"from matplotlib import pyplot as plt\n",[71,104871,104872],{"__ignoreMap":69},[74,104873,104874,104876,104879,104881,104884,104886],{"class":76,"line":77},[74,104875,35018],{"class":80},[74,104877,104878],{"class":84}," matplotlib ",[74,104880,34673],{"class":80},[74,104882,104883],{"class":84}," pyplot ",[74,104885,35664],{"class":80},[74,104887,35718],{"class":84},[5090,104889,104890],{},"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":69,"searchDepth":94,"depth":94,"links":104892},[104893,104894,104895,104896,104897,104898,104899],{"id":104441,"depth":94,"text":104442},{"id":104556,"depth":94,"text":104557},{"id":104763,"depth":94,"text":104764},{"id":104772,"depth":94,"text":104773},{"id":104815,"depth":94,"text":104816},{"id":104836,"depth":94,"text":104837},{"id":104857,"depth":94,"text":104858},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":104405,"description":27656},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":104906,"title":104907,"body":104908,"description":27656,"extension":5121,"meta":104912,"navigation":2362,"path":104913,"seo":104914,"stem":104915,"__hash__":104916},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":104909,"toc":104910},[],{"title":69,"searchDepth":94,"depth":94,"links":104911},[],{"category":54701},"\u002Fwiki\u002F2025-08-14-numpy",{"title":104907,"description":27656},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":104918,"title":104919,"body":104920,"description":69,"extension":5121,"meta":106928,"navigation":2362,"path":106929,"seo":106930,"stem":106931,"__hash__":106932},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":104921,"toc":106904},[104922,104925,104929,104932,104935,104941,104944,104967,104970,105004,105007,105048,105052,105055,105148,105151,105195,105198,105215,105218,105232,105235,105238,105283,105286,105323,105327,105330,105336,105341,105361,105365,105368,105434,105437,105455,105459,105462,105491,105501,105507,105511,105514,105520,105531,105535,105538,105568,105571,105851,105854,105857,105868,105871,105874,105896,105903,105906,105924,105927,105930,105944,105952,105955,105981,105987,105990,105993,106003,106015,106035,106044,106064,106074,106098,106111,106125,106130,106171,106188,106213,106225,106245,106251,106296,106315,106332,106345,106361,106368,106380,106389,106424,106445,106470,106483,106507,106522,106547,106550,106571,106580,106583,106594,106598,106601,106607,106619,106626,106630,106633,106645,106648,106662,106665,106675,106685,106688,106728,106731,106735,106741,106744,106758,106762,106765,106798,106802,106805,106828,106836,106839,106845,106851,106854,106857,106885,106889,106892,106898,106901],[10,104923,104919],{"id":104924},"_1环境安装与第一个-mujoco-程序",[14,104926,104928],{"id":104927},"_1目标说明","1.目标说明",[19,104930,104931],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,104933,104934],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[64,104936,104939],{"className":104937,"code":104938,"language":9466,"meta":69},[9464],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[71,104940,104938],{"__ignoreMap":69},[19,104942,104943],{},"需要掌握:",[27,104945,104946,104949,104952,104957,104962],{},[30,104947,104948],{},"Fedora 44 下 MuJoCo 的系统依赖",[30,104950,104951],{},"Python 虚拟环境创建",[30,104953,104954],{},[71,104955,104956],{},"mujoco.MjModel",[30,104958,104959],{},[71,104960,104961],{},"mujoco.MjData",[30,104963,104964],{},[71,104965,104966],{},"mujoco.mj_step(model, data)",[19,104968,104969],{},"MuJoCo 中最重要的两个对象:",[223,104971,104972,104982],{},[226,104973,104974],{},[229,104975,104976,104979],{},[232,104977,104978],{"align":28016},"对象",[232,104980,104981],{"align":28016},"含义",[270,104983,104984,104994],{},[229,104985,104986,104991],{},[275,104987,104988],{"align":28016},[71,104989,104990],{},"MjModel",[275,104992,104993],{"align":28016},"模型结构，来自 XML，基本不随时间变化",[229,104995,104996,105001],{},[275,104997,104998],{"align":28016},[71,104999,105000],{},"MjData",[275,105002,105003],{"align":28016},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,105005,105006],{},"可以先用一个类比理解：",[223,105008,105009,105019],{},[226,105010,105011],{},[229,105012,105013,105016],{},[232,105014,105015],{"align":28016},"类比",[232,105017,105018],{"align":28016},"MuJoCo 对象",[270,105020,105021,105030,105039],{},[229,105022,105023,105026],{},[275,105024,105025],{"align":28016},"游戏地图和角色配置",[275,105027,105028],{"align":28016},[71,105029,104990],{},[229,105031,105032,105035],{},[275,105033,105034],{"align":28016},"游戏运行到当前帧的状态",[275,105036,105037],{"align":28016},[71,105038,105000],{},[229,105040,105041,105044],{},[275,105042,105043],{"align":28016},"前进一帧",[275,105045,105046],{"align":28016},[71,105047,104966],{},[14,105049,105051],{"id":105050},"_2环境与依赖安装","2.环境与依赖安装",[19,105053,105054],{},"Fedora 44 系统依赖:",[64,105056,105058],{"className":28102,"code":105057,"language":28104,"meta":69,"style":69},"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",[71,105059,105060,105072,105085,105098,105108,105118,105137],{"__ignoreMap":69},[74,105061,105062,105064,105066,105068,105070],{"class":76,"line":77},[74,105063,28857],{"class":1925},[74,105065,30596],{"class":190},[74,105067,28114],{"class":190},[74,105069,30681],{"class":134},[74,105071,28959],{"class":134},[74,105073,105074,105077,105080,105083],{"class":76,"line":94},[74,105075,105076],{"class":190},"  python3",[74,105078,105079],{"class":190}," python3-pip",[74,105081,105082],{"class":190}," python3-virtualenv",[74,105084,28959],{"class":134},[74,105086,105087,105090,105093,105096],{"class":76,"line":1141},[74,105088,105089],{"class":190},"  mesa-libGL",[74,105091,105092],{"class":190}," mesa-libGLU",[74,105094,105095],{"class":190}," mesa-dri-drivers",[74,105097,28959],{"class":134},[74,105099,105100,105103,105106],{"class":76,"line":1156},[74,105101,105102],{"class":190},"  libglvnd-glx",[74,105104,105105],{"class":190}," libglvnd-opengl",[74,105107,28959],{"class":134},[74,105109,105110,105113,105116],{"class":76,"line":1162},[74,105111,105112],{"class":190},"  glfw",[74,105114,105115],{"class":190}," glfw-devel",[74,105117,28959],{"class":134},[74,105119,105120,105123,105126,105129,105132,105135],{"class":76,"line":1176},[74,105121,105122],{"class":190},"  libX11",[74,105124,105125],{"class":190}," libXcursor",[74,105127,105128],{"class":190}," libXi",[74,105130,105131],{"class":190}," libXinerama",[74,105133,105134],{"class":190}," libXrandr",[74,105136,28959],{"class":134},[74,105138,105139,105142,105145],{"class":76,"line":1182},[74,105140,105141],{"class":190},"  gcc",[74,105143,105144],{"class":190}," gcc-c++",[74,105146,105147],{"class":190}," make\n",[19,105149,105150],{},"创建 Python 环境:",[64,105152,105154],{"className":28102,"code":105153,"language":28104,"meta":69,"style":69},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[71,105155,105156,105170,105178],{"__ignoreMap":69},[74,105157,105158,105161,105164,105167],{"class":76,"line":77},[74,105159,105160],{"class":1925},"python3",[74,105162,105163],{"class":134}," -m",[74,105165,105166],{"class":190}," venv",[74,105168,105169],{"class":190}," .venv\n",[74,105171,105172,105175],{"class":76,"line":94},[74,105173,105174],{"class":134},"source",[74,105176,105177],{"class":190}," .venv\u002Fbin\u002Factivate\n",[74,105179,105180,105182,105184,105187,105189,105192],{"class":76,"line":1141},[74,105181,34661],{"class":1925},[74,105183,105163],{"class":134},[74,105185,105186],{"class":190}," pip",[74,105188,28114],{"class":190},[74,105190,105191],{"class":134}," --upgrade",[74,105193,105194],{"class":190}," pip\n",[19,105196,105197],{},"pip 安装:",[64,105199,105201],{"className":28102,"code":105200,"language":28104,"meta":69,"style":69},"pip install \"mujoco>=2.3\" numpy\n",[71,105202,105203],{"__ignoreMap":69},[74,105204,105205,105207,105209,105212],{"class":76,"line":77},[74,105206,28111],{"class":1925},[74,105208,28114],{"class":190},[74,105210,105211],{"class":190}," \"mujoco>=2.3\"",[74,105213,105214],{"class":190}," numpy\n",[19,105216,105217],{},"安装完成后，先做最小检查：",[64,105219,105221],{"className":28102,"code":105220,"language":28104,"meta":69,"style":69},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[71,105222,105223],{"__ignoreMap":69},[74,105224,105225,105227,105229],{"class":76,"line":77},[74,105226,34661],{"class":1925},[74,105228,34639],{"class":134},[74,105230,105231],{"class":190}," \"import mujoco; print(mujoco.__version__)\"\n",[19,105233,105234],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,105236,105237],{},"conda 安装:",[64,105239,105241],{"className":28102,"code":105240,"language":28104,"meta":69,"style":69},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[71,105242,105243,105263,105273],{"__ignoreMap":69},[74,105244,105245,105247,105249,105251,105254,105257,105260],{"class":76,"line":77},[74,105246,34611],{"class":1925},[74,105248,33457],{"class":190},[74,105250,29396],{"class":134},[74,105252,105253],{"class":190}," mujoco-study",[74,105255,105256],{"class":190}," python=",[74,105258,105259],{"class":134},"3.10",[74,105261,105262],{"class":134}," -y\n",[74,105264,105265,105267,105270],{"class":76,"line":94},[74,105266,34611],{"class":1925},[74,105268,105269],{"class":190}," activate",[74,105271,105272],{"class":190}," mujoco-study\n",[74,105274,105275,105277,105279,105281],{"class":76,"line":1141},[74,105276,28111],{"class":1925},[74,105278,28114],{"class":190},[74,105280,105211],{"class":190},[74,105282,105214],{"class":190},[19,105284,105285],{},"版本冲突说明:",[27,105287,105288,105294,105304,105313],{},[30,105289,105290,105291,32666],{},"不要安装 ",[71,105292,105293],{},"mujoco-py",[30,105295,105296,105297,105299,105300,105303],{},"如果旧项目里同时安装了 ",[71,105298,105293],{}," 和 ",[71,105301,105302],{},"mujoco","，建议新建干净虚拟环境。",[30,105305,105306,105309,105310,32666],{},[71,105307,105308],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[71,105311,105312],{},"~\u002F.mujoco\u002Fmujoco210",[30,105314,105315,105316,86820,105319,105322],{},"离屏渲染可能涉及 OpenGL 后端，",[71,105317,105318],{},"MUJOCO_GL=egl",[71,105320,105321],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,105324,105326],{"id":105325},"_3核心概念解释","3.核心概念解释",[19,105328,105329],{},"MuJoCo 的基本执行流程:",[64,105331,105334],{"className":105332,"code":105333,"language":9466,"meta":69},[9464],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[71,105335,105333],{"__ignoreMap":69},[19,105337,105338,105340],{},[71,105339,104990],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,105342,105343,105345,105346,298,105349,298,105352,298,105355,298,105358,32666],{},[71,105344,105000],{}," 存放仿真运行时状态，例如 ",[71,105347,105348],{},"data.time",[71,105350,105351],{},"data.qpos",[71,105353,105354],{},"data.qvel",[71,105356,105357],{},"data.ctrl",[71,105359,105360],{},"data.xpos",[44,105362,105364],{"id":105363},"xml-是什么","XML 是什么",[19,105366,105367],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[64,105369,105371],{"className":57348,"code":105370,"language":57350,"meta":69,"style":69},"\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",[71,105372,105373,105395,105426],{"__ignoreMap":69},[74,105374,105375,105377,105379,105381,105383,105385,105388,105390,105393],{"class":76,"line":77},[74,105376,996],{"class":84},[74,105378,56081],{"class":55581},[74,105380,19199],{"class":1925},[74,105382,131],{"class":84},[74,105384,57772],{"class":190},[74,105386,105387],{"class":1925}," pos",[74,105389,131],{"class":84},[74,105391,105392],{"class":190},"\"0 0 1\"",[74,105394,55588],{"class":84},[74,105396,105397,105399,105402,105404,105406,105409,105411,105413,105415,105418,105420,105423],{"class":76,"line":94},[74,105398,56425],{"class":84},[74,105400,105401],{"class":55581},"geom",[74,105403,19199],{"class":1925},[74,105405,131],{"class":84},[74,105407,105408],{"class":190},"\"box_geom\"",[74,105410,58105],{"class":1925},[74,105412,131],{"class":84},[74,105414,57772],{"class":190},[74,105416,105417],{"class":1925}," size",[74,105419,131],{"class":84},[74,105421,105422],{"class":190},"\"0.1 0.1 0.1\"",[74,105424,105425],{"class":84},"\u002F>\n",[74,105427,105428,105430,105432],{"class":76,"line":1141},[74,105429,56066],{"class":84},[74,105431,56081],{"class":55581},[74,105433,55588],{"class":84},[19,105435,105436],{},"这段意思是：",[27,105438,105439,105445,105452],{},[30,105440,105441,105442,105444],{},"创建一个叫 ",[71,105443,57995],{}," 的刚体。",[30,105446,105447,105448,105451],{},"它初始放在 ",[71,105449,105450],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[30,105453,105454],{},"它里面有一个盒子形状的几何体。",[44,105456,105458],{"id":105457},"timestep-是什么","timestep 是什么",[19,105460,105461],{},"XML 里的：",[64,105463,105465],{"className":57348,"code":105464,"language":57350,"meta":69,"style":69},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[71,105466,105467],{"__ignoreMap":69},[74,105468,105469,105471,105473,105476,105478,105481,105484,105486,105489],{"class":76,"line":77},[74,105470,996],{"class":84},[74,105472,73447],{"class":55581},[74,105474,105475],{"class":1925}," timestep",[74,105477,131],{"class":84},[74,105479,105480],{"class":190},"\"0.01\"",[74,105482,105483],{"class":1925}," gravity",[74,105485,131],{"class":84},[74,105487,105488],{"class":190},"\"0 0 -9.81\"",[74,105490,105425],{"class":84},[19,105492,105493,105494,105497,105498,105500],{},"表示每调用一次 ",[71,105495,105496],{},"mj_step","，仿真时间前进 ",[71,105499,43267],{}," 秒。循环 100 次，大约就是 1 秒：",[64,105502,105505],{"className":105503,"code":105504,"language":9466,"meta":69},[9464],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[71,105506,105504],{"__ignoreMap":69},[44,105508,105510],{"id":105509},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,105512,105513],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[64,105515,105518],{"className":105516,"code":105517,"language":9466,"meta":69},[9464],"x y z qw qx qy qz\n",[71,105519,105517],{"__ignoreMap":69},[19,105521,105522,105523,105526,105527,105530],{},"表示一个自由刚体的位置和姿态。其中 ",[71,105524,105525],{},"x y z"," 是位置，",[71,105528,105529],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,105532,105534],{"id":105533},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,105536,105537],{},"新建文件:",[64,105539,105541],{"className":28102,"code":105540,"language":28104,"meta":69,"style":69},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[71,105542,105543,105553,105560],{"__ignoreMap":69},[74,105544,105545,105548,105550],{"class":76,"line":77},[74,105546,105547],{"class":1925},"mkdir",[74,105549,33497],{"class":134},[74,105551,105552],{"class":190}," mujoco_tutorial\n",[74,105554,105555,105558],{"class":76,"line":94},[74,105556,105557],{"class":134},"cd",[74,105559,105552],{"class":190},[74,105561,105562,105565],{"class":76,"line":1141},[74,105563,105564],{"class":1925},"touch",[74,105566,105567],{"class":190}," ch1_first_sim.py\n",[19,105569,105570],{},"写入:",[64,105572,105574],{"className":34659,"code":105573,"language":34661,"meta":69,"style":69},"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",[71,105575,105576,105583,105587,105591,105601,105606,105611,105615,105620,105625,105629,105634,105639,105644,105649,105654,105659,105663,105667,105671,105684,105698,105708,105712,105724,105736,105748,105760,105772,105776,105793,105798,105802,105813,105824,105828,105832,105846],{"__ignoreMap":69},[74,105577,105578,105580],{"class":76,"line":77},[74,105579,34673],{"class":80},[74,105581,105582],{"class":84}," mujoco\n",[74,105584,105585],{"class":76,"line":94},[74,105586,2363],{"emptyLinePlaceholder":2362},[74,105588,105589],{"class":76,"line":1141},[74,105590,2363],{"emptyLinePlaceholder":2362},[74,105592,105593,105596,105598],{"class":76,"line":1156},[74,105594,105595],{"class":134},"XML",[74,105597,17843],{"class":80},[74,105599,105600],{"class":190}," \"\"\"\n",[74,105602,105603],{"class":76,"line":1162},[74,105604,105605],{"class":190},"\u003Cmujoco model=\"first_sim\">\n",[74,105607,105608],{"class":76,"line":1176},[74,105609,105610],{"class":190},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[74,105612,105613],{"class":76,"line":1182},[74,105614,2363],{"emptyLinePlaceholder":2362},[74,105616,105617],{"class":76,"line":1273},[74,105618,105619],{"class":190},"  \u003Cworldbody>\n",[74,105621,105622],{"class":76,"line":1279},[74,105623,105624],{"class":190},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[74,105626,105627],{"class":76,"line":1291},[74,105628,2363],{"emptyLinePlaceholder":2362},[74,105630,105631],{"class":76,"line":1574},[74,105632,105633],{"class":190},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[74,105635,105636],{"class":76,"line":1579},[74,105637,105638],{"class":190},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[74,105640,105641],{"class":76,"line":1585},[74,105642,105643],{"class":190},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[74,105645,105646],{"class":76,"line":1590},[74,105647,105648],{"class":190},"    \u003C\u002Fbody>\n",[74,105650,105651],{"class":76,"line":1604},[74,105652,105653],{"class":190},"  \u003C\u002Fworldbody>\n",[74,105655,105656],{"class":76,"line":1609},[74,105657,105658],{"class":190},"\u003C\u002Fmujoco>\n",[74,105660,105661],{"class":76,"line":1615},[74,105662,99979],{"class":190},[74,105664,105665],{"class":76,"line":1636},[74,105666,2363],{"emptyLinePlaceholder":2362},[74,105668,105669],{"class":76,"line":1641},[74,105670,2363],{"emptyLinePlaceholder":2362},[74,105672,105673,105675,105677,105680,105682],{"class":76,"line":1655},[74,105674,36228],{"class":80},[74,105676,1935],{"class":1925},[74,105678,105679],{"class":84},"() -> ",[74,105681,99967],{"class":134},[74,105683,3702],{"class":84},[74,105685,105686,105689,105691,105694,105696],{"class":76,"line":1660},[74,105687,105688],{"class":84},"    model ",[74,105690,131],{"class":80},[74,105692,105693],{"class":84}," mujoco.MjModel.from_xml_string(",[74,105695,105595],{"class":134},[74,105697,91],{"class":84},[74,105699,105700,105703,105705],{"class":76,"line":1689},[74,105701,105702],{"class":84},"    data ",[74,105704,131],{"class":80},[74,105706,105707],{"class":84}," mujoco.MjData(model)\n",[74,105709,105710],{"class":76,"line":1694},[74,105711,2363],{"emptyLinePlaceholder":2362},[74,105713,105714,105716,105718,105721],{"class":76,"line":1711},[74,105715,35580],{"class":134},[74,105717,85],{"class":84},[74,105719,105720],{"class":190},"\"nq:\"",[74,105722,105723],{"class":84},", model.nq)\n",[74,105725,105726,105728,105730,105733],{"class":76,"line":1716},[74,105727,35580],{"class":134},[74,105729,85],{"class":84},[74,105731,105732],{"class":190},"\"nv:\"",[74,105734,105735],{"class":84},", model.nv)\n",[74,105737,105738,105740,105742,105745],{"class":76,"line":1721},[74,105739,35580],{"class":134},[74,105741,85],{"class":84},[74,105743,105744],{"class":190},"\"nu:\"",[74,105746,105747],{"class":84},", model.nu)\n",[74,105749,105750,105752,105754,105757],{"class":76,"line":1726},[74,105751,35580],{"class":134},[74,105753,85],{"class":84},[74,105755,105756],{"class":190},"\"initial time:\"",[74,105758,105759],{"class":84},", data.time)\n",[74,105761,105762,105764,105766,105769],{"class":76,"line":1740},[74,105763,35580],{"class":134},[74,105765,85],{"class":84},[74,105767,105768],{"class":190},"\"initial qpos:\"",[74,105770,105771],{"class":84},", data.qpos.copy())\n",[74,105773,105774],{"class":76,"line":1745},[74,105775,2363],{"emptyLinePlaceholder":2362},[74,105777,105778,105780,105783,105785,105787,105789,105791],{"class":76,"line":2540},[74,105779,3164],{"class":80},[74,105781,105782],{"class":84}," _ ",[74,105784,30324],{"class":80},[74,105786,36724],{"class":134},[74,105788,85],{"class":84},[74,105790,397],{"class":134},[74,105792,35067],{"class":84},[74,105794,105795],{"class":76,"line":2554},[74,105796,105797],{"class":84},"        mujoco.mj_step(model, data)\n",[74,105799,105800],{"class":76,"line":2562},[74,105801,2363],{"emptyLinePlaceholder":2362},[74,105803,105804,105806,105808,105811],{"class":76,"line":2567},[74,105805,35580],{"class":134},[74,105807,85],{"class":84},[74,105809,105810],{"class":190},"\"final time:\"",[74,105812,105759],{"class":84},[74,105814,105815,105817,105819,105822],{"class":76,"line":2573},[74,105816,35580],{"class":134},[74,105818,85],{"class":84},[74,105820,105821],{"class":190},"\"final qpos:\"",[74,105823,105771],{"class":84},[74,105825,105826],{"class":76,"line":2579},[74,105827,2363],{"emptyLinePlaceholder":2362},[74,105829,105830],{"class":76,"line":2584},[74,105831,2363],{"emptyLinePlaceholder":2362},[74,105833,105834,105836,105838,105841,105844],{"class":76,"line":12227},[74,105835,1493],{"class":80},[74,105837,35501],{"class":134},[74,105839,105840],{"class":80}," ==",[74,105842,105843],{"class":190}," \"__main__\"",[74,105845,3702],{"class":84},[74,105847,105848],{"class":76,"line":12251},[74,105849,105850],{"class":84},"    main()\n",[44,105852,105853],{"id":105853},"代码逐段解释",[19,105855,105856],{},"导入库：",[64,105858,105860],{"className":34659,"code":105859,"language":34661,"meta":69,"style":69},"import mujoco\n",[71,105861,105862],{"__ignoreMap":69},[74,105863,105864,105866],{"class":76,"line":77},[74,105865,34673],{"class":80},[74,105867,105582],{"class":84},[19,105869,105870],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,105872,105873],{},"定义 XML：",[64,105875,105877],{"className":34659,"code":105876,"language":34661,"meta":69,"style":69},"XML = \"\"\"\n...\n\"\"\"\n",[71,105878,105879,105887,105892],{"__ignoreMap":69},[74,105880,105881,105883,105885],{"class":76,"line":77},[74,105882,105595],{"class":134},[74,105884,17843],{"class":80},[74,105886,105600],{"class":190},[74,105888,105889],{"class":76,"line":94},[74,105890,105891],{"class":190},"...\n",[74,105893,105894],{"class":76,"line":1141},[74,105895,99979],{"class":190},[19,105897,105898,105899,105902],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[71,105900,105901],{},"freejoint"," 的方块。",[19,105904,105905],{},"编译模型：",[64,105907,105909],{"className":34659,"code":105908,"language":34661,"meta":69,"style":69},"model = mujoco.MjModel.from_xml_string(XML)\n",[71,105910,105911],{"__ignoreMap":69},[74,105912,105913,105916,105918,105920,105922],{"class":76,"line":77},[74,105914,105915],{"class":84},"model ",[74,105917,131],{"class":80},[74,105919,105693],{"class":84},[74,105921,105595],{"class":134},[74,105923,91],{"class":84},[19,105925,105926],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,105928,105929],{},"创建数据：",[64,105931,105933],{"className":34659,"code":105932,"language":34661,"meta":69,"style":69},"data = mujoco.MjData(model)\n",[71,105934,105935],{"__ignoreMap":69},[74,105936,105937,105940,105942],{"class":76,"line":77},[74,105938,105939],{"class":84},"data ",[74,105941,131],{"class":80},[74,105943,105707],{"class":84},[19,105945,105946,105948,105949,105951],{},[71,105947,37682],{}," 会保存仿真当前状态。刚创建时，时间是 ",[71,105950,277],{},"，方块还在初始位置。",[19,105953,105954],{},"推进仿真：",[64,105956,105958],{"className":34659,"code":105957,"language":34661,"meta":69,"style":69},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[71,105959,105960,105976],{"__ignoreMap":69},[74,105961,105962,105964,105966,105968,105970,105972,105974],{"class":76,"line":77},[74,105963,2988],{"class":80},[74,105965,105782],{"class":84},[74,105967,30324],{"class":80},[74,105969,36724],{"class":134},[74,105971,85],{"class":84},[74,105973,397],{"class":134},[74,105975,35067],{"class":84},[74,105977,105978],{"class":76,"line":94},[74,105979,105980],{"class":84},"    mujoco.mj_step(model, data)\n",[19,105982,105983,105984,105986],{},"每次 ",[71,105985,105496],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[44,105988,105989],{"id":105989},"代码逐行细讲",[19,105991,105992],{},"下面把完整代码按新手视角拆开讲。",[64,105994,105995],{"className":34659,"code":105859,"language":34661,"meta":69,"style":69},[71,105996,105997],{"__ignoreMap":69},[74,105998,105999,106001],{"class":76,"line":77},[74,106000,34673],{"class":80},[74,106002,105582],{"class":84},[19,106004,106005,106007,106008,298,106010,298,106012,32666],{},[71,106006,34673],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[71,106009,104956],{},[71,106011,104961],{},[71,106013,106014],{},"mujoco.mj_step",[64,106016,106017],{"className":34659,"code":105876,"language":34661,"meta":69,"style":69},[71,106018,106019,106027,106031],{"__ignoreMap":69},[74,106020,106021,106023,106025],{"class":76,"line":77},[74,106022,105595],{"class":134},[74,106024,17843],{"class":80},[74,106026,105600],{"class":190},[74,106028,106029],{"class":76,"line":94},[74,106030,105891],{"class":190},[74,106032,106033],{"class":76,"line":1141},[74,106034,99979],{"class":190},[19,106036,106037,106039,106040,106043],{},[71,106038,105595],{}," 是一个变量名。右边的三引号 ",[71,106041,106042],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[64,106045,106046],{"className":57348,"code":105605,"language":57350,"meta":69,"style":69},[71,106047,106048],{"__ignoreMap":69},[74,106049,106050,106052,106054,106057,106059,106062],{"class":76,"line":77},[74,106051,996],{"class":84},[74,106053,105302],{"class":55581},[74,106055,106056],{"class":1925}," model",[74,106058,131],{"class":84},[74,106060,106061],{"class":190},"\"first_sim\"",[74,106063,55588],{"class":84},[19,106065,106066,106067,106070,106071,32666],{},"这是 XML 的根标签。",[71,106068,106069],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[71,106072,106073],{},"first_sim",[64,106075,106076],{"className":57348,"code":105464,"language":57350,"meta":69,"style":69},[71,106077,106078],{"__ignoreMap":69},[74,106079,106080,106082,106084,106086,106088,106090,106092,106094,106096],{"class":76,"line":77},[74,106081,996],{"class":84},[74,106083,73447],{"class":55581},[74,106085,105475],{"class":1925},[74,106087,131],{"class":84},[74,106089,105480],{"class":190},[74,106091,105483],{"class":1925},[74,106093,131],{"class":84},[74,106095,105488],{"class":190},[74,106097,105425],{"class":84},[19,106099,106100,106102,106103,106106,106107,106110],{},[71,106101,73447],{}," 用来设置仿真参数。",[71,106104,106105],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[71,106108,106109],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[64,106112,106114],{"className":57348,"code":106113,"language":57350,"meta":69,"style":69},"\u003Cworldbody>\n",[71,106115,106116],{"__ignoreMap":69},[74,106117,106118,106120,106123],{"class":76,"line":77},[74,106119,996],{"class":84},[74,106121,106122],{"class":55581},"worldbody",[74,106124,55588],{"class":84},[19,106126,106127,106129],{},[71,106128,106122],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[64,106131,106133],{"className":57348,"code":106132,"language":57350,"meta":69,"style":69},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[71,106134,106135],{"__ignoreMap":69},[74,106136,106137,106139,106141,106143,106145,106148,106150,106152,106155,106157,106159,106162,106164,106166,106169],{"class":76,"line":77},[74,106138,996],{"class":84},[74,106140,105401],{"class":55581},[74,106142,19199],{"class":1925},[74,106144,131],{"class":84},[74,106146,106147],{"class":190},"\"floor\"",[74,106149,58105],{"class":1925},[74,106151,131],{"class":84},[74,106153,106154],{"class":190},"\"plane\"",[74,106156,105417],{"class":1925},[74,106158,131],{"class":84},[74,106160,106161],{"class":190},"\"2 2 0.1\"",[74,106163,83048],{"class":1925},[74,106165,131],{"class":84},[74,106167,106168],{"class":190},"\"0.8 0.8 0.8 1\"",[74,106170,105425],{"class":84},[19,106172,106173,106174,106176,106177,106180,106181,106184,106185,106187],{},"这行创建地面。",[71,106175,105401],{}," 是几何体。",[71,106178,106179],{},"name=\"floor\""," 是名字。",[71,106182,106183],{},"type=\"plane\""," 表示平面。",[71,106186,59391],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[64,106189,106191],{"className":57348,"code":106190,"language":57350,"meta":69,"style":69},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[71,106192,106193],{"__ignoreMap":69},[74,106194,106195,106197,106199,106201,106203,106205,106207,106209,106211],{"class":76,"line":77},[74,106196,996],{"class":84},[74,106198,56081],{"class":55581},[74,106200,19199],{"class":1925},[74,106202,131],{"class":84},[74,106204,57772],{"class":190},[74,106206,105387],{"class":1925},[74,106208,131],{"class":84},[74,106210,105392],{"class":190},[74,106212,55588],{"class":84},[19,106214,106215,106216,32666,106218,106221,106222,106224],{},"这行创建一个刚体，名字叫 ",[71,106217,57995],{},[71,106219,106220],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[71,106223,105450],{},"，也就是离地面 1 米高。",[64,106226,106228],{"className":57348,"code":106227,"language":57350,"meta":69,"style":69},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[71,106229,106230],{"__ignoreMap":69},[74,106231,106232,106234,106236,106238,106240,106243],{"class":76,"line":77},[74,106233,996],{"class":84},[74,106235,105901],{"class":55581},[74,106237,19199],{"class":1925},[74,106239,131],{"class":84},[74,106241,106242],{"class":190},"\"box_free\"",[74,106244,105425],{"class":84},[19,106246,106247,106248,106250],{},"这行很重要。",[71,106249,105901],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[64,106252,106254],{"className":57348,"code":106253,"language":57350,"meta":69,"style":69},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[71,106255,106256],{"__ignoreMap":69},[74,106257,106258,106260,106262,106264,106266,106268,106270,106272,106274,106276,106278,106280,106283,106285,106287,106289,106291,106294],{"class":76,"line":77},[74,106259,996],{"class":84},[74,106261,105401],{"class":55581},[74,106263,19199],{"class":1925},[74,106265,131],{"class":84},[74,106267,105408],{"class":190},[74,106269,58105],{"class":1925},[74,106271,131],{"class":84},[74,106273,57772],{"class":190},[74,106275,105417],{"class":1925},[74,106277,131],{"class":84},[74,106279,105422],{"class":190},[74,106281,106282],{"class":1925}," mass",[74,106284,131],{"class":84},[74,106286,3641],{"class":190},[74,106288,83048],{"class":1925},[74,106290,131],{"class":84},[74,106292,106293],{"class":190},"\"1 0 0 1\"",[74,106295,105425],{"class":84},[19,106297,106298,106299,106302,106303,106306,106307,106310,106311,106314],{},"这行给 box body 添加一个盒子形状。",[71,106300,106301],{},"type=\"box\""," 表示形状是盒子。",[71,106304,106305],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[71,106308,106309],{},"mass=\"1\""," 表示质量是 1。",[71,106312,106313],{},"rgba=\"1 0 0 1\""," 表示红色。",[64,106316,106318],{"className":34659,"code":106317,"language":34661,"meta":69,"style":69},"def main() -> None:\n",[71,106319,106320],{"__ignoreMap":69},[74,106321,106322,106324,106326,106328,106330],{"class":76,"line":77},[74,106323,36228],{"class":80},[74,106325,1935],{"class":1925},[74,106327,105679],{"class":84},[74,106329,99967],{"class":134},[74,106331,3702],{"class":84},[19,106333,106334,106336,106337,106340,106341,106344],{},[71,106335,36228],{}," 用来定义函数。这里定义了一个叫 ",[71,106338,106339],{},"main"," 的函数。",[71,106342,106343],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[64,106346,106347],{"className":34659,"code":105908,"language":34661,"meta":69,"style":69},[71,106348,106349],{"__ignoreMap":69},[74,106350,106351,106353,106355,106357,106359],{"class":76,"line":77},[74,106352,105915],{"class":84},[74,106354,131],{"class":80},[74,106356,105693],{"class":84},[74,106358,105595],{"class":134},[74,106360,91],{"class":84},[19,106362,106363,106364,106367],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[71,106365,106366],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[64,106369,106370],{"className":34659,"code":105932,"language":34661,"meta":69,"style":69},[71,106371,106372],{"__ignoreMap":69},[74,106373,106374,106376,106378],{"class":76,"line":77},[74,106375,105939],{"class":84},[74,106377,131],{"class":80},[74,106379,105707],{"class":84},[19,106381,106382,106383,106385,106386,106388],{},"这行创建仿真数据。",[71,106384,37682],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[71,106387,37682],{}," 都会变化。",[64,106390,106392],{"className":34659,"code":106391,"language":34661,"meta":69,"style":69},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[71,106393,106394,106404,106414],{"__ignoreMap":69},[74,106395,106396,106398,106400,106402],{"class":76,"line":77},[74,106397,34696],{"class":134},[74,106399,85],{"class":84},[74,106401,105720],{"class":190},[74,106403,105723],{"class":84},[74,106405,106406,106408,106410,106412],{"class":76,"line":94},[74,106407,34696],{"class":134},[74,106409,85],{"class":84},[74,106411,105732],{"class":190},[74,106413,105735],{"class":84},[74,106415,106416,106418,106420,106422],{"class":76,"line":1141},[74,106417,34696],{"class":134},[74,106419,85],{"class":84},[74,106421,105744],{"class":190},[74,106423,105747],{"class":84},[19,106425,106426,106428,106429,106432,106433,106436,106437,106440,106441,106444],{},[71,106427,34696],{}," 用来输出信息。",[71,106430,106431],{},"model.nq"," 是位置变量数量，",[71,106434,106435],{},"model.nv"," 是速度变量数量，",[71,106438,106439],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[71,106442,106443],{},"nu"," 是 0。",[64,106446,106448],{"className":34659,"code":106447,"language":34661,"meta":69,"style":69},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[71,106449,106450,106460],{"__ignoreMap":69},[74,106451,106452,106454,106456,106458],{"class":76,"line":77},[74,106453,34696],{"class":134},[74,106455,85],{"class":84},[74,106457,105756],{"class":190},[74,106459,105759],{"class":84},[74,106461,106462,106464,106466,106468],{"class":76,"line":94},[74,106463,34696],{"class":134},[74,106465,85],{"class":84},[74,106467,105768],{"class":190},[74,106469,105771],{"class":84},[19,106471,106472,106473,106475,106476,106478,106479,106482],{},"这里打印初始时间和初始位置。",[71,106474,105348],{}," 一开始是 0。",[71,106477,105351],{}," 是位置数组。",[71,106480,106481],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[64,106484,106485],{"className":34659,"code":105957,"language":34661,"meta":69,"style":69},[71,106486,106487,106503],{"__ignoreMap":69},[74,106488,106489,106491,106493,106495,106497,106499,106501],{"class":76,"line":77},[74,106490,2988],{"class":80},[74,106492,105782],{"class":84},[74,106494,30324],{"class":80},[74,106496,36724],{"class":134},[74,106498,85],{"class":84},[74,106500,397],{"class":134},[74,106502,35067],{"class":84},[74,106504,106505],{"class":76,"line":94},[74,106506,105980],{"class":84},[19,106508,106509,106511,106512,106515,106516,106518,106519,106521],{},[71,106510,2988],{}," 是循环。",[71,106513,106514],{},"range(100)"," 表示循环 100 次。",[71,106517,1078],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[71,106520,105496],{},"，仿真就前进一步。",[64,106523,106525],{"className":34659,"code":106524,"language":34661,"meta":69,"style":69},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[71,106526,106527,106537],{"__ignoreMap":69},[74,106528,106529,106531,106533,106535],{"class":76,"line":77},[74,106530,34696],{"class":134},[74,106532,85],{"class":84},[74,106534,105810],{"class":190},[74,106536,105759],{"class":84},[74,106538,106539,106541,106543,106545],{"class":76,"line":94},[74,106540,34696],{"class":134},[74,106542,85],{"class":84},[74,106544,105821],{"class":190},[74,106546,105771],{"class":84},[19,106548,106549],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[64,106551,106553],{"className":34659,"code":106552,"language":34661,"meta":69,"style":69},"if __name__ == \"__main__\":\n    main()\n",[71,106554,106555,106567],{"__ignoreMap":69},[74,106556,106557,106559,106561,106563,106565],{"class":76,"line":77},[74,106558,1493],{"class":80},[74,106560,35501],{"class":134},[74,106562,105840],{"class":80},[74,106564,105843],{"class":190},[74,106566,3702],{"class":84},[74,106568,106569],{"class":76,"line":94},[74,106570,105850],{"class":84},[19,106572,106573,106574,106577,106578,32666],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[71,106575,106576],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[71,106579,106576],{},[19,106581,106582],{},"运行:",[64,106584,106586],{"className":28102,"code":106585,"language":28104,"meta":69,"style":69},"python ch1_first_sim.py\n",[71,106587,106588],{"__ignoreMap":69},[74,106589,106590,106592],{"class":76,"line":77},[74,106591,34661],{"class":1925},[74,106593,105567],{"class":190},[14,106595,106597],{"id":106596},"_5运行结果说明","5.运行结果说明",[19,106599,106600],{},"你应该看到类似输出:",[64,106602,106605],{"className":106603,"code":106604,"language":9466,"meta":69},[9464],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[71,106606,106604],{"__ignoreMap":69},[19,106608,106609,106611,106612,106615,106616,32666],{},[71,106610,105901],{}," 有 7 个位置变量: ",[71,106613,106614],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[71,106617,106618],{},"vx vy vz wx wy wz",[19,106620,106621,106622,106625],{},"你还会看到 ",[71,106623,106624],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,106627,106629],{"id":106628},"_6验证步骤","6.验证步骤",[19,106631,106632],{},"确认版本:",[64,106634,106635],{"className":28102,"code":105220,"language":28104,"meta":69,"style":69},[71,106636,106637],{"__ignoreMap":69},[74,106638,106639,106641,106643],{"class":76,"line":77},[74,106640,34661],{"class":1925},[74,106642,34639],{"class":134},[74,106644,105231],{"class":190},[19,106646,106647],{},"确认导入的是官方 bindings:",[64,106649,106651],{"className":28102,"code":106650,"language":28104,"meta":69,"style":69},"python -c \"import mujoco; print(mujoco)\"\n",[71,106652,106653],{"__ignoreMap":69},[74,106654,106655,106657,106659],{"class":76,"line":77},[74,106656,34661],{"class":1925},[74,106658,34639],{"class":134},[74,106660,106661],{"class":190}," \"import mujoco; print(mujoco)\"\n",[19,106663,106664],{},"运行程序:",[64,106666,106667],{"className":28102,"code":106585,"language":28104,"meta":69,"style":69},[71,106668,106669],{"__ignoreMap":69},[74,106670,106671,106673],{"class":76,"line":77},[74,106672,34661],{"class":1925},[74,106674,105567],{"class":190},[19,106676,106677,106678,106681,106682,32666],{},"检查 ",[71,106679,106680],{},"final time"," 是否约等于 ",[71,106683,106684],{},"1.0",[19,106686,106687],{},"再做几个小实验：",[27,106689,106690,106700,106708,106721],{},[30,106691,106692,106693,106695,106696,106699],{},"把 ",[71,106694,106220],{}," 改成 ",[71,106697,106698],{},"pos=\"0 0 2\"","，观察初始高度变化。",[30,106701,106692,106702,106695,106704,106707],{},[71,106703,106109],{},[71,106705,106706],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[30,106709,106692,106710,106695,106712,106715,106716,106718,106719,32666],{},[71,106711,106105],{},[71,106713,106714],{},"timestep=\"0.005\"","，观察 100 步后的 ",[71,106717,106680],{}," 是否变成约 ",[71,106720,39610],{},[30,106722,106723,106724,106727],{},"删除 ",[71,106725,106726],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,106729,106730],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,106732,106734],{"id":106733},"_7常见错误与解决方案","7.常见错误与解决方案",[44,106736,106738],{"id":106737},"modulenotfounderror-no-module-named-mujoco",[71,106739,106740],{},"ModuleNotFoundError: No module named 'mujoco'",[19,106742,106743],{},"解决:",[64,106745,106747],{"className":28102,"code":106746,"language":28104,"meta":69,"style":69},"pip install \"mujoco>=2.3\"\n",[71,106748,106749],{"__ignoreMap":69},[74,106750,106751,106753,106755],{"class":76,"line":77},[74,106752,28111],{"class":1925},[74,106754,28114],{"class":190},[74,106756,106757],{"class":190}," \"mujoco>=2.3\"\n",[44,106759,106761],{"id":106760},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,106763,106764],{},"先安装系统依赖:",[64,106766,106768],{"className":28102,"code":106767,"language":28104,"meta":69,"style":69},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[71,106769,106770],{"__ignoreMap":69},[74,106771,106772,106774,106776,106778,106780,106783,106785,106788,106790,106793,106795],{"class":76,"line":77},[74,106773,28857],{"class":1925},[74,106775,30596],{"class":190},[74,106777,28114],{"class":190},[74,106779,30681],{"class":134},[74,106781,106782],{"class":190}," mesa-libGL",[74,106784,105095],{"class":190},[74,106786,106787],{"class":190}," glfw",[74,106789,105115],{"class":190},[74,106791,106792],{"class":190}," libX11",[74,106794,105128],{"class":190},[74,106796,106797],{"class":190}," libXrandr\n",[44,106799,106801],{"id":106800},"xml-解析失败","XML 解析失败",[19,106803,106804],{},"检查:",[27,106806,106807,106810,106813,106819],{},[30,106808,106809],{},"标签是否闭合",[30,106811,106812],{},"属性是否带引号",[30,106814,106815,106816],{},"根节点是否是 ",[71,106817,106818],{},"\u003Cmujoco>",[30,106820,106821,106823,106824,106827],{},[71,106822,56081],{}," 是否放在 ",[71,106825,106826],{},"\u003Cworldbody>"," 内部",[44,106829,106831,106833,106834],{"id":106830},"final-time-不是严格等于-10",[71,106832,106680],{}," 不是严格等于 ",[71,106835,106684],{},[19,106837,106838],{},"这通常不是错误。浮点数计算可能得到：",[64,106840,106843],{"className":106841,"code":106842,"language":9466,"meta":69},[9464],"1.0000000000000007\n",[71,106844,106842],{"__ignoreMap":69},[19,106846,106847,106848,106850],{},"只要接近 ",[71,106849,106684],{}," 就正常。",[44,106852,106853],{"id":106853},"方块没有掉下来",[19,106855,106856],{},"检查：",[27,106858,106859,106865,106871,106876],{},[30,106860,106861,106862],{},"方块 body 里是否有 ",[71,106863,106864],{},"\u003Cfreejoint\u002F>",[30,106866,106867,106868],{},"重力是否是 ",[71,106869,106870],{},"0 0 -9.81",[30,106872,106873,106874],{},"是否真的调用了 ",[71,106875,104966],{},[30,106877,106878,106879,106881,106882],{},"你看的是否是 ",[71,106880,106624],{},"，不是 ",[71,106883,106884],{},"initial qpos",[14,106886,106888],{"id":106887},"_8本章小结","8.本章小结",[19,106890,106891],{},"本章你已经完成了 MuJoCo 的最小闭环：",[64,106893,106896],{"className":106894,"code":106895,"language":9466,"meta":69},[9464],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[71,106897,106895],{"__ignoreMap":69},[19,106899,106900],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5090,106902,106903],{},"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":69,"searchDepth":94,"depth":94,"links":106905},[106906,106907,106908,106913,106917,106918,106919,106927],{"id":104927,"depth":94,"text":104928},{"id":105050,"depth":94,"text":105051},{"id":105325,"depth":94,"text":105326,"children":106909},[106910,106911,106912],{"id":105363,"depth":1141,"text":105364},{"id":105457,"depth":1141,"text":105458},{"id":105509,"depth":1141,"text":105510},{"id":105533,"depth":94,"text":105534,"children":106914},[106915,106916],{"id":105853,"depth":1141,"text":105853},{"id":105989,"depth":1141,"text":105989},{"id":106596,"depth":94,"text":106597},{"id":106628,"depth":94,"text":106629},{"id":106733,"depth":94,"text":106734,"children":106920},[106921,106922,106923,106924,106926],{"id":106737,"depth":1141,"text":106740},{"id":106760,"depth":1141,"text":106761},{"id":106800,"depth":1141,"text":106801},{"id":106830,"depth":1141,"text":106925},"final time 不是严格等于 1.0",{"id":106853,"depth":1141,"text":106853},{"id":106887,"depth":94,"text":106888},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":104919,"description":69},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":106934,"title":106935,"body":106936,"description":69,"extension":5121,"meta":108592,"navigation":2362,"path":108593,"seo":108594,"stem":108595,"__hash__":108596},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":106937,"toc":108568},[106938,106941,106943,106946,106949,106966,107061,107064,107070,107072,107074,107098,107101,107115,107118,107159,107161,107174,107176,107179,107227,107239,107242,107245,107251,107264,107331,107334,107353,107356,107359,107365,107367,107376,107379,107383,107392,107474,107483,107487,107493,107507,107517,107519,107849,107852,107864,107866,107877,107879,107882,107900,107903,107906,107924,107935,107938,107953,107963,107965,107986,108003,108023,108029,108069,108085,108101,108107,108110,108134,108150,108155,108185,108202,108227,108230,108245,108254,108269,108278,108293,108300,108302,108312,108325,108332,108335,108374,108381,108383,108435,108437,108443,108446,108453,108460,108463,108465,108483,108486,108489,108523,108535,108537,108540,108562,108565],[10,106939,106935],{"id":106940},"_2xml-与-mjcf-物理建模基础",[14,106942,104928],{"id":104927},[19,106944,106945],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,106947,106948],{},"本章结束后，你应该能看懂一个简单模型里：",[27,106950,106951,106954,106957,106960,106963],{},[30,106952,106953],{},"地面在哪里。",[30,106955,106956],{},"物体初始位置在哪里。",[30,106958,106959],{},"几何体是什么形状。",[30,106961,106962],{},"哪些 body 可以自由运动。",[30,106964,106965],{},"如何用名字在 Python 里找到 XML 中的对象。",[223,106967,106968,106978],{},[226,106969,106970],{},[229,106971,106972,106975],{},[232,106973,106974],{"align":28016},"标签",[232,106976,106977],{"align":28016},"作用",[270,106979,106980,106989,106999,107008,107018,107028,107041,107051],{},[229,106981,106982,106986],{},[275,106983,106984],{"align":28016},[71,106985,106818],{},[275,106987,106988],{"align":28016},"根节点",[229,106990,106991,106996],{},[275,106992,106993],{"align":28016},[71,106994,106995],{},"\u003Coption>",[275,106997,106998],{"align":28016},"仿真参数",[229,107000,107001,107005],{},[275,107002,107003],{"align":28016},[71,107004,106826],{},[275,107006,107007],{"align":28016},"世界中的物体",[229,107009,107010,107015],{},[275,107011,107012],{"align":28016},[71,107013,107014],{},"\u003Cbody>",[275,107016,107017],{"align":28016},"刚体",[229,107019,107020,107025],{},[275,107021,107022],{"align":28016},[71,107023,107024],{},"\u003Cgeom>",[275,107026,107027],{"align":28016},"几何体、碰撞体、可视体",[229,107029,107030,107038],{},[275,107031,107032,29259,107035],{"align":28016},[71,107033,107034],{},"\u003Cjoint>",[71,107036,107037],{},"\u003Cfreejoint>",[275,107039,107040],{"align":28016},"关节",[229,107042,107043,107048],{},[275,107044,107045],{"align":28016},[71,107046,107047],{},"\u003Csite>",[275,107049,107050],{"align":28016},"标记点",[229,107052,107053,107058],{},[275,107054,107055],{"align":28016},[71,107056,107057],{},"\u003Cactuator>",[275,107059,107060],{"align":28016},"控制器",[19,107062,107063],{},"初学时可以先记住：",[64,107065,107068],{"className":107066,"code":107067,"language":9466,"meta":69},[9464],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[71,107069,107067],{"__ignoreMap":69},[14,107071,105051],{"id":105050},[19,107073,105054],{},[64,107075,107077],{"className":28102,"code":107076,"language":28104,"meta":69,"style":69},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[71,107078,107079],{"__ignoreMap":69},[74,107080,107081,107083,107085,107087,107089,107091,107093,107095],{"class":76,"line":77},[74,107082,28857],{"class":1925},[74,107084,30596],{"class":190},[74,107086,28114],{"class":190},[74,107088,30681],{"class":134},[74,107090,106782],{"class":190},[74,107092,105095],{"class":190},[74,107094,106787],{"class":190},[74,107096,107097],{"class":190}," glfw-devel\n",[19,107099,107100],{},"pip:",[64,107102,107103],{"className":28102,"code":105200,"language":28104,"meta":69,"style":69},[71,107104,107105],{"__ignoreMap":69},[74,107106,107107,107109,107111,107113],{"class":76,"line":77},[74,107108,28111],{"class":1925},[74,107110,28114],{"class":190},[74,107112,105211],{"class":190},[74,107114,105214],{"class":190},[19,107116,107117],{},"conda:",[64,107119,107121],{"className":28102,"code":107120,"language":28104,"meta":69,"style":69},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[71,107122,107123,107140,107149],{"__ignoreMap":69},[74,107124,107125,107127,107129,107131,107134,107136,107138],{"class":76,"line":77},[74,107126,34611],{"class":1925},[74,107128,33457],{"class":190},[74,107130,29396],{"class":134},[74,107132,107133],{"class":190}," mujoco-xml",[74,107135,105256],{"class":190},[74,107137,105259],{"class":134},[74,107139,105262],{"class":134},[74,107141,107142,107144,107146],{"class":76,"line":94},[74,107143,34611],{"class":1925},[74,107145,105269],{"class":190},[74,107147,107148],{"class":190}," mujoco-xml\n",[74,107150,107151,107153,107155,107157],{"class":76,"line":1141},[74,107152,28111],{"class":1925},[74,107154,28114],{"class":190},[74,107156,105211],{"class":190},[74,107158,105214],{"class":190},[19,107160,105285],{},[27,107162,107163,107166,107171],{},[30,107164,107165],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[30,107167,107168,107169,32666],{},"本章使用基础标签，适用于 ",[71,107170,105308],{},[30,107172,107173],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,107175,105326],{"id":105325},[19,107177,107178],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[64,107180,107182],{"className":57348,"code":107181,"language":57350,"meta":69,"style":69},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[71,107183,107184,107198,107206,107211,107219],{"__ignoreMap":69},[74,107185,107186,107188,107190,107192,107194,107196],{"class":76,"line":77},[74,107187,996],{"class":84},[74,107189,105302],{"class":55581},[74,107191,106056],{"class":1925},[74,107193,131],{"class":84},[74,107195,66960],{"class":190},[74,107197,55588],{"class":84},[74,107199,107200,107202,107204],{"class":76,"line":94},[74,107201,56425],{"class":84},[74,107203,106122],{"class":55581},[74,107205,55588],{"class":84},[74,107207,107208],{"class":76,"line":1141},[74,107209,107210],{"class":84},"    ...\n",[74,107212,107213,107215,107217],{"class":76,"line":1156},[74,107214,56698],{"class":84},[74,107216,106122],{"class":55581},[74,107218,55588],{"class":84},[74,107220,107221,107223,107225],{"class":76,"line":1162},[74,107222,56066],{"class":84},[74,107224,105302],{"class":55581},[74,107226,55588],{"class":84},[19,107228,107229,107231,107232,107234,107235,107238],{},[71,107230,56081],{}," 表示刚体。",[71,107233,105401],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[71,107236,107237],{},"joint"," 表示刚体相对父刚体如何运动。",[44,107240,107241],{"id":107241},"层级结构非常重要",[19,107243,107244],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[64,107246,107249],{"className":107247,"code":107248,"language":9466,"meta":69},[9464],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[71,107250,107248],{"__ignoreMap":69},[19,107252,107253,105299,107256,107259,107260,107263],{},[71,107254,107255],{},"red_box_geom",[71,107257,107258],{},"box_center"," 都属于 ",[71,107261,107262],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[64,107265,107267],{"className":57348,"code":107266,"language":57350,"meta":69,"style":69},"\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",[71,107268,107269,107289,107303,107323],{"__ignoreMap":69},[74,107270,107271,107273,107275,107277,107279,107281,107283,107285,107287],{"class":76,"line":77},[74,107272,996],{"class":84},[74,107274,56081],{"class":55581},[74,107276,19199],{"class":1925},[74,107278,131],{"class":84},[74,107280,57772],{"class":190},[74,107282,105387],{"class":1925},[74,107284,131],{"class":84},[74,107286,105392],{"class":190},[74,107288,55588],{"class":84},[74,107290,107291,107293,107295,107297,107299,107301],{"class":76,"line":94},[74,107292,56425],{"class":84},[74,107294,105901],{"class":55581},[74,107296,19199],{"class":1925},[74,107298,131],{"class":84},[74,107300,106242],{"class":190},[74,107302,105425],{"class":84},[74,107304,107305,107307,107309,107311,107313,107315,107317,107319,107321],{"class":76,"line":1141},[74,107306,56425],{"class":84},[74,107308,105401],{"class":55581},[74,107310,58105],{"class":1925},[74,107312,131],{"class":84},[74,107314,57772],{"class":190},[74,107316,105417],{"class":1925},[74,107318,131],{"class":84},[74,107320,105422],{"class":190},[74,107322,105425],{"class":84},[74,107324,107325,107327,107329],{"class":76,"line":1156},[74,107326,56066],{"class":84},[74,107328,56081],{"class":55581},[74,107330,55588],{"class":84},[19,107332,107333],{},"含义:",[27,107335,107336,107342,107347,107350],{},[30,107337,107338,107339,107341],{},"创建名为 ",[71,107340,57995],{}," 的刚体",[30,107343,107344,107345],{},"初始位置在世界坐标 ",[71,107346,105450],{},[30,107348,107349],{},"它有一个自由关节",[30,107351,107352],{},"它有一个盒子几何体",[44,107354,107355],{"id":107355},"坐标怎么理解",[19,107357,107358],{},"MuJoCo 默认使用三维坐标：",[64,107360,107363],{"className":107361,"code":107362,"language":9466,"meta":69},[9464],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[71,107364,107362],{"__ignoreMap":69},[19,107366,18912],{},[64,107368,107370],{"className":57348,"code":107369,"language":57350,"meta":69,"style":69},"pos=\"0 0 1\"\n",[71,107371,107372],{"__ignoreMap":69},[74,107373,107374],{"class":76,"line":77},[74,107375,107369],{"class":84},[19,107377,107378],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[44,107380,107382],{"id":107381},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,107384,107385,107386,86811,107389,107391],{},"不同 ",[71,107387,107388],{},"type",[71,107390,35777],{}," 含义不同：",[223,107393,107394,107409],{},[226,107395,107396],{},[229,107397,107398,107402,107407],{},[232,107399,107400],{"align":28016},[71,107401,107388],{},[232,107403,107404,107406],{"align":28016},[71,107405,35777],{}," 示例",[232,107408,104981],{"align":28016},[270,107410,107411,107425,107440,107459],{},[229,107412,107413,107417,107422],{},[275,107414,107415],{"align":28016},[71,107416,57995],{},[275,107418,107419],{"align":28016},[71,107420,107421],{},"size=\"0.1 0.2 0.3\"",[275,107423,107424],{"align":28016},"x\u002Fy\u002Fz 半边长，不是完整长度",[229,107426,107427,107432,107437],{},[275,107428,107429],{"align":28016},[71,107430,107431],{},"sphere",[275,107433,107434],{"align":28016},[71,107435,107436],{},"size=\"0.1\"",[275,107438,107439],{"align":28016},"球半径",[229,107441,107442,107447,107452],{},[275,107443,107444],{"align":28016},[71,107445,107446],{},"capsule",[275,107448,107449],{"align":28016},[71,107450,107451],{},"size=\"0.03\"",[275,107453,107454,107455,107458],{"align":28016},"胶囊半径，长度常用 ",[71,107456,107457],{},"fromto"," 指定",[229,107460,107461,107466,107471],{},[275,107462,107463],{"align":28016},[71,107464,107465],{},"plane",[275,107467,107468],{"align":28016},[71,107469,107470],{},"size=\"3 3 0.1\"",[275,107472,107473],{"align":28016},"可视平面大小，通常当地面",[19,107475,107476,107477,107479,107480,107482],{},"最容易踩坑的是 box：",[71,107478,106305],{}," 表示边长大约是 ",[71,107481,36318],{},"，因为 MuJoCo 用的是半边长。",[44,107484,107486],{"id":107485},"site-是什么","site 是什么",[19,107488,107489,107492],{},[71,107490,107491],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[27,107494,107495,107498,107501,107504],{},[30,107496,107497],{},"标记机械臂末端。",[30,107499,107500],{},"标记目标位置。",[30,107502,107503],{},"放传感器或相机参考点。",[30,107505,107506],{},"在 Python 中读取某个关键点的世界坐标。",[19,107508,107509,107510,105299,107513,107516],{},"在后面的 Reacher 任务中，",[71,107511,107512],{},"tip",[71,107514,107515],{},"target"," 就会用 site 表示。",[14,107518,105534],{"id":105533},[64,107520,107522],{"className":34659,"code":107521,"language":34661,"meta":69,"style":69},"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",[71,107523,107524,107530,107540,107544,107548,107556,107561,107565,107569,107573,107578,107582,107587,107592,107597,107602,107606,107610,107614,107618,107622,107626,107638,107650,107658,107662,107677,107692,107696,107709,107724,107737,107750,107754,107770,107774,107778,107789,107801,107813,107825,107829,107833,107845],{"__ignoreMap":69},[74,107525,107526,107528],{"class":76,"line":77},[74,107527,34673],{"class":80},[74,107529,105582],{"class":84},[74,107531,107532,107534,107536,107538],{"class":76,"line":94},[74,107533,34673],{"class":80},[74,107535,35661],{"class":84},[74,107537,35664],{"class":80},[74,107539,35667],{"class":84},[74,107541,107542],{"class":76,"line":1141},[74,107543,2363],{"emptyLinePlaceholder":2362},[74,107545,107546],{"class":76,"line":1156},[74,107547,2363],{"emptyLinePlaceholder":2362},[74,107549,107550,107552,107554],{"class":76,"line":1162},[74,107551,105595],{"class":134},[74,107553,17843],{"class":80},[74,107555,105600],{"class":190},[74,107557,107558],{"class":76,"line":1176},[74,107559,107560],{"class":190},"\u003Cmujoco model=\"xml_basic\">\n",[74,107562,107563],{"class":76,"line":1182},[74,107564,105610],{"class":190},[74,107566,107567],{"class":76,"line":1273},[74,107568,2363],{"emptyLinePlaceholder":2362},[74,107570,107571],{"class":76,"line":1279},[74,107572,105619],{"class":190},[74,107574,107575],{"class":76,"line":1291},[74,107576,107577],{"class":190},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[74,107579,107580],{"class":76,"line":1574},[74,107581,2363],{"emptyLinePlaceholder":2362},[74,107583,107584],{"class":76,"line":1579},[74,107585,107586],{"class":190},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[74,107588,107589],{"class":76,"line":1585},[74,107590,107591],{"class":190},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[74,107593,107594],{"class":76,"line":1590},[74,107595,107596],{"class":190},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[74,107598,107599],{"class":76,"line":1604},[74,107600,107601],{"class":190},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[74,107603,107604],{"class":76,"line":1609},[74,107605,105648],{"class":190},[74,107607,107608],{"class":76,"line":1615},[74,107609,105653],{"class":190},[74,107611,107612],{"class":76,"line":1636},[74,107613,105658],{"class":190},[74,107615,107616],{"class":76,"line":1641},[74,107617,99979],{"class":190},[74,107619,107620],{"class":76,"line":1655},[74,107621,2363],{"emptyLinePlaceholder":2362},[74,107623,107624],{"class":76,"line":1660},[74,107625,2363],{"emptyLinePlaceholder":2362},[74,107627,107628,107630,107632,107634,107636],{"class":76,"line":1689},[74,107629,36228],{"class":80},[74,107631,1935],{"class":1925},[74,107633,105679],{"class":84},[74,107635,99967],{"class":134},[74,107637,3702],{"class":84},[74,107639,107640,107642,107644,107646,107648],{"class":76,"line":1694},[74,107641,105688],{"class":84},[74,107643,131],{"class":80},[74,107645,105693],{"class":84},[74,107647,105595],{"class":134},[74,107649,91],{"class":84},[74,107651,107652,107654,107656],{"class":76,"line":1711},[74,107653,105702],{"class":84},[74,107655,131],{"class":80},[74,107657,105707],{"class":84},[74,107659,107660],{"class":76,"line":1716},[74,107661,2363],{"emptyLinePlaceholder":2362},[74,107663,107664,107667,107669,107672,107675],{"class":76,"line":1721},[74,107665,107666],{"class":84},"    box_body_id ",[74,107668,131],{"class":80},[74,107670,107671],{"class":84}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[74,107673,107674],{"class":190},"\"red_box\"",[74,107676,91],{"class":84},[74,107678,107679,107682,107684,107687,107690],{"class":76,"line":1726},[74,107680,107681],{"class":84},"    site_id ",[74,107683,131],{"class":80},[74,107685,107686],{"class":84}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[74,107688,107689],{"class":190},"\"box_center\"",[74,107691,91],{"class":84},[74,107693,107694],{"class":76,"line":1740},[74,107695,2363],{"emptyLinePlaceholder":2362},[74,107697,107698,107700,107703,107705,107707],{"class":76,"line":1745},[74,107699,3064],{"class":80},[74,107701,107702],{"class":84}," box_body_id ",[74,107704,996],{"class":80},[74,107706,4056],{"class":134},[74,107708,3702],{"class":84},[74,107710,107711,107714,107717,107719,107722],{"class":76,"line":2540},[74,107712,107713],{"class":80},"        raise",[74,107715,107716],{"class":134}," RuntimeError",[74,107718,85],{"class":84},[74,107720,107721],{"class":190},"\"body red_box not found\"",[74,107723,91],{"class":84},[74,107725,107726,107728,107731,107733,107735],{"class":76,"line":2554},[74,107727,3064],{"class":80},[74,107729,107730],{"class":84}," site_id ",[74,107732,996],{"class":80},[74,107734,4056],{"class":134},[74,107736,3702],{"class":84},[74,107738,107739,107741,107743,107745,107748],{"class":76,"line":2562},[74,107740,107713],{"class":80},[74,107742,107716],{"class":134},[74,107744,85],{"class":84},[74,107746,107747],{"class":190},"\"site box_center not found\"",[74,107749,91],{"class":84},[74,107751,107752],{"class":76,"line":2567},[74,107753,2363],{"emptyLinePlaceholder":2362},[74,107755,107756,107758,107760,107762,107764,107766,107768],{"class":76,"line":2573},[74,107757,3164],{"class":80},[74,107759,105782],{"class":84},[74,107761,30324],{"class":80},[74,107763,36724],{"class":134},[74,107765,85],{"class":84},[74,107767,1684],{"class":134},[74,107769,35067],{"class":84},[74,107771,107772],{"class":76,"line":2579},[74,107773,105797],{"class":84},[74,107775,107776],{"class":76,"line":2584},[74,107777,2363],{"emptyLinePlaceholder":2362},[74,107779,107780,107782,107784,107787],{"class":76,"line":12227},[74,107781,35580],{"class":134},[74,107783,85],{"class":84},[74,107785,107786],{"class":190},"\"simulation time:\"",[74,107788,105759],{"class":84},[74,107790,107791,107793,107795,107798],{"class":76,"line":12251},[74,107792,35580],{"class":134},[74,107794,85],{"class":84},[74,107796,107797],{"class":190},"\"box body position:\"",[74,107799,107800],{"class":84},", data.xpos[box_body_id].copy())\n",[74,107802,107803,107805,107807,107810],{"class":76,"line":12256},[74,107804,35580],{"class":134},[74,107806,85],{"class":84},[74,107808,107809],{"class":190},"\"site position:\"",[74,107811,107812],{"class":84},", data.site_xpos[site_id].copy())\n",[74,107814,107815,107817,107819,107822],{"class":76,"line":12262},[74,107816,35580],{"class":134},[74,107818,85],{"class":84},[74,107820,107821],{"class":190},"\"box qpos:\"",[74,107823,107824],{"class":84},", np.array(data.qpos))\n",[74,107826,107827],{"class":76,"line":12289},[74,107828,2363],{"emptyLinePlaceholder":2362},[74,107830,107831],{"class":76,"line":12294},[74,107832,2363],{"emptyLinePlaceholder":2362},[74,107834,107835,107837,107839,107841,107843],{"class":76,"line":12300},[74,107836,1493],{"class":80},[74,107838,35501],{"class":134},[74,107840,105840],{"class":80},[74,107842,105843],{"class":190},[74,107844,3702],{"class":84},[74,107846,107847],{"class":76,"line":12312},[74,107848,105850],{"class":84},[19,107850,107851],{},"保存为：",[64,107853,107855],{"className":28102,"code":107854,"language":28104,"meta":69,"style":69},"touch ch2_xml_basic.py\n",[71,107856,107857],{"__ignoreMap":69},[74,107858,107859,107861],{"class":76,"line":77},[74,107860,105564],{"class":1925},[74,107862,107863],{"class":190}," ch2_xml_basic.py\n",[19,107865,106582],{},[64,107867,107869],{"className":28102,"code":107868,"language":28104,"meta":69,"style":69},"python ch2_xml_basic.py\n",[71,107870,107871],{"__ignoreMap":69},[74,107872,107873,107875],{"class":76,"line":77},[74,107874,34661],{"class":1925},[74,107876,107863],{"class":190},[44,107878,105853],{"id":105853},[19,107880,107881],{},"用名字查找 body：",[64,107883,107885],{"className":34659,"code":107884,"language":34661,"meta":69,"style":69},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[71,107886,107887],{"__ignoreMap":69},[74,107888,107889,107892,107894,107896,107898],{"class":76,"line":77},[74,107890,107891],{"class":84},"box_body_id ",[74,107893,131],{"class":80},[74,107895,107671],{"class":84},[74,107897,107674],{"class":190},[74,107899,91],{"class":84},[19,107901,107902],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,107904,107905],{},"用名字查找 site：",[64,107907,107909],{"className":34659,"code":107908,"language":34661,"meta":69,"style":69},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[71,107910,107911],{"__ignoreMap":69},[74,107912,107913,107916,107918,107920,107922],{"class":76,"line":77},[74,107914,107915],{"class":84},"site_id ",[74,107917,131],{"class":80},[74,107919,107686],{"class":84},[74,107921,107689],{"class":190},[74,107923,91],{"class":84},[19,107925,107926,107927,107930,107931,107934],{},"注意第二个参数是对象类型。查 body 就用 ",[71,107928,107929],{},"mjOBJ_BODY","，查 site 就用 ",[71,107932,107933],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,107936,107937],{},"读取世界坐标：",[64,107939,107941],{"className":34659,"code":107940,"language":34661,"meta":69,"style":69},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[71,107942,107943,107948],{"__ignoreMap":69},[74,107944,107945],{"class":76,"line":77},[74,107946,107947],{"class":84},"data.xpos[box_body_id]\n",[74,107949,107950],{"class":76,"line":94},[74,107951,107952],{"class":84},"data.site_xpos[site_id]\n",[19,107954,107955,107958,107959,107962],{},[71,107956,107957],{},"xpos"," 是 body 的世界坐标，",[71,107960,107961],{},"site_xpos"," 是 site 的世界坐标。",[44,107964,105989],{"id":105989},[64,107966,107968],{"className":34659,"code":107967,"language":34661,"meta":69,"style":69},"import mujoco\nimport numpy as np\n",[71,107969,107970,107976],{"__ignoreMap":69},[74,107971,107972,107974],{"class":76,"line":77},[74,107973,34673],{"class":80},[74,107975,105582],{"class":84},[74,107977,107978,107980,107982,107984],{"class":76,"line":94},[74,107979,34673],{"class":80},[74,107981,35661],{"class":84},[74,107983,35664],{"class":80},[74,107985,35667],{"class":84},[19,107987,107988,107989,107992,107993,107996,107997,298,108000,32666],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[71,107990,107991],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[71,107994,107995],{},"as np"," 是习惯写法，后面就可以写 ",[71,107998,107999],{},"np.array(...)",[71,108001,108002],{},"np.round(...)",[64,108004,108005],{"className":34659,"code":105876,"language":34661,"meta":69,"style":69},[71,108006,108007,108015,108019],{"__ignoreMap":69},[74,108008,108009,108011,108013],{"class":76,"line":77},[74,108010,105595],{"class":134},[74,108012,17843],{"class":80},[74,108014,105600],{"class":190},[74,108016,108017],{"class":76,"line":94},[74,108018,105891],{"class":190},[74,108020,108021],{"class":76,"line":1141},[74,108022,99979],{"class":190},[19,108024,108025,108026,32666],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[71,108027,108028],{},"mujoco.MjModel.from_xml_string(XML)",[64,108030,108032],{"className":57348,"code":108031,"language":57350,"meta":69,"style":69},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[71,108033,108034],{"__ignoreMap":69},[74,108035,108036,108038,108040,108042,108044,108046,108048,108050,108053,108055,108057,108060,108062,108064,108067],{"class":76,"line":77},[74,108037,996],{"class":84},[74,108039,107491],{"class":55581},[74,108041,19199],{"class":1925},[74,108043,131],{"class":84},[74,108045,107689],{"class":190},[74,108047,105387],{"class":1925},[74,108049,131],{"class":84},[74,108051,108052],{"class":190},"\"0 0 0\"",[74,108054,105417],{"class":1925},[74,108056,131],{"class":84},[74,108058,108059],{"class":190},"\"0.03\"",[74,108061,83048],{"class":1925},[74,108063,131],{"class":84},[74,108065,108066],{"class":190},"\"0 1 0 1\"",[74,108068,105425],{"class":84},[19,108070,108071,108073,108074,108077,108078,108080,108081,108084],{},[71,108072,107491],{}," 是标记点。",[71,108075,108076],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[71,108079,107451],{}," 表示显示出来的小球大小。",[71,108082,108083],{},"rgba=\"0 1 0 1\""," 表示绿色。",[64,108086,108087],{"className":34659,"code":107884,"language":34661,"meta":69,"style":69},[71,108088,108089],{"__ignoreMap":69},[74,108090,108091,108093,108095,108097,108099],{"class":76,"line":77},[74,108092,107891],{"class":84},[74,108094,131],{"class":80},[74,108096,107671],{"class":84},[74,108098,107674],{"class":190},[74,108100,91],{"class":84},[19,108102,108103,108104,108106],{},"这行的作用是：根据名字 ",[71,108105,107674],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,108108,108109],{},"拆开看：",[27,108111,108112,108118,108123,108129],{},[30,108113,108114,108117],{},[71,108115,108116],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[30,108119,108120,108122],{},[71,108121,106366],{}," 是被查询的模型。",[30,108124,108125,108128],{},[71,108126,108127],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[30,108130,108131,108133],{},[71,108132,107674],{}," 是 XML 里写的名字。",[64,108135,108136],{"className":34659,"code":107908,"language":34661,"meta":69,"style":69},[71,108137,108138],{"__ignoreMap":69},[74,108139,108140,108142,108144,108146,108148],{"class":76,"line":77},[74,108141,107915],{"class":84},[74,108143,131],{"class":80},[74,108145,107686],{"class":84},[74,108147,107689],{"class":190},[74,108149,91],{"class":84},[19,108151,108152,108153,32666],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[71,108154,107689],{},[64,108156,108158],{"className":34659,"code":108157,"language":34661,"meta":69,"style":69},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[71,108159,108160,108172],{"__ignoreMap":69},[74,108161,108162,108164,108166,108168,108170],{"class":76,"line":77},[74,108163,1493],{"class":80},[74,108165,107702],{"class":84},[74,108167,996],{"class":80},[74,108169,4056],{"class":134},[74,108171,3702],{"class":84},[74,108173,108174,108177,108179,108181,108183],{"class":76,"line":94},[74,108175,108176],{"class":80},"    raise",[74,108178,107716],{"class":134},[74,108180,85],{"class":84},[74,108182,107721],{"class":190},[74,108184,91],{"class":84},[19,108186,108187,108189,108190,108193,108194,108197,108198,108201],{},[71,108188,1493],{}," 是条件判断。",[71,108191,108192],{},"mj_name2id"," 找不到对象时会返回 ",[71,108195,108196],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[71,108199,108200],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[64,108203,108205],{"className":34659,"code":108204,"language":34661,"meta":69,"style":69},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[71,108206,108207,108223],{"__ignoreMap":69},[74,108208,108209,108211,108213,108215,108217,108219,108221],{"class":76,"line":77},[74,108210,2988],{"class":80},[74,108212,105782],{"class":84},[74,108214,30324],{"class":80},[74,108216,36724],{"class":134},[74,108218,85],{"class":84},[74,108220,1684],{"class":134},[74,108222,35067],{"class":84},[74,108224,108225],{"class":76,"line":94},[74,108226,105980],{"class":84},[19,108228,108229],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[64,108231,108233],{"className":34659,"code":108232,"language":34661,"meta":69,"style":69},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[71,108234,108235],{"__ignoreMap":69},[74,108236,108237,108239,108241,108243],{"class":76,"line":77},[74,108238,34696],{"class":134},[74,108240,85],{"class":84},[74,108242,107797],{"class":190},[74,108244,107800],{"class":84},[19,108246,108247,108249,108250,108253],{},[71,108248,105360],{}," 保存所有 body 的世界坐标。",[71,108251,108252],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[64,108255,108257],{"className":34659,"code":108256,"language":34661,"meta":69,"style":69},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[71,108258,108259],{"__ignoreMap":69},[74,108260,108261,108263,108265,108267],{"class":76,"line":77},[74,108262,34696],{"class":134},[74,108264,85],{"class":84},[74,108266,107809],{"class":190},[74,108268,107812],{"class":84},[19,108270,108271,108274,108275,108277],{},[71,108272,108273],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[71,108276,107258],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[64,108279,108281],{"className":34659,"code":108280,"language":34661,"meta":69,"style":69},"print(\"box qpos:\", np.array(data.qpos))\n",[71,108282,108283],{"__ignoreMap":69},[74,108284,108285,108287,108289,108291],{"class":76,"line":77},[74,108286,34696],{"class":134},[74,108288,85],{"class":84},[74,108290,107821],{"class":190},[74,108292,107824],{"class":84},[19,108294,108295,108296,108299],{},"这里打印广义位置数组。",[71,108297,108298],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,108301,106597],{"id":106596},[19,108303,108304,108305,108308,108309,32666],{},"程序会输出 ",[71,108306,108307],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[71,108310,108311],{},"qpos",[19,108313,108314,108316,108317,108320,108321,108324],{},[71,108315,108252],{}," 是 body 的世界坐标位置。",[71,108318,108319],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[71,108322,108323],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,108326,86503,108327,86811,108329,108331],{},[71,108328,107258],{},[71,108330,108076],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,108333,108334],{},"如果你把 site 改成：",[64,108336,108338],{"className":57348,"code":108337,"language":57350,"meta":69,"style":69},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[71,108339,108340],{"__ignoreMap":69},[74,108341,108342,108344,108346,108348,108350,108353,108355,108357,108360,108362,108364,108366,108368,108370,108372],{"class":76,"line":77},[74,108343,996],{"class":84},[74,108345,107491],{"class":55581},[74,108347,19199],{"class":1925},[74,108349,131],{"class":84},[74,108351,108352],{"class":190},"\"box_top\"",[74,108354,105387],{"class":1925},[74,108356,131],{"class":84},[74,108358,108359],{"class":190},"\"0 0 0.15\"",[74,108361,105417],{"class":1925},[74,108363,131],{"class":84},[74,108365,108059],{"class":190},[74,108367,83048],{"class":1925},[74,108369,131],{"class":84},[74,108371,108066],{"class":190},[74,108373,105425],{"class":84},[19,108375,108376,108377,108380],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[71,108378,108379],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,108382,106629],{"id":106628},[27,108384,108385,108394,108397,108404,108410,108421],{},[30,108386,106692,108387,108389,108390,106695,108392,32666],{},[71,108388,107262],{}," 的初始高度从 ",[71,108391,303],{},[71,108393,163],{},[30,108395,108396],{},"重新运行程序。",[30,108398,108399,108400,108403],{},"观察 ",[71,108401,108402],{},"box qpos"," 和最终位置是否变化。",[30,108405,108406,108407,108409],{},"故意把 ",[71,108408,107491],{}," 名称改错，确认程序能报错。",[30,108411,106692,108412,108414,108415,106695,108417,108420],{},[71,108413,105401],{}," 的颜色 ",[71,108416,106313],{},[71,108418,108419],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[30,108422,106692,108423,86811,108425,106695,108428,108431,108432,108434],{},[71,108424,107258],{},[71,108426,108427],{},"pos",[71,108429,108430],{},"0 0 0.2","，观察 ",[71,108433,108379],{}," 如何变化。",[14,108436,106734],{"id":106733},[44,108438,108440],{"id":108439},"xml-error-schema-violation",[71,108441,108442],{},"XML Error: Schema violation",[19,108444,108445],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[44,108447,108449,85571,108451],{"id":108448},"mj_name2id-返回-1",[71,108450,108192],{},[71,108452,108196],{},[19,108454,108455,108456,108459],{},"说明名字没有找到。检查 XML 中 ",[71,108457,108458],{},"name=\"...\"","，并确认对象类型正确。",[44,108461,108462],{"id":108462},"物体不下落",[19,108464,106804],{},[27,108466,108467,108472,108477],{},[30,108468,108469,108470],{},"body 是否有 ",[71,108471,105901],{},[30,108473,108474,108475],{},"gravity 是否为 ",[71,108476,106870],{},[30,108478,108479,108480,108482],{},"body 是否被固定在 ",[71,108481,106122],{}," 中",[44,108484,108485],{"id":108485},"坐标看起来不符合预期",[19,108487,108488],{},"先区分两种坐标：",[223,108490,108491,108500],{},[226,108492,108493],{},[229,108494,108495,108498],{},[232,108496,108497],{"align":28016},"坐标",[232,108499,104981],{"align":28016},[270,108501,108502,108512],{},[229,108503,108504,108509],{},[275,108505,108506,108507],{"align":28016},"XML 里的 ",[71,108508,108427],{},[275,108510,108511],{"align":28016},"相对父 body 的局部坐标",[229,108513,108514,108520],{},[275,108515,108516,29259,108518],{"align":28016},[71,108517,105360],{},[71,108519,108273],{},[275,108521,108522],{"align":28016},"仿真更新后的世界坐标",[19,108524,108525,108526,108528,108529,86820,108532,108534],{},"如果你修改了 ",[71,108527,105351],{},"，但还没调用 ",[71,108530,108531],{},"mj_forward",[71,108533,105496],{},"，世界坐标可能还没有更新。",[14,108536,106888],{"id":106887},[19,108538,108539],{},"MJCF 建模先掌握四件事：",[27,108541,108542,108547,108552,108557],{},[30,108543,108544,108546],{},[71,108545,56081],{}," 表示刚体层级。",[30,108548,108549,108551],{},[71,108550,105401],{}," 表示形状、碰撞和质量。",[30,108553,108554,108556],{},[71,108555,107237],{}," 决定 body 能不能动、怎么动。",[30,108558,108559,108561],{},[71,108560,107491],{}," 用来标记关键点，方便 Python 读取位置。",[19,108563,108564],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5090,108566,108567],{},"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":69,"searchDepth":94,"depth":94,"links":108569},[108570,108571,108572,108578,108582,108583,108584,108591],{"id":104927,"depth":94,"text":104928},{"id":105050,"depth":94,"text":105051},{"id":105325,"depth":94,"text":105326,"children":108573},[108574,108575,108576,108577],{"id":107241,"depth":1141,"text":107241},{"id":107355,"depth":1141,"text":107355},{"id":107381,"depth":1141,"text":107382},{"id":107485,"depth":1141,"text":107486},{"id":105533,"depth":94,"text":105534,"children":108579},[108580,108581],{"id":105853,"depth":1141,"text":105853},{"id":105989,"depth":1141,"text":105989},{"id":106596,"depth":94,"text":106597},{"id":106628,"depth":94,"text":106629},{"id":106733,"depth":94,"text":106734,"children":108585},[108586,108587,108589,108590],{"id":108439,"depth":1141,"text":108442},{"id":108448,"depth":1141,"text":108588},"mj_name2id 返回 -1",{"id":108462,"depth":1141,"text":108462},{"id":108485,"depth":1141,"text":108485},{"id":106887,"depth":94,"text":106888},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":106935,"description":69},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":108598,"title":108599,"body":108600,"description":69,"extension":5121,"meta":110095,"navigation":2362,"path":110096,"seo":110097,"stem":110098,"__hash__":110099},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":108601,"toc":110067},[108602,108605,108607,108610,108613,108651,108654,108660,108663,108665,108667,108694,108696,108710,108712,108753,108755,108779,108781,108784,108793,108802,108805,108814,108822,108831,108834,108844,108847,108899,108906,108912,108920,108968,108971,108990,108993,109001,109005,109014,109047,109049,109397,109399,109411,109413,109424,109426,109429,109450,109456,109459,109484,109494,109497,109505,109508,109511,109532,109543,109545,109565,109568,109589,109598,109617,109623,109648,109651,109665,109672,109696,109699,109707,109716,109732,109744,109752,109761,109763,109766,109790,109795,109798,109820,109822,109861,109863,109870,109872,109880,109883,109886,109898,109939,109946,109957,109964,109967,110016,110019,110022,110028,110030,110035,110061,110064],[10,108603,108599],{"id":108604},"_3python-控制接口读取状态与推进仿真",[14,108606,104928],{"id":104927},[19,108608,108609],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,108611,108612],{},"你将学习:",[27,108614,108615,108620,108625,108629,108634,108645],{},[30,108616,108617],{},[71,108618,108619],{},"MjModel.from_xml_string",[30,108621,108622],{},[71,108623,108624],{},"MjData(model)",[30,108626,108627],{},[71,108628,105496],{},[30,108630,108631],{},[71,108632,108633],{},"mj_resetData",[30,108635,108636,108637,298,108639,298,108642],{},"读取 ",[71,108638,108311],{},[71,108640,108641],{},"qvel",[71,108643,108644],{},"ctrl",[30,108646,108647,108648],{},"使用 ",[71,108649,108650],{},"model.opt.timestep",[19,108652,108653],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[64,108655,108658],{"className":108656,"code":108657,"language":9466,"meta":69},[9464],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[71,108659,108657],{"__ignoreMap":69},[19,108661,108662],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,108664,105051],{"id":105050},[19,108666,105054],{},[64,108668,108670],{"className":28102,"code":108669,"language":28104,"meta":69,"style":69},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[71,108671,108672],{"__ignoreMap":69},[74,108673,108674,108676,108678,108680,108682,108685,108687,108689,108691],{"class":76,"line":77},[74,108675,28857],{"class":1925},[74,108677,30596],{"class":190},[74,108679,28114],{"class":190},[74,108681,30681],{"class":134},[74,108683,108684],{"class":190}," python3",[74,108686,105079],{"class":190},[74,108688,106782],{"class":190},[74,108690,105095],{"class":190},[74,108692,108693],{"class":190}," glfw\n",[19,108695,107100],{},[64,108697,108698],{"className":28102,"code":105200,"language":28104,"meta":69,"style":69},[71,108699,108700],{"__ignoreMap":69},[74,108701,108702,108704,108706,108708],{"class":76,"line":77},[74,108703,28111],{"class":1925},[74,108705,28114],{"class":190},[74,108707,105211],{"class":190},[74,108709,105214],{"class":190},[19,108711,107117],{},[64,108713,108715],{"className":28102,"code":108714,"language":28104,"meta":69,"style":69},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[71,108716,108717,108734,108743],{"__ignoreMap":69},[74,108718,108719,108721,108723,108725,108728,108730,108732],{"class":76,"line":77},[74,108720,34611],{"class":1925},[74,108722,33457],{"class":190},[74,108724,29396],{"class":134},[74,108726,108727],{"class":190}," mujoco-python-api",[74,108729,105256],{"class":190},[74,108731,105259],{"class":134},[74,108733,105262],{"class":134},[74,108735,108736,108738,108740],{"class":76,"line":94},[74,108737,34611],{"class":1925},[74,108739,105269],{"class":190},[74,108741,108742],{"class":190}," mujoco-python-api\n",[74,108744,108745,108747,108749,108751],{"class":76,"line":1141},[74,108746,28111],{"class":1925},[74,108748,28114],{"class":190},[74,108750,105211],{"class":190},[74,108752,105214],{"class":190},[19,108754,105285],{},[27,108756,108757,108764,108773],{},[30,108758,108759,105299,108761,108763],{},[71,108760,104956],{},[71,108762,104961],{}," 是官方 Python bindings 的类名。",[30,108765,108766,108767,108770,108771,32666],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[71,108768,108769],{},"mjModel"," 在 Python 中是 ",[71,108772,104990],{},[30,108774,108775,108776,32666],{},"不要使用 ",[71,108777,108778],{},"sim = mujoco_py.MjSim(...)",[14,108780,105326],{"id":105325},[19,108782,108783],{},"仿真推进核心代码:",[64,108785,108787],{"className":34659,"code":108786,"language":34661,"meta":69,"style":69},"mujoco.mj_step(model, data)\n",[71,108788,108789],{"__ignoreMap":69},[74,108790,108791],{"class":76,"line":77},[74,108792,108786],{"class":84},[19,108794,108795,108796,298,108798,298,108800,32666],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[71,108797,105351],{},[71,108799,105354],{},[71,108801,105348],{},[19,108803,108804],{},"重置仿真:",[64,108806,108808],{"className":34659,"code":108807,"language":34661,"meta":69,"style":69},"mujoco.mj_resetData(model, data)\n",[71,108809,108810],{"__ignoreMap":69},[74,108811,108812],{"class":76,"line":77},[74,108813,108807],{"class":84},[19,108815,108816,108817,86820,108819,108821],{},"如果手动修改了 ",[71,108818,105351],{},[71,108820,105354],{},"，通常应调用:",[64,108823,108825],{"className":34659,"code":108824,"language":34661,"meta":69,"style":69},"mujoco.mj_forward(model, data)\n",[71,108826,108827],{"__ignoreMap":69},[74,108828,108829],{"class":76,"line":77},[74,108830,108824],{"class":84},[19,108832,108833],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[44,108835,108837,298,108839,298,108841,108843],{"id":108836},"qposqvelctrl-是什么",[71,108838,108311],{},[71,108840,108641],{},[71,108842,108644],{}," 是什么",[19,108845,108846],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[223,108848,108849,108861],{},[226,108850,108851],{},[229,108852,108853,108856,108858],{},[232,108854,108855],{"align":28016},"字段",[232,108857,104981],{"align":28016},[232,108859,108860],{"align":28016},"谁来修改",[270,108862,108863,108875,108887],{},[229,108864,108865,108869,108872],{},[275,108866,108867],{"align":28016},[71,108868,105351],{},[275,108870,108871],{"align":28016},"广义位置，例如小车位置、关节角、自由物体位置姿态",[275,108873,108874],{"align":28016},"MuJoCo 更新，也可以手动设置初始状态",[229,108876,108877,108881,108884],{},[275,108878,108879],{"align":28016},[71,108880,105354],{},[275,108882,108883],{"align":28016},"广义速度，例如小车速度、关节角速度",[275,108885,108886],{"align":28016},"MuJoCo 更新，也可以手动清零",[229,108888,108889,108893,108896],{},[275,108890,108891],{"align":28016},[71,108892,105357],{},[275,108894,108895],{"align":28016},"actuator 的控制输入",[275,108897,108898],{"align":28016},"主要由你的控制代码写入",[19,108900,13304,108901,105299,108903,108905],{},[71,108902,108311],{},[71,108904,108641],{}," 不一定同维。自由刚体就是典型例子：",[64,108907,108910],{"className":108908,"code":108909,"language":9466,"meta":69},[9464],"freejoint: qpos 7 维，qvel 6 维\n",[71,108911,108909],{"__ignoreMap":69},[44,108913,108915,105299,108917,108919],{"id":108914},"mj_step-和-mj_forward-的区别",[71,108916,105496],{},[71,108918,108531],{}," 的区别",[223,108921,108922,108935],{},[226,108923,108924],{},[229,108925,108926,108929,108932],{},[232,108927,108928],{"align":28016},"函数",[232,108930,108931],{"align":28016},"是否推进时间",[232,108933,108934],{"align":28016},"什么时候用",[270,108936,108937,108950],{},[229,108938,108939,108944,108947],{},[275,108940,108941],{"align":28016},[71,108942,108943],{},"mj_step(model, data)",[275,108945,108946],{"align":28016},"是",[275,108948,108949],{"align":28016},"正常仿真循环，每调用一次前进一步",[229,108951,108952,108957,108960],{},[275,108953,108954],{"align":28016},[71,108955,108956],{},"mj_forward(model, data)",[275,108958,108959],{"align":28016},"否",[275,108961,108962,108963,298,108965,108967],{"align":28016},"手动改了 ",[71,108964,108311],{},[71,108966,108641],{}," 后，刷新派生量",[19,108969,108970],{},"例如你写：",[64,108972,108974],{"className":34659,"code":108973,"language":34661,"meta":69,"style":69},"data.qpos[2] = 2.0\n",[71,108975,108976],{"__ignoreMap":69},[74,108977,108978,108981,108983,108985,108987],{"class":76,"line":77},[74,108979,108980],{"class":84},"data.qpos[",[74,108982,163],{"class":134},[74,108984,4406],{"class":84},[74,108986,131],{"class":80},[74,108988,108989],{"class":134}," 2.0\n",[19,108991,108992],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[64,108994,108995],{"className":34659,"code":108824,"language":34661,"meta":69,"style":69},[71,108996,108997],{"__ignoreMap":69},[74,108998,108999],{"class":76,"line":77},[74,109000,108824],{"class":84},[44,109002,109004],{"id":109003},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,109006,109007,109010,109011,109013],{},[71,109008,109009],{},"mujoco.mj_resetData(model, data)"," 会把 ",[71,109012,37682],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[64,109015,109017],{"className":34659,"code":109016,"language":34661,"meta":69,"style":69},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[71,109018,109019,109023,109033,109043],{"__ignoreMap":69},[74,109020,109021],{"class":76,"line":77},[74,109022,108807],{"class":84},[74,109024,109025,109028,109030],{"class":76,"line":94},[74,109026,109027],{"class":84},"data.qpos[:] ",[74,109029,131],{"class":80},[74,109031,109032],{"class":84}," random_qpos\n",[74,109034,109035,109038,109040],{"class":76,"line":1141},[74,109036,109037],{"class":84},"data.qvel[:] ",[74,109039,131],{"class":80},[74,109041,109042],{"class":134}," 0.0\n",[74,109044,109045],{"class":76,"line":1156},[74,109046,108824],{"class":84},[14,109048,105534],{"id":105533},[64,109050,109052],{"className":34659,"code":109051,"language":34661,"meta":69,"style":69},"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",[71,109053,109054,109060,109070,109074,109078,109086,109091,109095,109099,109103,109108,109112,109117,109122,109127,109131,109135,109139,109143,109147,109151,109170,109177,109189,109200,109216,109232,109236,109240,109252,109264,109272,109276,109287,109291,109307,109311,109315,109324,109328,109333,109342,109346,109359,109364,109373,109377,109381,109393],{"__ignoreMap":69},[74,109055,109056,109058],{"class":76,"line":77},[74,109057,34673],{"class":80},[74,109059,105582],{"class":84},[74,109061,109062,109064,109066,109068],{"class":76,"line":94},[74,109063,34673],{"class":80},[74,109065,35661],{"class":84},[74,109067,35664],{"class":80},[74,109069,35667],{"class":84},[74,109071,109072],{"class":76,"line":1141},[74,109073,2363],{"emptyLinePlaceholder":2362},[74,109075,109076],{"class":76,"line":1156},[74,109077,2363],{"emptyLinePlaceholder":2362},[74,109079,109080,109082,109084],{"class":76,"line":1162},[74,109081,105595],{"class":134},[74,109083,17843],{"class":80},[74,109085,105600],{"class":190},[74,109087,109088],{"class":76,"line":1176},[74,109089,109090],{"class":190},"\u003Cmujoco model=\"state_api\">\n",[74,109092,109093],{"class":76,"line":1182},[74,109094,105610],{"class":190},[74,109096,109097],{"class":76,"line":1273},[74,109098,2363],{"emptyLinePlaceholder":2362},[74,109100,109101],{"class":76,"line":1279},[74,109102,105619],{"class":190},[74,109104,109105],{"class":76,"line":1291},[74,109106,109107],{"class":190},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[74,109109,109110],{"class":76,"line":1574},[74,109111,2363],{"emptyLinePlaceholder":2362},[74,109113,109114],{"class":76,"line":1579},[74,109115,109116],{"class":190},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[74,109118,109119],{"class":76,"line":1585},[74,109120,109121],{"class":190},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[74,109123,109124],{"class":76,"line":1590},[74,109125,109126],{"class":190},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[74,109128,109129],{"class":76,"line":1604},[74,109130,105648],{"class":190},[74,109132,109133],{"class":76,"line":1609},[74,109134,105653],{"class":190},[74,109136,109137],{"class":76,"line":1615},[74,109138,105658],{"class":190},[74,109140,109141],{"class":76,"line":1636},[74,109142,99979],{"class":190},[74,109144,109145],{"class":76,"line":1641},[74,109146,2363],{"emptyLinePlaceholder":2362},[74,109148,109149],{"class":76,"line":1655},[74,109150,2363],{"emptyLinePlaceholder":2362},[74,109152,109153,109155,109158,109161,109163,109166,109168],{"class":76,"line":1660},[74,109154,36228],{"class":80},[74,109156,109157],{"class":1925}," print_state",[74,109159,109160],{"class":84},"(prefix: ",[74,109162,1261],{"class":134},[74,109164,109165],{"class":84},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[74,109167,99967],{"class":134},[74,109169,3702],{"class":84},[74,109171,109172,109174],{"class":76,"line":1689},[74,109173,35580],{"class":134},[74,109175,109176],{"class":84},"(prefix)\n",[74,109178,109179,109181,109183,109186],{"class":76,"line":1694},[74,109180,35580],{"class":134},[74,109182,85],{"class":84},[74,109184,109185],{"class":190},"\"  timestep:\"",[74,109187,109188],{"class":84},", model.opt.timestep)\n",[74,109190,109191,109193,109195,109198],{"class":76,"line":1711},[74,109192,35580],{"class":134},[74,109194,85],{"class":84},[74,109196,109197],{"class":190},"\"  time:\"",[74,109199,105759],{"class":84},[74,109201,109202,109204,109206,109209,109212,109214],{"class":76,"line":1716},[74,109203,35580],{"class":134},[74,109205,85],{"class":84},[74,109207,109208],{"class":190},"\"  qpos:\"",[74,109210,109211],{"class":84},", np.round(data.qpos.copy(), ",[74,109213,379],{"class":134},[74,109215,34778],{"class":84},[74,109217,109218,109220,109222,109225,109228,109230],{"class":76,"line":1721},[74,109219,35580],{"class":134},[74,109221,85],{"class":84},[74,109223,109224],{"class":190},"\"  qvel:\"",[74,109226,109227],{"class":84},", np.round(data.qvel.copy(), ",[74,109229,379],{"class":134},[74,109231,34778],{"class":84},[74,109233,109234],{"class":76,"line":1726},[74,109235,2363],{"emptyLinePlaceholder":2362},[74,109237,109238],{"class":76,"line":1740},[74,109239,2363],{"emptyLinePlaceholder":2362},[74,109241,109242,109244,109246,109248,109250],{"class":76,"line":1745},[74,109243,36228],{"class":80},[74,109245,1935],{"class":1925},[74,109247,105679],{"class":84},[74,109249,99967],{"class":134},[74,109251,3702],{"class":84},[74,109253,109254,109256,109258,109260,109262],{"class":76,"line":2540},[74,109255,105688],{"class":84},[74,109257,131],{"class":80},[74,109259,105693],{"class":84},[74,109261,105595],{"class":134},[74,109263,91],{"class":84},[74,109265,109266,109268,109270],{"class":76,"line":2554},[74,109267,105702],{"class":84},[74,109269,131],{"class":80},[74,109271,105707],{"class":84},[74,109273,109274],{"class":76,"line":2562},[74,109275,2363],{"emptyLinePlaceholder":2362},[74,109277,109278,109281,109284],{"class":76,"line":2567},[74,109279,109280],{"class":84},"    print_state(",[74,109282,109283],{"class":190},"\"initial\"",[74,109285,109286],{"class":84},", model, data)\n",[74,109288,109289],{"class":76,"line":2573},[74,109290,2363],{"emptyLinePlaceholder":2362},[74,109292,109293,109295,109297,109299,109301,109303,109305],{"class":76,"line":2579},[74,109294,3164],{"class":80},[74,109296,105782],{"class":84},[74,109298,30324],{"class":80},[74,109300,36724],{"class":134},[74,109302,85],{"class":84},[74,109304,742],{"class":134},[74,109306,35067],{"class":84},[74,109308,109309],{"class":76,"line":2584},[74,109310,105797],{"class":84},[74,109312,109313],{"class":76,"line":12227},[74,109314,2363],{"emptyLinePlaceholder":2362},[74,109316,109317,109319,109322],{"class":76,"line":12251},[74,109318,109280],{"class":84},[74,109320,109321],{"class":190},"\"after 50 steps\"",[74,109323,109286],{"class":84},[74,109325,109326],{"class":76,"line":12256},[74,109327,2363],{"emptyLinePlaceholder":2362},[74,109329,109330],{"class":76,"line":12262},[74,109331,109332],{"class":84},"    mujoco.mj_resetData(model, data)\n",[74,109334,109335,109337,109340],{"class":76,"line":12289},[74,109336,109280],{"class":84},[74,109338,109339],{"class":190},"\"after reset\"",[74,109341,109286],{"class":84},[74,109343,109344],{"class":76,"line":12294},[74,109345,2363],{"emptyLinePlaceholder":2362},[74,109347,109348,109351,109353,109355,109357],{"class":76,"line":12300},[74,109349,109350],{"class":84},"    data.qpos[",[74,109352,163],{"class":134},[74,109354,4406],{"class":84},[74,109356,131],{"class":80},[74,109358,108989],{"class":134},[74,109360,109361],{"class":76,"line":12312},[74,109362,109363],{"class":84},"    mujoco.mj_forward(model, data)\n",[74,109365,109366,109368,109371],{"class":76,"line":12324},[74,109367,109280],{"class":84},[74,109369,109370],{"class":190},"\"after manual qpos edit\"",[74,109372,109286],{"class":84},[74,109374,109375],{"class":76,"line":12336},[74,109376,2363],{"emptyLinePlaceholder":2362},[74,109378,109379],{"class":76,"line":13995},[74,109380,2363],{"emptyLinePlaceholder":2362},[74,109382,109383,109385,109387,109389,109391],{"class":76,"line":14020},[74,109384,1493],{"class":80},[74,109386,35501],{"class":134},[74,109388,105840],{"class":80},[74,109390,105843],{"class":190},[74,109392,3702],{"class":84},[74,109394,109395],{"class":76,"line":14043},[74,109396,105850],{"class":84},[19,109398,107851],{},[64,109400,109402],{"className":28102,"code":109401,"language":28104,"meta":69,"style":69},"touch ch3_python_state.py\n",[71,109403,109404],{"__ignoreMap":69},[74,109405,109406,109408],{"class":76,"line":77},[74,109407,105564],{"class":1925},[74,109409,109410],{"class":190}," ch3_python_state.py\n",[19,109412,106582],{},[64,109414,109416],{"className":28102,"code":109415,"language":28104,"meta":69,"style":69},"python ch3_python_state.py\n",[71,109417,109418],{"__ignoreMap":69},[74,109419,109420,109422],{"class":76,"line":77},[74,109421,34661],{"class":1925},[74,109423,109410],{"class":190},[44,109425,105853],{"id":105853},[19,109427,109428],{},"打印状态的函数：",[64,109430,109432],{"className":34659,"code":109431,"language":34661,"meta":69,"style":69},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[71,109433,109434],{"__ignoreMap":69},[74,109435,109436,109438,109440,109442,109444,109446,109448],{"class":76,"line":77},[74,109437,36228],{"class":80},[74,109439,109157],{"class":1925},[74,109441,109160],{"class":84},[74,109443,1261],{"class":134},[74,109445,109165],{"class":84},[74,109447,99967],{"class":134},[74,109449,3702],{"class":84},[19,109451,109452,109453,109455],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[71,109454,37682],{}," 里发生了什么。",[19,109457,109458],{},"推进 50 步：",[64,109460,109462],{"className":34659,"code":109461,"language":34661,"meta":69,"style":69},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[71,109463,109464,109480],{"__ignoreMap":69},[74,109465,109466,109468,109470,109472,109474,109476,109478],{"class":76,"line":77},[74,109467,2988],{"class":80},[74,109469,105782],{"class":84},[74,109471,30324],{"class":80},[74,109473,36724],{"class":134},[74,109475,85],{"class":84},[74,109477,742],{"class":134},[74,109479,35067],{"class":84},[74,109481,109482],{"class":76,"line":94},[74,109483,105980],{"class":84},[19,109485,109486,109487,109490,109491,109493],{},"由于 ",[71,109488,109489],{},"timestep=0.01","，所以 50 步后时间约为 ",[71,109492,39610],{}," 秒。",[19,109495,109496],{},"重置：",[64,109498,109499],{"className":34659,"code":108807,"language":34661,"meta":69,"style":69},[71,109500,109501],{"__ignoreMap":69},[74,109502,109503],{"class":76,"line":77},[74,109504,108807],{"class":84},[19,109506,109507],{},"这会把时间、位置、速度恢复到初始状态。",[19,109509,109510],{},"手动改高度：",[64,109512,109514],{"className":34659,"code":109513,"language":34661,"meta":69,"style":69},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[71,109515,109516,109528],{"__ignoreMap":69},[74,109517,109518,109520,109522,109524,109526],{"class":76,"line":77},[74,109519,108980],{"class":84},[74,109521,163],{"class":134},[74,109523,4406],{"class":84},[74,109525,131],{"class":80},[74,109527,108989],{"class":134},[74,109529,109530],{"class":76,"line":94},[74,109531,108824],{"class":84},[19,109533,109534,109535,109538,109539,109542],{},"这个例子里 ",[71,109536,109537],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[71,109540,109541],{},"2.0"," 表示把小球放到更高的位置。",[44,109544,105989],{"id":105989},[64,109546,109547],{"className":34659,"code":109431,"language":34661,"meta":69,"style":69},[71,109548,109549],{"__ignoreMap":69},[74,109550,109551,109553,109555,109557,109559,109561,109563],{"class":76,"line":77},[74,109552,36228],{"class":80},[74,109554,109157],{"class":1925},[74,109556,109160],{"class":84},[74,109558,1261],{"class":134},[74,109560,109165],{"class":84},[74,109562,99967],{"class":134},[74,109564,3702],{"class":84},[19,109566,109567],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[27,109569,109570,109579,109584],{},[30,109571,109572,109575,109576,109578],{},[71,109573,109574],{},"prefix","：一段文字，比如 ",[71,109577,109283],{},"，用来说明现在打印的是哪个阶段。",[30,109580,109581,109583],{},[71,109582,106366],{},"：MuJoCo 模型。",[30,109585,109586,109588],{},[71,109587,37682],{},"：MuJoCo 当前状态。",[19,109590,109591,298,109594,109597],{},[71,109592,109593],{},"prefix: str",[71,109595,109596],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[64,109599,109601],{"className":34659,"code":109600,"language":34661,"meta":69,"style":69},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[71,109602,109603],{"__ignoreMap":69},[74,109604,109605,109607,109609,109611,109613,109615],{"class":76,"line":77},[74,109606,34696],{"class":134},[74,109608,85],{"class":84},[74,109610,109208],{"class":190},[74,109612,109211],{"class":84},[74,109614,379],{"class":134},[74,109616,34778],{"class":84},[19,109618,109619,109622],{},[71,109620,109621],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[64,109624,109626],{"className":34659,"code":109625,"language":34661,"meta":69,"style":69},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[71,109627,109628,109640],{"__ignoreMap":69},[74,109629,109630,109632,109634,109636,109638],{"class":76,"line":77},[74,109631,105915],{"class":84},[74,109633,131],{"class":80},[74,109635,105693],{"class":84},[74,109637,105595],{"class":134},[74,109639,91],{"class":84},[74,109641,109642,109644,109646],{"class":76,"line":94},[74,109643,105939],{"class":84},[74,109645,131],{"class":80},[74,109647,105707],{"class":84},[19,109649,109650],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[64,109652,109654],{"className":34659,"code":109653,"language":34661,"meta":69,"style":69},"print_state(\"initial\", model, data)\n",[71,109655,109656],{"__ignoreMap":69},[74,109657,109658,109661,109663],{"class":76,"line":77},[74,109659,109660],{"class":84},"print_state(",[74,109662,109283],{"class":190},[74,109664,109286],{"class":84},[19,109666,109667,109668,109671],{},"调用刚才定义的 ",[71,109669,109670],{},"print_state"," 函数，打印初始状态。",[64,109673,109674],{"className":34659,"code":109461,"language":34661,"meta":69,"style":69},[71,109675,109676,109692],{"__ignoreMap":69},[74,109677,109678,109680,109682,109684,109686,109688,109690],{"class":76,"line":77},[74,109679,2988],{"class":80},[74,109681,105782],{"class":84},[74,109683,30324],{"class":80},[74,109685,36724],{"class":134},[74,109687,85],{"class":84},[74,109689,742],{"class":134},[74,109691,35067],{"class":84},[74,109693,109694],{"class":76,"line":94},[74,109695,105980],{"class":84},[19,109697,109698],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[64,109700,109701],{"className":34659,"code":108807,"language":34661,"meta":69,"style":69},[71,109702,109703],{"__ignoreMap":69},[74,109704,109705],{"class":76,"line":77},[74,109706,108807],{"class":84},[19,109708,109709,109710,109712,109713,109715],{},"重置 ",[71,109711,37682],{},"。注意它不会重新创建 ",[71,109714,106366],{},"，因为模型结构没有变，只是状态回到初始值。",[64,109717,109718],{"className":34659,"code":108973,"language":34661,"meta":69,"style":69},[71,109719,109720],{"__ignoreMap":69},[74,109721,109722,109724,109726,109728,109730],{"class":76,"line":77},[74,109723,108980],{"class":84},[74,109725,163],{"class":134},[74,109727,4406],{"class":84},[74,109729,131],{"class":80},[74,109731,108989],{"class":134},[19,109733,109734,109735,298,109738,298,109741,109743],{},"这行是“手动改状态”。在 freejoint 中，",[71,109736,109737],{},"qpos[0]",[71,109739,109740],{},"qpos[1]",[71,109742,109537],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[64,109745,109746],{"className":34659,"code":108824,"language":34661,"meta":69,"style":69},[71,109747,109748],{"__ignoreMap":69},[74,109749,109750],{"class":76,"line":77},[74,109751,108824],{"class":84},[19,109753,109754,109755,109757,109758,109760],{},"手动改完 ",[71,109756,108311],{}," 后，调用 ",[71,109759,108531],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,109762,106597],{"id":106596},[19,109764,109765],{},"你会看到:",[27,109767,109768,109773,109778,109781],{},[30,109769,109770,109771],{},"初始时间为 ",[71,109772,277],{},[30,109774,109775,109776],{},"50 步后时间约为 ",[71,109777,39610],{},[30,109779,109780],{},"reset 后状态恢复",[30,109782,109783,109784,109787,109788],{},"手动修改 ",[71,109785,109786],{},"data.qpos[2]"," 后，小球高度变为 ",[71,109789,109541],{},[19,109791,109792,109794],{},[71,109793,109537],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,109796,109797],{},"输出里可以重点看三件事：",[27,109799,109800,109808,109813],{},[30,109801,109802,109804,109805,109807],{},[71,109803,2349],{}," 是否随着 ",[71,109806,105496],{}," 增加。",[30,109809,109810,109812],{},[71,109811,108311],{}," 的 z 坐标是否因为下落而变化。",[30,109814,109815,109817,109818,32666],{},[71,109816,108633],{}," 后时间是否回到 ",[71,109819,277],{},[14,109821,106629],{"id":106628},[27,109823,109824,109830,109836,109842,109845,109854],{},[30,109825,109826,109827,32666],{},"修改 timestep 为 ",[71,109828,109829],{},"0.005",[30,109831,109832,109833,32666],{},"重新运行，检查 50 步后时间是否约为 ",[71,109834,109835],{},"0.25",[30,109837,109838,109839,32666],{},"修改重力为 ",[71,109840,109841],{},"0 0 -1.0",[30,109843,109844],{},"观察小球下降速度是否变慢。",[30,109846,106692,109847,106695,109850,109853],{},[71,109848,109849],{},"data.qpos[2] = 2.0",[71,109851,109852],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[30,109855,109856,109857,109860],{},"注释掉 ",[71,109858,109859],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,109862,106734],{"id":106733},[44,109864,109866,109867,109869],{"id":109865},"修改-dataqpos-后位置没有更新","修改 ",[71,109868,105351],{}," 后位置没有更新",[19,109871,106743],{},[64,109873,109874],{"className":34659,"code":108824,"language":34661,"meta":69,"style":69},[71,109875,109876],{"__ignoreMap":69},[74,109877,109878],{"class":76,"line":77},[74,109879,108824],{"class":84},[44,109881,109882],{"id":109882},"数组维度看不懂",[19,109884,109885],{},"打印模型维度:",[64,109887,109889],{"className":34659,"code":109888,"language":34661,"meta":69,"style":69},"print(model.nq, model.nv, model.nu)\n",[71,109890,109891],{"__ignoreMap":69},[74,109892,109893,109895],{"class":76,"line":77},[74,109894,34696],{"class":134},[74,109896,109897],{"class":84},"(model.nq, model.nv, model.nu)\n",[223,109899,109900,109908],{},[226,109901,109902],{},[229,109903,109904,109906],{},[232,109905,108855],{"align":28016},[232,109907,104981],{"align":28016},[270,109909,109910,109920,109930],{},[229,109911,109912,109917],{},[275,109913,109914],{"align":28016},[71,109915,109916],{},"nq",[275,109918,109919],{"align":28016},"位置变量数量",[229,109921,109922,109927],{},[275,109923,109924],{"align":28016},[71,109925,109926],{},"nv",[275,109928,109929],{"align":28016},"速度变量数量",[229,109931,109932,109936],{},[275,109933,109934],{"align":28016},[71,109935,106443],{},[275,109937,109938],{"align":28016},"控制输入数量",[44,109940,109942,109943,109945],{"id":109941},"误以为-qpos-一定等于关节数","误以为 ",[71,109944,108311],{}," 一定等于关节数",[19,109947,109948,109949,86811,109951,109953,109954,109956],{},"不是。例如 ",[71,109950,105901],{},[71,109952,108311],{}," 是 7 维，但 ",[71,109955,108641],{}," 是 6 维。",[44,109958,109960,109961,109963],{"id":109959},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[71,109962,108311],{}," 的第几位",[19,109965,109966],{},"初学时可以先打印：",[64,109968,109970],{"className":34659,"code":109969,"language":34661,"meta":69,"style":69},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[71,109971,109972,109982,109992,110004],{"__ignoreMap":69},[74,109973,109974,109976,109978,109980],{"class":76,"line":77},[74,109975,34696],{"class":134},[74,109977,85],{"class":84},[74,109979,105720],{"class":190},[74,109981,105723],{"class":84},[74,109983,109984,109986,109988,109990],{"class":76,"line":94},[74,109985,34696],{"class":134},[74,109987,85],{"class":84},[74,109989,105732],{"class":190},[74,109991,105735],{"class":84},[74,109993,109994,109996,109998,110001],{"class":76,"line":1141},[74,109995,34696],{"class":134},[74,109997,85],{"class":84},[74,109999,110000],{"class":190},"\"qpos:\"",[74,110002,110003],{"class":84},", data.qpos)\n",[74,110005,110006,110008,110010,110013],{"class":76,"line":1156},[74,110007,34696],{"class":134},[74,110009,85],{"class":84},[74,110011,110012],{"class":190},"\"qvel:\"",[74,110014,110015],{"class":84},", data.qvel)\n",[19,110017,110018],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[44,110020,110021],{"id":110021},"仿真结果每次都一样",[19,110023,110024,110025,110027],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[71,110026,108311],{},"、目标点或控制输入。",[14,110029,106888],{"id":106887},[19,110031,110032,110033,28899],{},"Python 控制 MuJoCo 的核心就是读写 ",[71,110034,37682],{},[27,110036,110037,110045,110050,110055],{},[30,110038,110039,110040,105299,110042,110044],{},"用 ",[71,110041,105351],{},[71,110043,105354],{}," 读取状态。",[30,110046,110039,110047,110049],{},[71,110048,105357],{}," 写入控制。",[30,110051,110039,110052,110054],{},[71,110053,105496],{}," 推进时间。",[30,110056,110057,110058,110060],{},"手动改状态后用 ",[71,110059,108531],{}," 刷新派生量。",[19,110062,110063],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5090,110065,110066],{},"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":69,"searchDepth":94,"depth":94,"links":110068},[110069,110070,110071,110078,110082,110083,110084,110094],{"id":104927,"depth":94,"text":104928},{"id":105050,"depth":94,"text":105051},{"id":105325,"depth":94,"text":105326,"children":110072},[110073,110075,110077],{"id":108836,"depth":1141,"text":110074},"qpos、qvel、ctrl 是什么",{"id":108914,"depth":1141,"text":110076},"mj_step 和 mj_forward 的区别",{"id":109003,"depth":1141,"text":109004},{"id":105533,"depth":94,"text":105534,"children":110079},[110080,110081],{"id":105853,"depth":1141,"text":105853},{"id":105989,"depth":1141,"text":105989},{"id":106596,"depth":94,"text":106597},{"id":106628,"depth":94,"text":106629},{"id":106733,"depth":94,"text":106734,"children":110085},[110086,110088,110089,110091,110093],{"id":109865,"depth":1141,"text":110087},"修改 data.qpos 后位置没有更新",{"id":109882,"depth":1141,"text":109882},{"id":109941,"depth":1141,"text":110090},"误以为 qpos 一定等于关节数",{"id":109959,"depth":1141,"text":110092},"不知道某个元素在 qpos 的第几位",{"id":110021,"depth":1141,"text":110021},{"id":106887,"depth":94,"text":106888},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":108599,"description":69},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":110101,"title":110102,"body":110103,"description":69,"extension":5121,"meta":111793,"navigation":2362,"path":111794,"seo":111795,"stem":111796,"__hash__":111797},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":110104,"toc":111769},[110105,110108,110110,110113,110115,110140,110143,110162,110165,110167,110169,110193,110195,110209,110211,110252,110254,110278,110280,110283,110317,110319,110332,110335,110403,110412,110416,110419,110453,110459,110462,110466,110505,110508,110528,110532,110575,110577,110606,110609,110615,110618,110620,111014,111016,111028,111030,111041,111043,111046,111075,111083,111086,111121,111124,111126,111134,111137,111139,111150,111160,111180,111183,111219,111231,111279,111298,111340,111353,111381,111386,111407,111417,111435,111438,111472,111475,111495,111498,111517,111523,111525,111528,111534,111540,111550,111553,111559,111568,111570,111616,111618,111624,111630,111633,111636,111656,111659,111665,111671,111673,111696,111699,111702,111711,111714,111752,111754,111757,111763,111766],[10,110106,110102],{"id":110107},"_4关节actuator-与力控制",[14,110109,104928],{"id":104927},[19,110111,110112],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,110114,108612],{},[27,110116,110117,110123,110128,110132,110137],{},[30,110118,110119,110122],{},[71,110120,110121],{},"hinge"," 关节",[30,110124,110125],{},[71,110126,110127],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[30,110129,110130],{},[71,110131,105357],{},[30,110133,110134],{},[71,110135,110136],{},"ctrlrange",[30,110138,110139],{},"读取关节角和角速度",[19,110141,110142],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[64,110144,110146],{"className":34659,"code":110145,"language":34661,"meta":69,"style":69},"data.ctrl[0] = ...\n",[71,110147,110148],{"__ignoreMap":69},[74,110149,110150,110153,110155,110157,110159],{"class":76,"line":77},[74,110151,110152],{"class":84},"data.ctrl[",[74,110154,277],{"class":134},[74,110156,4406],{"class":84},[74,110158,131],{"class":80},[74,110160,110161],{"class":134}," ...\n",[19,110163,110164],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,110166,105051],{"id":105050},[19,110168,105054],{},[64,110170,110171],{"className":28102,"code":108669,"language":28104,"meta":69,"style":69},[71,110172,110173],{"__ignoreMap":69},[74,110174,110175,110177,110179,110181,110183,110185,110187,110189,110191],{"class":76,"line":77},[74,110176,28857],{"class":1925},[74,110178,30596],{"class":190},[74,110180,28114],{"class":190},[74,110182,30681],{"class":134},[74,110184,108684],{"class":190},[74,110186,105079],{"class":190},[74,110188,106782],{"class":190},[74,110190,105095],{"class":190},[74,110192,108693],{"class":190},[19,110194,107100],{},[64,110196,110197],{"className":28102,"code":105200,"language":28104,"meta":69,"style":69},[71,110198,110199],{"__ignoreMap":69},[74,110200,110201,110203,110205,110207],{"class":76,"line":77},[74,110202,28111],{"class":1925},[74,110204,28114],{"class":190},[74,110206,105211],{"class":190},[74,110208,105214],{"class":190},[19,110210,107117],{},[64,110212,110214],{"className":28102,"code":110213,"language":28104,"meta":69,"style":69},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[71,110215,110216,110233,110242],{"__ignoreMap":69},[74,110217,110218,110220,110222,110224,110227,110229,110231],{"class":76,"line":77},[74,110219,34611],{"class":1925},[74,110221,33457],{"class":190},[74,110223,29396],{"class":134},[74,110225,110226],{"class":190}," mujoco-control",[74,110228,105256],{"class":190},[74,110230,105259],{"class":134},[74,110232,105262],{"class":134},[74,110234,110235,110237,110239],{"class":76,"line":94},[74,110236,34611],{"class":1925},[74,110238,105269],{"class":190},[74,110240,110241],{"class":190}," mujoco-control\n",[74,110243,110244,110246,110248,110250],{"class":76,"line":1141},[74,110245,28111],{"class":1925},[74,110247,28114],{"class":190},[74,110249,105211],{"class":190},[74,110251,105214],{"class":190},[19,110253,105285],{},[27,110255,110256,110262,110269,110275],{},[30,110257,110258,110261],{},[71,110259,110260],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[30,110263,110264,110266,110267,32666],{},[71,110265,105357],{}," 长度等于 ",[71,110268,106439],{},[30,110270,86503,110271,110274],{},[71,110272,110273],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[30,110276,110277],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,110279,105326],{"id":105325},[19,110281,110282],{},"关节决定 body 如何运动:",[64,110284,110286],{"className":57348,"code":110285,"language":57350,"meta":69,"style":69},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[71,110287,110288],{"__ignoreMap":69},[74,110289,110290,110292,110294,110296,110298,110301,110303,110305,110307,110310,110312,110315],{"class":76,"line":77},[74,110291,996],{"class":84},[74,110293,107237],{"class":55581},[74,110295,19199],{"class":1925},[74,110297,131],{"class":84},[74,110299,110300],{"class":190},"\"hinge\"",[74,110302,58105],{"class":1925},[74,110304,131],{"class":84},[74,110306,110300],{"class":190},[74,110308,110309],{"class":1925}," axis",[74,110311,131],{"class":84},[74,110313,110314],{"class":190},"\"0 1 0\"",[74,110316,105425],{"class":84},[19,110318,107333],{},[27,110320,110321,110326,110329],{},[30,110322,110323,110324],{},"名字是 ",[71,110325,110121],{},[30,110327,110328],{},"类型是旋转关节",[30,110330,110331],{},"绕 y 轴旋转",[19,110333,110334],{},"actuator 决定如何施加控制:",[64,110336,110338],{"className":57348,"code":110337,"language":57350,"meta":69,"style":69},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[71,110339,110340,110349,110395],{"__ignoreMap":69},[74,110341,110342,110344,110347],{"class":76,"line":77},[74,110343,996],{"class":84},[74,110345,110346],{"class":55581},"actuator",[74,110348,55588],{"class":84},[74,110350,110351,110353,110356,110358,110360,110363,110366,110368,110370,110373,110375,110377,110380,110382,110385,110388,110390,110393],{"class":76,"line":94},[74,110352,56425],{"class":84},[74,110354,110355],{"class":55581},"motor",[74,110357,19199],{"class":1925},[74,110359,131],{"class":84},[74,110361,110362],{"class":190},"\"hinge_motor\"",[74,110364,110365],{"class":1925}," joint",[74,110367,131],{"class":84},[74,110369,110300],{"class":190},[74,110371,110372],{"class":1925}," gear",[74,110374,131],{"class":84},[74,110376,3641],{"class":190},[74,110378,110379],{"class":1925}," ctrlrange",[74,110381,131],{"class":84},[74,110383,110384],{"class":190},"\"-2 2\"",[74,110386,110387],{"class":1925}," ctrllimited",[74,110389,131],{"class":84},[74,110391,110392],{"class":190},"\"true\"",[74,110394,105425],{"class":84},[74,110396,110397,110399,110401],{"class":76,"line":1141},[74,110398,56066],{"class":84},[74,110400,110346],{"class":55581},[74,110402,55588],{"class":84},[19,110404,110405,110408,110409,32666],{},[71,110406,110407],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[71,110410,110411],{},"[-2, 2]",[44,110413,110415],{"id":110414},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,110417,110418],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[223,110420,110421,110431],{},[226,110422,110423],{},[229,110424,110425,110427,110429],{},[232,110426,30034],{"align":28016},[232,110428,106977],{"align":28016},[232,110430,105015],{"align":28016},[270,110432,110433,110443],{},[229,110434,110435,110437,110440],{},[275,110436,107237],{"align":28016},[275,110438,110439],{"align":28016},"定义能怎么动",[275,110441,110442],{"align":28016},"门轴允许门旋转",[229,110444,110445,110447,110450],{},[275,110446,110346],{"align":28016},[275,110448,110449],{"align":28016},"定义怎么施力或控制",[275,110451,110452],{"align":28016},"人推门、马达带动门",[19,110454,110455,110456,110458],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[71,110457,105357],{}," 主动控制它。",[19,110460,110461],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[44,110463,110465],{"id":110464},"hinge-joint","hinge joint",[64,110467,110469],{"className":57348,"code":110468,"language":57350,"meta":69,"style":69},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[71,110470,110471],{"__ignoreMap":69},[74,110472,110473,110475,110477,110479,110481,110483,110485,110487,110489,110491,110493,110495,110498,110500,110503],{"class":76,"line":77},[74,110474,996],{"class":84},[74,110476,107237],{"class":55581},[74,110478,19199],{"class":1925},[74,110480,131],{"class":84},[74,110482,110300],{"class":190},[74,110484,58105],{"class":1925},[74,110486,131],{"class":84},[74,110488,110300],{"class":190},[74,110490,110309],{"class":1925},[74,110492,131],{"class":84},[74,110494,110314],{"class":190},[74,110496,110497],{"class":1925}," damping",[74,110499,131],{"class":84},[74,110501,110502],{"class":190},"\"0.1\"",[74,110504,105425],{"class":84},[19,110506,110507],{},"含义：",[27,110509,110510,110516,110522],{},[30,110511,110512,110515],{},[71,110513,110514],{},"type=\"hinge\"","：只能绕一个轴旋转。",[30,110517,110518,110521],{},[71,110519,110520],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[30,110523,110524,110527],{},[71,110525,110526],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[44,110529,110531],{"id":110530},"motor-actuator","motor actuator",[64,110533,110535],{"className":57348,"code":110534,"language":57350,"meta":69,"style":69},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[71,110536,110537],{"__ignoreMap":69},[74,110538,110539,110541,110543,110545,110547,110549,110551,110553,110555,110557,110559,110561,110563,110565,110567,110569,110571,110573],{"class":76,"line":77},[74,110540,996],{"class":84},[74,110542,110355],{"class":55581},[74,110544,19199],{"class":1925},[74,110546,131],{"class":84},[74,110548,110362],{"class":190},[74,110550,110365],{"class":1925},[74,110552,131],{"class":84},[74,110554,110300],{"class":190},[74,110556,110372],{"class":1925},[74,110558,131],{"class":84},[74,110560,3641],{"class":190},[74,110562,110379],{"class":1925},[74,110564,131],{"class":84},[74,110566,110384],{"class":190},[74,110568,110387],{"class":1925},[74,110570,131],{"class":84},[74,110572,110392],{"class":190},[74,110574,105425],{"class":84},[19,110576,110507],{},[27,110578,110579,110588,110594,110600],{},[30,110580,110581,110584,110585,110587],{},[71,110582,110583],{},"joint=\"hinge\"","：这个电机作用在名为 ",[71,110586,110121],{}," 的关节上。",[30,110589,110590,110593],{},[71,110591,110592],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[30,110595,110596,110599],{},[71,110597,110598],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[30,110601,110602,110605],{},[71,110603,110604],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,110607,110608],{},"简单理解：",[64,110610,110613],{"className":110611,"code":110612,"language":9466,"meta":69},[9464],"实际施加效果 ≈ data.ctrl[0] * gear\n",[71,110614,110612],{"__ignoreMap":69},[19,110616,110617],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,110619,105534],{"id":105533},[64,110621,110623],{"className":34659,"code":110622,"language":34661,"meta":69,"style":69},"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",[71,110624,110625,110632,110636,110642,110652,110656,110660,110668,110673,110678,110682,110686,110691,110696,110700,110705,110710,110715,110720,110724,110728,110732,110737,110742,110747,110751,110755,110759,110763,110775,110787,110795,110799,110809,110819,110829,110833,110846,110859,110863,110880,110894,110929,110933,110937,110948,110963,110978,110990,110994,110998,111010],{"__ignoreMap":69},[74,110626,110627,110629],{"class":76,"line":77},[74,110628,34673],{"class":80},[74,110630,110631],{"class":84}," math\n",[74,110633,110634],{"class":76,"line":94},[74,110635,2363],{"emptyLinePlaceholder":2362},[74,110637,110638,110640],{"class":76,"line":1141},[74,110639,34673],{"class":80},[74,110641,105582],{"class":84},[74,110643,110644,110646,110648,110650],{"class":76,"line":1156},[74,110645,34673],{"class":80},[74,110647,35661],{"class":84},[74,110649,35664],{"class":80},[74,110651,35667],{"class":84},[74,110653,110654],{"class":76,"line":1162},[74,110655,2363],{"emptyLinePlaceholder":2362},[74,110657,110658],{"class":76,"line":1176},[74,110659,2363],{"emptyLinePlaceholder":2362},[74,110661,110662,110664,110666],{"class":76,"line":1182},[74,110663,105595],{"class":134},[74,110665,17843],{"class":80},[74,110667,105600],{"class":190},[74,110669,110670],{"class":76,"line":1273},[74,110671,110672],{"class":190},"\u003Cmujoco model=\"one_link_motor\">\n",[74,110674,110675],{"class":76,"line":1279},[74,110676,110677],{"class":190},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[74,110679,110680],{"class":76,"line":1291},[74,110681,2363],{"emptyLinePlaceholder":2362},[74,110683,110684],{"class":76,"line":1574},[74,110685,105619],{"class":190},[74,110687,110688],{"class":76,"line":1579},[74,110689,110690],{"class":190},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[74,110692,110693],{"class":76,"line":1585},[74,110694,110695],{"class":190},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[74,110697,110698],{"class":76,"line":1590},[74,110699,2363],{"emptyLinePlaceholder":2362},[74,110701,110702],{"class":76,"line":1604},[74,110703,110704],{"class":190},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[74,110706,110707],{"class":76,"line":1609},[74,110708,110709],{"class":190},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[74,110711,110712],{"class":76,"line":1615},[74,110713,110714],{"class":190},"        \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",[74,110716,110717],{"class":76,"line":1636},[74,110718,110719],{"class":190},"      \u003C\u002Fbody>\n",[74,110721,110722],{"class":76,"line":1641},[74,110723,105648],{"class":190},[74,110725,110726],{"class":76,"line":1655},[74,110727,105653],{"class":190},[74,110729,110730],{"class":76,"line":1660},[74,110731,2363],{"emptyLinePlaceholder":2362},[74,110733,110734],{"class":76,"line":1689},[74,110735,110736],{"class":190},"  \u003Cactuator>\n",[74,110738,110739],{"class":76,"line":1694},[74,110740,110741],{"class":190},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[74,110743,110744],{"class":76,"line":1711},[74,110745,110746],{"class":190},"  \u003C\u002Factuator>\n",[74,110748,110749],{"class":76,"line":1716},[74,110750,105658],{"class":190},[74,110752,110753],{"class":76,"line":1721},[74,110754,99979],{"class":190},[74,110756,110757],{"class":76,"line":1726},[74,110758,2363],{"emptyLinePlaceholder":2362},[74,110760,110761],{"class":76,"line":1740},[74,110762,2363],{"emptyLinePlaceholder":2362},[74,110764,110765,110767,110769,110771,110773],{"class":76,"line":1745},[74,110766,36228],{"class":80},[74,110768,1935],{"class":1925},[74,110770,105679],{"class":84},[74,110772,99967],{"class":134},[74,110774,3702],{"class":84},[74,110776,110777,110779,110781,110783,110785],{"class":76,"line":2540},[74,110778,105688],{"class":84},[74,110780,131],{"class":80},[74,110782,105693],{"class":84},[74,110784,105595],{"class":134},[74,110786,91],{"class":84},[74,110788,110789,110791,110793],{"class":76,"line":2554},[74,110790,105702],{"class":84},[74,110792,131],{"class":80},[74,110794,105707],{"class":84},[74,110796,110797],{"class":76,"line":2562},[74,110798,2363],{"emptyLinePlaceholder":2362},[74,110800,110801,110803,110805,110807],{"class":76,"line":2567},[74,110802,35580],{"class":134},[74,110804,85],{"class":84},[74,110806,105720],{"class":190},[74,110808,105723],{"class":84},[74,110810,110811,110813,110815,110817],{"class":76,"line":2573},[74,110812,35580],{"class":134},[74,110814,85],{"class":84},[74,110816,105732],{"class":190},[74,110818,105735],{"class":84},[74,110820,110821,110823,110825,110827],{"class":76,"line":2579},[74,110822,35580],{"class":134},[74,110824,85],{"class":84},[74,110826,105744],{"class":190},[74,110828,105747],{"class":84},[74,110830,110831],{"class":76,"line":2584},[74,110832,2363],{"emptyLinePlaceholder":2362},[74,110834,110835,110837,110840,110842,110844],{"class":76,"line":12227},[74,110836,3064],{"class":80},[74,110838,110839],{"class":84}," model.nu ",[74,110841,25227],{"class":80},[74,110843,29399],{"class":134},[74,110845,3702],{"class":84},[74,110847,110848,110850,110852,110854,110857],{"class":76,"line":12251},[74,110849,107713],{"class":80},[74,110851,107716],{"class":134},[74,110853,85],{"class":84},[74,110855,110856],{"class":190},"\"expected exactly one actuator\"",[74,110858,91],{"class":84},[74,110860,110861],{"class":76,"line":12256},[74,110862,2363],{"emptyLinePlaceholder":2362},[74,110864,110865,110867,110869,110871,110873,110875,110878],{"class":76,"line":12262},[74,110866,3164],{"class":80},[74,110868,35897],{"class":84},[74,110870,30324],{"class":80},[74,110872,36724],{"class":134},[74,110874,85],{"class":84},[74,110876,110877],{"class":134},"2000",[74,110879,35067],{"class":84},[74,110881,110882,110885,110887,110889,110891],{"class":76,"line":12289},[74,110883,110884],{"class":84},"        t ",[74,110886,131],{"class":80},[74,110888,35897],{"class":84},[74,110890,541],{"class":80},[74,110892,110893],{"class":84}," model.opt.timestep\n",[74,110895,110896,110899,110901,110903,110905,110908,110910,110913,110915,110917,110920,110922,110924,110926],{"class":76,"line":12294},[74,110897,110898],{"class":84},"        data.ctrl[",[74,110900,277],{"class":134},[74,110902,4406],{"class":84},[74,110904,131],{"class":80},[74,110906,110907],{"class":134}," 1.5",[74,110909,10797],{"class":80},[74,110911,110912],{"class":84}," math.sin(",[74,110914,109541],{"class":134},[74,110916,10797],{"class":80},[74,110918,110919],{"class":84}," math.pi ",[74,110921,541],{"class":80},[74,110923,66148],{"class":134},[74,110925,10797],{"class":80},[74,110927,110928],{"class":84}," t)\n",[74,110930,110931],{"class":76,"line":12300},[74,110932,105797],{"class":84},[74,110934,110935],{"class":76,"line":12312},[74,110936,2363],{"emptyLinePlaceholder":2362},[74,110938,110939,110941,110943,110946],{"class":76,"line":12324},[74,110940,35580],{"class":134},[74,110942,85],{"class":84},[74,110944,110945],{"class":190},"\"time:\"",[74,110947,105759],{"class":84},[74,110949,110950,110952,110954,110957,110959,110961],{"class":76,"line":12336},[74,110951,35580],{"class":134},[74,110953,85],{"class":84},[74,110955,110956],{"class":190},"\"joint qpos:\"",[74,110958,109211],{"class":84},[74,110960,379],{"class":134},[74,110962,34778],{"class":84},[74,110964,110965,110967,110969,110972,110974,110976],{"class":76,"line":13995},[74,110966,35580],{"class":134},[74,110968,85],{"class":84},[74,110970,110971],{"class":190},"\"joint qvel:\"",[74,110973,109227],{"class":84},[74,110975,379],{"class":134},[74,110977,34778],{"class":84},[74,110979,110980,110982,110984,110987],{"class":76,"line":14020},[74,110981,35580],{"class":134},[74,110983,85],{"class":84},[74,110985,110986],{"class":190},"\"last ctrl:\"",[74,110988,110989],{"class":84},", data.ctrl.copy())\n",[74,110991,110992],{"class":76,"line":14043},[74,110993,2363],{"emptyLinePlaceholder":2362},[74,110995,110996],{"class":76,"line":14067},[74,110997,2363],{"emptyLinePlaceholder":2362},[74,110999,111000,111002,111004,111006,111008],{"class":76,"line":14072},[74,111001,1493],{"class":80},[74,111003,35501],{"class":134},[74,111005,105840],{"class":80},[74,111007,105843],{"class":190},[74,111009,3702],{"class":84},[74,111011,111012],{"class":76,"line":14077},[74,111013,105850],{"class":84},[19,111015,107851],{},[64,111017,111019],{"className":28102,"code":111018,"language":28104,"meta":69,"style":69},"touch ch4_joint_motor.py\n",[71,111020,111021],{"__ignoreMap":69},[74,111022,111023,111025],{"class":76,"line":77},[74,111024,105564],{"class":1925},[74,111026,111027],{"class":190}," ch4_joint_motor.py\n",[19,111029,106582],{},[64,111031,111033],{"className":28102,"code":111032,"language":28104,"meta":69,"style":69},"python ch4_joint_motor.py\n",[71,111034,111035],{"__ignoreMap":69},[74,111036,111037,111039],{"class":76,"line":77},[74,111038,34661],{"class":1925},[74,111040,111027],{"class":190},[44,111042,105853],{"id":105853},[19,111044,111045],{},"检查 actuator 数量：",[64,111047,111049],{"className":34659,"code":111048,"language":34661,"meta":69,"style":69},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[71,111050,111051,111063],{"__ignoreMap":69},[74,111052,111053,111055,111057,111059,111061],{"class":76,"line":77},[74,111054,1493],{"class":80},[74,111056,110839],{"class":84},[74,111058,25227],{"class":80},[74,111060,29399],{"class":134},[74,111062,3702],{"class":84},[74,111064,111065,111067,111069,111071,111073],{"class":76,"line":94},[74,111066,108176],{"class":80},[74,111068,107716],{"class":134},[74,111070,85],{"class":84},[74,111072,110856],{"class":190},[74,111074,91],{"class":84},[19,111076,111077,111079,111080,111082],{},[71,111078,106439],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[71,111081,105357],{}," 长度应该是 1。",[19,111084,111085],{},"产生正弦控制信号：",[64,111087,111089],{"className":34659,"code":111088,"language":34661,"meta":69,"style":69},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[71,111090,111091],{"__ignoreMap":69},[74,111092,111093,111095,111097,111099,111101,111103,111105,111107,111109,111111,111113,111115,111117,111119],{"class":76,"line":77},[74,111094,110152],{"class":84},[74,111096,277],{"class":134},[74,111098,4406],{"class":84},[74,111100,131],{"class":80},[74,111102,110907],{"class":134},[74,111104,10797],{"class":80},[74,111106,110912],{"class":84},[74,111108,109541],{"class":134},[74,111110,10797],{"class":80},[74,111112,110919],{"class":84},[74,111114,541],{"class":80},[74,111116,66148],{"class":134},[74,111118,10797],{"class":80},[74,111120,110928],{"class":84},[19,111122,111123],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,111125,105954],{},[64,111127,111128],{"className":34659,"code":108786,"language":34661,"meta":69,"style":69},[71,111129,111130],{"__ignoreMap":69},[74,111131,111132],{"class":76,"line":77},[74,111133,108786],{"class":84},[19,111135,111136],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[44,111138,105989],{"id":105989},[64,111140,111142],{"className":34659,"code":111141,"language":34661,"meta":69,"style":69},"import math\n",[71,111143,111144],{"__ignoreMap":69},[74,111145,111146,111148],{"class":76,"line":77},[74,111147,34673],{"class":80},[74,111149,110631],{"class":84},[19,111151,111152,111153,105299,111156,111159],{},"导入 Python 标准库里的数学模块。后面要用 ",[71,111154,111155],{},"math.sin",[71,111157,111158],{},"math.pi"," 生成周期变化的控制信号。",[64,111161,111162],{"className":34659,"code":107967,"language":34661,"meta":69,"style":69},[71,111163,111164,111170],{"__ignoreMap":69},[74,111165,111166,111168],{"class":76,"line":77},[74,111167,34673],{"class":80},[74,111169,105582],{"class":84},[74,111171,111172,111174,111176,111178],{"class":76,"line":94},[74,111173,34673],{"class":80},[74,111175,35661],{"class":84},[74,111177,35664],{"class":80},[74,111179,35667],{"class":84},[19,111181,111182],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[64,111184,111185],{"className":57348,"code":110468,"language":57350,"meta":69,"style":69},[71,111186,111187],{"__ignoreMap":69},[74,111188,111189,111191,111193,111195,111197,111199,111201,111203,111205,111207,111209,111211,111213,111215,111217],{"class":76,"line":77},[74,111190,996],{"class":84},[74,111192,107237],{"class":55581},[74,111194,19199],{"class":1925},[74,111196,131],{"class":84},[74,111198,110300],{"class":190},[74,111200,58105],{"class":1925},[74,111202,131],{"class":84},[74,111204,110300],{"class":190},[74,111206,110309],{"class":1925},[74,111208,131],{"class":84},[74,111210,110314],{"class":190},[74,111212,110497],{"class":1925},[74,111214,131],{"class":84},[74,111216,110502],{"class":190},[74,111218,105425],{"class":84},[19,111220,111221,111222,111224,111225,111227,111228,111230],{},"这行定义关节。",[71,111223,110121],{}," 表示旋转关节。",[71,111226,110520],{}," 表示绕 y 轴旋转。",[71,111229,110526],{}," 表示有一点阻尼，运动不会完全无损耗。",[64,111232,111234],{"className":57348,"code":111233,"language":57350,"meta":69,"style":69},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[71,111235,111236],{"__ignoreMap":69},[74,111237,111238,111240,111242,111244,111246,111249,111251,111253,111256,111259,111261,111264,111266,111268,111270,111272,111274,111277],{"class":76,"line":77},[74,111239,996],{"class":84},[74,111241,105401],{"class":55581},[74,111243,19199],{"class":1925},[74,111245,131],{"class":84},[74,111247,111248],{"class":190},"\"link_geom\"",[74,111250,58105],{"class":1925},[74,111252,131],{"class":84},[74,111254,111255],{"class":190},"\"capsule\"",[74,111257,111258],{"class":1925}," fromto",[74,111260,131],{"class":84},[74,111262,111263],{"class":190},"\"0 0 0 0 0 0.5\"",[74,111265,105417],{"class":1925},[74,111267,131],{"class":84},[74,111269,108059],{"class":190},[74,111271,106282],{"class":1925},[74,111273,131],{"class":84},[74,111275,111276],{"class":190},"\"0.5\"",[74,111278,105425],{"class":84},[19,111280,111281,111282,111284,111285,111287,111288,111291,111292,32666,111295,111297],{},"这行定义摆杆的形状。",[71,111283,107446],{}," 是胶囊体，适合表示杆子。",[71,111286,107457],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[71,111289,111290],{},"(0,0,0)"," 延伸到 ",[71,111293,111294],{},"(0,0,0.5)",[71,111296,107451],{}," 是半径。",[64,111299,111300],{"className":57348,"code":110534,"language":57350,"meta":69,"style":69},[71,111301,111302],{"__ignoreMap":69},[74,111303,111304,111306,111308,111310,111312,111314,111316,111318,111320,111322,111324,111326,111328,111330,111332,111334,111336,111338],{"class":76,"line":77},[74,111305,996],{"class":84},[74,111307,110355],{"class":55581},[74,111309,19199],{"class":1925},[74,111311,131],{"class":84},[74,111313,110362],{"class":190},[74,111315,110365],{"class":1925},[74,111317,131],{"class":84},[74,111319,110300],{"class":190},[74,111321,110372],{"class":1925},[74,111323,131],{"class":84},[74,111325,3641],{"class":190},[74,111327,110379],{"class":1925},[74,111329,131],{"class":84},[74,111331,110384],{"class":190},[74,111333,110387],{"class":1925},[74,111335,131],{"class":84},[74,111337,110392],{"class":190},[74,111339,105425],{"class":84},[19,111341,111342,111343,111345,111346,111349,111350,111352],{},"这行定义电机。它作用在 ",[71,111344,110121],{}," 关节上。",[71,111347,111348],{},"gear"," 可以理解成放大倍数。",[71,111351,110136],{}," 限制控制输入范围。",[64,111354,111355],{"className":34659,"code":111048,"language":34661,"meta":69,"style":69},[71,111356,111357,111369],{"__ignoreMap":69},[74,111358,111359,111361,111363,111365,111367],{"class":76,"line":77},[74,111360,1493],{"class":80},[74,111362,110839],{"class":84},[74,111364,25227],{"class":80},[74,111366,29399],{"class":134},[74,111368,3702],{"class":84},[74,111370,111371,111373,111375,111377,111379],{"class":76,"line":94},[74,111372,108176],{"class":80},[74,111374,107716],{"class":134},[74,111376,85],{"class":84},[74,111378,110856],{"class":190},[74,111380,91],{"class":84},[19,111382,111383,111385],{},[71,111384,106439],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[64,111387,111389],{"className":34659,"code":111388,"language":34661,"meta":69,"style":69},"for step in range(2000):\n",[71,111390,111391],{"__ignoreMap":69},[74,111392,111393,111395,111397,111399,111401,111403,111405],{"class":76,"line":77},[74,111394,2988],{"class":80},[74,111396,35897],{"class":84},[74,111398,30324],{"class":80},[74,111400,36724],{"class":134},[74,111402,85],{"class":84},[74,111404,110877],{"class":134},[74,111406,35067],{"class":84},[19,111408,111409,111410,111412,111413,111416],{},"循环 2000 步。这里没有用 ",[71,111411,1078],{},"，而是用 ",[71,111414,111415],{},"step","，因为后面要用当前步数计算时间。",[64,111418,111420],{"className":34659,"code":111419,"language":34661,"meta":69,"style":69},"t = step * model.opt.timestep\n",[71,111421,111422],{"__ignoreMap":69},[74,111423,111424,111427,111429,111431,111433],{"class":76,"line":77},[74,111425,111426],{"class":84},"t ",[74,111428,131],{"class":80},[74,111430,35897],{"class":84},[74,111432,541],{"class":80},[74,111434,110893],{"class":84},[19,111436,111437],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[64,111439,111440],{"className":34659,"code":111088,"language":34661,"meta":69,"style":69},[71,111441,111442],{"__ignoreMap":69},[74,111443,111444,111446,111448,111450,111452,111454,111456,111458,111460,111462,111464,111466,111468,111470],{"class":76,"line":77},[74,111445,110152],{"class":84},[74,111447,277],{"class":134},[74,111449,4406],{"class":84},[74,111451,131],{"class":80},[74,111453,110907],{"class":134},[74,111455,10797],{"class":80},[74,111457,110912],{"class":84},[74,111459,109541],{"class":134},[74,111461,10797],{"class":80},[74,111463,110919],{"class":84},[74,111465,541],{"class":80},[74,111467,66148],{"class":134},[74,111469,10797],{"class":80},[74,111471,110928],{"class":84},[19,111473,111474],{},"这行给电机输入一个正弦波。拆开看：",[27,111476,111477,111483,111489],{},[30,111478,111479,111482],{},[71,111480,111481],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[30,111484,111485,111488],{},[71,111486,111487],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[30,111490,111491,111494],{},[71,111492,111493],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,111496,111497],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[64,111499,111501],{"className":34659,"code":111500,"language":34661,"meta":69,"style":69},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[71,111502,111503],{"__ignoreMap":69},[74,111504,111505,111507,111509,111511,111513,111515],{"class":76,"line":77},[74,111506,34696],{"class":134},[74,111508,85],{"class":84},[74,111510,110956],{"class":190},[74,111512,109211],{"class":84},[74,111514,379],{"class":134},[74,111516,34778],{"class":84},[19,111518,111519,111520,111522],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[71,111521,105351],{}," 只有一个数。",[14,111524,106597],{"id":106596},[19,111526,111527],{},"输出类似:",[64,111529,111532],{"className":111530,"code":111531,"language":9466,"meta":69},[9464],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[71,111533,111531],{"__ignoreMap":69},[19,111535,111536,111537,111539],{},"这里 ",[71,111538,110407],{}," 是电机输入。",[19,111541,111542,111545,111546,111549],{},[71,111543,111544],{},"joint qpos"," 是关节角度，单位通常是弧度。",[71,111547,111548],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,111551,111552],{},"角度单位提示：",[64,111554,111557],{"className":111555,"code":111556,"language":9466,"meta":69},[9464],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[71,111558,111556],{"__ignoreMap":69},[19,111560,111561,111562,111564,111565,111567],{},"如果你看到 ",[71,111563,108311],{}," 是 ",[71,111566,39610],{},"，大约就是 28.6 度。",[14,111569,106629],{"id":106628},[27,111571,111572,111579,111582,111589,111592,111600,111608],{},[30,111573,106692,111574,106695,111576,32666],{},[71,111575,110592],{},[71,111577,111578],{},"gear=\"5\"",[30,111580,111581],{},"重新运行，观察关节运动是否更剧烈。",[30,111583,106692,111584,106695,111586,32666],{},[71,111585,110136],{},[71,111587,111588],{},"-0.2 0.2",[30,111590,111591],{},"重新运行，观察控制能力是否变弱。",[30,111593,111594,111595,111597,111598,32666],{},"去掉 actuator，确认 ",[71,111596,106439],{}," 变成 ",[71,111599,277],{},[30,111601,106692,111602,106695,111604,111607],{},[71,111603,110526],{},[71,111605,111606],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[30,111609,106692,111610,106695,111612,111615],{},[71,111611,110520],{},[71,111613,111614],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,111617,106734],{"id":106733},[44,111619,111621],{"id":111620},"indexerror-index-0-is-out-of-bounds",[71,111622,111623],{},"IndexError: index 0 is out of bounds",[19,111625,111626,111627,111629],{},"原因是 ",[71,111628,110273],{},"，没有 actuator。",[44,111631,111632],{"id":111632},"关节几乎不动",[19,111634,111635],{},"可能原因:",[27,111637,111638,111643,111647,111653],{},[30,111639,111640,111642],{},[71,111641,111348],{}," 太小",[30,111644,111645,111642],{},[71,111646,110136],{},[30,111648,111649,111652],{},[71,111650,111651],{},"damping"," 太大",[30,111654,111655],{},"重力方向导致运动不明显",[44,111657,111658],{"id":111658},"模型编译失败",[19,111660,111661,111662,111664],{},"检查 actuator 引用的 ",[71,111663,110583],{}," 是否存在，joint 名称是否拼写一致。",[44,111666,111668,111670],{"id":111667},"datactrl0-写了但没有效果",[71,111669,110407],{}," 写了但没有效果",[19,111672,106856],{},[27,111674,111675,111680,111683,111688,111693],{},[30,111676,111677,111679],{},[71,111678,106439],{}," 是否大于 0。",[30,111681,111682],{},"motor 是否引用了正确 joint。",[30,111684,111685,111687],{},[71,111686,111348],{}," 是否太小。",[30,111689,111690,111692],{},[71,111691,110136],{}," 是否把输入限制得太小。",[30,111694,111695],{},"body 是否真的有可动 joint。",[44,111697,111698],{"id":111698},"控制输入超过范围会怎样",[19,111700,111701],{},"如果设置了：",[64,111703,111705],{"className":57348,"code":111704,"language":57350,"meta":69,"style":69},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[71,111706,111707],{"__ignoreMap":69},[74,111708,111709],{"class":76,"line":77},[74,111710,111704],{"class":84},[19,111712,111713],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[64,111715,111717],{"className":34659,"code":111716,"language":34661,"meta":69,"style":69},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[71,111718,111719,111739],{"__ignoreMap":69},[74,111720,111721,111724,111726,111729,111731,111733,111735,111737],{"class":76,"line":77},[74,111722,111723],{"class":84},"action ",[74,111725,131],{"class":80},[74,111727,111728],{"class":84}," np.clip(action, ",[74,111730,618],{"class":80},[74,111732,109541],{"class":134},[74,111734,16714],{"class":84},[74,111736,109541],{"class":134},[74,111738,91],{"class":84},[74,111740,111741,111743,111745,111747,111749],{"class":76,"line":94},[74,111742,110152],{"class":84},[74,111744,277],{"class":134},[74,111746,4406],{"class":84},[74,111748,131],{"class":80},[74,111750,111751],{"class":84}," action\n",[14,111753,106888],{"id":106887},[19,111755,111756],{},"这一章建立了控制任务的基本形式：",[64,111758,111761],{"className":111759,"code":111760,"language":9466,"meta":69},[9464],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[71,111762,111760],{"__ignoreMap":69},[19,111764,111765],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5090,111767,111768],{},"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":69,"searchDepth":94,"depth":94,"links":111770},[111771,111772,111773,111778,111782,111783,111784,111792],{"id":104927,"depth":94,"text":104928},{"id":105050,"depth":94,"text":105051},{"id":105325,"depth":94,"text":105326,"children":111774},[111775,111776,111777],{"id":110414,"depth":1141,"text":110415},{"id":110464,"depth":1141,"text":110465},{"id":110530,"depth":1141,"text":110531},{"id":105533,"depth":94,"text":105534,"children":111779},[111780,111781],{"id":105853,"depth":1141,"text":105853},{"id":105989,"depth":1141,"text":105989},{"id":106596,"depth":94,"text":106597},{"id":106628,"depth":94,"text":106629},{"id":106733,"depth":94,"text":106734,"children":111785},[111786,111787,111788,111789,111791],{"id":111620,"depth":1141,"text":111623},{"id":111632,"depth":1141,"text":111632},{"id":111658,"depth":1141,"text":111658},{"id":111667,"depth":1141,"text":111790},"data.ctrl[0] 写了但没有效果",{"id":111698,"depth":1141,"text":111698},{"id":106887,"depth":94,"text":106888},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":110102,"description":69},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":111799,"title":111800,"body":111801,"description":69,"extension":5121,"meta":113710,"navigation":2362,"path":113711,"seo":113712,"stem":113713,"__hash__":113714},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":111802,"toc":113686},[111803,111806,111808,111811,111819,111822,111839,111842,111867,111870,111916,111918,111920,111975,111977,111996,111998,112041,112044,112061,112064,112080,112090,112097,112099,112102,112105,112139,112142,112190,112194,112197,112211,112220,112224,112227,112252,112255,112259,112272,112275,112281,112284,112299,112301,112304,112564,112566,112578,112581,112893,112895,112907,112909,112912,112927,112932,112935,112957,112960,112963,112997,113000,113004,113015,113018,113035,113038,113052,113059,113079,113086,113100,113103,113115,113130,113150,113153,113175,113178,113182,113197,113208,113223,113226,113256,113272,113301,113309,113333,113336,113354,113364,113376,113383,113392,113398,113407,113410,113412,113421,113424,113439,113441,113444,113455,113458,113469,113472,113490,113492,113509,113512,113540,113542,113546,113549,113579,113585,113588,113592,113600,113603,113605,113626,113629,113632,113648,113651,113667,113669,113672,113683],[10,111804,111800],{"id":111805},"_5viewer-可视化与-renderer-离屏渲染",[14,111807,104928],{"id":104927},[19,111809,111810],{},"本章掌握两类可视化方式:",[27,111812,111813,111816],{},[30,111814,111815],{},"交互式 viewer: 适合人工观察仿真",[30,111817,111818],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,111820,111821],{},"使用官方接口:",[64,111823,111825],{"className":34659,"code":111824,"language":34661,"meta":69,"style":69},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[71,111826,111827,111834],{"__ignoreMap":69},[74,111828,111829,111831],{"class":76,"line":77},[74,111830,34673],{"class":80},[74,111832,111833],{"class":84}," mujoco.viewer\n",[74,111835,111836],{"class":76,"line":94},[74,111837,111838],{"class":84},"mujoco.viewer.launch_passive(model, data)\n",[19,111840,111841],{},"以及:",[64,111843,111845],{"className":34659,"code":111844,"language":34661,"meta":69,"style":69},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[71,111846,111847,111857],{"__ignoreMap":69},[74,111848,111849,111852,111854],{"class":76,"line":77},[74,111850,111851],{"class":84},"renderer ",[74,111853,131],{"class":80},[74,111855,111856],{"class":84}," mujoco.Renderer(model)\n",[74,111858,111859,111862,111864],{"class":76,"line":94},[74,111860,111861],{"class":84},"image ",[74,111863,131],{"class":80},[74,111865,111866],{"class":84}," renderer.render()\n",[19,111868,111869],{},"新手建议先理解二者区别：",[223,111871,111872,111888],{},[226,111873,111874],{},[229,111875,111876,111879,111882,111885],{},[232,111877,111878],{"align":28016},"工具",[232,111880,111881],{"align":28016},"用途",[232,111883,111884],{"align":28016},"是否打开窗口",[232,111886,111887],{"align":28016},"常见场景",[270,111889,111890,111903],{},[229,111891,111892,111895,111898,111900],{},[275,111893,111894],{"align":28016},"Viewer",[275,111896,111897],{"align":28016},"人眼实时观察仿真",[275,111899,108946],{"align":28016},[275,111901,111902],{"align":28016},"调试模型、看控制效果",[229,111904,111905,111908,111911,111913],{},[275,111906,111907],{"align":28016},"Renderer",[275,111909,111910],{"align":28016},"生成图像数组",[275,111912,108959],{"align":28016},[275,111914,111915],{"align":28016},"保存图片、训练视觉策略、服务器批量采集",[14,111917,105051],{"id":105050},[19,111919,105054],{},[64,111921,111923],{"className":28102,"code":111922,"language":28104,"meta":69,"style":69},"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",[71,111924,111925,111937,111947,111955,111963],{"__ignoreMap":69},[74,111926,111927,111929,111931,111933,111935],{"class":76,"line":77},[74,111928,28857],{"class":1925},[74,111930,30596],{"class":190},[74,111932,28114],{"class":190},[74,111934,30681],{"class":134},[74,111936,28959],{"class":134},[74,111938,111939,111941,111943,111945],{"class":76,"line":94},[74,111940,105089],{"class":190},[74,111942,105092],{"class":190},[74,111944,105095],{"class":190},[74,111946,28959],{"class":134},[74,111948,111949,111951,111953],{"class":76,"line":1141},[74,111950,105102],{"class":190},[74,111952,105105],{"class":190},[74,111954,28959],{"class":134},[74,111956,111957,111959,111961],{"class":76,"line":1156},[74,111958,105112],{"class":190},[74,111960,105115],{"class":190},[74,111962,28959],{"class":134},[74,111964,111965,111967,111969,111971,111973],{"class":76,"line":1162},[74,111966,105122],{"class":190},[74,111968,105125],{"class":190},[74,111970,105128],{"class":190},[74,111972,105131],{"class":190},[74,111974,106797],{"class":190},[19,111976,107100],{},[64,111978,111980],{"className":28102,"code":111979,"language":28104,"meta":69,"style":69},"pip install \"mujoco>=2.3\" numpy pillow\n",[71,111981,111982],{"__ignoreMap":69},[74,111983,111984,111986,111988,111990,111993],{"class":76,"line":77},[74,111985,28111],{"class":1925},[74,111987,28114],{"class":190},[74,111989,105211],{"class":190},[74,111991,111992],{"class":190}," numpy",[74,111994,111995],{"class":190}," pillow\n",[19,111997,107117],{},[64,111999,112001],{"className":28102,"code":112000,"language":28104,"meta":69,"style":69},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[71,112002,112003,112020,112029],{"__ignoreMap":69},[74,112004,112005,112007,112009,112011,112014,112016,112018],{"class":76,"line":77},[74,112006,34611],{"class":1925},[74,112008,33457],{"class":190},[74,112010,29396],{"class":134},[74,112012,112013],{"class":190}," mujoco-render",[74,112015,105256],{"class":190},[74,112017,105259],{"class":134},[74,112019,105262],{"class":134},[74,112021,112022,112024,112026],{"class":76,"line":94},[74,112023,34611],{"class":1925},[74,112025,105269],{"class":190},[74,112027,112028],{"class":190}," mujoco-render\n",[74,112030,112031,112033,112035,112037,112039],{"class":76,"line":1141},[74,112032,28111],{"class":1925},[74,112034,28114],{"class":190},[74,112036,105211],{"class":190},[74,112038,111992],{"class":190},[74,112040,111995],{"class":190},[19,112042,112043],{},"离屏渲染后端:",[64,112045,112047],{"className":28102,"code":112046,"language":28104,"meta":69,"style":69},"export MUJOCO_GL=egl\n",[71,112048,112049],{"__ignoreMap":69},[74,112050,112051,112053,112056,112058],{"class":76,"line":77},[74,112052,29323],{"class":80},[74,112054,112055],{"class":84}," MUJOCO_GL",[74,112057,131],{"class":80},[74,112059,112060],{"class":84},"egl\n",[19,112062,112063],{},"或:",[64,112065,112067],{"className":28102,"code":112066,"language":28104,"meta":69,"style":69},"export MUJOCO_GL=osmesa\n",[71,112068,112069],{"__ignoreMap":69},[74,112070,112071,112073,112075,112077],{"class":76,"line":77},[74,112072,29323],{"class":80},[74,112074,112055],{"class":84},[74,112076,131],{"class":80},[74,112078,112079],{"class":84},"osmesa\n",[19,112081,112082,112083,112086,112087,32666],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[71,112084,112085],{},"egl"," 失败，再尝试 ",[71,112088,112089],{},"osmesa",[19,112091,112092,112093,112096],{},"如果你在本机桌面环境运行，通常先不要设置 ",[71,112094,112095],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,112098,105326],{"id":105325},[19,112100,112101],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,112103,112104],{},"典型 viewer 流程:",[64,112106,112108],{"className":34659,"code":112107,"language":34661,"meta":69,"style":69},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[71,112109,112110,112123,112130,112134],{"__ignoreMap":69},[74,112111,112112,112115,112118,112120],{"class":76,"line":77},[74,112113,112114],{"class":80},"with",[74,112116,112117],{"class":84}," mujoco.viewer.launch_passive(model, data) ",[74,112119,35664],{"class":80},[74,112121,112122],{"class":84}," viewer:\n",[74,112124,112125,112127],{"class":76,"line":94},[74,112126,2213],{"class":80},[74,112128,112129],{"class":84}," viewer.is_running():\n",[74,112131,112132],{"class":76,"line":1141},[74,112133,105797],{"class":84},[74,112135,112136],{"class":76,"line":1156},[74,112137,112138],{"class":84},"        viewer.sync()\n",[19,112140,112141],{},"典型 renderer 流程:",[64,112143,112145],{"className":34659,"code":112144,"language":34661,"meta":69,"style":69},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[71,112146,112147,112173,112177,112182],{"__ignoreMap":69},[74,112148,112149,112151,112153,112156,112158,112160,112162,112164,112166,112168,112171],{"class":76,"line":77},[74,112150,111851],{"class":84},[74,112152,131],{"class":80},[74,112154,112155],{"class":84}," mujoco.Renderer(model, ",[74,112157,29262],{"class":9495},[74,112159,131],{"class":80},[74,112161,46623],{"class":134},[74,112163,16714],{"class":84},[74,112165,29258],{"class":9495},[74,112167,131],{"class":80},[74,112169,112170],{"class":134},"640",[74,112172,91],{"class":84},[74,112174,112175],{"class":76,"line":94},[74,112176,108786],{"class":84},[74,112178,112179],{"class":76,"line":1141},[74,112180,112181],{"class":84},"renderer.update_scene(data)\n",[74,112183,112184,112186,112188],{"class":76,"line":1156},[74,112185,111861],{"class":84},[74,112187,131],{"class":80},[74,112189,111866],{"class":84},[44,112191,112193],{"id":112192},"viewer-的同步逻辑","viewer 的同步逻辑",[19,112195,112196],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[64,112198,112200],{"className":34659,"code":112199,"language":34661,"meta":69,"style":69},"mujoco.mj_step(model, data)\nviewer.sync()\n",[71,112201,112202,112206],{"__ignoreMap":69},[74,112203,112204],{"class":76,"line":77},[74,112205,108786],{"class":84},[74,112207,112208],{"class":76,"line":94},[74,112209,112210],{"class":84},"viewer.sync()\n",[19,112212,112213,112215,112216,112219],{},[71,112214,105496],{}," 负责算物理，",[71,112217,112218],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[44,112221,112223],{"id":112222},"为什么要-sleep","为什么要 sleep",[19,112225,112226],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[64,112228,112230],{"className":34659,"code":112229,"language":34661,"meta":69,"style":69},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[71,112231,112232],{"__ignoreMap":69},[74,112233,112234,112237,112239,112242,112244,112247,112249],{"class":76,"line":77},[74,112235,112236],{"class":84},"sleep_time ",[74,112238,131],{"class":80},[74,112240,112241],{"class":84}," model.opt.timestep ",[74,112243,618],{"class":80},[74,112245,112246],{"class":84}," (time.time() ",[74,112248,618],{"class":80},[74,112250,112251],{"class":84}," step_start)\n",[19,112253,112254],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[44,112256,112258],{"id":112257},"renderer-输出是什么","renderer 输出是什么",[64,112260,112262],{"className":34659,"code":112261,"language":34661,"meta":69,"style":69},"image = renderer.render()\n",[71,112263,112264],{"__ignoreMap":69},[74,112265,112266,112268,112270],{"class":76,"line":77},[74,112267,111861],{"class":84},[74,112269,131],{"class":80},[74,112271,111866],{"class":84},[19,112273,112274],{},"得到的是 NumPy 数组，形状通常是：",[64,112276,112279],{"className":112277,"code":112278,"language":9466,"meta":69},[9464],"(height, width, 3)\n",[71,112280,112278],{"__ignoreMap":69},[19,112282,112283],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[64,112285,112287],{"className":34659,"code":112286,"language":34661,"meta":69,"style":69},"Image.fromarray(image).save(\"render_output.png\")\n",[71,112288,112289],{"__ignoreMap":69},[74,112290,112291,112294,112297],{"class":76,"line":77},[74,112292,112293],{"class":84},"Image.fromarray(image).save(",[74,112295,112296],{"class":190},"\"render_output.png\"",[74,112298,91],{"class":84},[14,112300,105534],{"id":105533},[19,112302,112303],{},"交互式 Viewer:",[64,112305,112307],{"className":34659,"code":112306,"language":34661,"meta":69,"style":69},"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",[71,112308,112309,112315,112319,112325,112331,112335,112339,112347,112352,112356,112360,112364,112369,112374,112378,112382,112386,112391,112395,112399,112403,112407,112411,112415,112427,112439,112447,112451,112461,112481,112491,112496,112501,112505,112522,112535,112540,112544,112548,112560],{"__ignoreMap":69},[74,112310,112311,112313],{"class":76,"line":77},[74,112312,34673],{"class":80},[74,112314,36110],{"class":84},[74,112316,112317],{"class":76,"line":94},[74,112318,2363],{"emptyLinePlaceholder":2362},[74,112320,112321,112323],{"class":76,"line":1141},[74,112322,34673],{"class":80},[74,112324,105582],{"class":84},[74,112326,112327,112329],{"class":76,"line":1156},[74,112328,34673],{"class":80},[74,112330,111833],{"class":84},[74,112332,112333],{"class":76,"line":1162},[74,112334,2363],{"emptyLinePlaceholder":2362},[74,112336,112337],{"class":76,"line":1176},[74,112338,2363],{"emptyLinePlaceholder":2362},[74,112340,112341,112343,112345],{"class":76,"line":1182},[74,112342,105595],{"class":134},[74,112344,17843],{"class":80},[74,112346,105600],{"class":190},[74,112348,112349],{"class":76,"line":1273},[74,112350,112351],{"class":190},"\u003Cmujoco model=\"viewer_demo\">\n",[74,112353,112354],{"class":76,"line":1279},[74,112355,105610],{"class":190},[74,112357,112358],{"class":76,"line":1291},[74,112359,2363],{"emptyLinePlaceholder":2362},[74,112361,112362],{"class":76,"line":1574},[74,112363,105619],{"class":190},[74,112365,112366],{"class":76,"line":1579},[74,112367,112368],{"class":190},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[74,112370,112371],{"class":76,"line":1585},[74,112372,112373],{"class":190},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[74,112375,112376],{"class":76,"line":1590},[74,112377,2363],{"emptyLinePlaceholder":2362},[74,112379,112380],{"class":76,"line":1604},[74,112381,105633],{"class":190},[74,112383,112384],{"class":76,"line":1609},[74,112385,105638],{"class":190},[74,112387,112388],{"class":76,"line":1615},[74,112389,112390],{"class":190},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[74,112392,112393],{"class":76,"line":1636},[74,112394,105648],{"class":190},[74,112396,112397],{"class":76,"line":1641},[74,112398,105653],{"class":190},[74,112400,112401],{"class":76,"line":1655},[74,112402,105658],{"class":190},[74,112404,112405],{"class":76,"line":1660},[74,112406,99979],{"class":190},[74,112408,112409],{"class":76,"line":1689},[74,112410,2363],{"emptyLinePlaceholder":2362},[74,112412,112413],{"class":76,"line":1694},[74,112414,2363],{"emptyLinePlaceholder":2362},[74,112416,112417,112419,112421,112423,112425],{"class":76,"line":1711},[74,112418,36228],{"class":80},[74,112420,1935],{"class":1925},[74,112422,105679],{"class":84},[74,112424,99967],{"class":134},[74,112426,3702],{"class":84},[74,112428,112429,112431,112433,112435,112437],{"class":76,"line":1716},[74,112430,105688],{"class":84},[74,112432,131],{"class":80},[74,112434,105693],{"class":84},[74,112436,105595],{"class":134},[74,112438,91],{"class":84},[74,112440,112441,112443,112445],{"class":76,"line":1721},[74,112442,105702],{"class":84},[74,112444,131],{"class":80},[74,112446,105707],{"class":84},[74,112448,112449],{"class":76,"line":1726},[74,112450,2363],{"emptyLinePlaceholder":2362},[74,112452,112453,112455,112457,112459],{"class":76,"line":1740},[74,112454,38459],{"class":80},[74,112456,112117],{"class":84},[74,112458,35664],{"class":80},[74,112460,112122],{"class":84},[74,112462,112463,112466,112469,112471,112474,112476,112479],{"class":76,"line":1745},[74,112464,112465],{"class":80},"        while",[74,112467,112468],{"class":84}," viewer.is_running() ",[74,112470,34743],{"class":80},[74,112472,112473],{"class":84}," data.time ",[74,112475,996],{"class":80},[74,112477,112478],{"class":134}," 5.0",[74,112480,3702],{"class":84},[74,112482,112483,112486,112488],{"class":76,"line":2540},[74,112484,112485],{"class":84},"            step_start ",[74,112487,131],{"class":80},[74,112489,112490],{"class":84}," time.time()\n",[74,112492,112493],{"class":76,"line":2554},[74,112494,112495],{"class":84},"            mujoco.mj_step(model, data)\n",[74,112497,112498],{"class":76,"line":2562},[74,112499,112500],{"class":84},"            viewer.sync()\n",[74,112502,112503],{"class":76,"line":2567},[74,112504,2363],{"emptyLinePlaceholder":2362},[74,112506,112507,112510,112512,112514,112516,112518,112520],{"class":76,"line":2573},[74,112508,112509],{"class":84},"            sleep_time ",[74,112511,131],{"class":80},[74,112513,112241],{"class":84},[74,112515,618],{"class":80},[74,112517,112246],{"class":84},[74,112519,618],{"class":80},[74,112521,112251],{"class":84},[74,112523,112524,112526,112529,112531,112533],{"class":76,"line":2579},[74,112525,4605],{"class":80},[74,112527,112528],{"class":84}," sleep_time ",[74,112530,1046],{"class":80},[74,112532,4056],{"class":134},[74,112534,3702],{"class":84},[74,112536,112537],{"class":76,"line":2584},[74,112538,112539],{"class":84},"                time.sleep(sleep_time)\n",[74,112541,112542],{"class":76,"line":12227},[74,112543,2363],{"emptyLinePlaceholder":2362},[74,112545,112546],{"class":76,"line":12251},[74,112547,2363],{"emptyLinePlaceholder":2362},[74,112549,112550,112552,112554,112556,112558],{"class":76,"line":12256},[74,112551,1493],{"class":80},[74,112553,35501],{"class":134},[74,112555,105840],{"class":80},[74,112557,105843],{"class":190},[74,112559,3702],{"class":84},[74,112561,112562],{"class":76,"line":12262},[74,112563,105850],{"class":84},[19,112565,107851],{},[64,112567,112569],{"className":28102,"code":112568,"language":28104,"meta":69,"style":69},"touch ch5_viewer.py\n",[71,112570,112571],{"__ignoreMap":69},[74,112572,112573,112575],{"class":76,"line":77},[74,112574,105564],{"class":1925},[74,112576,112577],{"class":190}," ch5_viewer.py\n",[19,112579,112580],{},"离屏 Renderer 保存图片:",[64,112582,112584],{"className":34659,"code":112583,"language":34661,"meta":69,"style":69},"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",[71,112585,112586,112598,112602,112608,112618,112622,112626,112634,112639,112643,112647,112651,112655,112660,112664,112668,112672,112676,112680,112684,112688,112692,112696,112700,112704,112716,112728,112736,112761,112765,112781,112785,112789,112804,112813,112817,112831,112836,112841,112845,112857,112869,112873,112877,112889],{"__ignoreMap":69},[74,112587,112588,112590,112593,112595],{"class":76,"line":77},[74,112589,35018],{"class":80},[74,112591,112592],{"class":84}," pathlib ",[74,112594,34673],{"class":80},[74,112596,112597],{"class":84}," Path\n",[74,112599,112600],{"class":76,"line":94},[74,112601,2363],{"emptyLinePlaceholder":2362},[74,112603,112604,112606],{"class":76,"line":1141},[74,112605,34673],{"class":80},[74,112607,105582],{"class":84},[74,112609,112610,112612,112614,112616],{"class":76,"line":1156},[74,112611,35018],{"class":80},[74,112613,51544],{"class":134},[74,112615,51547],{"class":80},[74,112617,51550],{"class":84},[74,112619,112620],{"class":76,"line":1162},[74,112621,2363],{"emptyLinePlaceholder":2362},[74,112623,112624],{"class":76,"line":1176},[74,112625,2363],{"emptyLinePlaceholder":2362},[74,112627,112628,112630,112632],{"class":76,"line":1182},[74,112629,105595],{"class":134},[74,112631,17843],{"class":80},[74,112633,105600],{"class":190},[74,112635,112636],{"class":76,"line":1273},[74,112637,112638],{"class":190},"\u003Cmujoco model=\"renderer_demo\">\n",[74,112640,112641],{"class":76,"line":1279},[74,112642,105610],{"class":190},[74,112644,112645],{"class":76,"line":1291},[74,112646,2363],{"emptyLinePlaceholder":2362},[74,112648,112649],{"class":76,"line":1574},[74,112650,105619],{"class":190},[74,112652,112653],{"class":76,"line":1579},[74,112654,112368],{"class":190},[74,112656,112657],{"class":76,"line":1585},[74,112658,112659],{"class":190},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[74,112661,112662],{"class":76,"line":1590},[74,112663,112373],{"class":190},[74,112665,112666],{"class":76,"line":1604},[74,112667,2363],{"emptyLinePlaceholder":2362},[74,112669,112670],{"class":76,"line":1609},[74,112671,105633],{"class":190},[74,112673,112674],{"class":76,"line":1615},[74,112675,105638],{"class":190},[74,112677,112678],{"class":76,"line":1636},[74,112679,112390],{"class":190},[74,112681,112682],{"class":76,"line":1641},[74,112683,105648],{"class":190},[74,112685,112686],{"class":76,"line":1655},[74,112687,105653],{"class":190},[74,112689,112690],{"class":76,"line":1660},[74,112691,105658],{"class":190},[74,112693,112694],{"class":76,"line":1689},[74,112695,99979],{"class":190},[74,112697,112698],{"class":76,"line":1694},[74,112699,2363],{"emptyLinePlaceholder":2362},[74,112701,112702],{"class":76,"line":1711},[74,112703,2363],{"emptyLinePlaceholder":2362},[74,112705,112706,112708,112710,112712,112714],{"class":76,"line":1716},[74,112707,36228],{"class":80},[74,112709,1935],{"class":1925},[74,112711,105679],{"class":84},[74,112713,99967],{"class":134},[74,112715,3702],{"class":84},[74,112717,112718,112720,112722,112724,112726],{"class":76,"line":1721},[74,112719,105688],{"class":84},[74,112721,131],{"class":80},[74,112723,105693],{"class":84},[74,112725,105595],{"class":134},[74,112727,91],{"class":84},[74,112729,112730,112732,112734],{"class":76,"line":1726},[74,112731,105702],{"class":84},[74,112733,131],{"class":80},[74,112735,105707],{"class":84},[74,112737,112738,112741,112743,112745,112747,112749,112751,112753,112755,112757,112759],{"class":76,"line":1740},[74,112739,112740],{"class":84},"    renderer ",[74,112742,131],{"class":80},[74,112744,112155],{"class":84},[74,112746,29262],{"class":9495},[74,112748,131],{"class":80},[74,112750,46623],{"class":134},[74,112752,16714],{"class":84},[74,112754,29258],{"class":9495},[74,112756,131],{"class":80},[74,112758,112170],{"class":134},[74,112760,91],{"class":84},[74,112762,112763],{"class":76,"line":1745},[74,112764,2363],{"emptyLinePlaceholder":2362},[74,112766,112767,112769,112771,112773,112775,112777,112779],{"class":76,"line":2540},[74,112768,3164],{"class":80},[74,112770,105782],{"class":84},[74,112772,30324],{"class":80},[74,112774,36724],{"class":134},[74,112776,85],{"class":84},[74,112778,397],{"class":134},[74,112780,35067],{"class":84},[74,112782,112783],{"class":76,"line":2554},[74,112784,105797],{"class":84},[74,112786,112787],{"class":76,"line":2562},[74,112788,2363],{"emptyLinePlaceholder":2362},[74,112790,112791,112794,112797,112799,112802],{"class":76,"line":2567},[74,112792,112793],{"class":84},"    renderer.update_scene(data, ",[74,112795,112796],{"class":9495},"camera",[74,112798,131],{"class":80},[74,112800,112801],{"class":190},"\"fixed_camera\"",[74,112803,91],{"class":84},[74,112805,112806,112809,112811],{"class":76,"line":2573},[74,112807,112808],{"class":84},"    image ",[74,112810,131],{"class":80},[74,112812,111866],{"class":84},[74,112814,112815],{"class":76,"line":2579},[74,112816,2363],{"emptyLinePlaceholder":2362},[74,112818,112819,112822,112824,112827,112829],{"class":76,"line":2584},[74,112820,112821],{"class":84},"    output_path ",[74,112823,131],{"class":80},[74,112825,112826],{"class":84}," Path(",[74,112828,112296],{"class":190},[74,112830,91],{"class":84},[74,112832,112833],{"class":76,"line":12227},[74,112834,112835],{"class":84},"    Image.fromarray(image).save(output_path)\n",[74,112837,112838],{"class":76,"line":12251},[74,112839,112840],{"class":84},"    renderer.close()\n",[74,112842,112843],{"class":76,"line":12256},[74,112844,2363],{"emptyLinePlaceholder":2362},[74,112846,112847,112849,112851,112854],{"class":76,"line":12262},[74,112848,35580],{"class":134},[74,112850,85],{"class":84},[74,112852,112853],{"class":190},"\"saved:\"",[74,112855,112856],{"class":84},", output_path.resolve())\n",[74,112858,112859,112861,112863,112866],{"class":76,"line":12289},[74,112860,35580],{"class":134},[74,112862,85],{"class":84},[74,112864,112865],{"class":190},"\"image shape:\"",[74,112867,112868],{"class":84},", image.shape)\n",[74,112870,112871],{"class":76,"line":12294},[74,112872,2363],{"emptyLinePlaceholder":2362},[74,112874,112875],{"class":76,"line":12300},[74,112876,2363],{"emptyLinePlaceholder":2362},[74,112878,112879,112881,112883,112885,112887],{"class":76,"line":12312},[74,112880,1493],{"class":80},[74,112882,35501],{"class":134},[74,112884,105840],{"class":80},[74,112886,105843],{"class":190},[74,112888,3702],{"class":84},[74,112890,112891],{"class":76,"line":12324},[74,112892,105850],{"class":84},[19,112894,107851],{},[64,112896,112898],{"className":28102,"code":112897,"language":28104,"meta":69,"style":69},"touch ch5_renderer.py\n",[71,112899,112900],{"__ignoreMap":69},[74,112901,112902,112904],{"class":76,"line":77},[74,112903,105564],{"class":1925},[74,112905,112906],{"class":190}," ch5_renderer.py\n",[44,112908,105853],{"id":105853},[19,112910,112911],{},"viewer 上下文：",[64,112913,112915],{"className":34659,"code":112914,"language":34661,"meta":69,"style":69},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[71,112916,112917],{"__ignoreMap":69},[74,112918,112919,112921,112923,112925],{"class":76,"line":77},[74,112920,112114],{"class":80},[74,112922,112117],{"class":84},[74,112924,35664],{"class":80},[74,112926,112122],{"class":84},[19,112928,112929,112931],{},[71,112930,112114],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,112933,112934],{},"窗口循环：",[64,112936,112938],{"className":34659,"code":112937,"language":34661,"meta":69,"style":69},"while viewer.is_running() and data.time \u003C 5.0:\n",[71,112939,112940],{"__ignoreMap":69},[74,112941,112942,112945,112947,112949,112951,112953,112955],{"class":76,"line":77},[74,112943,112944],{"class":80},"while",[74,112946,112468],{"class":84},[74,112948,34743],{"class":80},[74,112950,112473],{"class":84},[74,112952,996],{"class":80},[74,112954,112478],{"class":134},[74,112956,3702],{"class":84},[19,112958,112959],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,112961,112962],{},"固定相机：",[64,112964,112966],{"className":57348,"code":112965,"language":57350,"meta":69,"style":69},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[71,112967,112968],{"__ignoreMap":69},[74,112969,112970,112972,112974,112976,112978,112980,112982,112984,112987,112990,112992,112995],{"class":76,"line":77},[74,112971,996],{"class":84},[74,112973,112796],{"class":55581},[74,112975,19199],{"class":1925},[74,112977,131],{"class":84},[74,112979,112801],{"class":190},[74,112981,105387],{"class":1925},[74,112983,131],{"class":84},[74,112985,112986],{"class":190},"\"1.5 -2.0 1.2\"",[74,112988,112989],{"class":1925}," xyaxes",[74,112991,131],{"class":84},[74,112993,112994],{"class":190},"\"1 0.75 0 0 0 1\"",[74,112996,105425],{"class":84},[19,112998,112999],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[44,113001,113003],{"id":113002},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[64,113005,113007],{"className":34659,"code":113006,"language":34661,"meta":69,"style":69},"import time\n",[71,113008,113009],{"__ignoreMap":69},[74,113010,113011,113013],{"class":76,"line":77},[74,113012,34673],{"class":80},[74,113014,36110],{"class":84},[19,113016,113017],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[64,113019,113021],{"className":34659,"code":113020,"language":34661,"meta":69,"style":69},"import mujoco\nimport mujoco.viewer\n",[71,113022,113023,113029],{"__ignoreMap":69},[74,113024,113025,113027],{"class":76,"line":77},[74,113026,34673],{"class":80},[74,113028,105582],{"class":84},[74,113030,113031,113033],{"class":76,"line":94},[74,113032,34673],{"class":80},[74,113034,111833],{"class":84},[19,113036,113037],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[64,113039,113040],{"className":34659,"code":112914,"language":34661,"meta":69,"style":69},[71,113041,113042],{"__ignoreMap":69},[74,113043,113044,113046,113048,113050],{"class":76,"line":77},[74,113045,112114],{"class":80},[74,113047,112117],{"class":84},[74,113049,35664],{"class":80},[74,113051,112122],{"class":84},[19,113053,113054,113055,113058],{},"打开一个 viewer 窗口。",[71,113056,113057],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[64,113060,113061],{"className":34659,"code":112937,"language":34661,"meta":69,"style":69},[71,113062,113063],{"__ignoreMap":69},[74,113064,113065,113067,113069,113071,113073,113075,113077],{"class":76,"line":77},[74,113066,112944],{"class":80},[74,113068,112468],{"class":84},[74,113070,34743],{"class":80},[74,113072,112473],{"class":84},[74,113074,996],{"class":80},[74,113076,112478],{"class":134},[74,113078,3702],{"class":84},[19,113080,113081,113082,113085],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[71,113083,113084],{},"viewer.is_running()"," 会变成 false，循环结束。",[64,113087,113089],{"className":34659,"code":113088,"language":34661,"meta":69,"style":69},"step_start = time.time()\n",[71,113090,113091],{"__ignoreMap":69},[74,113092,113093,113096,113098],{"class":76,"line":77},[74,113094,113095],{"class":84},"step_start ",[74,113097,131],{"class":80},[74,113099,112490],{"class":84},[19,113101,113102],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[64,113104,113105],{"className":34659,"code":112199,"language":34661,"meta":69,"style":69},[71,113106,113107,113111],{"__ignoreMap":69},[74,113108,113109],{"class":76,"line":77},[74,113110,108786],{"class":84},[74,113112,113113],{"class":76,"line":94},[74,113114,112210],{"class":84},[19,113116,113117,113119,113120,113122,113123,113125,113126,113129],{},[71,113118,105496],{}," 推进物理仿真。",[71,113121,112218],{}," 把最新的 ",[71,113124,37682],{}," 同步到窗口里显示。没有 ",[71,113127,113128],{},"sync()","，窗口可能看不到最新状态。",[64,113131,113132],{"className":34659,"code":112229,"language":34661,"meta":69,"style":69},[71,113133,113134],{"__ignoreMap":69},[74,113135,113136,113138,113140,113142,113144,113146,113148],{"class":76,"line":77},[74,113137,112236],{"class":84},[74,113139,131],{"class":80},[74,113141,112241],{"class":84},[74,113143,618],{"class":80},[74,113145,112246],{"class":84},[74,113147,618],{"class":80},[74,113149,112251],{"class":84},[19,113151,113152],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[64,113154,113156],{"className":34659,"code":113155,"language":34661,"meta":69,"style":69},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[71,113157,113158,113170],{"__ignoreMap":69},[74,113159,113160,113162,113164,113166,113168],{"class":76,"line":77},[74,113161,1493],{"class":80},[74,113163,112528],{"class":84},[74,113165,1046],{"class":80},[74,113167,4056],{"class":134},[74,113169,3702],{"class":84},[74,113171,113172],{"class":76,"line":94},[74,113173,113174],{"class":84},"    time.sleep(sleep_time)\n",[19,113176,113177],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[44,113179,113181],{"id":113180},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[64,113183,113185],{"className":34659,"code":113184,"language":34661,"meta":69,"style":69},"from pathlib import Path\n",[71,113186,113187],{"__ignoreMap":69},[74,113188,113189,113191,113193,113195],{"class":76,"line":77},[74,113190,35018],{"class":80},[74,113192,112592],{"class":84},[74,113194,34673],{"class":80},[74,113196,112597],{"class":84},[19,113198,113199,113200,113203,113204,113207],{},"导入 ",[71,113201,113202],{},"Path","，用来处理文件路径。相比直接写字符串，",[71,113205,113206],{},"Path(\"render_output.png\")"," 更清晰。",[64,113209,113211],{"className":34659,"code":113210,"language":34661,"meta":69,"style":69},"from PIL import Image\n",[71,113212,113213],{"__ignoreMap":69},[74,113214,113215,113217,113219,113221],{"class":76,"line":77},[74,113216,35018],{"class":80},[74,113218,51544],{"class":134},[74,113220,51547],{"class":80},[74,113222,51550],{"class":84},[19,113224,113225],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[64,113227,113228],{"className":57348,"code":112965,"language":57350,"meta":69,"style":69},[71,113229,113230],{"__ignoreMap":69},[74,113231,113232,113234,113236,113238,113240,113242,113244,113246,113248,113250,113252,113254],{"class":76,"line":77},[74,113233,996],{"class":84},[74,113235,112796],{"class":55581},[74,113237,19199],{"class":1925},[74,113239,131],{"class":84},[74,113241,112801],{"class":190},[74,113243,105387],{"class":1925},[74,113245,131],{"class":84},[74,113247,112986],{"class":190},[74,113249,112989],{"class":1925},[74,113251,131],{"class":84},[74,113253,112994],{"class":190},[74,113255,105425],{"class":84},[19,113257,113258,113259,113261,113262,113264,113265,113268,113269,113271],{},"定义一个相机。",[71,113260,84091],{}," 是相机名字。",[71,113263,108427],{}," 是相机在世界里的位置。",[71,113266,113267],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[71,113270,108427],{}," 来调视角。",[64,113273,113275],{"className":34659,"code":113274,"language":34661,"meta":69,"style":69},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[71,113276,113277],{"__ignoreMap":69},[74,113278,113279,113281,113283,113285,113287,113289,113291,113293,113295,113297,113299],{"class":76,"line":77},[74,113280,111851],{"class":84},[74,113282,131],{"class":80},[74,113284,112155],{"class":84},[74,113286,29262],{"class":9495},[74,113288,131],{"class":80},[74,113290,46623],{"class":134},[74,113292,16714],{"class":84},[74,113294,29258],{"class":9495},[74,113296,131],{"class":80},[74,113298,112170],{"class":134},[74,113300,91],{"class":84},[19,113302,113303,113304,105299,113306,113308],{},"创建离屏渲染器。",[71,113305,29262],{},[71,113307,29258],{}," 决定输出图片大小。",[64,113310,113311],{"className":34659,"code":105957,"language":34661,"meta":69,"style":69},[71,113312,113313,113329],{"__ignoreMap":69},[74,113314,113315,113317,113319,113321,113323,113325,113327],{"class":76,"line":77},[74,113316,2988],{"class":80},[74,113318,105782],{"class":84},[74,113320,30324],{"class":80},[74,113322,36724],{"class":134},[74,113324,85],{"class":84},[74,113326,397],{"class":134},[74,113328,35067],{"class":84},[74,113330,113331],{"class":76,"line":94},[74,113332,105980],{"class":84},[19,113334,113335],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[64,113337,113339],{"className":34659,"code":113338,"language":34661,"meta":69,"style":69},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[71,113340,113341],{"__ignoreMap":69},[74,113342,113343,113346,113348,113350,113352],{"class":76,"line":77},[74,113344,113345],{"class":84},"renderer.update_scene(data, ",[74,113347,112796],{"class":9495},[74,113349,131],{"class":80},[74,113351,112801],{"class":190},[74,113353,91],{"class":84},[19,113355,113356,113357,113359,113360,113363],{},"告诉 renderer：用当前 ",[71,113358,37682],{}," 的状态更新画面，并使用名为 ",[71,113361,113362],{},"fixed_camera"," 的相机视角。",[64,113365,113366],{"className":34659,"code":112261,"language":34661,"meta":69,"style":69},[71,113367,113368],{"__ignoreMap":69},[74,113369,113370,113372,113374],{"class":76,"line":77},[74,113371,111861],{"class":84},[74,113373,131],{"class":80},[74,113375,111866],{"class":84},[19,113377,113378,113379,113382],{},"真正渲染出图像。",[71,113380,113381],{},"image"," 是一个 NumPy 数组，不是文件。",[64,113384,113386],{"className":34659,"code":113385,"language":34661,"meta":69,"style":69},"Image.fromarray(image).save(output_path)\n",[71,113387,113388],{"__ignoreMap":69},[74,113389,113390],{"class":76,"line":77},[74,113391,113385],{"class":84},[19,113393,113394,113395,32666],{},"把数组转换成图片，并保存到 ",[71,113396,113397],{},"render_output.png",[64,113399,113401],{"className":34659,"code":113400,"language":34661,"meta":69,"style":69},"renderer.close()\n",[71,113402,113403],{"__ignoreMap":69},[74,113404,113405],{"class":76,"line":77},[74,113406,113400],{"class":84},[19,113408,113409],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,113411,106597],{"id":106596},[19,113413,113414,113415,113417,113418,32666],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[71,113416,113397],{},"，并输出图像数组形状，例如 ",[71,113419,113420],{},"(480, 640, 3)",[19,113422,113423],{},"如果图片里看不到方块，先检查：",[27,113425,113426,113429,113432],{},[30,113427,113428],{},"方块是否掉到相机视野外。",[30,113430,113431],{},"camera 位置是否合理。",[30,113433,113434,113435,113438],{},"是否在 ",[71,113436,113437],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,113440,106629],{"id":106628},[19,113442,113443],{},"运行 viewer:",[64,113445,113447],{"className":28102,"code":113446,"language":28104,"meta":69,"style":69},"python ch5_viewer.py\n",[71,113448,113449],{"__ignoreMap":69},[74,113450,113451,113453],{"class":76,"line":77},[74,113452,34661],{"class":1925},[74,113454,112577],{"class":190},[19,113456,113457],{},"运行 renderer:",[64,113459,113461],{"className":28102,"code":113460,"language":28104,"meta":69,"style":69},"python ch5_renderer.py\n",[71,113462,113463],{"__ignoreMap":69},[74,113464,113465,113467],{"class":76,"line":77},[74,113466,34661],{"class":1925},[74,113468,112906],{"class":190},[19,113470,113471],{},"如果在服务器上运行:",[64,113473,113475],{"className":28102,"code":113474,"language":28104,"meta":69,"style":69},"MUJOCO_GL=egl python ch5_renderer.py\n",[71,113476,113477],{"__ignoreMap":69},[74,113478,113479,113481,113483,113485,113488],{"class":76,"line":77},[74,113480,112095],{"class":84},[74,113482,131],{"class":80},[74,113484,112085],{"class":190},[74,113486,113487],{"class":1925}," python",[74,113489,112906],{"class":190},[19,113491,112063],{},[64,113493,113495],{"className":28102,"code":113494,"language":28104,"meta":69,"style":69},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[71,113496,113497],{"__ignoreMap":69},[74,113498,113499,113501,113503,113505,113507],{"class":76,"line":77},[74,113500,112095],{"class":84},[74,113502,131],{"class":80},[74,113504,112089],{"class":190},[74,113506,113487],{"class":1925},[74,113508,112906],{"class":190},[19,113510,113511],{},"再做几个练习：",[27,113513,113514,113521,113524,113530],{},[30,113515,113516,113517,113520],{},"把 renderer 分辨率改成 ",[71,113518,113519],{},"height=240, width=320","，观察输出 shape。",[30,113522,113523],{},"把方块颜色改成蓝色，重新保存图片。",[30,113525,113526,113527,113529],{},"把相机 ",[71,113528,108427],{}," 改远一点，观察画面中物体是否变小。",[30,113531,113532,113533,106695,113536,113539],{},"把 viewer 示例中的 ",[71,113534,113535],{},"data.time \u003C 5.0",[71,113537,113538],{},"data.time \u003C 20.0","，观察更长时间。",[14,113541,106734],{"id":106733},[44,113543,113545],{"id":113544},"viewer-窗口打不开","viewer 窗口打不开",[19,113547,113548],{},"安装:",[64,113550,113552],{"className":28102,"code":113551,"language":28104,"meta":69,"style":69},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[71,113553,113554],{"__ignoreMap":69},[74,113555,113556,113558,113560,113562,113564,113566,113568,113570,113572,113574,113576],{"class":76,"line":77},[74,113557,28857],{"class":1925},[74,113559,30596],{"class":190},[74,113561,28114],{"class":190},[74,113563,30681],{"class":134},[74,113565,106787],{"class":190},[74,113567,105115],{"class":190},[74,113569,106792],{"class":190},[74,113571,105128],{"class":190},[74,113573,105134],{"class":190},[74,113575,105125],{"class":190},[74,113577,113578],{"class":190}," libXinerama\n",[44,113580,113582],{"id":113581},"glfwerror",[71,113583,113584],{},"GLFWError",[19,113586,113587],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[44,113589,113591],{"id":113590},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,113593,113594,113595,86820,113597,113599],{},"尝试 ",[71,113596,105318],{},[71,113598,105321],{},"。可能存在版本差异。",[44,113601,113602],{"id":113602},"保存图片是黑的",[19,113604,106856],{},[27,113606,113607,113610,113613,113623],{},[30,113608,113609],{},"XML 里是否有 light。",[30,113611,113612],{},"相机是否对着模型。",[30,113614,113615,113616,113619,113620,32666],{},"是否先 ",[71,113617,113618],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[71,113621,113622],{},"renderer.render()",[30,113624,113625],{},"物体是否已经掉出视野。",[44,113627,113628],{"id":113628},"远程服务器没有显示器",[19,113630,113631],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[64,113633,113634],{"className":28102,"code":113474,"language":28104,"meta":69,"style":69},[71,113635,113636],{"__ignoreMap":69},[74,113637,113638,113640,113642,113644,113646],{"class":76,"line":77},[74,113639,112095],{"class":84},[74,113641,131],{"class":80},[74,113643,112085],{"class":190},[74,113645,113487],{"class":1925},[74,113647,112906],{"class":190},[19,113649,113650],{},"如果 EGL 不可用，再尝试：",[64,113652,113653],{"className":28102,"code":113494,"language":28104,"meta":69,"style":69},[71,113654,113655],{"__ignoreMap":69},[74,113656,113657,113659,113661,113663,113665],{"class":76,"line":77},[74,113658,112095],{"class":84},[74,113660,131],{"class":80},[74,113662,112089],{"class":190},[74,113664,113487],{"class":1925},[74,113666,112906],{"class":190},[14,113668,106888],{"id":106887},[19,113670,113671],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[27,113673,113674,113677,113680],{},[30,113675,113676],{},"先用 viewer 看模型和控制是否正常。",[30,113678,113679],{},"再用 renderer 保存图片或构造视觉观测。",[30,113681,113682],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5090,113684,113685],{},"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":69,"searchDepth":94,"depth":94,"links":113687},[113688,113689,113690,113695,113700,113701,113702,113709],{"id":104927,"depth":94,"text":104928},{"id":105050,"depth":94,"text":105051},{"id":105325,"depth":94,"text":105326,"children":113691},[113692,113693,113694],{"id":112192,"depth":1141,"text":112193},{"id":112222,"depth":1141,"text":112223},{"id":112257,"depth":1141,"text":112258},{"id":105533,"depth":94,"text":105534,"children":113696},[113697,113698,113699],{"id":105853,"depth":1141,"text":105853},{"id":113002,"depth":1141,"text":113003},{"id":113180,"depth":1141,"text":113181},{"id":106596,"depth":94,"text":106597},{"id":106628,"depth":94,"text":106629},{"id":106733,"depth":94,"text":106734,"children":113703},[113704,113705,113706,113707,113708],{"id":113544,"depth":1141,"text":113545},{"id":113581,"depth":1141,"text":113584},{"id":113590,"depth":1141,"text":113591},{"id":113602,"depth":1141,"text":113602},{"id":113628,"depth":1141,"text":113628},{"id":106887,"depth":94,"text":106888},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":111800,"description":69},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":113716,"title":113717,"body":113718,"description":69,"extension":5121,"meta":115629,"navigation":2362,"path":115630,"seo":115631,"stem":115632,"__hash__":115633},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":113719,"toc":115605},[113720,113723,113725,113728,113730,113749,113752,113758,113761,113763,113765,113789,113791,113805,113807,113848,113850,113861,113863,113866,113872,113875,113909,113912,113944,113947,113979,113983,113986,114026,114029,114035,114038,114044,114048,114051,114057,114060,114064,114067,114107,114109,114122,114125,114127,114709,114711,114723,114726,114737,114739,114742,114761,114773,114776,114797,114800,114803,114846,114849,114852,114872,114879,114881,114899,114914,114917,114923,114926,114932,114949,114956,114987,114998,115032,115043,115060,115069,115077,115082,115096,115099,115120,115126,115140,115145,115175,115185,115210,115218,115241,115244,115260,115263,115271,115277,115299,115312,115333,115342,115381,115392,115394,115397,115403,115406,115409,115415,115418,115438,115441,115443,115482,115484,115487,115495,115498,115501,115528,115531,115541,115547,115550,115556,115558,115564,115568,115571,115573,115576,115600,115603],[10,113721,113717],{"id":113722},"_6控制任务cartpole",[14,113724,104928],{"id":104927},[19,113726,113727],{},"本章搭建一个最小 Cartpole 控制任务。",[19,113729,108612],{},[27,113731,113732,113735,113737,113740,113743,113746],{},[30,113733,113734],{},"slide joint",[30,113736,110465],{},[30,113738,113739],{},"cart force actuator",[30,113741,113742],{},"状态观测",[30,113744,113745],{},"简单控制循环",[30,113747,113748],{},"reward 设计雏形",[19,113750,113751],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[64,113753,113756],{"className":113754,"code":113755,"language":9466,"meta":69},[9464],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[71,113757,113755],{"__ignoreMap":69},[19,113759,113760],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,113762,105051],{"id":105050},[19,113764,105054],{},[64,113766,113767],{"className":28102,"code":108669,"language":28104,"meta":69,"style":69},[71,113768,113769],{"__ignoreMap":69},[74,113770,113771,113773,113775,113777,113779,113781,113783,113785,113787],{"class":76,"line":77},[74,113772,28857],{"class":1925},[74,113774,30596],{"class":190},[74,113776,28114],{"class":190},[74,113778,30681],{"class":134},[74,113780,108684],{"class":190},[74,113782,105079],{"class":190},[74,113784,106782],{"class":190},[74,113786,105095],{"class":190},[74,113788,108693],{"class":190},[19,113790,107100],{},[64,113792,113793],{"className":28102,"code":105200,"language":28104,"meta":69,"style":69},[71,113794,113795],{"__ignoreMap":69},[74,113796,113797,113799,113801,113803],{"class":76,"line":77},[74,113798,28111],{"class":1925},[74,113800,28114],{"class":190},[74,113802,105211],{"class":190},[74,113804,105214],{"class":190},[19,113806,107117],{},[64,113808,113810],{"className":28102,"code":113809,"language":28104,"meta":69,"style":69},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[71,113811,113812,113829,113838],{"__ignoreMap":69},[74,113813,113814,113816,113818,113820,113823,113825,113827],{"class":76,"line":77},[74,113815,34611],{"class":1925},[74,113817,33457],{"class":190},[74,113819,29396],{"class":134},[74,113821,113822],{"class":190}," mujoco-cartpole",[74,113824,105256],{"class":190},[74,113826,105259],{"class":134},[74,113828,105262],{"class":134},[74,113830,113831,113833,113835],{"class":76,"line":94},[74,113832,34611],{"class":1925},[74,113834,105269],{"class":190},[74,113836,113837],{"class":190}," mujoco-cartpole\n",[74,113839,113840,113842,113844,113846],{"class":76,"line":1141},[74,113841,28111],{"class":1925},[74,113843,28114],{"class":190},[74,113845,105211],{"class":190},[74,113847,105214],{"class":190},[19,113849,105285],{},[27,113851,113852,113855,113858],{},[30,113853,113854],{},"本章不依赖 Gymnasium。",[30,113856,113857],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[30,113859,113860],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,113862,105326],{"id":105325},[19,113864,113865],{},"Cartpole 的模型结构:",[64,113867,113870],{"className":113868,"code":113869,"language":9466,"meta":69},[9464],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[71,113871,113869],{"__ignoreMap":69},[19,113873,113874],{},"小车通过 slide joint 左右移动:",[64,113876,113878],{"className":57348,"code":113877,"language":57350,"meta":69,"style":69},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[71,113879,113880],{"__ignoreMap":69},[74,113881,113882,113884,113886,113888,113890,113893,113895,113897,113900,113902,113904,113907],{"class":76,"line":77},[74,113883,996],{"class":84},[74,113885,107237],{"class":55581},[74,113887,19199],{"class":1925},[74,113889,131],{"class":84},[74,113891,113892],{"class":190},"\"cart_x\"",[74,113894,58105],{"class":1925},[74,113896,131],{"class":84},[74,113898,113899],{"class":190},"\"slide\"",[74,113901,110309],{"class":1925},[74,113903,131],{"class":84},[74,113905,113906],{"class":190},"\"1 0 0\"",[74,113908,105425],{"class":84},[19,113910,113911],{},"杆子通过 hinge joint 旋转:",[64,113913,113915],{"className":57348,"code":113914,"language":57350,"meta":69,"style":69},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[71,113916,113917],{"__ignoreMap":69},[74,113918,113919,113921,113923,113925,113927,113930,113932,113934,113936,113938,113940,113942],{"class":76,"line":77},[74,113920,996],{"class":84},[74,113922,107237],{"class":55581},[74,113924,19199],{"class":1925},[74,113926,131],{"class":84},[74,113928,113929],{"class":190},"\"pole_hinge\"",[74,113931,58105],{"class":1925},[74,113933,131],{"class":84},[74,113935,110300],{"class":190},[74,113937,110309],{"class":1925},[74,113939,131],{"class":84},[74,113941,110314],{"class":190},[74,113943,105425],{"class":84},[19,113945,113946],{},"控制力作用在小车 slide joint 上:",[64,113948,113950],{"className":57348,"code":113949,"language":57350,"meta":69,"style":69},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[71,113951,113952],{"__ignoreMap":69},[74,113953,113954,113956,113958,113960,113962,113965,113967,113969,113971,113973,113975,113977],{"class":76,"line":77},[74,113955,996],{"class":84},[74,113957,110355],{"class":55581},[74,113959,19199],{"class":1925},[74,113961,131],{"class":84},[74,113963,113964],{"class":190},"\"cart_motor\"",[74,113966,110365],{"class":1925},[74,113968,131],{"class":84},[74,113970,113892],{"class":190},[74,113972,110372],{"class":1925},[74,113974,131],{"class":84},[74,113976,58597],{"class":190},[74,113978,105425],{"class":84},[44,113980,113982],{"id":113981},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,113984,113985],{},"这个简化模型有两个关节：",[223,113987,113988,113999],{},[226,113989,113990],{},[229,113991,113992,113994,113996],{},[232,113993,107040],{"align":28016},[232,113995,28017],{"align":28016},[232,113997,113998],{"align":28016},"对应状态",[270,114000,114001,114014],{},[229,114002,114003,114008,114011],{},[275,114004,114005],{"align":28016},[71,114006,114007],{},"cart_x",[275,114009,114010],{"align":28016},"slide",[275,114012,114013],{"align":28016},"小车 x 位置",[229,114015,114016,114021,114023],{},[275,114017,114018],{"align":28016},[71,114019,114020],{},"pole_hinge",[275,114022,110121],{"align":28016},[275,114024,114025],{"align":28016},"杆子角度",[19,114027,114028],{},"所以：",[64,114030,114033],{"className":114031,"code":114032,"language":9466,"meta":69},[9464],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[71,114034,114032],{"__ignoreMap":69},[19,114036,114037],{},"把它们拼起来就是观测：",[64,114039,114042],{"className":114040,"code":114041,"language":9466,"meta":69},[9464],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[71,114043,114041],{"__ignoreMap":69},[44,114045,114047],{"id":114046},"action-是什么","action 是什么",[19,114049,114050],{},"本章只有一个 actuator：",[64,114052,114055],{"className":114053,"code":114054,"language":9466,"meta":69},[9464],"data.ctrl[0] = action\n",[71,114056,114054],{"__ignoreMap":69},[19,114058,114059],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[44,114061,114063],{"id":114062},"reward-是什么","reward 是什么",[19,114065,114066],{},"奖励函数：",[64,114068,114070],{"className":34659,"code":114069,"language":34661,"meta":69,"style":69},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[71,114071,114072],{"__ignoreMap":69},[74,114073,114074,114076,114079,114081,114083,114085,114088,114090,114093,114095,114097,114099,114102,114104],{"class":76,"line":77},[74,114075,21325],{"class":80},[74,114077,114078],{"class":134}," float",[74,114080,85],{"class":84},[74,114082,106684],{"class":134},[74,114084,56552],{"class":80},[74,114086,114087],{"class":134}," 0.1",[74,114089,10797],{"class":80},[74,114091,114092],{"class":84}," cart_x ",[74,114094,541],{"class":80},[74,114096,114092],{"class":84},[74,114098,618],{"class":80},[74,114100,114101],{"class":84}," pole_angle ",[74,114103,541],{"class":80},[74,114105,114106],{"class":84}," pole_angle)\n",[19,114108,110507],{},[27,114110,114111,114116,114119],{},[30,114112,114113,114114,32666],{},"基础奖励是 ",[71,114115,106684],{},[30,114117,114118],{},"小车离中心越远，扣分越多。",[30,114120,114121],{},"杆子角度越大，扣分越多。",[19,114123,114124],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,114126,105534],{"id":105533},[64,114128,114130],{"className":34659,"code":114129,"language":34661,"meta":69,"style":69},"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",[71,114131,114132,114138,114148,114152,114156,114164,114169,114173,114177,114181,114186,114190,114195,114200,114205,114209,114214,114219,114224,114228,114232,114236,114240,114244,114249,114253,114257,114261,114265,114269,114279,114286,114290,114294,114308,114322,114335,114365,114369,114373,114385,114397,114405,114409,114422,114426,114430,114439,114443,114459,114469,114482,114495,114499,114522,114540,114544,114556,114560,114564,114574,114584,114588,114604,114645,114649,114669,114685,114689,114693,114705],{"__ignoreMap":69},[74,114133,114134,114136],{"class":76,"line":77},[74,114135,34673],{"class":80},[74,114137,105582],{"class":84},[74,114139,114140,114142,114144,114146],{"class":76,"line":94},[74,114141,34673],{"class":80},[74,114143,35661],{"class":84},[74,114145,35664],{"class":80},[74,114147,35667],{"class":84},[74,114149,114150],{"class":76,"line":1141},[74,114151,2363],{"emptyLinePlaceholder":2362},[74,114153,114154],{"class":76,"line":1156},[74,114155,2363],{"emptyLinePlaceholder":2362},[74,114157,114158,114160,114162],{"class":76,"line":1162},[74,114159,105595],{"class":134},[74,114161,17843],{"class":80},[74,114163,105600],{"class":190},[74,114165,114166],{"class":76,"line":1176},[74,114167,114168],{"class":190},"\u003Cmujoco model=\"cartpole\">\n",[74,114170,114171],{"class":76,"line":1182},[74,114172,105610],{"class":190},[74,114174,114175],{"class":76,"line":1273},[74,114176,2363],{"emptyLinePlaceholder":2362},[74,114178,114179],{"class":76,"line":1279},[74,114180,105619],{"class":190},[74,114182,114183],{"class":76,"line":1291},[74,114184,114185],{"class":190},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[74,114187,114188],{"class":76,"line":1574},[74,114189,2363],{"emptyLinePlaceholder":2362},[74,114191,114192],{"class":76,"line":1579},[74,114193,114194],{"class":190},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[74,114196,114197],{"class":76,"line":1585},[74,114198,114199],{"class":190},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[74,114201,114202],{"class":76,"line":1590},[74,114203,114204],{"class":190},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[74,114206,114207],{"class":76,"line":1604},[74,114208,2363],{"emptyLinePlaceholder":2362},[74,114210,114211],{"class":76,"line":1609},[74,114212,114213],{"class":190},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[74,114215,114216],{"class":76,"line":1615},[74,114217,114218],{"class":190},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[74,114220,114221],{"class":76,"line":1636},[74,114222,114223],{"class":190},"        \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",[74,114225,114226],{"class":76,"line":1641},[74,114227,110719],{"class":190},[74,114229,114230],{"class":76,"line":1655},[74,114231,105648],{"class":190},[74,114233,114234],{"class":76,"line":1660},[74,114235,105653],{"class":190},[74,114237,114238],{"class":76,"line":1689},[74,114239,2363],{"emptyLinePlaceholder":2362},[74,114241,114242],{"class":76,"line":1694},[74,114243,110736],{"class":190},[74,114245,114246],{"class":76,"line":1711},[74,114247,114248],{"class":190},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[74,114250,114251],{"class":76,"line":1716},[74,114252,110746],{"class":190},[74,114254,114255],{"class":76,"line":1721},[74,114256,105658],{"class":190},[74,114258,114259],{"class":76,"line":1726},[74,114260,99979],{"class":190},[74,114262,114263],{"class":76,"line":1740},[74,114264,2363],{"emptyLinePlaceholder":2362},[74,114266,114267],{"class":76,"line":1745},[74,114268,2363],{"emptyLinePlaceholder":2362},[74,114270,114271,114273,114276],{"class":76,"line":2540},[74,114272,36228],{"class":80},[74,114274,114275],{"class":1925}," get_observation",[74,114277,114278],{"class":84},"(data: mujoco.MjData) -> np.ndarray:\n",[74,114280,114281,114283],{"class":76,"line":2554},[74,114282,4053],{"class":80},[74,114284,114285],{"class":84}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[74,114287,114288],{"class":76,"line":2562},[74,114289,2363],{"emptyLinePlaceholder":2362},[74,114291,114292],{"class":76,"line":2567},[74,114293,2363],{"emptyLinePlaceholder":2362},[74,114295,114296,114298,114301,114304,114306],{"class":76,"line":2573},[74,114297,36228],{"class":80},[74,114299,114300],{"class":1925}," compute_reward",[74,114302,114303],{"class":84},"(obs: np.ndarray) -> ",[74,114305,125],{"class":134},[74,114307,3702],{"class":84},[74,114309,114310,114313,114315,114318,114320],{"class":76,"line":2579},[74,114311,114312],{"class":84},"    cart_x ",[74,114314,131],{"class":80},[74,114316,114317],{"class":84}," obs[",[74,114319,277],{"class":134},[74,114321,37527],{"class":84},[74,114323,114324,114327,114329,114331,114333],{"class":76,"line":2584},[74,114325,114326],{"class":84},"    pole_angle ",[74,114328,131],{"class":80},[74,114330,114317],{"class":84},[74,114332,303],{"class":134},[74,114334,37527],{"class":84},[74,114336,114337,114339,114341,114343,114345,114347,114349,114351,114353,114355,114357,114359,114361,114363],{"class":76,"line":12227},[74,114338,4053],{"class":80},[74,114340,114078],{"class":134},[74,114342,85],{"class":84},[74,114344,106684],{"class":134},[74,114346,56552],{"class":80},[74,114348,114087],{"class":134},[74,114350,10797],{"class":80},[74,114352,114092],{"class":84},[74,114354,541],{"class":80},[74,114356,114092],{"class":84},[74,114358,618],{"class":80},[74,114360,114101],{"class":84},[74,114362,541],{"class":80},[74,114364,114106],{"class":84},[74,114366,114367],{"class":76,"line":12251},[74,114368,2363],{"emptyLinePlaceholder":2362},[74,114370,114371],{"class":76,"line":12256},[74,114372,2363],{"emptyLinePlaceholder":2362},[74,114374,114375,114377,114379,114381,114383],{"class":76,"line":12262},[74,114376,36228],{"class":80},[74,114378,1935],{"class":1925},[74,114380,105679],{"class":84},[74,114382,99967],{"class":134},[74,114384,3702],{"class":84},[74,114386,114387,114389,114391,114393,114395],{"class":76,"line":12289},[74,114388,105688],{"class":84},[74,114390,131],{"class":80},[74,114392,105693],{"class":84},[74,114394,105595],{"class":134},[74,114396,91],{"class":84},[74,114398,114399,114401,114403],{"class":76,"line":12294},[74,114400,105702],{"class":84},[74,114402,131],{"class":80},[74,114404,105707],{"class":84},[74,114406,114407],{"class":76,"line":12300},[74,114408,2363],{"emptyLinePlaceholder":2362},[74,114410,114411,114413,114415,114417,114419],{"class":76,"line":12312},[74,114412,109350],{"class":84},[74,114414,303],{"class":134},[74,114416,4406],{"class":84},[74,114418,131],{"class":80},[74,114420,114421],{"class":134}," 0.1\n",[74,114423,114424],{"class":76,"line":12324},[74,114425,109363],{"class":84},[74,114427,114428],{"class":76,"line":12336},[74,114429,2363],{"emptyLinePlaceholder":2362},[74,114431,114432,114435,114437],{"class":76,"line":13995},[74,114433,114434],{"class":84},"    total_reward ",[74,114436,131],{"class":80},[74,114438,109042],{"class":134},[74,114440,114441],{"class":76,"line":14020},[74,114442,2363],{"emptyLinePlaceholder":2362},[74,114444,114445,114447,114449,114451,114453,114455,114457],{"class":76,"line":14043},[74,114446,3164],{"class":80},[74,114448,35897],{"class":84},[74,114450,30324],{"class":80},[74,114452,36724],{"class":134},[74,114454,85],{"class":84},[74,114456,10689],{"class":134},[74,114458,35067],{"class":84},[74,114460,114461,114464,114466],{"class":76,"line":14067},[74,114462,114463],{"class":84},"        obs ",[74,114465,131],{"class":80},[74,114467,114468],{"class":84}," get_observation(data)\n",[74,114470,114471,114474,114476,114478,114480],{"class":76,"line":14072},[74,114472,114473],{"class":84},"        pole_angle ",[74,114475,131],{"class":80},[74,114477,114317],{"class":84},[74,114479,303],{"class":134},[74,114481,37527],{"class":84},[74,114483,114484,114487,114489,114491,114493],{"class":76,"line":14077},[74,114485,114486],{"class":84},"        pole_angular_velocity ",[74,114488,131],{"class":80},[74,114490,114317],{"class":84},[74,114492,157],{"class":134},[74,114494,37527],{"class":84},[74,114496,114497],{"class":76,"line":14082},[74,114498,2363],{"emptyLinePlaceholder":2362},[74,114500,114501,114504,114506,114509,114511,114513,114515,114517,114519],{"class":76,"line":14091},[74,114502,114503],{"class":84},"        action ",[74,114505,131],{"class":80},[74,114507,114508],{"class":134}," 2.0",[74,114510,10797],{"class":80},[74,114512,114101],{"class":84},[74,114514,567],{"class":80},[74,114516,66148],{"class":134},[74,114518,10797],{"class":80},[74,114520,114521],{"class":84}," pole_angular_velocity\n",[74,114523,114524,114526,114528,114530,114532,114534,114536,114538],{"class":76,"line":14096},[74,114525,114503],{"class":84},[74,114527,131],{"class":80},[74,114529,111728],{"class":84},[74,114531,618],{"class":80},[74,114533,106684],{"class":134},[74,114535,16714],{"class":84},[74,114537,106684],{"class":134},[74,114539,91],{"class":84},[74,114541,114542],{"class":76,"line":14102},[74,114543,2363],{"emptyLinePlaceholder":2362},[74,114545,114546,114548,114550,114552,114554],{"class":76,"line":14123},[74,114547,110898],{"class":84},[74,114549,277],{"class":134},[74,114551,4406],{"class":84},[74,114553,131],{"class":80},[74,114555,111751],{"class":84},[74,114557,114558],{"class":76,"line":14129},[74,114559,105797],{"class":84},[74,114561,114562],{"class":76,"line":14143},[74,114563,2363],{"emptyLinePlaceholder":2362},[74,114565,114566,114569,114571],{"class":76,"line":14149},[74,114567,114568],{"class":84},"        reward ",[74,114570,131],{"class":80},[74,114572,114573],{"class":84}," compute_reward(get_observation(data))\n",[74,114575,114576,114579,114581],{"class":76,"line":14176},[74,114577,114578],{"class":84},"        total_reward ",[74,114580,13756],{"class":80},[74,114582,114583],{"class":84}," reward\n",[74,114585,114586],{"class":76,"line":14185},[74,114587,2363],{"emptyLinePlaceholder":2362},[74,114589,114590,114592,114594,114596,114598,114600,114602],{"class":76,"line":14191},[74,114591,2460],{"class":80},[74,114593,35897],{"class":84},[74,114595,414],{"class":80},[74,114597,10033],{"class":134},[74,114599,105840],{"class":80},[74,114601,4056],{"class":134},[74,114603,3702],{"class":84},[74,114605,114606,114608,114610,114613,114616,114619,114622,114624,114627,114630,114632,114634,114636,114638,114641,114643],{"class":76,"line":14199},[74,114607,38931],{"class":134},[74,114609,85],{"class":84},[74,114611,114612],{"class":190},"\"step:\"",[74,114614,114615],{"class":84},", step, ",[74,114617,114618],{"class":190},"\"obs:\"",[74,114620,114621],{"class":84},", np.round(obs, ",[74,114623,157],{"class":134},[74,114625,114626],{"class":84},"), ",[74,114628,114629],{"class":190},"\"action:\"",[74,114631,16714],{"class":84},[74,114633,36299],{"class":134},[74,114635,85],{"class":84},[74,114637,125],{"class":134},[74,114639,114640],{"class":84},"(action), ",[74,114642,157],{"class":134},[74,114644,34778],{"class":84},[74,114646,114647],{"class":76,"line":14204},[74,114648,2363],{"emptyLinePlaceholder":2362},[74,114650,114651,114653,114655,114658,114660,114662,114665,114667],{"class":76,"line":20883},[74,114652,35580],{"class":134},[74,114654,85],{"class":84},[74,114656,114657],{"class":190},"\"total_reward:\"",[74,114659,16714],{"class":84},[74,114661,36299],{"class":134},[74,114663,114664],{"class":84},"(total_reward, ",[74,114666,157],{"class":134},[74,114668,34778],{"class":84},[74,114670,114671,114673,114675,114678,114681,114683],{"class":76,"line":20889},[74,114672,35580],{"class":134},[74,114674,85],{"class":84},[74,114676,114677],{"class":190},"\"final obs:\"",[74,114679,114680],{"class":84},", np.round(get_observation(data), ",[74,114682,157],{"class":134},[74,114684,34778],{"class":84},[74,114686,114687],{"class":76,"line":20912},[74,114688,2363],{"emptyLinePlaceholder":2362},[74,114690,114691],{"class":76,"line":20918},[74,114692,2363],{"emptyLinePlaceholder":2362},[74,114694,114695,114697,114699,114701,114703],{"class":76,"line":20941},[74,114696,1493],{"class":80},[74,114698,35501],{"class":134},[74,114700,105840],{"class":80},[74,114702,105843],{"class":190},[74,114704,3702],{"class":84},[74,114706,114707],{"class":76,"line":20955},[74,114708,105850],{"class":84},[19,114710,107851],{},[64,114712,114714],{"className":28102,"code":114713,"language":28104,"meta":69,"style":69},"touch ch6_cartpole.py\n",[71,114715,114716],{"__ignoreMap":69},[74,114717,114718,114720],{"class":76,"line":77},[74,114719,105564],{"class":1925},[74,114721,114722],{"class":190}," ch6_cartpole.py\n",[19,114724,114725],{},"运行：",[64,114727,114729],{"className":28102,"code":114728,"language":28104,"meta":69,"style":69},"python ch6_cartpole.py\n",[71,114730,114731],{"__ignoreMap":69},[74,114732,114733,114735],{"class":76,"line":77},[74,114734,34661],{"class":1925},[74,114736,114722],{"class":190},[44,114738,105853],{"id":105853},[19,114740,114741],{},"构造观测：",[64,114743,114745],{"className":34659,"code":114744,"language":34661,"meta":69,"style":69},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[71,114746,114747,114755],{"__ignoreMap":69},[74,114748,114749,114751,114753],{"class":76,"line":77},[74,114750,36228],{"class":80},[74,114752,114275],{"class":1925},[74,114754,114278],{"class":84},[74,114756,114757,114759],{"class":76,"line":94},[74,114758,4053],{"class":80},[74,114760,114285],{"class":84},[19,114762,114763,114766,114767,114769,114770,114772],{},[71,114764,114765],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[71,114768,108311],{}," 2 维，",[71,114771,108641],{}," 2 维，所以 obs 是 4 维。",[19,114774,114775],{},"设置初始角度：",[64,114777,114779],{"className":34659,"code":114778,"language":34661,"meta":69,"style":69},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[71,114780,114781,114793],{"__ignoreMap":69},[74,114782,114783,114785,114787,114789,114791],{"class":76,"line":77},[74,114784,108980],{"class":84},[74,114786,303],{"class":134},[74,114788,4406],{"class":84},[74,114790,131],{"class":80},[74,114792,114421],{"class":134},[74,114794,114795],{"class":76,"line":94},[74,114796,108824],{"class":84},[19,114798,114799],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,114801,114802],{},"简单反馈控制：",[64,114804,114806],{"className":34659,"code":114805,"language":34661,"meta":69,"style":69},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[71,114807,114808,114828],{"__ignoreMap":69},[74,114809,114810,114812,114814,114816,114818,114820,114822,114824,114826],{"class":76,"line":77},[74,114811,111723],{"class":84},[74,114813,131],{"class":80},[74,114815,114508],{"class":134},[74,114817,10797],{"class":80},[74,114819,114101],{"class":84},[74,114821,567],{"class":80},[74,114823,66148],{"class":134},[74,114825,10797],{"class":80},[74,114827,114521],{"class":84},[74,114829,114830,114832,114834,114836,114838,114840,114842,114844],{"class":76,"line":94},[74,114831,111723],{"class":84},[74,114833,131],{"class":80},[74,114835,111728],{"class":84},[74,114837,618],{"class":80},[74,114839,106684],{"class":134},[74,114841,16714],{"class":84},[74,114843,106684],{"class":134},[74,114845,91],{"class":84},[19,114847,114848],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,114850,114851],{},"限制动作：",[64,114853,114855],{"className":34659,"code":114854,"language":34661,"meta":69,"style":69},"np.clip(action, -1.0, 1.0)\n",[71,114856,114857],{"__ignoreMap":69},[74,114858,114859,114862,114864,114866,114868,114870],{"class":76,"line":77},[74,114860,114861],{"class":84},"np.clip(action, ",[74,114863,618],{"class":80},[74,114865,106684],{"class":134},[74,114867,16714],{"class":84},[74,114869,106684],{"class":134},[74,114871,91],{"class":84},[19,114873,114874,114875,114878],{},"因为 XML 里 ",[71,114876,114877],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[44,114880,105989],{"id":105989},[64,114882,114883],{"className":34659,"code":114744,"language":34661,"meta":69,"style":69},[71,114884,114885,114893],{"__ignoreMap":69},[74,114886,114887,114889,114891],{"class":76,"line":77},[74,114888,36228],{"class":80},[74,114890,114275],{"class":1925},[74,114892,114278],{"class":84},[74,114894,114895,114897],{"class":76,"line":94},[74,114896,4053],{"class":80},[74,114898,114285],{"class":84},[19,114900,114901,114902,114905,114906,114909,114910,114913],{},"这段定义了一个函数，用来获取当前观测。",[71,114903,114904],{},"data.qpos.copy()"," 是位置数组副本，",[71,114907,114908],{},"data.qvel.copy()"," 是速度数组副本。",[71,114911,114912],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,114915,114916],{},"在本章模型里：",[64,114918,114921],{"className":114919,"code":114920,"language":9466,"meta":69},[9464],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[71,114922,114920],{"__ignoreMap":69},[19,114924,114925],{},"所以返回的 obs 是：",[64,114927,114930],{"className":114928,"code":114929,"language":9466,"meta":69},[9464],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[71,114931,114929],{"__ignoreMap":69},[64,114933,114935],{"className":34659,"code":114934,"language":34661,"meta":69,"style":69},"def compute_reward(obs: np.ndarray) -> float:\n",[71,114936,114937],{"__ignoreMap":69},[74,114938,114939,114941,114943,114945,114947],{"class":76,"line":77},[74,114940,36228],{"class":80},[74,114942,114300],{"class":1925},[74,114944,114303],{"class":84},[74,114946,125],{"class":134},[74,114948,3702],{"class":84},[19,114950,114951,114952,114955],{},"这行定义奖励函数。输入是观测 ",[71,114953,114954],{},"obs","，输出是一个浮点数奖励。",[64,114957,114959],{"className":34659,"code":114958,"language":34661,"meta":69,"style":69},"cart_x = obs[0]\npole_angle = obs[1]\n",[71,114960,114961,114974],{"__ignoreMap":69},[74,114962,114963,114966,114968,114970,114972],{"class":76,"line":77},[74,114964,114965],{"class":84},"cart_x ",[74,114967,131],{"class":80},[74,114969,114317],{"class":84},[74,114971,277],{"class":134},[74,114973,37527],{"class":84},[74,114975,114976,114979,114981,114983,114985],{"class":76,"line":94},[74,114977,114978],{"class":84},"pole_angle ",[74,114980,131],{"class":80},[74,114982,114317],{"class":84},[74,114984,303],{"class":134},[74,114986,37527],{"class":84},[19,114988,114989,114990,114993,114994,114997],{},"数组索引从 0 开始。",[71,114991,114992],{},"obs[0]"," 是第一个元素，也就是小车位置。",[71,114995,114996],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[64,114999,115000],{"className":34659,"code":114069,"language":34661,"meta":69,"style":69},[71,115001,115002],{"__ignoreMap":69},[74,115003,115004,115006,115008,115010,115012,115014,115016,115018,115020,115022,115024,115026,115028,115030],{"class":76,"line":77},[74,115005,21325],{"class":80},[74,115007,114078],{"class":134},[74,115009,85],{"class":84},[74,115011,106684],{"class":134},[74,115013,56552],{"class":80},[74,115015,114087],{"class":134},[74,115017,10797],{"class":80},[74,115019,114092],{"class":84},[74,115021,541],{"class":80},[74,115023,114092],{"class":84},[74,115025,618],{"class":80},[74,115027,114101],{"class":84},[74,115029,541],{"class":80},[74,115031,114106],{"class":84},[19,115033,115034,115035,115038,115039,115042],{},"这行计算奖励。",[71,115036,115037],{},"cart_x * cart_x"," 是小车位置的平方，",[71,115040,115041],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[64,115044,115046],{"className":34659,"code":115045,"language":34661,"meta":69,"style":69},"data.qpos[1] = 0.1\n",[71,115047,115048],{"__ignoreMap":69},[74,115049,115050,115052,115054,115056,115058],{"class":76,"line":77},[74,115051,108980],{"class":84},[74,115053,303],{"class":134},[74,115055,4406],{"class":84},[74,115057,131],{"class":80},[74,115059,114421],{"class":134},[19,115061,115062,115063,115065,115066,115068],{},"手动设置杆子的初始角度。因为 ",[71,115064,109737],{}," 是小车位置，",[71,115067,109740],{}," 是杆子角度，所以这里改的是杆子。",[64,115070,115071],{"className":34659,"code":108824,"language":34661,"meta":69,"style":69},[71,115072,115073],{"__ignoreMap":69},[74,115074,115075],{"class":76,"line":77},[74,115076,108824],{"class":84},[19,115078,109783,115079,115081],{},[71,115080,108311],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[64,115083,115085],{"className":34659,"code":115084,"language":34661,"meta":69,"style":69},"total_reward = 0.0\n",[71,115086,115087],{"__ignoreMap":69},[74,115088,115089,115092,115094],{"class":76,"line":77},[74,115090,115091],{"class":84},"total_reward ",[74,115093,131],{"class":80},[74,115095,109042],{"class":134},[19,115097,115098],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[64,115100,115102],{"className":34659,"code":115101,"language":34661,"meta":69,"style":69},"for step in range(1000):\n",[71,115103,115104],{"__ignoreMap":69},[74,115105,115106,115108,115110,115112,115114,115116,115118],{"class":76,"line":77},[74,115107,2988],{"class":80},[74,115109,35897],{"class":84},[74,115111,30324],{"class":80},[74,115113,36724],{"class":134},[74,115115,85],{"class":84},[74,115117,10689],{"class":134},[74,115119,35067],{"class":84},[19,115121,115122,115123,115125],{},"循环 1000 步。",[71,115124,111415],{}," 是当前步数，从 0 到 999。",[64,115127,115129],{"className":34659,"code":115128,"language":34661,"meta":69,"style":69},"obs = get_observation(data)\n",[71,115130,115131],{"__ignoreMap":69},[74,115132,115133,115136,115138],{"class":76,"line":77},[74,115134,115135],{"class":84},"obs ",[74,115137,131],{"class":80},[74,115139,114468],{"class":84},[19,115141,115142,115143,32666],{},"读取当前状态，保存到 ",[71,115144,114954],{},[64,115146,115148],{"className":34659,"code":115147,"language":34661,"meta":69,"style":69},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[71,115149,115150,115162],{"__ignoreMap":69},[74,115151,115152,115154,115156,115158,115160],{"class":76,"line":77},[74,115153,114978],{"class":84},[74,115155,131],{"class":80},[74,115157,114317],{"class":84},[74,115159,303],{"class":134},[74,115161,37527],{"class":84},[74,115163,115164,115167,115169,115171,115173],{"class":76,"line":94},[74,115165,115166],{"class":84},"pole_angular_velocity ",[74,115168,131],{"class":80},[74,115170,114317],{"class":84},[74,115172,157],{"class":134},[74,115174,37527],{"class":84},[19,115176,115177,115178,115181,115182,32666],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[71,115179,115180],{},"obs[3]","？因为 obs 的顺序是 ",[71,115183,115184],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[64,115186,115188],{"className":34659,"code":115187,"language":34661,"meta":69,"style":69},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[71,115189,115190],{"__ignoreMap":69},[74,115191,115192,115194,115196,115198,115200,115202,115204,115206,115208],{"class":76,"line":77},[74,115193,111723],{"class":84},[74,115195,131],{"class":80},[74,115197,114508],{"class":134},[74,115199,10797],{"class":80},[74,115201,114101],{"class":84},[74,115203,567],{"class":80},[74,115205,66148],{"class":134},[74,115207,10797],{"class":80},[74,115209,114521],{"class":84},[19,115211,115212,115213,105299,115215,115217],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[71,115214,109541],{},[71,115216,39610],{}," 是人为设置的系数，不是固定公式。",[64,115219,115221],{"className":34659,"code":115220,"language":34661,"meta":69,"style":69},"action = np.clip(action, -1.0, 1.0)\n",[71,115222,115223],{"__ignoreMap":69},[74,115224,115225,115227,115229,115231,115233,115235,115237,115239],{"class":76,"line":77},[74,115226,111723],{"class":84},[74,115228,131],{"class":80},[74,115230,111728],{"class":84},[74,115232,618],{"class":80},[74,115234,106684],{"class":134},[74,115236,16714],{"class":84},[74,115238,106684],{"class":134},[74,115240,91],{"class":84},[19,115242,115243],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[64,115245,115246],{"className":34659,"code":114054,"language":34661,"meta":69,"style":69},[71,115247,115248],{"__ignoreMap":69},[74,115249,115250,115252,115254,115256,115258],{"class":76,"line":77},[74,115251,110152],{"class":84},[74,115253,277],{"class":134},[74,115255,4406],{"class":84},[74,115257,131],{"class":80},[74,115259,111751],{"class":84},[19,115261,115262],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[64,115264,115265],{"className":34659,"code":108786,"language":34661,"meta":69,"style":69},[71,115266,115267],{"__ignoreMap":69},[74,115268,115269],{"class":76,"line":77},[74,115270,108786],{"class":84},[19,115272,115273,115274,115276],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[71,115275,110407],{}," 计算小车和杆子的下一刻状态。",[64,115278,115280],{"className":34659,"code":115279,"language":34661,"meta":69,"style":69},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[71,115281,115282,115291],{"__ignoreMap":69},[74,115283,115284,115287,115289],{"class":76,"line":77},[74,115285,115286],{"class":84},"reward ",[74,115288,131],{"class":80},[74,115290,114573],{"class":84},[74,115292,115293,115295,115297],{"class":76,"line":94},[74,115294,115091],{"class":84},[74,115296,13756],{"class":80},[74,115298,114583],{"class":84},[19,115300,115301,115302,115304,115305,115308,115309,32666],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[71,115303,13756],{}," 是简写，",[71,115306,115307],{},"total_reward += reward"," 等价于 ",[71,115310,115311],{},"total_reward = total_reward + reward",[64,115313,115315],{"className":34659,"code":115314,"language":34661,"meta":69,"style":69},"if step % 100 == 0:\n",[71,115316,115317],{"__ignoreMap":69},[74,115318,115319,115321,115323,115325,115327,115329,115331],{"class":76,"line":77},[74,115320,1493],{"class":80},[74,115322,35897],{"class":84},[74,115324,414],{"class":80},[74,115326,10033],{"class":134},[74,115328,105840],{"class":80},[74,115330,4056],{"class":134},[74,115332,3702],{"class":84},[19,115334,115335,115337,115338,115341],{},[71,115336,414],{}," 是取余数。",[71,115339,115340],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[64,115343,115345],{"className":34659,"code":115344,"language":34661,"meta":69,"style":69},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[71,115346,115347],{"__ignoreMap":69},[74,115348,115349,115351,115353,115355,115357,115359,115361,115363,115365,115367,115369,115371,115373,115375,115377,115379],{"class":76,"line":77},[74,115350,34696],{"class":134},[74,115352,85],{"class":84},[74,115354,114612],{"class":190},[74,115356,114615],{"class":84},[74,115358,114618],{"class":190},[74,115360,114621],{"class":84},[74,115362,157],{"class":134},[74,115364,114626],{"class":84},[74,115366,114629],{"class":190},[74,115368,16714],{"class":84},[74,115370,36299],{"class":134},[74,115372,85],{"class":84},[74,115374,125],{"class":134},[74,115376,114640],{"class":84},[74,115378,157],{"class":134},[74,115380,34778],{"class":84},[19,115382,115383,115384,115387,115388,115391],{},"打印当前步数、观测和动作。",[71,115385,115386],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[71,115389,115390],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,115393,106597],{"id":106596},[19,115395,115396],{},"观测向量:",[64,115398,115401],{"className":115399,"code":115400,"language":9466,"meta":69},[9464],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[71,115402,115400],{"__ignoreMap":69},[19,115404,115405],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,115407,115408],{},"每隔 100 步会打印一次：",[64,115410,115413],{"className":115411,"code":115412,"language":9466,"meta":69},[9464],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[71,115414,115412],{"__ignoreMap":69},[19,115416,115417],{},"重点观察：",[27,115419,115420,115426,115431],{},[30,115421,115422,115425],{},[71,115423,115424],{},"pole_angle"," 是否越来越大。",[30,115427,115428,115430],{},[71,115429,114007],{}," 是否跑得太远。",[30,115432,115433,115434,86820,115436,32666],{},"action 是否经常被 clip 到 ",[71,115435,108196],{},[71,115437,303],{},[19,115439,115440],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,115442,106629],{"id":106628},[27,115444,115445,115451,115454,115460,115470,115476,115479],{},[30,115446,115447,115448,32666],{},"把初始角度改为 ",[71,115449,115450],{},"data.qpos[1] = 0.3",[30,115452,115453],{},"重新运行，观察控制是否变差。",[30,115455,115456,115457,115459],{},"把 actuator ",[71,115458,111348],{}," 改小。",[30,115461,115462,115463,115466,115467,32666],{},"打印 ",[71,115464,115465],{},"model.nq, model.nv, model.nu","，应为 ",[71,115468,115469],{},"2 2 1",[30,115471,115472,115473,115475],{},"把 reward 里的 ",[71,115474,115041],{}," 系数改大，观察总奖励变化。",[30,115477,115478],{},"把控制器改成反号，观察杆子是否更容易倒。",[30,115480,115481],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,115483,106734],{"id":106733},[44,115485,115486],{"id":115486},"杆子方向和预期不一致",[19,115488,106677,115489,115491,115492,115494],{},[71,115490,110520],{}," 和 capsule 的 ",[71,115493,107457],{},"，必要时用 viewer 可视化确认。",[44,115496,115497],{"id":115497},"控制器越控越倒",[19,115499,115500],{},"说明反馈符号可能反了，尝试:",[64,115502,115504],{"className":34659,"code":115503,"language":34661,"meta":69,"style":69},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[71,115505,115506],{"__ignoreMap":69},[74,115507,115508,115510,115512,115514,115516,115518,115520,115522,115524,115526],{"class":76,"line":77},[74,115509,111723],{"class":84},[74,115511,131],{"class":80},[74,115513,56552],{"class":80},[74,115515,109541],{"class":134},[74,115517,10797],{"class":80},[74,115519,114101],{"class":84},[74,115521,618],{"class":80},[74,115523,66148],{"class":134},[74,115525,10797],{"class":80},[74,115527,114521],{"class":84},[44,115529,115530],{"id":115530},"小车飞走",[19,115532,115533,115534,115536,115537,115540],{},"降低 ",[71,115535,111348],{}," 或缩小 ",[71,115538,115539],{},"action"," 的 clip 范围。",[44,115542,115544,115546],{"id":115543},"obs3-为什么是杆子角速度",[71,115545,115180],{}," 为什么是杆子角速度",[19,115548,115549],{},"因为这个模型里：",[64,115551,115554],{"className":115552,"code":115553,"language":9466,"meta":69},[9464],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[71,115555,115553],{"__ignoreMap":69},[19,115557,114028],{},[64,115559,115562],{"className":115560,"code":115561,"language":9466,"meta":69},[9464],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[71,115563,115561],{"__ignoreMap":69},[44,115565,115567],{"id":115566},"reward-变成负数是否错误","reward 变成负数是否错误",[19,115569,115570],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,115572,106888],{"id":106887},[19,115574,115575],{},"一个控制任务通常包含：",[27,115577,115578,115581,115589,115594,115597],{},[30,115579,115580],{},"模型：Cartpole 的 body、joint、actuator。",[30,115582,115583,115584,298,115586,115588],{},"观测：从 ",[71,115585,108311],{},[71,115587,108641],{}," 里取状态。",[30,115590,115591,115592,32666],{},"动作：写入 ",[71,115593,105357],{},[30,115595,115596],{},"奖励：根据任务目标打分。",[30,115598,115599],{},"循环：obs -> action -> step -> reward。",[19,115601,115602],{},"这就是后面 Gymnasium 环境的基本骨架。",[5090,115604,108567],{},{"title":69,"searchDepth":94,"depth":94,"links":115606},[115607,115608,115609,115614,115618,115619,115620,115628],{"id":104927,"depth":94,"text":104928},{"id":105050,"depth":94,"text":105051},{"id":105325,"depth":94,"text":105326,"children":115610},[115611,115612,115613],{"id":113981,"depth":1141,"text":113982},{"id":114046,"depth":1141,"text":114047},{"id":114062,"depth":1141,"text":114063},{"id":105533,"depth":94,"text":105534,"children":115615},[115616,115617],{"id":105853,"depth":1141,"text":105853},{"id":105989,"depth":1141,"text":105989},{"id":106596,"depth":94,"text":106597},{"id":106628,"depth":94,"text":106629},{"id":106733,"depth":94,"text":106734,"children":115621},[115622,115623,115624,115625,115627],{"id":115486,"depth":1141,"text":115486},{"id":115497,"depth":1141,"text":115497},{"id":115530,"depth":1141,"text":115530},{"id":115543,"depth":1141,"text":115626},"obs[3] 为什么是杆子角速度",{"id":115566,"depth":1141,"text":115567},{"id":106887,"depth":94,"text":106888},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":113717,"description":69},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":115635,"title":115636,"body":115637,"description":69,"extension":5121,"meta":117651,"navigation":2362,"path":117652,"seo":117653,"stem":117654,"__hash__":117655},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":115638,"toc":117627},[115639,115642,115644,115647,115649,115666,115669,115672,115678,115681,115683,115685,115709,115711,115725,115727,115768,115770,115788,115790,115793,115799,115802,115830,115834,115840,115865,115868,115899,115906,115909,115912,115918,115921,115927,115930,115936,115940,115943,115968,115971,115973,116733,116735,116747,116749,116760,116762,116765,116782,116785,116787,116798,116801,116803,116849,116852,116865,116868,116950,116953,116955,116971,116981,116994,116997,117036,117046,117057,117067,117080,117083,117112,117115,117125,117128,117134,117151,117162,117164,117170,117187,117198,117219,117222,117234,117237,117258,117261,117269,117277,117294,117297,117366,117373,117381,117384,117397,117404,117406,117409,117415,117418,117421,117427,117433,117435,117475,117477,117483,117492,117495,117497,117517,117520,117523,117529,117533,117535,117562,117565,117568,117595,117601,117604,117607,117609,117612,117615,117621,117624],[10,115640,115636],{"id":115641},"_7控制任务reacher-机械臂到达目标",[14,115643,104928],{"id":104927},[19,115645,115646],{},"本章搭建一个二维两关节 reacher 任务。",[19,115648,108612],{},[27,115650,115651,115654,115657,115660,115663],{},[30,115652,115653],{},"两个 hinge joint",[30,115655,115656],{},"两个 motor actuator",[30,115658,115659],{},"site 作为末端点和目标点",[30,115661,115662],{},"根据末端和目标距离设计 reward",[30,115664,115665],{},"构造机械臂任务的基本形式",[19,115667,115668],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,115670,115671],{},"Reacher 任务可以理解为：",[64,115673,115676],{"className":115674,"code":115675,"language":9466,"meta":69},[9464],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[71,115677,115675],{"__ignoreMap":69},[19,115679,115680],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,115682,105051],{"id":105050},[19,115684,105054],{},[64,115686,115687],{"className":28102,"code":108669,"language":28104,"meta":69,"style":69},[71,115688,115689],{"__ignoreMap":69},[74,115690,115691,115693,115695,115697,115699,115701,115703,115705,115707],{"class":76,"line":77},[74,115692,28857],{"class":1925},[74,115694,30596],{"class":190},[74,115696,28114],{"class":190},[74,115698,30681],{"class":134},[74,115700,108684],{"class":190},[74,115702,105079],{"class":190},[74,115704,106782],{"class":190},[74,115706,105095],{"class":190},[74,115708,108693],{"class":190},[19,115710,107100],{},[64,115712,115713],{"className":28102,"code":105200,"language":28104,"meta":69,"style":69},[71,115714,115715],{"__ignoreMap":69},[74,115716,115717,115719,115721,115723],{"class":76,"line":77},[74,115718,28111],{"class":1925},[74,115720,28114],{"class":190},[74,115722,105211],{"class":190},[74,115724,105214],{"class":190},[19,115726,107117],{},[64,115728,115730],{"className":28102,"code":115729,"language":28104,"meta":69,"style":69},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[71,115731,115732,115749,115758],{"__ignoreMap":69},[74,115733,115734,115736,115738,115740,115743,115745,115747],{"class":76,"line":77},[74,115735,34611],{"class":1925},[74,115737,33457],{"class":190},[74,115739,29396],{"class":134},[74,115741,115742],{"class":190}," mujoco-reacher",[74,115744,105256],{"class":190},[74,115746,105259],{"class":134},[74,115748,105262],{"class":134},[74,115750,115751,115753,115755],{"class":76,"line":94},[74,115752,34611],{"class":1925},[74,115754,105269],{"class":190},[74,115756,115757],{"class":190}," mujoco-reacher\n",[74,115759,115760,115762,115764,115766],{"class":76,"line":1141},[74,115761,28111],{"class":1925},[74,115763,28114],{"class":190},[74,115765,105211],{"class":190},[74,115767,105214],{"class":190},[19,115769,105285],{},[27,115771,115772,115775,115778],{},[30,115773,115774],{},"本章使用低维状态，不使用图像输入。",[30,115776,115777],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[30,115779,115780,115781,298,115783,298,115785,115787],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[71,115782,108311],{},[71,115784,108641],{},[71,115786,107961],{}," 的方法一致。",[14,115789,105326],{"id":105325},[19,115791,115792],{},"Reacher 任务核心:",[64,115794,115797],{"className":115795,"code":115796,"language":9466,"meta":69},[9464],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[71,115798,115796],{"__ignoreMap":69},[19,115800,115801],{},"读取 site 世界坐标:",[64,115803,115805],{"className":34659,"code":115804,"language":34661,"meta":69,"style":69},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[71,115806,115807,115820],{"__ignoreMap":69},[74,115808,115809,115811,115813,115815,115818],{"class":76,"line":77},[74,115810,107915],{"class":84},[74,115812,131],{"class":80},[74,115814,107686],{"class":84},[74,115816,115817],{"class":190},"\"tip\"",[74,115819,91],{"class":84},[74,115821,115822,115825,115827],{"class":76,"line":94},[74,115823,115824],{"class":84},"tip_pos ",[74,115826,131],{"class":80},[74,115828,115829],{"class":84}," data.site_xpos[site_id]\n",[44,115831,115833],{"id":115832},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,115835,115836,115837,115839],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[71,115838,108311],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[64,115841,115843],{"className":34659,"code":115842,"language":34661,"meta":69,"style":69},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[71,115844,115845,115855],{"__ignoreMap":69},[74,115846,115847,115850,115852],{"class":76,"line":77},[74,115848,115849],{"class":84},"tip ",[74,115851,131],{"class":80},[74,115853,115854],{"class":84}," data.site_xpos[tip_site_id]\n",[74,115856,115857,115860,115862],{"class":76,"line":94},[74,115858,115859],{"class":84},"target ",[74,115861,131],{"class":80},[74,115863,115864],{"class":84}," data.site_xpos[target_site_id]\n",[19,115866,115867],{},"这样 reward 就很容易写：",[64,115869,115871],{"className":34659,"code":115870,"language":34661,"meta":69,"style":69},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[71,115872,115873,115888],{"__ignoreMap":69},[74,115874,115875,115878,115880,115883,115885],{"class":76,"line":77},[74,115876,115877],{"class":84},"dist ",[74,115879,131],{"class":80},[74,115881,115882],{"class":84}," np.linalg.norm(tip ",[74,115884,618],{"class":80},[74,115886,115887],{"class":84}," target)\n",[74,115889,115890,115892,115894,115896],{"class":76,"line":94},[74,115891,115286],{"class":84},[74,115893,131],{"class":80},[74,115895,56552],{"class":80},[74,115897,115898],{"class":84},"dist\n",[19,115900,115901,115902,115905],{},"距离越小，",[71,115903,115904],{},"-dist"," 越接近 0，奖励越高。",[44,115907,115908],{"id":115908},"两关节机械臂的状态",[19,115910,115911],{},"这个模型有两个 hinge joint：",[64,115913,115916],{"className":115914,"code":115915,"language":9466,"meta":69},[9464],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[71,115917,115915],{"__ignoreMap":69},[19,115919,115920],{},"再加上末端和目标位置：",[64,115922,115925],{"className":115923,"code":115924,"language":9466,"meta":69},[9464],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[71,115926,115924],{"__ignoreMap":69},[19,115928,115929],{},"总维度：",[64,115931,115934],{"className":115932,"code":115933,"language":9466,"meta":69},[9464],"2 + 2 + 3 + 3 = 10\n",[71,115935,115933],{"__ignoreMap":69},[44,115937,115939],{"id":115938},"为什么-gravity-是-0","为什么 gravity 是 0",[19,115941,115942],{},"本章把重力设为：",[64,115944,115946],{"className":57348,"code":115945,"language":57350,"meta":69,"style":69},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[71,115947,115948],{"__ignoreMap":69},[74,115949,115950,115952,115954,115956,115958,115960,115962,115964,115966],{"class":76,"line":77},[74,115951,996],{"class":84},[74,115953,73447],{"class":55581},[74,115955,105475],{"class":1925},[74,115957,131],{"class":84},[74,115959,105480],{"class":190},[74,115961,105483],{"class":1925},[74,115963,131],{"class":84},[74,115965,108052],{"class":190},[74,115967,105425],{"class":84},[19,115969,115970],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,115972,105534],{"id":105533},[64,115974,115976],{"className":34659,"code":115975,"language":34661,"meta":69,"style":69},"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",[71,115977,115978,115984,115994,115998,116002,116010,116015,116020,116024,116028,116033,116038,116042,116047,116052,116057,116061,116066,116071,116076,116081,116085,116089,116093,116097,116101,116106,116111,116115,116119,116123,116127,116131,116146,116155,116167,116190,116197,116201,116205,116215,116229,116243,116250,116254,116258,116272,116284,116296,116309,116324,116341,116345,116349,116361,116373,116381,116389,116393,116409,116414,116427,116440,116455,116459,116494,116526,116530,116534,116543,116547,116563,116573,116584,116600,116616,116632,116648,116652,116670,116690,116709,116713,116717,116729],{"__ignoreMap":69},[74,115979,115980,115982],{"class":76,"line":77},[74,115981,34673],{"class":80},[74,115983,105582],{"class":84},[74,115985,115986,115988,115990,115992],{"class":76,"line":94},[74,115987,34673],{"class":80},[74,115989,35661],{"class":84},[74,115991,35664],{"class":80},[74,115993,35667],{"class":84},[74,115995,115996],{"class":76,"line":1141},[74,115997,2363],{"emptyLinePlaceholder":2362},[74,115999,116000],{"class":76,"line":1156},[74,116001,2363],{"emptyLinePlaceholder":2362},[74,116003,116004,116006,116008],{"class":76,"line":1162},[74,116005,105595],{"class":134},[74,116007,17843],{"class":80},[74,116009,105600],{"class":190},[74,116011,116012],{"class":76,"line":1176},[74,116013,116014],{"class":190},"\u003Cmujoco model=\"two_link_reacher\">\n",[74,116016,116017],{"class":76,"line":1182},[74,116018,116019],{"class":190},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[74,116021,116022],{"class":76,"line":1273},[74,116023,2363],{"emptyLinePlaceholder":2362},[74,116025,116026],{"class":76,"line":1279},[74,116027,105619],{"class":190},[74,116029,116030],{"class":76,"line":1291},[74,116031,116032],{"class":190},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[74,116034,116035],{"class":76,"line":1574},[74,116036,116037],{"class":190},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[74,116039,116040],{"class":76,"line":1579},[74,116041,2363],{"emptyLinePlaceholder":2362},[74,116043,116044],{"class":76,"line":1585},[74,116045,116046],{"class":190},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[74,116048,116049],{"class":76,"line":1590},[74,116050,116051],{"class":190},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[74,116053,116054],{"class":76,"line":1604},[74,116055,116056],{"class":190},"      \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",[74,116058,116059],{"class":76,"line":1609},[74,116060,2363],{"emptyLinePlaceholder":2362},[74,116062,116063],{"class":76,"line":1615},[74,116064,116065],{"class":190},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[74,116067,116068],{"class":76,"line":1636},[74,116069,116070],{"class":190},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[74,116072,116073],{"class":76,"line":1641},[74,116074,116075],{"class":190},"        \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",[74,116077,116078],{"class":76,"line":1655},[74,116079,116080],{"class":190},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[74,116082,116083],{"class":76,"line":1660},[74,116084,110719],{"class":190},[74,116086,116087],{"class":76,"line":1689},[74,116088,105648],{"class":190},[74,116090,116091],{"class":76,"line":1694},[74,116092,105653],{"class":190},[74,116094,116095],{"class":76,"line":1711},[74,116096,2363],{"emptyLinePlaceholder":2362},[74,116098,116099],{"class":76,"line":1716},[74,116100,110736],{"class":190},[74,116102,116103],{"class":76,"line":1721},[74,116104,116105],{"class":190},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[74,116107,116108],{"class":76,"line":1726},[74,116109,116110],{"class":190},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[74,116112,116113],{"class":76,"line":1740},[74,116114,110746],{"class":190},[74,116116,116117],{"class":76,"line":1745},[74,116118,105658],{"class":190},[74,116120,116121],{"class":76,"line":2540},[74,116122,99979],{"class":190},[74,116124,116125],{"class":76,"line":2554},[74,116126,2363],{"emptyLinePlaceholder":2362},[74,116128,116129],{"class":76,"line":2562},[74,116130,2363],{"emptyLinePlaceholder":2362},[74,116132,116133,116135,116138,116141,116143],{"class":76,"line":2567},[74,116134,36228],{"class":80},[74,116136,116137],{"class":1925}," site_position",[74,116139,116140],{"class":84},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[74,116142,1261],{"class":134},[74,116144,116145],{"class":84},") -> np.ndarray:\n",[74,116147,116148,116150,116152],{"class":76,"line":2573},[74,116149,107681],{"class":84},[74,116151,131],{"class":80},[74,116153,116154],{"class":84}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[74,116156,116157,116159,116161,116163,116165],{"class":76,"line":2579},[74,116158,3064],{"class":80},[74,116160,107730],{"class":84},[74,116162,996],{"class":80},[74,116164,4056],{"class":134},[74,116166,3702],{"class":84},[74,116168,116169,116171,116173,116175,116177,116180,116182,116184,116186,116188],{"class":76,"line":2584},[74,116170,107713],{"class":80},[74,116172,107716],{"class":134},[74,116174,85],{"class":84},[74,116176,138],{"class":80},[74,116178,116179],{"class":190},"\"site not found: ",[74,116181,982],{"class":134},[74,116183,84091],{"class":84},[74,116185,1032],{"class":134},[74,116187,337],{"class":190},[74,116189,91],{"class":84},[74,116191,116192,116194],{"class":76,"line":12227},[74,116193,4053],{"class":80},[74,116195,116196],{"class":84}," data.site_xpos[site_id].copy()\n",[74,116198,116199],{"class":76,"line":12251},[74,116200,2363],{"emptyLinePlaceholder":2362},[74,116202,116203],{"class":76,"line":12256},[74,116204,2363],{"emptyLinePlaceholder":2362},[74,116206,116207,116209,116212],{"class":76,"line":12262},[74,116208,36228],{"class":80},[74,116210,116211],{"class":1925}," get_obs",[74,116213,116214],{"class":84},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[74,116216,116217,116220,116222,116225,116227],{"class":76,"line":12289},[74,116218,116219],{"class":84},"    tip ",[74,116221,131],{"class":80},[74,116223,116224],{"class":84}," site_position(model, data, ",[74,116226,115817],{"class":190},[74,116228,91],{"class":84},[74,116230,116231,116234,116236,116238,116241],{"class":76,"line":12294},[74,116232,116233],{"class":84},"    target ",[74,116235,131],{"class":80},[74,116237,116224],{"class":84},[74,116239,116240],{"class":190},"\"target\"",[74,116242,91],{"class":84},[74,116244,116245,116247],{"class":76,"line":12300},[74,116246,4053],{"class":80},[74,116248,116249],{"class":84}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[74,116251,116252],{"class":76,"line":12312},[74,116253,2363],{"emptyLinePlaceholder":2362},[74,116255,116256],{"class":76,"line":12324},[74,116257,2363],{"emptyLinePlaceholder":2362},[74,116259,116260,116262,116265,116268,116270],{"class":76,"line":12336},[74,116261,36228],{"class":80},[74,116263,116264],{"class":1925}," reward",[74,116266,116267],{"class":84},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[74,116269,125],{"class":134},[74,116271,3702],{"class":84},[74,116273,116274,116276,116278,116280,116282],{"class":76,"line":13995},[74,116275,116219],{"class":84},[74,116277,131],{"class":80},[74,116279,116224],{"class":84},[74,116281,115817],{"class":190},[74,116283,91],{"class":84},[74,116285,116286,116288,116290,116292,116294],{"class":76,"line":14020},[74,116287,116233],{"class":84},[74,116289,131],{"class":80},[74,116291,116224],{"class":84},[74,116293,116240],{"class":190},[74,116295,91],{"class":84},[74,116297,116298,116301,116303,116305,116307],{"class":76,"line":14043},[74,116299,116300],{"class":84},"    dist ",[74,116302,131],{"class":80},[74,116304,115882],{"class":84},[74,116306,618],{"class":80},[74,116308,115887],{"class":84},[74,116310,116311,116314,116316,116319,116321],{"class":76,"line":14067},[74,116312,116313],{"class":84},"    control_cost ",[74,116315,131],{"class":80},[74,116317,116318],{"class":134}," 0.01",[74,116320,10797],{"class":80},[74,116322,116323],{"class":84}," np.sum(np.square(data.ctrl))\n",[74,116325,116326,116328,116330,116332,116334,116336,116338],{"class":76,"line":14072},[74,116327,4053],{"class":80},[74,116329,114078],{"class":134},[74,116331,85],{"class":84},[74,116333,618],{"class":80},[74,116335,115877],{"class":84},[74,116337,618],{"class":80},[74,116339,116340],{"class":84}," control_cost)\n",[74,116342,116343],{"class":76,"line":14077},[74,116344,2363],{"emptyLinePlaceholder":2362},[74,116346,116347],{"class":76,"line":14082},[74,116348,2363],{"emptyLinePlaceholder":2362},[74,116350,116351,116353,116355,116357,116359],{"class":76,"line":14091},[74,116352,36228],{"class":80},[74,116354,1935],{"class":1925},[74,116356,105679],{"class":84},[74,116358,99967],{"class":134},[74,116360,3702],{"class":84},[74,116362,116363,116365,116367,116369,116371],{"class":76,"line":14096},[74,116364,105688],{"class":84},[74,116366,131],{"class":80},[74,116368,105693],{"class":84},[74,116370,105595],{"class":134},[74,116372,91],{"class":84},[74,116374,116375,116377,116379],{"class":76,"line":14102},[74,116376,105702],{"class":84},[74,116378,131],{"class":80},[74,116380,105707],{"class":84},[74,116382,116383,116385,116387],{"class":76,"line":14123},[74,116384,114434],{"class":84},[74,116386,131],{"class":80},[74,116388,109042],{"class":134},[74,116390,116391],{"class":76,"line":14129},[74,116392,2363],{"emptyLinePlaceholder":2362},[74,116394,116395,116397,116399,116401,116403,116405,116407],{"class":76,"line":14143},[74,116396,3164],{"class":80},[74,116398,35897],{"class":84},[74,116400,30324],{"class":80},[74,116402,36724],{"class":134},[74,116404,85],{"class":84},[74,116406,69355],{"class":134},[74,116408,35067],{"class":84},[74,116410,116411],{"class":76,"line":14149},[74,116412,116413],{"class":84},"        mujoco.mj_forward(model, data)\n",[74,116415,116416,116419,116421,116423,116425],{"class":76,"line":14176},[74,116417,116418],{"class":84},"        tip ",[74,116420,131],{"class":80},[74,116422,116224],{"class":84},[74,116424,115817],{"class":190},[74,116426,91],{"class":84},[74,116428,116429,116432,116434,116436,116438],{"class":76,"line":14185},[74,116430,116431],{"class":84},"        target ",[74,116433,131],{"class":80},[74,116435,116224],{"class":84},[74,116437,116240],{"class":190},[74,116439,91],{"class":84},[74,116441,116442,116445,116447,116450,116452],{"class":76,"line":14191},[74,116443,116444],{"class":84},"        error ",[74,116446,131],{"class":80},[74,116448,116449],{"class":84}," target ",[74,116451,618],{"class":80},[74,116453,116454],{"class":84}," tip\n",[74,116456,116457],{"class":76,"line":14199},[74,116458,2363],{"emptyLinePlaceholder":2362},[74,116460,116461,116463,116465,116467,116469,116472,116474,116476,116479,116481,116484,116486,116488,116490,116492],{"class":76,"line":14204},[74,116462,110898],{"class":84},[74,116464,277],{"class":134},[74,116466,4406],{"class":84},[74,116468,131],{"class":80},[74,116470,116471],{"class":84}," np.clip(",[74,116473,109541],{"class":134},[74,116475,10797],{"class":80},[74,116477,116478],{"class":84}," error[",[74,116480,163],{"class":134},[74,116482,116483],{"class":84},"], ",[74,116485,618],{"class":80},[74,116487,106684],{"class":134},[74,116489,16714],{"class":84},[74,116491,106684],{"class":134},[74,116493,91],{"class":84},[74,116495,116496,116498,116500,116502,116504,116506,116508,116510,116512,116514,116516,116518,116520,116522,116524],{"class":76,"line":20883},[74,116497,110898],{"class":84},[74,116499,303],{"class":134},[74,116501,4406],{"class":84},[74,116503,131],{"class":80},[74,116505,116471],{"class":84},[74,116507,109541],{"class":134},[74,116509,10797],{"class":80},[74,116511,116478],{"class":84},[74,116513,277],{"class":134},[74,116515,116483],{"class":84},[74,116517,618],{"class":80},[74,116519,106684],{"class":134},[74,116521,16714],{"class":84},[74,116523,106684],{"class":134},[74,116525,91],{"class":84},[74,116527,116528],{"class":76,"line":20889},[74,116529,2363],{"emptyLinePlaceholder":2362},[74,116531,116532],{"class":76,"line":20912},[74,116533,105797],{"class":84},[74,116535,116536,116538,116540],{"class":76,"line":20918},[74,116537,114578],{"class":84},[74,116539,13756],{"class":80},[74,116541,116542],{"class":84}," reward(model, data)\n",[74,116544,116545],{"class":76,"line":20941},[74,116546,2363],{"emptyLinePlaceholder":2362},[74,116548,116549,116551,116553,116555,116557,116559,116561],{"class":76,"line":20955},[74,116550,2460],{"class":80},[74,116552,35897],{"class":84},[74,116554,414],{"class":80},[74,116556,10033],{"class":134},[74,116558,105840],{"class":80},[74,116560,4056],{"class":134},[74,116562,3702],{"class":84},[74,116564,116565,116568,116570],{"class":76,"line":20975},[74,116566,116567],{"class":84},"            obs ",[74,116569,131],{"class":80},[74,116571,116572],{"class":84}," get_obs(model, data)\n",[74,116574,116575,116577,116579,116581],{"class":76,"line":20981},[74,116576,38931],{"class":134},[74,116578,85],{"class":84},[74,116580,114612],{"class":190},[74,116582,116583],{"class":84},", step)\n",[74,116585,116586,116588,116590,116593,116596,116598],{"class":76,"line":20992},[74,116587,38931],{"class":134},[74,116589,85],{"class":84},[74,116591,116592],{"class":190},"\"  tip:\"",[74,116594,116595],{"class":84},", np.round(tip, ",[74,116597,157],{"class":134},[74,116599,34778],{"class":84},[74,116601,116602,116604,116606,116609,116612,116614],{"class":76,"line":21015},[74,116603,38931],{"class":134},[74,116605,85],{"class":84},[74,116607,116608],{"class":190},"\"  target:\"",[74,116610,116611],{"class":84},", np.round(target, ",[74,116613,157],{"class":134},[74,116615,34778],{"class":84},[74,116617,116618,116620,116622,116625,116628,116630],{"class":76,"line":21037},[74,116619,38931],{"class":134},[74,116621,85],{"class":84},[74,116623,116624],{"class":190},"\"  ctrl:\"",[74,116626,116627],{"class":84},", np.round(data.ctrl.copy(), ",[74,116629,157],{"class":134},[74,116631,34778],{"class":84},[74,116633,116634,116636,116638,116641,116644,116646],{"class":76,"line":21042},[74,116635,38931],{"class":134},[74,116637,85],{"class":84},[74,116639,116640],{"class":190},"\"  obs_dim:\"",[74,116642,116643],{"class":84},", obs.shape[",[74,116645,277],{"class":134},[74,116647,4620],{"class":84},[74,116649,116650],{"class":76,"line":21048},[74,116651,2363],{"emptyLinePlaceholder":2362},[74,116653,116654,116656,116658,116660,116662,116664,116666,116668],{"class":76,"line":21062},[74,116655,35580],{"class":134},[74,116657,85],{"class":84},[74,116659,114657],{"class":190},[74,116661,16714],{"class":84},[74,116663,36299],{"class":134},[74,116665,114664],{"class":84},[74,116667,157],{"class":134},[74,116669,34778],{"class":84},[74,116671,116672,116674,116676,116679,116682,116684,116686,116688],{"class":76,"line":21075},[74,116673,35580],{"class":134},[74,116675,85],{"class":84},[74,116677,116678],{"class":190},"\"final tip:\"",[74,116680,116681],{"class":84},", np.round(site_position(model, data, ",[74,116683,115817],{"class":190},[74,116685,114626],{"class":84},[74,116687,157],{"class":134},[74,116689,34778],{"class":84},[74,116691,116692,116694,116696,116699,116701,116703,116705,116707],{"class":76,"line":21080},[74,116693,35580],{"class":134},[74,116695,85],{"class":84},[74,116697,116698],{"class":190},"\"target:\"",[74,116700,116681],{"class":84},[74,116702,116240],{"class":190},[74,116704,114626],{"class":84},[74,116706,157],{"class":134},[74,116708,34778],{"class":84},[74,116710,116711],{"class":76,"line":21094},[74,116712,2363],{"emptyLinePlaceholder":2362},[74,116714,116715],{"class":76,"line":21099},[74,116716,2363],{"emptyLinePlaceholder":2362},[74,116718,116719,116721,116723,116725,116727],{"class":76,"line":21105},[74,116720,1493],{"class":80},[74,116722,35501],{"class":134},[74,116724,105840],{"class":80},[74,116726,105843],{"class":190},[74,116728,3702],{"class":84},[74,116730,116731],{"class":76,"line":21110},[74,116732,105850],{"class":84},[19,116734,107851],{},[64,116736,116738],{"className":28102,"code":116737,"language":28104,"meta":69,"style":69},"touch ch7_reacher.py\n",[71,116739,116740],{"__ignoreMap":69},[74,116741,116742,116744],{"class":76,"line":77},[74,116743,105564],{"class":1925},[74,116745,116746],{"class":190}," ch7_reacher.py\n",[19,116748,114725],{},[64,116750,116752],{"className":28102,"code":116751,"language":28104,"meta":69,"style":69},"python ch7_reacher.py\n",[71,116753,116754],{"__ignoreMap":69},[74,116755,116756,116758],{"class":76,"line":77},[74,116757,34661],{"class":1925},[74,116759,116746],{"class":190},[44,116761,105853],{"id":105853},[19,116763,116764],{},"读取 site 坐标：",[64,116766,116768],{"className":34659,"code":116767,"language":34661,"meta":69,"style":69},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[71,116769,116770],{"__ignoreMap":69},[74,116771,116772,116774,116776,116778,116780],{"class":76,"line":77},[74,116773,36228],{"class":80},[74,116775,116137],{"class":1925},[74,116777,116140],{"class":84},[74,116779,1261],{"class":134},[74,116781,116145],{"class":84},[19,116783,116784],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,116786,114741],{},[64,116788,116790],{"className":34659,"code":116789,"language":34661,"meta":69,"style":69},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[71,116791,116792],{"__ignoreMap":69},[74,116793,116794,116796],{"class":76,"line":77},[74,116795,21325],{"class":80},[74,116797,116249],{"class":84},[19,116799,116800],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,116802,114066],{},[64,116804,116806],{"className":34659,"code":116805,"language":34661,"meta":69,"style":69},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[71,116807,116808,116820,116833],{"__ignoreMap":69},[74,116809,116810,116812,116814,116816,116818],{"class":76,"line":77},[74,116811,115877],{"class":84},[74,116813,131],{"class":80},[74,116815,115882],{"class":84},[74,116817,618],{"class":80},[74,116819,115887],{"class":84},[74,116821,116822,116825,116827,116829,116831],{"class":76,"line":94},[74,116823,116824],{"class":84},"control_cost ",[74,116826,131],{"class":80},[74,116828,116318],{"class":134},[74,116830,10797],{"class":80},[74,116832,116323],{"class":84},[74,116834,116835,116837,116839,116841,116843,116845,116847],{"class":76,"line":1141},[74,116836,21325],{"class":80},[74,116838,114078],{"class":134},[74,116840,85],{"class":84},[74,116842,618],{"class":80},[74,116844,115877],{"class":84},[74,116846,618],{"class":80},[74,116848,116340],{"class":84},[19,116850,116851],{},"奖励由两部分组成：",[27,116853,116854,116859],{},[30,116855,116856,116858],{},[71,116857,115904],{},"：末端离目标越远，奖励越低。",[30,116860,116861,116864],{},[71,116862,116863],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,116866,116867],{},"简单控制器：",[64,116869,116871],{"className":34659,"code":116870,"language":34661,"meta":69,"style":69},"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",[71,116872,116873,116886,116918],{"__ignoreMap":69},[74,116874,116875,116878,116880,116882,116884],{"class":76,"line":77},[74,116876,116877],{"class":84},"error ",[74,116879,131],{"class":80},[74,116881,116449],{"class":84},[74,116883,618],{"class":80},[74,116885,116454],{"class":84},[74,116887,116888,116890,116892,116894,116896,116898,116900,116902,116904,116906,116908,116910,116912,116914,116916],{"class":76,"line":94},[74,116889,110152],{"class":84},[74,116891,277],{"class":134},[74,116893,4406],{"class":84},[74,116895,131],{"class":80},[74,116897,116471],{"class":84},[74,116899,109541],{"class":134},[74,116901,10797],{"class":80},[74,116903,116478],{"class":84},[74,116905,163],{"class":134},[74,116907,116483],{"class":84},[74,116909,618],{"class":80},[74,116911,106684],{"class":134},[74,116913,16714],{"class":84},[74,116915,106684],{"class":134},[74,116917,91],{"class":84},[74,116919,116920,116922,116924,116926,116928,116930,116932,116934,116936,116938,116940,116942,116944,116946,116948],{"class":76,"line":1141},[74,116921,110152],{"class":84},[74,116923,303],{"class":134},[74,116925,4406],{"class":84},[74,116927,131],{"class":80},[74,116929,116471],{"class":84},[74,116931,109541],{"class":134},[74,116933,10797],{"class":80},[74,116935,116478],{"class":84},[74,116937,277],{"class":134},[74,116939,116483],{"class":84},[74,116941,618],{"class":80},[74,116943,106684],{"class":134},[74,116945,16714],{"class":84},[74,116947,106684],{"class":134},[74,116949,91],{"class":84},[19,116951,116952],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[44,116954,105989],{"id":105989},[64,116956,116957],{"className":34659,"code":116767,"language":34661,"meta":69,"style":69},[71,116958,116959],{"__ignoreMap":69},[74,116960,116961,116963,116965,116967,116969],{"class":76,"line":77},[74,116962,36228],{"class":80},[74,116964,116137],{"class":1925},[74,116966,116140],{"class":84},[74,116968,1261],{"class":134},[74,116970,116145],{"class":84},[19,116972,116973,116974,116976,116977,86820,116979,32666],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[71,116975,84091],{}," 是 site 的名字，比如 ",[71,116978,115817],{},[71,116980,116240],{},[64,116982,116984],{"className":34659,"code":116983,"language":34661,"meta":69,"style":69},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[71,116985,116986],{"__ignoreMap":69},[74,116987,116988,116990,116992],{"class":76,"line":77},[74,116989,107915],{"class":84},[74,116991,131],{"class":80},[74,116993,116154],{"class":84},[19,116995,116996],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[64,116998,117000],{"className":34659,"code":116999,"language":34661,"meta":69,"style":69},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[71,117001,117002,117014],{"__ignoreMap":69},[74,117003,117004,117006,117008,117010,117012],{"class":76,"line":77},[74,117005,1493],{"class":80},[74,117007,107730],{"class":84},[74,117009,996],{"class":80},[74,117011,4056],{"class":134},[74,117013,3702],{"class":84},[74,117015,117016,117018,117020,117022,117024,117026,117028,117030,117032,117034],{"class":76,"line":94},[74,117017,108176],{"class":80},[74,117019,107716],{"class":134},[74,117021,85],{"class":84},[74,117023,138],{"class":80},[74,117025,116179],{"class":190},[74,117027,982],{"class":134},[74,117029,84091],{"class":84},[74,117031,1032],{"class":134},[74,117033,337],{"class":190},[74,117035,91],{"class":84},[19,117037,117038,117039,117042,117043,117045],{},"如果 site 没找到，就主动报错。",[71,117040,117041],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[71,117044,84091],{}," 的值放进字符串里。",[64,117047,117049],{"className":34659,"code":117048,"language":34661,"meta":69,"style":69},"return data.site_xpos[site_id].copy()\n",[71,117050,117051],{"__ignoreMap":69},[74,117052,117053,117055],{"class":76,"line":77},[74,117054,21325],{"class":80},[74,117056,116196],{"class":84},[19,117058,117059,117060,117062,117063,117066],{},"返回这个 site 的世界坐标。",[71,117061,107961],{}," 里的每一行都是一个 site 的 ",[71,117064,117065],{},"(x, y, z)"," 坐标。",[64,117068,117070],{"className":34659,"code":117069,"language":34661,"meta":69,"style":69},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[71,117071,117072],{"__ignoreMap":69},[74,117073,117074,117076,117078],{"class":76,"line":77},[74,117075,36228],{"class":80},[74,117077,116211],{"class":1925},[74,117079,116214],{"class":84},[19,117081,117082],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[64,117084,117086],{"className":34659,"code":117085,"language":34661,"meta":69,"style":69},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[71,117087,117088,117100],{"__ignoreMap":69},[74,117089,117090,117092,117094,117096,117098],{"class":76,"line":77},[74,117091,115849],{"class":84},[74,117093,131],{"class":80},[74,117095,116224],{"class":84},[74,117097,115817],{"class":190},[74,117099,91],{"class":84},[74,117101,117102,117104,117106,117108,117110],{"class":76,"line":94},[74,117103,115859],{"class":84},[74,117105,131],{"class":80},[74,117107,116224],{"class":84},[74,117109,116240],{"class":190},[74,117111,91],{"class":84},[19,117113,117114],{},"分别读取末端点和目标点的世界坐标。",[64,117116,117117],{"className":34659,"code":116789,"language":34661,"meta":69,"style":69},[71,117118,117119],{"__ignoreMap":69},[74,117120,117121,117123],{"class":76,"line":77},[74,117122,21325],{"class":80},[74,117124,116249],{"class":84},[19,117126,117127],{},"把四部分拼成一个观测数组：",[64,117129,117132],{"className":117130,"code":117131,"language":9466,"meta":69},[9464],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[71,117133,117131],{"__ignoreMap":69},[64,117135,117137],{"className":34659,"code":117136,"language":34661,"meta":69,"style":69},"dist = np.linalg.norm(tip - target)\n",[71,117138,117139],{"__ignoreMap":69},[74,117140,117141,117143,117145,117147,117149],{"class":76,"line":77},[74,117142,115877],{"class":84},[74,117144,131],{"class":80},[74,117146,115882],{"class":84},[74,117148,618],{"class":80},[74,117150,115887],{"class":84},[19,117152,117153,117154,117157,117158,117161],{},"计算 tip 到 target 的距离。",[71,117155,117156],{},"tip - target"," 得到一个三维向量，",[71,117159,117160],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,117163,18912],{},[64,117165,117168],{"className":117166,"code":117167,"language":9466,"meta":69},[9464],"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",[71,117169,117167],{"__ignoreMap":69},[64,117171,117173],{"className":34659,"code":117172,"language":34661,"meta":69,"style":69},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[71,117174,117175],{"__ignoreMap":69},[74,117176,117177,117179,117181,117183,117185],{"class":76,"line":77},[74,117178,116824],{"class":84},[74,117180,131],{"class":80},[74,117182,116318],{"class":134},[74,117184,10797],{"class":80},[74,117186,116323],{"class":84},[19,117188,117189,117190,117193,117194,117197],{},"计算动作惩罚。",[71,117191,117192],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[71,117195,117196],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[64,117199,117201],{"className":34659,"code":117200,"language":34661,"meta":69,"style":69},"return float(-dist - control_cost)\n",[71,117202,117203],{"__ignoreMap":69},[74,117204,117205,117207,117209,117211,117213,117215,117217],{"class":76,"line":77},[74,117206,21325],{"class":80},[74,117208,114078],{"class":134},[74,117210,85],{"class":84},[74,117212,618],{"class":80},[74,117214,115877],{"class":84},[74,117216,618],{"class":80},[74,117218,116340],{"class":84},[19,117220,117221],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[64,117223,117224],{"className":34659,"code":115084,"language":34661,"meta":69,"style":69},[71,117225,117226],{"__ignoreMap":69},[74,117227,117228,117230,117232],{"class":76,"line":77},[74,117229,115091],{"class":84},[74,117231,131],{"class":80},[74,117233,109042],{"class":134},[19,117235,117236],{},"累计奖励变量，记录整个运行过程的总分。",[64,117238,117240],{"className":34659,"code":117239,"language":34661,"meta":69,"style":69},"for step in range(500):\n",[71,117241,117242],{"__ignoreMap":69},[74,117243,117244,117246,117248,117250,117252,117254,117256],{"class":76,"line":77},[74,117245,2988],{"class":80},[74,117247,35897],{"class":84},[74,117249,30324],{"class":80},[74,117251,36724],{"class":134},[74,117253,85],{"class":84},[74,117255,69355],{"class":134},[74,117257,35067],{"class":84},[19,117259,117260],{},"运行 500 个控制步。",[64,117262,117263],{"className":34659,"code":108824,"language":34661,"meta":69,"style":69},[71,117264,117265],{"__ignoreMap":69},[74,117266,117267],{"class":76,"line":77},[74,117268,108824],{"class":84},[19,117270,117271,117272,105299,117274,117276],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[71,117273,107512],{},[71,117275,107515],{}," 是当前状态下的坐标。",[64,117278,117280],{"className":34659,"code":117279,"language":34661,"meta":69,"style":69},"error = target - tip\n",[71,117281,117282],{"__ignoreMap":69},[74,117283,117284,117286,117288,117290,117292],{"class":76,"line":77},[74,117285,116877],{"class":84},[74,117287,131],{"class":80},[74,117289,116449],{"class":84},[74,117291,618],{"class":80},[74,117293,116454],{"class":84},[19,117295,117296],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[64,117298,117300],{"className":34659,"code":117299,"language":34661,"meta":69,"style":69},"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",[71,117301,117302,117334],{"__ignoreMap":69},[74,117303,117304,117306,117308,117310,117312,117314,117316,117318,117320,117322,117324,117326,117328,117330,117332],{"class":76,"line":77},[74,117305,110152],{"class":84},[74,117307,277],{"class":134},[74,117309,4406],{"class":84},[74,117311,131],{"class":80},[74,117313,116471],{"class":84},[74,117315,109541],{"class":134},[74,117317,10797],{"class":80},[74,117319,116478],{"class":84},[74,117321,163],{"class":134},[74,117323,116483],{"class":84},[74,117325,618],{"class":80},[74,117327,106684],{"class":134},[74,117329,16714],{"class":84},[74,117331,106684],{"class":134},[74,117333,91],{"class":84},[74,117335,117336,117338,117340,117342,117344,117346,117348,117350,117352,117354,117356,117358,117360,117362,117364],{"class":76,"line":94},[74,117337,110152],{"class":84},[74,117339,303],{"class":134},[74,117341,4406],{"class":84},[74,117343,131],{"class":80},[74,117345,116471],{"class":84},[74,117347,109541],{"class":134},[74,117349,10797],{"class":80},[74,117351,116478],{"class":84},[74,117353,277],{"class":134},[74,117355,116483],{"class":84},[74,117357,618],{"class":80},[74,117359,106684],{"class":134},[74,117361,16714],{"class":84},[74,117363,106684],{"class":134},[74,117365,91],{"class":84},[19,117367,117368,117369,117372],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[71,117370,117371],{},"error -> ctrl -> step"," 的流程。",[64,117374,117375],{"className":34659,"code":108786,"language":34661,"meta":69,"style":69},[71,117376,117377],{"__ignoreMap":69},[74,117378,117379],{"class":76,"line":77},[74,117380,108786],{"class":84},[19,117382,117383],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[64,117385,117387],{"className":34659,"code":117386,"language":34661,"meta":69,"style":69},"obs = get_obs(model, data)\n",[71,117388,117389],{"__ignoreMap":69},[74,117390,117391,117393,117395],{"class":76,"line":77},[74,117392,115135],{"class":84},[74,117394,131],{"class":80},[74,117396,116572],{"class":84},[19,117398,117399,117400,117403],{},"读取最新观测。后面打印 ",[71,117401,117402],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,117405,106597],{"id":106596},[19,117407,117408],{},"观测维度为:",[64,117410,117413],{"className":117411,"code":117412,"language":9466,"meta":69},[9464],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[71,117414,117412],{"__ignoreMap":69},[19,117416,117417],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,117419,117420],{},"程序每 100 步打印：",[64,117422,117425],{"className":117423,"code":117424,"language":9466,"meta":69},[9464],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[71,117426,117424],{"__ignoreMap":69},[19,117428,117429,117430,117432],{},"如果控制有效，你应该看到最终 ",[71,117431,107512],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,117434,106629],{"id":106628},[27,117436,117437,117440,117443,117449,117455,117462,117472],{},[30,117438,117439],{},"修改目标点位置。",[30,117441,117442],{},"重新运行，观察最终 tip 是否变化。",[30,117444,117445,117446,117448],{},"把 gravity 改成 ",[71,117447,106870],{},"，观察控制是否变差。",[30,117450,115462,117451,115466,117453,32666],{},[71,117452,106439],{},[71,117454,163],{},[30,117456,106692,117457,106695,117459,117461],{},[71,117458,114877],{},[71,117460,111588],{},"，观察机械臂是否更难移动。",[30,117463,106692,117464,86811,117466,106695,117468,117471],{},[71,117465,107515],{},[71,117467,108427],{},[71,117469,117470],{},"0.2 0 0.6","，观察 reward 和 final tip。",[30,117473,117474],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,117476,106734],{"id":106733},[44,117478,117480],{"id":117479},"site-not-found",[71,117481,117482],{},"site not found",[19,117484,117485,117486,105299,117489,32666],{},"检查 XML 中是否有 ",[71,117487,117488],{},"site name=\"tip\"",[71,117490,117491],{},"site name=\"target\"",[44,117493,117494],{"id":117494},"机械臂完全不动",[19,117496,106804],{},[27,117498,117499,117504,117507,117512],{},[30,117500,117501,117503],{},[71,117502,106439],{}," 是否为 2",[30,117505,117506],{},"actuator 是否引用正确 joint",[30,117508,117509,117511],{},[71,117510,105357],{}," 是否被赋值",[30,117513,117514,117515],{},"是否执行了 ",[71,117516,104966],{},[44,117518,117519],{"id":117519},"控制效果不好",[19,117521,117522],{},"正常。本章重点不是控制器最优，而是任务结构:",[64,117524,117527],{"className":117525,"code":117526,"language":9466,"meta":69},[9464],"obs → action → mj_step → reward → next_obs\n",[71,117528,117526],{"__ignoreMap":69},[44,117530,117532],{"id":117531},"tip-坐标不变化","tip 坐标不变化",[19,117534,106856],{},[27,117536,117537,117542,117550,117559],{},[30,117538,117539,117540,32666],{},"是否每步调用了 ",[71,117541,104966],{},[30,117543,117544,117545,105299,117547,32666],{},"是否写入了 ",[71,117546,110407],{},[71,117548,117549],{},"data.ctrl[1]",[30,117551,117552,117553,298,117556,32666],{},"actuator 是否正确引用 ",[71,117554,117555],{},"joint1",[71,117557,117558],{},"joint2",[30,117560,117561],{},"控制输入是否太小。",[44,117563,117564],{"id":117564},"目标点不会动",[19,117566,117567],{},"本章的 target 是固定 site：",[64,117569,117571],{"className":57348,"code":117570,"language":57350,"meta":69,"style":69},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[71,117572,117573],{"__ignoreMap":69},[74,117574,117575,117577,117579,117581,117583,117585,117587,117589,117592],{"class":76,"line":77},[74,117576,996],{"class":84},[74,117578,107491],{"class":55581},[74,117580,19199],{"class":1925},[74,117582,131],{"class":84},[74,117584,116240],{"class":190},[74,117586,105387],{"class":1925},[74,117588,131],{"class":84},[74,117590,117591],{"class":190},"\"0.5 0 0.4\"",[74,117593,117594],{"class":84}," ...\u002F>\n",[19,117596,117597,117598,117600],{},"它直接挂在 ",[71,117599,106122],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[44,117602,117603],{"id":117603},"机械臂不像真实机械臂",[19,117605,117606],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,117608,106888],{"id":106887},[19,117610,117611],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,117613,117614],{},"核心公式：",[64,117616,117619],{"className":117617,"code":117618,"language":9466,"meta":69},[9464],"distance = ||tip - target||\nreward = -distance - action_cost\n",[71,117620,117618],{"__ignoreMap":69},[19,117622,117623],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5090,117625,117626],{},"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":69,"searchDepth":94,"depth":94,"links":117628},[117629,117630,117631,117636,117640,117641,117642,117650],{"id":104927,"depth":94,"text":104928},{"id":105050,"depth":94,"text":105051},{"id":105325,"depth":94,"text":105326,"children":117632},[117633,117634,117635],{"id":115832,"depth":1141,"text":115833},{"id":115908,"depth":1141,"text":115908},{"id":115938,"depth":1141,"text":115939},{"id":105533,"depth":94,"text":105534,"children":117637},[117638,117639],{"id":105853,"depth":1141,"text":105853},{"id":105989,"depth":1141,"text":105989},{"id":106596,"depth":94,"text":106597},{"id":106628,"depth":94,"text":106629},{"id":106733,"depth":94,"text":106734,"children":117643},[117644,117645,117646,117647,117648,117649],{"id":117479,"depth":1141,"text":117482},{"id":117494,"depth":1141,"text":117494},{"id":117519,"depth":1141,"text":117519},{"id":117531,"depth":1141,"text":117532},{"id":117564,"depth":1141,"text":117564},{"id":117603,"depth":1141,"text":117603},{"id":106887,"depth":94,"text":106888},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":115636,"description":69},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":117657,"title":117658,"body":117659,"description":69,"extension":5121,"meta":121121,"navigation":2362,"path":121122,"seo":121123,"stem":121124,"__hash__":121125},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":117660,"toc":121092},[117661,117664,117666,117669,117672,117697,117700,117706,117709,117715,117717,117719,117743,117745,117763,117765,117808,117810,117837,117839,117842,117894,117897,117903,117912,117915,117953,117956,117995,117998,118006,118013,118016,118022,118024,118078,118085,118130,118133,118137,118153,118163,118165,119426,119428,119440,119442,119453,119455,119458,119479,119482,119485,119518,119524,119527,119560,119563,119566,119607,119612,119626,119629,119642,119647,119670,119672,119687,119697,119712,119719,119739,119754,119772,119775,119792,119800,119816,119822,119854,119867,119899,119909,119944,119958,120004,120018,120060,120071,120084,120090,120123,120126,120153,120163,120203,120213,120230,120237,120255,120258,120299,120312,120327,120330,120353,120356,120368,120371,120390,120395,120416,120419,120434,120437,120471,120483,120498,120501,120526,120529,120548,120551,120583,120586,120610,120616,120646,120653,120666,120669,120671,120673,120679,120682,120685,120697,120700,120702,120756,120758,120762,120768,120777,120780,120787,120789,120812,120815,120819,120821,120839,120845,120847,120880,120883,120889,120893,120896,120916,120921,120925,120932,120952,120957,120961,120964,120984,120987,121073,121077,121080,121086,121089],[10,117662,117658],{"id":117663},"_8gymnasium-风格强化学习接口基础",[14,117665,104928],{"id":104927},[19,117667,117668],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,117670,117671],{},"你将实现:",[64,117673,117675],{"className":34659,"code":117674,"language":34661,"meta":69,"style":69},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[71,117676,117677,117687],{"__ignoreMap":69},[74,117678,117679,117682,117684],{"class":76,"line":77},[74,117680,117681],{"class":84},"obs, info ",[74,117683,131],{"class":80},[74,117685,117686],{"class":84}," env.reset()\n",[74,117688,117689,117692,117694],{"class":76,"line":94},[74,117690,117691],{"class":84},"obs, reward, terminated, truncated, info ",[74,117693,131],{"class":80},[74,117695,117696],{"class":84}," env.step(action)\n",[19,117698,117699],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,117701,117702,117703,117705],{},"前面章节的代码都是“脚本式”的：在 ",[71,117704,106576],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,117707,117708],{},"可以先记住 Gymnasium 环境的核心交互：",[64,117710,117713],{"className":117711,"code":117712,"language":9466,"meta":69},[9464],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[71,117714,117712],{"__ignoreMap":69},[14,117716,105051],{"id":105050},[19,117718,105054],{},[64,117720,117721],{"className":28102,"code":108669,"language":28104,"meta":69,"style":69},[71,117722,117723],{"__ignoreMap":69},[74,117724,117725,117727,117729,117731,117733,117735,117737,117739,117741],{"class":76,"line":77},[74,117726,28857],{"class":1925},[74,117728,30596],{"class":190},[74,117730,28114],{"class":190},[74,117732,30681],{"class":134},[74,117734,108684],{"class":190},[74,117736,105079],{"class":190},[74,117738,106782],{"class":190},[74,117740,105095],{"class":190},[74,117742,108693],{"class":190},[19,117744,107100],{},[64,117746,117748],{"className":28102,"code":117747,"language":28104,"meta":69,"style":69},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[71,117749,117750],{"__ignoreMap":69},[74,117751,117752,117754,117756,117758,117760],{"class":76,"line":77},[74,117753,28111],{"class":1925},[74,117755,28114],{"class":190},[74,117757,105211],{"class":190},[74,117759,111992],{"class":190},[74,117761,117762],{"class":190}," gymnasium\n",[19,117764,107117],{},[64,117766,117768],{"className":28102,"code":117767,"language":28104,"meta":69,"style":69},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[71,117769,117770,117787,117796],{"__ignoreMap":69},[74,117771,117772,117774,117776,117778,117781,117783,117785],{"class":76,"line":77},[74,117773,34611],{"class":1925},[74,117775,33457],{"class":190},[74,117777,29396],{"class":134},[74,117779,117780],{"class":190}," mujoco-gym-api",[74,117782,105256],{"class":190},[74,117784,105259],{"class":134},[74,117786,105262],{"class":134},[74,117788,117789,117791,117793],{"class":76,"line":94},[74,117790,34611],{"class":1925},[74,117792,105269],{"class":190},[74,117794,117795],{"class":190}," mujoco-gym-api\n",[74,117797,117798,117800,117802,117804,117806],{"class":76,"line":1141},[74,117799,28111],{"class":1925},[74,117801,28114],{"class":190},[74,117803,105211],{"class":190},[74,117805,111992],{"class":190},[74,117807,117762],{"class":190},[19,117809,105285],{},[27,117811,117812,117822,117825,117831],{},[30,117813,117814,117815,117818,117819,32666],{},"本章使用 ",[71,117816,117817],{},"gymnasium","，不是旧版 ",[71,117820,117821],{},"gym",[30,117823,117824],{},"Gymnasium API 与旧 Gym API 有差异。",[30,117826,117827,117828,32666],{},"旧 Gym 常见返回值是 4 个: ",[71,117829,117830],{},"obs, reward, done, info",[30,117832,117833,117834,32666],{},"Gymnasium 返回值是 5 个: ",[71,117835,117836],{},"obs, reward, terminated, truncated, info",[14,117838,105326],{"id":105325},[19,117840,117841],{},"强化学习环境接口包含:",[223,117843,117844,117853],{},[226,117845,117846],{},[229,117847,117848,117851],{},[232,117849,117850],{"align":28016},"方法",[232,117852,106977],{"align":28016},[270,117854,117855,117865,117875,117885],{},[229,117856,117857,117862],{},[275,117858,117859],{"align":28016},[71,117860,117861],{},"reset()",[275,117863,117864],{"align":28016},"重置环境",[229,117866,117867,117872],{},[275,117868,117869],{"align":28016},[71,117870,117871],{},"step(action)",[275,117873,117874],{"align":28016},"执行动作",[229,117876,117877,117882],{},[275,117878,117879],{"align":28016},[71,117880,117881],{},"observation_space",[275,117883,117884],{"align":28016},"观测空间",[229,117886,117887,117892],{},[275,117888,117889],{"align":28016},[71,117890,117891],{},"action_space",[275,117893,27934],{"align":28016},[19,117895,117896],{},"一个最小环境需要完成:",[64,117898,117901],{"className":117899,"code":117900,"language":9466,"meta":69},[9464],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[71,117902,117900],{"__ignoreMap":69},[44,117904,117906,105299,117909,108919],{"id":117905},"terminated-和-truncated-的区别",[71,117907,117908],{},"terminated",[71,117910,117911],{},"truncated",[19,117913,117914],{},"Gymnasium 把“结束”拆成两个概念：",[223,117916,117917,117927],{},[226,117918,117919],{},[229,117920,117921,117923,117925],{},[232,117922,108855],{"align":28016},[232,117924,104981],{"align":28016},[232,117926,25466],{"align":28016},[270,117928,117929,117941],{},[229,117930,117931,117935,117938],{},[275,117932,117933],{"align":28016},[71,117934,117908],{},[275,117936,117937],{"align":28016},"任务自然结束",[275,117939,117940],{"align":28016},"机械臂到达目标、机器人摔倒",[229,117942,117943,117947,117950],{},[275,117944,117945],{"align":28016},[71,117946,117911],{},[275,117948,117949],{"align":28016},"因外部限制截断",[275,117951,117952],{"align":28016},"达到最大步数、时间限制",[19,117954,117955],{},"本章中：",[64,117957,117959],{"className":34659,"code":117958,"language":34661,"meta":69,"style":69},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[71,117960,117961,117976],{"__ignoreMap":69},[74,117962,117963,117966,117968,117971,117973],{"class":76,"line":77},[74,117964,117965],{"class":84},"terminated ",[74,117967,131],{"class":80},[74,117969,117970],{"class":84}," dist ",[74,117972,996],{"class":80},[74,117974,117975],{"class":134}," 0.05\n",[74,117977,117978,117981,117983,117985,117988,117990,117992],{"class":76,"line":94},[74,117979,117980],{"class":84},"truncated ",[74,117982,131],{"class":80},[74,117984,43154],{"class":134},[74,117986,117987],{"class":84},".steps ",[74,117989,1672],{"class":80},[74,117991,43154],{"class":134},[74,117993,117994],{"class":84},".max_steps\n",[19,117996,117997],{},"也就是：",[27,117999,118000,118003],{},[30,118001,118002],{},"末端距离目标小于 0.05，任务成功结束。",[30,118004,118005],{},"步数超过上限，episode 被截断。",[44,118007,118009,105299,118011],{"id":118008},"observation_space-和-action_space",[71,118010,117881],{},[71,118012,117891],{},[19,118014,118015],{},"这两个对象告诉算法：",[64,118017,118020],{"className":118018,"code":118019,"language":9466,"meta":69},[9464],"观测长什么样\n动作允许多大\n",[71,118021,118019],{"__ignoreMap":69},[19,118023,18912],{},[64,118025,118027],{"className":34659,"code":118026,"language":34661,"meta":69,"style":69},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[71,118028,118029],{"__ignoreMap":69},[74,118030,118031,118033,118036,118038,118041,118044,118047,118049,118051,118054,118056,118058,118060,118062,118064,118066,118068,118071,118073,118075],{"class":76,"line":77},[74,118032,35104],{"class":134},[74,118034,118035],{"class":84},".action_space ",[74,118037,131],{"class":80},[74,118039,118040],{"class":84}," spaces.Box(",[74,118042,118043],{"class":9495},"low",[74,118045,118046],{"class":80},"=-",[74,118048,106684],{"class":134},[74,118050,16714],{"class":84},[74,118052,118053],{"class":9495},"high",[74,118055,131],{"class":80},[74,118057,106684],{"class":134},[74,118059,16714],{"class":84},[74,118061,100244],{"class":9495},[74,118063,131],{"class":80},[74,118065,85],{"class":84},[74,118067,163],{"class":134},[74,118069,118070],{"class":84},",), ",[74,118072,97781],{"class":9495},[74,118074,131],{"class":80},[74,118076,118077],{"class":84},"np.float32)\n",[19,118079,118080,118081,118084],{},"表示动作是 2 维数组，每个值都在 ",[71,118082,118083],{},"[-1, 1]"," 范围内。",[64,118086,118088],{"className":34659,"code":118087,"language":34661,"meta":69,"style":69},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[71,118089,118090],{"__ignoreMap":69},[74,118091,118092,118094,118097,118099,118101,118103,118105,118108,118110,118112,118114,118116,118118,118120,118122,118124,118126,118128],{"class":76,"line":77},[74,118093,35104],{"class":134},[74,118095,118096],{"class":84},".observation_space ",[74,118098,131],{"class":80},[74,118100,118040],{"class":84},[74,118102,118043],{"class":9495},[74,118104,118046],{"class":80},[74,118106,118107],{"class":84},"np.inf, ",[74,118109,118053],{"class":9495},[74,118111,131],{"class":80},[74,118113,118107],{"class":84},[74,118115,100244],{"class":9495},[74,118117,131],{"class":80},[74,118119,85],{"class":84},[74,118121,532],{"class":134},[74,118123,118070],{"class":84},[74,118125,97781],{"class":9495},[74,118127,131],{"class":80},[74,118129,118077],{"class":84},[19,118131,118132],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[44,118134,118136],{"id":118135},"frame_skip-是什么","frame_skip 是什么",[64,118138,118140],{"className":34659,"code":118139,"language":34661,"meta":69,"style":69},"self.frame_skip = 5\n",[71,118141,118142],{"__ignoreMap":69},[74,118143,118144,118146,118149,118151],{"class":76,"line":77},[74,118145,35104],{"class":134},[74,118147,118148],{"class":84},".frame_skip ",[74,118150,131],{"class":80},[74,118152,58708],{"class":134},[19,118154,118155,118156,118159,118160,118162],{},"表示外部调用一次 ",[71,118157,118158],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[71,118161,105496],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,118164,105534],{"id":105533},[64,118166,118168],{"className":34659,"code":118167,"language":34661,"meta":69,"style":69},"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",[71,118169,118170,118182,118188,118198,118209,118213,118217,118225,118230,118234,118238,118242,118246,118250,118254,118258,118263,118267,118271,118275,118280,118284,118288,118292,118296,118300,118304,118308,118312,118316,118320,118324,118328,118332,118350,118365,118369,118382,118392,118407,118424,118428,118449,118468,118493,118507,118511,118521,118533,118543,118547,118589,118627,118631,118641,118657,118672,118691,118698,118702,118715,118730,118745,118758,118777,118793,118797,118838,118853,118868,118872,118911,118922,118935,118939,118949,118958,118962,118972,118987,119005,119009,119020,119037,119050,119054,119064,119068,119079,119090,119094,119108,119122,119138,119142,119155,119172,119187,119194,119198,119202,119214,119224,119242,119254,119266,119270,119278,119294,119303,119312,119320,119362,119375,119380,119384,119402,119406,119410,119422],{"__ignoreMap":69},[74,118171,118172,118174,118177,118179],{"class":76,"line":77},[74,118173,34673],{"class":80},[74,118175,118176],{"class":84}," gymnasium ",[74,118178,35664],{"class":80},[74,118180,118181],{"class":84}," gym\n",[74,118183,118184,118186],{"class":76,"line":94},[74,118185,34673],{"class":80},[74,118187,105582],{"class":84},[74,118189,118190,118192,118194,118196],{"class":76,"line":1141},[74,118191,34673],{"class":80},[74,118193,35661],{"class":84},[74,118195,35664],{"class":80},[74,118197,35667],{"class":84},[74,118199,118200,118202,118204,118206],{"class":76,"line":1156},[74,118201,35018],{"class":80},[74,118203,118176],{"class":84},[74,118205,34673],{"class":80},[74,118207,118208],{"class":84}," spaces\n",[74,118210,118211],{"class":76,"line":1162},[74,118212,2363],{"emptyLinePlaceholder":2362},[74,118214,118215],{"class":76,"line":1176},[74,118216,2363],{"emptyLinePlaceholder":2362},[74,118218,118219,118221,118223],{"class":76,"line":1182},[74,118220,105595],{"class":134},[74,118222,17843],{"class":80},[74,118224,105600],{"class":190},[74,118226,118227],{"class":76,"line":1273},[74,118228,118229],{"class":190},"\u003Cmujoco model=\"gym_reacher\">\n",[74,118231,118232],{"class":76,"line":1279},[74,118233,116019],{"class":190},[74,118235,118236],{"class":76,"line":1291},[74,118237,2363],{"emptyLinePlaceholder":2362},[74,118239,118240],{"class":76,"line":1574},[74,118241,105619],{"class":190},[74,118243,118244],{"class":76,"line":1579},[74,118245,116037],{"class":190},[74,118247,118248],{"class":76,"line":1585},[74,118249,2363],{"emptyLinePlaceholder":2362},[74,118251,118252],{"class":76,"line":1590},[74,118253,116046],{"class":190},[74,118255,118256],{"class":76,"line":1604},[74,118257,116051],{"class":190},[74,118259,118260],{"class":76,"line":1609},[74,118261,118262],{"class":190},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[74,118264,118265],{"class":76,"line":1615},[74,118266,2363],{"emptyLinePlaceholder":2362},[74,118268,118269],{"class":76,"line":1636},[74,118270,116065],{"class":190},[74,118272,118273],{"class":76,"line":1641},[74,118274,116070],{"class":190},[74,118276,118277],{"class":76,"line":1655},[74,118278,118279],{"class":190},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[74,118281,118282],{"class":76,"line":1660},[74,118283,116080],{"class":190},[74,118285,118286],{"class":76,"line":1689},[74,118287,110719],{"class":190},[74,118289,118290],{"class":76,"line":1694},[74,118291,105648],{"class":190},[74,118293,118294],{"class":76,"line":1711},[74,118295,105653],{"class":190},[74,118297,118298],{"class":76,"line":1716},[74,118299,2363],{"emptyLinePlaceholder":2362},[74,118301,118302],{"class":76,"line":1721},[74,118303,110736],{"class":190},[74,118305,118306],{"class":76,"line":1726},[74,118307,116105],{"class":190},[74,118309,118310],{"class":76,"line":1740},[74,118311,116110],{"class":190},[74,118313,118314],{"class":76,"line":1745},[74,118315,110746],{"class":190},[74,118317,118318],{"class":76,"line":2540},[74,118319,105658],{"class":190},[74,118321,118322],{"class":76,"line":2554},[74,118323,99979],{"class":190},[74,118325,118326],{"class":76,"line":2562},[74,118327,2363],{"emptyLinePlaceholder":2362},[74,118329,118330],{"class":76,"line":2567},[74,118331,2363],{"emptyLinePlaceholder":2362},[74,118333,118334,118336,118339,118341,118343,118345,118348],{"class":76,"line":2573},[74,118335,18973],{"class":80},[74,118337,118338],{"class":1925}," ReacherEnv",[74,118340,85],{"class":84},[74,118342,117821],{"class":1925},[74,118344,644],{"class":84},[74,118346,118347],{"class":1925},"Env",[74,118349,35067],{"class":84},[74,118351,118352,118355,118357,118359,118362],{"class":76,"line":2579},[74,118353,118354],{"class":84},"    metadata ",[74,118356,131],{"class":80},[74,118358,4411],{"class":84},[74,118360,118361],{"class":190},"\"render_modes\"",[74,118363,118364],{"class":84},": []}\n",[74,118366,118367],{"class":76,"line":2584},[74,118368,2363],{"emptyLinePlaceholder":2362},[74,118370,118371,118373,118375,118378,118380],{"class":76,"line":12227},[74,118372,35082],{"class":80},[74,118374,35085],{"class":134},[74,118376,118377],{"class":84},"(self) -> ",[74,118379,99967],{"class":134},[74,118381,3702],{"class":84},[74,118383,118384,118386,118388,118390],{"class":76,"line":12251},[74,118385,35098],{"class":134},[74,118387,21540],{"class":84},[74,118389,35110],{"class":134},[74,118391,1938],{"class":84},[74,118393,118394,118396,118399,118401,118403,118405],{"class":76,"line":12256},[74,118395,35126],{"class":134},[74,118397,118398],{"class":84},".model ",[74,118400,131],{"class":80},[74,118402,105693],{"class":84},[74,118404,105595],{"class":134},[74,118406,91],{"class":84},[74,118408,118409,118411,118414,118416,118419,118421],{"class":76,"line":12262},[74,118410,35126],{"class":134},[74,118412,118413],{"class":84},".data ",[74,118415,131],{"class":80},[74,118417,118418],{"class":84}," mujoco.MjData(",[74,118420,35104],{"class":134},[74,118422,118423],{"class":84},".model)\n",[74,118425,118426],{"class":76,"line":12289},[74,118427,2363],{"emptyLinePlaceholder":2362},[74,118429,118430,118432,118435,118437,118440,118442,118445,118447],{"class":76,"line":12294},[74,118431,35126],{"class":134},[74,118433,118434],{"class":84},".tip_site_id ",[74,118436,131],{"class":80},[74,118438,118439],{"class":84}," mujoco.mj_name2id(",[74,118441,35104],{"class":134},[74,118443,118444],{"class":84},".model, mujoco.mjtObj.mjOBJ_SITE, ",[74,118446,115817],{"class":190},[74,118448,91],{"class":84},[74,118450,118451,118453,118456,118458,118460,118462,118464,118466],{"class":76,"line":12300},[74,118452,35126],{"class":134},[74,118454,118455],{"class":84},".target_site_id ",[74,118457,131],{"class":80},[74,118459,118439],{"class":84},[74,118461,35104],{"class":134},[74,118463,118444],{"class":84},[74,118465,116240],{"class":190},[74,118467,91],{"class":84},[74,118469,118470,118472,118474,118476,118478,118480,118483,118485,118487,118489,118491],{"class":76,"line":12312},[74,118471,2460],{"class":80},[74,118473,43154],{"class":134},[74,118475,118434],{"class":84},[74,118477,996],{"class":80},[74,118479,4056],{"class":134},[74,118481,118482],{"class":80}," or",[74,118484,43154],{"class":134},[74,118486,118455],{"class":84},[74,118488,996],{"class":80},[74,118490,4056],{"class":134},[74,118492,3702],{"class":84},[74,118494,118495,118498,118500,118502,118505],{"class":76,"line":12324},[74,118496,118497],{"class":80},"            raise",[74,118499,107716],{"class":134},[74,118501,85],{"class":84},[74,118503,118504],{"class":190},"\"required sites not found\"",[74,118506,91],{"class":84},[74,118508,118509],{"class":76,"line":12336},[74,118510,2363],{"emptyLinePlaceholder":2362},[74,118512,118513,118515,118517,118519],{"class":76,"line":13995},[74,118514,35126],{"class":134},[74,118516,118148],{"class":84},[74,118518,131],{"class":80},[74,118520,58708],{"class":134},[74,118522,118523,118525,118528,118530],{"class":76,"line":14020},[74,118524,35126],{"class":134},[74,118526,118527],{"class":84},".max_steps ",[74,118529,131],{"class":80},[74,118531,118532],{"class":134}," 200\n",[74,118534,118535,118537,118539,118541],{"class":76,"line":14043},[74,118536,35126],{"class":134},[74,118538,117987],{"class":84},[74,118540,131],{"class":80},[74,118542,51614],{"class":134},[74,118544,118545],{"class":76,"line":14067},[74,118546,2363],{"emptyLinePlaceholder":2362},[74,118548,118549,118551,118553,118555,118557,118559,118561,118563,118565,118567,118569,118571,118573,118575,118577,118579,118581,118583,118585,118587],{"class":76,"line":14072},[74,118550,35126],{"class":134},[74,118552,118035],{"class":84},[74,118554,131],{"class":80},[74,118556,118040],{"class":84},[74,118558,118043],{"class":9495},[74,118560,118046],{"class":80},[74,118562,106684],{"class":134},[74,118564,16714],{"class":84},[74,118566,118053],{"class":9495},[74,118568,131],{"class":80},[74,118570,106684],{"class":134},[74,118572,16714],{"class":84},[74,118574,100244],{"class":9495},[74,118576,131],{"class":80},[74,118578,85],{"class":84},[74,118580,163],{"class":134},[74,118582,118070],{"class":84},[74,118584,97781],{"class":9495},[74,118586,131],{"class":80},[74,118588,118077],{"class":84},[74,118590,118591,118593,118595,118597,118599,118601,118603,118605,118607,118609,118611,118613,118615,118617,118619,118621,118623,118625],{"class":76,"line":14077},[74,118592,35126],{"class":134},[74,118594,118096],{"class":84},[74,118596,131],{"class":80},[74,118598,118040],{"class":84},[74,118600,118043],{"class":9495},[74,118602,118046],{"class":80},[74,118604,118107],{"class":84},[74,118606,118053],{"class":9495},[74,118608,131],{"class":80},[74,118610,118107],{"class":84},[74,118612,100244],{"class":9495},[74,118614,131],{"class":80},[74,118616,85],{"class":84},[74,118618,532],{"class":134},[74,118620,118070],{"class":84},[74,118622,97781],{"class":9495},[74,118624,131],{"class":80},[74,118626,118077],{"class":84},[74,118628,118629],{"class":76,"line":14082},[74,118630,2363],{"emptyLinePlaceholder":2362},[74,118632,118633,118635,118638],{"class":76,"line":14091},[74,118634,35082],{"class":80},[74,118636,118637],{"class":1925}," _get_obs",[74,118639,118640],{"class":84},"(self) -> np.ndarray:\n",[74,118642,118643,118645,118647,118649,118652,118654],{"class":76,"line":14096},[74,118644,116418],{"class":84},[74,118646,131],{"class":80},[74,118648,43154],{"class":134},[74,118650,118651],{"class":84},".data.site_xpos[",[74,118653,35104],{"class":134},[74,118655,118656],{"class":84},".tip_site_id].copy()\n",[74,118658,118659,118661,118663,118665,118667,118669],{"class":76,"line":14102},[74,118660,116431],{"class":84},[74,118662,131],{"class":80},[74,118664,43154],{"class":134},[74,118666,118651],{"class":84},[74,118668,35104],{"class":134},[74,118670,118671],{"class":84},".target_site_id].copy()\n",[74,118673,118674,118676,118678,118681,118683,118686,118688],{"class":76,"line":14123},[74,118675,114463],{"class":84},[74,118677,131],{"class":80},[74,118679,118680],{"class":84}," np.concatenate([",[74,118682,35104],{"class":134},[74,118684,118685],{"class":84},".data.qpos.copy(), ",[74,118687,35104],{"class":134},[74,118689,118690],{"class":84},".data.qvel.copy(), tip, target])\n",[74,118692,118693,118695],{"class":76,"line":14129},[74,118694,19031],{"class":80},[74,118696,118697],{"class":84}," obs.astype(np.float32)\n",[74,118699,118700],{"class":76,"line":14143},[74,118701,2363],{"emptyLinePlaceholder":2362},[74,118703,118704,118706,118709,118711,118713],{"class":76,"line":14149},[74,118705,35082],{"class":80},[74,118707,118708],{"class":1925}," _get_reward",[74,118710,118377],{"class":84},[74,118712,125],{"class":134},[74,118714,3702],{"class":84},[74,118716,118717,118719,118721,118723,118725,118727],{"class":76,"line":14176},[74,118718,116418],{"class":84},[74,118720,131],{"class":80},[74,118722,43154],{"class":134},[74,118724,118651],{"class":84},[74,118726,35104],{"class":134},[74,118728,118729],{"class":84},".tip_site_id]\n",[74,118731,118732,118734,118736,118738,118740,118742],{"class":76,"line":14185},[74,118733,116431],{"class":84},[74,118735,131],{"class":80},[74,118737,43154],{"class":134},[74,118739,118651],{"class":84},[74,118741,35104],{"class":134},[74,118743,118744],{"class":84},".target_site_id]\n",[74,118746,118747,118750,118752,118754,118756],{"class":76,"line":14191},[74,118748,118749],{"class":84},"        dist ",[74,118751,131],{"class":80},[74,118753,115882],{"class":84},[74,118755,618],{"class":80},[74,118757,115887],{"class":84},[74,118759,118760,118763,118765,118767,118769,118772,118774],{"class":76,"line":14199},[74,118761,118762],{"class":84},"        control_cost ",[74,118764,131],{"class":80},[74,118766,116318],{"class":134},[74,118768,10797],{"class":80},[74,118770,118771],{"class":84}," np.sum(np.square(",[74,118773,35104],{"class":134},[74,118775,118776],{"class":84},".data.ctrl))\n",[74,118778,118779,118781,118783,118785,118787,118789,118791],{"class":76,"line":14204},[74,118780,19031],{"class":80},[74,118782,114078],{"class":134},[74,118784,85],{"class":84},[74,118786,618],{"class":80},[74,118788,115877],{"class":84},[74,118790,618],{"class":80},[74,118792,116340],{"class":84},[74,118794,118795],{"class":76,"line":20883},[74,118796,2363],{"emptyLinePlaceholder":2362},[74,118798,118799,118801,118804,118807,118809,118812,118814,118816,118818,118820,118822,118825,118828,118830,118832,118834,118836],{"class":76,"line":20889},[74,118800,35082],{"class":80},[74,118802,118803],{"class":1925}," reset",[74,118805,118806],{"class":84},"(self, ",[74,118808,541],{"class":80},[74,118810,118811],{"class":84},", seed: ",[74,118813,88],{"class":134},[74,118815,29390],{"class":80},[74,118817,43214],{"class":134},[74,118819,17843],{"class":80},[74,118821,43214],{"class":134},[74,118823,118824],{"class":84},", options: ",[74,118826,118827],{"class":134},"dict",[74,118829,29390],{"class":80},[74,118831,43214],{"class":134},[74,118833,17843],{"class":80},[74,118835,43214],{"class":134},[74,118837,35067],{"class":84},[74,118839,118840,118842,118845,118848,118850],{"class":76,"line":20912},[74,118841,35098],{"class":134},[74,118843,118844],{"class":84},"().reset(",[74,118846,118847],{"class":9495},"seed",[74,118849,131],{"class":80},[74,118851,118852],{"class":84},"seed)\n",[74,118854,118855,118858,118860,118863,118865],{"class":76,"line":20918},[74,118856,118857],{"class":84},"        mujoco.mj_resetData(",[74,118859,35104],{"class":134},[74,118861,118862],{"class":84},".model, ",[74,118864,35104],{"class":134},[74,118866,118867],{"class":84},".data)\n",[74,118869,118870],{"class":76,"line":20941},[74,118871,2363],{"emptyLinePlaceholder":2362},[74,118873,118874,118876,118879,118881,118883,118886,118888,118890,118892,118894,118896,118898,118900,118902,118904,118906,118908],{"class":76,"line":20955},[74,118875,35126],{"class":134},[74,118877,118878],{"class":84},".data.qpos[:] ",[74,118880,131],{"class":80},[74,118882,43154],{"class":134},[74,118884,118885],{"class":84},".np_random.uniform(",[74,118887,118043],{"class":9495},[74,118889,118046],{"class":80},[74,118891,90491],{"class":134},[74,118893,16714],{"class":84},[74,118895,118053],{"class":9495},[74,118897,131],{"class":80},[74,118899,90491],{"class":134},[74,118901,16714],{"class":84},[74,118903,35777],{"class":9495},[74,118905,131],{"class":80},[74,118907,35104],{"class":134},[74,118909,118910],{"class":84},".model.nq)\n",[74,118912,118913,118915,118918,118920],{"class":76,"line":20975},[74,118914,35126],{"class":134},[74,118916,118917],{"class":84},".data.qvel[:] ",[74,118919,131],{"class":80},[74,118921,109042],{"class":134},[74,118923,118924,118927,118929,118931,118933],{"class":76,"line":20981},[74,118925,118926],{"class":84},"        mujoco.mj_forward(",[74,118928,35104],{"class":134},[74,118930,118862],{"class":84},[74,118932,35104],{"class":134},[74,118934,118867],{"class":84},[74,118936,118937],{"class":76,"line":20992},[74,118938,2363],{"emptyLinePlaceholder":2362},[74,118940,118941,118943,118945,118947],{"class":76,"line":21015},[74,118942,35126],{"class":134},[74,118944,117987],{"class":84},[74,118946,131],{"class":80},[74,118948,51614],{"class":134},[74,118950,118951,118953,118955],{"class":76,"line":21037},[74,118952,19031],{"class":80},[74,118954,43154],{"class":134},[74,118956,118957],{"class":84},"._get_obs(), {}\n",[74,118959,118960],{"class":76,"line":21042},[74,118961,2363],{"emptyLinePlaceholder":2362},[74,118963,118964,118966,118969],{"class":76,"line":21048},[74,118965,35082],{"class":80},[74,118967,118968],{"class":1925}," step",[74,118970,118971],{"class":84},"(self, action):\n",[74,118973,118974,118976,118978,118981,118983,118985],{"class":76,"line":21062},[74,118975,114503],{"class":84},[74,118977,131],{"class":80},[74,118979,118980],{"class":84}," np.asarray(action, ",[74,118982,97781],{"class":9495},[74,118984,131],{"class":80},[74,118986,118077],{"class":84},[74,118988,118989,118991,118993,118995,118997,119000,119002],{"class":76,"line":21075},[74,118990,114503],{"class":84},[74,118992,131],{"class":80},[74,118994,111728],{"class":84},[74,118996,35104],{"class":134},[74,118998,118999],{"class":84},".action_space.low, ",[74,119001,35104],{"class":134},[74,119003,119004],{"class":84},".action_space.high)\n",[74,119006,119007],{"class":76,"line":21080},[74,119008,2363],{"emptyLinePlaceholder":2362},[74,119010,119011,119013,119016,119018],{"class":76,"line":21094},[74,119012,35126],{"class":134},[74,119014,119015],{"class":84},".data.ctrl[:] ",[74,119017,131],{"class":80},[74,119019,111751],{"class":84},[74,119021,119022,119024,119026,119028,119030,119032,119034],{"class":76,"line":21099},[74,119023,3366],{"class":80},[74,119025,105782],{"class":84},[74,119027,30324],{"class":80},[74,119029,36724],{"class":134},[74,119031,85],{"class":84},[74,119033,35104],{"class":134},[74,119035,119036],{"class":84},".frame_skip):\n",[74,119038,119039,119042,119044,119046,119048],{"class":76,"line":21105},[74,119040,119041],{"class":84},"            mujoco.mj_step(",[74,119043,35104],{"class":134},[74,119045,118862],{"class":84},[74,119047,35104],{"class":134},[74,119049,118867],{"class":84},[74,119051,119052],{"class":76,"line":21110},[74,119053,2363],{"emptyLinePlaceholder":2362},[74,119055,119056,119058,119060,119062],{"class":76,"line":21124},[74,119057,35126],{"class":134},[74,119059,117987],{"class":84},[74,119061,13756],{"class":80},[74,119063,59980],{"class":134},[74,119065,119066],{"class":76,"line":21129},[74,119067,2363],{"emptyLinePlaceholder":2362},[74,119069,119070,119072,119074,119076],{"class":76,"line":21134},[74,119071,114463],{"class":84},[74,119073,131],{"class":80},[74,119075,43154],{"class":134},[74,119077,119078],{"class":84},"._get_obs()\n",[74,119080,119081,119083,119085,119087],{"class":76,"line":21148},[74,119082,114568],{"class":84},[74,119084,131],{"class":80},[74,119086,43154],{"class":134},[74,119088,119089],{"class":84},"._get_reward()\n",[74,119091,119092],{"class":76,"line":21160},[74,119093,2363],{"emptyLinePlaceholder":2362},[74,119095,119096,119098,119100,119102,119104,119106],{"class":76,"line":21165},[74,119097,116418],{"class":84},[74,119099,131],{"class":80},[74,119101,43154],{"class":134},[74,119103,118651],{"class":84},[74,119105,35104],{"class":134},[74,119107,118729],{"class":84},[74,119109,119110,119112,119114,119116,119118,119120],{"class":76,"line":21178},[74,119111,116431],{"class":84},[74,119113,131],{"class":80},[74,119115,43154],{"class":134},[74,119117,118651],{"class":84},[74,119119,35104],{"class":134},[74,119121,118744],{"class":84},[74,119123,119124,119126,119128,119130,119133,119135],{"class":76,"line":21183},[74,119125,118749],{"class":84},[74,119127,131],{"class":80},[74,119129,114078],{"class":134},[74,119131,119132],{"class":84},"(np.linalg.norm(tip ",[74,119134,618],{"class":80},[74,119136,119137],{"class":84}," target))\n",[74,119139,119140],{"class":76,"line":21188},[74,119141,2363],{"emptyLinePlaceholder":2362},[74,119143,119144,119147,119149,119151,119153],{"class":76,"line":21193},[74,119145,119146],{"class":84},"        terminated ",[74,119148,131],{"class":80},[74,119150,117970],{"class":84},[74,119152,996],{"class":80},[74,119154,117975],{"class":134},[74,119156,119157,119160,119162,119164,119166,119168,119170],{"class":76,"line":21206},[74,119158,119159],{"class":84},"        truncated ",[74,119161,131],{"class":80},[74,119163,43154],{"class":134},[74,119165,117987],{"class":84},[74,119167,1672],{"class":80},[74,119169,43154],{"class":134},[74,119171,117994],{"class":84},[74,119173,119174,119177,119179,119181,119184],{"class":76,"line":21211},[74,119175,119176],{"class":84},"        info ",[74,119178,131],{"class":80},[74,119180,4411],{"class":84},[74,119182,119183],{"class":190},"\"distance\"",[74,119185,119186],{"class":84},": dist}\n",[74,119188,119189,119191],{"class":76,"line":36914},[74,119190,19031],{"class":80},[74,119192,119193],{"class":84}," obs, reward, terminated, truncated, info\n",[74,119195,119196],{"class":76,"line":36920},[74,119197,2363],{"emptyLinePlaceholder":2362},[74,119199,119200],{"class":76,"line":36926},[74,119201,2363],{"emptyLinePlaceholder":2362},[74,119203,119204,119206,119208,119210,119212],{"class":76,"line":36932},[74,119205,36228],{"class":80},[74,119207,1935],{"class":1925},[74,119209,105679],{"class":84},[74,119211,99967],{"class":134},[74,119213,3702],{"class":84},[74,119215,119216,119219,119221],{"class":76,"line":36938},[74,119217,119218],{"class":84},"    env ",[74,119220,131],{"class":80},[74,119222,119223],{"class":84}," ReacherEnv()\n",[74,119225,119226,119229,119231,119234,119236,119238,119240],{"class":76,"line":36949},[74,119227,119228],{"class":84},"    obs, info ",[74,119230,131],{"class":80},[74,119232,119233],{"class":84}," env.reset(",[74,119235,118847],{"class":9495},[74,119237,131],{"class":80},[74,119239,277],{"class":134},[74,119241,91],{"class":84},[74,119243,119244,119246,119248,119251],{"class":76,"line":36955},[74,119245,35580],{"class":134},[74,119247,85],{"class":84},[74,119249,119250],{"class":190},"\"initial obs shape:\"",[74,119252,119253],{"class":84},", obs.shape)\n",[74,119255,119256,119258,119260,119263],{"class":76,"line":36975},[74,119257,35580],{"class":134},[74,119259,85],{"class":84},[74,119261,119262],{"class":190},"\"initial info:\"",[74,119264,119265],{"class":84},", info)\n",[74,119267,119268],{"class":76,"line":36981},[74,119269,2363],{"emptyLinePlaceholder":2362},[74,119271,119272,119274,119276],{"class":76,"line":36992},[74,119273,114434],{"class":84},[74,119275,131],{"class":80},[74,119277,109042],{"class":134},[74,119279,119280,119282,119284,119286,119288,119290,119292],{"class":76,"line":36998},[74,119281,3164],{"class":80},[74,119283,35897],{"class":84},[74,119285,30324],{"class":80},[74,119287,36724],{"class":134},[74,119289,85],{"class":84},[74,119291,786],{"class":134},[74,119293,35067],{"class":84},[74,119295,119296,119298,119300],{"class":76,"line":37004},[74,119297,114503],{"class":84},[74,119299,131],{"class":80},[74,119301,119302],{"class":84}," env.action_space.sample()\n",[74,119304,119305,119308,119310],{"class":76,"line":37010},[74,119306,119307],{"class":84},"        obs, reward, terminated, truncated, info ",[74,119309,131],{"class":80},[74,119311,117696],{"class":84},[74,119313,119314,119316,119318],{"class":76,"line":37016},[74,119315,114578],{"class":84},[74,119317,13756],{"class":80},[74,119319,114583],{"class":84},[74,119321,119322,119324,119326,119328,119330,119333,119335,119337,119340,119342,119344,119347,119349,119351,119354,119356,119358,119360],{"class":76,"line":37022},[74,119323,36732],{"class":134},[74,119325,85],{"class":84},[74,119327,114612],{"class":190},[74,119329,114615],{"class":84},[74,119331,119332],{"class":190},"\"reward:\"",[74,119334,16714],{"class":84},[74,119336,36299],{"class":134},[74,119338,119339],{"class":84},"(reward, ",[74,119341,157],{"class":134},[74,119343,114626],{"class":84},[74,119345,119346],{"class":190},"\"distance:\"",[74,119348,16714],{"class":84},[74,119350,36299],{"class":134},[74,119352,119353],{"class":84},"(info[",[74,119355,119183],{"class":190},[74,119357,116483],{"class":84},[74,119359,157],{"class":134},[74,119361,34778],{"class":84},[74,119363,119364,119366,119369,119372],{"class":76,"line":37028},[74,119365,2460],{"class":80},[74,119367,119368],{"class":84}," terminated ",[74,119370,119371],{"class":80},"or",[74,119373,119374],{"class":84}," truncated:\n",[74,119376,119377],{"class":76,"line":37034},[74,119378,119379],{"class":80},"            break\n",[74,119381,119382],{"class":76,"line":37054},[74,119383,2363],{"emptyLinePlaceholder":2362},[74,119385,119386,119388,119390,119392,119394,119396,119398,119400],{"class":76,"line":37060},[74,119387,35580],{"class":134},[74,119389,85],{"class":84},[74,119391,114657],{"class":190},[74,119393,16714],{"class":84},[74,119395,36299],{"class":134},[74,119397,114664],{"class":84},[74,119399,157],{"class":134},[74,119401,34778],{"class":84},[74,119403,119404],{"class":76,"line":37076},[74,119405,2363],{"emptyLinePlaceholder":2362},[74,119407,119408],{"class":76,"line":37082},[74,119409,2363],{"emptyLinePlaceholder":2362},[74,119411,119412,119414,119416,119418,119420],{"class":76,"line":37096},[74,119413,1493],{"class":80},[74,119415,35501],{"class":134},[74,119417,105840],{"class":80},[74,119419,105843],{"class":190},[74,119421,3702],{"class":84},[74,119423,119424],{"class":76,"line":37102},[74,119425,105850],{"class":84},[19,119427,107851],{},[64,119429,119431],{"className":28102,"code":119430,"language":28104,"meta":69,"style":69},"touch ch8_gym_env.py\n",[71,119432,119433],{"__ignoreMap":69},[74,119434,119435,119437],{"class":76,"line":77},[74,119436,105564],{"class":1925},[74,119438,119439],{"class":190}," ch8_gym_env.py\n",[19,119441,114725],{},[64,119443,119445],{"className":28102,"code":119444,"language":28104,"meta":69,"style":69},"python ch8_gym_env.py\n",[71,119446,119447],{"__ignoreMap":69},[74,119448,119449,119451],{"class":76,"line":77},[74,119450,34661],{"class":1925},[74,119452,119439],{"class":190},[44,119454,105853],{"id":105853},[19,119456,119457],{},"继承 Gymnasium 环境：",[64,119459,119461],{"className":34659,"code":119460,"language":34661,"meta":69,"style":69},"class ReacherEnv(gym.Env):\n",[71,119462,119463],{"__ignoreMap":69},[74,119464,119465,119467,119469,119471,119473,119475,119477],{"class":76,"line":77},[74,119466,18973],{"class":80},[74,119468,118338],{"class":1925},[74,119470,85],{"class":84},[74,119472,117821],{"class":1925},[74,119474,644],{"class":84},[74,119476,118347],{"class":1925},[74,119478,35067],{"class":84},[19,119480,119481],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,119483,119484],{},"初始化模型：",[64,119486,119488],{"className":34659,"code":119487,"language":34661,"meta":69,"style":69},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[71,119489,119490,119504],{"__ignoreMap":69},[74,119491,119492,119494,119496,119498,119500,119502],{"class":76,"line":77},[74,119493,35104],{"class":134},[74,119495,118398],{"class":84},[74,119497,131],{"class":80},[74,119499,105693],{"class":84},[74,119501,105595],{"class":134},[74,119503,91],{"class":84},[74,119505,119506,119508,119510,119512,119514,119516],{"class":76,"line":94},[74,119507,35104],{"class":134},[74,119509,118413],{"class":84},[74,119511,131],{"class":80},[74,119513,118418],{"class":84},[74,119515,35104],{"class":134},[74,119517,118423],{"class":84},[19,119519,119520,119521,119523],{},"这和前面章节一样，只是现在放到了类的 ",[71,119522,35110],{}," 里。",[19,119525,119526],{},"缓存 site ID：",[64,119528,119530],{"className":34659,"code":119529,"language":34661,"meta":69,"style":69},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[71,119531,119532,119546],{"__ignoreMap":69},[74,119533,119534,119536,119538,119540,119542,119544],{"class":76,"line":77},[74,119535,35104],{"class":134},[74,119537,118434],{"class":84},[74,119539,131],{"class":80},[74,119541,118439],{"class":84},[74,119543,93835],{"class":134},[74,119545,91],{"class":84},[74,119547,119548,119550,119552,119554,119556,119558],{"class":76,"line":94},[74,119549,35104],{"class":134},[74,119551,118455],{"class":84},[74,119553,131],{"class":80},[74,119555,118439],{"class":84},[74,119557,93835],{"class":134},[74,119559,91],{"class":84},[19,119561,119562],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,119564,119565],{},"reset：",[64,119567,119569],{"className":34659,"code":119568,"language":34661,"meta":69,"style":69},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[71,119570,119571],{"__ignoreMap":69},[74,119572,119573,119575,119577,119579,119581,119583,119585,119587,119589,119591,119593,119595,119597,119599,119601,119603,119605],{"class":76,"line":77},[74,119574,36228],{"class":80},[74,119576,118803],{"class":1925},[74,119578,118806],{"class":84},[74,119580,541],{"class":80},[74,119582,118811],{"class":84},[74,119584,88],{"class":134},[74,119586,29390],{"class":80},[74,119588,43214],{"class":134},[74,119590,17843],{"class":80},[74,119592,43214],{"class":134},[74,119594,118824],{"class":84},[74,119596,118827],{"class":134},[74,119598,29390],{"class":80},[74,119600,43214],{"class":134},[74,119602,17843],{"class":80},[74,119604,43214],{"class":134},[74,119606,35067],{"class":84},[19,119608,119609,119611],{},[71,119610,74337],{}," 做四件事：",[27,119613,119614,119617,119620,119623],{},[30,119615,119616],{},"设置随机种子。",[30,119618,119619],{},"重置 MuJoCo data。",[30,119621,119622],{},"随机初始化关节角。",[30,119624,119625],{},"返回初始观测和 info。",[19,119627,119628],{},"step：",[64,119630,119632],{"className":34659,"code":119631,"language":34661,"meta":69,"style":69},"def step(self, action):\n",[71,119633,119634],{"__ignoreMap":69},[74,119635,119636,119638,119640],{"class":76,"line":77},[74,119637,36228],{"class":80},[74,119639,118968],{"class":1925},[74,119641,118971],{"class":84},[19,119643,119644,119646],{},[71,119645,111415],{}," 做六件事：",[27,119648,119649,119652,119658,119661,119664,119667],{},[30,119650,119651],{},"检查并裁剪 action。",[30,119653,119654,119655,32666],{},"写入 ",[71,119656,119657],{},"self.data.ctrl",[30,119659,119660],{},"连续推进若干个 MuJoCo 物理步。",[30,119662,119663],{},"计算新观测。",[30,119665,119666],{},"计算奖励和结束条件。",[30,119668,119669],{},"返回 Gymnasium 标准五元组。",[44,119671,105989],{"id":105989},[64,119673,119675],{"className":34659,"code":119674,"language":34661,"meta":69,"style":69},"import gymnasium as gym\n",[71,119676,119677],{"__ignoreMap":69},[74,119678,119679,119681,119683,119685],{"class":76,"line":77},[74,119680,34673],{"class":80},[74,119682,118176],{"class":84},[74,119684,35664],{"class":80},[74,119686,118181],{"class":84},[19,119688,119689,119690,119692,119693,119696],{},"导入 Gymnasium，并起别名 ",[71,119691,117821],{},"。后面写 ",[71,119694,119695],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[64,119698,119700],{"className":34659,"code":119699,"language":34661,"meta":69,"style":69},"from gymnasium import spaces\n",[71,119701,119702],{"__ignoreMap":69},[74,119703,119704,119706,119708,119710],{"class":76,"line":77},[74,119705,35018],{"class":80},[74,119707,118176],{"class":84},[74,119709,34673],{"class":80},[74,119711,118208],{"class":84},[19,119713,119714,119715,119718],{},"导入空间定义工具。",[71,119716,119717],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[64,119720,119721],{"className":34659,"code":119460,"language":34661,"meta":69,"style":69},[71,119722,119723],{"__ignoreMap":69},[74,119724,119725,119727,119729,119731,119733,119735,119737],{"class":76,"line":77},[74,119726,18973],{"class":80},[74,119728,118338],{"class":1925},[74,119730,85],{"class":84},[74,119732,117821],{"class":1925},[74,119734,644],{"class":84},[74,119736,118347],{"class":1925},[74,119738,35067],{"class":84},[19,119740,119741,119742,119745,119746,119748,119749,105299,119751,119753],{},"定义一个类，名字叫 ",[71,119743,119744],{},"ReacherEnv","。括号里的 ",[71,119747,119695],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[71,119750,74337],{},[71,119752,111415],{}," 这两个核心方法。",[64,119755,119757],{"className":34659,"code":119756,"language":34661,"meta":69,"style":69},"metadata = {\"render_modes\": []}\n",[71,119758,119759],{"__ignoreMap":69},[74,119760,119761,119764,119766,119768,119770],{"class":76,"line":77},[74,119762,119763],{"class":84},"metadata ",[74,119765,131],{"class":80},[74,119767,4411],{"class":84},[74,119769,118361],{"class":190},[74,119771,118364],{"class":84},[19,119773,119774],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[64,119776,119778],{"className":34659,"code":119777,"language":34661,"meta":69,"style":69},"def __init__(self) -> None:\n",[71,119779,119780],{"__ignoreMap":69},[74,119781,119782,119784,119786,119788,119790],{"class":76,"line":77},[74,119783,36228],{"class":80},[74,119785,35085],{"class":134},[74,119787,118377],{"class":84},[74,119789,99967],{"class":134},[74,119791,3702],{"class":84},[19,119793,119794,119796,119797,32666],{},[71,119795,35110],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[71,119798,119799],{},"env = ReacherEnv()",[64,119801,119803],{"className":34659,"code":119802,"language":34661,"meta":69,"style":69},"super().__init__()\n",[71,119804,119805],{"__ignoreMap":69},[74,119806,119807,119810,119812,119814],{"class":76,"line":77},[74,119808,119809],{"class":134},"super",[74,119811,21540],{"class":84},[74,119813,35110],{"class":134},[74,119815,1938],{"class":84},[19,119817,119818,119819,119821],{},"调用父类 ",[71,119820,119695],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[64,119823,119824],{"className":34659,"code":119487,"language":34661,"meta":69,"style":69},[71,119825,119826,119840],{"__ignoreMap":69},[74,119827,119828,119830,119832,119834,119836,119838],{"class":76,"line":77},[74,119829,35104],{"class":134},[74,119831,118398],{"class":84},[74,119833,131],{"class":80},[74,119835,105693],{"class":84},[74,119837,105595],{"class":134},[74,119839,91],{"class":84},[74,119841,119842,119844,119846,119848,119850,119852],{"class":76,"line":94},[74,119843,35104],{"class":134},[74,119845,118413],{"class":84},[74,119847,131],{"class":80},[74,119849,118418],{"class":84},[74,119851,35104],{"class":134},[74,119853,118423],{"class":84},[19,119855,119856,119857,119859,119860,105299,119863,119866],{},"把 MuJoCo 模型和状态保存到 ",[71,119858,35104],{}," 上。",[71,119861,119862],{},"self.model",[71,119864,119865],{},"self.data"," 表示这个环境对象自己的模型和状态。",[64,119868,119869],{"className":34659,"code":119529,"language":34661,"meta":69,"style":69},[71,119870,119871,119885],{"__ignoreMap":69},[74,119872,119873,119875,119877,119879,119881,119883],{"class":76,"line":77},[74,119874,35104],{"class":134},[74,119876,118434],{"class":84},[74,119878,131],{"class":80},[74,119880,118439],{"class":84},[74,119882,93835],{"class":134},[74,119884,91],{"class":84},[74,119886,119887,119889,119891,119893,119895,119897],{"class":76,"line":94},[74,119888,35104],{"class":134},[74,119890,118455],{"class":84},[74,119892,131],{"class":80},[74,119894,118439],{"class":84},[74,119896,93835],{"class":134},[74,119898,91],{"class":84},[19,119900,119901,119902,105299,119905,119908],{},"提前查好 tip 和 target 的 site ID。这样 ",[71,119903,119904],{},"_get_obs",[71,119906,119907],{},"_get_reward"," 里就不用每次按名字查找。",[64,119910,119912],{"className":34659,"code":119911,"language":34661,"meta":69,"style":69},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[71,119913,119914,119924,119934],{"__ignoreMap":69},[74,119915,119916,119918,119920,119922],{"class":76,"line":77},[74,119917,35104],{"class":134},[74,119919,118148],{"class":84},[74,119921,131],{"class":80},[74,119923,58708],{"class":134},[74,119925,119926,119928,119930,119932],{"class":76,"line":94},[74,119927,35104],{"class":134},[74,119929,118527],{"class":84},[74,119931,131],{"class":80},[74,119933,118532],{"class":134},[74,119935,119936,119938,119940,119942],{"class":76,"line":1141},[74,119937,35104],{"class":134},[74,119939,117987],{"class":84},[74,119941,131],{"class":80},[74,119943,51614],{"class":134},[19,119945,119946,119949,119950,119953,119954,119957],{},[71,119947,119948],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[71,119951,119952],{},"max_steps"," 是一个 episode 最多运行多少步。",[71,119955,119956],{},"steps"," 记录当前 episode 已经走了多少步。",[64,119959,119960],{"className":34659,"code":118026,"language":34661,"meta":69,"style":69},[71,119961,119962],{"__ignoreMap":69},[74,119963,119964,119966,119968,119970,119972,119974,119976,119978,119980,119982,119984,119986,119988,119990,119992,119994,119996,119998,120000,120002],{"class":76,"line":77},[74,119965,35104],{"class":134},[74,119967,118035],{"class":84},[74,119969,131],{"class":80},[74,119971,118040],{"class":84},[74,119973,118043],{"class":9495},[74,119975,118046],{"class":80},[74,119977,106684],{"class":134},[74,119979,16714],{"class":84},[74,119981,118053],{"class":9495},[74,119983,131],{"class":80},[74,119985,106684],{"class":134},[74,119987,16714],{"class":84},[74,119989,100244],{"class":9495},[74,119991,131],{"class":80},[74,119993,85],{"class":84},[74,119995,163],{"class":134},[74,119997,118070],{"class":84},[74,119999,97781],{"class":9495},[74,120001,131],{"class":80},[74,120003,118077],{"class":84},[19,120005,120006,120007,120010,120011,105299,120014,120017],{},"定义动作空间。",[71,120008,120009],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[71,120012,120013],{},"low=-1.0",[71,120015,120016],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[64,120019,120020],{"className":34659,"code":118087,"language":34661,"meta":69,"style":69},[71,120021,120022],{"__ignoreMap":69},[74,120023,120024,120026,120028,120030,120032,120034,120036,120038,120040,120042,120044,120046,120048,120050,120052,120054,120056,120058],{"class":76,"line":77},[74,120025,35104],{"class":134},[74,120027,118096],{"class":84},[74,120029,131],{"class":80},[74,120031,118040],{"class":84},[74,120033,118043],{"class":9495},[74,120035,118046],{"class":80},[74,120037,118107],{"class":84},[74,120039,118053],{"class":9495},[74,120041,131],{"class":80},[74,120043,118107],{"class":84},[74,120045,100244],{"class":9495},[74,120047,131],{"class":80},[74,120049,85],{"class":84},[74,120051,532],{"class":134},[74,120053,118070],{"class":84},[74,120055,97781],{"class":9495},[74,120057,131],{"class":80},[74,120059,118077],{"class":84},[19,120061,120062,120063,120066,120067,120070],{},"定义观测空间。",[71,120064,120065],{},"shape=(10,)"," 表示观测是 10 个数。",[71,120068,120069],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[64,120072,120074],{"className":34659,"code":120073,"language":34661,"meta":69,"style":69},"def _get_obs(self) -> np.ndarray:\n",[71,120075,120076],{"__ignoreMap":69},[74,120077,120078,120080,120082],{"class":76,"line":77},[74,120079,36228],{"class":80},[74,120081,118637],{"class":1925},[74,120083,118640],{"class":84},[19,120085,120086,120087,120089],{},"定义内部函数，用来生成观测。函数名前面的 ",[71,120088,1078],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[64,120091,120093],{"className":34659,"code":120092,"language":34661,"meta":69,"style":69},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[71,120094,120095,120109],{"__ignoreMap":69},[74,120096,120097,120099,120101,120103,120105,120107],{"class":76,"line":77},[74,120098,115849],{"class":84},[74,120100,131],{"class":80},[74,120102,43154],{"class":134},[74,120104,118651],{"class":84},[74,120106,35104],{"class":134},[74,120108,118656],{"class":84},[74,120110,120111,120113,120115,120117,120119,120121],{"class":76,"line":94},[74,120112,115859],{"class":84},[74,120114,131],{"class":80},[74,120116,43154],{"class":134},[74,120118,118651],{"class":84},[74,120120,35104],{"class":134},[74,120122,118671],{"class":84},[19,120124,120125],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[64,120127,120129],{"className":34659,"code":120128,"language":34661,"meta":69,"style":69},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[71,120130,120131,120147],{"__ignoreMap":69},[74,120132,120133,120135,120137,120139,120141,120143,120145],{"class":76,"line":77},[74,120134,115135],{"class":84},[74,120136,131],{"class":80},[74,120138,118680],{"class":84},[74,120140,35104],{"class":134},[74,120142,118685],{"class":84},[74,120144,35104],{"class":134},[74,120146,118690],{"class":84},[74,120148,120149,120151],{"class":76,"line":94},[74,120150,21325],{"class":80},[74,120152,118697],{"class":84},[19,120154,120155,120156,120159,120160,120162],{},"拼接观测，并转换成 ",[71,120157,120158],{},"float32","。很多强化学习库默认使用 ",[71,120161,120158],{},"，所以这里主动转换。",[64,120164,120165],{"className":34659,"code":119568,"language":34661,"meta":69,"style":69},[71,120166,120167],{"__ignoreMap":69},[74,120168,120169,120171,120173,120175,120177,120179,120181,120183,120185,120187,120189,120191,120193,120195,120197,120199,120201],{"class":76,"line":77},[74,120170,36228],{"class":80},[74,120172,118803],{"class":1925},[74,120174,118806],{"class":84},[74,120176,541],{"class":80},[74,120178,118811],{"class":84},[74,120180,88],{"class":134},[74,120182,29390],{"class":80},[74,120184,43214],{"class":134},[74,120186,17843],{"class":80},[74,120188,43214],{"class":134},[74,120190,118824],{"class":84},[74,120192,118827],{"class":134},[74,120194,29390],{"class":80},[74,120196,43214],{"class":134},[74,120198,17843],{"class":80},[74,120200,43214],{"class":134},[74,120202,35067],{"class":84},[19,120204,120205,120206,120208,120209,120212],{},"定义 reset。",[71,120207,118847],{}," 用来控制随机数，保证实验可以复现。",[71,120210,120211],{},"options"," 用来接收额外配置，本章暂时不用。",[64,120214,120216],{"className":34659,"code":120215,"language":34661,"meta":69,"style":69},"super().reset(seed=seed)\n",[71,120217,120218],{"__ignoreMap":69},[74,120219,120220,120222,120224,120226,120228],{"class":76,"line":77},[74,120221,119809],{"class":134},[74,120223,118844],{"class":84},[74,120225,118847],{"class":9495},[74,120227,131],{"class":80},[74,120229,118852],{"class":84},[19,120231,120232,120233,120236],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[71,120234,120235],{},"self.np_random"," 生成可复现的随机数。",[64,120238,120240],{"className":34659,"code":120239,"language":34661,"meta":69,"style":69},"mujoco.mj_resetData(self.model, self.data)\n",[71,120241,120242],{"__ignoreMap":69},[74,120243,120244,120247,120249,120251,120253],{"class":76,"line":77},[74,120245,120246],{"class":84},"mujoco.mj_resetData(",[74,120248,35104],{"class":134},[74,120250,118862],{"class":84},[74,120252,35104],{"class":134},[74,120254,118867],{"class":84},[19,120256,120257],{},"把 MuJoCo 状态重置到默认状态。",[64,120259,120261],{"className":34659,"code":120260,"language":34661,"meta":69,"style":69},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[71,120262,120263],{"__ignoreMap":69},[74,120264,120265,120267,120269,120271,120273,120275,120277,120279,120281,120283,120285,120287,120289,120291,120293,120295,120297],{"class":76,"line":77},[74,120266,35104],{"class":134},[74,120268,118878],{"class":84},[74,120270,131],{"class":80},[74,120272,43154],{"class":134},[74,120274,118885],{"class":84},[74,120276,118043],{"class":9495},[74,120278,118046],{"class":80},[74,120280,90491],{"class":134},[74,120282,16714],{"class":84},[74,120284,118053],{"class":9495},[74,120286,131],{"class":80},[74,120288,90491],{"class":134},[74,120290,16714],{"class":84},[74,120292,35777],{"class":9495},[74,120294,131],{"class":80},[74,120296,35104],{"class":134},[74,120298,118910],{"class":84},[19,120300,119622,120301,120304,120305,120308,120309,120311],{},[71,120302,120303],{},"[:]"," 表示修改整个数组。",[71,120306,120307],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[71,120310,106431],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[64,120313,120315],{"className":34659,"code":120314,"language":34661,"meta":69,"style":69},"self.data.qvel[:] = 0.0\n",[71,120316,120317],{"__ignoreMap":69},[74,120318,120319,120321,120323,120325],{"class":76,"line":77},[74,120320,35104],{"class":134},[74,120322,118917],{"class":84},[74,120324,131],{"class":80},[74,120326,109042],{"class":134},[19,120328,120329],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[64,120331,120333],{"className":34659,"code":120332,"language":34661,"meta":69,"style":69},"self.steps = 0\nreturn self._get_obs(), {}\n",[71,120334,120335,120345],{"__ignoreMap":69},[74,120336,120337,120339,120341,120343],{"class":76,"line":77},[74,120338,35104],{"class":134},[74,120340,117987],{"class":84},[74,120342,131],{"class":80},[74,120344,51614],{"class":134},[74,120346,120347,120349,120351],{"class":76,"line":94},[74,120348,21325],{"class":80},[74,120350,43154],{"class":134},[74,120352,118957],{"class":84},[19,120354,120355],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[64,120357,120358],{"className":34659,"code":119631,"language":34661,"meta":69,"style":69},[71,120359,120360],{"__ignoreMap":69},[74,120361,120362,120364,120366],{"class":76,"line":77},[74,120363,36228],{"class":80},[74,120365,118968],{"class":1925},[74,120367,118971],{"class":84},[19,120369,120370],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[64,120372,120374],{"className":34659,"code":120373,"language":34661,"meta":69,"style":69},"action = np.asarray(action, dtype=np.float32)\n",[71,120375,120376],{"__ignoreMap":69},[74,120377,120378,120380,120382,120384,120386,120388],{"class":76,"line":77},[74,120379,111723],{"class":84},[74,120381,131],{"class":80},[74,120383,118980],{"class":84},[74,120385,97781],{"class":9495},[74,120387,131],{"class":80},[74,120389,118077],{"class":84},[19,120391,120392,120393,32666],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[71,120394,120158],{},[64,120396,120398],{"className":34659,"code":120397,"language":34661,"meta":69,"style":69},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[71,120399,120400],{"__ignoreMap":69},[74,120401,120402,120404,120406,120408,120410,120412,120414],{"class":76,"line":77},[74,120403,111723],{"class":84},[74,120405,131],{"class":80},[74,120407,111728],{"class":84},[74,120409,35104],{"class":134},[74,120411,118999],{"class":84},[74,120413,35104],{"class":134},[74,120415,119004],{"class":84},[19,120417,120418],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[64,120420,120422],{"className":34659,"code":120421,"language":34661,"meta":69,"style":69},"self.data.ctrl[:] = action\n",[71,120423,120424],{"__ignoreMap":69},[74,120425,120426,120428,120430,120432],{"class":76,"line":77},[74,120427,35104],{"class":134},[74,120429,119015],{"class":84},[74,120431,131],{"class":80},[74,120433,111751],{"class":84},[19,120435,120436],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[64,120438,120440],{"className":34659,"code":120439,"language":34661,"meta":69,"style":69},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[71,120441,120442,120458],{"__ignoreMap":69},[74,120443,120444,120446,120448,120450,120452,120454,120456],{"class":76,"line":77},[74,120445,2988],{"class":80},[74,120447,105782],{"class":84},[74,120449,30324],{"class":80},[74,120451,36724],{"class":134},[74,120453,85],{"class":84},[74,120455,35104],{"class":134},[74,120457,119036],{"class":84},[74,120459,120460,120463,120465,120467,120469],{"class":76,"line":94},[74,120461,120462],{"class":84},"    mujoco.mj_step(",[74,120464,35104],{"class":134},[74,120466,118862],{"class":84},[74,120468,35104],{"class":134},[74,120470,118867],{"class":84},[19,120472,120473,120474,120477,120478,120480,120481,32666],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[71,120475,120476],{},"frame_skip=5","，所以外部调用一次 ",[71,120479,118158],{},"，内部实际执行 5 次 ",[71,120482,105496],{},[64,120484,120486],{"className":34659,"code":120485,"language":34661,"meta":69,"style":69},"self.steps += 1\n",[71,120487,120488],{"__ignoreMap":69},[74,120489,120490,120492,120494,120496],{"class":76,"line":77},[74,120491,35104],{"class":134},[74,120493,117987],{"class":84},[74,120495,13756],{"class":80},[74,120497,59980],{"class":134},[19,120499,120500],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[64,120502,120504],{"className":34659,"code":120503,"language":34661,"meta":69,"style":69},"obs = self._get_obs()\nreward = self._get_reward()\n",[71,120505,120506,120516],{"__ignoreMap":69},[74,120507,120508,120510,120512,120514],{"class":76,"line":77},[74,120509,115135],{"class":84},[74,120511,131],{"class":80},[74,120513,43154],{"class":134},[74,120515,119078],{"class":84},[74,120517,120518,120520,120522,120524],{"class":76,"line":94},[74,120519,115286],{"class":84},[74,120521,131],{"class":80},[74,120523,43154],{"class":134},[74,120525,119089],{"class":84},[19,120527,120528],{},"计算新的观测和奖励。",[64,120530,120532],{"className":34659,"code":120531,"language":34661,"meta":69,"style":69},"dist = float(np.linalg.norm(tip - target))\n",[71,120533,120534],{"__ignoreMap":69},[74,120535,120536,120538,120540,120542,120544,120546],{"class":76,"line":77},[74,120537,115877],{"class":84},[74,120539,131],{"class":80},[74,120541,114078],{"class":134},[74,120543,119132],{"class":84},[74,120545,618],{"class":80},[74,120547,119137],{"class":84},[19,120549,120550],{},"计算末端到目标的距离，并转换成 Python float。",[64,120552,120553],{"className":34659,"code":117958,"language":34661,"meta":69,"style":69},[71,120554,120555,120567],{"__ignoreMap":69},[74,120556,120557,120559,120561,120563,120565],{"class":76,"line":77},[74,120558,117965],{"class":84},[74,120560,131],{"class":80},[74,120562,117970],{"class":84},[74,120564,996],{"class":80},[74,120566,117975],{"class":134},[74,120568,120569,120571,120573,120575,120577,120579,120581],{"class":76,"line":94},[74,120570,117980],{"class":84},[74,120572,131],{"class":80},[74,120574,43154],{"class":134},[74,120576,117987],{"class":84},[74,120578,1672],{"class":80},[74,120580,43154],{"class":134},[74,120582,117994],{"class":84},[19,120584,120585],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[64,120587,120589],{"className":34659,"code":120588,"language":34661,"meta":69,"style":69},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[71,120590,120591,120604],{"__ignoreMap":69},[74,120592,120593,120596,120598,120600,120602],{"class":76,"line":77},[74,120594,120595],{"class":84},"info ",[74,120597,131],{"class":80},[74,120599,4411],{"class":84},[74,120601,119183],{"class":190},[74,120603,119186],{"class":84},[74,120605,120606,120608],{"class":76,"line":94},[74,120607,21325],{"class":80},[74,120609,119193],{"class":84},[19,120611,120612,120615],{},[71,120613,120614],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[64,120617,120619],{"className":34659,"code":120618,"language":34661,"meta":69,"style":69},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[71,120620,120621,120630],{"__ignoreMap":69},[74,120622,120623,120626,120628],{"class":76,"line":77},[74,120624,120625],{"class":84},"env ",[74,120627,131],{"class":80},[74,120629,119223],{"class":84},[74,120631,120632,120634,120636,120638,120640,120642,120644],{"class":76,"line":94},[74,120633,117681],{"class":84},[74,120635,131],{"class":80},[74,120637,119233],{"class":84},[74,120639,118847],{"class":9495},[74,120641,131],{"class":80},[74,120643,277],{"class":134},[74,120645,91],{"class":84},[19,120647,120648,120649,120652],{},"创建环境并重置。",[71,120650,120651],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[64,120654,120656],{"className":34659,"code":120655,"language":34661,"meta":69,"style":69},"action = env.action_space.sample()\n",[71,120657,120658],{"__ignoreMap":69},[74,120659,120660,120662,120664],{"class":76,"line":77},[74,120661,111723],{"class":84},[74,120663,131],{"class":80},[74,120665,119302],{"class":84},[19,120667,120668],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,120670,106597],{"id":106596},[19,120672,109765],{},[64,120674,120677],{"className":120675,"code":120676,"language":9466,"meta":69},[9464],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[71,120678,120676],{"__ignoreMap":69},[19,120680,120681],{},"这个环境已经具备强化学习环境的基本结构。",[19,120683,120684],{},"主函数里使用随机动作：",[64,120686,120687],{"className":34659,"code":120655,"language":34661,"meta":69,"style":69},[71,120688,120689],{"__ignoreMap":69},[74,120690,120691,120693,120695],{"class":76,"line":77},[74,120692,111723],{"class":84},[74,120694,131],{"class":80},[74,120696,119302],{"class":84},[19,120698,120699],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,120701,106629],{"id":106628},[27,120703,120704,120707,120713,120722,120731,120740,120746],{},[30,120705,120706],{},"运行程序。",[30,120708,120709,120710,32666],{},"确认 ",[71,120711,120712],{},"obs.shape == (10,)",[30,120714,115462,120715,120718,120719,32666],{},[71,120716,120717],{},"env.action_space","，应类似 ",[71,120720,120721],{},"Box(-1.0, 1.0, (2,), float32)",[30,120723,109866,120724,120727,120728,32666],{},[71,120725,120726],{},"self.max_steps = 10","，确认环境会更快 ",[71,120729,120730],{},"truncated=True",[30,120732,106692,120733,106695,120736,120739],{},[71,120734,120735],{},"terminated = dist \u003C 0.05",[71,120737,120738],{},"dist \u003C 0.2","，观察是否更容易结束。",[30,120741,106692,120742,120745],{},[71,120743,120744],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[30,120747,120748,120749,120751,120752,120755],{},"在 ",[71,120750,120614],{}," 里加入 ",[71,120753,120754],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,120757,106734],{"id":106733},[44,120759,120761],{"id":120760},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,120763,120764,120765,120767],{},"Gymnasium 的 ",[71,120766,111415],{}," 返回 5 个值:",[64,120769,120771],{"className":34659,"code":120770,"language":34661,"meta":69,"style":69},"obs, reward, terminated, truncated, info\n",[71,120772,120773],{"__ignoreMap":69},[74,120774,120775],{"class":76,"line":77},[74,120776,120770],{"class":84},[19,120778,120779],{},"不是旧 Gym 的 4 个值。",[44,120781,120783,120786],{"id":120782},"datactrl-action-维度错误",[71,120784,120785],{},"data.ctrl[:] = action"," 维度错误",[19,120788,106804],{},[64,120790,120792],{"className":34659,"code":120791,"language":34661,"meta":69,"style":69},"print(self.model.nu)\nprint(action.shape)\n",[71,120793,120794,120805],{"__ignoreMap":69},[74,120795,120796,120798,120800,120802],{"class":76,"line":77},[74,120797,34696],{"class":134},[74,120799,85],{"class":84},[74,120801,35104],{"class":134},[74,120803,120804],{"class":84},".model.nu)\n",[74,120806,120807,120809],{"class":76,"line":94},[74,120808,34696],{"class":134},[74,120810,120811],{"class":84},"(action.shape)\n",[19,120813,120814],{},"两者必须匹配。",[44,120816,120818],{"id":120817},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,120820,106743],{},[64,120822,120824],{"className":34659,"code":120823,"language":34661,"meta":69,"style":69},"mujoco.mj_forward(self.model, self.data)\n",[71,120825,120826],{"__ignoreMap":69},[74,120827,120828,120831,120833,120835,120837],{"class":76,"line":77},[74,120829,120830],{"class":84},"mujoco.mj_forward(",[74,120832,35104],{"class":134},[74,120834,118862],{"class":84},[74,120836,35104],{"class":134},[74,120838,118867],{"class":84},[44,120840,120842,120844],{"id":120841},"observation_space-维度和-obs-不一致",[71,120843,117881],{}," 维度和 obs 不一致",[19,120846,106856],{},[64,120848,120850],{"className":34659,"code":120849,"language":34661,"meta":69,"style":69},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[71,120851,120852,120862,120869],{"__ignoreMap":69},[74,120853,120854,120856,120858,120860],{"class":76,"line":77},[74,120855,115135],{"class":84},[74,120857,131],{"class":80},[74,120859,43154],{"class":134},[74,120861,119078],{"class":84},[74,120863,120864,120866],{"class":76,"line":94},[74,120865,34696],{"class":134},[74,120867,120868],{"class":84},"(obs.shape)\n",[74,120870,120871,120873,120875,120877],{"class":76,"line":1141},[74,120872,34696],{"class":134},[74,120874,85],{"class":84},[74,120876,35104],{"class":134},[74,120878,120879],{"class":84},".observation_space.shape)\n",[19,120881,120882],{},"两者必须一致。本章观测是：",[64,120884,120887],{"className":120885,"code":120886,"language":9466,"meta":69},[9464],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[71,120888,120886],{"__ignoreMap":69},[44,120890,120892],{"id":120891},"action-超过范围","action 超过范围",[19,120894,120895],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[64,120897,120898],{"className":34659,"code":120397,"language":34661,"meta":69,"style":69},[71,120899,120900],{"__ignoreMap":69},[74,120901,120902,120904,120906,120908,120910,120912,120914],{"class":76,"line":77},[74,120903,111723],{"class":84},[74,120905,131],{"class":80},[74,120907,111728],{"class":84},[74,120909,35104],{"class":134},[74,120911,118999],{"class":84},[74,120913,35104],{"class":134},[74,120915,119004],{"class":84},[19,120917,120918,120919,32666],{},"这能避免无效动作直接写入 ",[71,120920,105357],{},[44,120922,120924],{"id":120923},"忘记返回-info","忘记返回 info",[19,120926,120764,120927,105299,120929,120931],{},[71,120928,74337],{},[71,120930,111415],{}," 都会返回 info：",[64,120933,120934],{"className":34659,"code":117674,"language":34661,"meta":69,"style":69},[71,120935,120936,120944],{"__ignoreMap":69},[74,120937,120938,120940,120942],{"class":76,"line":77},[74,120939,117681],{"class":84},[74,120941,131],{"class":80},[74,120943,117686],{"class":84},[74,120945,120946,120948,120950],{"class":76,"line":94},[74,120947,117691],{"class":84},[74,120949,131],{"class":80},[74,120951,117696],{"class":84},[19,120953,120954,120955,32666],{},"即使暂时没有额外信息，也返回 ",[71,120956,36740],{},[14,120958,120960],{"id":120959},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,120962,120963],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[27,120965,120966,120969,120972,120975,120978,120981],{},[30,120967,120968],{},"更稳定的 reward。",[30,120970,120971],{},"合理的 episode 长度。",[30,120973,120974],{},"可重复的随机目标采样。",[30,120976,120977],{},"render 接口。",[30,120979,120980],{},"环境注册代码。",[30,120982,120983],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,120985,120986],{},"如果只是自己写训练循环，最小形式是：",[64,120988,120990],{"className":34659,"code":120989,"language":34661,"meta":69,"style":69},"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",[71,120991,120992,121000,121016,121020,121036,121045,121054,121064],{"__ignoreMap":69},[74,120993,120994,120996,120998],{"class":76,"line":77},[74,120995,120625],{"class":84},[74,120997,131],{"class":80},[74,120999,119223],{"class":84},[74,121001,121002,121004,121006,121008,121010,121012,121014],{"class":76,"line":94},[74,121003,117681],{"class":84},[74,121005,131],{"class":80},[74,121007,119233],{"class":84},[74,121009,118847],{"class":9495},[74,121011,131],{"class":80},[74,121013,277],{"class":134},[74,121015,91],{"class":84},[74,121017,121018],{"class":76,"line":1141},[74,121019,2363],{"emptyLinePlaceholder":2362},[74,121021,121022,121024,121026,121028,121030,121032,121034],{"class":76,"line":1156},[74,121023,2988],{"class":80},[74,121025,105782],{"class":84},[74,121027,30324],{"class":80},[74,121029,36724],{"class":134},[74,121031,85],{"class":84},[74,121033,10689],{"class":134},[74,121035,35067],{"class":84},[74,121037,121038,121041,121043],{"class":76,"line":1162},[74,121039,121040],{"class":84},"    action ",[74,121042,131],{"class":80},[74,121044,119302],{"class":84},[74,121046,121047,121050,121052],{"class":76,"line":1176},[74,121048,121049],{"class":84},"    obs, reward, terminated, truncated, info ",[74,121051,131],{"class":80},[74,121053,117696],{"class":84},[74,121055,121056,121058,121060,121062],{"class":76,"line":1182},[74,121057,3064],{"class":80},[74,121059,119368],{"class":84},[74,121061,119371],{"class":80},[74,121063,119374],{"class":84},[74,121065,121066,121069,121071],{"class":76,"line":1273},[74,121067,121068],{"class":84},"        obs, info ",[74,121070,131],{"class":80},[74,121072,117686],{"class":84},[14,121074,121076],{"id":121075},"_9本章小结","9.本章小结",[19,121078,121079],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[64,121081,121084],{"className":121082,"code":121083,"language":9466,"meta":69},[9464],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[71,121085,121083],{"__ignoreMap":69},[19,121087,121088],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5090,121090,121091],{},"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":69,"searchDepth":94,"depth":94,"links":121093},[121094,121095,121096,121103,121107,121108,121109,121119,121120],{"id":104927,"depth":94,"text":104928},{"id":105050,"depth":94,"text":105051},{"id":105325,"depth":94,"text":105326,"children":121097},[121098,121100,121102],{"id":117905,"depth":1141,"text":121099},"terminated 和 truncated 的区别",{"id":118008,"depth":1141,"text":121101},"observation_space 和 action_space",{"id":118135,"depth":1141,"text":118136},{"id":105533,"depth":94,"text":105534,"children":121104},[121105,121106],{"id":105853,"depth":1141,"text":105853},{"id":105989,"depth":1141,"text":105989},{"id":106596,"depth":94,"text":106597},{"id":106628,"depth":94,"text":106629},{"id":106733,"depth":94,"text":106734,"children":121110},[121111,121112,121114,121115,121117,121118],{"id":120760,"depth":1141,"text":120761},{"id":120782,"depth":1141,"text":121113},"data.ctrl[:] = action 维度错误",{"id":120817,"depth":1141,"text":120818},{"id":120841,"depth":1141,"text":121116},"observation_space 维度和 obs 不一致",{"id":120891,"depth":1141,"text":120892},{"id":120923,"depth":1141,"text":120924},{"id":120959,"depth":94,"text":120960},{"id":121075,"depth":94,"text":121076},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":117658,"description":69},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":121127,"title":121128,"body":121129,"description":121552,"extension":5121,"meta":121553,"navigation":2362,"path":121554,"seo":121555,"stem":121556,"__hash__":121557},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":121130,"toc":121542},[121131,121135,121138,121141,121161,121167,121173,121183,121186,121189,121209,121212,121216,121219,121225,121228,121242,121245,121248,121322,121325,121331,121334,121357,121360,121410,121413,121419,121422,121425,121428,121447,121450,121456,121459,121462,121465,121485,121488,121491,121494,121539],[10,121132,121134],{"id":121133},"mujoco-学习","MuJoCo 学习",[19,121136,121137],{},"初版",[19,121139,121140],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[27,121142,121143,121146,121149,121158],{},[30,121144,121145],{},"MuJoCo 模型文件在描述什么。",[30,121147,121148],{},"Python 代码怎样读取和推进仿真。",[30,121150,121151,298,121153,298,121155,121157],{},[71,121152,108311],{},[71,121154,108641],{},[71,121156,108644],{}," 这些数组为什么重要。",[30,121159,121160],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,121162,121163,121164,121166],{},"默认环境为 Fedora 44、Python >= 3.10、",[71,121165,105308],{}," 官方 Python bindings。",[19,121168,121169,121170,121172],{},"注意：本文禁止使用 ",[71,121171,105293],{},"。所有示例均使用：",[64,121174,121175],{"className":34659,"code":105859,"language":34661,"meta":69,"style":69},[71,121176,121177],{"__ignoreMap":69},[74,121178,121179,121181],{"class":76,"line":77},[74,121180,34673],{"class":80},[74,121182,105582],{"class":84},[14,121184,121185],{"id":121185},"适合谁阅读",[19,121187,121188],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[27,121190,121191,121194,121197,121200],{},[30,121192,121193],{},"没学过 MuJoCo，只会一点 Python。",[30,121195,121196],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[30,121198,121199],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[30,121201,121202,121203,121205,121206,121208],{},"以前接触过 ",[71,121204,105293],{},"，现在想迁移到官方 ",[71,121207,105302],{}," Python bindings。",[19,121210,121211],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,121213,121215],{"id":121214},"mujoco-到底是什么","MuJoCo 到底是什么",[19,121217,121218],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[64,121220,121223],{"className":121221,"code":121222,"language":9466,"meta":69},[9464],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[71,121224,121222],{"__ignoreMap":69},[19,121226,121227],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[27,121229,121230,121233,121236,121239],{},[30,121231,121232],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[30,121234,121235],{},"快速测试控制算法，不必一开始就上真实机器人。",[30,121237,121238],{},"生成强化学习环境。",[30,121240,121241],{},"采集状态、动作、图像、奖励等训练数据。",[14,121243,121244],{"id":121244},"学习前的心智模型",[19,121246,121247],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[223,121249,121250,121262],{},[226,121251,121252],{},[229,121253,121254,121257,121260],{},[232,121255,121256],{"align":28016},"部分",[232,121258,121259],{"align":28016},"负责什么",[232,121261,25466],{"align":28016},[270,121263,121264,121275,121287,121299,121311],{},[229,121265,121266,121269,121272],{},[275,121267,121268],{"align":28016},"MJCF XML",[275,121270,121271],{"align":28016},"定义世界和机器人结构",[275,121273,121274],{"align":28016},"地面、盒子、关节、电机、摄像头",[229,121276,121277,121281,121284],{},[275,121278,121279],{"align":28016},[71,121280,104990],{},[275,121282,121283],{"align":28016},"编译后的静态模型",[275,121285,121286],{"align":28016},"有几个关节、有几个电机、时间步长是多少",[229,121288,121289,121293,121296],{},[275,121290,121291],{"align":28016},[71,121292,105000],{},[275,121294,121295],{"align":28016},"运行中的动态状态",[275,121297,121298],{"align":28016},"当前时间、位置、速度、电机输入",[229,121300,121301,121305,121308],{},[275,121302,121303],{"align":28016},[71,121304,105496],{},[275,121306,121307],{"align":28016},"推进一步物理仿真",[275,121309,121310],{"align":28016},"根据重力、力、碰撞更新状态",[229,121312,121313,121316,121319],{},[275,121314,121315],{"align":28016},"Viewer \u002F Renderer",[275,121317,121318],{"align":28016},"把仿真显示出来",[275,121320,121321],{"align":28016},"打开窗口或保存图片",[19,121323,121324],{},"一句话总结：",[64,121326,121329],{"className":121327,"code":121328,"language":9466,"meta":69},[9464],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[71,121330,121328],{"__ignoreMap":69},[19,121332,121333],{},"参考来源：",[1093,121335,121336,121343,121350],{},[30,121337,121338,121339],{},"MuJoCo Python 官方文档：",[324,121340,121341],{"href":121341,"rel":121342},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[28145],[30,121344,121345,121346],{},"MuJoCo XML Reference：",[324,121347,121348],{"href":121348,"rel":121349},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[28145],[30,121351,121352,121353],{},"MuJoCo Overview：",[324,121354,121355],{"href":121355,"rel":121356},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[28145],[14,121358,121359],{"id":121359},"章节目录",[27,121361,121362,121368,121374,121380,121386,121392,121398,121404],{},[30,121363,121364],{},[324,121365,121367],{"href":121366},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[30,121369,121370],{},[324,121371,121373],{"href":121372},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[30,121375,121376],{},[324,121377,121379],{"href":121378},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[30,121381,121382],{},[324,121383,121385],{"href":121384},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[30,121387,121388],{},[324,121389,121391],{"href":121390},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[30,121393,121394],{},[324,121395,121397],{"href":121396},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[30,121399,121400],{},[324,121401,121403],{"href":121402},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[30,121405,121406],{},[324,121407,121409],{"href":121408},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,121411,121412],{"id":121412},"推荐学习路线",[64,121414,121417],{"className":121415,"code":121416,"language":9466,"meta":69},[9464],"环境安装\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",[71,121418,121416],{"__ignoreMap":69},[19,121420,121421],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,121423,121424],{"id":121424},"建议的目录结构",[19,121426,121427],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[64,121429,121431],{"className":28102,"code":121430,"language":28104,"meta":69,"style":69},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[71,121432,121433,121441],{"__ignoreMap":69},[74,121434,121435,121437,121439],{"class":76,"line":77},[74,121436,105547],{"class":1925},[74,121438,33497],{"class":134},[74,121440,105552],{"class":190},[74,121442,121443,121445],{"class":76,"line":94},[74,121444,105557],{"class":134},[74,121446,105552],{"class":190},[19,121448,121449],{},"每一章的代码都单独保存：",[64,121451,121454],{"className":121452,"code":121453,"language":9466,"meta":69},[9464],"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",[71,121455,121453],{"__ignoreMap":69},[19,121457,121458],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,121460,121461],{"id":121461},"学习方法",[19,121463,121464],{},"每章建议按这个顺序操作：",[27,121466,121467,121470,121473,121476,121479,121482],{},[30,121468,121469],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[30,121471,121472],{},"复制最小可运行代码，保存成指定文件。",[30,121474,121475],{},"运行代码，确认没有报错。",[30,121477,121478],{},"对照“运行结果说明”理解输出。",[30,121480,121481],{},"做“验证步骤”，主动改一两个参数。",[30,121483,121484],{},"遇到报错先看“常见错误与解决方案”。",[19,121486,121487],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,121489,121490],{"id":121490},"全局排错顺序",[19,121492,121493],{},"遇到问题时，按下面顺序查：",[27,121495,121496,121502,121508,121513,121516,121519,121526,121536],{},[30,121497,121498,121499],{},"Python 环境是否激活：",[71,121500,121501],{},"which python",[30,121503,121504,121505],{},"MuJoCo 是否能导入：",[71,121506,121507],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[30,121509,121510,121511],{},"是否误装了 ",[71,121512,105293],{},[30,121514,121515],{},"XML 标签是否闭合、属性是否拼写正确",[30,121517,121518],{},"actuator 引用的 joint 名字是否存在",[30,121520,121521,121523,121524],{},[71,121522,105357],{}," 的长度是否等于 ",[71,121525,106439],{},[30,121527,109866,121528,86820,121530,121532,121533],{},[71,121529,108311],{},[71,121531,108641],{}," 后是否调用了 ",[71,121534,121535],{},"mujoco.mj_forward",[30,121537,121538],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5090,121540,121541],{},"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":69,"searchDepth":94,"depth":94,"links":121543},[121544,121545,121546,121547,121548,121549,121550,121551],{"id":121185,"depth":94,"text":121185},{"id":121214,"depth":94,"text":121215},{"id":121244,"depth":94,"text":121244},{"id":121359,"depth":94,"text":121359},{"id":121412,"depth":94,"text":121412},{"id":121424,"depth":94,"text":121424},{"id":121461,"depth":94,"text":121461},{"id":121490,"depth":94,"text":121490},"仿真搭建。",{"category":27658},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":121128,"description":121552},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":121559,"title":121560,"body":121561,"description":27656,"extension":5121,"meta":122016,"navigation":2362,"path":122017,"seo":122018,"stem":122019,"__hash__":122020},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":121562,"toc":122014},[121563,121566,121569,121575,122011],[10,121564,121560],{"id":121565},"_1-最常用的基本操作更新",[19,121567,121568],{},"装linux系统教程：",[19,121570,121571],{},[324,121572,121573],{"href":121573,"rel":121574},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[28145],[64,121576,121580],{"className":121577,"code":121578,"language":121579,"meta":69,"style":69},"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",[71,121581,121582,121587,121592,121601,121606,121615,121620,121640,121645,121656,121661,121670,121675,121703,121708,121727,121732,121751,121755,121760,121776,121780,121785,121815,121819,121824,121840,121844,121849,121864,121868,121873,121889,121893,121898,121910,121922,121926,121931,121948,121952,121957,121975,121979,121984,121993,121997,122002],{"__ignoreMap":69},[74,121583,121584],{"class":76,"line":77},[74,121585,121586],{"class":144},"#更新相关的知识\n",[74,121588,121589],{"class":76,"line":94},[74,121590,121591],{"class":144},"# 更新软件包列表（从服务器获取最新软件信息）\n",[74,121593,121594,121596,121599],{"class":76,"line":1141},[74,121595,28857],{"class":1925},[74,121597,121598],{"class":190}," apt",[74,121600,30523],{"class":190},[74,121602,121603],{"class":76,"line":1156},[74,121604,121605],{"class":144},"# 升级所有可更新的软件包（不删除旧包）\n",[74,121607,121608,121610,121612],{"class":76,"line":1162},[74,121609,28857],{"class":1925},[74,121611,121598],{"class":190},[74,121613,121614],{"class":190}," upgrade\n",[74,121616,121617],{"class":76,"line":1176},[74,121618,121619],{"class":144},"#更新和升级软件包\n",[74,121621,121622,121624,121626,121629,121631,121633,121635,121638],{"class":76,"line":1182},[74,121623,28857],{"class":1925},[74,121625,121598],{"class":190},[74,121627,121628],{"class":190}," update",[74,121630,30471],{"class":84},[74,121632,28857],{"class":1925},[74,121634,121598],{"class":190},[74,121636,121637],{"class":190}," upgrade",[74,121639,105262],{"class":134},[74,121641,121642],{"class":76,"line":1273},[74,121643,121644],{"class":144},"#列出可更新的软件包及版本信息\n",[74,121646,121647,121650,121653],{"class":76,"line":1279},[74,121648,121649],{"class":1925},"apt",[74,121651,121652],{"class":190}," list",[74,121654,121655],{"class":134}," --upgradable\n",[74,121657,121658],{"class":76,"line":1291},[74,121659,121660],{"class":144},"#彻底升级（处理依赖关系，可能删除旧包）\n",[74,121662,121663,121665,121667],{"class":76,"line":1574},[74,121664,28857],{"class":1925},[74,121666,121598],{"class":190},[74,121668,121669],{"class":190}," full-upgrade\n",[74,121671,121672],{"class":76,"line":1579},[74,121673,121674],{"class":144},"#设置指定版本\n",[74,121676,121677,121679,121681,121683,121685,121688,121690,121692,121694,121696,121699,121701],{"class":76,"line":1585},[74,121678,28857],{"class":1925},[74,121680,121598],{"class":190},[74,121682,28114],{"class":190},[74,121684,33183],{"class":80},[74,121686,121687],{"class":190},"package_nam",[74,121689,160],{"class":84},[74,121691,1046],{"class":80},[74,121693,131],{"class":190},[74,121695,996],{"class":80},[74,121697,121698],{"class":190},"version_numbe",[74,121700,756],{"class":84},[74,121702,55588],{"class":80},[74,121704,121705],{"class":76,"line":1590},[74,121706,121707],{"class":144},"#只安装软件包不升级\n",[74,121709,121710,121712,121714,121716,121718,121720,121722,121724],{"class":76,"line":1604},[74,121711,28857],{"class":1925},[74,121713,121598],{"class":190},[74,121715,28114],{"class":190},[74,121717,33183],{"class":80},[74,121719,121687],{"class":190},[74,121721,160],{"class":84},[74,121723,1046],{"class":80},[74,121725,121726],{"class":134}," --no-upgrade\n",[74,121728,121729],{"class":76,"line":1609},[74,121730,121731],{"class":144},"#只升级，不存在就不安装\n",[74,121733,121734,121736,121738,121740,121742,121744,121746,121748],{"class":76,"line":1615},[74,121735,28857],{"class":1925},[74,121737,121598],{"class":190},[74,121739,28114],{"class":190},[74,121741,33183],{"class":80},[74,121743,121687],{"class":190},[74,121745,160],{"class":84},[74,121747,1046],{"class":80},[74,121749,121750],{"class":134}," --only-upgrade\n",[74,121752,121753],{"class":76,"line":1636},[74,121754,2363],{"emptyLinePlaceholder":2362},[74,121756,121757],{"class":76,"line":1641},[74,121758,121759],{"class":144},"#安装指定的软件命令\n",[74,121761,121762,121764,121766,121768,121770,121772,121774],{"class":76,"line":1655},[74,121763,28857],{"class":1925},[74,121765,121598],{"class":190},[74,121767,28114],{"class":190},[74,121769,33183],{"class":80},[74,121771,121687],{"class":190},[74,121773,160],{"class":84},[74,121775,55588],{"class":80},[74,121777,121778],{"class":76,"line":1660},[74,121779,2363],{"emptyLinePlaceholder":2362},[74,121781,121782],{"class":76,"line":1689},[74,121783,121784],{"class":144},"#安装多个软件包\n",[74,121786,121787,121789,121791,121793,121795,121798,121801,121803,121805,121808,121810,121812],{"class":76,"line":1694},[74,121788,28857],{"class":1925},[74,121790,121598],{"class":190},[74,121792,28114],{"class":190},[74,121794,33183],{"class":80},[74,121796,121797],{"class":190},"package_",[74,121799,121800],{"class":80},"1>",[74,121802,33183],{"class":80},[74,121804,121797],{"class":190},[74,121806,121807],{"class":80},"2>",[74,121809,33183],{"class":80},[74,121811,121797],{"class":190},[74,121813,121814],{"class":80},"3>\n",[74,121816,121817],{"class":76,"line":1711},[74,121818,2363],{"emptyLinePlaceholder":2362},[74,121820,121821],{"class":76,"line":1716},[74,121822,121823],{"class":144},"#更新指定的软件命令\n",[74,121825,121826,121828,121830,121832,121834,121836,121838],{"class":76,"line":1721},[74,121827,28857],{"class":1925},[74,121829,121598],{"class":190},[74,121831,121628],{"class":190},[74,121833,33183],{"class":80},[74,121835,121687],{"class":190},[74,121837,160],{"class":84},[74,121839,55588],{"class":80},[74,121841,121842],{"class":76,"line":1726},[74,121843,2363],{"emptyLinePlaceholder":2362},[74,121845,121846],{"class":76,"line":1740},[74,121847,121848],{"class":144},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[74,121850,121851,121853,121856,121858,121860,121862],{"class":76,"line":1745},[74,121852,121649],{"class":1925},[74,121854,121855],{"class":190}," show",[74,121857,33183],{"class":80},[74,121859,121687],{"class":190},[74,121861,160],{"class":84},[74,121863,55588],{"class":80},[74,121865,121866],{"class":76,"line":2540},[74,121867,2363],{"emptyLinePlaceholder":2362},[74,121869,121870],{"class":76,"line":2554},[74,121871,121872],{"class":144},"#删除软件包命令\n",[74,121874,121875,121877,121879,121881,121883,121885,121887],{"class":76,"line":2562},[74,121876,28857],{"class":1925},[74,121878,121598],{"class":190},[74,121880,30360],{"class":190},[74,121882,33183],{"class":80},[74,121884,121687],{"class":190},[74,121886,160],{"class":84},[74,121888,55588],{"class":80},[74,121890,121891],{"class":76,"line":2567},[74,121892,2363],{"emptyLinePlaceholder":2362},[74,121894,121895],{"class":76,"line":2573},[74,121896,121897],{"class":144},"# 清理旧版本和缓存（释放磁盘空间）\n",[74,121899,121900,121902,121904,121907],{"class":76,"line":2579},[74,121901,28857],{"class":1925},[74,121903,121598],{"class":190},[74,121905,121906],{"class":190}," autoremove",[74,121908,121909],{"class":144},"  # 删除不再需要的依赖和库文件\n",[74,121911,121912,121914,121916,121919],{"class":76,"line":2584},[74,121913,28857],{"class":1925},[74,121915,121598],{"class":190},[74,121917,121918],{"class":190}," clean",[74,121920,121921],{"class":144},"       # 清理下载的缓存包\n",[74,121923,121924],{"class":76,"line":12227},[74,121925,2363],{"emptyLinePlaceholder":2362},[74,121927,121928],{"class":76,"line":12251},[74,121929,121930],{"class":144},"#移除软件包及配置文件\n",[74,121932,121933,121935,121937,121940,121942,121944,121946],{"class":76,"line":12256},[74,121934,28857],{"class":1925},[74,121936,121598],{"class":190},[74,121938,121939],{"class":190}," purge",[74,121941,33183],{"class":80},[74,121943,121687],{"class":190},[74,121945,160],{"class":84},[74,121947,55588],{"class":80},[74,121949,121950],{"class":76,"line":12262},[74,121951,2363],{"emptyLinePlaceholder":2362},[74,121953,121954],{"class":76,"line":12289},[74,121955,121956],{"class":144},"#查找软件包命令\n",[74,121958,121959,121961,121963,121966,121968,121971,121973],{"class":76,"line":12294},[74,121960,28857],{"class":1925},[74,121962,121598],{"class":190},[74,121964,121965],{"class":190}," search",[74,121967,33183],{"class":80},[74,121969,121970],{"class":190},"keywor",[74,121972,400],{"class":84},[74,121974,55588],{"class":80},[74,121976,121977],{"class":76,"line":12300},[74,121978,2363],{"emptyLinePlaceholder":2362},[74,121980,121981],{"class":76,"line":12312},[74,121982,121983],{"class":144},"#列出所有已安装的包\n",[74,121985,121986,121988,121990],{"class":76,"line":12324},[74,121987,121649],{"class":1925},[74,121989,121652],{"class":190},[74,121991,121992],{"class":134}," --installed\n",[74,121994,121995],{"class":76,"line":12336},[74,121996,2363],{"emptyLinePlaceholder":2362},[74,121998,121999],{"class":76,"line":13995},[74,122000,122001],{"class":144},"#列出所有已安装的包的版本信息\n",[74,122003,122004,122006,122008],{"class":76,"line":14020},[74,122005,121649],{"class":1925},[74,122007,121652],{"class":190},[74,122009,122010],{"class":134}," --all-versions\n",[5090,122012,122013],{},"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":69,"searchDepth":94,"depth":94,"links":122015},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":121560,"description":27656},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":122022,"title":122023,"body":122024,"description":27656,"extension":5121,"meta":122765,"navigation":2362,"path":122766,"seo":122767,"stem":122768,"__hash__":122769},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":122025,"toc":122752},[122026,122029,122033,122036,122042,122046,122050,122056,122061,122066,122071,122076,122081,122084,122087,122090,122093,122097,122100,122105,122108,122113,122116,122121,122128,122131,122134,122137,122140,122143,122154,122158,122162,122167,122172,122176,122181,122185,122190,122194,122198,122203,122206,122251,122256,122260,122264,122269,122275,122280,122290,122295,122305,122310,122315,122342,122346,122349,122354,122357,122382,122386,122391,122394,122399,122404,122424,122429,122432,122447,122451,122504,122507,122512,122516,122519,122534,122537,122540,122545,122549,122553,122556,122560,122564,122567,122572,122577,122581,122588,122596,122599,122606,122611,122616,122619,122624,122631,122636,122643,122647,122649,122654,122658,122661,122664,122669,122672,122677,122680,122685,122690,122695,122699,122704,122708,122749],[10,122027,122023],{"id":122028},"_2-linux装机教程",[14,122030,122032],{"id":122031},"_21-实体机","2.1 实体机",[19,122034,122035],{},"使用清华源：（Ubuntu24.04）",[19,122037,122038],{},[324,122039,122040],{"href":122040,"rel":122041},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[28145],[14,122043,122045],{"id":122044},"_22-普通虚拟机","2.2 普通虚拟机",[44,122047,122049],{"id":122048},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,122051,122052],{},[324,122053,122054],{"href":122054,"rel":122055},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[28145],[19,122057,122058],{},[1424,122059],{"alt":69,"src":122060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,122062,122063],{},[1424,122064],{"alt":69,"src":122065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,122067,122068],{},[1424,122069],{"alt":69,"src":122070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,122072,122073],{},[1424,122074],{"alt":69,"src":122075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,122077,122078],{},[1424,122079],{"alt":69,"src":122080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,122082,122083],{},"内存4G（4096MB）；",[19,122085,122086],{},"CPU给4个核；",[19,122088,122089],{},"硬盘动态分配60G；",[19,122091,122092],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[44,122094,122096],{"id":122095},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,122098,122099],{},"按照1.1的步骤下载Ubuntu",[19,122101,122102],{},[1424,122103],{"alt":69,"src":122104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,122106,122107],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,122109,122110],{},[1424,122111],{"alt":69,"src":122112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,122114,122115],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,122117,122118],{},[1424,122119],{"alt":69,"src":122120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,122122,122123,122124,122127],{},"选择“正常安装”(找不到都用Alt+F7)， ",[235,122125,122126],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,122129,122130],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,122132,122133],{},"将改动写入磁盘吗 继续",[19,122135,122136],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,122138,122139],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,122141,122142],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,122144,122145,122146,122149,122150,122153],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[235,122147,122148],{},"除了"," 选不发送系统信息与不升级之外， ",[235,122151,122152],{},"其它"," 都跳过或前进）",[44,122155,122157],{"id":122156},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[26277,122159,122161],{"id":122160},"_2231-全屏","2.2.3.1 全屏",[19,122163,122164],{},[1424,122165],{"alt":69,"src":122166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,122168,122169],{},[1424,122170],{"alt":69,"src":122171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[26277,122173,122175],{"id":122174},"_2232-文件交换","2.2.3.2 文件交换",[19,122177,122178],{},[1424,122179],{"alt":69,"src":122180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[26277,122182,122184],{"id":122183},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,122186,122187],{},[1424,122188],{"alt":69,"src":122189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,122191,122193],{"id":122192},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[44,122195,122197],{"id":122196},"_231-简介与优缺点","2.3.1 简介与优缺点",[27,122199,122200],{},[30,122201,122202],{},"什么情况下推荐？",[19,122204,122205],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[27,122207,122208],{"start":94},[30,122209,122210,122211],{},"优缺点：",[27,122212,122213,122243],{},[30,122214,122215,122216],{},"优点：",[27,122217,122218,122221,122228,122231,122234,122237,122240],{},[30,122219,122220],{},"WSL2是最好的Linux发行版;(bushi)",[30,122222,122223,122224,122227],{},"性能损耗极低。且比在Windows上跑深度性能 ",[235,122225,122226],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[30,122229,122230],{},"非常方便调用USB设备，可以USB直通;",[30,122232,122233],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[30,122235,122236],{},"非常方便Win与WSL2互相传文件等协同操作;",[30,122238,122239],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[30,122241,122242],{},"非常方便使用Windows的VScode远程开发;",[30,122244,122245,122246],{},"缺点：",[27,122247,122248],{},[30,122249,122250],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,122252,122253],{},[1424,122254],{"alt":69,"src":122255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[44,122257,122259],{"id":122258},"_232-安装教程","2.3.2 安装教程",[26277,122261,122263],{"id":122262},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[27,122265,122266],{},[30,122267,122268],{},"方法一(图形界面)",[19,122270,122271,122272,28899],{},"用Win+R输入",[71,122273,122274],{},"appwiz.cpl",[19,122276,122277],{},[1424,122278],{"alt":69,"src":122279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,122281,122282,122283,122286,122287,30754],{},"点击OK进入 ",[235,122284,122285],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[235,122288,122289],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,122291,122292],{},[1424,122293],{"alt":69,"src":122294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,122296,122297,122298,105299,122301,122304],{},"选择 ",[235,122299,122300],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[235,122302,122303],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,122306,122307],{},[1424,122308],{"alt":69,"src":122309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[27,122311,122312],{"start":94},[30,122313,122314],{},"方法二(命令行)",[64,122316,122320],{"className":122317,"code":122318,"language":122319,"meta":69,"style":69},"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",[71,122321,122322,122327,122332,122337],{"__ignoreMap":69},[74,122323,122324],{"class":76,"line":77},[74,122325,122326],{},"# 开启 Linux 子系统\n",[74,122328,122329],{"class":76,"line":94},[74,122330,122331],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[74,122333,122334],{"class":76,"line":1141},[74,122335,122336],{},"# 开启虚拟机平台\n",[74,122338,122339],{"class":76,"line":1156},[74,122340,122341],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[26277,122343,122345],{"id":122344},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,122347,122348],{},"用管理员权限打开powershell",[19,122350,122351],{},[1424,122352],{"alt":69,"src":122353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,122355,122356],{},"升级WSL并设置默认版本为WSL2",[64,122358,122360],{"className":122317,"code":122359,"language":122319,"meta":69,"style":69},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[71,122361,122362,122367,122372,122377],{"__ignoreMap":69},[74,122363,122364],{"class":76,"line":77},[74,122365,122366],{},"# 更新 wsl\n",[74,122368,122369],{"class":76,"line":94},[74,122370,122371],{},"wsl --update\n",[74,122373,122374],{"class":76,"line":1141},[74,122375,122376],{},"# 将 wsl 版本设置为 wsl2\n",[74,122378,122379],{"class":76,"line":1156},[74,122380,122381],{},"wsl --set-default-version 2\n",[26277,122383,122385],{"id":122384},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[27,122387,122388],{},[30,122389,122390],{},"方式一(商店下载)",[19,122392,122393],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,122395,122396],{},[1424,122397],{"alt":69,"src":122398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[27,122400,122401],{"start":94},[30,122402,122403],{},"方式二(命令行安装)",[64,122405,122407],{"className":122317,"code":122406,"language":122319,"meta":69,"style":69},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[71,122408,122409,122414,122419],{"__ignoreMap":69},[74,122410,122411],{"class":76,"line":77},[74,122412,122413],{},"# 列出可安装的 Linux 版本\n",[74,122415,122416],{"class":76,"line":94},[74,122417,122418],{},"#（需要科学手段）\n",[74,122420,122421],{"class":76,"line":1141},[74,122422,122423],{},"wsl --list --online\n",[19,122425,122426],{},[1424,122427],{"alt":69,"src":122428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,122430,122431],{},"选择对应发行版并安装",[64,122433,122435],{"className":122317,"code":122434,"language":122319,"meta":69,"style":69},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[71,122436,122437,122442],{"__ignoreMap":69},[74,122438,122439],{"class":76,"line":77},[74,122440,122441],{},"# Ubuntu安装完毕后需要重启系统\n",[74,122443,122444],{"class":76,"line":94},[74,122445,122446],{},"wsl --install -d Ubuntu-24.04\n",[26277,122448,122450],{"id":122449},"_2324-查看系统状态","2.3.2.4 查看系统状态",[64,122452,122454],{"className":122317,"code":122453,"language":122319,"meta":69,"style":69},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[71,122455,122456,122461,122466,122471,122476,122480,122484,122489,122494,122499],{"__ignoreMap":69},[74,122457,122458],{"class":76,"line":77},[74,122459,122460],{},"# 查看 wsl\n",[74,122462,122463],{"class":76,"line":94},[74,122464,122465],{},"wsl -l\n",[74,122467,122468],{"class":76,"line":1141},[74,122469,122470],{},"# 查看 wsl 运行版本或模式\n",[74,122472,122473],{"class":76,"line":1156},[74,122474,122475],{},"wsl -l -v\n",[74,122477,122478],{"class":76,"line":1162},[74,122479,2363],{"emptyLinePlaceholder":2362},[74,122481,122482],{"class":76,"line":1176},[74,122483,2363],{"emptyLinePlaceholder":2362},[74,122485,122486],{"class":76,"line":1182},[74,122487,122488],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[74,122490,122491],{"class":76,"line":1273},[74,122492,122493],{},"wsl --set-version \u003Cdistro> 2\n",[74,122495,122496],{"class":76,"line":1279},[74,122497,122498],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[74,122500,122501],{"class":76,"line":1291},[74,122502,122503],{},"wsl --unregister \u003Cdistro>\n",[19,122505,122506],{},"输出Version为2即正常",[19,122508,122509],{},[1424,122510],{"alt":69,"src":122511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[26277,122513,122515],{"id":122514},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,122517,122518],{},"直接在Powershell里输入wsl命令进入子系统",[64,122520,122522],{"className":122317,"code":122521,"language":122319,"meta":69,"style":69},"# 进入子系统\nwsl\n",[71,122523,122524,122529],{"__ignoreMap":69},[74,122525,122526],{"class":76,"line":77},[74,122527,122528],{},"# 进入子系统\n",[74,122530,122531],{"class":76,"line":94},[74,122532,122533],{},"wsl\n",[19,122535,122536],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,122538,122539],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,122541,122542],{},[1424,122543],{"alt":69,"src":122544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[44,122546,122548],{"id":122547},"_233-配置各种环境","2.3.3 配置各种环境",[26277,122550,122552],{"id":122551},"_2331-换源","2.3.3.1 换源",[19,122554,122555],{},"(同实体机LINUX，往下找教程)",[26277,122557,122559],{"id":122558},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[27189,122561,122563],{"id":122562},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,122565,122566],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,122568,122569],{},[1424,122570],{"alt":69,"src":122571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,122573,122574],{},[1424,122575],{"alt":69,"src":122576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[27189,122578,122580],{"id":122579},"_23322-cuda","2.3.3.2.2 CUDA",[19,122582,122583,122584],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[324,122585,122586],{"href":122586,"rel":122587},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[28145],[19,122589,122590,122593],{},[1424,122591],{"alt":69,"src":122592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1424,122594],{"alt":69,"src":122595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,122597,122598],{},"在下方的网站，选择合适的版本。",[19,122600,122601,122602],{},"WSL2 专属 CUDA 指南：",[324,122603,122604],{"href":122604,"rel":122605},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[28145],[19,122607,122608],{},[235,122609,122610],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,122612,122613],{},[1424,122614],{"alt":69,"src":122615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,122617,122618],{},"挨行敲一遍",[19,122620,122621],{},[1424,122622],{"alt":69,"src":122623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,122625,122626,122627,122630],{},"敲完后，输入",[71,122628,122629],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,122632,122633],{},[1424,122634],{"alt":69,"src":122635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,122637,122638,122639,122642],{},"（请详看下方教程的",[235,122640,122641],{},"安装CUDA的配置环境来看","如何配置环境）",[27189,122644,122646],{"id":122645},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,122648,122555],{},[19,122650,122651],{},[1424,122652],{"alt":69,"src":122653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[26277,122655,122657],{"id":122656},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,122659,122660],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,122662,122663],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,122665,122666],{},[1424,122667],{"alt":69,"src":122668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,122670,122671],{},"连接WSL2",[19,122673,122674],{},[1424,122675],{"alt":69,"src":122676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,122678,122679],{},"远程开发成功。",[19,122681,122682],{},[1424,122683],{"alt":69,"src":122684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,122686,122687],{},[1424,122688],{"alt":69,"src":122689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,122691,122692],{},[1424,122693],{"alt":69,"src":122694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[26277,122696,122698],{"id":122697},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,122700,122701],{},[1424,122702],{"alt":69,"src":122703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[26277,122705,122707],{"id":122706},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[64,122709,122711],{"className":121577,"code":122710,"language":121579,"meta":69,"style":69},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[71,122712,122713,122721,122729,122740,122744],{"__ignoreMap":69},[74,122714,122715,122717,122719],{"class":76,"line":77},[74,122716,28857],{"class":1925},[74,122718,121598],{"class":190},[74,122720,30523],{"class":190},[74,122722,122723,122725,122727],{"class":76,"line":94},[74,122724,28857],{"class":1925},[74,122726,121598],{"class":190},[74,122728,121614],{"class":190},[74,122730,122731,122733,122735,122737],{"class":76,"line":1141},[74,122732,28857],{"class":1925},[74,122734,121598],{"class":190},[74,122736,28114],{"class":190},[74,122738,122739],{"class":190}," mesa-utils\n",[74,122741,122742],{"class":76,"line":1156},[74,122743,2363],{"emptyLinePlaceholder":2362},[74,122745,122746],{"class":76,"line":1162},[74,122747,122748],{"class":144},"#然后重启wsl2即可\n",[5090,122750,122751],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":69,"searchDepth":94,"depth":94,"links":122753},[122754,122755,122760],{"id":122031,"depth":94,"text":122032},{"id":122044,"depth":94,"text":122045,"children":122756},[122757,122758,122759],{"id":122048,"depth":1141,"text":122049},{"id":122095,"depth":1141,"text":122096},{"id":122156,"depth":1141,"text":122157},{"id":122192,"depth":94,"text":122193,"children":122761},[122762,122763,122764],{"id":122196,"depth":1141,"text":122197},{"id":122258,"depth":1141,"text":122259},{"id":122547,"depth":1141,"text":122548},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":122023,"description":27656},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":122771,"title":122772,"body":122773,"description":27656,"extension":5121,"meta":125709,"navigation":2362,"path":125710,"seo":125711,"stem":125712,"__hash__":125713},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":122774,"toc":125681},[122775,122778,122782,122788,122792,122798,122802,122990,122993,122998,123002,123006,123009,123012,123018,123023,123026,123029,123034,123067,123072,123076,123153,123156,123161,123165,123168,123207,123210,123219,123237,123242,123249,123366,123371,123374,123401,123406,123410,123419,123469,123476,123480,123483,123497,123504,123538,123543,123547,123570,123573,123578,123582,123585,123588,123591,123633,123637,123640,123643,123684,123688,123692,123695,123700,123705,123708,123731,123734,123742,123747,123750,123755,123760,123763,123768,123772,123777,123800,123805,123867,123875,123880,123885,123888,123893,123896,123901,123906,123924,123929,123935,123940,123954,123958,123961,123964,123967,124010,124013,124018,124119,124122,124127,124131,124135,124172,124176,124180,124184,124230,124234,124279,124283,124290,124298,124353,124356,124433,124436,124459,124463,124466,124471,124476,124484,124487,124492,124497,124502,124505,124510,124519,124522,124527,124530,124601,124606,124609,124614,124617,124622,124625,124630,124633,124638,124643,124646,124721,124724,124737,124742,124745,124759,124762,124791,124796,124825,124828,124833,124837,124842,124851,124854,124859,124862,124867,124870,124873,124878,124881,124886,124891,124894,124899,124902,125027,125032,125062,125065,125070,125075,125092,125095,125138,125141,125168,125173,125186,125329,125333,125338,125352,125355,125406,125409,125439,125442,125458,125463,125477,125480,125547,125552,125561,125566,125569,125581,125586,125593,125617,125620,125625,125628,125647,125652,125659,125671,125678],[10,122776,122772],{"id":122777},"_3-安装必备配置",[14,122779,122781],{"id":122780},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[64,122783,122786],{"className":122784,"code":122785,"language":9466},[9464],"  打开下方网站（注意，该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",[71,122787,122785],{"__ignoreMap":69},[44,122789,122791],{"id":122790},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[64,122793,122796],{"className":122794,"code":122795,"language":9466},[9464],"  输入以下命令\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",[71,122797,122795],{"__ignoreMap":69},[44,122799,122801],{"id":122800},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[64,122803,122807],{"className":122804,"code":122805,"language":122806,"meta":69,"style":69},"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",[71,122808,122809,122817,122828,122840,122854,122858,122868,122873,122877,122881,122886,122890,122902,122906,122911,122915,122926,122930,122946,122950,122961,122965,122970,122974,122982],{"__ignoreMap":69},[74,122810,122811,122813,122815],{"class":76,"line":77},[74,122812,28857],{"class":1925},[74,122814,121598],{"class":190},[74,122816,30523],{"class":190},[74,122818,122819,122821,122823,122825],{"class":76,"line":94},[74,122820,28857],{"class":1925},[74,122822,121598],{"class":190},[74,122824,28114],{"class":190},[74,122826,122827],{"class":190}," vim\n",[74,122829,122830,122832,122835,122837],{"class":76,"line":1141},[74,122831,28857],{"class":1925},[74,122833,122834],{"class":190}," rm",[74,122836,29606],{"class":134},[74,122838,122839],{"class":190}," \u002Fetc\u002Fapt\u002Fsources.list\n",[74,122841,122842,122844,122846,122848,122851],{"class":76,"line":1156},[74,122843,28857],{"class":1925},[74,122845,122834],{"class":190},[74,122847,29606],{"class":134},[74,122849,122850],{"class":190}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[74,122852,122853],{"class":134},"**\n",[74,122855,122856],{"class":76,"line":1162},[74,122857,2363],{"emptyLinePlaceholder":2362},[74,122859,122860,122862,122865],{"class":76,"line":1176},[74,122861,28857],{"class":1925},[74,122863,122864],{"class":190}," vim",[74,122866,122867],{"class":190}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[74,122869,122870],{"class":76,"line":1182},[74,122871,122872],{"class":190},"```\n",[74,122874,122875],{"class":76,"line":1273},[74,122876,2363],{"emptyLinePlaceholder":2362},[74,122878,122879],{"class":76,"line":1279},[74,122880,2363],{"emptyLinePlaceholder":2362},[74,122882,122883],{"class":76,"line":1291},[74,122884,122885],{"class":1925},"选择好Ubuntu版本后，复制下方的内容。\n",[74,122887,122888],{"class":76,"line":1574},[74,122889,2363],{"emptyLinePlaceholder":2362},[74,122891,122892,122894,122897,122900],{"class":76,"line":1579},[74,122893,312],{"class":80},[74,122895,122896],{"class":190},"[](",[74,122898,122899],{"class":1925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[74,122901,91],{"class":190},[74,122903,122904],{"class":76,"line":1585},[74,122905,2363],{"emptyLinePlaceholder":2362},[74,122907,122908],{"class":76,"line":1590},[74,122909,122910],{"class":1925},"粘贴进去\n",[74,122912,122913],{"class":76,"line":1604},[74,122914,2363],{"emptyLinePlaceholder":2362},[74,122916,122917,122919,122921,122924],{"class":76,"line":1609},[74,122918,312],{"class":80},[74,122920,122896],{"class":190},[74,122922,122923],{"class":1925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[74,122925,91],{"class":190},[74,122927,122928],{"class":76,"line":1615},[74,122929,2363],{"emptyLinePlaceholder":2362},[74,122931,122932,122935,122938,122941,122943],{"class":76,"line":1636},[74,122933,122934],{"class":1925},"按一下ESC，然后英文冒号，输入",[74,122936,122937],{"class":190}," `",[74,122939,122940],{"class":1925},":wq!",[74,122942,1058],{"class":190},[74,122944,122945],{"class":1925},"然后回车\n",[74,122947,122948],{"class":76,"line":1641},[74,122949,2363],{"emptyLinePlaceholder":2362},[74,122951,122952,122954,122956,122959],{"class":76,"line":1655},[74,122953,312],{"class":80},[74,122955,122896],{"class":190},[74,122957,122958],{"class":1925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[74,122960,91],{"class":190},[74,122962,122963],{"class":76,"line":1660},[74,122964,2363],{"emptyLinePlaceholder":2362},[74,122966,122967],{"class":76,"line":1689},[74,122968,122969],{"class":1925},"输入以下命令\n",[74,122971,122972],{"class":76,"line":1694},[74,122973,2363],{"emptyLinePlaceholder":2362},[74,122975,122976,122979],{"class":76,"line":1711},[74,122977,122978],{"class":190},"```",[74,122980,122981],{"class":1925},"Bash\n",[74,122983,122984,122986,122988],{"class":76,"line":1716},[74,122985,28857],{"class":1925},[74,122987,121598],{"class":190},[74,122989,30523],{"class":190},[19,122991,122992],{},"这里被替换成对应学校则成功",[19,122994,122995],{},[1424,122996],{"alt":69,"src":122997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,122999,123001],{"id":123000},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[44,123003,123005],{"id":123004},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,123007,123008],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,123010,123011],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,123013,123014],{},[324,123015,123016],{"href":123016,"rel":123017},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[28145],[19,123019,123020],{},[1424,123021],{"alt":69,"src":123022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,123024,123025],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,123027,123028],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,123030,123031],{},[1424,123032],{"alt":69,"src":123033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[64,123035,123037],{"className":121577,"code":123036,"language":121579,"meta":69,"style":69},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[71,123038,123039,123044,123051,123056],{"__ignoreMap":69},[74,123040,123041],{"class":76,"line":77},[74,123042,123043],{"class":144},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[74,123045,123046,123048],{"class":76,"line":94},[74,123047,105557],{"class":134},[74,123049,123050],{"class":190}," ~\u002FDownloads\n",[74,123052,123053],{"class":76,"line":1141},[74,123054,123055],{"class":144},"#下方chrome安装包名不一定是这个，根据名字来看\n",[74,123057,123058,123060,123062,123064],{"class":76,"line":1156},[74,123059,28857],{"class":1925},[74,123061,121598],{"class":190},[74,123063,28114],{"class":190},[74,123065,123066],{"class":190}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,123068,123069],{},[1424,123070],{"alt":69,"src":123071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[44,123073,123075],{"id":123074},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[64,123077,123079],{"className":121577,"code":123078,"language":121579,"meta":69,"style":69},"# 老版\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",[71,123080,123081,123086,123094,123105,123110,123114,123119,123129,123137,123148],{"__ignoreMap":69},[74,123082,123083],{"class":76,"line":77},[74,123084,123085],{"class":144},"# 老版\n",[74,123087,123088,123090,123092],{"class":76,"line":94},[74,123089,28857],{"class":1925},[74,123091,121598],{"class":190},[74,123093,30523],{"class":190},[74,123095,123096,123098,123100,123102],{"class":76,"line":1141},[74,123097,28857],{"class":1925},[74,123099,121598],{"class":190},[74,123101,28114],{"class":190},[74,123103,123104],{"class":190}," neofetch\n",[74,123106,123107],{"class":76,"line":1156},[74,123108,123109],{"class":1925},"neofetch\n",[74,123111,123112],{"class":76,"line":1162},[74,123113,2363],{"emptyLinePlaceholder":2362},[74,123115,123116],{"class":76,"line":1176},[74,123117,123118],{"class":144},"# 新版\n",[74,123120,123121,123123,123126],{"class":76,"line":1182},[74,123122,28857],{"class":1925},[74,123124,123125],{"class":190}," add-apt-repository",[74,123127,123128],{"class":190}," ppa:zhangsongcui3371\u002Ffastfetch\n",[74,123130,123131,123133,123135],{"class":76,"line":1273},[74,123132,28857],{"class":1925},[74,123134,121598],{"class":190},[74,123136,30523],{"class":190},[74,123138,123139,123141,123143,123145],{"class":76,"line":1279},[74,123140,28857],{"class":1925},[74,123142,121598],{"class":190},[74,123144,28114],{"class":190},[74,123146,123147],{"class":190}," fastfetch\n",[74,123149,123150],{"class":76,"line":1291},[74,123151,123152],{"class":1925},"fastfetch\n",[19,123154,123155],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,123157,123158],{},[1424,123159],{"alt":69,"src":123160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[44,123162,123164],{"id":123163},"_323-移除snap应用","3.2.3 移除snap应用",[19,123166,123167],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[64,123169,123171],{"className":121577,"code":123170,"language":121579,"meta":69,"style":69},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[71,123172,123173,123185,123196],{"__ignoreMap":69},[74,123174,123175,123177,123179,123182],{"class":76,"line":77},[74,123176,28857],{"class":1925},[74,123178,30794],{"class":190},[74,123180,123181],{"class":190}," disable",[74,123183,123184],{"class":190}," snapd.service\n",[74,123186,123187,123189,123191,123193],{"class":76,"line":94},[74,123188,28857],{"class":1925},[74,123190,30794],{"class":190},[74,123192,123181],{"class":190},[74,123194,123195],{"class":190}," snapd.socket\n",[74,123197,123198,123200,123202,123204],{"class":76,"line":1141},[74,123199,28857],{"class":1925},[74,123201,30794],{"class":190},[74,123203,123181],{"class":190},[74,123205,123206],{"class":190}," snapd.seeded.service\n",[19,123208,123209],{},"然后查看snap应用列表",[19,123211,123212,123213,123218],{},"根据你安装的选择不同（最小安装或普通安装），有",[324,123214,123217],{"href":123215,"rel":123216},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[28145],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[64,123220,123222],{"className":121577,"code":123221,"language":121579,"meta":69,"style":69},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[71,123223,123224,123229],{"__ignoreMap":69},[74,123225,123226],{"class":76,"line":77},[74,123227,123228],{"class":144},"# 查询当前系统上snap安装了哪些app\n",[74,123230,123231,123234],{"class":76,"line":94},[74,123232,123233],{"class":1925},"snap",[74,123235,123236],{"class":190}," list\n",[19,123238,123239],{},[1424,123240],{"alt":69,"src":123241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,123243,123244,123245,123248],{},"卸载掉图中所有应用，按照 ",[235,123246,123247],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[64,123250,123252],{"className":121577,"code":123251,"language":121579,"meta":69,"style":69},"#移除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",[71,123253,123254,123259,123271,123276,123287,123292,123303,123308,123319,123324,123328,123333,123344,123355],{"__ignoreMap":69},[74,123255,123256],{"class":76,"line":77},[74,123257,123258],{"class":144},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[74,123260,123261,123263,123266,123268],{"class":76,"line":94},[74,123262,28857],{"class":1925},[74,123264,123265],{"class":190}," snap",[74,123267,30360],{"class":190},[74,123269,123270],{"class":190}," snap-store\n",[74,123272,123273],{"class":76,"line":1141},[74,123274,123275],{"class":144},"#移除firefox浏览器\n",[74,123277,123278,123280,123282,123284],{"class":76,"line":1156},[74,123279,28857],{"class":1925},[74,123281,123265],{"class":190},[74,123283,30360],{"class":190},[74,123285,123286],{"class":190}," firefox\n",[74,123288,123289],{"class":76,"line":1162},[74,123290,123291],{"class":144},"#移除gnome-42-2204\n",[74,123293,123294,123296,123298,123300],{"class":76,"line":1176},[74,123295,28857],{"class":1925},[74,123297,123265],{"class":190},[74,123299,30360],{"class":190},[74,123301,123302],{"class":190}," gnome-42-2204\n",[74,123304,123305],{"class":76,"line":1182},[74,123306,123307],{"class":144},"#移除gtk-common-themes\n",[74,123309,123310,123312,123314,123316],{"class":76,"line":1273},[74,123311,28857],{"class":1925},[74,123313,123265],{"class":190},[74,123315,30360],{"class":190},[74,123317,123318],{"class":190}," gtk-common-themes\n",[74,123320,123321],{"class":76,"line":1279},[74,123322,123323],{"class":144},"#移除其它...\n",[74,123325,123326],{"class":76,"line":1291},[74,123327,2637],{"class":84},[74,123329,123330],{"class":76,"line":1574},[74,123331,123332],{"class":144},"#移除core22,bare以及snapd\n",[74,123334,123335,123337,123339,123341],{"class":76,"line":1579},[74,123336,28857],{"class":1925},[74,123338,123265],{"class":190},[74,123340,30360],{"class":190},[74,123342,123343],{"class":190}," core22\n",[74,123345,123346,123348,123350,123352],{"class":76,"line":1585},[74,123347,28857],{"class":1925},[74,123349,123265],{"class":190},[74,123351,30360],{"class":190},[74,123353,123354],{"class":190}," bare\n",[74,123356,123357,123359,123361,123363],{"class":76,"line":1590},[74,123358,28857],{"class":1925},[74,123360,123265],{"class":190},[74,123362,30360],{"class":190},[74,123364,123365],{"class":190}," snapd\n",[19,123367,123368],{},[1424,123369],{"alt":69,"src":123370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,123372,123373],{},"输入以下命令查看是否还有snap包",[64,123375,123377],{"className":121577,"code":123376,"language":121579,"meta":69,"style":69},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[71,123378,123379,123385,123389,123393,123397],{"__ignoreMap":69},[74,123380,123381,123383],{"class":76,"line":77},[74,123382,123233],{"class":1925},[74,123384,123236],{"class":190},[74,123386,123387],{"class":76,"line":94},[74,123388,123085],{"class":144},[74,123390,123391],{"class":76,"line":1141},[74,123392,123109],{"class":1925},[74,123394,123395],{"class":76,"line":1156},[74,123396,123118],{"class":144},[74,123398,123399],{"class":76,"line":1162},[74,123400,123152],{"class":1925},[19,123402,123403],{},[1424,123404],{"alt":69,"src":123405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[44,123407,123409],{"id":123408},"_324-移除snap","3.2.4 移除snap",[19,123411,123412,123413,123418],{},"在删除掉",[324,123414,123417],{"href":123415,"rel":123416},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[28145],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[64,123420,123422],{"className":121577,"code":123421,"language":121579,"meta":69,"style":69}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[71,123423,123424,123429,123442,123447,123458],{"__ignoreMap":69},[74,123425,123426],{"class":76,"line":77},[74,123427,123428],{"class":144}," #使用apt移除掉snap\n",[74,123430,123431,123433,123435,123437,123440],{"class":76,"line":94},[74,123432,28857],{"class":1925},[74,123434,121598],{"class":190},[74,123436,121906],{"class":190},[74,123438,123439],{"class":134}," --purge",[74,123441,123365],{"class":190},[74,123443,123444],{"class":76,"line":1141},[74,123445,123446],{"class":144},"#移除snapd的一些目录\n",[74,123448,123449,123451,123453,123455],{"class":76,"line":1156},[74,123450,28857],{"class":1925},[74,123452,122834],{"class":190},[74,123454,29606],{"class":134},[74,123456,123457],{"class":190}," \u002Fvar\u002Fcache\u002Fsnapd\n",[74,123459,123460,123462,123464,123466],{"class":76,"line":1162},[74,123461,28857],{"class":1925},[74,123463,122834],{"class":190},[74,123465,29606],{"class":134},[74,123467,123468],{"class":190}," ~\u002Fsnap\n",[19,123470,123471,123472,123475],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[71,123473,123474],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[44,123477,123479],{"id":123478},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,123481,123482],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[64,123484,123486],{"className":121577,"code":123485,"language":121579,"meta":69,"style":69},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[71,123487,123488],{"__ignoreMap":69},[74,123489,123490,123492,123494],{"class":76,"line":77},[74,123491,28857],{"class":1925},[74,123493,122864],{"class":190},[74,123495,123496],{"class":190}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,123498,123499,123500,123503],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[71,123501,123502],{},":wq"," 回车",[64,123505,123507],{"className":121577,"code":123506,"language":121579,"meta":69,"style":69},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[71,123508,123509,123516,123530],{"__ignoreMap":69},[74,123510,123511,123514],{"class":76,"line":77},[74,123512,123513],{"class":1925},"Package:",[74,123515,123365],{"class":190},[74,123517,123518,123521,123524,123527],{"class":76,"line":94},[74,123519,123520],{"class":1925},"Pin:",[74,123522,123523],{"class":190}," release",[74,123525,123526],{"class":190}," a=",[74,123528,123529],{"class":134},"*\n",[74,123531,123532,123535],{"class":76,"line":1141},[74,123533,123534],{"class":1925},"Pin-Priority:",[74,123536,123537],{"class":134}," -10\n",[19,123539,123540],{},[1424,123541],{"alt":69,"src":123542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[44,123544,123546],{"id":123545},"_326-测试是否成功","3.2.6 测试是否成功",[64,123548,123550],{"className":121577,"code":123549,"language":121579,"meta":69,"style":69},"sudo apt update\nsudo apt install firefox\n",[71,123551,123552,123560],{"__ignoreMap":69},[74,123553,123554,123556,123558],{"class":76,"line":77},[74,123555,28857],{"class":1925},[74,123557,121598],{"class":190},[74,123559,30523],{"class":190},[74,123561,123562,123564,123566,123568],{"class":76,"line":94},[74,123563,28857],{"class":1925},[74,123565,121598],{"class":190},[74,123567,28114],{"class":190},[74,123569,123286],{"class":190},[19,123571,123572],{},"这里提示snapd无法被安装，就证明成功了",[19,123574,123575],{},[1424,123576],{"alt":69,"src":123577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[44,123579,123581],{"id":123580},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,123583,123584],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,123586,123587],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,123589,123590],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[64,123592,123594],{"className":121577,"code":123593,"language":121579,"meta":69,"style":69},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[71,123595,123596,123601,123610,123615,123623],{"__ignoreMap":69},[74,123597,123598],{"class":76,"line":77},[74,123599,123600],{"class":144},"# 添加Mozilla提供的源\n",[74,123602,123603,123605,123607],{"class":76,"line":94},[74,123604,28857],{"class":1925},[74,123606,123125],{"class":190},[74,123608,123609],{"class":190}," ppa:mozillateam\u002Fppa\n",[74,123611,123612],{"class":76,"line":1141},[74,123613,123614],{"class":144},"# 安装Firefox\n",[74,123616,123617,123619,123621],{"class":76,"line":1156},[74,123618,28857],{"class":1925},[74,123620,121598],{"class":190},[74,123622,30523],{"class":190},[74,123624,123625,123627,123629,123631],{"class":76,"line":1162},[74,123626,28857],{"class":1925},[74,123628,121598],{"class":190},[74,123630,28114],{"class":190},[74,123632,123286],{"class":190},[44,123634,123636],{"id":123635},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,123638,123639],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,123641,123642],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[64,123644,123646],{"className":121577,"code":123645,"language":121579,"meta":69,"style":69},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[71,123647,123648,123653,123663,123671,123675],{"__ignoreMap":69},[74,123649,123650],{"class":76,"line":77},[74,123651,123652],{"class":144},"#删掉禁止安装snap的配置文件\n",[74,123654,123655,123657,123659,123661],{"class":76,"line":94},[74,123656,28857],{"class":1925},[74,123658,122834],{"class":190},[74,123660,29606],{"class":134},[74,123662,123496],{"class":190},[74,123664,123665,123667,123669],{"class":76,"line":1141},[74,123666,28857],{"class":1925},[74,123668,121598],{"class":190},[74,123670,30523],{"class":190},[74,123672,123673],{"class":76,"line":1156},[74,123674,2363],{"emptyLinePlaceholder":2362},[74,123676,123677,123679,123681],{"class":76,"line":1162},[74,123678,28857],{"class":1925},[74,123680,121598],{"class":190},[74,123682,123683],{"class":190}," dist-update\n",[14,123685,123687],{"id":123686},"_33-中文输入法","3.3 中文输入法",[44,123689,123691],{"id":123690},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,123693,123694],{},"官网下载搜狗输入法",[19,123696,123697],{},[1424,123698],{"alt":69,"src":123699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,123701,123702],{},[1424,123703],{"alt":69,"src":123704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,123706,123707],{},"打开终端输入如下",[64,123709,123711],{"className":121577,"code":123710,"language":121579,"meta":69,"style":69},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[71,123712,123713,123720],{"__ignoreMap":69},[74,123714,123715,123717],{"class":76,"line":77},[74,123716,105557],{"class":134},[74,123718,123719],{"class":190}," ~\u002FDownloads\u002F\n",[74,123721,123722,123724,123726,123728],{"class":76,"line":94},[74,123723,28857],{"class":1925},[74,123725,121598],{"class":190},[74,123727,28114],{"class":190},[74,123729,123730],{"class":190}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,123732,123733],{},"打开Fcitx",[19,123735,123736,123739],{},[1424,123737],{"alt":69,"src":123738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1424,123740],{"alt":69,"src":123741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,123743,123744],{},[1424,123745],{"alt":69,"src":123746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,123748,123749],{},"添加搜狗输入法",[19,123751,123752],{},[1424,123753],{"alt":69,"src":123754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,123756,123757],{},[1424,123758],{"alt":69,"src":123759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,123761,123762],{},"将搜狗输入法设置为唯一输入法",[19,123764,123765],{},[1424,123766],{"alt":69,"src":123767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[44,123769,123771],{"id":123770},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[27,123773,123774],{},[30,123775,123776],{},"卸载旧输入法",[64,123778,123780],{"className":122804,"code":123779,"language":122806,"meta":69,"style":69},"sudo apt purge fcitx* ibus*\n",[71,123781,123782],{"__ignoreMap":69},[74,123783,123784,123786,123788,123790,123793,123795,123798],{"class":76,"line":77},[74,123785,28857],{"class":1925},[74,123787,121598],{"class":190},[74,123789,121939],{"class":190},[74,123791,123792],{"class":190}," fcitx",[74,123794,541],{"class":134},[74,123796,123797],{"class":190}," ibus",[74,123799,123529],{"class":134},[27,123801,123802],{"start":94},[30,123803,123804],{},"安装Fcitx5",[64,123806,123808],{"className":121577,"code":123807,"language":121579,"meta":69,"style":69},"# 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",[71,123809,123810,123815,123829,123833,123838,123847,123855],{"__ignoreMap":69},[74,123811,123812],{"class":76,"line":77},[74,123813,123814],{"class":144},"# Ubuntu22.04及以上、Debian12及以上\n",[74,123816,123817,123819,123821,123823,123826],{"class":76,"line":94},[74,123818,28857],{"class":1925},[74,123820,121598],{"class":190},[74,123822,28114],{"class":190},[74,123824,123825],{"class":190}," fcitx5",[74,123827,123828],{"class":190}," fcitx5-chinese-addons\n",[74,123830,123831],{"class":76,"line":1141},[74,123832,2363],{"emptyLinePlaceholder":2362},[74,123834,123835],{"class":76,"line":1156},[74,123836,123837],{"class":144},"# Ubuntu20.04\n",[74,123839,123840,123842,123844],{"class":76,"line":1162},[74,123841,28857],{"class":1925},[74,123843,123125],{"class":190},[74,123845,123846],{"class":190}," ppa:zhsj\u002Ffcitx5\n",[74,123848,123849,123851,123853],{"class":76,"line":1176},[74,123850,28857],{"class":1925},[74,123852,121598],{"class":190},[74,123854,30523],{"class":190},[74,123856,123857,123859,123861,123863,123865],{"class":76,"line":1182},[74,123858,28857],{"class":1925},[74,123860,121598],{"class":190},[74,123862,28114],{"class":190},[74,123864,123825],{"class":190},[74,123866,123828],{"class":190},[27,123868,123869,123872],{"start":1141},[30,123870,123871],{},"Reboot System",[30,123873,123874],{},"启动Fcitx5",[19,123876,123877],{},[1424,123878],{"alt":69,"src":123879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[27,123881,123882],{"start":1162},[30,123883,123884],{},"修改一些设置",[19,123886,123887],{},"将Pinyin和Keyboard - English US加入到左边。",[19,123889,123890],{},[1424,123891],{"alt":69,"src":123892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,123894,123895],{},"添加快捷键以便于更好切换中英文",[19,123897,123898],{},[1424,123899],{"alt":69,"src":123900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[27,123902,123903],{"start":1176},[30,123904,123905],{},"重启",[64,123907,123909],{"className":122804,"code":123908,"language":122806,"meta":69,"style":69},"sudo shutdown -r now\n",[71,123910,123911],{"__ignoreMap":69},[74,123912,123913,123915,123918,123921],{"class":76,"line":77},[74,123914,28857],{"class":1925},[74,123916,123917],{"class":190}," shutdown",[74,123919,123920],{"class":134}," -r",[74,123922,123923],{"class":190}," now\n",[27,123925,123926],{"start":1182},[30,123927,123928],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,123930,123931],{},[324,123932,123933],{"href":123933,"rel":123934},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[28145],[27,123936,123937],{"start":1273},[30,123938,123939],{},"再重启",[64,123941,123942],{"className":122804,"code":123908,"language":122806,"meta":69,"style":69},[71,123943,123944],{"__ignoreMap":69},[74,123945,123946,123948,123950,123952],{"class":76,"line":77},[74,123947,28857],{"class":1925},[74,123949,123917],{"class":190},[74,123951,123920],{"class":134},[74,123953,123923],{"class":190},[14,123955,123957],{"id":123956},"_34-pip3源替换","3.4 pip3源替换",[19,123959,123960],{},"非Debian系发行版需要做。",[19,123962,123963],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,123965,123966],{},"使用dnf的系统也可能不用做。",[64,123968,123970],{"className":121577,"code":123969,"language":121579,"meta":69,"style":69},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[71,123971,123972,123977,123984,123989,123994],{"__ignoreMap":69},[74,123973,123974],{"class":76,"line":77},[74,123975,123976],{"class":144},"# 检查是否已安装 pip\n",[74,123978,123979,123982],{"class":76,"line":94},[74,123980,123981],{"class":1925},"pip3",[74,123983,30574],{"class":134},[74,123985,123986],{"class":76,"line":1141},[74,123987,123988],{"class":144},"# 如果未安装，先安装 pip3（见下方）\n",[74,123990,123991],{"class":76,"line":1156},[74,123992,123993],{"class":144},"# 配置 pip 使用清华源\n",[74,123995,123996,123998,124001,124004,124007],{"class":76,"line":1162},[74,123997,123981],{"class":1925},[74,123999,124000],{"class":190}," config",[74,124002,124003],{"class":190}," set",[74,124005,124006],{"class":190}," global.index-url",[74,124008,124009],{"class":190}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,124011,124012],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,124014,124015],{},[1424,124016],{"alt":69,"src":124017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[64,124019,124021],{"className":121577,"code":124020,"language":121579,"meta":69,"style":69},"#安装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",[71,124022,124023,124028,124036,124047,124051,124056,124075,124079,124084,124096,124100,124105],{"__ignoreMap":69},[74,124024,124025],{"class":76,"line":77},[74,124026,124027],{"class":144},"#安装pip3\n",[74,124029,124030,124032,124034],{"class":76,"line":94},[74,124031,28857],{"class":1925},[74,124033,121598],{"class":190},[74,124035,30523],{"class":190},[74,124037,124038,124040,124042,124044],{"class":76,"line":1141},[74,124039,28857],{"class":1925},[74,124041,30357],{"class":190},[74,124043,28114],{"class":190},[74,124045,124046],{"class":190}," python3-pip\n",[74,124048,124049],{"class":76,"line":1156},[74,124050,2363],{"emptyLinePlaceholder":2362},[74,124052,124053],{"class":76,"line":1162},[74,124054,124055],{"class":144},"#更新pip3\n",[74,124057,124058,124060,124062,124064,124066,124068,124071,124073],{"class":76,"line":1176},[74,124059,105160],{"class":1925},[74,124061,105163],{"class":134},[74,124063,105186],{"class":190},[74,124065,28114],{"class":190},[74,124067,30711],{"class":134},[74,124069,124070],{"class":190}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[74,124072,105191],{"class":134},[74,124074,105194],{"class":190},[74,124076,124077],{"class":76,"line":1182},[74,124078,2363],{"emptyLinePlaceholder":2362},[74,124080,124081],{"class":76,"line":1273},[74,124082,124083],{"class":144},"#设置pip源为清华源\n",[74,124085,124086,124088,124090,124092,124094],{"class":76,"line":1279},[74,124087,123981],{"class":1925},[74,124089,124000],{"class":190},[74,124091,124003],{"class":190},[74,124093,124006],{"class":190},[74,124095,124009],{"class":190},[74,124097,124098],{"class":76,"line":1291},[74,124099,2363],{"emptyLinePlaceholder":2362},[74,124101,124102],{"class":76,"line":1574},[74,124103,124104],{"class":144},"#测试\n",[74,124106,124107,124109,124111,124113,124115,124117],{"class":76,"line":1579},[74,124108,105160],{"class":1925},[74,124110,105163],{"class":134},[74,124112,105186],{"class":190},[74,124114,28114],{"class":190},[74,124116,105191],{"class":134},[74,124118,105194],{"class":190},[19,124120,124121],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,124123,124124],{},[1424,124125],{"alt":69,"src":124126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,124128,124130],{"id":124129},"_35-显卡驱动安装","3.5 显卡驱动安装",[44,124132,124134],{"id":124133},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[64,124136,124138],{"className":122804,"code":124137,"language":122806,"meta":69,"style":69},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[71,124139,124140,124145,124160,124165],{"__ignoreMap":69},[74,124141,124142],{"class":76,"line":77},[74,124143,124144],{"class":144},"# 如果是使用apt安装的驱动\n",[74,124146,124147,124149,124151,124153,124155,124158],{"class":76,"line":94},[74,124148,28857],{"class":1925},[74,124150,30357],{"class":190},[74,124152,30360],{"class":190},[74,124154,123439],{"class":134},[74,124156,124157],{"class":190}," nvidia",[74,124159,123529],{"class":134},[74,124161,124162],{"class":76,"line":1141},[74,124163,124164],{"class":144},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[74,124166,124167,124169],{"class":76,"line":1156},[74,124168,28857],{"class":1925},[74,124170,124171],{"class":190}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[44,124173,124175],{"id":124174},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[26277,124177,124179],{"id":124178},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[27189,124181,124183],{"id":124182},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[64,124185,124187],{"className":122804,"code":124186,"language":122806,"meta":69,"style":69},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[71,124188,124189,124194,124205,124210,124220,124225],{"__ignoreMap":69},[74,124190,124191],{"class":76,"line":77},[74,124192,124193],{"class":144},"# 安装英伟达驱动\n",[74,124195,124196,124198,124200,124202],{"class":76,"line":94},[74,124197,28857],{"class":1925},[74,124199,121598],{"class":190},[74,124201,28114],{"class":190},[74,124203,124204],{"class":190}," nvidia-driver-版本号\n",[74,124206,124207],{"class":76,"line":1141},[74,124208,124209],{"class":144},"# 重启 \n",[74,124211,124212,124214,124216,124218],{"class":76,"line":1156},[74,124213,28857],{"class":1925},[74,124215,123917],{"class":190},[74,124217,123920],{"class":134},[74,124219,123923],{"class":190},[74,124221,124222],{"class":76,"line":1162},[74,124223,124224],{"class":144},"# 检查驱动是否安装成功\n",[74,124226,124227],{"class":76,"line":1176},[74,124228,124229],{"class":1925},"nvidia-smi\n",[27189,124231,124233],{"id":124232},"_35212-debian","3.5.2.1.2 Debian",[64,124235,124237],{"className":122804,"code":124236,"language":122806,"meta":69,"style":69},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[71,124238,124239,124243,124257,124261,124271,124275],{"__ignoreMap":69},[74,124240,124241],{"class":76,"line":77},[74,124242,124193],{"class":144},[74,124244,124245,124247,124249,124251,124254],{"class":76,"line":94},[74,124246,28857],{"class":1925},[74,124248,121598],{"class":190},[74,124250,28114],{"class":190},[74,124252,124253],{"class":190}," nvidia-driver",[74,124255,124256],{"class":190}," nvidia-settings\n",[74,124258,124259],{"class":76,"line":1141},[74,124260,124209],{"class":144},[74,124262,124263,124265,124267,124269],{"class":76,"line":1156},[74,124264,28857],{"class":1925},[74,124266,123917],{"class":190},[74,124268,123920],{"class":134},[74,124270,123923],{"class":190},[74,124272,124273],{"class":76,"line":1162},[74,124274,124224],{"class":144},[74,124276,124277],{"class":76,"line":1176},[74,124278,124229],{"class":1925},[26277,124280,124282],{"id":124281},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,124284,124285,124286,124289],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[235,124287,124288],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,124291,124292,124293],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[27833,124294,124295],{},[235,124296,124297],{},"（也可以不禁用桌面环境，直接进行下一步。）",[64,124299,124301],{"className":122804,"code":124300,"language":122806,"meta":69,"style":69},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[71,124302,124303,124308,124318,124323,124336,124341],{"__ignoreMap":69},[74,124304,124305],{"class":76,"line":77},[74,124306,124307],{"class":144},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[74,124309,124310,124312,124315],{"class":76,"line":94},[74,124311,28857],{"class":1925},[74,124313,124314],{"class":190}," telinit",[74,124316,124317],{"class":134}," 3\n",[74,124319,124320],{"class":76,"line":1141},[74,124321,124322],{"class":144},"# ubuntu 使用下方命令\n",[74,124324,124325,124327,124330,124333],{"class":76,"line":1156},[74,124326,28857],{"class":1925},[74,124328,124329],{"class":190}," service",[74,124331,124332],{"class":190}," lightdm",[74,124334,124335],{"class":190}," stop\n",[74,124337,124338],{"class":76,"line":1162},[74,124339,124340],{"class":144},"# Fedora 使用下方命令\n",[74,124342,124343,124345,124347,124350],{"class":76,"line":1176},[74,124344,28857],{"class":1925},[74,124346,30794],{"class":190},[74,124348,124349],{"class":190}," isolate",[74,124351,124352],{"class":190}," multi-user.target\n",[19,124354,124355],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[64,124357,124359],{"className":122804,"code":124358,"language":122806,"meta":69,"style":69},"# 编译环境+准备工作\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",[71,124360,124361,124366,124377,124382,124389,124394,124406,124411,124418,124423],{"__ignoreMap":69},[74,124362,124363],{"class":76,"line":77},[74,124364,124365],{"class":144},"# 编译环境+准备工作\n",[74,124367,124368,124370,124372,124374],{"class":76,"line":94},[74,124369,28857],{"class":1925},[74,124371,121598],{"class":190},[74,124373,28114],{"class":190},[74,124375,124376],{"class":190}," build-essential\n",[74,124378,124379],{"class":76,"line":1141},[74,124380,124381],{"class":144},"# 进入到.run目录中\n",[74,124383,124384,124386],{"class":76,"line":1156},[74,124385,105557],{"class":134},[74,124387,124388],{"class":190}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[74,124390,124391],{"class":76,"line":1162},[74,124392,124393],{"class":144},"# 给驱动文件增加可执行权限：\n",[74,124395,124396,124398,124400,124403],{"class":76,"line":1176},[74,124397,28857],{"class":1925},[74,124399,28860],{"class":190},[74,124401,124402],{"class":190}," a+x",[74,124404,124405],{"class":190}," NVIDIA-Linux-x86_64-550.107.02.run\n",[74,124407,124408],{"class":76,"line":1182},[74,124409,124410],{"class":144},"# 然后执行安装：\n",[74,124412,124413,124415],{"class":76,"line":1273},[74,124414,28857],{"class":1925},[74,124416,124417],{"class":190}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[74,124419,124420],{"class":76,"line":1279},[74,124421,124422],{"class":144},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[74,124424,124425,124427,124430],{"class":76,"line":1291},[74,124426,28857],{"class":1925},[74,124428,124429],{"class":190}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[74,124431,124432],{"class":134},"  --no-opengl-files\n",[19,124434,124435],{},"安装完毕重启即可",[64,124437,124439],{"className":122804,"code":124438,"language":122806,"meta":69,"style":69},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[71,124440,124441,124445,124451,124455],{"__ignoreMap":69},[74,124442,124443],{"class":76,"line":77},[74,124444,124209],{"class":144},[74,124446,124447,124449],{"class":76,"line":94},[74,124448,28857],{"class":1925},[74,124450,30928],{"class":190},[74,124452,124453],{"class":76,"line":1141},[74,124454,124224],{"class":144},[74,124456,124457],{"class":76,"line":1156},[74,124458,124229],{"class":1925},[44,124460,124462],{"id":124461},"_353-安装cuda","3.5.3 安装CUDA",[19,124464,124465],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,124467,124468],{},[1424,124469],{"alt":69,"src":124470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[27,124472,124473],{},[30,124474,124475],{},"先查看显卡驱动所支持的最高CUDA版本",[64,124477,124478],{"className":122804,"code":124229,"language":122806,"meta":69,"style":69},[71,124479,124480],{"__ignoreMap":69},[74,124481,124482],{"class":76,"line":77},[74,124483,124229],{"class":1925},[19,124485,124486],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,124488,124489],{},[1424,124490],{"alt":69,"src":124491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[27,124493,124494],{"start":94},[30,124495,124496],{},"下载CUDA并安装CUDA",[19,124498,122583,124499],{},[324,124500,122586],{"href":122586,"rel":124501},[28145],[19,124503,124504],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,124506,124507],{},[1424,124508],{"alt":69,"src":124509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,124511,124512,124513,124518],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[324,124514,124517],{"href":124515,"rel":124516},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[28145],"Vinci机器人队单片机教程","）",[19,124520,124521],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,124523,124524],{},[1424,124525],{"alt":69,"src":124526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,124528,124529],{},"将最下方框框里的命令敲入终端",[64,124531,124533],{"className":122804,"code":124532,"language":122806,"meta":69,"style":69},"# 在当前文件夹下创建一个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",[71,124534,124535,124540,124549,124554,124561,124566,124574,124579,124590,124595],{"__ignoreMap":69},[74,124536,124537],{"class":76,"line":77},[74,124538,124539],{"class":144},"# 在当前文件夹下创建一个ttt的子文件夹\n",[74,124541,124542,124544,124546],{"class":76,"line":94},[74,124543,105547],{"class":1925},[74,124545,33497],{"class":134},[74,124547,124548],{"class":190}," .\u002Fttt\n",[74,124550,124551],{"class":76,"line":1141},[74,124552,124553],{"class":144},"# 进入ttt文件夹\n",[74,124555,124556,124558],{"class":76,"line":1156},[74,124557,105557],{"class":134},[74,124559,124560],{"class":190}," ttt\n",[74,124562,124563],{"class":76,"line":1162},[74,124564,124565],{"class":144},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[74,124567,124568,124571],{"class":76,"line":1176},[74,124569,124570],{"class":1925},"wget",[74,124572,124573],{"class":190}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[74,124575,124576],{"class":76,"line":1182},[74,124577,124578],{"class":144},"# 给予权限\n",[74,124580,124581,124583,124585,124587],{"class":76,"line":1273},[74,124582,28857],{"class":1925},[74,124584,28860],{"class":190},[74,124586,124402],{"class":190},[74,124588,124589],{"class":190}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[74,124591,124592],{"class":76,"line":1279},[74,124593,124594],{"class":144},"# 运行脚本\n",[74,124596,124597,124599],{"class":76,"line":1291},[74,124598,28857],{"class":1925},[74,124600,124589],{"class":190},[19,124602,124603],{},[1424,124604],{"alt":69,"src":124605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,124607,124608],{},"正在安装中：",[19,124610,124611],{},[1424,124612],{"alt":69,"src":124613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,124615,124616],{},"输入accept接受即可",[19,124618,124619],{},[1424,124620],{"alt":69,"src":124621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,124623,124624],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,124626,124627],{},[1424,124628],{"alt":69,"src":124629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,124631,124632],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,124634,124635],{},[1424,124636],{"alt":69,"src":124637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[27,124639,124640],{"start":1141},[30,124641,124642],{},"配置环境",[19,124644,124645],{},"根据上方确认一下路径，比如我上面红色框起来的为",[64,124647,124649],{"className":122804,"code":124648,"language":122806,"meta":69,"style":69},"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",[71,124650,124651,124667,124682],{"__ignoreMap":69},[74,124652,124653,124656,124659,124662,124665],{"class":76,"line":77},[74,124654,124655],{"class":1925},"Please",[74,124657,124658],{"class":190}," make",[74,124660,124661],{"class":190}," sure",[74,124663,124664],{"class":190}," that",[74,124666,2637],{"class":84},[74,124668,124669,124671,124674,124677,124680],{"class":76,"line":94},[74,124670,56552],{"class":1925},[74,124672,124673],{"class":190},"   PATH",[74,124675,124676],{"class":190}," includes",[74,124678,124679],{"class":190}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[74,124681,2637],{"class":84},[74,124683,124684,124686,124689,124691,124694,124697,124699,124702,124705,124708,124711,124713,124716,124718],{"class":76,"line":1141},[74,124685,56552],{"class":1925},[74,124687,124688],{"class":190},"   LD_LIBRARY_PATH",[74,124690,124676],{"class":190},[74,124692,124693],{"class":190}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[74,124695,124696],{"class":190}," or,",[74,124698,9488],{"class":190},[74,124700,124701],{"class":190}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[74,124703,124704],{"class":190}," to",[74,124706,124707],{"class":190}," \u002Fetc\u002Fld.so.conf",[74,124709,124710],{"class":190}," and",[74,124712,31511],{"class":190},[74,124714,124715],{"class":190}," ldconfig",[74,124717,68885],{"class":190},[74,124719,124720],{"class":190}," root\n",[19,124722,124723],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[64,124725,124727],{"className":122804,"code":124726,"language":122806,"meta":69,"style":69},"which nvcc\n",[71,124728,124729],{"__ignoreMap":69},[74,124730,124731,124734],{"class":76,"line":77},[74,124732,124733],{"class":134},"which",[74,124735,124736],{"class":190}," nvcc\n",[19,124738,124739],{},[1424,124740],{"alt":69,"src":124741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,124743,124744],{},"所以我进行以下操作：",[64,124746,124748],{"className":122804,"code":124747,"language":122806,"meta":69,"style":69},"sudo vim ~\u002F.bashrc\n",[71,124749,124750],{"__ignoreMap":69},[74,124751,124752,124754,124756],{"class":76,"line":77},[74,124753,28857],{"class":1925},[74,124755,122864],{"class":190},[74,124757,124758],{"class":190}," ~\u002F.bashrc\n",[19,124760,124761],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[64,124763,124765],{"className":122804,"code":124764,"language":122806,"meta":69,"style":69},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[71,124766,124767,124779],{"__ignoreMap":69},[74,124768,124769,124771,124774,124776],{"class":76,"line":77},[74,124770,29323],{"class":80},[74,124772,124773],{"class":84}," PATH",[74,124775,131],{"class":80},[74,124777,124778],{"class":84},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[74,124780,124781,124783,124786,124788],{"class":76,"line":94},[74,124782,29323],{"class":80},[74,124784,124785],{"class":84}," LD_LIBRARY_PATH",[74,124787,131],{"class":80},[74,124789,124790],{"class":84},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,124792,124793],{},[1424,124794],{"alt":69,"src":124795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[64,124797,124799],{"className":122804,"code":124798,"language":122806,"meta":69,"style":69},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[71,124800,124801,124806,124812,124817],{"__ignoreMap":69},[74,124802,124803],{"class":76,"line":77},[74,124804,124805],{"class":144},"# 刷新当前终端的环境变量\n",[74,124807,124808,124810],{"class":76,"line":94},[74,124809,105174],{"class":134},[74,124811,124758],{"class":190},[74,124813,124814],{"class":76,"line":1141},[74,124815,124816],{"class":144},"# 验证CUDA是否安装成功\n",[74,124818,124819,124822],{"class":76,"line":1156},[74,124820,124821],{"class":1925},"nvcc",[74,124823,124824],{"class":134}," -V\n",[19,124826,124827],{},"出现下图这种则安装成功。",[19,124829,124830],{},[1424,124831],{"alt":69,"src":124832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[44,124834,124836],{"id":124835},"_354-安装cudnn","3.5.4 安装cuDNN",[27,124838,124839],{},[30,124840,124841],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,124843,124844,124845,124850],{},"前往 NVIDIA cuDNN 下载页面：",[324,124846,124849],{"href":124847,"rel":124848},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[28145],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,124852,124853],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,124855,124856],{},[1424,124857],{"alt":69,"src":124858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,124860,124861],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,124863,124864],{},[1424,124865],{"alt":69,"src":124866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,124868,124869],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,124871,124872],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,124874,124875],{},[235,124876,124877],{},"我这里选择所有Linux X86_64最通用的办法：",[19,124879,124880],{},"下载好的：",[19,124882,124883],{},[1424,124884],{"alt":69,"src":124885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[27,124887,124888],{"start":94},[30,124889,124890],{},"安装cuDNN",[19,124892,124893],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,124895,124896],{},[1424,124897],{"alt":69,"src":124898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,124900,124901],{},"解压文件，并复制到对应位置完成安装",[64,124903,124905],{"className":122804,"code":124904,"language":122806,"meta":69,"style":69},"# 解压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",[71,124906,124907,124912,124923,124928,124935,124940,124956,124970,124975,124986,124995,124999,125015],{"__ignoreMap":69},[74,124908,124909],{"class":76,"line":77},[74,124910,124911],{"class":144},"# 解压cuDNN文件\n",[74,124913,124914,124917,124920],{"class":76,"line":94},[74,124915,124916],{"class":1925},"tar",[74,124918,124919],{"class":134}," -xvf",[74,124921,124922],{"class":190}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[74,124924,124925],{"class":76,"line":1141},[74,124926,124927],{"class":144},"# cd进文件夹\n",[74,124929,124930,124932],{"class":76,"line":1156},[74,124931,105557],{"class":134},[74,124933,124934],{"class":190}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[74,124936,124937],{"class":76,"line":1162},[74,124938,124939],{"class":144},"# 复制cuDNN文件到CUDA目录\n",[74,124941,124942,124944,124946,124949,124951,124954],{"class":76,"line":1176},[74,124943,28857],{"class":1925},[74,124945,32142],{"class":190},[74,124947,124948],{"class":190}," include\u002Fcudnn",[74,124950,541],{"class":134},[74,124952,124953],{"class":190},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[74,124955,2637],{"class":84},[74,124957,124958,124960,124962,124965,124967],{"class":76,"line":1182},[74,124959,28857],{"class":1925},[74,124961,32142],{"class":190},[74,124963,124964],{"class":190}," lib\u002Flibcudnn",[74,124966,541],{"class":134},[74,124968,124969],{"class":190},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[74,124971,124972],{"class":76,"line":1273},[74,124973,124974],{"class":144},"# 对比一下有没有缺文件\n",[74,124976,124977,124979,124982,124984],{"class":76,"line":1279},[74,124978,31042],{"class":1925},[74,124980,124981],{"class":190}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[74,124983,541],{"class":134},[74,124985,2637],{"class":84},[74,124987,124988,124990,124993],{"class":76,"line":1291},[74,124989,31042],{"class":1925},[74,124991,124992],{"class":190}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[74,124994,123529],{"class":134},[74,124996,124997],{"class":76,"line":1574},[74,124998,124578],{"class":144},[74,125000,125001,125003,125005,125008,125010,125012],{"class":76,"line":1579},[74,125002,28857],{"class":1925},[74,125004,28860],{"class":190},[74,125006,125007],{"class":190}," a+r",[74,125009,124981],{"class":190},[74,125011,541],{"class":134},[74,125013,125014],{"class":84},"   \n",[74,125016,125017,125019,125021,125023,125025],{"class":76,"line":1585},[74,125018,28857],{"class":1925},[74,125020,28860],{"class":190},[74,125022,125007],{"class":190},[74,125024,124992],{"class":190},[74,125026,123529],{"class":134},[27,125028,125029],{"start":1141},[30,125030,125031],{},"检查是否安装成功",[64,125033,125035],{"className":122804,"code":125034,"language":122806,"meta":69,"style":69},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[71,125036,125037,125042],{"__ignoreMap":69},[74,125038,125039],{"class":76,"line":77},[74,125040,125041],{"class":144},"# 检查cuDNN版本命令\n",[74,125043,125044,125047,125050,125052,125054,125057,125060],{"class":76,"line":94},[74,125045,125046],{"class":1925},"cat",[74,125048,125049],{"class":190}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[74,125051,29390],{"class":80},[74,125053,34517],{"class":1925},[74,125055,125056],{"class":190}," CUDNN_MAJOR",[74,125058,125059],{"class":134}," -A",[74,125061,52004],{"class":134},[19,125063,125064],{},"出现下图这样的就是安装成功了",[19,125066,125067],{},[1424,125068],{"alt":69,"src":125069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[27,125071,125072],{"start":1156},[30,125073,125074],{},"软链接(一般不需要)",[64,125076,125078],{"className":122804,"code":125077,"language":122806,"meta":69,"style":69},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[71,125079,125080,125085],{"__ignoreMap":69},[74,125081,125082],{"class":76,"line":77},[74,125083,125084],{"class":144},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[74,125086,125087,125089],{"class":76,"line":94},[74,125088,28857],{"class":1925},[74,125090,125091],{"class":190}," ldconfig\n",[19,125093,125094],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[64,125096,125101],{"className":125097,"code":125098,"language":125099,"meta":125100,"style":69},"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",[71,125102,125103,125108,125113,125118,125123,125128,125133],{"__ignoreMap":69},[74,125104,125105],{"class":76,"line":77},[74,125106,125107],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[74,125109,125110],{"class":76,"line":94},[74,125111,125112],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[74,125114,125115],{"class":76,"line":1141},[74,125116,125117],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[74,125119,125120],{"class":76,"line":1156},[74,125121,125122],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[74,125124,125125],{"class":76,"line":1162},[74,125126,125127],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[74,125129,125130],{"class":76,"line":1176},[74,125131,125132],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[74,125134,125135],{"class":76,"line":1182},[74,125136,125137],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,125139,125140],{},"运行下方的命令",[64,125142,125144],{"className":122804,"code":125143,"language":122806,"meta":69,"style":69},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[71,125145,125146,125151,125158,125163],{"__ignoreMap":69},[74,125147,125148],{"class":76,"line":77},[74,125149,125150],{"class":144},"# cd进入CUDA路径\n",[74,125152,125153,125155],{"class":76,"line":94},[74,125154,105557],{"class":134},[74,125156,125157],{"class":190}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[74,125159,125160],{"class":76,"line":1141},[74,125161,125162],{"class":144}," # 查看本路径下的需要软链接的文件名\n",[74,125164,125165],{"class":76,"line":1156},[74,125166,125167],{"class":1925}," ls\n",[19,125169,125170],{},[1424,125171],{"alt":69,"src":125172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,125174,125175,125176,22689,125179,22689,125182,125185],{},"如上图，我需要将",[71,125177,125178],{},"libcudnn_xxx_xxxxx.so.8.9.7",[71,125180,125181],{},"libcudnn_xxx_xxxxx.so.8",[71,125183,125184],{},"libcudnn_xxx_xxxxx.so","软链接",[64,125187,125189],{"className":122804,"code":125188,"language":122806,"meta":69,"style":69},"# 创建符号链接。对于每个 .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",[71,125190,125191,125196,125212,125226,125240,125254,125268,125282,125296,125301,125307,125312],{"__ignoreMap":69},[74,125192,125193],{"class":76,"line":77},[74,125194,125195],{"class":144},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[74,125197,125198,125200,125203,125206,125209],{"class":76,"line":94},[74,125199,28857],{"class":1925},[74,125201,125202],{"class":190}," ln",[74,125204,125205],{"class":134}," -sf",[74,125207,125208],{"class":190}," libcudnn_cnn_train.so.8.9.7",[74,125210,125211],{"class":190}," libcudnn_cnn_train.so.8\n",[74,125213,125214,125216,125218,125220,125223],{"class":76,"line":1141},[74,125215,28857],{"class":1925},[74,125217,125202],{"class":190},[74,125219,125205],{"class":134},[74,125221,125222],{"class":190}," libcudnn_adv_infer.so.8.9.7",[74,125224,125225],{"class":190}," libcudnn_adv_infer.so.8\n",[74,125227,125228,125230,125232,125234,125237],{"class":76,"line":1156},[74,125229,28857],{"class":1925},[74,125231,125202],{"class":190},[74,125233,125205],{"class":134},[74,125235,125236],{"class":190}," libcudnn_adv_train.so.8.9.7",[74,125238,125239],{"class":190}," libcudnn_adv_train.so.8\n",[74,125241,125242,125244,125246,125248,125251],{"class":76,"line":1162},[74,125243,28857],{"class":1925},[74,125245,125202],{"class":190},[74,125247,125205],{"class":134},[74,125249,125250],{"class":190}," libcudnn_cnn_infer.so.8.9.7",[74,125252,125253],{"class":190}," libcudnn_cnn_infer.so.8\n",[74,125255,125256,125258,125260,125262,125265],{"class":76,"line":1176},[74,125257,28857],{"class":1925},[74,125259,125202],{"class":190},[74,125261,125205],{"class":134},[74,125263,125264],{"class":190}," libcudnn.so.8.9.7",[74,125266,125267],{"class":190}," libcudnn.so.8\n",[74,125269,125270,125272,125274,125276,125279],{"class":76,"line":1182},[74,125271,28857],{"class":1925},[74,125273,125202],{"class":190},[74,125275,125205],{"class":134},[74,125277,125278],{"class":190}," libcudnn_ops_infer.so.8.9.7",[74,125280,125281],{"class":190}," libcudnn_ops_infer.so.8\n",[74,125283,125284,125286,125288,125290,125293],{"class":76,"line":1273},[74,125285,28857],{"class":1925},[74,125287,125202],{"class":190},[74,125289,125205],{"class":134},[74,125291,125292],{"class":190}," libcudnn_ops_train.so.8.9.7",[74,125294,125295],{"class":190}," libcudnn_ops_train.so.8\n",[74,125297,125298],{"class":76,"line":1279},[74,125299,125300],{"class":144},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[74,125302,125303,125305],{"class":76,"line":1291},[74,125304,28857],{"class":1925},[74,125306,125091],{"class":190},[74,125308,125309],{"class":76,"line":1574},[74,125310,125311],{"class":144},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[74,125313,125314,125316,125319,125322,125324,125327],{"class":76,"line":1579},[74,125315,31042],{"class":1925},[74,125317,125318],{"class":134}," -l",[74,125320,125321],{"class":190}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[74,125323,541],{"class":134},[74,125325,125326],{"class":190},".so",[74,125328,123529],{"class":134},[44,125330,125332],{"id":125331},"_355-常见问题","3.5.5 常见问题",[27,125334,125335],{},[30,125336,125337],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[64,125339,125341],{"className":122804,"code":125340,"language":122806,"meta":69,"style":69},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[71,125342,125343],{"__ignoreMap":69},[74,125344,125345,125347,125349],{"class":76,"line":77},[74,125346,28857],{"class":1925},[74,125348,122864],{"class":190},[74,125350,125351],{"class":190}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,125353,125354],{},"blacklist-nouveau.conf文件内容如下：",[64,125356,125358],{"className":122804,"code":125357,"language":122806,"meta":69,"style":69},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[71,125359,125360,125368,125375,125387,125397],{"__ignoreMap":69},[74,125361,125362,125365],{"class":76,"line":77},[74,125363,125364],{"class":1925},"blacklist",[74,125366,125367],{"class":190}," nouveau\n",[74,125369,125370,125372],{"class":76,"line":94},[74,125371,125364],{"class":1925},[74,125373,125374],{"class":190}," lbm-nouveau\n",[74,125376,125377,125379,125382,125385],{"class":76,"line":1141},[74,125378,120211],{"class":1925},[74,125380,125381],{"class":190}," nouveau",[74,125383,125384],{"class":190}," modeset=",[74,125386,3048],{"class":134},[74,125388,125389,125392,125394],{"class":76,"line":1156},[74,125390,125391],{"class":134},"alias",[74,125393,125381],{"class":190},[74,125395,125396],{"class":190}," off\n",[74,125398,125399,125401,125404],{"class":76,"line":1162},[74,125400,125391],{"class":134},[74,125402,125403],{"class":190}," lbm-nouveau",[74,125405,125396],{"class":190},[19,125407,125408],{},"接着运行下方命令",[64,125410,125412],{"className":122804,"code":125411,"language":122806,"meta":69,"style":69},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[71,125413,125414,125424,125429],{"__ignoreMap":69},[74,125415,125416,125418,125421],{"class":76,"line":77},[74,125417,28857],{"class":1925},[74,125419,125420],{"class":190}," update-initramfs",[74,125422,125423],{"class":134}," -u\n",[74,125425,125426],{"class":76,"line":94},[74,125427,125428],{"class":1925},"或者\n",[74,125430,125431,125433,125436],{"class":76,"line":1141},[74,125432,28857],{"class":1925},[74,125434,125435],{"class":190}," dracut",[74,125437,125438],{"class":134}," --force\n",[19,125440,125441],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[64,125443,125445],{"className":122804,"code":125444,"language":122806,"meta":69,"style":69},"lsmod | grep nouveau\n",[71,125446,125447],{"__ignoreMap":69},[74,125448,125449,125452,125454,125456],{"class":76,"line":77},[74,125450,125451],{"class":1925},"lsmod",[74,125453,29390],{"class":80},[74,125455,34517],{"class":1925},[74,125457,125367],{"class":190},[27,125459,125460],{"start":94},[30,125461,125462],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[64,125464,125466],{"className":122804,"code":125465,"language":122806,"meta":69,"style":69},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[71,125467,125468],{"__ignoreMap":69},[74,125469,125470,125472,125474],{"class":76,"line":77},[74,125471,28857],{"class":1925},[74,125473,122864],{"class":190},[74,125475,125476],{"class":190}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,125478,125479],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[64,125481,125483],{"className":122804,"code":125482,"language":122806,"meta":69,"style":69},"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",[71,125484,125485,125493,125501,125509,125516,125524,125534,125542],{"__ignoreMap":69},[74,125486,125487,125490],{"class":76,"line":77},[74,125488,125489],{"class":1925},"Section",[74,125491,125492],{"class":190}," \"OutputClass\"\n",[74,125494,125495,125498],{"class":76,"line":94},[74,125496,125497],{"class":1925},"   Identifier",[74,125499,125500],{"class":190}," \"nvidia\"\n",[74,125502,125503,125506],{"class":76,"line":1141},[74,125504,125505],{"class":1925},"   MatchDriver",[74,125507,125508],{"class":190}," \"nvidia-drm\"\n",[74,125510,125511,125514],{"class":76,"line":1156},[74,125512,125513],{"class":1925},"   Driver",[74,125515,125500],{"class":190},[74,125517,125518,125521],{"class":76,"line":1162},[74,125519,125520],{"class":1925},"   Option",[74,125522,125523],{"class":190}," \"AllowEmptyInitialConfiguration\"\n",[74,125525,125526,125528,125531],{"class":76,"line":1176},[74,125527,125520],{"class":1925},[74,125529,125530],{"class":190}," \"PrimaryGPU\"",[74,125532,125533],{"class":190}," \"yes\"\n",[74,125535,125536,125539],{"class":76,"line":1182},[74,125537,125538],{"class":1925},"   ModulePath",[74,125540,125541],{"class":190}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[74,125543,125544],{"class":76,"line":1273},[74,125545,125546],{"class":1925},"EndSection\n",[27,125548,125549],{"start":1141},[30,125550,125551],{},"安装N卡驱动提示错误",[64,125553,125555],{"className":125097,"code":125554,"language":125099,"meta":125100,"style":69},"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",[71,125556,125557],{"__ignoreMap":69},[74,125558,125559],{"class":76,"line":77},[74,125560,125554],{},[27,125562,125563],{},[30,125564,125565],{},"检查当前运行的内核版本：",[19,125567,125568],{},"运行以下命令以查看你当前正在使用的内核版本：",[64,125570,125572],{"className":121577,"code":125571,"language":121579,"meta":69,"style":69},"uname -r\n",[71,125573,125574],{"__ignoreMap":69},[74,125575,125576,125578],{"class":76,"line":77},[74,125577,74485],{"class":1925},[74,125579,125580],{"class":134}," -r\n",[27,125582,125583],{"start":94},[30,125584,125585],{},"安装内核开发文件：",[19,125587,125588,125589,125592],{},"确保你已经安装了与当前内核版本相匹配的 ",[71,125590,125591],{},"kernel-devel"," 包。运行以下命令来安装：",[64,125594,125596],{"className":121577,"code":125595,"language":121579,"meta":69,"style":69},"sudo dnf install kernel-devel-$(uname -r)\n",[71,125597,125598],{"__ignoreMap":69},[74,125599,125600,125602,125604,125606,125609,125611,125613,125615],{"class":76,"line":77},[74,125601,28857],{"class":1925},[74,125603,30596],{"class":190},[74,125605,28114],{"class":190},[74,125607,125608],{"class":190}," kernel-devel-",[74,125610,29380],{"class":84},[74,125612,74485],{"class":1925},[74,125614,123920],{"class":134},[74,125616,91],{"class":84},[19,125618,125619],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[27,125621,125622],{"start":1141},[30,125623,125624],{},"安装内核源代码（如果需要）：",[19,125626,125627],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[64,125629,125631],{"className":121577,"code":125630,"language":121579,"meta":69,"style":69},"sudo dnf install kernel-headers kernel-source\n",[71,125632,125633],{"__ignoreMap":69},[74,125634,125635,125637,125639,125641,125644],{"class":76,"line":77},[74,125636,28857],{"class":1925},[74,125638,30596],{"class":190},[74,125640,28114],{"class":190},[74,125642,125643],{"class":190}," kernel-headers",[74,125645,125646],{"class":190}," kernel-source\n",[27,125648,125649],{"start":1156},[30,125650,125651],{},"检查安装：",[19,125653,125654,125655,125658],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[71,125656,125657],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[64,125660,125662],{"className":121577,"code":125661,"language":121579,"meta":69,"style":69},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[71,125663,125664],{"__ignoreMap":69},[74,125665,125666,125668],{"class":76,"line":77},[74,125667,31042],{"class":1925},[74,125669,125670],{"class":190}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,125672,125673,125674,125677],{},"如果仍然遇到问题，可以通过 ",[71,125675,125676],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5090,125679,125680],{},"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":69,"searchDepth":94,"depth":94,"links":125682},[125683,125687,125697,125701,125702],{"id":122780,"depth":94,"text":122781,"children":125684},[125685,125686],{"id":122790,"depth":1141,"text":122791},{"id":122800,"depth":1141,"text":122801},{"id":123000,"depth":94,"text":123001,"children":125688},[125689,125690,125691,125692,125693,125694,125695,125696],{"id":123004,"depth":1141,"text":123005},{"id":123074,"depth":1141,"text":123075},{"id":123163,"depth":1141,"text":123164},{"id":123408,"depth":1141,"text":123409},{"id":123478,"depth":1141,"text":123479},{"id":123545,"depth":1141,"text":123546},{"id":123580,"depth":1141,"text":123581},{"id":123635,"depth":1141,"text":123636},{"id":123686,"depth":94,"text":123687,"children":125698},[125699,125700],{"id":123690,"depth":1141,"text":123691},{"id":123770,"depth":1141,"text":123771},{"id":123956,"depth":94,"text":123957},{"id":124129,"depth":94,"text":124130,"children":125703},[125704,125705,125706,125707,125708],{"id":124133,"depth":1141,"text":124134},{"id":124174,"depth":1141,"text":124175},{"id":124461,"depth":1141,"text":124462},{"id":124835,"depth":1141,"text":124836},{"id":125331,"depth":1141,"text":125332},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":122772,"description":27656},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":125715,"title":125716,"body":125717,"description":27656,"extension":5121,"meta":126057,"navigation":2362,"path":126058,"seo":126059,"stem":126060,"__hash__":126061},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":125718,"toc":126055},[125719,125722,125727,125730,125976,125981,125984,126020,126023,126052],[10,125720,125716],{"id":125721},"_4-命令教程长期积累",[27,125723,125724],{},[30,125725,125726],{},"大多数命令",[19,125728,125729],{},"常用 Linux 命令速查：",[64,125731,125733],{"className":121577,"code":125732,"language":121579,"meta":69,"style":69},"# 文件与目录\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",[71,125734,125735,125740,125747,125754,125762,125769,125776,125784,125792,125799,125806,125814,125818,125823,125830,125838,125845,125849,125854,125861,125869,125877,125885,125893,125897,125902,125910,125917,125924,125932,125940,125944,125949,125958,125967],{"__ignoreMap":69},[74,125736,125737],{"class":76,"line":77},[74,125738,125739],{"class":144},"# 文件与目录\n",[74,125741,125742,125744],{"class":76,"line":94},[74,125743,31042],{"class":1925},[74,125745,125746],{"class":144},"        # 列出目录内容\n",[74,125748,125749,125751],{"class":76,"line":1141},[74,125750,105557],{"class":134},[74,125752,125753],{"class":144},"        # 切换目录\n",[74,125755,125756,125759],{"class":76,"line":1156},[74,125757,125758],{"class":134},"pwd",[74,125760,125761],{"class":144},"       # 显示当前路径\n",[74,125763,125764,125766],{"class":76,"line":1162},[74,125765,105547],{"class":1925},[74,125767,125768],{"class":144},"     # 创建目录\n",[74,125770,125771,125773],{"class":76,"line":1176},[74,125772,29603],{"class":1925},[74,125774,125775],{"class":144},"        # 删除文件或目录\n",[74,125777,125778,125781],{"class":76,"line":1182},[74,125779,125780],{"class":1925},"cp",[74,125782,125783],{"class":144},"        # 复制文件或目录\n",[74,125785,125786,125789],{"class":76,"line":1273},[74,125787,125788],{"class":1925},"mv",[74,125790,125791],{"class":144},"        # 移动\u002F重命名文件或目录\n",[74,125793,125794,125796],{"class":76,"line":1279},[74,125795,105564],{"class":1925},[74,125797,125798],{"class":144},"     # 创建空文件\n",[74,125800,125801,125803],{"class":76,"line":1291},[74,125802,125046],{"class":1925},[74,125804,125805],{"class":144},"       # 查看文件内容\n",[74,125807,125808,125811],{"class":76,"line":1574},[74,125809,125810],{"class":1925},"head\u002Ftail",[74,125812,125813],{"class":144}," # 查看文件头部\u002F尾部\n",[74,125815,125816],{"class":76,"line":1579},[74,125817,2363],{"emptyLinePlaceholder":2362},[74,125819,125820],{"class":76,"line":1585},[74,125821,125822],{"class":144},"# 权限管理\n",[74,125824,125825,125827],{"class":76,"line":1590},[74,125826,28892],{"class":1925},[74,125828,125829],{"class":144},"     # 修改文件权限\n",[74,125831,125832,125835],{"class":76,"line":1604},[74,125833,125834],{"class":1925},"chown",[74,125836,125837],{"class":144},"     # 修改文件所有者\n",[74,125839,125840,125842],{"class":76,"line":1609},[74,125841,28857],{"class":1925},[74,125843,125844],{"class":144},"      # 以管理员身份执行\n",[74,125846,125847],{"class":76,"line":1615},[74,125848,2363],{"emptyLinePlaceholder":2362},[74,125850,125851],{"class":76,"line":1636},[74,125852,125853],{"class":144},"# 系统信息\n",[74,125855,125856,125858],{"class":76,"line":1641},[74,125857,74485],{"class":1925},[74,125859,125860],{"class":144},"     # 系统信息\n",[74,125862,125863,125866],{"class":76,"line":1655},[74,125864,125865],{"class":1925},"df",[74,125867,125868],{"class":144},"        # 磁盘使用情况\n",[74,125870,125871,125874],{"class":76,"line":1660},[74,125872,125873],{"class":1925},"free",[74,125875,125876],{"class":144},"      # 内存使用情况\n",[74,125878,125879,125882],{"class":76,"line":1689},[74,125880,125881],{"class":1925},"top\u002Fhtop",[74,125883,125884],{"class":144},"  # 进程监控\n",[74,125886,125887,125890],{"class":76,"line":1694},[74,125888,125889],{"class":1925},"ps",[74,125891,125892],{"class":144},"        # 查看进程\n",[74,125894,125895],{"class":76,"line":1711},[74,125896,2363],{"emptyLinePlaceholder":2362},[74,125898,125899],{"class":76,"line":1716},[74,125900,125901],{"class":144},"# 网络\n",[74,125903,125904,125907],{"class":76,"line":1721},[74,125905,125906],{"class":1925},"ping",[74,125908,125909],{"class":144},"      # 测试网络连通性\n",[74,125911,125912,125914],{"class":76,"line":1726},[74,125913,31130],{"class":1925},[74,125915,125916],{"class":144},"      # 发送 HTTP 请求\n",[74,125918,125919,125921],{"class":76,"line":1740},[74,125920,124570],{"class":1925},[74,125922,125923],{"class":144},"      # 下载文件\n",[74,125925,125926,125929],{"class":76,"line":1745},[74,125927,125928],{"class":1925},"ssh",[74,125930,125931],{"class":144},"       # 远程登录\n",[74,125933,125934,125937],{"class":76,"line":2540},[74,125935,125936],{"class":1925},"scp",[74,125938,125939],{"class":144},"       # 远程文件传输\n",[74,125941,125942],{"class":76,"line":2554},[74,125943,2363],{"emptyLinePlaceholder":2362},[74,125945,125946],{"class":76,"line":2562},[74,125947,125948],{"class":144},"# 包管理（Debian\u002FUbuntu）\n",[74,125950,125951,125953,125955],{"class":76,"line":2567},[74,125952,121649],{"class":1925},[74,125954,121628],{"class":190},[74,125956,125957],{"class":144},"   # 更新软件源\n",[74,125959,125960,125962,125964],{"class":76,"line":2573},[74,125961,121649],{"class":1925},[74,125963,28114],{"class":190},[74,125965,125966],{"class":144},"  # 安装软件包\n",[74,125968,125969,125971,125973],{"class":76,"line":2579},[74,125970,121649],{"class":1925},[74,125972,30360],{"class":190},[74,125974,125975],{"class":144},"   # 卸载软件包\n",[27,125977,125978],{"start":94},[30,125979,125980],{},"KDE Dolphin 以root打开",[19,125982,125983],{},"kde5",[64,125985,125987],{"className":121577,"code":125986,"language":121579,"meta":69,"style":69},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[71,125988,125989],{"__ignoreMap":69},[74,125990,125991,125994,125997,126000,126002,126004,126007,126010,126012,126015,126017],{"class":76,"line":77},[74,125992,125993],{"class":1925},"pkexec",[74,125995,125996],{"class":190}," env",[74,125998,125999],{"class":190}," DISPLAY=",[74,126001,32424],{"class":84},[74,126003,32482],{"class":190},[74,126005,126006],{"class":84},"$XAUTHORITY ",[74,126008,126009],{"class":190},"KDE_SESSION_VERSION=",[74,126011,405],{"class":134},[74,126013,126014],{"class":190}," KDE_FULL_SESSION=",[74,126016,1324],{"class":134},[74,126018,126019],{"class":190}," dolphin\n",[19,126021,126022],{},"kde6",[64,126024,126026],{"className":121577,"code":126025,"language":121579,"meta":69,"style":69},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[71,126027,126028],{"__ignoreMap":69},[74,126029,126030,126032,126034,126036,126038,126040,126042,126044,126046,126048,126050],{"class":76,"line":77},[74,126031,125993],{"class":1925},[74,126033,125996],{"class":190},[74,126035,125999],{"class":190},[74,126037,32424],{"class":84},[74,126039,32482],{"class":190},[74,126041,126006],{"class":84},[74,126043,126009],{"class":190},[74,126045,430],{"class":134},[74,126047,126014],{"class":190},[74,126049,1324],{"class":134},[74,126051,126019],{"class":190},[5090,126053,126054],{},"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":69,"searchDepth":94,"depth":94,"links":126056},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":125716,"description":27656},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":126063,"title":126064,"body":126065,"description":27656,"extension":5121,"meta":126079,"navigation":2362,"path":126080,"seo":126081,"stem":126082,"__hash__":126083},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":126066,"toc":126077},[126067,126070],[10,126068,126064],{"id":126069},"_5-各种环境配置",[19,126071,126072],{},[324,126073,126076],{"href":126074,"rel":126075},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[28145],"电控组环境搭建大全",{"title":69,"searchDepth":94,"depth":94,"links":126078},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":126064,"description":27656},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":126085,"title":126086,"body":126087,"description":27656,"extension":5121,"meta":126435,"navigation":2362,"path":126436,"seo":126437,"stem":126438,"__hash__":126439},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":126088,"toc":126427},[126089,126092,126096,126100,126104,126109,126116,126120,126413,126417,126424],[10,126090,126086],{"id":126091},"_6-拓展功能",[14,126093,126095],{"id":126094},"_61-wine","6.1 Wine",[14,126097,126099],{"id":126098},"_62-android","6.2 Android",[44,126101,126103],{"id":126102},"_621-i卡a卡","6.2.1 I卡、A卡",[27,126105,126106],{},[30,126107,126108],{},"Wayland-Waydroid(体验超级好)",[19,126110,126111,126112],{},"Waydroid 官网与安装指南：",[324,126113,126114],{"href":126114,"rel":126115},"https:\u002F\u002Fwaydro.id\u002F",[28145],[44,126117,126119],{"id":126118},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[27,126121,126122],{},[30,126123,126124,126125,126127,126128,126132,126134,126137,126142,126339],{},"QEMU-KVM虚拟机 + BlissOS-X86",[57997,126126],{},"BlissOS 官网下载：",[324,126129,126130],{"href":126130,"rel":126131},"https:\u002F\u002Fblissos.org\u002F",[28145],[57997,126133],{},[1424,126135],{"alt":69,"src":126136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[27,126138,126139],{"start":1141},[30,126140,126141],{},"比较推荐的配置",[64,126143,126145],{"className":121577,"code":126144,"language":121579,"meta":69,"style":69},"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",[71,126146,126147,126154,126164,126174,126184,126196,126206,126213,126223,126232,126241,126251,126261,126270,126280,126290,126302,126312,126321,126331],{"__ignoreMap":69},[74,126148,126149,126152],{"class":76,"line":77},[74,126150,126151],{"class":1925},"qemu-system-x86_64",[74,126153,28959],{"class":134},[74,126155,126156,126159,126162],{"class":76,"line":94},[74,126157,126158],{"class":134},"        -M",[74,126160,126161],{"class":190}," q35,vmport=off",[74,126163,28959],{"class":134},[74,126165,126166,126169,126172],{"class":76,"line":1141},[74,126167,126168],{"class":134},"        -accel",[74,126170,126171],{"class":190}," kvm",[74,126173,28959],{"class":134},[74,126175,126176,126179,126182],{"class":76,"line":1156},[74,126177,126178],{"class":134},"        -cpu",[74,126180,126181],{"class":190}," qemu64,+sse3,+sse4.2",[74,126183,28959],{"class":134},[74,126185,126186,126189,126192,126194],{"class":76,"line":1162},[74,126187,126188],{"class":134},"        -smp",[74,126190,126191],{"class":190}," 8,cores=",[74,126193,379],{"class":134},[74,126195,28959],{"class":134},[74,126197,126198,126201,126204],{"class":76,"line":1176},[74,126199,126200],{"class":134},"        -m",[74,126202,126203],{"class":190}," 6G",[74,126205,28959],{"class":134},[74,126207,126208,126211],{"class":76,"line":1182},[74,126209,126210],{"class":134},"        -usb",[74,126212,28959],{"class":134},[74,126214,126215,126218,126221],{"class":76,"line":1273},[74,126216,126217],{"class":134},"        -device",[74,126219,126220],{"class":190}," virtio-tablet",[74,126222,28959],{"class":134},[74,126224,126225,126227,126230],{"class":76,"line":1279},[74,126226,126217],{"class":134},[74,126228,126229],{"class":190}," virtio-keyboard",[74,126231,28959],{"class":134},[74,126233,126234,126236,126239],{"class":76,"line":1291},[74,126235,126217],{"class":134},[74,126237,126238],{"class":190}," usb-tablet",[74,126240,28959],{"class":134},[74,126242,126243,126246,126249],{"class":76,"line":1574},[74,126244,126245],{"class":134},"        -bios",[74,126247,126248],{"class":190}," OVMF-pure-efi64.fd",[74,126250,28959],{"class":134},[74,126252,126253,126256,126259],{"class":76,"line":1579},[74,126254,126255],{"class":134},"        -net",[74,126257,126258],{"class":190}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[74,126260,28959],{"class":134},[74,126262,126263,126265,126268],{"class":76,"line":1585},[74,126264,126255],{"class":134},[74,126266,126267],{"class":190}," nic,model=virtio",[74,126269,28959],{"class":134},[74,126271,126272,126275,126278],{"class":76,"line":1590},[74,126273,126274],{"class":134},"        -audio",[74,126276,126277],{"class":190}," sdl,model=hda",[74,126279,28959],{"class":134},[74,126281,126282,126285,126288],{"class":76,"line":1604},[74,126283,126284],{"class":134},"        -display",[74,126286,126287],{"class":190}," sdl,gl=on,show-cursor=on",[74,126289,28959],{"class":134},[74,126291,126292,126294,126297,126300],{"class":76,"line":1609},[74,126293,126217],{"class":134},[74,126295,126296],{"class":190}," virtio-vga-gl,xres=1920,yres=",[74,126298,126299],{"class":134},"1080",[74,126301,28959],{"class":134},[74,126303,126304,126307,126310],{"class":76,"line":1615},[74,126305,126306],{"class":134},"        -drive",[74,126308,126309],{"class":190}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[74,126311,28959],{"class":134},[74,126313,126314,126316,126319],{"class":76,"line":1636},[74,126315,126306],{"class":134},[74,126317,126318],{"class":190}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[74,126320,28959],{"class":134},[74,126322,126323,126326,126329],{"class":76,"line":1641},[74,126324,126325],{"class":134},"        -monitor",[74,126327,126328],{"class":190}," stdio",[74,126330,28959],{"class":134},[74,126332,126333,126336],{"class":76,"line":1655},[74,126334,126335],{"class":134},"        -serial",[74,126337,126338],{"class":190}," none\n",[27,126340,126341],{"start":1162},[30,126342,126343,126344],{},"常用操作：",[27,126345,126346,126349,126405],{},[30,126347,126348],{},"全屏：Ctrl+Alt+F",[30,126350,126351,126352,126357],{},"adb调试",[27,126353,126354],{},[30,126355,126356],{},"使Linux与Android用ADB连接。",[64,126358,126360],{"className":121577,"code":126359,"language":121579,"meta":69,"style":69},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[71,126361,126362,126367,126378,126383,126395,126400],{"__ignoreMap":69},[74,126363,126364],{"class":76,"line":77},[74,126365,126366],{"class":144},"# 连接安卓\n",[74,126368,126369,126372,126375],{"class":76,"line":94},[74,126370,126371],{"class":1925},"adb",[74,126373,126374],{"class":190}," connect",[74,126376,126377],{"class":134}," 127.0.0.1\n",[74,126379,126380],{"class":76,"line":1141},[74,126381,126382],{"class":144},"# 打开shell\n",[74,126384,126385,126387,126389,126392],{"class":76,"line":1156},[74,126386,126371],{"class":1925},[74,126388,31164],{"class":134},[74,126390,126391],{"class":190}," 127.0.0.1:5555",[74,126393,126394],{"class":190}," shell\n",[74,126396,126397],{"class":76,"line":1162},[74,126398,126399],{"class":144},"# 使用root权限\n",[74,126401,126402],{"class":76,"line":1176},[74,126403,126404],{"class":1925},"su\n",[30,126406,126407,126408],{},"中文输入法",[27,126409,126410],{},[30,126411,126412],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,126414,126416],{"id":126415},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,126418,126419,126420],{},"rEFInd 官网与文档：",[324,126421,126422],{"href":126422,"rel":126423},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[28145],[5090,126425,126426],{},"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":69,"searchDepth":94,"depth":94,"links":126428},[126429,126430,126434],{"id":126094,"depth":94,"text":126095},{"id":126098,"depth":94,"text":126099,"children":126431},[126432,126433],{"id":126102,"depth":1141,"text":126103},{"id":126118,"depth":1141,"text":126119},{"id":126415,"depth":94,"text":126416},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":126086,"description":27656},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":126441,"title":126442,"body":126443,"description":27656,"extension":5121,"meta":129742,"navigation":2362,"path":129743,"seo":129744,"stem":129745,"__hash__":129746},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":126444,"toc":129716},[126445,126448,126452,126455,126462,126712,126715,126787,126790,126794,126798,126803,126806,126809,126812,126817,126820,126823,126826,126831,126834,126839,126842,126845,126850,126853,126858,126861,126865,126869,126872,126877,126880,126894,126897,126900,126909,126912,126921,126924,126927,126936,126939,126948,126951,126954,126963,126966,126969,126984,126987,126990,126999,127004,127007,127010,127019,127022,127031,127034,127043,127046,127055,127060,127063,127071,127076,127079,127088,127091,127099,127104,127107,127116,127119,127122,127126,127129,127134,127137,127142,127156,127161,127166,127177,127182,127188,127193,127208,127213,127216,127221,127226,127231,127239,127244,127251,127256,127267,127272,127275,127279,127282,127285,127290,127293,127312,127317,127320,127329,127334,127337,127359,127362,127392,127395,127400,127403,127417,127422,127441,127444,127447,127452,127464,127469,127474,127477,127482,127485,127500,127503,127508,127513,127517,127522,127562,127565,127569,127575,127581,127586,127589,127596,127601,127608,127611,127614,127621,127635,127638,127698,127701,127715,127727,127730,127733,127736,127800,127803,127806,127809,127829,127832,127837,127844,127848,127851,127855,127860,127865,127869,127872,127875,127917,127922,127925,127947,127962,127964,127969,127981,128041,128043,128045,128099,128101,128103,128109,128114,128117,128122,128126,128129,128191,128196,128199,128201,128205,128217,128299,128301,128303,128357,128363,128365,128369,128374,128376,128381,128385,128405,128440,128444,128447,128450,128453,128460,128463,128475,128478,128493,128496,128515,128563,128566,128583,128586,128600,128605,128608,128617,128632,128644,128682,128687,128696,128701,128706,128732,128741,128745,128749,128754,128757,128761,128765,128770,128773,128778,128781,128786,128789,128794,128797,128801,128806,128809,128814,128817,128821,128826,128829,128834,128837,128842,128845,128849,128854,128857,128862,128865,128870,128873,128877,128882,128885,128890,128893,128898,128901,128906,128909,128914,128917,128922,128925,128929,128934,128937,128942,128949,128953,128958,128961,128966,128969,128973,128978,128981,128984,128987,128990,128993,128997,129000,129010,129015,129020,129042,129047,129052,129059,129063,129068,129071,129074,129079,129082,129085,129088,129091,129094,129097,129100,129103,129106,129109,129112,129115,129120,129125,129130,129135,129140,129145,129150,129153,129157,129160,129164,129169,129174,129179,129184,129188,129194,129202,129207,129210,129215,129230,129233,129238,129272,129287,129290,129345,129371,129383,129386,129395,129398,129413,129418,129421,129427,129432,129435,129440,129443,129448,129453,129460,129463,129478,129481,129516,129521,129529,129567,129570,129573,129578,129581,129586,129597,129631,129636,129639,129648,129653,129659,129662,129667,129676,129681,129684,129687,129692,129700,129703,129708,129713],[10,126446,126442],{"id":126447},"_7-其他操作",[14,126449,126451],{"id":126450},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,126453,126454],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,126456,126457,126458,126461],{},"进入工控机的硬盘目录，进入",[71,126459,126460],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[64,126463,126467],{"className":126464,"code":126465,"language":126466,"meta":69,"style":69},"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",[71,126468,126469,126477,126488,126495,126502,126514,126521,126533,126544,126555,126562,126569,126576,126588,126600,126607,126619,126631,126638,126650,126662,126674,126685,126692,126703],{"__ignoreMap":69},[74,126470,126471,126474],{"class":76,"line":77},[74,126472,126473],{"class":55581},"network",[74,126475,126476],{"class":84},": \n",[74,126478,126479,126482,126484,126486],{"class":76,"line":94},[74,126480,126481],{"class":55581},"  version",[74,126483,55718],{"class":84},[74,126485,163],{"class":134},[74,126487,2637],{"class":84},[74,126489,126490,126493],{"class":76,"line":1141},[74,126491,126492],{"class":55581},"  wifis",[74,126494,126476],{"class":84},[74,126496,126497,126500],{"class":76,"line":1156},[74,126498,126499],{"class":55581},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[74,126501,126476],{"class":84},[74,126503,126504,126507,126509,126512],{"class":76,"line":1162},[74,126505,126506],{"class":55581},"      renderer",[74,126508,55718],{"class":84},[74,126510,126511],{"class":190},"NetworkManager",[74,126513,2637],{"class":84},[74,126515,126516,126519],{"class":76,"line":1176},[74,126517,126518],{"class":55581},"      match",[74,126520,126476],{"class":84},[74,126522,126523,126526,126528,126531],{"class":76,"line":1182},[74,126524,126525],{"class":55581},"        name",[74,126527,55718],{"class":84},[74,126529,126530],{"class":190},"\"wlan0\"",[74,126532,2637],{"class":84},[74,126534,126535,126538,126540,126542],{"class":76,"line":1273},[74,126536,126537],{"class":55581},"      dhcp4",[74,126539,55718],{"class":84},[74,126541,1324],{"class":134},[74,126543,2637],{"class":84},[74,126545,126546,126549,126551,126553],{"class":76,"line":1279},[74,126547,126548],{"class":55581},"      dhcp6",[74,126550,55718],{"class":84},[74,126552,1324],{"class":134},[74,126554,2637],{"class":84},[74,126556,126557,126560],{"class":76,"line":1291},[74,126558,126559],{"class":55581},"      access-points",[74,126561,126476],{"class":84},[74,126563,126564,126567],{"class":76,"line":1574},[74,126565,126566],{"class":190},"        \"EMIS_Vinci_Robocon_5G\"",[74,126568,126476],{"class":84},[74,126570,126571,126574],{"class":76,"line":1579},[74,126572,126573],{"class":55581},"          auth",[74,126575,126476],{"class":84},[74,126577,126578,126581,126583,126586],{"class":76,"line":1585},[74,126579,126580],{"class":55581},"            key-management",[74,126582,55718],{"class":84},[74,126584,126585],{"class":190},"\"psk\"",[74,126587,2637],{"class":84},[74,126589,126590,126593,126595,126598],{"class":76,"line":1590},[74,126591,126592],{"class":55581},"            password",[74,126594,55718],{"class":84},[74,126596,126597],{"class":190},"\"vinci666\"",[74,126599,2637],{"class":84},[74,126601,126602,126605],{"class":76,"line":1604},[74,126603,126604],{"class":55581},"          networkmanager",[74,126606,126476],{"class":84},[74,126608,126609,126612,126614,126617],{"class":76,"line":1609},[74,126610,126611],{"class":55581},"            uuid",[74,126613,55718],{"class":84},[74,126615,126616],{"class":190},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[74,126618,2637],{"class":84},[74,126620,126621,126624,126626,126629],{"class":76,"line":1615},[74,126622,126623],{"class":55581},"            name",[74,126625,55718],{"class":84},[74,126627,126628],{"class":190},"\"EMIS_Vinci_Robocon_5G\"",[74,126630,2637],{"class":84},[74,126632,126633,126636],{"class":76,"line":1636},[74,126634,126635],{"class":55581},"            passthrough",[74,126637,126476],{"class":84},[74,126639,126640,126643,126645,126648],{"class":76,"line":1641},[74,126641,126642],{"class":55581},"              wifi-security.auth-alg",[74,126644,55718],{"class":84},[74,126646,126647],{"class":190},"\"open\"",[74,126649,2637],{"class":84},[74,126651,126652,126655,126657,126660],{"class":76,"line":1655},[74,126653,126654],{"class":55581},"              ipv6.addr-gen-mode",[74,126656,55718],{"class":84},[74,126658,126659],{"class":190},"\"default\"",[74,126661,2637],{"class":84},[74,126663,126664,126667,126669,126672],{"class":76,"line":1660},[74,126665,126666],{"class":55581},"              ipv6.ip6-privacy",[74,126668,55718],{"class":84},[74,126670,126671],{"class":190},"\"-1\"",[74,126673,2637],{"class":84},[74,126675,126676,126679,126681,126683],{"class":76,"line":1689},[74,126677,126678],{"class":55581},"              proxy._",[74,126680,55718],{"class":84},[74,126682,11931],{"class":190},[74,126684,2637],{"class":84},[74,126686,126687,126690],{"class":76,"line":1694},[74,126688,126689],{"class":55581},"      networkmanager",[74,126691,126476],{"class":84},[74,126693,126694,126697,126699,126701],{"class":76,"line":1711},[74,126695,126696],{"class":55581},"        uuid",[74,126698,55718],{"class":84},[74,126700,126616],{"class":190},[74,126702,2637],{"class":84},[74,126704,126705,126707,126709],{"class":76,"line":1716},[74,126706,126525],{"class":55581},[74,126708,55718],{"class":84},[74,126710,126711],{"class":190},"\"EMIS_Vinci_Robocon_5G\"\n",[19,126713,126714],{},"将其改为新wifi的名和密码：",[64,126716,126718],{"className":126464,"code":126717,"language":126466,"meta":69,"style":69},"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",[71,126719,126720,126726,126735,126741,126748,126757,126765,126771,126777],{"__ignoreMap":69},[74,126721,126722,126724],{"class":76,"line":77},[74,126723,126473],{"class":55581},[74,126725,3702],{"class":84},[74,126727,126728,126730,126732],{"class":76,"line":94},[74,126729,126481],{"class":55581},[74,126731,55718],{"class":84},[74,126733,126734],{"class":134},"2\n",[74,126736,126737,126739],{"class":76,"line":1141},[74,126738,126492],{"class":55581},[74,126740,3702],{"class":84},[74,126742,126743,126746],{"class":76,"line":1156},[74,126744,126745],{"class":55581},"    wlan0",[74,126747,3702],{"class":84},[74,126749,126750,126752,126754],{"class":76,"line":1162},[74,126751,126537],{"class":55581},[74,126753,55718],{"class":84},[74,126755,126756],{"class":134},"true\n",[74,126758,126759,126761,126763],{"class":76,"line":1176},[74,126760,126548],{"class":55581},[74,126762,55718],{"class":84},[74,126764,126756],{"class":134},[74,126766,126767,126769],{"class":76,"line":1182},[74,126768,126559],{"class":55581},[74,126770,3702],{"class":84},[74,126772,126773,126775],{"class":76,"line":1273},[74,126774,126566],{"class":190},[74,126776,3702],{"class":84},[74,126778,126779,126782,126784],{"class":76,"line":1279},[74,126780,126781],{"class":55581},"          password",[74,126783,55718],{"class":84},[74,126785,126786],{"class":190},"\"vinci666\"\n",[19,126788,126789],{},"工控机开机即可连上网。",[14,126791,126793],{"id":126792},"_72-ssh远程开发","7.2 SSH远程开发",[44,126795,126797],{"id":126796},"_721-环境准备","7.2.1 环境准备",[19,126799,126800],{},[235,126801,126802],{},"1.硬件准备",[19,126804,126805],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,126807,126808],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,126810,126811],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,126813,126814],{},[235,126815,126816],{},"2.设置固定IP",[19,126818,126819],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,126821,126822],{},"1.进入设置界面",[19,126824,126825],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,126827,126828],{},[1424,126829],{"alt":69,"src":126830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,126832,126833],{},"2.配置所连接的网络",[19,126835,126836],{},[1424,126837],{"alt":69,"src":126838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,126840,126841],{},"3.设置固定IP",[19,126843,126844],{},"查看当前IP地址。",[19,126846,126847],{},[1424,126848],{"alt":69,"src":126849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,126851,126852],{},"设置固定IP。",[19,126854,126855],{},[1424,126856],{"alt":69,"src":126857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,126859,126860],{},"至此，IP配置完毕。",[44,126862,126864],{"id":126863},"_722-环境搭建","7.2.2 环境搭建",[19,126866,126867],{},[235,126868,30034],{},[19,126870,126871],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,126873,126874],{},[235,126875,126876],{},"实现",[19,126878,126879],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[27,126881,126882,126885,126888,126891],{},[30,126883,126884],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[30,126886,126887],{},"远程主机启动SSH服务；",[30,126889,126890],{},"本地主机登陆远程主机；",[30,126892,126893],{},"实现数据传输。",[19,126895,126896],{},"1.安装SSH客户端与服务端",[19,126898,126899],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[64,126901,126903],{"className":125097,"code":126902,"language":125099,"meta":125100,"style":69}," sudo apt install openssh-server\n",[71,126904,126905],{"__ignoreMap":69},[74,126906,126907],{"class":76,"line":77},[74,126908,126902],{},[19,126910,126911],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[64,126913,126915],{"className":125097,"code":126914,"language":125099,"meta":125100,"style":69},"sudo apt install openssh-client\n",[71,126916,126917],{"__ignoreMap":69},[74,126918,126919],{"class":76,"line":77},[74,126920,126914],{},[19,126922,126923],{},"2.远程主机启动SSH服务",[19,126925,126926],{},"远程主机启动 ssh 服务命令如下：",[64,126928,126930],{"className":125097,"code":126929,"language":125099,"meta":125100,"style":69},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[71,126931,126932],{"__ignoreMap":69},[74,126933,126934],{"class":76,"line":77},[74,126935,126929],{},[19,126937,126938],{},"启动后可使用如下命令查看服务是否正常运行：",[64,126940,126942],{"className":125097,"code":126941,"language":125099,"meta":125100,"style":69},"ps -e | grep ssh\n",[71,126943,126944],{"__ignoreMap":69},[74,126945,126946],{"class":76,"line":77},[74,126947,126941],{},[19,126949,126950],{},"如果启动成功，会包含 sshd 程序。",[19,126952,126953],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[64,126955,126957],{"className":125097,"code":126956,"language":125099,"meta":125100,"style":69},"sudo systemctl enable ssh\n",[71,126958,126959],{"__ignoreMap":69},[74,126960,126961],{"class":76,"line":77},[74,126962,126956],{},[19,126964,126965],{},"3.本地远程登录",[19,126967,126968],{},"登录远程主机可以调用如下命令:",[64,126970,126972],{"className":121577,"code":126971,"language":121579,"meta":69,"style":69},"ssh -X 用户名@ip地址\n",[71,126973,126974],{"__ignoreMap":69},[74,126975,126976,126978,126981],{"class":76,"line":77},[74,126977,125928],{"class":1925},[74,126979,126980],{"class":134}," -X",[74,126982,126983],{"class":190}," 用户名@ip地址\n",[19,126985,126986],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,126988,126989],{},"如果退出，可以调用exit命令：",[64,126991,126993],{"className":125097,"code":126992,"language":125099,"meta":125100,"style":69},"exit\n",[71,126994,126995],{"__ignoreMap":69},[74,126996,126997],{"class":76,"line":77},[74,126998,126992],{},[19,127000,127001],{},[235,127002,127003],{},"4.实现数据传输",[19,127005,127006],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,127008,127009],{},"上传文件指令格式如下：",[64,127011,127013],{"className":125097,"code":127012,"language":125099,"meta":125100,"style":69},"scp 本地文件路径 账号@ip:路径\n",[71,127014,127015],{"__ignoreMap":69},[74,127016,127017],{"class":76,"line":77},[74,127018,127012],{},[19,127020,127021],{},"上传文件夹指令格式如下：",[64,127023,127025],{"className":125097,"code":127024,"language":125099,"meta":125100,"style":69},"scp -r 本地文件夹路径 账号@ip:路径\n",[71,127026,127027],{"__ignoreMap":69},[74,127028,127029],{"class":76,"line":77},[74,127030,127024],{},[19,127032,127033],{},"下载文件指令格式如下：",[64,127035,127037],{"className":125097,"code":127036,"language":125099,"meta":125100,"style":69},"scp 账号@ip:路径 本地文件夹路径\n",[71,127038,127039],{"__ignoreMap":69},[74,127040,127041],{"class":76,"line":77},[74,127042,127036],{},[19,127044,127045],{},"下载文件夹指令格式如下：",[64,127047,127049],{"className":125097,"code":127048,"language":125099,"meta":125100,"style":69},"scp -r 账号@ip:路径 本地文件夹路径\n",[71,127050,127051],{"__ignoreMap":69},[74,127052,127053],{"class":76,"line":77},[74,127054,127048],{},[19,127056,127057],{},[235,127058,127059],{},"优化",[19,127061,127062],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[27,127064,127065,127068],{},[30,127066,127067],{},"本地生成密钥对；",[30,127069,127070],{},"将公钥上传至远程主机。",[19,127072,127073],{},[235,127074,127075],{},"1.生成密钥对",[19,127077,127078],{},"本地客户端生成公私钥：（一路回车默认即可）",[64,127080,127082],{"className":125097,"code":127081,"language":125099,"meta":125100,"style":69},"ssh-keygen\n",[71,127083,127084],{"__ignoreMap":69},[74,127085,127086],{"class":76,"line":77},[74,127087,127081],{},[19,127089,127090],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[27,127092,127093,127096],{},[30,127094,127095],{},"id_rsa （私钥）；",[30,127097,127098],{},"id_rsa.pub (公钥)。",[19,127100,127101],{},[235,127102,127103],{},"2.公钥上传",[19,127105,127106],{},"上传指令如下：",[64,127108,127110],{"className":125097,"code":127109,"language":125099,"meta":125100,"style":69},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[71,127111,127112],{"__ignoreMap":69},[74,127113,127114],{"class":76,"line":77},[74,127115,127109],{},[19,127117,127118],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,127120,127121],{},"以后再远程登录就无需录入密码了。",[44,127123,127125],{"id":127124},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,127127,127128],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,127130,127131],{},[235,127132,127133],{},"1.准备工作",[19,127135,127136],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,127138,127139],{},[235,127140,127141],{},"2.为VScode安装远程开发插件",[19,127143,127144,127145,127148,127149,127152,127153,32666],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[71,127146,127147],{},"扩展：商店","的搜索栏输入",[71,127150,127151],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[71,127154,127155],{},"安装",[19,127157,127158],{},[1424,127159],{"alt":69,"src":127160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,127162,127163],{},[235,127164,127165],{},"3.配置远程连接",[19,127167,127168,127169,127172,127173,127176],{},"步骤1：使用快捷键",[71,127170,127171],{},"ctrl + shift + p","打开命令输入窗口，并输入",[71,127174,127175],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,127178,127179],{},[1424,127180],{"alt":69,"src":127181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,127183,127184,127185,32666],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[71,127186,127187],{},"Add New SSH Host",[19,127189,127190],{},[1424,127191],{"alt":69,"src":127192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,127194,127195,127196,127199,127200,127203,127204,127207],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[71,127197,127198],{},"ssh +X ubuntu@192.168.43.164","，其中，",[71,127201,127202],{},"ubuntu","需要替换为你的登录用户名，",[71,127205,127206],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,127209,127210],{},[1424,127211],{"alt":69,"src":127212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,127214,127215],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,127217,127218],{},[1424,127219],{"alt":69,"src":127220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,127222,127223],{},[1424,127224],{"alt":69,"src":127225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,127227,127228],{},[235,127229,127230],{},"4.使用",[19,127232,127233,127234,127172,127236,127238],{},"步骤1：继续使用快捷键",[71,127235,127171],{},[71,127237,127175],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,127240,127241],{},[1424,127242],{"alt":69,"src":127243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,127245,127246,127247,127250],{},"或者，也可以点击侧边栏的",[71,127248,127249],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,127252,127253],{},[1424,127254],{"alt":69,"src":127255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,127257,127258,127259,127262,127263,127266],{},"步骤2：选择菜单栏的",[71,127260,127261],{},"文件","下的",[71,127264,127265],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,127268,127269],{},[1424,127270],{"alt":69,"src":127271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,127273,127274],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,127276,127278],{"id":127277},"_73-远程桌面","7.3 远程桌面",[19,127280,127281],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,127283,127284],{},"我们选择使用VNC来看。",[27,127286,127287],{},[30,127288,127289],{},"安装VNC服务器：",[19,127291,127292],{},"这里以TigerVNC为例进行安装：",[64,127294,127296],{"className":121577,"code":127295,"language":121579,"meta":69,"style":69},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[71,127297,127298],{"__ignoreMap":69},[74,127299,127300,127302,127304,127306,127309],{"class":76,"line":77},[74,127301,28857],{"class":1925},[74,127303,121598],{"class":190},[74,127305,28114],{"class":190},[74,127307,127308],{"class":190}," tigervnc-standalone-server",[74,127310,127311],{"class":190}," tigervnc-common\n",[27,127313,127314],{"start":94},[30,127315,127316],{},"设置VNC密码：",[19,127318,127319],{},"为VNC用户设置密码，运行以下命令：",[64,127321,127323],{"className":121577,"code":127322,"language":121579,"meta":69,"style":69},"vncpasswd\n",[71,127324,127325],{"__ignoreMap":69},[74,127326,127327],{"class":76,"line":77},[74,127328,127322],{"class":1925},[27,127330,127331],{"start":1141},[30,127332,127333],{},"配置VNC启动脚本:",[19,127335,127336],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[64,127338,127340],{"className":121577,"code":127339,"language":121579,"meta":69,"style":69},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[71,127341,127342,127351],{"__ignoreMap":69},[74,127343,127344,127346,127348],{"class":76,"line":77},[74,127345,105547],{"class":1925},[74,127347,33497],{"class":134},[74,127349,127350],{"class":190}," ~\u002F.vnc\n",[74,127352,127353,127356],{"class":76,"line":94},[74,127354,127355],{"class":1925},"nano",[74,127357,127358],{"class":190}," ~\u002F.vnc\u002Fxstartup\n",[19,127360,127361],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[64,127363,127365],{"className":121577,"code":127364,"language":121579,"meta":69,"style":69},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[71,127366,127367,127372,127380,127387],{"__ignoreMap":69},[74,127368,127369],{"class":76,"line":77},[74,127370,127371],{"class":144},"#!\u002Fbin\u002Fsh\n",[74,127373,127374,127377],{"class":76,"line":94},[74,127375,127376],{"class":134},"unset",[74,127378,127379],{"class":190}," SESSION_MANAGER\n",[74,127381,127382,127384],{"class":76,"line":1141},[74,127383,127376],{"class":134},[74,127385,127386],{"class":190}," DBUS_SESSION_BUS_ADDRESS\n",[74,127388,127389],{"class":76,"line":1156},[74,127390,127391],{"class":1925},"gnome-session\n",[19,127393,127394],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[27,127396,127397],{"start":1156},[30,127398,127399],{},"给予执行权限：",[19,127401,127402],{},"为xstartup文件设置执行权限：",[64,127404,127406],{"className":121577,"code":127405,"language":121579,"meta":69,"style":69},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[71,127407,127408],{"__ignoreMap":69},[74,127409,127410,127412,127415],{"class":76,"line":77},[74,127411,28892],{"class":1925},[74,127413,127414],{"class":190}," +x",[74,127416,127358],{"class":190},[27,127418,127419],{"start":1162},[30,127420,127421],{},"启动VNC服务器：",[64,127423,127425],{"className":121577,"code":127424,"language":121579,"meta":69,"style":69},"vncserver -geometry 1920x1080 -localhost=0\n",[71,127426,127427],{"__ignoreMap":69},[74,127428,127429,127432,127435,127438],{"class":76,"line":77},[74,127430,127431],{"class":1925},"vncserver",[74,127433,127434],{"class":134}," -geometry",[74,127436,127437],{"class":190}," 1920x1080",[74,127439,127440],{"class":134}," -localhost=0\n",[19,127442,127443],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,127445,127446],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[27,127448,127449],{"start":1176},[30,127450,127451],{},"查看已开启的VNC服务器：",[64,127453,127455],{"className":121577,"code":127454,"language":121579,"meta":69,"style":69},"vncserver -list\n",[71,127456,127457],{"__ignoreMap":69},[74,127458,127459,127461],{"class":76,"line":77},[74,127460,127431],{"class":1925},[74,127462,127463],{"class":134}," -list\n",[19,127465,127466],{},[1424,127467],{"alt":69,"src":127468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[27,127470,127471],{"start":1182},[30,127472,127473],{},"连接到VNC服务器：",[19,127475,127476],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[27,127478,127479],{"start":1273},[30,127480,127481],{},"停止VNC服务器：",[19,127483,127484],{},"如果需要停止VNC服务器，可以使用以下命令：",[64,127486,127488],{"className":121577,"code":127487,"language":121579,"meta":69,"style":69},"vncserver -kill :1\n",[71,127489,127490],{"__ignoreMap":69},[74,127491,127492,127494,127497],{"class":76,"line":77},[74,127493,127431],{"class":1925},[74,127495,127496],{"class":134}," -kill",[74,127498,127499],{"class":190}," :1\n",[19,127501,127502],{},"将:1替换为你实际使用的显示编号。",[19,127504,127505],{},[1424,127506],{"alt":69,"src":127507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,127509,127510],{},[1424,127511],{"alt":69,"src":127512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,127514,127516],{"id":127515},"_74-usb端口设置","7.4 USB端口设置",[19,127518,127519],{},[235,127520,127521],{},"首先先配置好权限",[64,127523,127525],{"className":121577,"code":127524,"language":121579,"meta":69,"style":69},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[71,127526,127527,127532,127545,127552,127557],{"__ignoreMap":69},[74,127528,127529],{"class":76,"line":77},[74,127530,127531],{"class":144},"# 将用户权限提高\n",[74,127533,127534,127536,127538,127540,127543],{"class":76,"line":94},[74,127535,28857],{"class":1925},[74,127537,30855],{"class":190},[74,127539,30858],{"class":134},[74,127541,127542],{"class":190}," dialout",[74,127544,30863],{"class":84},[74,127546,127547,127549],{"class":76,"line":1141},[74,127548,30882],{"class":1925},[74,127550,127551],{"class":190}," dialout\n",[74,127553,127554],{"class":76,"line":1156},[74,127555,127556],{"class":144},"# 查看下面命令是否输出dialout（若输出才正常）\n",[74,127558,127559],{"class":76,"line":1162},[74,127560,127561],{"class":1925},"groups\n",[19,127563,127564],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[44,127566,127568],{"id":127567},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,127570,127571,127574],{},[235,127572,127573],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,127576,127577,127580],{},[235,127578,127579],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,127582,127583],{},[235,127584,127585],{},"流程如下：",[19,127587,127588],{},"（1）.查找设备idVendor和idProduct",[19,127590,127591,127592,127595],{},"接入两个USB设备，在终端调用指令",[71,127593,127594],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,127597,127598],{},[1424,127599],{"alt":69,"src":127600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,127602,127603,127604,127607],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[71,127605,127606],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,127609,127610],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,127612,127613],{},"（2）.编写映射规则",[19,127615,127616,127617,127620],{},"在",[71,127618,127619],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[64,127622,127624],{"className":121577,"code":127623,"language":121579,"meta":69,"style":69},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[71,127625,127626],{"__ignoreMap":69},[74,127627,127628,127630,127632],{"class":76,"line":77},[74,127629,28857],{"class":1925},[74,127631,122864],{"class":190},[74,127633,127634],{"class":190}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,127636,127637],{},"输入如下内容：",[64,127639,127641],{"className":121577,"code":127640,"language":121579,"meta":69,"style":69},"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",[71,127642,127643,127673],{"__ignoreMap":69},[74,127644,127645,127648,127650,127653,127656,127659,127662,127664,127667,127670],{"class":76,"line":77},[74,127646,127647],{"class":84},"KERNEL",[74,127649,131],{"class":80},[74,127651,127652],{"class":190},"=\"ttyUSB*\",",[74,127654,127655],{"class":1925}," ATTRS",[74,127657,127658],{"class":190},"{idVendor}==",[74,127660,127661],{"class":1925},"\"10c4\"",[74,127663,464],{"class":1925},[74,127665,127666],{"class":190}," ATTRS{idProduct}==\"ea60\",",[74,127668,127669],{"class":190}," MODE:=\"0777\",",[74,127671,127672],{"class":190}," SYMLINK+=\"mylidar\"\n",[74,127674,127675,127677,127679,127681,127683,127685,127688,127690,127693,127695],{"class":76,"line":94},[74,127676,127647],{"class":84},[74,127678,131],{"class":80},[74,127680,127652],{"class":190},[74,127682,127655],{"class":1925},[74,127684,127658],{"class":190},[74,127686,127687],{"class":1925},"\"1a86\"",[74,127689,464],{"class":1925},[74,127691,127692],{"class":190}," ATTRS{idProduct}==\"7523\",",[74,127694,127669],{"class":190},[74,127696,127697],{"class":190}," SYMLINK+=\"mycar\"\n",[19,127699,127700],{},"代码解释：",[1093,127702,127703,127706,127709,127712],{},[30,127704,127705],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[30,127707,127708],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[30,127710,127711],{},"SYMLINK是符号连接，即绑定的别名；",[30,127713,127714],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,127716,127717,127718,127721,127724],{},"***小提示：***",[27833,127719,127720],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[71,127722,127723],{},"\u002Fetc\u002Fudev\u002Frule.d",[27833,127725,127726],{},"目录即可。",[19,127728,127729],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,127731,127732],{},"（3）.使规则生效",[19,127734,127735],{},"在终端下输入如下指令：",[64,127737,127739],{"className":121577,"code":127738,"language":121579,"meta":69,"style":69},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[71,127740,127741,127746,127758,127769,127773,127778,127791],{"__ignoreMap":69},[74,127742,127743],{"class":76,"line":77},[74,127744,127745],{"class":144},"# Ubuntu用下方命令\n",[74,127747,127748,127750,127752,127755],{"class":76,"line":94},[74,127749,28857],{"class":1925},[74,127751,124329],{"class":190},[74,127753,127754],{"class":190}," udev",[74,127756,127757],{"class":190}," reload\n",[74,127759,127760,127762,127764,127766],{"class":76,"line":1141},[74,127761,28857],{"class":1925},[74,127763,124329],{"class":190},[74,127765,127754],{"class":190},[74,127767,127768],{"class":190}," restart\n",[74,127770,127771],{"class":76,"line":1156},[74,127772,2363],{"emptyLinePlaceholder":2362},[74,127774,127775],{"class":76,"line":1162},[74,127776,127777],{"class":144},"#Fedora用下方命令\n",[74,127779,127780,127782,127785,127788],{"class":76,"line":1176},[74,127781,28857],{"class":1925},[74,127783,127784],{"class":190}," udevadm",[74,127786,127787],{"class":190}," control",[74,127789,127790],{"class":134}," --reload\n",[74,127792,127793,127795,127797],{"class":76,"line":1182},[74,127794,28857],{"class":1925},[74,127796,127784],{"class":190},[74,127798,127799],{"class":190}," trigger\n",[19,127801,127802],{},"再重新插拔设备即可。",[19,127804,127805],{},"（4）.测试",[19,127807,127808],{},"终端下输入如下指令",[64,127810,127812],{"className":121577,"code":127811,"language":121579,"meta":69,"style":69},"ll \u002Fdev | grep ttyUSB\n",[71,127813,127814],{"__ignoreMap":69},[74,127815,127816,127819,127822,127824,127826],{"class":76,"line":77},[74,127817,127818],{"class":1925},"ll",[74,127820,127821],{"class":190}," \u002Fdev",[74,127823,29390],{"class":80},[74,127825,34517],{"class":1925},[74,127827,127828],{"class":190}," ttyUSB\n",[19,127830,127831],{},"运行结果如下：",[19,127833,127834],{},[1424,127835],{"alt":69,"src":127836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,127838,127839,127840,127843],{},"也可以多次插拔USB设备，会发现设备端口",[71,127841,127842],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,127845,127846],{},[235,127847,122245],{},[19,127849,127850],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[44,127852,127854],{"id":127853},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,127856,127857,127859],{},[235,127858,127573],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,127861,127862,127864],{},[235,127863,127579],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,127866,127867],{},[235,127868,127585],{},[19,127870,127871],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,127873,127874],{},"调用如下指令查看第一台雷达的USB信息：",[64,127876,127878],{"className":121577,"code":127877,"language":121579,"meta":69,"style":69},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[71,127879,127880,127900],{"__ignoreMap":69},[74,127881,127882,127885,127887,127890,127893,127895,127897],{"class":76,"line":77},[74,127883,127884],{"class":1925},"udevadm",[74,127886,74102],{"class":190},[74,127888,127889],{"class":134}," --attribute-walk",[74,127891,127892],{"class":134}," --name=\u002Fdev\u002FttyUSB0",[74,127894,29390],{"class":80},[74,127896,34517],{"class":1925},[74,127898,127899],{"class":190}," KERNELS\n",[74,127901,127902,127904,127906,127908,127911,127913,127915],{"class":76,"line":94},[74,127903,127884],{"class":1925},[74,127905,74102],{"class":190},[74,127907,127889],{"class":134},[74,127909,127910],{"class":134}," --name=\u002Fdev\u002FttyACM0",[74,127912,29390],{"class":80},[74,127914,34517],{"class":1925},[74,127916,127899],{"class":190},[19,127918,127919],{},[1424,127920],{"alt":69,"src":127921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,127923,127924],{},"调用如下指令查看第二台雷达的USB信息：",[64,127926,127928],{"className":121577,"code":127927,"language":121579,"meta":69,"style":69},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[71,127929,127930],{"__ignoreMap":69},[74,127931,127932,127934,127936,127938,127941,127943,127945],{"class":76,"line":77},[74,127933,127884],{"class":1925},[74,127935,74102],{"class":190},[74,127937,127889],{"class":134},[74,127939,127940],{"class":134}," --name=\u002Fdev\u002FttyUSB1",[74,127942,29390],{"class":80},[74,127944,34517],{"class":1925},[74,127946,127899],{"class":190},[19,127948,127949,127950,127953,127954,127957,127958,127961],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[71,127951,127952],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[71,127955,127956],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[235,127959,127960],{},"唯一性标识","”。",[19,127963,127613],{},[19,127965,127616,127966,127968],{},[71,127967,127619],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[64,127970,127971],{"className":121577,"code":127623,"language":121579,"meta":69,"style":69},[71,127972,127973],{"__ignoreMap":69},[74,127974,127975,127977,127979],{"class":76,"line":77},[74,127976,28857],{"class":1925},[74,127978,122864],{"class":190},[74,127980,127634],{"class":190},[64,127982,127984],{"className":121577,"code":127983,"language":121579,"meta":69,"style":69},"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",[71,127985,127986,128015],{"__ignoreMap":69},[74,127987,127988,127990,127992,127994,127997,127999,128002,128005,128007,128010,128012],{"class":76,"line":77},[74,127989,127647],{"class":84},[74,127991,131],{"class":80},[74,127993,127652],{"class":190},[74,127995,127996],{"class":84}," KERNELS",[74,127998,131],{"class":80},[74,128000,128001],{"class":190},"=\"1-1.3:1.0\",",[74,128003,128004],{"class":1925}," MODE:",[74,128006,131],{"class":190},[74,128008,128009],{"class":1925},"\"0777\"",[74,128011,464],{"class":1925},[74,128013,128014],{"class":190}," SYMLINK+=\"rplidar_front\"\n",[74,128016,128017,128019,128021,128023,128025,128027,128030,128032,128034,128036,128038],{"class":76,"line":94},[74,128018,127647],{"class":84},[74,128020,131],{"class":80},[74,128022,127652],{"class":190},[74,128024,127996],{"class":84},[74,128026,131],{"class":80},[74,128028,128029],{"class":190},"=\"1-1.4:1.0\",",[74,128031,128004],{"class":1925},[74,128033,131],{"class":190},[74,128035,128009],{"class":1925},[74,128037,464],{"class":1925},[74,128039,128040],{"class":190}," SYMLINK+=\"rplidar_back\"\n",[19,128042,127732],{},[19,128044,127735],{},[64,128046,128047],{"className":121577,"code":127738,"language":121579,"meta":69,"style":69},[71,128048,128049,128053,128063,128073,128077,128081,128091],{"__ignoreMap":69},[74,128050,128051],{"class":76,"line":77},[74,128052,127745],{"class":144},[74,128054,128055,128057,128059,128061],{"class":76,"line":94},[74,128056,28857],{"class":1925},[74,128058,124329],{"class":190},[74,128060,127754],{"class":190},[74,128062,127757],{"class":190},[74,128064,128065,128067,128069,128071],{"class":76,"line":1141},[74,128066,28857],{"class":1925},[74,128068,124329],{"class":190},[74,128070,127754],{"class":190},[74,128072,127768],{"class":190},[74,128074,128075],{"class":76,"line":1156},[74,128076,2363],{"emptyLinePlaceholder":2362},[74,128078,128079],{"class":76,"line":1162},[74,128080,127777],{"class":144},[74,128082,128083,128085,128087,128089],{"class":76,"line":1176},[74,128084,28857],{"class":1925},[74,128086,127784],{"class":190},[74,128088,127787],{"class":190},[74,128090,127790],{"class":134},[74,128092,128093,128095,128097],{"class":76,"line":1182},[74,128094,28857],{"class":1925},[74,128096,127784],{"class":190},[74,128098,127799],{"class":190},[19,128100,127802],{},[19,128102,127805],{},[19,128104,127808,128105,128108],{},[71,128106,128107],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,128110,128111],{},[1424,128112],{"alt":69,"src":128113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,128115,128116],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,128118,128119,128121],{},[235,128120,122245],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[44,128123,128125],{"id":128124},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,128127,128128],{},"（1）.查看所连接的主机USB接口的信息",[64,128130,128132],{"className":121577,"code":128131,"language":121579,"meta":69,"style":69},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[71,128133,128134,128164],{"__ignoreMap":69},[74,128135,128136,128138,128140,128143,128145,128147,128149,128151,128154,128157,128159,128162],{"class":76,"line":77},[74,128137,127884],{"class":1925},[74,128139,74102],{"class":190},[74,128141,128142],{"class":134}," -a",[74,128144,33497],{"class":134},[74,128146,32703],{"class":84},[74,128148,127884],{"class":1925},[74,128150,74102],{"class":190},[74,128152,128153],{"class":134}," -q",[74,128155,128156],{"class":190}," path",[74,128158,29396],{"class":134},[74,128160,128161],{"class":190}," \u002Fdev\u002FttyACM0",[74,128163,91],{"class":84},[74,128165,128166,128168,128170,128172,128174,128176,128178,128180,128182,128184,128186,128189],{"class":76,"line":94},[74,128167,127884],{"class":1925},[74,128169,74102],{"class":190},[74,128171,128142],{"class":134},[74,128173,33497],{"class":134},[74,128175,32703],{"class":84},[74,128177,127884],{"class":1925},[74,128179,74102],{"class":190},[74,128181,128153],{"class":134},[74,128183,128156],{"class":190},[74,128185,29396],{"class":134},[74,128187,128188],{"class":190}," \u002Fdev\u002FttyUSB0",[74,128190,91],{"class":84},[19,128192,128193],{},[1424,128194],{"alt":69,"src":128195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,128197,128198],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,128200,127613],{},[19,128202,127616,128203,127968],{},[71,128204,127619],{},[64,128206,128207],{"className":121577,"code":127623,"language":121579,"meta":69,"style":69},[71,128208,128209],{"__ignoreMap":69},[74,128210,128211,128213,128215],{"class":76,"line":77},[74,128212,28857],{"class":1925},[74,128214,122864],{"class":190},[74,128216,127634],{"class":190},[64,128218,128220],{"className":121577,"code":128219,"language":121579,"meta":69,"style":69},"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",[71,128221,128222,128250,128276],{"__ignoreMap":69},[74,128223,128224,128226,128228,128231,128233,128235,128237,128239,128242,128245,128247],{"class":76,"line":77},[74,128225,127647],{"class":84},[74,128227,131],{"class":80},[74,128229,128230],{"class":190},"=\"ttyACM*\",",[74,128232,127655],{"class":1925},[74,128234,127658],{"class":190},[74,128236,127687],{"class":1925},[74,128238,464],{"class":1925},[74,128240,128241],{"class":190}," ATTRS{idProduct}==\"55d4\",",[74,128243,128244],{"class":190}," ATTRS{serial}==\"0001\",",[74,128246,127669],{"class":190},[74,128248,128249],{"class":190}," SYMLINK+=\"ttyACM_MCU\"\n",[74,128251,128252,128254,128256,128258,128260,128262,128264,128266,128268,128271,128273],{"class":76,"line":94},[74,128253,127647],{"class":84},[74,128255,131],{"class":80},[74,128257,128230],{"class":190},[74,128259,127655],{"class":1925},[74,128261,127658],{"class":190},[74,128263,127687],{"class":1925},[74,128265,464],{"class":1925},[74,128267,128241],{"class":190},[74,128269,128270],{"class":190}," ATTRS{serial}==\"0002\",",[74,128272,127669],{"class":190},[74,128274,128275],{"class":190}," SYMLINK+=\"ttyACM_Lidar\"\n",[74,128277,128278,128280,128282,128284,128286,128288,128290,128292,128294,128296],{"class":76,"line":1141},[74,128279,127647],{"class":84},[74,128281,131],{"class":80},[74,128283,127652],{"class":190},[74,128285,127655],{"class":1925},[74,128287,127658],{"class":190},[74,128289,127687],{"class":1925},[74,128291,464],{"class":1925},[74,128293,127692],{"class":190},[74,128295,127669],{"class":190},[74,128297,128298],{"class":190}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,128300,127732],{},[19,128302,127735],{},[64,128304,128305],{"className":121577,"code":127738,"language":121579,"meta":69,"style":69},[71,128306,128307,128311,128321,128331,128335,128339,128349],{"__ignoreMap":69},[74,128308,128309],{"class":76,"line":77},[74,128310,127745],{"class":144},[74,128312,128313,128315,128317,128319],{"class":76,"line":94},[74,128314,28857],{"class":1925},[74,128316,124329],{"class":190},[74,128318,127754],{"class":190},[74,128320,127757],{"class":190},[74,128322,128323,128325,128327,128329],{"class":76,"line":1141},[74,128324,28857],{"class":1925},[74,128326,124329],{"class":190},[74,128328,127754],{"class":190},[74,128330,127768],{"class":190},[74,128332,128333],{"class":76,"line":1156},[74,128334,2363],{"emptyLinePlaceholder":2362},[74,128336,128337],{"class":76,"line":1162},[74,128338,127777],{"class":144},[74,128340,128341,128343,128345,128347],{"class":76,"line":1176},[74,128342,28857],{"class":1925},[74,128344,127784],{"class":190},[74,128346,127787],{"class":190},[74,128348,127790],{"class":134},[74,128350,128351,128353,128355],{"class":76,"line":1182},[74,128352,28857],{"class":1925},[74,128354,127784],{"class":190},[74,128356,127799],{"class":190},[19,128358,128359,128360],{},"再重新插拔设备即可，或者 ",[235,128361,128362],{},"直接重启系统。",[19,128364,127805],{},[19,128366,127808,128367,128108],{},[71,128368,128107],{},[19,128370,128371],{},[1424,128372],{"alt":69,"src":128373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,128375,128116],{},[19,128377,128378,128380],{},[235,128379,122245],{}," 一些设备可能没有串口号等。",[44,128382,128384],{"id":128383},"_744-其他注意事项","7.4.4 其他注意事项",[19,128386,128387,128388,128390,128391,128394,128395,22689,128398,128401,128402,128404],{},"并非所有的USB设备端口号都是",[71,128389,127842],{},"的格式，比如Arduino的端口号可能是",[71,128392,128393],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[71,128396,128397],{},"videon",[71,128399,128400],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[71,128403,128397],{},"端口，绑定时需要关联的也是该接口。",[19,128406,128407,128408,128411,128412,128415,128416,128418,128419,128422,128423,128426,128427,128430,128431,128430,128434,128430,128437,32666],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[71,128409,128410],{},"KERNEL==\"ttyUSB*\"","修改为",[71,128413,128414],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[71,128417,128410],{},"修改为类似于",[71,128420,128421],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[71,128424,128425],{},"video[0,2,4,6]","表示可以绑定的端口为",[71,128428,128429],{},"video0","或",[71,128432,128433],{},"video2",[71,128435,128436],{},"video4",[71,128438,128439],{},"video6",[14,128441,128443],{"id":128442},"_75-挂载内网网页","7.5 挂载内网网页",[19,128445,128446],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,128448,128449],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,128451,128452],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,128454,128455,128456],{},"Termux 下载地址（F-Droid）：",[324,128457,128458],{"href":128458,"rel":128459},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[28145],[19,128461,128462],{},"首先打开app后，先更新软件缓存：",[64,128464,128466],{"className":121577,"code":128465,"language":121579,"meta":69,"style":69},"pkg update\n",[71,128467,128468],{"__ignoreMap":69},[74,128469,128470,128473],{"class":76,"line":77},[74,128471,128472],{"class":1925},"pkg",[74,128474,30523],{"class":190},[19,128476,128477],{},"然后换源",[64,128479,128481],{"className":121577,"code":128480,"language":121579,"meta":69,"style":69},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[71,128482,128483],{"__ignoreMap":69},[74,128484,128485,128487,128490],{"class":76,"line":77},[74,128486,127355],{"class":1925},[74,128488,128489],{"class":84}," $PREFIX",[74,128491,128492],{"class":190},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,128494,128495],{},"将该文件内容替换为下面：",[64,128497,128499],{"className":121577,"code":128498,"language":121579,"meta":69,"style":69},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[71,128500,128501],{"__ignoreMap":69},[74,128502,128503,128506,128509,128512],{"class":76,"line":77},[74,128504,128505],{"class":1925},"deb",[74,128507,128508],{"class":190}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[74,128510,128511],{"class":190}," stable",[74,128513,128514],{"class":190}," main\n",[1093,128516,128517,128544],{},[30,128518,128519,128520,128522,128523],{},"如果你使用的是",[71,128521,127355],{},"编辑器：",[1093,128524,128525,128532,128538],{},[30,128526,128527,128528,128531],{},"按 ",[71,128529,128530],{},"Ctrl+O"," 保存文件。",[30,128533,128527,128534,128537],{},[71,128535,128536],{},"Enter"," 确认文件名。",[30,128539,128527,128540,128543],{},[71,128541,128542],{},"Ctrl+X"," 退出编辑器。",[30,128545,128519,128546,128522,128549],{},[71,128547,128548],{},"vim",[1093,128550,128551,128557],{},[30,128552,128527,128553,128556],{},[71,128554,128555],{},"Esc"," 退出编辑模式。",[30,128558,128559,128560,128562],{},"输入 ",[71,128561,123502],{}," 保存并退出。",[19,128564,128565],{},"接下来重新更新软件源：",[64,128567,128569],{"className":121577,"code":128568,"language":121579,"meta":69,"style":69},"pkg update && pkg upgrade\n",[71,128570,128571],{"__ignoreMap":69},[74,128572,128573,128575,128577,128579,128581],{"class":76,"line":77},[74,128574,128472],{"class":1925},[74,128576,121628],{"class":190},[74,128578,30471],{"class":84},[74,128580,128472],{"class":1925},[74,128582,121614],{"class":190},[19,128584,128585],{},"安装python：",[64,128587,128589],{"className":121577,"code":128588,"language":121579,"meta":69,"style":69},"pkg install python\n",[71,128590,128591],{"__ignoreMap":69},[74,128592,128593,128595,128597],{"class":76,"line":77},[74,128594,128472],{"class":1925},[74,128596,28114],{"class":190},[74,128598,128599],{"class":190}," python\n",[19,128601,128602,30754],{},[235,128603,128604],{},"通过Termux访问设备存储",[19,128606,128607],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[64,128609,128611],{"className":121577,"code":128610,"language":121579,"meta":69,"style":69},"termux-setup-storage\n",[71,128612,128613],{"__ignoreMap":69},[74,128614,128615],{"class":76,"line":77},[74,128616,128610],{"class":1925},[27,128618,128619],{},[30,128620,128621,30754,128624],{},[235,128622,128623],{},"进入HTML文件所在的目录",[27,128625,128626],{},[30,128627,128628,128629,128631],{},"使用",[71,128630,105557],{},"命令进入HTML文件所在的目录：",[64,128633,128635],{"className":121577,"code":128634,"language":121579,"meta":69,"style":69},"cd ~\u002Fyour_html_folder\n",[71,128636,128637],{"__ignoreMap":69},[74,128638,128639,128641],{"class":76,"line":77},[74,128640,105557],{"class":134},[74,128642,128643],{"class":190}," ~\u002Fyour_html_folder\n",[27,128645,128646],{"start":94},[30,128647,128648,30754,128651,128656,128673],{},[235,128649,128650],{},"启动Python HTTP服务器",[27,128652,128653],{},[30,128654,128655],{},"运行以下命令启动一个简单的HTTP服务器：",[64,128657,128659],{"className":121577,"code":128658,"language":121579,"meta":69,"style":69},"python -m http.server 8000\n",[71,128660,128661],{"__ignoreMap":69},[74,128662,128663,128665,128667,128670],{"class":76,"line":77},[74,128664,34661],{"class":1925},[74,128666,105163],{"class":134},[74,128668,128669],{"class":190}," http.server",[74,128671,128672],{"class":134}," 8000\n",[27,128674,128675],{"start":1141},[30,128676,128677,128678,128681],{},"这会在端口",[71,128679,128680],{},"8000","上启动一个Web服务器。",[1093,128683,128684],{},[30,128685,128686],{},"启动服务器后，Termux会显示日志信息，例如：",[64,128688,128690],{"className":125097,"code":128689,"language":125099,"meta":125100,"style":69},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[71,128691,128692],{"__ignoreMap":69},[74,128693,128694],{"class":76,"line":77},[74,128695,128689],{},[1093,128697,128698],{},[30,128699,128700],{},"这表示服务器已成功启动。",[19,128702,128703],{},[235,128704,128705],{},"在浏览器中访问HTML文件",[27,128707,128708],{},[30,128709,128710,30754,128713,128718],{},[235,128711,128712],{},"在同一设备上访问",[27,128714,128715],{},[30,128716,128717],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[64,128719,128722],{"className":128720,"code":128721,"language":75945,"meta":69,"style":69},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[71,128723,128724],{"__ignoreMap":69},[74,128725,128726,128729],{"class":76,"line":77},[74,128727,128728],{"class":84},"http:",[74,128730,128731],{"class":144},"\u002F\u002Flocalhost:8000\n",[1093,128733,128734],{},[30,128735,128736,128737,128740],{},"如果HTML文件中有",[71,128738,128739],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,128742,128744],{"id":128743},"_76-linux重点知识","7.6 Linux重点知识",[44,128746,128748],{"id":128747},"_761-关于点的说明","7.6.1 关于点的说明",[19,128750,128751],{},[1424,128752],{"alt":69,"src":128753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,128755,128756],{},"一点本目录，两点上目录",[44,128758,128760],{"id":128759},"_762-目录","7.6.2 目录",[26277,128762,128764],{"id":128763},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,128766,128767],{},[235,128768,128769],{},"\u002Fboot:",[19,128771,128772],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,128774,128775],{},[235,128776,128777],{},"\u002Fetc:",[19,128779,128780],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,128782,128783],{},[235,128784,128785],{},"\u002Flib：",[19,128787,128788],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,128790,128791],{},[235,128792,128793],{},"\u002Fsys:",[19,128795,128796],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[26277,128798,128800],{"id":128799},"_7622-指令集合","7.6.2.2 指令集合",[19,128802,128803],{},[235,128804,128805],{},"\u002Fbin:",[19,128807,128808],{},"为二进制文件的缩写，存放最经常使用的命令",[19,128810,128811],{},[235,128812,128813],{},"\u002Fsbin:",[19,128815,128816],{},"只有系统管理员才能使用的程序和指令",[26277,128818,128820],{"id":128819},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,128822,128823],{},[235,128824,128825],{},"\u002Fdev:",[19,128827,128828],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,128830,128831],{},[235,128832,128833],{},"\u002Fmedia:",[19,128835,128836],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,128838,128839],{},[235,128840,128841],{},"\u002Fmnt:",[19,128843,128844],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[26277,128846,128848],{"id":128847},"_7624-临时文件","7.6.2.4 临时文件",[19,128850,128851],{},[235,128852,128853],{},"\u002Frun:",[19,128855,128856],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,128858,128859],{},[235,128860,128861],{},"\u002Flost+found:",[19,128863,128864],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,128866,128867],{},[235,128868,128869],{},"\u002Ftmp:",[19,128871,128872],{},"这个目录是用来存放一些临时文件的",[26277,128874,128876],{"id":128875},"_7625-账户","7.6.2.5 账户",[19,128878,128879],{},[235,128880,128881],{},"\u002Froot：",[19,128883,128884],{},"系统管理员的用户主目录",[19,128886,128887,30754],{},[235,128888,128889],{},"\u002Fhome",[19,128891,128892],{},"用户的主目录，以用户的账号命名的",[19,128894,128895,30754],{},[235,128896,128897],{},"\u002Fusr",[19,128899,128900],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,128902,128903],{},[235,128904,128905],{},"\u002Fusr\u002Fbin：",[19,128907,128908],{},"系统用户使用的应用程序与指令",[19,128910,128911],{},[235,128912,128913],{},"\u002Fusr\u002Fsbin：",[19,128915,128916],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,128918,128919],{},[235,128920,128921],{},"\u002Fusr\u002Fsrc：",[19,128923,128924],{},"内核源代码默认的放置目录",[26277,128926,128928],{"id":128927},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,128930,128931],{},[235,128932,128933],{},"\u002Fvar：",[19,128935,128936],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,128938,128939],{},[235,128940,128941],{},"\u002Fproc:",[19,128943,128944,128945,128948],{},"管理 ",[235,128946,128947],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[26277,128950,128952],{"id":128951},"_7627-扩展用的","7.6.2.7 扩展用的",[19,128954,128955],{},[235,128956,128957],{},"\u002Fopt:",[19,128959,128960],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,128962,128963],{},[235,128964,128965],{},"\u002Fsrv:",[19,128967,128968],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[44,128970,128972],{"id":128971},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,128974,128975],{},[1424,128976],{"alt":69,"src":128977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,128979,128980],{},"windows-->linux:",[19,128982,128983],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,128985,128986],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,128988,128989],{},"linux传输文件到windows",[19,128991,128992],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[44,128994,128996],{"id":128995},"_764-易忘知识","7.6.4 易忘知识",[19,128998,128999],{},"操作系统内核查看",[64,129001,129002],{"className":121577,"code":125571,"language":121579,"meta":69,"style":69},[71,129003,129004],{"__ignoreMap":69},[74,129005,129006,129008],{"class":76,"line":77},[74,129007,74485],{"class":1925},[74,129009,125580],{"class":134},[19,129011,129012],{},[1424,129013],{"alt":69,"src":129014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,129016,129017],{},[1424,129018],{"alt":69,"src":129019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[64,129021,129023],{"className":121577,"code":129022,"language":121579,"meta":69,"style":69},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[71,129024,129025,129037],{"__ignoreMap":69},[74,129026,129027,129029,129032,129035],{"class":76,"line":77},[74,129028,125788],{"class":1925},[74,129030,129031],{"class":190}," mvtest",[74,129033,129034],{"class":190}," mvtest2",[74,129036,2637],{"class":84},[74,129038,129039],{"class":76,"line":94},[74,129040,129041],{"class":1925},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,129043,129044],{},[1424,129045],{"alt":69,"src":129046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,129048,129049],{},[1424,129050],{"alt":69,"src":129051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,129053,129054,129055,129058],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[71,129056,129057],{},"du -a"," 可以快速查看磁盘使用细节。",[44,129060,129062],{"id":129061},"_765-vim","7.6.5 Vim",[19,129064,129065],{},[1424,129066],{"alt":69,"src":129067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,129069,129070],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,129072,129073],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,129075,129076],{},[235,129077,129078],{},"1.命令模式：",[19,129080,129081],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,129083,129084],{},"x 删除当前光标所在处的字符",[19,129086,129087],{},"：切换到底线命令模式，以在最底一行输入命令",[19,129089,129090],{},"a 进行插入模式，在光标下一个位置输入文本",[19,129092,129093],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,129095,129096],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,129098,129099],{},"dd 剪切当前行",[19,129101,129102],{},"yy 复制当前行",[19,129104,129105],{},"p 粘贴剪贴板内容到光标下方",[19,129107,129108],{},"P 粘贴剪贴板内容到光标上方",[19,129110,129111],{},"u 撤销上一次操作",[19,129113,129114],{},"ctrl+r 重做上一次操作",[19,129116,129117,129119],{},[881,129118],{}," 保存文件",[19,129121,129122,129124],{},[731,129123],{}," 退出Vim编辑器",[19,129126,129127,129129],{},[731,129128],{},"! 强制退出Vim编辑器，不保存修改",[19,129131,129132],{},[235,129133,129134],{},"2.输入模式：",[19,129136,129137],{},[1424,129138],{"alt":69,"src":129139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,129141,129142],{},[235,129143,129144],{},"3.底线命令模式：",[19,129146,129147],{},[1424,129148],{"alt":69,"src":129149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,129151,129152],{},"按下esc可以退出底线命令模式",[44,129154,129156],{"id":129155},"_766-apt","7.6.6 apt",[19,129158,129159],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[44,129161,129163],{"id":129162},"_767-home与root的区别","7.6.7 home与root的区别",[19,129165,129166],{},[1424,129167],{"alt":69,"src":129168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,129170,129171],{},[1424,129172],{"alt":69,"src":129173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,129175,129176],{},[1424,129177],{"alt":69,"src":129178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,129180,129181],{},[1424,129182],{"alt":69,"src":129183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[44,129185,129187],{"id":129186},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,129189,129190],{},[324,129191,129192],{"href":129192,"rel":129193},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[28145],[27,129195,129196,129199],{},[30,129197,129198],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[30,129200,129201],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,129203,129204],{},[1424,129205],{"alt":69,"src":129206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,129208,129209],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,129211,129212],{},[1424,129213],{"alt":69,"src":129214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[64,129216,129218],{"className":125097,"code":129217,"language":125099,"meta":125100,"style":69},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[71,129219,129220,129225],{"__ignoreMap":69},[74,129221,129222],{"class":76,"line":77},[74,129223,129224],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[74,129226,129227],{"class":76,"line":94},[74,129228,129229],{},".\u002Fpycharm.sh\n",[19,129231,129232],{},"3️⃣创建.desktop文件",[19,129234,129235],{},[235,129236,129237],{},"原理：",[1093,129239,129240,129250],{},[30,129241,129242,129243,129249],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[235,129244,129245,129248],{},[71,129246,129247],{},".desktop"," 文件"," 来识别应用。",[30,129251,129252,129254,129255],{},[71,129253,129247],{}," 文件相当于一个“应用注册表”，告诉系统：",[1093,129256,129257,129260,129263,129266,129269],{},[30,129258,129259],{},"应用名字（Name）",[30,129261,129262],{},"图标（Icon）",[30,129264,129265],{},"执行命令（Exec）",[30,129267,129268],{},"分类（Categories）",[30,129270,129271],{},"是否需要终端（Terminal）",[64,129273,129275],{"className":125097,"code":129274,"language":125099,"meta":125100,"style":69},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[71,129276,129277,129282],{"__ignoreMap":69},[74,129278,129279],{"class":76,"line":77},[74,129280,129281],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[74,129283,129284],{"class":76,"line":94},[74,129285,129286],{},"nano pycharm.desktop\n",[19,129288,129289],{},"nano是一个命令行下的编辑器，也可以使用vim",[64,129291,129293],{"className":125097,"code":129292,"language":125099,"meta":125100,"style":69},"[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",[71,129294,129295,129300,129305,129310,129315,129320,129325,129330,129335,129340],{"__ignoreMap":69},[74,129296,129297],{"class":76,"line":77},[74,129298,129299],{},"[Desktop Entry]\n",[74,129301,129302],{"class":76,"line":94},[74,129303,129304],{},"Version=1.0\n",[74,129306,129307],{"class":76,"line":1141},[74,129308,129309],{},"Type=Application\n",[74,129311,129312],{"class":76,"line":1156},[74,129313,129314],{},"Name=PyCharm\n",[74,129316,129317],{"class":76,"line":1162},[74,129318,129319],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[74,129321,129322],{"class":76,"line":1176},[74,129323,129324],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[74,129326,129327],{"class":76,"line":1182},[74,129328,129329],{},"Comment=JetBrains PyCharm IDE\n",[74,129331,129332],{"class":76,"line":1273},[74,129333,129334],{},"Categories=Development;IDE;\n",[74,129336,129337],{"class":76,"line":1279},[74,129338,129339],{},"Terminal=false\n",[74,129341,129342],{"class":76,"line":1291},[74,129343,129344],{},"StartupWMClass=jetbrains-pycharm\n",[1093,129346,129347,129353,129359,129365],{},[30,129348,129349,129352],{},[71,129350,129351],{},"Exec"," → 点击图标时执行的命令",[30,129354,129355,129358],{},[71,129356,129357],{},"Icon"," → 显示在菜单和桌面上的图标",[30,129360,129361,129364],{},[71,129362,129363],{},"Terminal=false"," → 不打开终端",[30,129366,129367,129370],{},[71,129368,129369],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[129372,129373,129374],"blockquote",{},[19,129375,129376,129377,129379,129380],{},"可以理解成 ",[71,129378,129247],{}," 文件是 Linux 的 ",[235,129381,129382],{},"快捷方式配置文件",[19,129384,129385],{},"4️⃣设置可执行权限",[64,129387,129389],{"className":125097,"code":129388,"language":125099,"meta":125100,"style":69},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[71,129390,129391],{"__ignoreMap":69},[74,129392,129393],{"class":76,"line":77},[74,129394,129388],{},[19,129396,129397],{},"5️⃣桌面图标启动的话如下：",[64,129399,129401],{"className":125097,"code":129400,"language":125099,"meta":125100,"style":69},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[71,129402,129403,129408],{"__ignoreMap":69},[74,129404,129405],{"class":76,"line":77},[74,129406,129407],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[74,129409,129410],{"class":76,"line":94},[74,129411,129412],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[27,129414,129415],{"start":1141},[30,129416,129417],{},"下载Appimage文件实现软件的安装",[19,129419,129420],{},"1️⃣先下载appimage",[19,129422,129423],{},[324,129424,129425],{"href":129425,"rel":129426},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[28145],[19,129428,129429],{},[1424,129430],{"alt":69,"src":129431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,129433,129434],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,129436,129437],{},[1424,129438],{"alt":69,"src":129439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,129441,129442],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,129444,129445],{},[1424,129446],{"alt":69,"src":129447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,129449,129450],{},[1424,129451],{"alt":69,"src":129452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,129454,129455,129456,129459],{},"3️⃣给他们放在",[71,129457,129458],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,129461,129462],{},"4️⃣给软件执行权限",[64,129464,129466],{"className":125097,"code":129465,"language":125099,"meta":125100,"style":69},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[71,129467,129468,129473],{"__ignoreMap":69},[74,129469,129470],{"class":76,"line":77},[74,129471,129472],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[74,129474,129475],{"class":76,"line":94},[74,129476,129477],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,129479,129480],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[64,129482,129484],{"className":121577,"code":129483,"language":121579,"meta":69,"style":69},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[71,129485,129486,129493,129500,129506],{"__ignoreMap":69},[74,129487,129488,129490],{"class":76,"line":77},[74,129489,105557],{"class":134},[74,129491,129492],{"class":190}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[74,129494,129495,129497],{"class":76,"line":94},[74,129496,105564],{"class":1925},[74,129498,129499],{"class":190}," .\u002Fqqmusic.desktop\n",[74,129501,129502,129504],{"class":76,"line":1141},[74,129503,128548],{"class":1925},[74,129505,129499],{"class":190},[74,129507,129508,129510,129512,129514],{"class":76,"line":1156},[74,129509,28857],{"class":1925},[74,129511,28860],{"class":190},[74,129513,127414],{"class":190},[74,129515,129499],{"class":190},[19,129517,129518,129520],{},[71,129519,105564],{},"：一个 Linux 命令，主要功能是：",[1093,129522,129523,129526],{},[30,129524,129525],{},"如果文件不存在，就创建一个新的空文件",[30,129527,129528],{},"如果文件已存在，就更新该文件的最后修改时间",[64,129530,129532],{"className":125097,"code":129531,"language":125099,"meta":125100,"style":69},"[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",[71,129533,129534,129538,129543,129548,129553,129557,129562],{"__ignoreMap":69},[74,129535,129536],{"class":76,"line":77},[74,129537,129299],{},[74,129539,129540],{"class":76,"line":94},[74,129541,129542],{},"Name=QQ音乐\n",[74,129544,129545],{"class":76,"line":1141},[74,129546,129547],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[74,129549,129550],{"class":76,"line":1156},[74,129551,129552],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[74,129554,129555],{"class":76,"line":1162},[74,129556,129309],{},[74,129558,129559],{"class":76,"line":1176},[74,129560,129561],{},"Categories=Audio;Music;Player;\n",[74,129563,129564],{"class":76,"line":1182},[74,129565,129566],{},"Comment=QQ Music Client for Linux\n",[19,129568,129569],{},"将文件复制进去",[19,129571,129572],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,129574,129575],{},[1424,129576],{"alt":69,"src":129577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,129579,129580],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,129582,129583],{},[1424,129584],{"alt":69,"src":129585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,129587,129588,129589,129592,129593,129596],{},"如果你用的不是KDE，那么也可以直接修改",[71,129590,129591],{},"qqmuic.desktop","：在exec的末尾加上",[71,129594,129595],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[64,129598,129600],{"className":125097,"code":129599,"language":125099,"meta":125100,"style":69},"[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",[71,129601,129602,129606,129610,129615,129619,129623,129627],{"__ignoreMap":69},[74,129603,129604],{"class":76,"line":77},[74,129605,129299],{},[74,129607,129608],{"class":76,"line":94},[74,129609,129542],{},[74,129611,129612],{"class":76,"line":1141},[74,129613,129614],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[74,129616,129617],{"class":76,"line":1156},[74,129618,129552],{},[74,129620,129621],{"class":76,"line":1162},[74,129622,129309],{},[74,129624,129625],{"class":76,"line":1176},[74,129626,129561],{},[74,129628,129629],{"class":76,"line":1182},[74,129630,129566],{},[19,129632,129633],{},[1424,129634],{"alt":69,"src":129635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,129637,129638],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[64,129640,129642],{"className":125097,"code":129641,"language":125099,"meta":125100,"style":69},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[71,129643,129644],{"__ignoreMap":69},[74,129645,129646],{"class":76,"line":77},[74,129647,129641],{},[27,129649,129650],{"start":1156},[30,129651,129652],{},"去Flathub上安装软件",[19,129654,129655],{},[324,129656,129657],{"href":129657,"rel":129658},"https:\u002F\u002Fflathub.org\u002F",[28145],[19,129660,129661],{},"1️⃣去上面的官网搜索软件+下载软件",[19,129663,129664],{},[1424,129665],{"alt":69,"src":129666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[64,129668,129670],{"className":125097,"code":129669,"language":125099,"meta":125100,"style":69},"flatpak install flathub com.obsproject.Studio\n",[71,129671,129672],{"__ignoreMap":69},[74,129673,129674],{"class":76,"line":77},[74,129675,129669],{},[19,129677,129678],{},[1424,129679],{"alt":69,"src":129680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,129682,129683],{},"2️⃣运行软件",[19,129685,129686],{},"a.官方方式：",[19,129688,129689],{},[1424,129690],{"alt":69,"src":129691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[64,129693,129694],{"className":125097,"code":129669,"language":125099,"meta":125100,"style":69},[71,129695,129696],{"__ignoreMap":69},[74,129697,129698],{"class":76,"line":77},[74,129699,129669],{},[19,129701,129702],{},"b.当普通软件运行：",[19,129704,129705],{},[1424,129706],{"alt":69,"src":129707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,129709,129710],{},[1424,129711],{"alt":69,"src":129712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5090,129714,129715],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":69,"searchDepth":94,"depth":94,"links":129717},[129718,129719,129724,129725,129731,129732],{"id":126450,"depth":94,"text":126451},{"id":126792,"depth":94,"text":126793,"children":129720},[129721,129722,129723],{"id":126796,"depth":1141,"text":126797},{"id":126863,"depth":1141,"text":126864},{"id":127124,"depth":1141,"text":127125},{"id":127277,"depth":94,"text":127278},{"id":127515,"depth":94,"text":127516,"children":129726},[129727,129728,129729,129730],{"id":127567,"depth":1141,"text":127568},{"id":127853,"depth":1141,"text":127854},{"id":128124,"depth":1141,"text":128125},{"id":128383,"depth":1141,"text":128384},{"id":128442,"depth":94,"text":128443},{"id":128743,"depth":94,"text":128744,"children":129733},[129734,129735,129736,129737,129738,129739,129740,129741],{"id":128747,"depth":1141,"text":128748},{"id":128759,"depth":1141,"text":128760},{"id":128971,"depth":1141,"text":128972},{"id":128995,"depth":1141,"text":128996},{"id":129061,"depth":1141,"text":129062},{"id":129155,"depth":1141,"text":129156},{"id":129162,"depth":1141,"text":129163},{"id":129186,"depth":1141,"text":129187},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":126442,"description":27656},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":129748,"title":129749,"body":129750,"description":27656,"extension":5121,"meta":129754,"navigation":2362,"path":129755,"seo":129756,"stem":129757,"__hash__":129758},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":129751,"toc":129752},[],{"title":69,"searchDepth":94,"depth":94,"links":129753},[],{"category":34544},"\u002Fwiki\u002F2025-01-27-linux",{"title":129749,"description":27656},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":129760,"title":129761,"body":129762,"description":129766,"extension":5121,"meta":130157,"navigation":2362,"path":130158,"seo":130159,"stem":130160,"__hash__":130161},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":129763,"toc":130155},[129764,129767,129771,129788,129791,129844,129848,129850,129890,129899,129903,129906,130147,130152],[19,129765,129766],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,129768,129770],{"id":129769},"_1ubuntu环境配置","1.Ubuntu环境配置",[27,129772,129773,129776,129779,129782,129785],{},[30,129774,129775],{},"ubuntu环境换源",[30,129777,129778],{},"安装cuda",[30,129780,129781],{},"安装miniconda",[30,129783,129784],{},"安装pytorch",[30,129786,129787],{},"安装genesis",[19,129789,129790],{},"参考链接：",[64,129792,129794],{"className":28102,"code":129793,"language":28104,"meta":69,"style":69},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[71,129795,129796],{"__ignoreMap":69},[74,129797,129798,129801,129804,129807,129809,129812,129815,129817,129820,129823,129825,129828,129831,129833,129836,129839,129841],{"class":76,"line":77},[74,129799,129800],{"class":1925},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[74,129802,129803],{"class":190},"=blogdetail",[74,129805,129806],{"class":84},"&sharetype",[74,129808,131],{"class":80},[74,129810,129811],{"class":190},"blogdetail",[74,129813,129814],{"class":84},"&sharerId",[74,129816,131],{"class":80},[74,129818,129819],{"class":190},"144728092",[74,129821,129822],{"class":84},"&sharerefer",[74,129824,131],{"class":80},[74,129826,129827],{"class":190},"PC",[74,129829,129830],{"class":84},"&sharesource",[74,129832,131],{"class":80},[74,129834,129835],{"class":190},"qq_69379513",[74,129837,129838],{"class":84},"&sharefrom",[74,129840,131],{"class":80},[74,129842,129843],{"class":190},"from_link\n",[10,129845,129847],{"id":129846},"_2genesis-报错issue","2.Genesis 报错issue",[19,129849,129790],{},[64,129851,129852],{"className":28102,"code":129793,"language":28104,"meta":69,"style":69},[71,129853,129854],{"__ignoreMap":69},[74,129855,129856,129858,129860,129862,129864,129866,129868,129870,129872,129874,129876,129878,129880,129882,129884,129886,129888],{"class":76,"line":77},[74,129857,129800],{"class":1925},[74,129859,129803],{"class":190},[74,129861,129806],{"class":84},[74,129863,131],{"class":80},[74,129865,129811],{"class":190},[74,129867,129814],{"class":84},[74,129869,131],{"class":80},[74,129871,129819],{"class":190},[74,129873,129822],{"class":84},[74,129875,131],{"class":80},[74,129877,129827],{"class":190},[74,129879,129830],{"class":84},[74,129881,131],{"class":80},[74,129883,129835],{"class":190},[74,129885,129838],{"class":84},[74,129887,131],{"class":80},[74,129889,129843],{"class":190},[64,129891,129893],{"className":28102,"code":129892,"language":28104,"meta":69,"style":69},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[71,129894,129895],{"__ignoreMap":69},[74,129896,129897],{"class":76,"line":77},[74,129898,129892],{"class":1925},[10,129900,129902],{"id":129901},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,129904,129905],{},"hello_robot.py",[64,129907,129909],{"className":34659,"code":129908,"language":34661,"meta":69,"style":69},"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",[71,129910,129911,129917,129932,129936,129948,129960,129964,129977,129981,130000,130010,130020,130034,130038,130042,130047,130051,130061,130068,130082,130089,130099,130104,130108,130126,130131,130135,130142],{"__ignoreMap":69},[74,129912,129913,129915],{"class":76,"line":77},[74,129914,34673],{"class":80},[74,129916,49586],{"class":84},[74,129918,129919,129922,129925,129927,129929],{"class":76,"line":94},[74,129920,129921],{"class":84},"os.environ[",[74,129923,129924],{"class":190},"'PYOPENGL_PLATFORM'",[74,129926,4406],{"class":84},[74,129928,131],{"class":80},[74,129930,129931],{"class":190}," 'glx'\n",[74,129933,129934],{"class":76,"line":1141},[74,129935,2363],{"emptyLinePlaceholder":2362},[74,129937,129938,129940,129943,129945],{"class":76,"line":1156},[74,129939,34673],{"class":80},[74,129941,129942],{"class":84}," genesis ",[74,129944,35664],{"class":80},[74,129946,129947],{"class":84}," gs\n",[74,129949,129950,129952,129955,129957],{"class":76,"line":1162},[74,129951,35018],{"class":80},[74,129953,129954],{"class":84}," pynput ",[74,129956,34673],{"class":80},[74,129958,129959],{"class":84}," keyboard\n",[74,129961,129962],{"class":76,"line":1176},[74,129963,2363],{"emptyLinePlaceholder":2362},[74,129965,129966,129969,129972,129974],{"class":76,"line":1182},[74,129967,129968],{"class":84},"gs.init(",[74,129970,129971],{"class":9495},"backend",[74,129973,131],{"class":80},[74,129975,129976],{"class":84},"gs.gpu)\n",[74,129978,129979],{"class":76,"line":1273},[74,129980,2363],{"emptyLinePlaceholder":2362},[74,129982,129983,129986,129988,129991,129994,129996,129998],{"class":76,"line":1279},[74,129984,129985],{"class":84},"scene ",[74,129987,131],{"class":80},[74,129989,129990],{"class":84}," gs.Scene(",[74,129992,129993],{"class":9495},"show_viewer",[74,129995,131],{"class":80},[74,129997,35757],{"class":134},[74,129999,91],{"class":84},[74,130001,130002,130005,130007],{"class":76,"line":1291},[74,130003,130004],{"class":84},"plane ",[74,130006,131],{"class":80},[74,130008,130009],{"class":84}," scene.add_entity(gs.morphs.Plane())\n",[74,130011,130012,130015,130017],{"class":76,"line":1574},[74,130013,130014],{"class":84},"franka ",[74,130016,131],{"class":80},[74,130018,130019],{"class":84}," scene.add_entity(\n",[74,130021,130022,130025,130027,130029,130032],{"class":76,"line":1579},[74,130023,130024],{"class":84},"    gs.morphs.MJCF(",[74,130026,49635],{"class":9495},[74,130028,131],{"class":80},[74,130030,130031],{"class":190},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[74,130033,42328],{"class":84},[74,130035,130036],{"class":76,"line":1585},[74,130037,91],{"class":84},[74,130039,130040],{"class":76,"line":1590},[74,130041,2363],{"emptyLinePlaceholder":2362},[74,130043,130044],{"class":76,"line":1604},[74,130045,130046],{"class":84},"scene.build()\n",[74,130048,130049],{"class":76,"line":1609},[74,130050,2363],{"emptyLinePlaceholder":2362},[74,130052,130053,130055,130058],{"class":76,"line":1615},[74,130054,36228],{"class":80},[74,130056,130057],{"class":1925}," on_press",[74,130059,130060],{"class":84},"(key):\n",[74,130062,130063,130066],{"class":76,"line":1636},[74,130064,130065],{"class":80},"    try",[74,130067,3702],{"class":84},[74,130069,130070,130072,130075,130077,130080],{"class":76,"line":1641},[74,130071,2460],{"class":80},[74,130073,130074],{"class":84}," key.char ",[74,130076,2912],{"class":80},[74,130078,130079],{"class":190}," 'q'",[74,130081,3702],{"class":84},[74,130083,130084,130086],{"class":76,"line":1655},[74,130085,20011],{"class":80},[74,130087,130088],{"class":134}," False\n",[74,130090,130091,130094,130097],{"class":76,"line":1660},[74,130092,130093],{"class":80},"    except",[74,130095,130096],{"class":134}," AttributeError",[74,130098,3702],{"class":84},[74,130100,130101],{"class":76,"line":1689},[74,130102,130103],{"class":80},"        pass\n",[74,130105,130106],{"class":76,"line":1694},[74,130107,2363],{"emptyLinePlaceholder":2362},[74,130109,130110,130113,130115,130118,130121,130123],{"class":76,"line":1711},[74,130111,130112],{"class":84},"listener ",[74,130114,131],{"class":80},[74,130116,130117],{"class":84}," keyboard.Listener(",[74,130119,130120],{"class":9495},"on_press",[74,130122,131],{"class":80},[74,130124,130125],{"class":84},"on_press)\n",[74,130127,130128],{"class":76,"line":1716},[74,130129,130130],{"class":84},"listener.start()\n",[74,130132,130133],{"class":76,"line":1721},[74,130134,2363],{"emptyLinePlaceholder":2362},[74,130136,130137,130139],{"class":76,"line":1726},[74,130138,112944],{"class":80},[74,130140,130141],{"class":84}," listener.running:\n",[74,130143,130144],{"class":76,"line":1740},[74,130145,130146],{"class":84},"    scene.step()\n",[19,130148,130149],{},[1424,130150],{"alt":69,"src":130151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5090,130153,130154],{},"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":69,"searchDepth":94,"depth":94,"links":130156},[],{"category":27658},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":129761,"description":129766},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":130163,"title":130164,"body":130165,"description":27656,"extension":5121,"meta":130180,"navigation":2362,"path":130181,"seo":130182,"stem":130183,"__hash__":130184},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":130166,"toc":130177},[130167,130170,130174],[10,130168,130164],{"id":130169},"_1-基础知识",[14,130171,130173],{"id":130172},"_11-js的组成","1.1 js的组成",[19,130175,130176],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":69,"searchDepth":94,"depth":94,"links":130178},[130179],{"id":130172,"depth":94,"text":130173},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":130164,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":130186,"title":130187,"body":130188,"description":27656,"extension":5121,"meta":130327,"navigation":2362,"path":130328,"seo":130329,"stem":130330,"__hash__":130331},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":130189,"toc":130315},[130190,130193,130197,130200,130204,130214,130218,130221,130224,130227,130231,130238,130244,130248,130254,130265,130269,130272,130276,130279,130283,130286,130290,130293,130297,130300,130303,130306,130309,130312],[10,130191,130187],{"id":130192},"_2-vscode必备内容",[14,130194,130196],{"id":130195},"_21-标签分类","2.1 标签分类",[19,130198,130199],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,130201,130203],{"id":130202},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,130205,130206,130207,130209,130210,130213],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[71,130208,312],{}," 然后按 ",[71,130211,130212],{},"Tab","，快速自动生成基本结构。",[14,130215,130217],{"id":130216},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,130219,130220],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,130222,130223],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,130225,130226],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,130228,130230],{"id":130229},"_24-视图缩放","2.4 视图缩放",[19,130232,130233,130234,130237],{},"缩放视图 ",[71,130235,130236],{},"ctrl+"," 可实现代码增大。",[19,130239,130240,130243],{},[71,130241,130242],{},"ctrl-"," 可实现代码减小。",[14,130245,130247],{"id":130246},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,130249,130250,130251,32666],{},"VSCode 新建文件快捷键为 ",[71,130252,130253],{},"ctrl+N",[19,130255,130256,130257,130260,130261,130264],{},"保存快捷键为 ",[71,130258,130259],{},"ctrl+S","，将文本保存为 ",[71,130262,130263],{},".html"," 文件。",[14,130266,130268],{"id":130267},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,130270,130271],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,130273,130275],{"id":130274},"_27-vscode-icons","2.7 vscode-icons",[19,130277,130278],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,130280,130282],{"id":130281},"_28-easy-less","2.8 Easy LESS",[19,130284,130285],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,130287,130289],{"id":130288},"_29-会了吧插件","2.9 会了吧插件",[19,130291,130292],{},"会了吧插件可以展示代码中英语单词的意思。",[14,130294,130296],{"id":130295},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,130298,130299],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,130301,130302],{},"②选定多个相同的单词:ctrl+D",[19,130304,130305],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,130307,130308],{},"④全局替换某些单词:ctrl+h",[19,130310,130311],{},"⑤快速定位到某一行:ctrl+g",[19,130313,130314],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":69,"searchDepth":94,"depth":94,"links":130316},[130317,130318,130319,130320,130321,130322,130323,130324,130325,130326],{"id":130195,"depth":94,"text":130196},{"id":130202,"depth":94,"text":130203},{"id":130216,"depth":94,"text":130217},{"id":130229,"depth":94,"text":130230},{"id":130246,"depth":94,"text":130247},{"id":130267,"depth":94,"text":130268},{"id":130274,"depth":94,"text":130275},{"id":130281,"depth":94,"text":130282},{"id":130288,"depth":94,"text":130289},{"id":130295,"depth":94,"text":130296},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":130187,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":130333,"title":130334,"body":130335,"description":27656,"extension":5121,"meta":130494,"navigation":2362,"path":130495,"seo":130496,"stem":130497,"__hash__":130498},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":130336,"toc":130486},[130337,130340,130344,130354,130360,130366,130370,130379,130383,130388,130391,130394,130398,130401,130411,130420,130429,130438,130448,130455,130460,130465,130478],[10,130338,130334],{"id":130339},"_3-html文本与容器标签",[14,130341,130343],{"id":130342},"_31-标题标签","3.1 标题标签",[19,130345,130346,130349,130350,130353],{},[71,130347,130348],{},"\u003Ch1>","我是一级标签",[71,130351,130352],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,130355,130356,130349,130358],{},[71,130357,130348],{},[71,130359,130352],{},[19,130361,127616,130362,130365],{},[71,130363,130364],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,130367,130369],{"id":130368},"_32-段落标签","3.2 段落标签",[19,130371,130372,130375,130376],{},[71,130373,130374],{},"\u003Cp>","....",[71,130377,130378],{},"\u003C\u002Fp>",[14,130380,130382],{"id":130381},"_33-换行标签","3.3 换行标签",[19,130384,130385],{},[71,130386,130387],{},"\u003Cbr \u002F>",[19,130389,130390],{},"具有强制换行的作用",[19,130392,130393],{},"单标签",[14,130395,130397],{"id":130396},"_34-文本格式化标签","3.4 文本格式化标签",[19,130399,130400],{},"提供粗体、斜体和下划线等效果",[19,130402,130403,130404,86820,130407,130410],{},"加粗：",[71,130405,130406],{},"\u003Cstrong>...\u003C\u002Fstrong>",[71,130408,130409],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,130412,130413,130414,86820,130417,130410],{},"斜体：",[71,130415,130416],{},"\u003Cem>...\u003C\u002Fem>",[71,130418,130419],{},"\u003Ci>...\u003C\u002Fi>",[19,130421,130422,130423,86820,130426,130410],{},"删除线：",[71,130424,130425],{},"\u003Cdel>...\u003C\u002Fdel>",[71,130427,130428],{},"\u003Cs>...\u003C\u002Fs>",[19,130430,130431,130432,86820,130435,130410],{},"下划线：",[71,130433,130434],{},"\u003Cins>...\u003C\u002Fins>",[71,130436,130437],{},"\u003Cu>...\u003C\u002Fu>",[14,130439,130441,130442,22689,130445,106974],{"id":130440},"_35-div和span标签","3.5 ",[71,130443,130444],{},"\u003Cdiv>",[71,130446,130447],{},"\u003Cspan>",[19,130449,130450,105299,130452,130454],{},[71,130451,130444],{},[71,130453,130447],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,130456,130457],{},[71,130458,130459],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,130461,130462],{},[71,130463,130464],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,130466,130467,130468,130470,130471,130473,130474,130477],{},"两者特点：①",[71,130469,130444],{}," 标签用来布局，但一行通常只放一个 ",[71,130472,130444],{},"。可以理解为一个大盒子，独占一行，在 ",[71,130475,130476],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,130479,81530,130480,130482,130483,130485],{},[71,130481,130447],{}," 标签也可用于布局，一行可以放多个 ",[71,130484,130447],{},"，可理解为小盒子。",{"title":69,"searchDepth":94,"depth":94,"links":130487},[130488,130489,130490,130491,130492],{"id":130342,"depth":94,"text":130343},{"id":130368,"depth":94,"text":130369},{"id":130381,"depth":94,"text":130382},{"id":130396,"depth":94,"text":130397},{"id":130440,"depth":94,"text":130493},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":130334,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":130500,"title":130501,"body":130502,"description":27656,"extension":5121,"meta":130699,"navigation":2362,"path":130700,"seo":130701,"stem":130702,"__hash__":130703},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":130503,"toc":130691},[130504,130507,130511,130514,130520,130527,130533,130539,130542,130545,130548,130551,130554,130557,130560,130564,130567,130570,130573,130579,130585,130591,130598,130602,130608,130614,130617,130620,130626,130632,130638,130641,130644,130648,130651,130661,130667,130671,130680,130684,130687],[10,130505,130501],{"id":130506},"_4-html图像与链接",[14,130508,130510],{"id":130509},"_41-图像标签","4.1 图像标签",[19,130512,130513],{},"（1）标签",[19,130515,130516,130519],{},[71,130517,130518],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,130521,130522,130523,130526],{},"src是",[71,130524,130525],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,130528,130529,130530],{},"alt:文本，替换文本。图像不能显示的文字 ",[71,130531,130532],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,130534,130535,130536],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[71,130537,130538],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,130540,130541],{},"width:像素，设置图像的宽度",[19,130543,130544],{},"height:像素，设置图像的高度",[19,130546,130547],{},"border：像素，设置图像的边框粗细",[19,130549,130550],{},"（2）图像标签属性的注意点：",[19,130552,130553],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,130555,130556],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,130558,130559],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,130561,130563],{"id":130562},"_42-路径注意要点","4.2 路径注意要点：",[19,130565,130566],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,130568,130569],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,130571,130572],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,130574,130575,130576],{},"①同一级路径：图像文件位于HTML文件同一级，如",[71,130577,130578],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,130580,130581,130582],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[71,130583,130584],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,130586,130587,130588],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[71,130589,130590],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,130592,130593,130594,337],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[324,130595,130596],{"href":130596,"rel":130597},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[28145],[14,130599,130601],{"id":130600},"_43-超链接标签","4.3 超链接标签",[19,130603,130604,130607],{},[71,130605,130606],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,130609,130610,130611],{},"①语法格式：",[71,130612,130613],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,130615,130616],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,130618,130619],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,130621,130622,130623],{},"③链接分类：外部链接：",[71,130624,130625],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,130627,130628,130629],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[71,130630,130631],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,130633,130634,130635],{},"空链接：如果当时没有确定链接目标时，",[71,130636,130637],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,130639,130640],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,130642,130643],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,130645,130647],{"id":130646},"_44-锚点链接","4.4 锚点链接",[19,130649,130650],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,130652,130653,130654,130657,130658],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[71,130655,130656],{},"\u003Ca href=\"#two\">","第二级",[71,130659,130660],{},"\u003C\u002Fa>",[19,130662,130663,130664],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[71,130665,130666],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,130668,130670],{"id":130669},"_45-注释标签","4.5 注释标签",[19,130672,130673,130676,130677],{},[71,130674,130675],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[71,130678,130679],{},"ctrl+\u002F",[14,130681,130683],{"id":130682},"_46-特殊字符","4.6 特殊字符",[19,130685,130686],{},"可以实现添加多个空格",[1424,130688],{"style":130689,"src":130690},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":69,"searchDepth":94,"depth":94,"links":130692},[130693,130694,130695,130696,130697,130698],{"id":130509,"depth":94,"text":130510},{"id":130562,"depth":94,"text":130563},{"id":130600,"depth":94,"text":130601},{"id":130646,"depth":94,"text":130647},{"id":130669,"depth":94,"text":130670},{"id":130682,"depth":94,"text":130683},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":130501,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":130705,"title":130706,"body":130707,"description":27656,"extension":5121,"meta":131000,"navigation":2362,"path":131001,"seo":131002,"stem":131003,"__hash__":131004},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":130708,"toc":130991},[130709,130712,130716,130719,130722,130725,130728,130731,130734,130737,130740,130743,130763,130769,130773,130776,130779,130782,130785,130788,130791,130795,130798,130801,130804,130807,130820,130825,130828,130831,130846,130849,130852,130855,130858,130861,130865,130868,130875,130878,130881,130884,130887,130890,130896,130899,130902,130908,130911,130914,130917,130923,130926,130929,130943,130950,130953,130956,130963,130972,130975,130978,130981,130985,130988],[10,130710,130706],{"id":130711},"_5-html表格列表与表单",[14,130713,130715],{"id":130714},"_51-表格标签","5.1 表格标签",[19,130717,130718],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,130720,130721],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,130723,130724],{},"②表格基本语法：",[1424,130726],{"style":130689,"src":130727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,130729,130730],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1424,130732],{"style":130689,"src":130733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,130735,130736],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1424,130738],{"style":130689,"src":130739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,130741,130742],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,130744,130745,130748,130749,130751,130752,130755,130756,130758,130759,130762],{},[71,130746,130747],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[71,130750,130747],{},"内部必须拥有",[71,130753,130754],{},"\u003Ctr>","标签，一般位于第一行，",[71,130757,130747],{},"比",[71,130760,130761],{},"\u003Cth>","范围广",[19,130764,130765,130768],{},[71,130766,130767],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,130770,130772],{"id":130771},"_52-合并单元格","5.2 合并单元格",[19,130774,130775],{},"（1）合并单元格方式：",[19,130777,130778],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,130780,130781],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,130783,130784],{},"（2）目标单元格：",[19,130786,130787],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,130789,130790],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,130792,130794],{"id":130793},"_53-列表标签","5.3 列表标签",[19,130796,130797],{},"（1）分类：无序列表、有序列表、自定义列表",[19,130799,130800],{},"①无序列表：",[1424,130802],{"style":130689,"src":130803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,130805,130806],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,130808,130809,130812,130813,130816,130817,130819],{},[71,130810,130811],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[71,130814,130815],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[71,130818,130811],{},"中输入其他标签或文字是不对的",[19,130821,130822,130824],{},[71,130823,130815],{},"之间相当于一个容器，可以容纳所有元素",[19,130826,130827],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,130829,130830],{},"在css中去除前边的小圆点采用如下代码:",[64,130832,130836],{"className":130833,"code":130834,"language":130835,"meta":69,"style":69},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[71,130837,130838],{"__ignoreMap":69},[74,130839,130840,130843],{"class":76,"line":77},[74,130841,130842],{"class":55581},"list-style",[74,130844,130845],{"class":84},": none;\n",[19,130847,130848],{},"②有序列表：",[1424,130850],{"style":130689,"src":130851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,130853,130854],{},"③自定义列表：",[1424,130856],{"style":130689,"src":130857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1424,130859],{"style":130689,"src":130860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,130862,130864],{"id":130863},"_54-表单标签","5.4 表单标签",[19,130866,130867],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,130869,130870,130871,130874],{},"（1）表单域：包含单元素的区域，",[71,130872,130873],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1424,130876],{"style":130689,"src":130877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,130879,130880],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,130882,130883],{},"表单元素提交必须有name属性",[19,130885,130886],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,130888,130889],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,130891,81507,130892,130895],{},[71,130893,130894],{},"\u003Cinput>","输入表单元素",[1424,130897],{"style":130689,"src":130898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1424,130900],{"style":130689,"src":130901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,130903,130904,130905],{},"单选按钮：",[71,130906,130907],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1424,130909],{"style":130689,"src":130910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,130912,130913],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1424,130915],{"style":130689,"src":130916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,130918,130919,130922],{},[235,130920,130921],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,130924,130925],{},"②select下拉表单元素：可以节约页面控件",[1424,130927],{"style":130689,"src":130928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,130930,130931,18074,130933,130936,130937,130939,130940,130942],{},[235,130932,115],{},[71,130934,130935],{},"\u003Cselect>","中至少包含一对",[71,130938,106995],{},"；在",[71,130941,106995],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,130944,130945,130946,130949],{},"③",[71,130947,130948],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1424,130951],{"style":130689,"src":130952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,130954,130955],{},"3行20列",[14,130957,130959,130960,106974],{"id":130958},"_55-lable标签","5.5 ",[71,130961,130962],{},"\u003Clable>",[19,130964,130965,130966,130968,130969,130971],{},"它不是表单标签，但常常与表单标签搭配使用，",[71,130967,130962],{},"标签用于绑定一个表单标签，当点击",[71,130970,130962],{},"标签内的文本",[19,130973,130974],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1424,130976],{"style":130689,"src":130977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1424,130979],{"style":130689,"src":130980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,130982,130984],{"id":130983},"_56-实例","5.6 实例",[1424,130986],{"style":130689,"src":130987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5090,130989,130990],{},"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":69,"searchDepth":94,"depth":94,"links":130992},[130993,130994,130995,130996,130997,130999],{"id":130714,"depth":94,"text":130715},{"id":130771,"depth":94,"text":130772},{"id":130793,"depth":94,"text":130794},{"id":130863,"depth":94,"text":130864},{"id":130958,"depth":94,"text":130998},"5.5 \u003Clable>标签",{"id":130983,"depth":94,"text":130984},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":130706,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":131006,"title":131007,"body":131008,"description":27656,"extension":5121,"meta":131557,"navigation":2362,"path":131558,"seo":131559,"stem":131560,"__hash__":131561},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":131009,"toc":131532},[131010,131013,131017,131020,131023,131027,131030,131033,131036,131039,131042,131045,131048,131052,131055,131059,131062,131065,131068,131072,131075,131078,131081,131087,131090,131093,131096,131099,131102,131105,131108,131141,131145,131148,131151,131154,131158,131161,131164,131167,131170,131173,131177,131180,131183,131186,131190,131193,131197,131200,131204,131207,131212,131216,131219,131223,131226,131229,131232,131235,131262,131265,131269,131272,131275,131280,131283,131286,131290,131293,131298,131301,131304,131307,131311,131314,131317,131320,131324,131327,131330,131333,131337,131341,131344,131384,131387,131391,131398,131401,131405,131408,131454,131458,131461,131464,131467,131495,131499,131502,131529],[10,131011,131007],{"id":131012},"_6-css语法与文本样式",[14,131014,131016],{"id":131015},"_61-css语法规范","6.1 css语法规范",[19,131018,131019],{},"由两部分组成，选择器及一条或多条声明",[1424,131021],{"style":130689,"src":131022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,131024,131025],{},[235,131026,115],{},[19,131028,131029],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,131031,131032],{},"②属性与属性值以“键值对”的形式出现",[19,131034,131035],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,131037,131038],{},"④属性和属性值之间用英文“;”分开",[1424,131040],{"style":130689,"src":131041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1424,131043],{"style":130689,"src":131044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1424,131046],{"style":130689,"src":131047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,131049,131051],{"id":131050},"_62-css选择器","6.2 css选择器",[19,131053,131054],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[44,131056,131058],{"id":131057},"_621-标签选择器","6.2.1 标签选择器",[19,131060,131061],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,131063,131064],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1424,131066],{"style":130689,"src":131067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[44,131069,131071],{"id":131070},"_622-类选择器","6.2.2 类选择器",[19,131073,131074],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,131076,131077],{},"②样例",[1424,131079],{"style":130689,"src":131080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,131082,131083,131084,131086],{},"③ ",[235,131085,130921],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,131088,131089],{},"可以理解为给这个标签起了个名字，来表示；",[19,131091,131092],{},"长名称或词组可以使用横线来为选择器命名；",[19,131094,131095],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,131097,131098],{},"命名要有意义；",[1424,131100],{"style":130689,"src":131101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,131103,131104],{},"类选择器也可以指定特殊的元素p.center{}",[19,131106,131107],{},"p.center和.center都对",[64,131109,131111],{"className":130833,"code":131110,"language":130835,"meta":69,"style":69},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[71,131112,131113,131118,131127,131137],{"__ignoreMap":69},[74,131114,131115],{"class":76,"line":77},[74,131116,131117],{"class":144},"\u002F* 类选择器指定特殊元素 *\u002F\n",[74,131119,131120,131122,131125],{"class":76,"line":94},[74,131121,19],{"class":55581},[74,131123,131124],{"class":1925},".center",[74,131126,19851],{"class":84},[74,131128,131129,131131,131133,131135],{"class":76,"line":1141},[74,131130,74807],{"class":134},[74,131132,55718],{"class":84},[74,131134,55873],{"class":134},[74,131136,1252],{"class":84},[74,131138,131139],{"class":76,"line":1156},[74,131140,1527],{"class":84},[44,131142,131144],{"id":131143},"_623-多类名使用","6.2.3 多类名使用",[19,131146,131147],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1424,131149],{"style":130689,"src":131150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,131152,131153],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[44,131155,131157],{"id":131156},"_624-id选择器","6.2.4 id选择器",[19,131159,131160],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,131162,131163],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1424,131165],{"style":130689,"src":131166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,131168,131169],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,131171,131172],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[44,131174,131176],{"id":131175},"_625-通配符选择器","6.2.5 通配符选择器",[19,131178,131179],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,131181,131182],{},"* {",[19,131184,131185],{},"color=\"red\"}",[44,131187,131189],{"id":131188},"_626-总结","6.2.6 总结",[1424,131191],{"style":130689,"src":131192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,131194,131196],{"id":131195},"_63-css字体属性","6.3 css字体属性",[19,131198,131199],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[44,131201,131203],{"id":131202},"_631-字体系列","6.3.1 字体系列",[19,131205,131206],{},"font-family: '宋体';",[19,131208,131209,131211],{},[235,131210,115],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[44,131213,131215],{"id":131214},"_632-字体大小","6.3.2 字体大小",[19,131217,131218],{},"font-size: 20px",[19,131220,131221,30754],{},[235,131222,130921],{},[19,131224,131225],{},"①px（像素）大小是网页的最常用单位",[19,131227,131228],{},"②谷歌浏览器默认为16px",[19,131230,131231],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,131233,131234],{},"④可以给body指定整个页面的大小：会自动引用",[64,131236,131238],{"className":130833,"code":131237,"language":130835,"meta":69,"style":69},"body {\n  font-size: 16px;\n}\n",[71,131239,131240,131246,131258],{"__ignoreMap":69},[74,131241,131242,131244],{"class":76,"line":77},[74,131243,56081],{"class":55581},[74,131245,19851],{"class":84},[74,131247,131248,131250,131252,131254,131256],{"class":76,"line":94},[74,131249,74907],{"class":134},[74,131251,55718],{"class":84},[74,131253,687],{"class":134},[74,131255,55773],{"class":80},[74,131257,1252],{"class":84},[74,131259,131260],{"class":76,"line":1141},[74,131261,1527],{"class":84},[19,131263,131264],{},"⑤标题标签比较特殊，需要单独指定大小",[44,131266,131268],{"id":131267},"_633-字体粗细","6.3.3 字体粗细",[19,131270,131271],{},"font-weight: bold;",[19,131273,131274],{},"font-weight: 100；",[19,131276,131277,131279],{},[235,131278,115],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,131281,131282],{},"font-weight= 400;",[19,131284,131285],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[44,131287,131289],{"id":131288},"_634-文字样式","6.3.4 文字样式",[19,131291,131292],{},"font-style: normal；",[19,131294,131295,30754],{},[235,131296,131297],{},"属性值",[19,131299,131300],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,131302,131303],{},"②italic：浏览器会显示斜体的字体样式",[1424,131305],{"style":130689,"src":131306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[44,131308,131310],{"id":131309},"_635-字体符合属性","6.3.5 字体符合属性",[1424,131312],{"style":130689,"src":131313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1424,131315],{"style":130689,"src":131316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,131318,131319],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,131321,131322,30754],{},[235,131323,130921],{},[19,131325,131326],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,131328,131329],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,131331,131332],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,131334,131336],{"id":131335},"_64-css-test文本属性","6.4 css test文本属性",[44,131338,131340],{"id":131339},"_641-文本颜色","6.4.1 文本颜色",[19,131342,131343],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[64,131345,131347],{"className":130833,"code":131346,"language":130835,"meta":69,"style":69},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[71,131348,131349,131354,131360,131370,131375,131380],{"__ignoreMap":69},[74,131350,131351],{"class":76,"line":77},[74,131352,131353],{"class":144},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[74,131355,131356,131358],{"class":76,"line":94},[74,131357,19],{"class":55581},[74,131359,19851],{"class":84},[74,131361,131362,131364,131366,131368],{"class":76,"line":1141},[74,131363,75186],{"class":134},[74,131365,55718],{"class":84},[74,131367,61702],{"class":134},[74,131369,1252],{"class":84},[74,131371,131372],{"class":76,"line":1156},[74,131373,131374],{"class":144},"  \u002F* color: #ff0000; *\u002F\n",[74,131376,131377],{"class":76,"line":1162},[74,131378,131379],{"class":144},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[74,131381,131382],{"class":76,"line":1176},[74,131383,1527],{"class":84},[1424,131385],{"style":130689,"src":131386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[44,131388,131390],{"id":131389},"_642-对齐文本","6.4.2 对齐文本",[19,131392,131393,131394,131397],{},"text-align属于用于设置元素内文本内容的 ",[235,131395,131396],{},"水平对齐"," 方式",[19,131399,131400],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[44,131402,131404],{"id":131403},"_643-装饰文本","6.4.3 装饰文本",[19,131406,131407],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[64,131409,131411],{"className":130833,"code":131410,"language":130835,"meta":69,"style":69},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[71,131412,131413,131419,131429,131433,131439,131450],{"__ignoreMap":69},[74,131414,131415,131417],{"class":76,"line":77},[74,131416,324],{"class":55581},[74,131418,19851],{"class":84},[74,131420,131421,131423,131425,131427],{"class":76,"line":94},[74,131422,74783],{"class":134},[74,131424,55718],{"class":84},[74,131426,59018],{"class":134},[74,131428,1252],{"class":84},[74,131430,131431],{"class":76,"line":1141},[74,131432,1527],{"class":84},[74,131434,131435,131437],{"class":76,"line":1156},[74,131436,19],{"class":55581},[74,131438,19851],{"class":84},[74,131440,131441,131443,131445,131448],{"class":76,"line":1162},[74,131442,74783],{"class":134},[74,131444,55718],{"class":84},[74,131446,131447],{"class":134},"underline",[74,131449,1252],{"class":84},[74,131451,131452],{"class":76,"line":1176},[74,131453,1527],{"class":84},[44,131455,131457],{"id":131456},"_644-文本缩进","6.4.4 文本缩进",[19,131459,131460],{},"实现文本的第一行首行缩进自己指定的距离",[19,131462,131463],{},"20px往右边走；-20px往左边走",[19,131465,131466],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[64,131468,131470],{"className":130833,"code":131469,"language":130835,"meta":69,"style":69},"p {\n  text-indent: 2em;\n}\n",[71,131471,131472,131478,131491],{"__ignoreMap":69},[74,131473,131474,131476],{"class":76,"line":77},[74,131475,19],{"class":55581},[74,131477,19851],{"class":84},[74,131479,131480,131483,131485,131487,131489],{"class":76,"line":94},[74,131481,131482],{"class":134},"  text-indent",[74,131484,55718],{"class":84},[74,131486,163],{"class":134},[74,131488,27833],{"class":80},[74,131490,1252],{"class":84},[74,131492,131493],{"class":76,"line":1141},[74,131494,1527],{"class":84},[44,131496,131498],{"id":131497},"_645-行间距","6.4.5 行间距",[19,131500,131501],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[64,131503,131505],{"className":130833,"code":131504,"language":130835,"meta":69,"style":69},"p {\n  line-height: 1.6;\n}\n",[71,131506,131507,131513,131525],{"__ignoreMap":69},[74,131508,131509,131511],{"class":76,"line":77},[74,131510,19],{"class":55581},[74,131512,19851],{"class":84},[74,131514,131515,131518,131520,131523],{"class":76,"line":94},[74,131516,131517],{"class":134},"  line-height",[74,131519,55718],{"class":84},[74,131521,131522],{"class":134},"1.6",[74,131524,1252],{"class":84},[74,131526,131527],{"class":76,"line":1141},[74,131528,1527],{"class":84},[5090,131530,131531],{},"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":69,"searchDepth":94,"depth":94,"links":131533},[131534,131535,131543,131550],{"id":131015,"depth":94,"text":131016},{"id":131050,"depth":94,"text":131051,"children":131536},[131537,131538,131539,131540,131541,131542],{"id":131057,"depth":1141,"text":131058},{"id":131070,"depth":1141,"text":131071},{"id":131143,"depth":1141,"text":131144},{"id":131156,"depth":1141,"text":131157},{"id":131175,"depth":1141,"text":131176},{"id":131188,"depth":1141,"text":131189},{"id":131195,"depth":94,"text":131196,"children":131544},[131545,131546,131547,131548,131549],{"id":131202,"depth":1141,"text":131203},{"id":131214,"depth":1141,"text":131215},{"id":131267,"depth":1141,"text":131268},{"id":131288,"depth":1141,"text":131289},{"id":131309,"depth":1141,"text":131310},{"id":131335,"depth":94,"text":131336,"children":131551},[131552,131553,131554,131555,131556],{"id":131339,"depth":1141,"text":131340},{"id":131389,"depth":1141,"text":131390},{"id":131403,"depth":1141,"text":131404},{"id":131456,"depth":1141,"text":131457},{"id":131497,"depth":1141,"text":131498},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":131007,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":131563,"title":131564,"body":131565,"description":27656,"extension":5121,"meta":132214,"navigation":2362,"path":132215,"seo":132216,"stem":132217,"__hash__":132218},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":131566,"toc":132195},[131567,131570,131574,131578,131638,131642,131652,131655,131658,131662,131687,131691,131694,131697,131700,131703,131706,131710,131713,131716,131758,131761,131787,131793,131796,131800,131804,131810,131813,131816,131819,131822,131825,131828,131873,131877,131880,131883,131887,131891,131920,131923,131928,131931,131934,131937,131940,131944,131948,131951,131953,131956,131960,131963,131967,131970,131973,131976,131980,131984,131990,132000,132003,132006,132009,132012,132015,132138,132146,132154,132192],[10,131568,131564],{"id":131569},"_7-css引入方式与选择器进阶",[14,131571,131573],{"id":131572},"_71-css引入方式","7.1 css引入方式",[44,131575,131577],{"id":131576},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[64,131579,131583],{"className":131580,"code":131581,"language":131582,"meta":69,"style":69},"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",[71,131584,131585,131593,131600,131612,131625,131630],{"__ignoreMap":69},[74,131586,131587,131589,131591],{"class":76,"line":77},[74,131588,996],{"class":84},[74,131590,5090],{"class":55581},[74,131592,55588],{"class":84},[74,131594,131595,131598],{"class":76,"line":94},[74,131596,131597],{"class":55581},"  h1",[74,131599,19851],{"class":84},[74,131601,131602,131605,131607,131610],{"class":76,"line":1141},[74,131603,131604],{"class":134},"    color",[74,131606,55718],{"class":84},[74,131608,131609],{"class":134},"blue",[74,131611,1252],{"class":84},[74,131613,131614,131617,131619,131621,131623],{"class":76,"line":1156},[74,131615,131616],{"class":134},"    font-size",[74,131618,55718],{"class":84},[74,131620,886],{"class":134},[74,131622,55773],{"class":80},[74,131624,1252],{"class":84},[74,131626,131627],{"class":76,"line":1162},[74,131628,131629],{"class":84},"  }\n",[74,131631,131632,131634,131636],{"class":76,"line":1176},[74,131633,56066],{"class":84},[74,131635,5090],{"class":55581},[74,131637,55588],{"class":84},[19,131639,131640,30754],{},[235,131641,130921],{},[19,131643,81507,131644,131647,131648,131651],{},[71,131645,131646],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[71,131649,131650],{},"\u003Chead>","标签中",[19,131653,131654],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,131656,131657],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[44,131659,131661],{"id":131660},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[64,131663,131665],{"className":131580,"code":131664,"language":131582,"meta":69,"style":69},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[71,131666,131667],{"__ignoreMap":69},[74,131668,131669,131671,131673,131675,131677,131680,131683,131685],{"class":76,"line":77},[74,131670,996],{"class":84},[74,131672,19],{"class":55581},[74,131674,66907],{"class":1925},[74,131676,131],{"class":84},[74,131678,131679],{"class":190},"\"color: red; font-size: 16px;\"",[74,131681,131682],{"class":84},">这是一个段落\u003C\u002F",[74,131684,19],{"class":55581},[74,131686,55588],{"class":84},[19,131688,131689,30754],{},[235,131690,130921],{},[19,131692,131693],{},"①style其实就是标签的属性",[19,131695,131696],{},"②在双引号中间，写法要符合css规范",[19,131698,131699],{},"③可以控制当前的标签设置样式",[19,131701,131702],{},"④书写繁琐，简单时才用",[19,131704,131705],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[44,131707,131709],{"id":131708},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,131711,131712],{},"使用最多，单独建一个css文件，然后html引用",[19,131714,131715],{},"①css文件部分： style.css",[64,131717,131719],{"className":130833,"code":131718,"language":130835,"meta":69,"style":69},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[71,131720,131721,131726,131732,131742,131754],{"__ignoreMap":69},[74,131722,131723],{"class":76,"line":77},[74,131724,131725],{"class":144},"\u002F* style.css *\u002F\n",[74,131727,131728,131730],{"class":76,"line":94},[74,131729,10],{"class":55581},[74,131731,19851],{"class":84},[74,131733,131734,131736,131738,131740],{"class":76,"line":1141},[74,131735,75186],{"class":134},[74,131737,55718],{"class":84},[74,131739,131609],{"class":134},[74,131741,1252],{"class":84},[74,131743,131744,131746,131748,131750,131752],{"class":76,"line":1156},[74,131745,74907],{"class":134},[74,131747,55718],{"class":84},[74,131749,886],{"class":134},[74,131751,55773],{"class":80},[74,131753,1252],{"class":84},[74,131755,131756],{"class":76,"line":1162},[74,131757,1527],{"class":84},[19,131759,131760],{},"②html部分",[64,131762,131764],{"className":131580,"code":131763,"language":131582,"meta":69,"style":69},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[71,131765,131766],{"__ignoreMap":69},[74,131767,131768,131770,131772,131774,131776,131778,131780,131782,131785],{"class":76,"line":77},[74,131769,996],{"class":84},[74,131771,73286],{"class":55581},[74,131773,73289],{"class":1925},[74,131775,131],{"class":84},[74,131777,73294],{"class":190},[74,131779,65338],{"class":1925},[74,131781,131],{"class":84},[74,131783,131784],{"class":190},"\"style.css\"",[74,131786,55588],{"class":84},[19,131788,131789,131792],{},[71,131790,131791],{},"\u003Chr>","水平线标签（但是不常用！）",[19,131794,131795],{},"ctrl+0回到页面原来大小",[14,131797,131799],{"id":131798},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[44,131801,131803],{"id":131802},"_721-快速生成html","7.2.1 快速生成html",[19,131805,131806,131807],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[71,131808,131809],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,131811,131812],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,131814,131815],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,131817,131818],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,131820,131821],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,131823,131824],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,131826,131827],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[64,131829,131831],{"className":131580,"code":131830,"language":131582,"meta":69,"style":69},"\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",[71,131832,131833,131838,131843,131848,131853,131858,131863,131868],{"__ignoreMap":69},[74,131834,131835],{"class":76,"line":77},[74,131836,131837],{"class":144},"\u003C!-- Emmet 语法示例 -->\n",[74,131839,131840],{"class":76,"line":94},[74,131841,131842],{"class":144},"\u003C!-- div*3        → 生成3个div -->\n",[74,131844,131845],{"class":76,"line":1141},[74,131846,131847],{"class":144},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[74,131849,131850],{"class":76,"line":1156},[74,131851,131852],{"class":144},"\u003C!-- div+p        → 兄弟div和p -->\n",[74,131854,131855],{"class":76,"line":1162},[74,131856,131857],{"class":144},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[74,131859,131860],{"class":76,"line":1176},[74,131861,131862],{"class":144},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[74,131864,131865],{"class":76,"line":1182},[74,131866,131867],{"class":144},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[74,131869,131870],{"class":76,"line":1273},[74,131871,131872],{"class":144},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[44,131874,131876],{"id":131875},"_722-快速生成css","7.2.2 快速生成css",[19,131878,131879],{},"简写开头",[19,131881,131882],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,131884,131886],{"id":131885},"_73-css复合选择器","7.3 css复合选择器",[44,131888,131890],{"id":131889},"_731-后代选择器","7.3.1 后代选择器",[64,131892,131894],{"className":130833,"code":131893,"language":130835,"meta":69,"style":69},".parent .child {\n  color: blue;\n}\n",[71,131895,131896,131906,131916],{"__ignoreMap":69},[74,131897,131898,131901,131904],{"class":76,"line":77},[74,131899,131900],{"class":1925},".parent",[74,131902,131903],{"class":1925}," .child",[74,131905,19851],{"class":84},[74,131907,131908,131910,131912,131914],{"class":76,"line":94},[74,131909,75186],{"class":134},[74,131911,55718],{"class":84},[74,131913,131609],{"class":134},[74,131915,1252],{"class":84},[74,131917,131918],{"class":76,"line":1141},[74,131919,1527],{"class":84},[19,131921,131922],{},"元素1 元素2 {样式声明}",[19,131924,131925],{},[235,131926,131927],{},"注意点:",[19,131929,131930],{},"①元素1和元素2中间用空格隔开",[19,131932,131933],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,131935,131936],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,131938,131939],{},"④元素1和元素2可以是任意基础选择器",[44,131941,131943],{"id":131942},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,131945,131946],{},[235,131947,131927],{},[19,131949,131950],{},"①元素1和元素2中间用大于号隔开",[19,131952,131933],{},[19,131954,131955],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[44,131957,131959],{"id":131958},"_733-并集选择器","7.3.3 并集选择器",[19,131961,131962],{},"元素1，元素2 {样式声明}",[19,131964,131965],{},[235,131966,131927],{},[19,131968,131969],{},"①元素1和元素2中间用逗号隔开",[19,131971,131972],{},"②逗号可以理解为和的意思",[19,131974,131975],{},"③并集选择器通常用于集体声明",[44,131977,131979],{"id":131978},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,131981,131982],{},[235,131983,131927],{},[19,131985,131986,131987,131989],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[73286,131988],{},"－:visited－:hover－:active。",[19,131991,131992,131993,131996,131997,30021],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[131994,131995],"hover",{}," 、 ",[131998,131999],"first-child",{},[19,132001,132002],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,132004,132005],{},"link对没访问的进行设置",[19,132007,132008],{},"vistied对已访问的进行改变",[19,132010,132011],{},"hover鼠标经过就会变",[19,132013,132014],{},"active常按(点)就会变",[64,132016,132018],{"className":130833,"code":132017,"language":130835,"meta":69,"style":69},"\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",[71,132019,132020,132025,132034,132044,132054,132058,132067,132078,132082,132090,132100,132110,132114,132123,132134],{"__ignoreMap":69},[74,132021,132022],{"class":76,"line":77},[74,132023,132024],{"class":144},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[74,132026,132027,132029,132032],{"class":76,"line":94},[74,132028,324],{"class":55581},[74,132030,132031],{"class":1925},":link",[74,132033,19851],{"class":84},[74,132035,132036,132038,132040,132042],{"class":76,"line":1141},[74,132037,75186],{"class":134},[74,132039,55718],{"class":84},[74,132041,66650],{"class":134},[74,132043,1252],{"class":84},[74,132045,132046,132048,132050,132052],{"class":76,"line":1156},[74,132047,74783],{"class":134},[74,132049,55718],{"class":84},[74,132051,59018],{"class":134},[74,132053,1252],{"class":84},[74,132055,132056],{"class":76,"line":1162},[74,132057,1527],{"class":84},[74,132059,132060,132062,132065],{"class":76,"line":1176},[74,132061,324],{"class":55581},[74,132063,132064],{"class":1925},":visited",[74,132066,19851],{"class":84},[74,132068,132069,132071,132073,132076],{"class":76,"line":1182},[74,132070,75186],{"class":134},[74,132072,55718],{"class":84},[74,132074,132075],{"class":134},"purple",[74,132077,1252],{"class":84},[74,132079,132080],{"class":76,"line":1273},[74,132081,1527],{"class":84},[74,132083,132084,132086,132088],{"class":76,"line":1279},[74,132085,324],{"class":55581},[74,132087,65221],{"class":1925},[74,132089,19851],{"class":84},[74,132091,132092,132094,132096,132098],{"class":76,"line":1291},[74,132093,75186],{"class":134},[74,132095,55718],{"class":84},[74,132097,59170],{"class":134},[74,132099,1252],{"class":84},[74,132101,132102,132104,132106,132108],{"class":76,"line":1574},[74,132103,74783],{"class":134},[74,132105,55718],{"class":84},[74,132107,131447],{"class":134},[74,132109,1252],{"class":84},[74,132111,132112],{"class":76,"line":1579},[74,132113,1527],{"class":84},[74,132115,132116,132118,132121],{"class":76,"line":1585},[74,132117,324],{"class":55581},[74,132119,132120],{"class":1925},":active",[74,132122,19851],{"class":84},[74,132124,132125,132127,132129,132132],{"class":76,"line":1590},[74,132126,75186],{"class":134},[74,132128,55718],{"class":84},[74,132130,132131],{"class":134},"green",[74,132133,1252],{"class":84},[74,132135,132136],{"class":76,"line":1604},[74,132137,1527],{"class":84},[44,132139,132141,132142,132145],{"id":132140},"_735-伪类选择器","7.3.5 ",[132143,132144],"focus",{},"伪类选择器",[19,132147,132148,132150,132151,132153],{},[132143,132149],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[71,132152,130894],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[64,132155,132157],{"className":130833,"code":132156,"language":130835,"meta":69,"style":69},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[71,132158,132159,132167,132178,132188],{"__ignoreMap":69},[74,132160,132161,132163,132165],{"class":76,"line":77},[74,132162,58102],{"class":55581},[74,132164,66181],{"class":1925},[74,132166,19851],{"class":84},[74,132168,132169,132172,132174,132176],{"class":76,"line":94},[74,132170,132171],{"class":134},"  border-color",[74,132173,55718],{"class":84},[74,132175,59170],{"class":134},[74,132177,1252],{"class":84},[74,132179,132180,132182,132184,132186],{"class":76,"line":1141},[74,132181,75079],{"class":134},[74,132183,55718],{"class":84},[74,132185,59018],{"class":134},[74,132187,1252],{"class":84},[74,132189,132190],{"class":76,"line":1156},[74,132191,1527],{"class":84},[5090,132193,132194],{},"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":69,"searchDepth":94,"depth":94,"links":132196},[132197,132202,132206],{"id":131572,"depth":94,"text":131573,"children":132198},[132199,132200,132201],{"id":131576,"depth":1141,"text":131577},{"id":131660,"depth":1141,"text":131661},{"id":131708,"depth":1141,"text":131709},{"id":131798,"depth":94,"text":131799,"children":132203},[132204,132205],{"id":131802,"depth":1141,"text":131803},{"id":131875,"depth":1141,"text":131876},{"id":131885,"depth":94,"text":131886,"children":132207},[132208,132209,132210,132211,132212],{"id":131889,"depth":1141,"text":131890},{"id":131942,"depth":1141,"text":131943},{"id":131958,"depth":1141,"text":131959},{"id":131978,"depth":1141,"text":131979},{"id":132140,"depth":1141,"text":132213},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":131564,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":132220,"title":132221,"body":132222,"description":27656,"extension":5121,"meta":134145,"navigation":2362,"path":134146,"seo":134147,"stem":134148,"__hash__":134149},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":132223,"toc":134119},[132224,132227,132231,132240,132244,132270,132275,132278,132281,132284,132287,132291,132294,132304,132312,132316,132351,132356,132359,132362,132365,132368,132372,132375,132384,132388,132401,132406,132409,132412,132415,132419,132422,132426,132429,132484,132487,132518,132521,132575,132579,132582,132748,132871,132874,132877,132880,132883,132887,132890,132894,132897,132900,132904,132907,132938,132965,132993,132996,133000,133026,133069,133073,133167,133170,133197,133200,133203,133206,133209,133212,133215,133218,133221,133224,133228,133285,133312,133316,133364,133368,133409,133411,133414,133417,133420,133423,133427,133519,133522,133525,133528,133532,133655,133856,133860,133864,133867,133870,133873,133877,133880,133883,133908,133911,133914,133917,133920,133923,133927,133935,133997,134000,134058,134061,134064,134067,134070,134073,134076,134079,134116],[10,132225,132221],{"id":132226},"_8-css显示模式与背景特性",[14,132228,132230],{"id":132229},"_81-css元素显示模式","8.1 css元素显示模式",[19,132232,132233,132234,132236,132237,132239],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[71,132235,130444],{},"自己占一行，比如一行可以放多个",[71,132238,130447],{},"，HTML 元素一般分为块元素和行内元素两种类型",[44,132241,132243],{"id":132242},"_811-块元素","8.1.1 块元素",[19,132245,132246,132247,132249,132250,298,132253,298,132255,298,132257,298,132260,298,132263,132266,132267,132269],{},"常见的块元素有",[71,132248,130348],{},"~",[71,132251,132252],{},"\u003Ch6>",[71,132254,130374],{},[71,132256,130444],{},[71,132258,132259],{},"\u003Cul>",[71,132261,132262],{},"\u003Col>",[71,132264,132265],{},"\u003Cli>","等，其中 ",[71,132268,130444],{}," 标签是最典型的块元素",[19,132271,132272],{},[235,132273,132274],{},"块级元素的特点：",[19,132276,132277],{},"① 比较霸道，自己独占一行。",[19,132279,132280],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,132282,132283],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,132285,132286],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,132288,132289],{},[235,132290,115],{},[19,132292,132293],{},"①文字类的元素内不能使用块级元素",[19,132295,81530,132296,132298,132299,132301,132302],{},[71,132297,130374],{}," 标签主要用于存放文字，因此 ",[71,132300,130374],{}," 里面不能放块级元素，特别是不能放",[71,132303,130444],{},[19,132305,132306,132307,132249,132309,132311],{},"⑥同理， ",[71,132308,130348],{},[71,132310,132252],{},"等都是文字类块级标签，里面也不能放其他块级元素",[44,132313,132315],{"id":132314},"_812-行内元素","8.1.2 行内元素",[19,132317,132318,132319,298,132321,298,132324,298,132327,298,132330,298,132333,298,132336,298,132339,298,132342,298,132345,132347,132348,132350],{},"常见的行内元素有 ",[71,132320,130606],{},[71,132322,132323],{},"\u003Cstrong>",[71,132325,132326],{},"\u003Cb>",[71,132328,132329],{},"\u003Cem>",[71,132331,132332],{},"\u003Ci>",[71,132334,132335],{},"\u003Cdel>",[71,132337,132338],{},"\u003Cs>",[71,132340,132341],{},"\u003Cins>",[71,132343,132344],{},"\u003Cu>",[71,132346,130447],{}," 等，其中 ",[71,132349,130447],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,132352,132353],{},[235,132354,132355],{},"特点：",[19,132357,132358],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,132360,132361],{},"② 高、宽直接设置是无效的。",[19,132363,132364],{},"③ 默认宽度就是它本身内容的宽度。",[19,132366,132367],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,132369,132370],{},[235,132371,115],{},[19,132373,132374],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,132376,132377,132378,132380,132381,132383],{},"②特殊情况链接 ",[71,132379,130606],{}," 里面可以放块级元素，但是给 ",[71,132382,130606],{}," 转换一下块级模式最安全",[44,132385,132387],{"id":132386},"_813-行内块元素","8.1.3 行内块元素",[19,132389,132390,132391,298,132394,298,132397,132400],{},"在行内元素中有几个特殊的标签 —— ",[71,132392,132393],{},"\u003Cimg \u002F>",[71,132395,132396],{},"\u003Cinput \u002F>",[71,132398,132399],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,132402,132403],{},[235,132404,132405],{},"行内块元素的特点：",[19,132407,132408],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,132410,132411],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,132413,132414],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[44,132416,132418],{"id":132417},"_814-总结","8.1.4 总结",[1424,132420],{"style":130689,"src":132421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[44,132423,132425],{"id":132424},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,132427,132428],{},"①转换为块元素：display:block;",[64,132430,132432],{"className":130833,"code":132431,"language":130835,"meta":69,"style":69},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[71,132433,132434,132439,132445,132456,132468,132480],{"__ignoreMap":69},[74,132435,132436],{"class":76,"line":77},[74,132437,132438],{"class":144},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[74,132440,132441,132443],{"class":76,"line":94},[74,132442,324],{"class":55581},[74,132444,19851],{"class":84},[74,132446,132447,132450,132452,132454],{"class":76,"line":1141},[74,132448,132449],{"class":134},"  display",[74,132451,55718],{"class":84},[74,132453,65150],{"class":134},[74,132455,1252],{"class":84},[74,132457,132458,132460,132462,132464,132466],{"class":76,"line":1156},[74,132459,74849],{"class":134},[74,132461,55718],{"class":84},[74,132463,397],{"class":134},[74,132465,55773],{"class":80},[74,132467,1252],{"class":84},[74,132469,132470,132472,132474,132476,132478],{"class":76,"line":1162},[74,132471,75069],{"class":134},[74,132473,55718],{"class":84},[74,132475,487],{"class":134},[74,132477,55773],{"class":80},[74,132479,1252],{"class":84},[74,132481,132482],{"class":76,"line":1176},[74,132483,1527],{"class":84},[19,132485,132486],{},"②转换为行内元素：display:inline;",[64,132488,132490],{"className":130833,"code":132489,"language":130835,"meta":69,"style":69},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[71,132491,132492,132497,132503,132514],{"__ignoreMap":69},[74,132493,132494],{"class":76,"line":77},[74,132495,132496],{"class":144},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[74,132498,132499,132501],{"class":76,"line":94},[74,132500,55892],{"class":55581},[74,132502,19851],{"class":84},[74,132504,132505,132507,132509,132512],{"class":76,"line":1141},[74,132506,132449],{"class":134},[74,132508,55718],{"class":84},[74,132510,132511],{"class":134},"inline",[74,132513,1252],{"class":84},[74,132515,132516],{"class":76,"line":1156},[74,132517,1527],{"class":84},[19,132519,132520],{},"③转换为行内块：display:inline-block;",[64,132522,132524],{"className":130833,"code":132523,"language":130835,"meta":69,"style":69},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[71,132525,132526,132531,132537,132547,132559,132571],{"__ignoreMap":69},[74,132527,132528],{"class":76,"line":77},[74,132529,132530],{"class":144},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[74,132532,132533,132535],{"class":76,"line":94},[74,132534,74],{"class":55581},[74,132536,19851],{"class":84},[74,132538,132539,132541,132543,132545],{"class":76,"line":1141},[74,132540,132449],{"class":134},[74,132542,55718],{"class":84},[74,132544,76664],{"class":134},[74,132546,1252],{"class":84},[74,132548,132549,132551,132553,132555,132557],{"class":76,"line":1156},[74,132550,74849],{"class":134},[74,132552,55718],{"class":84},[74,132554,698],{"class":134},[74,132556,55773],{"class":80},[74,132558,1252],{"class":84},[74,132560,132561,132563,132565,132567,132569],{"class":76,"line":1162},[74,132562,75069],{"class":134},[74,132564,55718],{"class":84},[74,132566,1037],{"class":134},[74,132568,55773],{"class":80},[74,132570,1252],{"class":84},[74,132572,132573],{"class":76,"line":1176},[74,132574,1527],{"class":84},[44,132576,132578],{"id":132577},"_816-小米侧边栏","8.1.6 小米侧边栏",[1424,132580],{"style":130689,"src":132581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[64,132583,132585],{"className":131580,"code":132584,"language":131582,"meta":69,"style":69},"\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",[71,132586,132587,132592,132607,132626,132645,132664,132683,132702,132721,132740],{"__ignoreMap":69},[74,132588,132589],{"class":76,"line":77},[74,132590,132591],{"class":144},"\u003C!-- 小米侧边栏案例 -->\n",[74,132593,132594,132596,132598,132600,132602,132605],{"class":76,"line":94},[74,132595,996],{"class":84},[74,132597,55892],{"class":55581},[74,132599,57767],{"class":1925},[74,132601,131],{"class":84},[74,132603,132604],{"class":190},"\"sidebar\"",[74,132606,55588],{"class":84},[74,132608,132609,132611,132613,132615,132617,132619,132622,132624],{"class":76,"line":1141},[74,132610,56425],{"class":84},[74,132612,324],{"class":55581},[74,132614,65338],{"class":1925},[74,132616,131],{"class":84},[74,132618,65343],{"class":190},[74,132620,132621],{"class":84},">手机 电话卡\u003C\u002F",[74,132623,324],{"class":55581},[74,132625,55588],{"class":84},[74,132627,132628,132630,132632,132634,132636,132638,132641,132643],{"class":76,"line":1156},[74,132629,56425],{"class":84},[74,132631,324],{"class":55581},[74,132633,65338],{"class":1925},[74,132635,131],{"class":84},[74,132637,65343],{"class":190},[74,132639,132640],{"class":84},">电视 盒子\u003C\u002F",[74,132642,324],{"class":55581},[74,132644,55588],{"class":84},[74,132646,132647,132649,132651,132653,132655,132657,132660,132662],{"class":76,"line":1162},[74,132648,56425],{"class":84},[74,132650,324],{"class":55581},[74,132652,65338],{"class":1925},[74,132654,131],{"class":84},[74,132656,65343],{"class":190},[74,132658,132659],{"class":84},">笔记本 平板\u003C\u002F",[74,132661,324],{"class":55581},[74,132663,55588],{"class":84},[74,132665,132666,132668,132670,132672,132674,132676,132679,132681],{"class":76,"line":1176},[74,132667,56425],{"class":84},[74,132669,324],{"class":55581},[74,132671,65338],{"class":1925},[74,132673,131],{"class":84},[74,132675,65343],{"class":190},[74,132677,132678],{"class":84},">出行 穿戴\u003C\u002F",[74,132680,324],{"class":55581},[74,132682,55588],{"class":84},[74,132684,132685,132687,132689,132691,132693,132695,132698,132700],{"class":76,"line":1182},[74,132686,56425],{"class":84},[74,132688,324],{"class":55581},[74,132690,65338],{"class":1925},[74,132692,131],{"class":84},[74,132694,65343],{"class":190},[74,132696,132697],{"class":84},">智能 路由器\u003C\u002F",[74,132699,324],{"class":55581},[74,132701,55588],{"class":84},[74,132703,132704,132706,132708,132710,132712,132714,132717,132719],{"class":76,"line":1273},[74,132705,56425],{"class":84},[74,132707,324],{"class":55581},[74,132709,65338],{"class":1925},[74,132711,131],{"class":84},[74,132713,65343],{"class":190},[74,132715,132716],{"class":84},">健康 儿童\u003C\u002F",[74,132718,324],{"class":55581},[74,132720,55588],{"class":84},[74,132722,132723,132725,132727,132729,132731,132733,132736,132738],{"class":76,"line":1279},[74,132724,56425],{"class":84},[74,132726,324],{"class":55581},[74,132728,65338],{"class":1925},[74,132730,131],{"class":84},[74,132732,65343],{"class":190},[74,132734,132735],{"class":84},">耳机 音响\u003C\u002F",[74,132737,324],{"class":55581},[74,132739,55588],{"class":84},[74,132741,132742,132744,132746],{"class":76,"line":1291},[74,132743,56066],{"class":84},[74,132745,55892],{"class":55581},[74,132747,55588],{"class":84},[64,132749,132751],{"className":130833,"code":132750,"language":130835,"meta":69,"style":69},".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",[71,132752,132753,132762,132772,132785,132797,132809,132821,132831,132842,132846,132856,132867],{"__ignoreMap":69},[74,132754,132755,132758,132760],{"class":76,"line":77},[74,132756,132757],{"class":1925},".sidebar",[74,132759,1360],{"class":55581},[74,132761,19851],{"class":84},[74,132763,132764,132766,132768,132770],{"class":76,"line":94},[74,132765,132449],{"class":134},[74,132767,55718],{"class":84},[74,132769,65150],{"class":134},[74,132771,1252],{"class":84},[74,132773,132774,132776,132778,132781,132783],{"class":76,"line":1141},[74,132775,74849],{"class":134},[74,132777,55718],{"class":84},[74,132779,132780],{"class":134},"234",[74,132782,55773],{"class":80},[74,132784,1252],{"class":84},[74,132786,132787,132789,132791,132793,132795],{"class":76,"line":1156},[74,132788,75069],{"class":134},[74,132790,55718],{"class":84},[74,132792,538],{"class":134},[74,132794,55773],{"class":80},[74,132796,1252],{"class":84},[74,132798,132799,132801,132803,132805,132807],{"class":76,"line":1162},[74,132800,131517],{"class":134},[74,132802,55718],{"class":84},[74,132804,538],{"class":134},[74,132806,55773],{"class":80},[74,132808,1252],{"class":84},[74,132810,132811,132813,132815,132817,132819],{"class":76,"line":1176},[74,132812,75104],{"class":134},[74,132814,55718],{"class":84},[74,132816,1037],{"class":134},[74,132818,55773],{"class":80},[74,132820,1252],{"class":84},[74,132822,132823,132825,132827,132829],{"class":76,"line":1182},[74,132824,75186],{"class":134},[74,132826,55718],{"class":84},[74,132828,65123],{"class":134},[74,132830,1252],{"class":84},[74,132832,132833,132835,132837,132840],{"class":76,"line":1273},[74,132834,75159],{"class":134},[74,132836,55718],{"class":84},[74,132838,132839],{"class":134},"#55585a",[74,132841,1252],{"class":84},[74,132843,132844],{"class":76,"line":1279},[74,132845,1527],{"class":84},[74,132847,132848,132850,132852,132854],{"class":76,"line":1291},[74,132849,132757],{"class":1925},[74,132851,1360],{"class":55581},[74,132853,65221],{"class":1925},[74,132855,19851],{"class":84},[74,132857,132858,132860,132862,132865],{"class":76,"line":1574},[74,132859,75159],{"class":134},[74,132861,55718],{"class":84},[74,132863,132864],{"class":134},"#ff6700",[74,132866,1252],{"class":84},[74,132868,132869],{"class":76,"line":1579},[74,132870,1527],{"class":84},[1424,132872],{"style":130689,"src":132873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,132875,132876],{},"行高=盒子高度：实现文字的垂直居中",[19,132878,132879],{},"原理讲解：",[1424,132881],{"style":130689,"src":132882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,132884,132886],{"id":132885},"_82-css背景","8.2 css背景",[19,132888,132889],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[44,132891,132893],{"id":132892},"_821-背景颜色","8.2.1 背景颜色",[19,132895,132896],{},"background-color:颜色值;",[19,132898,132899],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[44,132901,132903],{"id":132902},"_822-背景图片","8.2.2 背景图片",[19,132905,132906],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[64,132908,132910],{"className":130833,"code":132909,"language":130835,"meta":69,"style":69},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[71,132911,132912,132918,132934],{"__ignoreMap":69},[74,132913,132914,132916],{"class":76,"line":77},[74,132915,55892],{"class":55581},[74,132917,19851],{"class":84},[74,132919,132920,132923,132925,132927,132929,132932],{"class":76,"line":94},[74,132921,132922],{"class":134},"  background-image",[74,132924,55718],{"class":84},[74,132926,66007],{"class":134},[74,132928,85],{"class":84},[74,132930,132931],{"class":9495},"images\u002Fbg.png",[74,132933,2682],{"class":84},[74,132935,132936],{"class":76,"line":1141},[74,132937,1527],{"class":84},[223,132939,132940,132949],{},[226,132941,132942],{},[229,132943,132944,132947],{},[232,132945,132946],{"align":28016},"参数值",[232,132948,106977],{"align":28016},[270,132950,132951,132958],{},[229,132952,132953,132955],{},[275,132954,59018],{"align":28016},[275,132956,132957],{"align":28016},"无背景图（默认的）",[229,132959,132960,132962],{},[275,132961,66007],{"align":28016},[275,132963,132964],{"align":28016},"使用绝对或相对地址指定背景图像",[64,132966,132967],{"className":130833,"code":132909,"language":130835,"meta":69,"style":69},[71,132968,132969,132975,132989],{"__ignoreMap":69},[74,132970,132971,132973],{"class":76,"line":77},[74,132972,55892],{"class":55581},[74,132974,19851],{"class":84},[74,132976,132977,132979,132981,132983,132985,132987],{"class":76,"line":94},[74,132978,132922],{"class":134},[74,132980,55718],{"class":84},[74,132982,66007],{"class":134},[74,132984,85],{"class":84},[74,132986,132931],{"class":9495},[74,132988,2682],{"class":84},[74,132990,132991],{"class":76,"line":1141},[74,132992,1527],{"class":84},[19,132994,132995],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[44,132997,132999],{"id":132998},"_823-背景平铺","8.2.3 背景平铺",[64,133001,133003],{"className":130833,"code":133002,"language":130835,"meta":69,"style":69},"div {\n  background-repeat: no-repeat;\n}\n",[71,133004,133005,133011,133022],{"__ignoreMap":69},[74,133006,133007,133009],{"class":76,"line":77},[74,133008,55892],{"class":55581},[74,133010,19851],{"class":84},[74,133012,133013,133016,133018,133020],{"class":76,"line":94},[74,133014,133015],{"class":134},"  background-repeat",[74,133017,55718],{"class":84},[74,133019,66017],{"class":134},[74,133021,1252],{"class":84},[74,133023,133024],{"class":76,"line":1141},[74,133025,1527],{"class":84},[223,133027,133028,133036],{},[226,133029,133030],{},[229,133031,133032,133034],{},[232,133033,132946],{"align":28016},[232,133035,106977],{"align":28016},[270,133037,133038,133046,133053,133061],{},[229,133039,133040,133043],{},[275,133041,133042],{"align":28016},"repeat",[275,133044,133045],{"align":28016},"背景图像在纵向和横向上平铺（默认的）",[229,133047,133048,133050],{},[275,133049,66017],{"align":28016},[275,133051,133052],{"align":28016},"背景图像不平铺",[229,133054,133055,133058],{},[275,133056,133057],{"align":28016},"repeat-x",[275,133059,133060],{"align":28016},"背景图像在横向上平铺",[229,133062,133063,133066],{},[275,133064,133065],{"align":28016},"repeat-y",[275,133067,133068],{"align":28016},"背景图像在纵向平铺",[44,133070,133072],{"id":133071},"_824-背景图片位置","8.2.4 背景图片位置",[64,133074,133076],{"className":130833,"code":133075,"language":130835,"meta":69,"style":69},"\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",[71,133077,133078,133083,133089,133103,133107,133112,133118,133134,133138,133143,133149,133163],{"__ignoreMap":69},[74,133079,133080],{"class":76,"line":77},[74,133081,133082],{"class":144},"\u002F* 方位名词 *\u002F\n",[74,133084,133085,133087],{"class":76,"line":94},[74,133086,55892],{"class":55581},[74,133088,19851],{"class":84},[74,133090,133091,133094,133096,133098,133101],{"class":76,"line":1141},[74,133092,133093],{"class":134},"  background-position",[74,133095,55718],{"class":84},[74,133097,55873],{"class":134},[74,133099,133100],{"class":134}," top",[74,133102,1252],{"class":84},[74,133104,133105],{"class":76,"line":1156},[74,133106,1527],{"class":84},[74,133108,133109],{"class":76,"line":1162},[74,133110,133111],{"class":144},"\u002F* 精确单位 *\u002F\n",[74,133113,133114,133116],{"class":76,"line":1176},[74,133115,55892],{"class":55581},[74,133117,19851],{"class":84},[74,133119,133120,133122,133124,133126,133128,133130,133132],{"class":76,"line":1182},[74,133121,133093],{"class":134},[74,133123,55718],{"class":84},[74,133125,786],{"class":134},[74,133127,55773],{"class":80},[74,133129,61785],{"class":134},[74,133131,55773],{"class":80},[74,133133,1252],{"class":84},[74,133135,133136],{"class":76,"line":1273},[74,133137,1527],{"class":84},[74,133139,133140],{"class":76,"line":1279},[74,133141,133142],{"class":144},"\u002F* 混合单位 *\u002F\n",[74,133144,133145,133147],{"class":76,"line":1291},[74,133146,55892],{"class":55581},[74,133148,19851],{"class":84},[74,133150,133151,133153,133155,133157,133159,133161],{"class":76,"line":1574},[74,133152,133093],{"class":134},[74,133154,55718],{"class":84},[74,133156,786],{"class":134},[74,133158,55773],{"class":80},[74,133160,21423],{"class":134},[74,133162,1252],{"class":84},[74,133164,133165],{"class":76,"line":1579},[74,133166,1527],{"class":84},[19,133168,133169],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[223,133171,133172,133180],{},[226,133173,133174],{},[229,133175,133176,133178],{},[232,133177,132946],{"align":28016},[232,133179,30150],{"align":28016},[270,133181,133182,133189],{},[229,133183,133184,133186],{},[275,133185,56249],{"align":28016},[275,133187,133188],{"align":28016},"百分数|由浮点数和单位标识符组成的长度值",[229,133190,133191,133194],{},[275,133192,133193],{"align":28016},"position",[275,133195,133196],{"align":28016},"top|center|bottom|left|center|right 方位名词",[19,133198,133199],{},"其他说明：",[19,133201,133202],{},"①参数是方位名词",[19,133204,133205],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,133207,133208],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,133210,133211],{},"②参数是精确单位",[19,133213,133214],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,133216,133217],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,133219,133220],{},"③参数是混合单位",[19,133222,133223],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[44,133225,133227],{"id":133226},"_825-背景图片固定","8.2.5 背景图片固定",[64,133229,133231],{"className":130833,"code":133230,"language":130835,"meta":69,"style":69},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[71,133232,133233,133238,133244,133256,133260,133265,133271,133281],{"__ignoreMap":69},[74,133234,133235],{"class":76,"line":77},[74,133236,133237],{"class":144},"\u002F* 背景滚动（默认） *\u002F\n",[74,133239,133240,133242],{"class":76,"line":94},[74,133241,55892],{"class":55581},[74,133243,19851],{"class":84},[74,133245,133246,133249,133251,133254],{"class":76,"line":1141},[74,133247,133248],{"class":134},"  background-attachment",[74,133250,55718],{"class":84},[74,133252,133253],{"class":134},"scroll",[74,133255,1252],{"class":84},[74,133257,133258],{"class":76,"line":1156},[74,133259,1527],{"class":84},[74,133261,133262],{"class":76,"line":1162},[74,133263,133264],{"class":144},"\u002F* 背景固定 *\u002F\n",[74,133266,133267,133269],{"class":76,"line":1176},[74,133268,55892],{"class":55581},[74,133270,19851],{"class":84},[74,133272,133273,133275,133277,133279],{"class":76,"line":1182},[74,133274,133248],{"class":134},[74,133276,55718],{"class":84},[74,133278,90514],{"class":134},[74,133280,1252],{"class":84},[74,133282,133283],{"class":76,"line":1273},[74,133284,1527],{"class":84},[223,133286,133287,133296],{},[226,133288,133289],{},[229,133290,133291,133294],{},[232,133292,133293],{"align":28016},"参数",[232,133295,106977],{"align":28016},[270,133297,133298,133305],{},[229,133299,133300,133302],{},[275,133301,133253],{"align":28016},[275,133303,133304],{"align":28016},"背景图像是随对象内容滚动",[229,133306,133307,133309],{},[275,133308,90514],{"align":28016},[275,133310,133311],{"align":28016},"背景图像固定",[44,133313,133315],{"id":133314},"_826-背景样式合写","8.2.6 背景样式合写",[64,133317,133319],{"className":130833,"code":133318,"language":130835,"meta":69,"style":69},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[71,133320,133321,133326,133332,133360],{"__ignoreMap":69},[74,133322,133323],{"class":76,"line":77},[74,133324,133325],{"class":144},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[74,133327,133328,133330],{"class":76,"line":94},[74,133329,55892],{"class":55581},[74,133331,19851],{"class":84},[74,133333,133334,133336,133338,133340,133343,133345,133347,133349,133351,133354,133356,133358],{"class":76,"line":1141},[74,133335,74892],{"class":134},[74,133337,55718],{"class":84},[74,133339,65123],{"class":134},[74,133341,133342],{"class":134}," url",[74,133344,85],{"class":84},[74,133346,132931],{"class":9495},[74,133348,17993],{"class":84},[74,133350,66017],{"class":134},[74,133352,133353],{"class":134}," fixed",[74,133355,21423],{"class":134},[74,133357,133100],{"class":134},[74,133359,1252],{"class":84},[74,133361,133362],{"class":76,"line":1156},[74,133363,1527],{"class":84},[44,133365,133367],{"id":133366},"_827-背景色半透明","8.2.7 背景色半透明",[64,133369,133371],{"className":130833,"code":133370,"language":130835,"meta":69,"style":69},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[71,133372,133373,133379,133405],{"__ignoreMap":69},[74,133374,133375,133377],{"class":76,"line":77},[74,133376,55892],{"class":55581},[74,133378,19851],{"class":84},[74,133380,133381,133383,133385,133387,133389,133391,133393,133395,133397,133399,133401,133403],{"class":76,"line":94},[74,133382,74892],{"class":134},[74,133384,55718],{"class":84},[74,133386,59391],{"class":134},[74,133388,85],{"class":84},[74,133390,277],{"class":134},[74,133392,16714],{"class":84},[74,133394,277],{"class":134},[74,133396,16714],{"class":84},[74,133398,277],{"class":134},[74,133400,16714],{"class":84},[74,133402,104802],{"class":134},[74,133404,2682],{"class":84},[74,133406,133407],{"class":76,"line":1141},[74,133408,1527],{"class":84},[19,133410,103677],{},[19,133412,133413],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,133415,133416],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,133418,133419],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,133421,133422],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[44,133424,133426],{"id":133425},"_828-总结","8.2.8 总结",[223,133428,133429,133440],{},[226,133430,133431],{},[229,133432,133433,133436,133438],{},[232,133434,133435],{"align":28016},"属性",[232,133437,106977],{"align":28016},[232,133439,238],{"align":28016},[270,133441,133442,133453,133464,133475,133486,133497,133508],{},[229,133443,133444,133447,133450],{},[275,133445,133446],{"align":28016},"background-color",[275,133448,133449],{"align":28016},"背景颜色",[275,133451,133452],{"align":28016},"预定义的颜色值\u002F十六进制\u002FRGB代码",[229,133454,133455,133458,133461],{},[275,133456,133457],{"align":28016},"background-image",[275,133459,133460],{"align":28016},"背景图片",[275,133462,133463],{"align":28016},"url(图片路径)",[229,133465,133466,133469,133472],{},[275,133467,133468],{"align":28016},"background-repeat",[275,133470,133471],{"align":28016},"是否平铺",[275,133473,133474],{"align":28016},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[229,133476,133477,133480,133483],{},[275,133478,133479],{"align":28016},"background-position",[275,133481,133482],{"align":28016},"背景位置",[275,133484,133485],{"align":28016},"length\u002Fposition 分别是x和y坐标",[229,133487,133488,133491,133494],{},[275,133489,133490],{"align":28016},"background-attachment",[275,133492,133493],{"align":28016},"背景附着",[275,133495,133496],{"align":28016},"scroll(背景滚动) \u002Ffixed (背景固定)",[229,133498,133499,133502,133505],{},[275,133500,133501],{"align":28016},"背景简写",[275,133503,133504],{"align":28016},"书写更简单",[275,133506,133507],{"align":28016},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[229,133509,133510,133513,133516],{},[275,133511,133512],{"align":28016},"背景半透明",[275,133514,133515],{"align":28016},"背景颜色半透明",[275,133517,133518],{"align":28016},"background: rgba(0,0,0.3); 后面必须是4个值",[19,133520,133521],{},"颜色渐变：",[1424,133523],{"style":130689,"src":133524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1424,133526],{"style":130689,"src":133527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[44,133529,133531],{"id":133530},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[64,133533,133535],{"className":131580,"code":133534,"language":131582,"meta":69,"style":69},"\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",[71,133536,133537,133552,133571,133590,133609,133628,133647],{"__ignoreMap":69},[74,133538,133539,133541,133543,133545,133547,133550],{"class":76,"line":77},[74,133540,996],{"class":84},[74,133542,55892],{"class":55581},[74,133544,57767],{"class":1925},[74,133546,131],{"class":84},[74,133548,133549],{"class":190},"\"nav\"",[74,133551,55588],{"class":84},[74,133553,133554,133556,133558,133560,133562,133564,133567,133569],{"class":76,"line":94},[74,133555,56425],{"class":84},[74,133557,324],{"class":55581},[74,133559,65338],{"class":1925},[74,133561,131],{"class":84},[74,133563,65343],{"class":190},[74,133565,133566],{"class":84},">五彩导航1\u003C\u002F",[74,133568,324],{"class":55581},[74,133570,55588],{"class":84},[74,133572,133573,133575,133577,133579,133581,133583,133586,133588],{"class":76,"line":1141},[74,133574,56425],{"class":84},[74,133576,324],{"class":55581},[74,133578,65338],{"class":1925},[74,133580,131],{"class":84},[74,133582,65343],{"class":190},[74,133584,133585],{"class":84},">五彩导航2\u003C\u002F",[74,133587,324],{"class":55581},[74,133589,55588],{"class":84},[74,133591,133592,133594,133596,133598,133600,133602,133605,133607],{"class":76,"line":1156},[74,133593,56425],{"class":84},[74,133595,324],{"class":55581},[74,133597,65338],{"class":1925},[74,133599,131],{"class":84},[74,133601,65343],{"class":190},[74,133603,133604],{"class":84},">五彩导航3\u003C\u002F",[74,133606,324],{"class":55581},[74,133608,55588],{"class":84},[74,133610,133611,133613,133615,133617,133619,133621,133624,133626],{"class":76,"line":1162},[74,133612,56425],{"class":84},[74,133614,324],{"class":55581},[74,133616,65338],{"class":1925},[74,133618,131],{"class":84},[74,133620,65343],{"class":190},[74,133622,133623],{"class":84},">五彩导航4\u003C\u002F",[74,133625,324],{"class":55581},[74,133627,55588],{"class":84},[74,133629,133630,133632,133634,133636,133638,133640,133643,133645],{"class":76,"line":1176},[74,133631,56425],{"class":84},[74,133633,324],{"class":55581},[74,133635,65338],{"class":1925},[74,133637,131],{"class":84},[74,133639,65343],{"class":190},[74,133641,133642],{"class":84},">五彩导航5\u003C\u002F",[74,133644,324],{"class":55581},[74,133646,55588],{"class":84},[74,133648,133649,133651,133653],{"class":76,"line":1182},[74,133650,56066],{"class":84},[74,133652,55892],{"class":55581},[74,133654,55588],{"class":84},[64,133656,133658],{"className":130833,"code":133657,"language":130835,"meta":69,"style":69},".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",[71,133659,133660,133669,133679,133691,133703,133713,133725,133735,133739,133764,133787,133810,133833],{"__ignoreMap":69},[74,133661,133662,133665,133667],{"class":76,"line":77},[74,133663,133664],{"class":1925},".nav",[74,133666,1360],{"class":55581},[74,133668,19851],{"class":84},[74,133670,133671,133673,133675,133677],{"class":76,"line":94},[74,133672,132449],{"class":134},[74,133674,55718],{"class":84},[74,133676,76664],{"class":134},[74,133678,1252],{"class":84},[74,133680,133681,133683,133685,133687,133689],{"class":76,"line":1141},[74,133682,74849],{"class":134},[74,133684,55718],{"class":84},[74,133686,903],{"class":134},[74,133688,55773],{"class":80},[74,133690,1252],{"class":84},[74,133692,133693,133695,133697,133699,133701],{"class":76,"line":1156},[74,133694,75069],{"class":134},[74,133696,55718],{"class":84},[74,133698,942],{"class":134},[74,133700,55773],{"class":80},[74,133702,1252],{"class":84},[74,133704,133705,133707,133709,133711],{"class":76,"line":1162},[74,133706,74807],{"class":134},[74,133708,55718],{"class":84},[74,133710,55873],{"class":134},[74,133712,1252],{"class":84},[74,133714,133715,133717,133719,133721,133723],{"class":76,"line":1176},[74,133716,131517],{"class":134},[74,133718,55718],{"class":84},[74,133720,942],{"class":134},[74,133722,55773],{"class":80},[74,133724,1252],{"class":84},[74,133726,133727,133729,133731,133733],{"class":76,"line":1182},[74,133728,75186],{"class":134},[74,133730,55718],{"class":84},[74,133732,65123],{"class":134},[74,133734,1252],{"class":84},[74,133736,133737],{"class":76,"line":1273},[74,133738,1527],{"class":84},[74,133740,133741,133743,133745,133748,133750,133752,133755,133757,133759,133761],{"class":76,"line":1279},[74,133742,133664],{"class":1925},[74,133744,1360],{"class":55581},[74,133746,133747],{"class":1925},":nth-child",[74,133749,85],{"class":84},[74,133751,303],{"class":134},[74,133753,133754],{"class":84},") { ",[74,133756,133446],{"class":134},[74,133758,55718],{"class":84},[74,133760,132864],{"class":134},[74,133762,133763],{"class":84},"; }\n",[74,133765,133766,133768,133770,133772,133774,133776,133778,133780,133782,133785],{"class":76,"line":1291},[74,133767,133664],{"class":1925},[74,133769,1360],{"class":55581},[74,133771,133747],{"class":1925},[74,133773,85],{"class":84},[74,133775,163],{"class":134},[74,133777,133754],{"class":84},[74,133779,133446],{"class":134},[74,133781,55718],{"class":84},[74,133783,133784],{"class":134},"#ff0000",[74,133786,133763],{"class":84},[74,133788,133789,133791,133793,133795,133797,133799,133801,133803,133805,133808],{"class":76,"line":1574},[74,133790,133664],{"class":1925},[74,133792,1360],{"class":55581},[74,133794,133747],{"class":1925},[74,133796,85],{"class":84},[74,133798,157],{"class":134},[74,133800,133754],{"class":84},[74,133802,133446],{"class":134},[74,133804,55718],{"class":84},[74,133806,133807],{"class":134},"#00a4ff",[74,133809,133763],{"class":84},[74,133811,133812,133814,133816,133818,133820,133822,133824,133826,133828,133831],{"class":76,"line":1579},[74,133813,133664],{"class":1925},[74,133815,1360],{"class":55581},[74,133817,133747],{"class":1925},[74,133819,85],{"class":84},[74,133821,379],{"class":134},[74,133823,133754],{"class":84},[74,133825,133446],{"class":134},[74,133827,55718],{"class":84},[74,133829,133830],{"class":134},"#ff00ff",[74,133832,133763],{"class":84},[74,133834,133835,133837,133839,133841,133843,133845,133847,133849,133851,133854],{"class":76,"line":1585},[74,133836,133664],{"class":1925},[74,133838,1360],{"class":55581},[74,133840,133747],{"class":1925},[74,133842,85],{"class":84},[74,133844,405],{"class":134},[74,133846,133754],{"class":84},[74,133848,133446],{"class":134},[74,133850,55718],{"class":84},[74,133852,133853],{"class":134},"#00ff00",[74,133855,133763],{"class":84},[14,133857,133859],{"id":133858},"_83-css三大特性","8.3 css三大特性",[44,133861,133863],{"id":133862},"_831-层叠性","8.3.1 层叠性",[19,133865,133866],{},"为了解决样式冲突问题",[19,133868,133869],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,133871,133872],{},"   ②样式不冲突，不会层叠",[44,133874,133876],{"id":133875},"_832-继承性","8.3.2 继承性",[19,133878,133879],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,133881,133882],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[64,133884,133886],{"className":130833,"code":133885,"language":130835,"meta":69,"style":69},"p {\n  color: #333;\n}\n",[71,133887,133888,133894,133904],{"__ignoreMap":69},[74,133889,133890,133892],{"class":76,"line":77},[74,133891,19],{"class":55581},[74,133893,19851],{"class":84},[74,133895,133896,133898,133900,133902],{"class":76,"line":94},[74,133897,75186],{"class":134},[74,133899,55718],{"class":84},[74,133901,66650],{"class":134},[74,133903,1252],{"class":84},[74,133905,133906],{"class":76,"line":1141},[74,133907,1527],{"class":84},[1424,133909],{"style":130689,"src":133910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,133912,133913],{},"解释：①行高可以跟单位也可以不跟单位",[19,133915,133916],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,133918,133919],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,133921,133922],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[44,133924,133926],{"id":133925},"_833-优先级","8.3.3 优先级",[27,133928,133929,133932],{},[30,133930,133931],{},"选择器相同，则执行层叠性",[30,133933,133934],{},"选择器不同，则根据选择器权重执行",[223,133936,133937,133947],{},[226,133938,133939],{},[229,133940,133941,133944],{},[232,133942,133943],{"align":28016},"选择器",[232,133945,133946],{"align":28016},"选择器权重",[270,133948,133949,133957,133965,133973,133981,133989],{},[229,133950,133951,133954],{},[275,133952,133953],{"align":28016},"继承 或者*",[275,133955,133956],{"align":28016},"0，0，0，0",[229,133958,133959,133962],{},[275,133960,133961],{"align":28016},"标签选择器",[275,133963,133964],{"align":28016},"0，0，0，1",[229,133966,133967,133970],{},[275,133968,133969],{"align":28016},"类选择器，伪类选择器",[275,133971,133972],{"align":28016},"0，0，1，0",[229,133974,133975,133978],{},[275,133976,133977],{"align":28016},"ID选择器",[275,133979,133980],{"align":28016},"0，1，0，0",[229,133982,133983,133986],{},[275,133984,133985],{"align":28016},"行内样式",[275,133987,133988],{"align":28016},"1，0，0，0",[229,133990,133991,133994],{},[275,133992,133993],{"align":28016},"！important",[275,133995,133996],{"align":28016},"无穷大",[19,133998,133999],{},"! important用法：",[64,134001,134003],{"className":130833,"code":134002,"language":130835,"meta":69,"style":69},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[71,134004,134005,134010,134016,134029,134033,134038,134044,134054],{"__ignoreMap":69},[74,134006,134007],{"class":76,"line":77},[74,134008,134009],{"class":144},"\u002F* !important 拥有最高优先级 *\u002F\n",[74,134011,134012,134014],{"class":76,"line":94},[74,134013,55892],{"class":55581},[74,134015,19851],{"class":84},[74,134017,134018,134020,134022,134024,134027],{"class":76,"line":1141},[74,134019,75186],{"class":134},[74,134021,55718],{"class":84},[74,134023,55926],{"class":134},[74,134025,134026],{"class":80}," !important",[74,134028,1252],{"class":84},[74,134030,134031],{"class":76,"line":1156},[74,134032,1527],{"class":84},[74,134034,134035],{"class":76,"line":1162},[74,134036,134037],{"class":144},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[74,134039,134040,134042],{"class":76,"line":1176},[74,134041,55892],{"class":55581},[74,134043,19851],{"class":84},[74,134045,134046,134048,134050,134052],{"class":76,"line":1182},[74,134047,75186],{"class":134},[74,134049,55718],{"class":84},[74,134051,61702],{"class":134},[74,134053,1252],{"class":84},[74,134055,134056],{"class":76,"line":1273},[74,134057,1527],{"class":84},[19,134059,134060],{},"优先级注意点：",[19,134062,134063],{},"①权重是有4组数字组成,但是不会有进位",[19,134065,134066],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,134068,134069],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,134071,134072],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,134074,134075],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,134077,134078],{},"⑥复合选择器",[223,134080,134081,134091],{},[226,134082,134083],{},[229,134084,134085,134088],{},[232,134086,134087],{"align":28016},"div ul li",[232,134089,134090],{"align":28016},"0,0,0,3",[270,134092,134093,134101,134109],{},[229,134094,134095,134098],{},[275,134096,134097],{"align":28016},".nav ul li",[275,134099,134100],{"align":28016},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[229,134102,134103,134106],{},[275,134104,134105],{"align":28016},"a:hover",[275,134107,134108],{"align":28016},"0,0,1,1",[229,134110,134111,134114],{},[275,134112,134113],{"align":28016},".nav a",[275,134115,134108],{"align":28016},[5090,134117,134118],{},"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":69,"searchDepth":94,"depth":94,"links":134120},[134121,134129,134140],{"id":132229,"depth":94,"text":132230,"children":134122},[134123,134124,134125,134126,134127,134128],{"id":132242,"depth":1141,"text":132243},{"id":132314,"depth":1141,"text":132315},{"id":132386,"depth":1141,"text":132387},{"id":132417,"depth":1141,"text":132418},{"id":132424,"depth":1141,"text":132425},{"id":132577,"depth":1141,"text":132578},{"id":132885,"depth":94,"text":132886,"children":134130},[134131,134132,134133,134134,134135,134136,134137,134138,134139],{"id":132892,"depth":1141,"text":132893},{"id":132902,"depth":1141,"text":132903},{"id":132998,"depth":1141,"text":132999},{"id":133071,"depth":1141,"text":133072},{"id":133226,"depth":1141,"text":133227},{"id":133314,"depth":1141,"text":133315},{"id":133366,"depth":1141,"text":133367},{"id":133425,"depth":1141,"text":133426},{"id":133530,"depth":1141,"text":133531},{"id":133858,"depth":94,"text":133859,"children":134141},[134142,134143,134144],{"id":133862,"depth":1141,"text":133863},{"id":133875,"depth":1141,"text":133876},{"id":133925,"depth":1141,"text":133926},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":132221,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":134151,"title":134152,"body":134153,"description":27656,"extension":5121,"meta":135743,"navigation":2362,"path":135744,"seo":135745,"stem":135746,"__hash__":135747},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":134154,"toc":135722},[134155,134158,134162,134165,134168,134171,134174,134177,134180,134183,134187,134195,134232,134268,134271,134285,134290,134324,134327,134420,134425,134428,134458,134461,134466,134474,134478,134485,134531,134575,134580,134583,134586,134589,134592,134595,134598,134600,134603,134607,134612,134656,134661,134664,134667,134704,134709,134712,134715,134718,134721,134753,134756,134759,134762,134794,134797,134800,134803,134807,134810,134842,134845,134849,134869,134872,134880,134883,134887,134892,134895,134927,134932,134935,134973,134977,134982,134985,134988,135019,135022,135039,135044,135096,135156,135161,135215,135253,135257,135261,135264,135268,135276,135279,135281,135292,135297,135345,135379,135382,135385,135388,135391,135435,135438,135441,135444,135447,135450,135453,135497,135500,135503,135506,135509,135512,135515,135521,135524,135568,135571,135574,135577,135580,135583,135627,135630,135632,135635,135639,135643,135681,135685,135688,135691,135695,135703,135707,135710,135713,135716,135719],[10,134156,134152],{"id":134157},"_9-css盒模型浮动与切图",[14,134159,134161],{"id":134160},"_91-盒子模型","9.1 盒子模型",[19,134163,134164],{},"利用盒子来设计网页",[19,134166,134167],{},"盒子包含：边框、外边距、内边距、实际内容",[19,134169,134170],{},"网页布局设置：",[19,134172,134173],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,134175,134176],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,134178,134179],{},"③往盒子里装内容",[1424,134181],{"style":130689,"src":134182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[44,134184,134186],{"id":134185},"_911-边框border","9.1.1 边框（border）",[27,134188,134189,134192],{},[30,134190,134191],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[30,134193,134194],{},"语法",[64,134196,134198],{"className":130833,"code":134197,"language":130835,"meta":69,"style":69},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[71,134199,134200,134205,134211,134228],{"__ignoreMap":69},[74,134201,134202],{"class":76,"line":77},[74,134203,134204],{"class":144},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[74,134206,134207,134209],{"class":76,"line":94},[74,134208,55892],{"class":55581},[74,134210,19851],{"class":84},[74,134212,134213,134215,134217,134219,134221,134223,134226],{"class":76,"line":1141},[74,134214,75177],{"class":134},[74,134216,55718],{"class":84},[74,134218,303],{"class":134},[74,134220,55773],{"class":80},[74,134222,55802],{"class":134},[74,134224,134225],{"class":134}," #ccc",[74,134227,1252],{"class":84},[74,134229,134230],{"class":76,"line":1156},[74,134231,1527],{"class":84},[223,134233,134234,134242],{},[226,134235,134236],{},[229,134237,134238,134240],{},[232,134239,133435],{"align":28016},[232,134241,106977],{"align":28016},[270,134243,134244,134252,134260],{},[229,134245,134246,134249],{},[275,134247,134248],{"align":28016},"border-width",[275,134250,134251],{"align":28016},"定义边框粗细，单位是px",[229,134253,134254,134257],{},[275,134255,134256],{"align":28016},"border-style",[275,134258,134259],{"align":28016},"边框的样式",[229,134261,134262,134265],{},[275,134263,134264],{"align":28016},"border-color",[275,134266,134267],{"align":28016},"边框的颜色",[19,134269,134270],{},"边框样式 border-style 可以设置如下值：",[1093,134272,134273,134276,134279,134282],{},[30,134274,134275],{},"none：没有边框即忽略所有边框的宽度（默认值）",[30,134277,134278],{},"solid：边框为单实线(最为常用的)",[30,134280,134281],{},"dashed：边框为虚线",[30,134283,134284],{},"dotted：边框为点线",[27,134286,134287],{"start":1141},[30,134288,134289],{},"边框的合写分写",[64,134291,134292],{"className":130833,"code":134197,"language":130835,"meta":69,"style":69},[71,134293,134294,134298,134304,134320],{"__ignoreMap":69},[74,134295,134296],{"class":76,"line":77},[74,134297,134204],{"class":144},[74,134299,134300,134302],{"class":76,"line":94},[74,134301,55892],{"class":55581},[74,134303,19851],{"class":84},[74,134305,134306,134308,134310,134312,134314,134316,134318],{"class":76,"line":1141},[74,134307,75177],{"class":134},[74,134309,55718],{"class":84},[74,134311,303],{"class":134},[74,134313,55773],{"class":80},[74,134315,55802],{"class":134},[74,134317,134225],{"class":134},[74,134319,1252],{"class":84},[74,134321,134322],{"class":76,"line":1156},[74,134323,1527],{"class":84},[19,134325,134326],{},"边框分开写法：",[64,134328,134330],{"className":130833,"code":134329,"language":130835,"meta":69,"style":69},"\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",[71,134331,134332,134337,134343,134361,134379,134398,134416],{"__ignoreMap":69},[74,134333,134334],{"class":76,"line":77},[74,134335,134336],{"class":144},"\u002F* 边框分开写法 *\u002F\n",[74,134338,134339,134341],{"class":76,"line":94},[74,134340,55892],{"class":55581},[74,134342,19851],{"class":84},[74,134344,134345,134348,134350,134352,134354,134356,134359],{"class":76,"line":1141},[74,134346,134347],{"class":134},"  border-top",[74,134349,55718],{"class":84},[74,134351,303],{"class":134},[74,134353,55773],{"class":80},[74,134355,55802],{"class":134},[74,134357,134358],{"class":134}," #000",[74,134360,1252],{"class":84},[74,134362,134363,134366,134368,134370,134372,134374,134377],{"class":76,"line":1156},[74,134364,134365],{"class":134},"  border-right",[74,134367,55718],{"class":84},[74,134369,163],{"class":134},[74,134371,55773],{"class":80},[74,134373,66522],{"class":134},[74,134375,134376],{"class":134}," #333",[74,134378,1252],{"class":84},[74,134380,134381,134384,134386,134388,134390,134393,134396],{"class":76,"line":1162},[74,134382,134383],{"class":134},"  border-bottom",[74,134385,55718],{"class":84},[74,134387,157],{"class":134},[74,134389,55773],{"class":80},[74,134391,134392],{"class":134}," dotted",[74,134394,134395],{"class":134}," #666",[74,134397,1252],{"class":84},[74,134399,134400,134403,134405,134407,134409,134411,134414],{"class":76,"line":1176},[74,134401,134402],{"class":134},"  border-left",[74,134404,55718],{"class":84},[74,134406,303],{"class":134},[74,134408,55773],{"class":80},[74,134410,55802],{"class":134},[74,134412,134413],{"class":134}," #999",[74,134415,1252],{"class":84},[74,134417,134418],{"class":76,"line":1182},[74,134419,1527],{"class":84},[27,134421,134422],{"start":1156},[30,134423,134424],{},"表格的细线边框",[19,134426,134427],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[64,134429,134431],{"className":130833,"code":134430,"language":130835,"meta":69,"style":69},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[71,134432,134433,134438,134444,134454],{"__ignoreMap":69},[74,134434,134435],{"class":76,"line":77},[74,134436,134437],{"class":144},"\u002F* 表格细线边框合并 *\u002F\n",[74,134439,134440,134442],{"class":76,"line":94},[74,134441,223],{"class":55581},[74,134443,19851],{"class":84},[74,134445,134446,134448,134450,134452],{"class":76,"line":1141},[74,134447,74859],{"class":134},[74,134449,55718],{"class":84},[74,134451,69316],{"class":134},[74,134453,1252],{"class":84},[74,134455,134456],{"class":76,"line":1156},[74,134457,1527],{"class":84},[19,134459,134460],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[27,134462,134463],{"start":1162},[30,134464,134465],{},"解决边框额外增加盒子的实际大小的方法：",[1093,134467,134468,134471],{},[30,134469,134470],{},"测量盒子大小的时候,不量边框",[30,134472,134473],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[44,134475,134477],{"id":134476},"_912-内边距","9.1.2 内边距",[27,134479,134480,134483],{},[30,134481,134482],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[30,134484,134194],{},[223,134486,134487,134497],{},[226,134488,134489],{},[229,134490,134491,134494],{},[232,134492,134493],{"align":28016},"值的个数",[232,134495,134496],{"align":28016},"表达意思",[270,134498,134499,134507,134515,134523],{},[229,134500,134501,134504],{},[275,134502,134503],{"align":28016},"padding: 5px;",[275,134505,134506],{"align":28016},"1个值，代表上下左右都有5个元素",[229,134508,134509,134512],{},[275,134510,134511],{"align":28016},"padding: 5px 10px;",[275,134513,134514],{"align":28016},"2个值，代表上下内边距为5像素，左右内边距为10像素",[229,134516,134517,134520],{},[275,134518,134519],{"align":28016},"padding: 5px 10px 20px;",[275,134521,134522],{"align":28016},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[229,134524,134525,134528],{},[275,134526,134527],{"align":28016},"padding: 5px 10px 20px 30px;",[275,134529,134530],{"align":28016},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[223,134532,134533,134541],{},[226,134534,134535],{},[229,134536,134537,134539],{},[232,134538,133435],{"align":28016},[232,134540,106977],{"align":28016},[270,134542,134543,134551,134559,134567],{},[229,134544,134545,134548],{},[275,134546,134547],{"align":28016},"padding-left",[275,134549,134550],{"align":28016},"左内边距",[229,134552,134553,134556],{},[275,134554,134555],{"align":28016},"padding-right",[275,134557,134558],{"align":28016},"右内边距",[229,134560,134561,134564],{},[275,134562,134563],{"align":28016},"padding-top",[275,134565,134566],{"align":28016},"上内边距",[229,134568,134569,134572],{},[275,134570,134571],{"align":28016},"padding-bottom",[275,134573,134574],{"align":28016},"下内边距",[27,134576,134577],{"start":1141},[30,134578,134579],{},"内边距会影响盒子的实际大小",[19,134581,134582],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,134584,134585],{},"①内容和边框有了距离，添加了内边距",[19,134587,134588],{},"②padding影响了盒子实际大小",[19,134590,134591],{},"内边距对盒子大小的影响：",[19,134593,134594],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,134596,134597],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,134599,99501],{},[19,134601,134602],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[44,134604,134606],{"id":134605},"_913-外边距","9.1.3 外边距",[27,134608,134609],{},[30,134610,134611],{},"控制盒子与盒子之间的距离",[223,134613,134614,134622],{},[226,134615,134616],{},[229,134617,134618,134620],{},[232,134619,133435],{"align":28016},[232,134621,106977],{"align":28016},[270,134623,134624,134632,134640,134648],{},[229,134625,134626,134629],{},[275,134627,134628],{"align":28016},"margin-left",[275,134630,134631],{"align":28016},"左外边距",[229,134633,134634,134637],{},[275,134635,134636],{"align":28016},"margin-right",[275,134638,134639],{"align":28016},"右外边距",[229,134641,134642,134645],{},[275,134643,134644],{"align":28016},"margin-top",[275,134646,134647],{"align":28016},"上外边距",[229,134649,134650,134653],{},[275,134651,134652],{"align":28016},"margin-bottom",[275,134654,134655],{"align":28016},"下外边距",[27,134657,134658],{"start":94},[30,134659,134660],{},"外边距可以让块级盒子水平居中的两个条件：",[19,134662,134663],{},"①盒子必须指定了宽度（width）",[19,134665,134666],{},"②盒子左右的外边距都设置为 auto",[64,134668,134670],{"className":130833,"code":134669,"language":130835,"meta":69,"style":69},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[71,134671,134672,134677,134684,134700],{"__ignoreMap":69},[74,134673,134674],{"class":76,"line":77},[74,134675,134676],{"class":144},"\u002F* margin 复合写法（同上） *\u002F\n",[74,134678,134679,134682],{"class":76,"line":94},[74,134680,134681],{"class":1925},".box",[74,134683,19851],{"class":84},[74,134685,134686,134688,134690,134692,134694,134697],{"class":76,"line":1141},[74,134687,74751],{"class":134},[74,134689,55718],{"class":84},[74,134691,277],{"class":134},[74,134693,55837],{"class":134},[74,134695,134696],{"class":84},";  ",[74,134698,134699],{"class":144},"\u002F* 块级盒子水平居中 *\u002F\n",[74,134701,134702],{"class":76,"line":1156},[74,134703,1527],{"class":84},[27,134705,134706],{"start":1141},[30,134707,134708],{},"外边距塌陷问题",[19,134710,134711],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1424,134713],{"style":130689,"src":134714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,134716,134717],{},"解决方案：",[19,134719,134720],{},"①可以为父亲元素定义上边距",[64,134722,134723],{"className":130833,"code":134669,"language":130835,"meta":69,"style":69},[71,134724,134725,134729,134735,134749],{"__ignoreMap":69},[74,134726,134727],{"class":76,"line":77},[74,134728,134676],{"class":144},[74,134730,134731,134733],{"class":76,"line":94},[74,134732,134681],{"class":1925},[74,134734,19851],{"class":84},[74,134736,134737,134739,134741,134743,134745,134747],{"class":76,"line":1141},[74,134738,74751],{"class":134},[74,134740,55718],{"class":84},[74,134742,277],{"class":134},[74,134744,55837],{"class":134},[74,134746,134696],{"class":84},[74,134748,134699],{"class":144},[74,134750,134751],{"class":76,"line":1156},[74,134752,1527],{"class":84},[19,134754,134755],{},"②可以为父亲元素定义上内边距",[19,134757,134758],{},"③可以为父亲元素添加overflow:hidden",[1424,134760],{"style":130689,"src":134761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[64,134763,134764],{"className":130833,"code":134669,"language":130835,"meta":69,"style":69},[71,134765,134766,134770,134776,134790],{"__ignoreMap":69},[74,134767,134768],{"class":76,"line":77},[74,134769,134676],{"class":144},[74,134771,134772,134774],{"class":76,"line":94},[74,134773,134681],{"class":1925},[74,134775,19851],{"class":84},[74,134777,134778,134780,134782,134784,134786,134788],{"class":76,"line":1141},[74,134779,74751],{"class":134},[74,134781,55718],{"class":84},[74,134783,277],{"class":134},[74,134785,55837],{"class":134},[74,134787,134696],{"class":84},[74,134789,134699],{"class":144},[74,134791,134792],{"class":76,"line":1156},[74,134793,1527],{"class":84},[1424,134795],{"style":130689,"src":134796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,134798,134799],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,134801,134802],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[44,134804,134806],{"id":134805},"_914-清除内外边距","9.1.4 清除内外边距",[19,134808,134809],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[64,134811,134812],{"className":130833,"code":134669,"language":130835,"meta":69,"style":69},[71,134813,134814,134818,134824,134838],{"__ignoreMap":69},[74,134815,134816],{"class":76,"line":77},[74,134817,134676],{"class":144},[74,134819,134820,134822],{"class":76,"line":94},[74,134821,134681],{"class":1925},[74,134823,19851],{"class":84},[74,134825,134826,134828,134830,134832,134834,134836],{"class":76,"line":1141},[74,134827,74751],{"class":134},[74,134829,55718],{"class":84},[74,134831,277],{"class":134},[74,134833,55837],{"class":134},[74,134835,134696],{"class":84},[74,134837,134699],{"class":144},[74,134839,134840],{"class":76,"line":1156},[74,134841,1527],{"class":84},[19,134843,134844],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[44,134846,134848],{"id":134847},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1093,134850,134851,134854,134857,134860,134863,134866],{},[30,134852,134853],{},"文件→打开 ：可以打开我们要测量的图片",[30,134855,134856],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[30,134858,134859],{},"右击标尺，把里面的单位改为像素",[30,134861,134862],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[30,134864,134865],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[30,134867,134868],{},"用选区拖动 可以测量大小",[1424,134870],{"style":130689,"src":134871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1093,134873,134874,134877],{},[30,134875,134876],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[30,134878,134879],{},"吸管取色工具",[1424,134881],{"style":130689,"src":134882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[44,134884,134886],{"id":134885},"_916-案例","9.1.6 案例",[27,134888,134889],{},[30,134890,134891],{},"小米商品",[1424,134893],{"style":130689,"src":134894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[64,134896,134897],{"className":130833,"code":134669,"language":130835,"meta":69,"style":69},[71,134898,134899,134903,134909,134923],{"__ignoreMap":69},[74,134900,134901],{"class":76,"line":77},[74,134902,134676],{"class":144},[74,134904,134905,134907],{"class":76,"line":94},[74,134906,134681],{"class":1925},[74,134908,19851],{"class":84},[74,134910,134911,134913,134915,134917,134919,134921],{"class":76,"line":1141},[74,134912,74751],{"class":134},[74,134914,55718],{"class":84},[74,134916,277],{"class":134},[74,134918,55837],{"class":134},[74,134920,134696],{"class":84},[74,134922,134699],{"class":144},[74,134924,134925],{"class":76,"line":1156},[74,134926,1527],{"class":84},[27,134928,134929],{"start":94},[30,134930,134931],{},"快报模块",[1424,134933],{"style":130689,"src":134934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[64,134936,134938],{"className":131580,"code":134937,"language":131582,"meta":69,"style":69},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[71,134939,134940,134945,134960,134965],{"__ignoreMap":69},[74,134941,134942],{"class":76,"line":77},[74,134943,134944],{"class":144},"\u003C!-- HTML 代码示例 -->\n",[74,134946,134947,134949,134951,134953,134955,134958],{"class":76,"line":94},[74,134948,996],{"class":84},[74,134950,55892],{"class":55581},[74,134952,57767],{"class":1925},[74,134954,131],{"class":84},[74,134956,134957],{"class":190},"\"example\"",[74,134959,55588],{"class":84},[74,134961,134962],{"class":76,"line":1141},[74,134963,134964],{"class":84},"  示例内容\n",[74,134966,134967,134969,134971],{"class":76,"line":1156},[74,134968,56066],{"class":84},[74,134970,55892],{"class":55581},[74,134972,55588],{"class":84},[44,134974,134976],{"id":134975},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[27,134978,134979],{},[30,134980,134981],{},"圆角边框",[19,134983,134984],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1424,134986],{"style":130689,"src":134987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[64,134989,134991],{"className":130833,"code":134990,"language":130835,"meta":69,"style":69},"div {\n  border: 1px solid #ccc;\n}\n",[71,134992,134993,134999,135015],{"__ignoreMap":69},[74,134994,134995,134997],{"class":76,"line":77},[74,134996,55892],{"class":55581},[74,134998,19851],{"class":84},[74,135000,135001,135003,135005,135007,135009,135011,135013],{"class":76,"line":94},[74,135002,75177],{"class":134},[74,135004,55718],{"class":84},[74,135006,303],{"class":134},[74,135008,55773],{"class":80},[74,135010,55802],{"class":134},[74,135012,134225],{"class":134},[74,135014,1252],{"class":84},[74,135016,135017],{"class":76,"line":1141},[74,135018,1527],{"class":84},[19,135020,135021],{},"解释:",[1093,135023,135024,135027,135030,135033,135036],{},[30,135025,135026],{},"参数值可以为数值或百分比的形式",[30,135028,135029],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[30,135031,135032],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[30,135034,135035],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[30,135037,135038],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[27,135040,135041],{"start":94},[30,135042,135043],{},"盒子阴影",[64,135045,135047],{"className":130833,"code":135046,"language":130835,"meta":69,"style":69},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[71,135048,135049,135055,135092],{"__ignoreMap":69},[74,135050,135051,135053],{"class":76,"line":77},[74,135052,55892],{"class":55581},[74,135054,19851],{"class":84},[74,135056,135057,135060,135062,135064,135066,135068,135070,135072,135074,135076,135078,135080,135082,135084,135086,135088,135090],{"class":76,"line":94},[74,135058,135059],{"class":134},"  box-shadow",[74,135061,55718],{"class":84},[74,135063,277],{"class":134},[74,135065,19034],{"class":134},[74,135067,55773],{"class":80},[74,135069,2000],{"class":134},[74,135071,55773],{"class":80},[74,135073,83048],{"class":134},[74,135075,85],{"class":84},[74,135077,277],{"class":134},[74,135079,16714],{"class":84},[74,135081,277],{"class":134},[74,135083,16714],{"class":84},[74,135085,277],{"class":134},[74,135087,16714],{"class":84},[74,135089,90491],{"class":134},[74,135091,2682],{"class":84},[74,135093,135094],{"class":76,"line":1141},[74,135095,1527],{"class":84},[223,135097,135098,135106],{},[226,135099,135100],{},[229,135101,135102,135104],{},[232,135103,238],{"align":28016},[232,135105,31770],{"align":28016},[270,135107,135108,135116,135124,135132,135140,135148],{},[229,135109,135110,135113],{},[275,135111,135112],{"align":28016},"h-shadow",[275,135114,135115],{"align":28016},"必需,水平阴影的位置,允许负值",[229,135117,135118,135121],{},[275,135119,135120],{"align":28016},"v-shadow",[275,135122,135123],{"align":28016},"必需,垂直阴影的位置,允许负值",[229,135125,135126,135129],{},[275,135127,135128],{"align":28016},"blur",[275,135130,135131],{"align":28016},"可选,模糊距离,就是影子的虚实",[229,135133,135134,135137],{},[275,135135,135136],{"align":28016},"spread",[275,135138,135139],{"align":28016},"可选,阴影尺寸",[229,135141,135142,135145],{},[275,135143,135144],{"align":28016},"color",[275,135146,135147],{"align":28016},"可选,阴影的颜色",[229,135149,135150,135153],{},[275,135151,135152],{"align":28016},"inset",[275,135154,135155],{"align":28016},"可选,将外部阴影(outset)改为内部阴影",[27,135157,135158],{"start":1141},[30,135159,135160],{},"文字阴影",[64,135162,135164],{"className":130833,"code":135163,"language":130835,"meta":69,"style":69},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[71,135165,135166,135172,135211],{"__ignoreMap":69},[74,135167,135168,135170],{"class":76,"line":77},[74,135169,19],{"class":55581},[74,135171,19851],{"class":84},[74,135173,135174,135177,135179,135181,135183,135185,135187,135189,135191,135193,135195,135197,135199,135201,135203,135205,135207,135209],{"class":76,"line":94},[74,135175,135176],{"class":134},"  text-shadow",[74,135178,55718],{"class":84},[74,135180,303],{"class":134},[74,135182,55773],{"class":80},[74,135184,29399],{"class":134},[74,135186,55773],{"class":80},[74,135188,19034],{"class":134},[74,135190,55773],{"class":80},[74,135192,83048],{"class":134},[74,135194,85],{"class":84},[74,135196,277],{"class":134},[74,135198,16714],{"class":84},[74,135200,277],{"class":134},[74,135202,16714],{"class":84},[74,135204,277],{"class":134},[74,135206,16714],{"class":84},[74,135208,104802],{"class":134},[74,135210,2682],{"class":84},[74,135212,135213],{"class":76,"line":1141},[74,135214,1527],{"class":84},[223,135216,135217,135225],{},[226,135218,135219],{},[229,135220,135221,135223],{},[232,135222,238],{"align":28016},[232,135224,31770],{"align":28016},[270,135226,135227,135233,135240,135247],{},[229,135228,135229,135231],{},[275,135230,135112],{"align":28016},[275,135232,135115],{"align":28016},[229,135234,135235,135237],{},[275,135236,135120],{"align":28016},[275,135238,135239],{"align":28016},"必需,垂直阴影位置,允许负值",[229,135241,135242,135244],{},[275,135243,135128],{"align":28016},[275,135245,135246],{"align":28016},"可选,模糊的距离",[229,135248,135249,135251],{},[275,135250,135144],{"align":28016},[275,135252,135147],{"align":28016},[14,135254,135256],{"id":135255},"_92-浮动","9.2 浮动",[44,135258,135260],{"id":135259},"_921-浮动介绍","9.2.1 浮动介绍",[19,135262,135263],{},"在16.2中详细介绍",[44,135265,135267],{"id":135266},"_922-清除浮动","9.2.2 清除浮动",[27,135269,135270,135273],{},[30,135271,135272],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[30,135274,135275],{},"清除浮动的本质",[19,135277,135278],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,135280,13304],{},[1093,135282,135283,135286,135289],{},[30,135284,135285],{},"如果父盒子本身有高度，则不需要清除浮动",[30,135287,135288],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[30,135290,135291],{},"父级有了高度，就不会影响下面的标准流了",[27,135293,135294],{"start":1141},[30,135295,135296],{},"清除浮动样式",[64,135298,135300],{"className":130833,"code":135299,"language":130835,"meta":69,"style":69},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[71,135301,135302,135309,135320,135324,135331,135341],{"__ignoreMap":69},[74,135303,135304,135307],{"class":76,"line":77},[74,135305,135306],{"class":1925},".left",[74,135308,19851],{"class":84},[74,135310,135311,135314,135316,135318],{"class":76,"line":94},[74,135312,135313],{"class":134},"  float",[74,135315,55718],{"class":84},[74,135317,28016],{"class":134},[74,135319,1252],{"class":84},[74,135321,135322],{"class":76,"line":1141},[74,135323,1527],{"class":84},[74,135325,135326,135329],{"class":76,"line":1156},[74,135327,135328],{"class":1925},".right",[74,135330,19851],{"class":84},[74,135332,135333,135335,135337,135339],{"class":76,"line":1162},[74,135334,135313],{"class":134},[74,135336,55718],{"class":84},[74,135338,76803],{"class":134},[74,135340,1252],{"class":84},[74,135342,135343],{"class":76,"line":1176},[74,135344,1527],{"class":84},[223,135346,135347,135355],{},[226,135348,135349],{},[229,135350,135351,135353],{},[232,135352,131297],{"align":28016},[232,135354,31770],{"align":28016},[270,135356,135357,135364,135371],{},[229,135358,135359,135361],{},[275,135360,28016],{"align":28016},[275,135362,135363],{"align":28016},"不允许左侧有浮动元素（清除左侧浮动的影响）",[229,135365,135366,135368],{},[275,135367,76803],{"align":28016},[275,135369,135370],{"align":28016},"不允许右侧有浮动元素（清除右侧浮动的影响）",[229,135372,135373,135376],{},[275,135374,135375],{"align":28016},"both",[275,135377,135378],{"align":28016},"同时清除左右侧浮动的影响",[19,135380,135381],{},"法一",[19,135383,135384],{},"额外标签法也称为隔墙法",[19,135386,135387],{},"使用方式：",[19,135389,135390],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[64,135392,135393],{"className":130833,"code":135299,"language":130835,"meta":69,"style":69},[71,135394,135395,135401,135411,135415,135421,135431],{"__ignoreMap":69},[74,135396,135397,135399],{"class":76,"line":77},[74,135398,135306],{"class":1925},[74,135400,19851],{"class":84},[74,135402,135403,135405,135407,135409],{"class":76,"line":94},[74,135404,135313],{"class":134},[74,135406,55718],{"class":84},[74,135408,28016],{"class":134},[74,135410,1252],{"class":84},[74,135412,135413],{"class":76,"line":1141},[74,135414,1527],{"class":84},[74,135416,135417,135419],{"class":76,"line":1156},[74,135418,135328],{"class":1925},[74,135420,19851],{"class":84},[74,135422,135423,135425,135427,135429],{"class":76,"line":1162},[74,135424,135313],{"class":134},[74,135426,55718],{"class":84},[74,135428,76803],{"class":134},[74,135430,1252],{"class":84},[74,135432,135433],{"class":76,"line":1176},[74,135434,1527],{"class":84},[19,135436,135437],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,135439,135440],{},"优点： 通俗易懂，书写方便",[19,135442,135443],{},"缺点： 添加许多无意义的标签，结构化较差",[19,135445,135446],{},"注意： 要求这个新的空标签必须是块级元素。",[19,135448,135449],{},"法二",[19,135451,135452],{},"父级添加overflow属性",[64,135454,135455],{"className":130833,"code":135299,"language":130835,"meta":69,"style":69},[71,135456,135457,135463,135473,135477,135483,135493],{"__ignoreMap":69},[74,135458,135459,135461],{"class":76,"line":77},[74,135460,135306],{"class":1925},[74,135462,19851],{"class":84},[74,135464,135465,135467,135469,135471],{"class":76,"line":94},[74,135466,135313],{"class":134},[74,135468,55718],{"class":84},[74,135470,28016],{"class":134},[74,135472,1252],{"class":84},[74,135474,135475],{"class":76,"line":1141},[74,135476,1527],{"class":84},[74,135478,135479,135481],{"class":76,"line":1156},[74,135480,135328],{"class":1925},[74,135482,19851],{"class":84},[74,135484,135485,135487,135489,135491],{"class":76,"line":1162},[74,135486,135313],{"class":134},[74,135488,55718],{"class":84},[74,135490,76803],{"class":134},[74,135492,1252],{"class":84},[74,135494,135495],{"class":76,"line":1176},[74,135496,1527],{"class":84},[19,135498,135499],{},"overflow: hidden;",[19,135501,135502],{},"优点：代码简洁",[19,135504,135505],{},"缺点：无法显示溢出的部分",[19,135507,135508],{},"注意：是给父元素添加代码",[19,135510,135511],{},"法三",[19,135513,135514],{},"父级添加after伪元素",[19,135516,135517,135520],{},[135518,135519],"after",{}," 方式是额外标签法的升级版",[19,135522,135523],{},"使用的时候复制就可以",[64,135525,135526],{"className":130833,"code":135299,"language":130835,"meta":69,"style":69},[71,135527,135528,135534,135544,135548,135554,135564],{"__ignoreMap":69},[74,135529,135530,135532],{"class":76,"line":77},[74,135531,135306],{"class":1925},[74,135533,19851],{"class":84},[74,135535,135536,135538,135540,135542],{"class":76,"line":94},[74,135537,135313],{"class":134},[74,135539,55718],{"class":84},[74,135541,28016],{"class":134},[74,135543,1252],{"class":84},[74,135545,135546],{"class":76,"line":1141},[74,135547,1527],{"class":84},[74,135549,135550,135552],{"class":76,"line":1156},[74,135551,135328],{"class":1925},[74,135553,19851],{"class":84},[74,135555,135556,135558,135560,135562],{"class":76,"line":1162},[74,135557,135313],{"class":134},[74,135559,55718],{"class":84},[74,135561,76803],{"class":134},[74,135563,1252],{"class":84},[74,135565,135566],{"class":76,"line":1176},[74,135567,1527],{"class":84},[19,135569,135570],{},"优点：没有增加标签，结构更简单",[19,135572,135573],{},"缺点：照顾低版本浏览器",[19,135575,135576],{},"代表网站： 百度、淘宝网、网易等",[19,135578,135579],{},"法四",[19,135581,135582],{},"父级添加双伪元素",[64,135584,135585],{"className":130833,"code":135299,"language":130835,"meta":69,"style":69},[71,135586,135587,135593,135603,135607,135613,135623],{"__ignoreMap":69},[74,135588,135589,135591],{"class":76,"line":77},[74,135590,135306],{"class":1925},[74,135592,19851],{"class":84},[74,135594,135595,135597,135599,135601],{"class":76,"line":94},[74,135596,135313],{"class":134},[74,135598,55718],{"class":84},[74,135600,28016],{"class":134},[74,135602,1252],{"class":84},[74,135604,135605],{"class":76,"line":1141},[74,135606,1527],{"class":84},[74,135608,135609,135611],{"class":76,"line":1156},[74,135610,135328],{"class":1925},[74,135612,19851],{"class":84},[74,135614,135615,135617,135619,135621],{"class":76,"line":1162},[74,135616,135313],{"class":134},[74,135618,55718],{"class":84},[74,135620,76803],{"class":134},[74,135622,1252],{"class":84},[74,135624,135625],{"class":76,"line":1176},[74,135626,1527],{"class":84},[19,135628,135629],{},"优点：代码更简洁",[19,135631,135573],{},[19,135633,135634],{},"代表网站：小米、腾讯等",[14,135636,135638],{"id":135637},"_93-ps切图","9.3 PS切图",[44,135640,135642],{"id":135641},"_931-常见图片格式","9.3.1 常见图片格式",[223,135644,135645,135655],{},[226,135646,135647],{},[229,135648,135649,135652],{},[232,135650,135651],{"align":28016},"jpg图像格式",[232,135653,135654],{"align":28016},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[270,135656,135657,135665,135673],{},[229,135658,135659,135662],{},[275,135660,135661],{"align":28016},"gif图像格式",[275,135663,135664],{"align":28016},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[229,135666,135667,135670],{},[275,135668,135669],{"align":28016},"png图像格式",[275,135671,135672],{"align":28016},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[229,135674,135675,135678],{},[275,135676,135677],{"align":28016},"PSD图像格式",[275,135679,135680],{"align":28016},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[44,135682,135684],{"id":135683},"_932-图层切图","9.3.2 图层切图",[19,135686,135687],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,135689,135690],{},"按住shift选中两个图层->图层菜单->合并图层",[44,135692,135694],{"id":135693},"_933-切片切图","9.3.3 切片切图",[1093,135696,135697,135700],{},[30,135698,135699],{},"利用切片工具手动划出",[30,135701,135702],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[44,135704,135706],{"id":135705},"_934-切图步骤","9.3.4 切图步骤",[19,135708,135709],{},"用切片工具选中：",[1424,135711],{"style":130689,"src":135712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,135714,135715],{},"文件 -> 导出",[1424,135717],{"style":130689,"src":135718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5090,135720,135721],{},"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":69,"searchDepth":94,"depth":94,"links":135723},[135724,135733,135737],{"id":134160,"depth":94,"text":134161,"children":135725},[135726,135727,135728,135729,135730,135731,135732],{"id":134185,"depth":1141,"text":134186},{"id":134476,"depth":1141,"text":134477},{"id":134605,"depth":1141,"text":134606},{"id":134805,"depth":1141,"text":134806},{"id":134847,"depth":1141,"text":134848},{"id":134885,"depth":1141,"text":134886},{"id":134975,"depth":1141,"text":134976},{"id":135255,"depth":94,"text":135256,"children":135734},[135735,135736],{"id":135259,"depth":1141,"text":135260},{"id":135266,"depth":1141,"text":135267},{"id":135637,"depth":94,"text":135638,"children":135738},[135739,135740,135741,135742],{"id":135641,"depth":1141,"text":135642},{"id":135683,"depth":1141,"text":135684},{"id":135693,"depth":1141,"text":135694},{"id":135705,"depth":1141,"text":135706},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":134152,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":135749,"title":135750,"body":135751,"description":27656,"extension":5121,"meta":136392,"navigation":2362,"path":136393,"seo":136394,"stem":136395,"__hash__":136396},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":135752,"toc":136380},[135753,135756,135760,135786,135820,135824,135828,135831,135873,135880,135890,135898,135900,135903,135906,135909,135916,135930,135934,135937,135966,135970,135973,135987,135991,135994,136022,136026,136029,136055,136059,136064,136097,136102,136130,136134,136151,136197,136202,136246,136263,136370,136378],[10,135754,135750],{"id":135755},"_10-css规范与学成在线案例",[14,135757,135759],{"id":135758},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[27,135761,135762,135768,135774,135780],{},[30,135763,135764,135767],{},[235,135765,135766],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[30,135769,135770,135773],{},[235,135771,135772],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[30,135775,135776,135779],{},[235,135777,135778],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[30,135781,135782,135785],{},[235,135783,135784],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[64,135787,135788],{"className":130833,"code":134197,"language":130835,"meta":69,"style":69},[71,135789,135790,135794,135800,135816],{"__ignoreMap":69},[74,135791,135792],{"class":76,"line":77},[74,135793,134204],{"class":144},[74,135795,135796,135798],{"class":76,"line":94},[74,135797,55892],{"class":55581},[74,135799,19851],{"class":84},[74,135801,135802,135804,135806,135808,135810,135812,135814],{"class":76,"line":1141},[74,135803,75177],{"class":134},[74,135805,55718],{"class":84},[74,135807,303],{"class":134},[74,135809,55773],{"class":80},[74,135811,55802],{"class":134},[74,135813,134225],{"class":134},[74,135815,1252],{"class":84},[74,135817,135818],{"class":76,"line":1156},[74,135819,1527],{"class":84},[14,135821,135823],{"id":135822},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[44,135825,135827],{"id":135826},"_1021-header头部制作","10.2.1 header头部制作",[1424,135829],{"style":130689,"src":135830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1093,135832,135833,135840,135847,135853,135860,135867],{},[30,135834,135835,135836,135839],{},"1号是版心盒子 ",[235,135837,135838],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[30,135841,135842,135843,135846],{},"版心盒子 里面包含 2号盒子 ",[235,135844,135845],{},"logo"," 图标",[30,135848,135849,135850,135852],{},"版心盒子 里面包含 3号盒子 ",[235,135851,57994],{}," 导航栏",[30,135854,135855,135856,135859],{},"版心盒子 里面包含 4号盒子 ",[235,135857,135858],{},"search"," 搜索框",[30,135861,135862,135863,135866],{},"版心盒子 里面包含 5号盒子 ",[235,135864,135865],{},"user"," 个人信息",[30,135868,135869,135870],{},"注意，要求里面的 ",[235,135871,135872],{},"4个子盒子 必须都浮动",[27,135874,135875],{},[30,135876,135877],{},[235,135878,135879],{},"导航栏注意点:",[19,135881,135882,135883,135886,135887],{},"实际开发中， ",[235,135884,135885],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[235,135888,135889],{},"用 li 包含链接(li+a)的做法",[1093,135891,135892,135895],{},[30,135893,135894],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[30,135896,135897],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,135899,13304],{},[19,135901,135902],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,135904,135905],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,135907,135908],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[27,135910,135911],{"start":94},[30,135912,135913],{},[235,135914,135915],{},"4号盒子search的细节：",[1093,135917,135918,135921,135924],{},[30,135919,135920],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[30,135922,135923],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[30,135925,135926,135929],{},[71,135927,135928],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[44,135931,135933],{"id":135932},"_1022-banner制作","10.2.2 banner制作",[1424,135935],{"style":130689,"src":135936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1093,135938,135939,135946,135952,135959],{},[30,135940,135941,135942,135945],{},"1号盒子是通栏的大盒子 ",[235,135943,135944],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[30,135947,135948,135949,135951],{},"2号盒子是版心 ",[235,135950,881],{}," ， 要水平居中对齐",[30,135953,135954,135955,135958],{},"3号盒子版心内，左对齐 ",[235,135956,135957],{},"subnav"," 侧导航栏",[30,135960,135961,135962,135965],{},"4号盒子版心内，右对齐 ",[235,135963,135964],{},"course"," 课程",[44,135967,135969],{"id":135968},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1424,135971],{"style":130689,"src":135972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1093,135974,135975,135978,135981,135984],{},[30,135976,135977],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[30,135979,135980],{},"1号盒子是标题 H3 左侧浮动",[30,135982,135983],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[30,135985,135986],{},"3号盒子 右浮动 mod 修改",[44,135988,135990],{"id":135989},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1424,135992],{"style":130689,"src":135993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1093,135995,135996,136002,136009,136016,136019],{},[30,135997,135998,135999,136001],{},"1号盒子为最大的盒子 ",[235,136000,57995],{}," 版心水平居中对齐",[30,136003,136004,136005,136008],{},"2号盒子为上面部分 ",[235,136006,136007],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[30,136010,136011,136012,136015],{},"3号盒子为底下部分 ",[235,136013,136014],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[30,136017,136018],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[30,136020,136021],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[44,136023,136025],{"id":136024},"_1025-底部模块制作","10.2.5 底部模块制作",[1424,136027],{"style":130689,"src":136028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1093,136030,136031,136038,136041,136048],{},[30,136032,136033,136034,136037],{},"1号盒子通栏大盒子 底部 ",[235,136035,136036],{},"footer"," 给高度 底色是白色",[30,136039,136040],{},"2号盒子版心水平居中",[30,136042,136043,136044,136047],{},"3号盒子版权 ",[235,136045,136046],{},"copyright"," 左对齐",[30,136049,136050,136051,136054],{},"4号盒子 链接组 ",[235,136052,136053],{},"links"," 右对齐",[44,136056,136058],{"id":136057},"_1026-代码模块","10.2.6 代码模块",[27,136060,136061],{},[30,136062,136063],{},"html部分",[64,136065,136067],{"className":131580,"code":136066,"language":131582,"meta":69,"style":69},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[71,136068,136069],{"__ignoreMap":69},[74,136070,136071,136073,136075,136077,136079,136082,136085,136087,136090,136093,136095],{"class":76,"line":77},[74,136072,996],{"class":84},[74,136074,324],{"class":55581},[74,136076,65338],{"class":1925},[74,136078,131],{"class":84},[74,136080,136081],{"class":190},"\"https:\u002F\u002Fexample.com\"",[74,136083,136084],{"class":1925}," target",[74,136086,131],{"class":84},[74,136088,136089],{"class":190},"\"_blank\"",[74,136091,136092],{"class":84},">链接文字\u003C\u002F",[74,136094,324],{"class":55581},[74,136096,55588],{"class":84},[27,136098,136099],{"start":94},[30,136100,136101],{},"css部分",[64,136103,136104],{"className":131580,"code":136066,"language":131582,"meta":69,"style":69},[71,136105,136106],{"__ignoreMap":69},[74,136107,136108,136110,136112,136114,136116,136118,136120,136122,136124,136126,136128],{"class":76,"line":77},[74,136109,996],{"class":84},[74,136111,324],{"class":55581},[74,136113,65338],{"class":1925},[74,136115,131],{"class":84},[74,136117,136081],{"class":190},[74,136119,136084],{"class":1925},[74,136121,131],{"class":84},[74,136123,136089],{"class":190},[74,136125,136092],{"class":84},[74,136127,324],{"class":55581},[74,136129,55588],{"class":84},[44,136131,136133],{"id":136132},"_1027-收获","10.2.7 收获",[27,136135,136136,136139,136142,136145,136148],{},[30,136137,136138],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[30,136140,136141],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[30,136143,136144],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[30,136146,136147],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[30,136149,136150],{},"遗忘代码",[64,136152,136154],{"className":130833,"code":136153,"language":130835,"meta":69,"style":69},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[71,136155,136156,136178,136183,136193],{"__ignoreMap":69},[74,136157,136158,136160,136162,136164,136166,136168,136170,136172,136174,136176],{"class":76,"line":77},[74,136159,55892],{"class":55581},[74,136161,16714],{"class":84},[74,136163,19],{"class":55581},[74,136165,16714],{"class":84},[74,136167,10],{"class":55581},[74,136169,16714],{"class":84},[74,136171,1093],{"class":55581},[74,136173,16714],{"class":84},[74,136175,30],{"class":55581},[74,136177,19851],{"class":84},[74,136179,136180],{"class":76,"line":94},[74,136181,136182],{"class":144},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[74,136184,136185,136187,136189,136191],{"class":76,"line":1141},[74,136186,132449],{"class":134},[74,136188,55718],{"class":84},[74,136190,65150],{"class":134},[74,136192,1252],{"class":84},[74,136194,136195],{"class":76,"line":1156},[74,136196,1527],{"class":84},[27,136198,136199],{"start":1176},[30,136200,136201],{},"html引css的程序",[64,136203,136204],{"className":130833,"code":136153,"language":130835,"meta":69,"style":69},[71,136205,136206,136228,136232,136242],{"__ignoreMap":69},[74,136207,136208,136210,136212,136214,136216,136218,136220,136222,136224,136226],{"class":76,"line":77},[74,136209,55892],{"class":55581},[74,136211,16714],{"class":84},[74,136213,19],{"class":55581},[74,136215,16714],{"class":84},[74,136217,10],{"class":55581},[74,136219,16714],{"class":84},[74,136221,1093],{"class":55581},[74,136223,16714],{"class":84},[74,136225,30],{"class":55581},[74,136227,19851],{"class":84},[74,136229,136230],{"class":76,"line":94},[74,136231,136182],{"class":144},[74,136233,136234,136236,136238,136240],{"class":76,"line":1141},[74,136235,132449],{"class":134},[74,136237,55718],{"class":84},[74,136239,65150],{"class":134},[74,136241,1252],{"class":84},[74,136243,136244],{"class":76,"line":1156},[74,136245,1527],{"class":84},[27,136247,136248,136251,136254,136257,136260],{"start":1182},[30,136249,136250],{},"浮动的盒子不会有外边距合并问题",[30,136252,136253],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[30,136255,136256],{},"ctrl+g快速定位行；shift+alt多个光标",[30,136258,136259],{},"学习上方各个模块的选择器起名方法，以后就这样用",[30,136261,136262],{},"在写选择器时尽量写全一些，例如",[64,136264,136266],{"className":130833,"code":136265,"language":130835,"meta":69,"style":69},"\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",[71,136267,136268,136273,136289,136294,136309,136314,136329,136334,136349,136354],{"__ignoreMap":69},[74,136269,136270],{"class":76,"line":77},[74,136271,136272],{"class":144},"\u002F* 静态定位（默认） *\u002F\n",[74,136274,136275,136278,136280,136282,136284,136287],{"class":76,"line":94},[74,136276,136277],{"class":1925},".static",[74,136279,84088],{"class":84},[74,136281,133193],{"class":134},[74,136283,55718],{"class":84},[74,136285,136286],{"class":134},"static",[74,136288,133763],{"class":84},[74,136290,136291],{"class":76,"line":1141},[74,136292,136293],{"class":144},"\u002F* 相对定位 *\u002F\n",[74,136295,136296,136299,136301,136303,136305,136307],{"class":76,"line":1156},[74,136297,136298],{"class":1925},".relative",[74,136300,84088],{"class":84},[74,136302,133193],{"class":134},[74,136304,55718],{"class":84},[74,136306,59045],{"class":134},[74,136308,133763],{"class":84},[74,136310,136311],{"class":76,"line":1162},[74,136312,136313],{"class":144},"\u002F* 绝对定位 *\u002F\n",[74,136315,136316,136319,136321,136323,136325,136327],{"class":76,"line":1176},[74,136317,136318],{"class":1925},".absolute",[74,136320,84088],{"class":84},[74,136322,133193],{"class":134},[74,136324,55718],{"class":84},[74,136326,59112],{"class":134},[74,136328,133763],{"class":84},[74,136330,136331],{"class":76,"line":1182},[74,136332,136333],{"class":144},"\u002F* 固定定位 *\u002F\n",[74,136335,136336,136339,136341,136343,136345,136347],{"class":76,"line":1273},[74,136337,136338],{"class":1925},".fixed",[74,136340,84088],{"class":84},[74,136342,133193],{"class":134},[74,136344,55718],{"class":84},[74,136346,90514],{"class":134},[74,136348,133763],{"class":84},[74,136350,136351],{"class":76,"line":1279},[74,136352,136353],{"class":144},"\u002F* 粘性定位 *\u002F\n",[74,136355,136356,136359,136361,136363,136365,136368],{"class":76,"line":1291},[74,136357,136358],{"class":1925},".sticky",[74,136360,84088],{"class":84},[74,136362,133193],{"class":134},[74,136364,55718],{"class":84},[74,136366,136367],{"class":134},"sticky",[74,136369,133763],{"class":84},[27,136371,136372,136375],{"start":1579},[30,136373,136374],{},"一定要用好注释",[30,136376,136377],{},"浮动的盒子不会有外边距合并的问题",[5090,136379,135721],{},{"title":69,"searchDepth":94,"depth":94,"links":136381},[136382,136383],{"id":135758,"depth":94,"text":135759},{"id":135822,"depth":94,"text":135823,"children":136384},[136385,136386,136387,136388,136389,136390,136391],{"id":135826,"depth":1141,"text":135827},{"id":135932,"depth":1141,"text":135933},{"id":135968,"depth":1141,"text":135969},{"id":135989,"depth":1141,"text":135990},{"id":136024,"depth":1141,"text":136025},{"id":136057,"depth":1141,"text":136058},{"id":136132,"depth":1141,"text":136133},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":135750,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":136398,"title":136399,"body":136400,"description":27656,"extension":5121,"meta":137886,"navigation":2362,"path":137887,"seo":137888,"stem":137889,"__hash__":137890},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":136401,"toc":137878},[136402,136405,136409,136413,136424,136428,136445,136489,136522,136525,136542,136545,136548,136592,136596,136600,136603,136606,136610,136613,136624,136687,136728,136731,136746,136800,136808,136811,136822,136876,136902,136905,136918,136972,137004,137058,137081,137135,137138,137141,137148,137202,137223,137277,137280,137283,137368,137376,137433,137456,137460,137463,137481,137485,137504,137558,137596,137600,137603,137606,137628,137632,137640,137643,137648,137659,137662,137666,137680,137724,137727,137731,137734,137739,137765,137770,137847,137850,137854,137857,137860,137863,137866,137869,137872,137875],[10,136403,136399],{"id":136404},"_11-传统布局与定位体系",[14,136406,136408],{"id":136407},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[44,136410,136412],{"id":136411},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1093,136414,136415,136418,136421],{},[30,136416,136417],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[30,136419,136420],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[30,136422,136423],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[44,136425,136427],{"id":136426},"_1112-浮动","11.1.2 浮动",[1093,136429,136430,136433,136436,136439,136442],{},[30,136431,136432],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[30,136434,136435],{},"浮动可以改变元素标签默认的排列方式",[30,136437,136438],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[30,136440,136441],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[30,136443,136444],{},"在使用行内块转换时盒子之间是有空隙的",[64,136446,136447],{"className":130833,"code":135299,"language":130835,"meta":69,"style":69},[71,136448,136449,136455,136465,136469,136475,136485],{"__ignoreMap":69},[74,136450,136451,136453],{"class":76,"line":77},[74,136452,135306],{"class":1925},[74,136454,19851],{"class":84},[74,136456,136457,136459,136461,136463],{"class":76,"line":94},[74,136458,135313],{"class":134},[74,136460,55718],{"class":84},[74,136462,28016],{"class":134},[74,136464,1252],{"class":84},[74,136466,136467],{"class":76,"line":1141},[74,136468,1527],{"class":84},[74,136470,136471,136473],{"class":76,"line":1156},[74,136472,135328],{"class":1925},[74,136474,19851],{"class":84},[74,136476,136477,136479,136481,136483],{"class":76,"line":1162},[74,136478,135313],{"class":134},[74,136480,55718],{"class":84},[74,136482,76803],{"class":134},[74,136484,1252],{"class":84},[74,136486,136487],{"class":76,"line":1176},[74,136488,1527],{"class":84},[223,136490,136491,136499],{},[226,136492,136493],{},[229,136494,136495,136497],{},[232,136496,131297],{"align":28016},[232,136498,31770],{"align":28016},[270,136500,136501,136508,136515],{},[229,136502,136503,136505],{},[275,136504,59018],{"align":28016},[275,136506,136507],{"align":28016},"元素不浮动（默认值）",[229,136509,136510,136512],{},[275,136511,28016],{"align":28016},[275,136513,136514],{"align":28016},"元素向左浮动",[229,136516,136517,136519],{},[275,136518,76803],{"align":28016},[275,136520,136521],{"align":28016},"元素向右浮动",[19,136523,136524],{},"浮动重点：",[1093,136526,136527,136530,136533,136536,136539],{},[30,136528,136529],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[30,136531,136532],{},"浮动的元素会一行内显示并且元素顶部对齐",[30,136534,136535],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[30,136537,136538],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[30,136540,136541],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,136543,136544],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,136546,136547],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[64,136549,136550],{"className":130833,"code":135299,"language":130835,"meta":69,"style":69},[71,136551,136552,136558,136568,136572,136578,136588],{"__ignoreMap":69},[74,136553,136554,136556],{"class":76,"line":77},[74,136555,135306],{"class":1925},[74,136557,19851],{"class":84},[74,136559,136560,136562,136564,136566],{"class":76,"line":94},[74,136561,135313],{"class":134},[74,136563,55718],{"class":84},[74,136565,28016],{"class":134},[74,136567,1252],{"class":84},[74,136569,136570],{"class":76,"line":1141},[74,136571,1527],{"class":84},[74,136573,136574,136576],{"class":76,"line":1156},[74,136575,135328],{"class":1925},[74,136577,19851],{"class":84},[74,136579,136580,136582,136584,136586],{"class":76,"line":1162},[74,136581,135313],{"class":134},[74,136583,55718],{"class":84},[74,136585,76803],{"class":134},[74,136587,1252],{"class":84},[74,136589,136590],{"class":76,"line":1176},[74,136591,1527],{"class":84},[44,136593,136595],{"id":136594},"_1113-定位","11.1.3 定位",[26277,136597,136599],{"id":136598},"_11131-使用场景","11.1.3.1 使用场景",[19,136601,136602],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,136604,136605],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[26277,136607,136609],{"id":136608},"_11132-定位组成","11.1.3.2 定位组成",[19,136611,136612],{},"定位 = 定位模式 + 边偏移",[27,136614,136615],{},[30,136616,136617,136620,136621],{},[235,136618,136619],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[235,136622,136623],{},"定位模式",[64,136625,136627],{"className":130833,"code":136626,"language":130835,"meta":69,"style":69},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[71,136628,136629,136635,136649,136666,136683],{"__ignoreMap":69},[74,136630,136631,136633],{"class":76,"line":77},[74,136632,134681],{"class":1925},[74,136634,19851],{"class":84},[74,136636,136637,136640,136642,136644,136646],{"class":76,"line":94},[74,136638,136639],{"class":134},"  position",[74,136641,55718],{"class":84},[74,136643,59045],{"class":134},[74,136645,134696],{"class":84},[74,136647,136648],{"class":144},"\u002F* 定位模式 *\u002F\n",[74,136650,136651,136654,136656,136658,136660,136663],{"class":76,"line":1141},[74,136652,136653],{"class":134},"  top",[74,136655,55718],{"class":84},[74,136657,532],{"class":134},[74,136659,55773],{"class":80},[74,136661,136662],{"class":84},";           ",[74,136664,136665],{"class":144},"\u002F* 边偏移：上 *\u002F\n",[74,136667,136668,136671,136673,136675,136677,136680],{"class":76,"line":1156},[74,136669,136670],{"class":134},"  left",[74,136672,55718],{"class":84},[74,136674,786],{"class":134},[74,136676,55773],{"class":80},[74,136678,136679],{"class":84},";          ",[74,136681,136682],{"class":144},"\u002F* 边偏移：左 *\u002F\n",[74,136684,136685],{"class":76,"line":1162},[74,136686,1527],{"class":84},[223,136688,136689,136698],{},[226,136690,136691],{},[229,136692,136693,136695],{},[232,136694,238],{"align":28016},[232,136696,136697],{"align":28016},"语义",[270,136699,136700,136707,136714,136721],{},[229,136701,136702,136704],{},[275,136703,136286],{"align":28016},[275,136705,136706],{"align":28016},"静态定位",[229,136708,136709,136711],{},[275,136710,59045],{"align":28016},[275,136712,136713],{"align":28016},"相对定位",[229,136715,136716,136718],{},[275,136717,59112],{"align":28016},[275,136719,136720],{"align":28016},"绝对定位",[229,136722,136723,136725],{},[275,136724,90514],{"align":28016},[275,136726,136727],{"align":28016},"固定定位",[19,136729,136730],{},"（1）静态定位：",[1093,136732,136733,136744],{},[30,136734,136735,136736,136739,136740,136743],{},"静态定位是元素的 ",[235,136737,136738],{},"默认定位方式"," ， ",[235,136741,136742],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[30,136745,9460],{},[64,136747,136748],{"className":130833,"code":136626,"language":130835,"meta":69,"style":69},[71,136749,136750,136756,136768,136782,136796],{"__ignoreMap":69},[74,136751,136752,136754],{"class":76,"line":77},[74,136753,134681],{"class":1925},[74,136755,19851],{"class":84},[74,136757,136758,136760,136762,136764,136766],{"class":76,"line":94},[74,136759,136639],{"class":134},[74,136761,55718],{"class":84},[74,136763,59045],{"class":134},[74,136765,134696],{"class":84},[74,136767,136648],{"class":144},[74,136769,136770,136772,136774,136776,136778,136780],{"class":76,"line":1141},[74,136771,136653],{"class":134},[74,136773,55718],{"class":84},[74,136775,532],{"class":134},[74,136777,55773],{"class":80},[74,136779,136662],{"class":84},[74,136781,136665],{"class":144},[74,136783,136784,136786,136788,136790,136792,136794],{"class":76,"line":1156},[74,136785,136670],{"class":134},[74,136787,55718],{"class":84},[74,136789,786],{"class":134},[74,136791,55773],{"class":80},[74,136793,136679],{"class":84},[74,136795,136682],{"class":144},[74,136797,136798],{"class":76,"line":1162},[74,136799,1527],{"class":84},[1093,136801,136802,136805],{},[30,136803,136804],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[30,136806,136807],{},"静态定位在布局时我们几乎不用的",[19,136809,136810],{},"（2）相对定位",[1093,136812,136813,136820],{},[30,136814,136815,136816,136819],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[235,136817,136818],{},"原来的位置"," 来说的（自恋型）",[30,136821,9460],{},[64,136823,136824],{"className":130833,"code":136626,"language":130835,"meta":69,"style":69},[71,136825,136826,136832,136844,136858,136872],{"__ignoreMap":69},[74,136827,136828,136830],{"class":76,"line":77},[74,136829,134681],{"class":1925},[74,136831,19851],{"class":84},[74,136833,136834,136836,136838,136840,136842],{"class":76,"line":94},[74,136835,136639],{"class":134},[74,136837,55718],{"class":84},[74,136839,59045],{"class":134},[74,136841,134696],{"class":84},[74,136843,136648],{"class":144},[74,136845,136846,136848,136850,136852,136854,136856],{"class":76,"line":1141},[74,136847,136653],{"class":134},[74,136849,55718],{"class":84},[74,136851,532],{"class":134},[74,136853,55773],{"class":80},[74,136855,136662],{"class":84},[74,136857,136665],{"class":144},[74,136859,136860,136862,136864,136866,136868,136870],{"class":76,"line":1156},[74,136861,136670],{"class":134},[74,136863,55718],{"class":84},[74,136865,786],{"class":134},[74,136867,55773],{"class":80},[74,136869,136679],{"class":84},[74,136871,136682],{"class":144},[74,136873,136874],{"class":76,"line":1162},[74,136875,1527],{"class":84},[1093,136877,136878],{},[30,136879,136880,136881,136883,136884,136886,136887,136890,136891,136894,136895,136897,136898,136901],{},"相对定位的特点：",[57997,136882],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[57997,136885],{},"  ② ",[235,136888,136889],{},"原来"," 在标准流的 ",[235,136892,136893],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[57997,136896],{},"  ③因此， ",[235,136899,136900],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,136903,136904],{},"（3）绝对定位",[1093,136906,136907,136916],{},[30,136908,136909,136911,136912,136915],{},[235,136910,136720],{}," 是元素在移动位置的时候，是相对于它 ",[235,136913,136914],{},"祖先元素"," 来说的（拼爹型）",[30,136917,9460],{},[64,136919,136920],{"className":130833,"code":136626,"language":130835,"meta":69,"style":69},[71,136921,136922,136928,136940,136954,136968],{"__ignoreMap":69},[74,136923,136924,136926],{"class":76,"line":77},[74,136925,134681],{"class":1925},[74,136927,19851],{"class":84},[74,136929,136930,136932,136934,136936,136938],{"class":76,"line":94},[74,136931,136639],{"class":134},[74,136933,55718],{"class":84},[74,136935,59045],{"class":134},[74,136937,134696],{"class":84},[74,136939,136648],{"class":144},[74,136941,136942,136944,136946,136948,136950,136952],{"class":76,"line":1141},[74,136943,136653],{"class":134},[74,136945,55718],{"class":84},[74,136947,532],{"class":134},[74,136949,55773],{"class":80},[74,136951,136662],{"class":84},[74,136953,136665],{"class":144},[74,136955,136956,136958,136960,136962,136964,136966],{"class":76,"line":1156},[74,136957,136670],{"class":134},[74,136959,55718],{"class":84},[74,136961,786],{"class":134},[74,136963,55773],{"class":80},[74,136965,136679],{"class":84},[74,136967,136682],{"class":144},[74,136969,136970],{"class":76,"line":1162},[74,136971,1527],{"class":84},[1093,136973,136974,136989,136998,137001],{},[30,136975,136976,136977,136979,136980,136982,136983,136985,136986,136988],{},"绝对定位的特点：",[57997,136978],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[57997,136981],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[57997,136984],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[57997,136987],{},"  (4)固定定位",[30,136990,136991,136993,136994,136997],{},[235,136992,136727],{}," 是元素 ",[235,136995,136996],{},"固定于浏览器可视区的位置"," 。（认死理型）",[30,136999,137000],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[30,137002,137003],{},"语法:",[64,137005,137006],{"className":130833,"code":136626,"language":130835,"meta":69,"style":69},[71,137007,137008,137014,137026,137040,137054],{"__ignoreMap":69},[74,137009,137010,137012],{"class":76,"line":77},[74,137011,134681],{"class":1925},[74,137013,19851],{"class":84},[74,137015,137016,137018,137020,137022,137024],{"class":76,"line":94},[74,137017,136639],{"class":134},[74,137019,55718],{"class":84},[74,137021,59045],{"class":134},[74,137023,134696],{"class":84},[74,137025,136648],{"class":144},[74,137027,137028,137030,137032,137034,137036,137038],{"class":76,"line":1141},[74,137029,136653],{"class":134},[74,137031,55718],{"class":84},[74,137033,532],{"class":134},[74,137035,55773],{"class":80},[74,137037,136662],{"class":84},[74,137039,136665],{"class":144},[74,137041,137042,137044,137046,137048,137050,137052],{"class":76,"line":1156},[74,137043,136670],{"class":134},[74,137045,55718],{"class":84},[74,137047,786],{"class":134},[74,137049,55773],{"class":80},[74,137051,136679],{"class":84},[74,137053,136682],{"class":144},[74,137055,137056],{"class":76,"line":1162},[74,137057,1527],{"class":84},[1093,137059,137060,137069],{},[30,137061,137062,137063,137065,137066,137068],{},"特点:",[57997,137064],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[57997,137067],{},"  ②固定定位不再占有原先的位置,完全脱标",[30,137070,137071,137072,137074,137075,137077,137078,137080],{},"固定在版心位置的方法:",[57997,137073],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[57997,137076],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[57997,137079],{},"  实例：",[64,137082,137083],{"className":130833,"code":136626,"language":130835,"meta":69,"style":69},[71,137084,137085,137091,137103,137117,137131],{"__ignoreMap":69},[74,137086,137087,137089],{"class":76,"line":77},[74,137088,134681],{"class":1925},[74,137090,19851],{"class":84},[74,137092,137093,137095,137097,137099,137101],{"class":76,"line":94},[74,137094,136639],{"class":134},[74,137096,55718],{"class":84},[74,137098,59045],{"class":134},[74,137100,134696],{"class":84},[74,137102,136648],{"class":144},[74,137104,137105,137107,137109,137111,137113,137115],{"class":76,"line":1141},[74,137106,136653],{"class":134},[74,137108,55718],{"class":84},[74,137110,532],{"class":134},[74,137112,55773],{"class":80},[74,137114,136662],{"class":84},[74,137116,136665],{"class":144},[74,137118,137119,137121,137123,137125,137127,137129],{"class":76,"line":1156},[74,137120,136670],{"class":134},[74,137122,55718],{"class":84},[74,137124,786],{"class":134},[74,137126,55773],{"class":80},[74,137128,136679],{"class":84},[74,137130,136682],{"class":144},[74,137132,137133],{"class":76,"line":1162},[74,137134,1527],{"class":84},[1424,137136],{"style":130689,"src":137137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,137139,137140],{},"(5)粘性定位",[1093,137142,137143,137146],{},[30,137144,137145],{},"粘性定位可以被认为是相对定位和固定定位的混合",[30,137147,9460],{},[64,137149,137150],{"className":130833,"code":136626,"language":130835,"meta":69,"style":69},[71,137151,137152,137158,137170,137184,137198],{"__ignoreMap":69},[74,137153,137154,137156],{"class":76,"line":77},[74,137155,134681],{"class":1925},[74,137157,19851],{"class":84},[74,137159,137160,137162,137164,137166,137168],{"class":76,"line":94},[74,137161,136639],{"class":134},[74,137163,55718],{"class":84},[74,137165,59045],{"class":134},[74,137167,134696],{"class":84},[74,137169,136648],{"class":144},[74,137171,137172,137174,137176,137178,137180,137182],{"class":76,"line":1141},[74,137173,136653],{"class":134},[74,137175,55718],{"class":84},[74,137177,532],{"class":134},[74,137179,55773],{"class":80},[74,137181,136662],{"class":84},[74,137183,136665],{"class":144},[74,137185,137186,137188,137190,137192,137194,137196],{"class":76,"line":1156},[74,137187,136670],{"class":134},[74,137189,55718],{"class":84},[74,137191,786],{"class":134},[74,137193,55773],{"class":80},[74,137195,136679],{"class":84},[74,137197,136682],{"class":144},[74,137199,137200],{"class":76,"line":1162},[74,137201,1527],{"class":84},[1093,137203,137204],{},[30,137205,137206,137207,137209,137210,137212,137213,137215,137216,137219,137220,137222],{},"粘性定位的特点：",[57997,137208],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[57997,137211],{},"  ②粘性定位占有原先的位置（相对定位特点）",[57997,137214],{},"  ③必须添加 top 、left、right、bottom ",[235,137217,137218],{},"其中一个"," 才有效",[57997,137221],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[64,137224,137225],{"className":130833,"code":136626,"language":130835,"meta":69,"style":69},[71,137226,137227,137233,137245,137259,137273],{"__ignoreMap":69},[74,137228,137229,137231],{"class":76,"line":77},[74,137230,134681],{"class":1925},[74,137232,19851],{"class":84},[74,137234,137235,137237,137239,137241,137243],{"class":76,"line":94},[74,137236,136639],{"class":134},[74,137238,55718],{"class":84},[74,137240,59045],{"class":134},[74,137242,134696],{"class":84},[74,137244,136648],{"class":144},[74,137246,137247,137249,137251,137253,137255,137257],{"class":76,"line":1141},[74,137248,136653],{"class":134},[74,137250,55718],{"class":84},[74,137252,532],{"class":134},[74,137254,55773],{"class":80},[74,137256,136662],{"class":84},[74,137258,136665],{"class":144},[74,137260,137261,137263,137265,137267,137269,137271],{"class":76,"line":1156},[74,137262,136670],{"class":134},[74,137264,55718],{"class":84},[74,137266,786],{"class":134},[74,137268,55773],{"class":80},[74,137270,136679],{"class":84},[74,137272,136682],{"class":144},[74,137274,137275],{"class":76,"line":1162},[74,137276,1527],{"class":84},[1424,137278],{"style":130689,"src":137279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,137281,137282],{},"(6)总结",[223,137284,137285,137300],{},[226,137286,137287],{},[229,137288,137289,137291,137294,137297],{},[232,137290,136623],{"align":28016},[232,137292,137293],{"align":28016},"是否脱标",[232,137295,137296],{"align":28016},"移动位置",[232,137298,137299],{"align":28016},"是否常用",[270,137301,137302,137315,137329,137343,137356],{},[229,137303,137304,137307,137309,137312],{},[275,137305,137306],{"align":28016},"Static 静态定位",[275,137308,108959],{"align":28016},[275,137310,137311],{"align":28016},"不能使用边偏移",[275,137313,137314],{"align":28016},"很少",[229,137316,137317,137320,137323,137326],{},[275,137318,137319],{"align":28016},"Relative 相对定位",[275,137321,137322],{"align":28016},"否(占有位置)",[275,137324,137325],{"align":28016},"相对于自身位置移动",[275,137327,137328],{"align":28016},"基本单独使用",[229,137330,137331,137334,137337,137340],{},[275,137332,137333],{"align":28016},"Absolute 绝对定位",[275,137335,137336],{"align":28016},"是(不占有位置)",[275,137338,137339],{"align":28016},"带有定位的父级",[275,137341,137342],{"align":28016},"要和定位父级元素搭配使用",[229,137344,137345,137348,137350,137353],{},[275,137346,137347],{"align":28016},"Fixed 固定定位",[275,137349,137336],{"align":28016},[275,137351,137352],{"align":28016},"浏览器可视区",[275,137354,137355],{"align":28016},"单独使用,不需要父级",[229,137357,137358,137361,137363,137365],{},[275,137359,137360],{"align":28016},"Sticky 粘性定位",[275,137362,137322],{"align":28016},[275,137364,137352],{"align":28016},[275,137366,137367],{"align":28016},"当前阶段少",[27,137369,137370],{"start":94},[30,137371,137372,137375],{},[235,137373,137374],{},"边偏移"," 则决定了该元素的最终位置",[223,137377,137378,137389],{},[226,137379,137380],{},[229,137381,137382,137385,137387],{},[232,137383,137384],{"align":28016},"边偏移属性",[232,137386,31773],{"align":28016},[232,137388,31770],{"align":28016},[270,137390,137391,137402,137413,137423],{},[229,137392,137393,137396,137399],{},[275,137394,137395],{"align":28016},"top",[275,137397,137398],{"align":28016},"top: 80px;",[275,137400,137401],{"align":28016},"顶端偏移量，定义元素相对于父元素上边线的距离",[229,137403,137404,137407,137410],{},[275,137405,137406],{"align":28016},"bottom",[275,137408,137409],{"align":28016},"bottom: 80px ;",[275,137411,137412],{"align":28016},"底部偏移量，定义元素相对于其父元素下边线的距离",[229,137414,137415,137417,137420],{},[275,137416,28016],{"align":28016},[275,137418,137419],{"align":28016},"left: 80px ;",[275,137421,137422],{"align":28016},"左侧偏移量，定义元素相对于其父元素左边线的距离",[229,137424,137425,137427,137430],{},[275,137426,76803],{"align":28016},[275,137428,137429],{"align":28016},"right: 80px ;",[275,137431,137432],{"align":28016},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1093,137434,137435],{},[30,137436,13304,137437,137439,137440,137442,137443,137445,137446,137449,137450,137452,137453,137455],{},[57997,137438],{},"  ① ",[235,137441,137374],{}," 需要和 ",[235,137444,136623],{}," 联合使用， ",[235,137447,137448],{},"单独使用无效"," ；",[57997,137451],{},"  ②top和bottom不要同时使用",[57997,137454],{},"  ③left和right不要同时使用",[26277,137457,137459],{"id":137458},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,137461,137462],{},"子级是绝对定位的话，父级要用相对定位",[1093,137464,137465,137468,137471,137474],{},[30,137466,137467],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[30,137469,137470],{},"父盒子需要加定位限制子盒子在父盒子内显示",[30,137472,137473],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[30,137475,137476,137477,137480],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[235,137478,137479],{},"子绝父绝"," 也会遇到",[26277,137482,137484],{"id":137483},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1093,137486,137487,137502],{},[30,137488,137489,137490,137493,137494,137497,137498,137501],{},"在使用 ",[235,137491,137492],{},"定位"," 布局时，可能会 ",[235,137495,137496],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[235,137499,137500],{},"z-index"," 来控制盒子的前后次序 (z轴)",[30,137503,9460],{},[64,137505,137506],{"className":130833,"code":136626,"language":130835,"meta":69,"style":69},[71,137507,137508,137514,137526,137540,137554],{"__ignoreMap":69},[74,137509,137510,137512],{"class":76,"line":77},[74,137511,134681],{"class":1925},[74,137513,19851],{"class":84},[74,137515,137516,137518,137520,137522,137524],{"class":76,"line":94},[74,137517,136639],{"class":134},[74,137519,55718],{"class":84},[74,137521,59045],{"class":134},[74,137523,134696],{"class":84},[74,137525,136648],{"class":144},[74,137527,137528,137530,137532,137534,137536,137538],{"class":76,"line":1141},[74,137529,136653],{"class":134},[74,137531,55718],{"class":84},[74,137533,532],{"class":134},[74,137535,55773],{"class":80},[74,137537,136662],{"class":84},[74,137539,136665],{"class":144},[74,137541,137542,137544,137546,137548,137550,137552],{"class":76,"line":1156},[74,137543,136670],{"class":134},[74,137545,55718],{"class":84},[74,137547,786],{"class":134},[74,137549,55773],{"class":80},[74,137551,136679],{"class":84},[74,137553,136682],{"class":144},[74,137555,137556],{"class":76,"line":1162},[74,137557,1527],{"class":84},[1093,137559,137560],{},[30,137561,137562,137563,137439,137565,137567,137568,131996,137571,86820,137574,137576,137577,137579,137580,137583,137584,137449,137587,137589,137590,137593,137595],{},"z-index的特性",[57997,137564],{},[235,137566,131297],{}," ： ",[235,137569,137570],{},"正整数",[235,137572,137573],{},"负整数",[235,137575,277],{}," ，默认值是 0，数值越大，盒子越靠上；",[57997,137578],{},"  ②如果 ",[235,137581,137582],{},"属性值相同"," ，则按照书写顺序， ",[235,137585,137586],{},"后来居上",[57997,137588],{},"  ③数字后面 ",[235,137591,137592],{},"不能加单位",[57997,137594],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[26277,137597,137599],{"id":137598},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,137601,137602],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,137604,137605],{},"方法:",[1093,137607,137608,137618],{},[30,137609,137610,137611,137614,137615],{},"left: 50%; 让 ",[235,137612,137613],{},"盒子的左侧"," 移动到 ",[235,137616,137617],{},"父级元素的水平中心位置",[30,137619,137620,137621,137624,137625],{},"margin-left: -100px; 让盒子 ",[235,137622,137623],{},"向左"," 移动 ",[235,137626,137627],{},"自身宽度的一半",[26277,137629,137631],{"id":137630},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[27,137633,137634,137637],{},[30,137635,137636],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[30,137638,137639],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,137641,137642],{},"也就是说绝对定位和固定定位和浮动类似",[27,137644,137645],{"start":1141},[30,137646,137647],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1093,137649,137650,137653,137656],{},[30,137651,137652],{},"可以用inline-block 转换为行内块",[30,137654,137655],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[30,137657,137658],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,137660,137661],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[26277,137663,137665],{"id":137664},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[27,137667,137668,137671,137674,137677],{},[30,137669,137670],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[30,137672,137673],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[30,137675,137676],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[30,137678,137679],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[64,137681,137682],{"className":130833,"code":135299,"language":130835,"meta":69,"style":69},[71,137683,137684,137690,137700,137704,137710,137720],{"__ignoreMap":69},[74,137685,137686,137688],{"class":76,"line":77},[74,137687,135306],{"class":1925},[74,137689,19851],{"class":84},[74,137691,137692,137694,137696,137698],{"class":76,"line":94},[74,137693,135313],{"class":134},[74,137695,55718],{"class":84},[74,137697,28016],{"class":134},[74,137699,1252],{"class":84},[74,137701,137702],{"class":76,"line":1141},[74,137703,1527],{"class":84},[74,137705,137706,137708],{"class":76,"line":1156},[74,137707,135328],{"class":1925},[74,137709,19851],{"class":84},[74,137711,137712,137714,137716,137718],{"class":76,"line":1162},[74,137713,135313],{"class":134},[74,137715,55718],{"class":84},[74,137717,76803],{"class":134},[74,137719,1252],{"class":84},[74,137721,137722],{"class":76,"line":1176},[74,137723,1527],{"class":84},[1424,137725],{"style":130689,"src":137726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[26277,137728,137730],{"id":137729},"_11138-轮播图","11.1.3.8 轮播图",[1424,137732],{"style":130689,"src":137733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[27,137735,137736],{},[30,137737,137738],{},"制作顺序:",[1093,137740,137741,137744,137747,137756],{},[30,137742,137743],{},"大盒子我们类名为： tb-promo 淘宝广告",[30,137745,137746],{},"里面先放一张图片",[30,137748,137749,137750,137752,137753,137755],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[57997,137751],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[57997,137754],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[30,137757,137758,137759,137761,137762,137764],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[57997,137760],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[57997,137763],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[27,137766,137767],{"start":94},[30,137768,137769],{},"代码模块",[64,137771,137773],{"className":130833,"code":137772,"language":130835,"meta":69,"style":69},"\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",[71,137774,137775,137780,137787,137797,137807,137817,137821,137826,137833,137843],{"__ignoreMap":69},[74,137776,137777],{"class":76,"line":77},[74,137778,137779],{"class":144},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[74,137781,137782,137785],{"class":76,"line":94},[74,137783,137784],{"class":1925},".son",[74,137786,19851],{"class":84},[74,137788,137789,137791,137793,137795],{"class":76,"line":1141},[74,137790,136639],{"class":134},[74,137792,55718],{"class":84},[74,137794,59112],{"class":134},[74,137796,1252],{"class":84},[74,137798,137799,137801,137803,137805],{"class":76,"line":1156},[74,137800,136653],{"class":134},[74,137802,55718],{"class":84},[74,137804,277],{"class":134},[74,137806,1252],{"class":84},[74,137808,137809,137811,137813,137815],{"class":76,"line":1162},[74,137810,136670],{"class":134},[74,137812,55718],{"class":84},[74,137814,277],{"class":134},[74,137816,1252],{"class":84},[74,137818,137819],{"class":76,"line":1176},[74,137820,1527],{"class":84},[74,137822,137823],{"class":76,"line":1182},[74,137824,137825],{"class":144},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[74,137827,137828,137831],{"class":76,"line":1273},[74,137829,137830],{"class":1925},".father",[74,137832,19851],{"class":84},[74,137834,137835,137837,137839,137841],{"class":76,"line":1279},[74,137836,136639],{"class":134},[74,137838,55718],{"class":84},[74,137840,59045],{"class":134},[74,137842,1252],{"class":84},[74,137844,137845],{"class":76,"line":1291},[74,137846,1527],{"class":84},[19,137848,137849],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[44,137851,137853],{"id":137852},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1424,137855],{"style":130689,"src":137856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,137858,137859],{},"✨ 黄金口诀：",[19,137861,137862],{},"\"TOP正下负上，LEFT正右负左\"",[19,137864,137865],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,137867,137868],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,137870,137871],{},"✨ 简单记：",[19,137873,137874],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5090,137876,137877],{},"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":69,"searchDepth":94,"depth":94,"links":137879},[137880],{"id":136407,"depth":94,"text":136408,"children":137881},[137882,137883,137884,137885],{"id":136411,"depth":1141,"text":136412},{"id":136426,"depth":1141,"text":136427},{"id":136594,"depth":1141,"text":136595},{"id":137852,"depth":1141,"text":137853},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":136399,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":137892,"title":137893,"body":137894,"description":27656,"extension":5121,"meta":139317,"navigation":2362,"path":139318,"seo":139319,"stem":139320,"__hash__":139321},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":137895,"toc":139296},[137896,137899,137903,137911,137915,137920,137928,137940,137944,137949,137957,137968,137972,137977,138018,138026,138030,138033,138036,138039,138133,138136,138230,138233,138327,138330,138333,138368,138371,138374,138404,138407,138410,138413,138416,138419,138422,138425,138495,138498,138502,138506,138547,138551,138557,138560,138563,138567,138570,138573,138576,138657,138660,138663,138667,138671,138674,138677,138680,138683,138686,138692,138701,138705,138724,138728,138738,138741,138744,138747,138750,138753,138756,138759,138762,138771,138775,138784,138787,138792,138845,138850,139016,139019,139022,139027,139030,139033,139036,139039,139044,139192,139195,139198,139203,139206,139211,139245,139248,139251,139255,139258,139265,139268,139271,139274,139277,139280,139283,139286,139290,139293],[10,137897,137893],{"id":137898},"_12-显示隐藏与图形资源",[14,137900,137902],{"id":137901},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1093,137904,137905,137908],{},[30,137906,137907],{},"目的:让一个元素在页面中消失或者显示出来",[30,137909,137910],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[44,137912,137914],{"id":137913},"_1211-display-显示","12.1.1 display 显示",[27,137916,137917],{},[30,137918,137919],{},"display 设置或检索对象是否及如何显示",[1093,137921,137922,137925],{},[30,137923,137924],{},"display: none;隐藏对象",[30,137926,137927],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[27,137929,137930,137937],{"start":94},[30,137931,137932,137933,137936],{},"特点： display 隐藏元素后， ",[235,137934,137935],{},"不再占"," 有原来的位置",[30,137938,137939],{},"在js中使用非常的广泛",[44,137941,137943],{"id":137942},"_1212-visibility可见性","12.1.2 visibility可见性",[27,137945,137946],{},[30,137947,137948],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1093,137950,137951,137954],{},[30,137952,137953],{},"visibility： visible；元素可见",[30,137955,137956],{},"visibility：hidden；元素隐藏",[27,137958,137959,137962,137965],{"start":94},[30,137960,137961],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[30,137963,137964],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[30,137966,137967],{},"隐藏后继续占有原有位置",[44,137969,137971],{"id":137970},"_1213-overflow溢出","12.1.3 overflow溢出",[1093,137973,137974],{},[30,137975,137976],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[223,137978,137979,137987],{},[226,137980,137981],{},[229,137982,137983,137985],{},[232,137984,131297],{"align":28016},[232,137986,31770],{"align":28016},[270,137988,137989,137997,138004,138011],{},[229,137990,137991,137994],{},[275,137992,137993],{"align":28016},"visible",[275,137995,137996],{"align":28016},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[229,137998,137999,138001],{},[275,138000,65995],{"align":28016},[275,138002,138003],{"align":28016},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[229,138005,138006,138008],{},[275,138007,133253],{"align":28016},[275,138009,138010],{"align":28016},"不管超出内容否，总是显示滚动条",[229,138012,138013,138015],{},[275,138014,76944],{"align":28016},[275,138016,138017],{"align":28016},"超出自动显示滚动条，不超出不显示滚动条",[1093,138019,138020,138023],{},[30,138021,138022],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[30,138024,138025],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[44,138027,138029],{"id":138028},"_1214-案例收获","12.1.4 案例收获",[1424,138031],{"style":130689,"src":138032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,138034,138035],{},"问题：没做出来动态效果，使用hover没实现",[19,138037,138038],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[64,138040,138041],{"className":130833,"code":136265,"language":130835,"meta":69,"style":69},[71,138042,138043,138047,138061,138065,138079,138083,138097,138101,138115,138119],{"__ignoreMap":69},[74,138044,138045],{"class":76,"line":77},[74,138046,136272],{"class":144},[74,138048,138049,138051,138053,138055,138057,138059],{"class":76,"line":94},[74,138050,136277],{"class":1925},[74,138052,84088],{"class":84},[74,138054,133193],{"class":134},[74,138056,55718],{"class":84},[74,138058,136286],{"class":134},[74,138060,133763],{"class":84},[74,138062,138063],{"class":76,"line":1141},[74,138064,136293],{"class":144},[74,138066,138067,138069,138071,138073,138075,138077],{"class":76,"line":1156},[74,138068,136298],{"class":1925},[74,138070,84088],{"class":84},[74,138072,133193],{"class":134},[74,138074,55718],{"class":84},[74,138076,59045],{"class":134},[74,138078,133763],{"class":84},[74,138080,138081],{"class":76,"line":1162},[74,138082,136313],{"class":144},[74,138084,138085,138087,138089,138091,138093,138095],{"class":76,"line":1176},[74,138086,136318],{"class":1925},[74,138088,84088],{"class":84},[74,138090,133193],{"class":134},[74,138092,55718],{"class":84},[74,138094,59112],{"class":134},[74,138096,133763],{"class":84},[74,138098,138099],{"class":76,"line":1182},[74,138100,136333],{"class":144},[74,138102,138103,138105,138107,138109,138111,138113],{"class":76,"line":1273},[74,138104,136338],{"class":1925},[74,138106,84088],{"class":84},[74,138108,133193],{"class":134},[74,138110,55718],{"class":84},[74,138112,90514],{"class":134},[74,138114,133763],{"class":84},[74,138116,138117],{"class":76,"line":1279},[74,138118,136353],{"class":144},[74,138120,138121,138123,138125,138127,138129,138131],{"class":76,"line":1291},[74,138122,136358],{"class":1925},[74,138124,84088],{"class":84},[74,138126,133193],{"class":134},[74,138128,55718],{"class":84},[74,138130,136367],{"class":134},[74,138132,133763],{"class":84},[19,138134,138135],{},"完整代码：",[64,138137,138138],{"className":130833,"code":136265,"language":130835,"meta":69,"style":69},[71,138139,138140,138144,138158,138162,138176,138180,138194,138198,138212,138216],{"__ignoreMap":69},[74,138141,138142],{"class":76,"line":77},[74,138143,136272],{"class":144},[74,138145,138146,138148,138150,138152,138154,138156],{"class":76,"line":94},[74,138147,136277],{"class":1925},[74,138149,84088],{"class":84},[74,138151,133193],{"class":134},[74,138153,55718],{"class":84},[74,138155,136286],{"class":134},[74,138157,133763],{"class":84},[74,138159,138160],{"class":76,"line":1141},[74,138161,136293],{"class":144},[74,138163,138164,138166,138168,138170,138172,138174],{"class":76,"line":1156},[74,138165,136298],{"class":1925},[74,138167,84088],{"class":84},[74,138169,133193],{"class":134},[74,138171,55718],{"class":84},[74,138173,59045],{"class":134},[74,138175,133763],{"class":84},[74,138177,138178],{"class":76,"line":1162},[74,138179,136313],{"class":144},[74,138181,138182,138184,138186,138188,138190,138192],{"class":76,"line":1176},[74,138183,136318],{"class":1925},[74,138185,84088],{"class":84},[74,138187,133193],{"class":134},[74,138189,55718],{"class":84},[74,138191,59112],{"class":134},[74,138193,133763],{"class":84},[74,138195,138196],{"class":76,"line":1182},[74,138197,136333],{"class":144},[74,138199,138200,138202,138204,138206,138208,138210],{"class":76,"line":1273},[74,138201,136338],{"class":1925},[74,138203,84088],{"class":84},[74,138205,133193],{"class":134},[74,138207,55718],{"class":84},[74,138209,90514],{"class":134},[74,138211,133763],{"class":84},[74,138213,138214],{"class":76,"line":1279},[74,138215,136353],{"class":144},[74,138217,138218,138220,138222,138224,138226,138228],{"class":76,"line":1291},[74,138219,136358],{"class":1925},[74,138221,84088],{"class":84},[74,138223,133193],{"class":134},[74,138225,55718],{"class":84},[74,138227,136367],{"class":134},[74,138229,133763],{"class":84},[19,138231,138232],{},"分布思路重点详解：",[64,138234,138235],{"className":130833,"code":136265,"language":130835,"meta":69,"style":69},[71,138236,138237,138241,138255,138259,138273,138277,138291,138295,138309,138313],{"__ignoreMap":69},[74,138238,138239],{"class":76,"line":77},[74,138240,136272],{"class":144},[74,138242,138243,138245,138247,138249,138251,138253],{"class":76,"line":94},[74,138244,136277],{"class":1925},[74,138246,84088],{"class":84},[74,138248,133193],{"class":134},[74,138250,55718],{"class":84},[74,138252,136286],{"class":134},[74,138254,133763],{"class":84},[74,138256,138257],{"class":76,"line":1141},[74,138258,136293],{"class":144},[74,138260,138261,138263,138265,138267,138269,138271],{"class":76,"line":1156},[74,138262,136298],{"class":1925},[74,138264,84088],{"class":84},[74,138266,133193],{"class":134},[74,138268,55718],{"class":84},[74,138270,59045],{"class":134},[74,138272,133763],{"class":84},[74,138274,138275],{"class":76,"line":1162},[74,138276,136313],{"class":144},[74,138278,138279,138281,138283,138285,138287,138289],{"class":76,"line":1176},[74,138280,136318],{"class":1925},[74,138282,84088],{"class":84},[74,138284,133193],{"class":134},[74,138286,55718],{"class":84},[74,138288,59112],{"class":134},[74,138290,133763],{"class":84},[74,138292,138293],{"class":76,"line":1182},[74,138294,136333],{"class":144},[74,138296,138297,138299,138301,138303,138305,138307],{"class":76,"line":1273},[74,138298,136338],{"class":1925},[74,138300,84088],{"class":84},[74,138302,133193],{"class":134},[74,138304,55718],{"class":84},[74,138306,90514],{"class":134},[74,138308,133763],{"class":84},[74,138310,138311],{"class":76,"line":1279},[74,138312,136353],{"class":144},[74,138314,138315,138317,138319,138321,138323,138325],{"class":76,"line":1291},[74,138316,136358],{"class":1925},[74,138318,84088],{"class":84},[74,138320,133193],{"class":134},[74,138322,55718],{"class":84},[74,138324,136367],{"class":134},[74,138326,133763],{"class":84},[1424,138328],{"style":130689,"src":138329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,138331,138332],{},"图片太大，盒子太小，此时需要修改图片的大小",[64,138334,138336],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[71,138337,138338],{"__ignoreMap":69},[74,138339,138340,138342,138344,138346,138348,138351,138353,138355,138358,138361,138363,138366],{"class":76,"line":77},[74,138341,996],{"class":84},[74,138343,1424],{"class":55581},[74,138345,59520],{"class":1925},[74,138347,131],{"class":84},[74,138349,138350],{"class":190},"\"images\u002Fpic.jpg\"",[74,138352,59528],{"class":1925},[74,138354,131],{"class":84},[74,138356,138357],{"class":190},"\"描述文字\"",[74,138359,138360],{"class":1925}," title",[74,138362,131],{"class":84},[74,138364,138365],{"class":190},"\"悬停提示\"",[74,138367,55588],{"class":84},[1424,138369],{"style":130689,"src":138370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,138372,138373],{},"制造遮罩层",[64,138375,138376],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},[71,138377,138378],{"__ignoreMap":69},[74,138379,138380,138382,138384,138386,138388,138390,138392,138394,138396,138398,138400,138402],{"class":76,"line":77},[74,138381,996],{"class":84},[74,138383,1424],{"class":55581},[74,138385,59520],{"class":1925},[74,138387,131],{"class":84},[74,138389,138350],{"class":190},[74,138391,59528],{"class":1925},[74,138393,131],{"class":84},[74,138395,138357],{"class":190},[74,138397,138360],{"class":1925},[74,138399,131],{"class":84},[74,138401,138365],{"class":190},[74,138403,55588],{"class":84},[19,138405,138406],{},"此时是这样的为标准流",[1424,138408],{"style":130689,"src":138409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,138411,138412],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,138414,138415],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,138417,138418],{},"让他在中间，用center(background-position)",[19,138420,138421],{},"将需要变的尽可能放到一个盒子中",[19,138423,138424],{},"放大盒子上内部盒子发生变化",[64,138426,138428],{"className":130833,"code":138427,"language":130835,"meta":69,"style":69},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[71,138429,138430,138436,138446,138450,138457,138467,138479,138491],{"__ignoreMap":69},[74,138431,138432,138434],{"class":76,"line":77},[74,138433,131900],{"class":1925},[74,138435,19851],{"class":84},[74,138437,138438,138440,138442,138444],{"class":76,"line":94},[74,138439,136639],{"class":134},[74,138441,55718],{"class":84},[74,138443,59045],{"class":134},[74,138445,1252],{"class":84},[74,138447,138448],{"class":76,"line":1141},[74,138449,1527],{"class":84},[74,138451,138452,138455],{"class":76,"line":1156},[74,138453,138454],{"class":1925},".child",[74,138456,19851],{"class":84},[74,138458,138459,138461,138463,138465],{"class":76,"line":1162},[74,138460,136639],{"class":134},[74,138462,55718],{"class":84},[74,138464,59112],{"class":134},[74,138466,1252],{"class":84},[74,138468,138469,138471,138473,138475,138477],{"class":76,"line":1176},[74,138470,136653],{"class":134},[74,138472,55718],{"class":84},[74,138474,742],{"class":134},[74,138476,414],{"class":80},[74,138478,1252],{"class":84},[74,138480,138481,138483,138485,138487,138489],{"class":76,"line":1182},[74,138482,136670],{"class":134},[74,138484,55718],{"class":84},[74,138486,742],{"class":134},[74,138488,414],{"class":80},[74,138490,1252],{"class":84},[74,138492,138493],{"class":76,"line":1273},[74,138494,1527],{"class":84},[19,138496,138497],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,138499,138501],{"id":138500},"_122-精灵图","12.2 精灵图",[44,138503,138505],{"id":138504},"_1221-理解","12.2.1 理解",[27,138507,138508,138526],{},[30,138509,138510,138511,136739,138514,138517,138518,138521,138522,138525],{},"目的： ",[235,138512,138513],{},"为了有效地减少服务器接收和发送请求的次数",[235,138515,138516],{},"提高"," 页面的 ",[235,138519,138520],{},"加载速度"," ，出现了 ",[235,138523,138524],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[30,138527,138528,138529,138531,138532,138534,138535,138537,138538,138540,138541,138543,138544,138546],{},"使用精灵图核心：",[57997,138530],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[57997,138533],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[57997,138536],{},"  ③移动背景图片位置， 此时可以使用 background-position",[57997,138539],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[57997,138542],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[57997,138545],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[44,138548,138550],{"id":138549},"_1222-扒图","12.2.2 扒图",[64,138552,138555],{"className":138553,"code":138554,"language":9466},[9464],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[71,138556,138554],{"__ignoreMap":69},[1424,138558],{"style":130689,"src":138559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1424,138561],{"style":130689,"src":138562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[44,138564,138566],{"id":138565},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1424,138568],{"style":130689,"src":138569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,138571,138572],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1424,138574],{"style":130689,"src":138575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[64,138577,138579],{"className":130833,"code":138578,"language":130835,"meta":69,"style":69},"\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",[71,138580,138581,138586,138593,138605,138617,138636,138653],{"__ignoreMap":69},[74,138582,138583],{"class":76,"line":77},[74,138584,138585],{"class":144},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[74,138587,138588,138591],{"class":76,"line":94},[74,138589,138590],{"class":1925},".icon",[74,138592,19851],{"class":84},[74,138594,138595,138597,138599,138601,138603],{"class":76,"line":1141},[74,138596,74849],{"class":134},[74,138598,55718],{"class":84},[74,138600,786],{"class":134},[74,138602,55773],{"class":80},[74,138604,1252],{"class":84},[74,138606,138607,138609,138611,138613,138615],{"class":76,"line":1156},[74,138608,75069],{"class":134},[74,138610,55718],{"class":84},[74,138612,786],{"class":134},[74,138614,55773],{"class":80},[74,138616,1252],{"class":84},[74,138618,138619,138621,138623,138625,138627,138630,138632,138634],{"class":76,"line":1162},[74,138620,74892],{"class":134},[74,138622,55718],{"class":84},[74,138624,66007],{"class":134},[74,138626,85],{"class":84},[74,138628,138629],{"class":9495},"sprites.png",[74,138631,17993],{"class":84},[74,138633,66017],{"class":134},[74,138635,1252],{"class":84},[74,138637,138638,138640,138642,138644,138646,138649,138651],{"class":76,"line":1176},[74,138639,133093],{"class":134},[74,138641,55718],{"class":84},[74,138643,56044],{"class":134},[74,138645,55773],{"class":80},[74,138647,138648],{"class":134}," -20",[74,138650,55773],{"class":80},[74,138652,1252],{"class":84},[74,138654,138655],{"class":76,"line":1182},[74,138656,1527],{"class":84},[1424,138658],{"style":130689,"src":138659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,138661,138662],{},"在前端中坐标轴的正方向是右和下",[14,138664,138666],{"id":138665},"_123-字体图标","12.3 字体图标",[44,138668,138670],{"id":138669},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,138672,138673],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,138675,138676],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,138678,138679],{},"1.图片文件还是比较大的。",[19,138681,138682],{},"2.图片本身放大和缩小会失真。",[19,138684,138685],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,138687,138688,138689,30021],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[235,138690,138691],{},"字体图标 iconfont",[19,138693,138694,138697,138698,32666],{},[235,138695,138696],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[235,138699,138700],{},"展示的是图标，本质属于字体",[44,138702,138704],{"id":138703},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1093,138706,138707,138712,138715,138718,138721],{},[30,138708,138709,138711],{},[235,138710,30157],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[30,138713,138714],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[30,138716,138717],{},"兼容性：几乎支持所有的浏览器，请放心使用",[30,138719,138720],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[30,138722,138723],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[44,138725,138727],{"id":138726},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1093,138729,138730],{},[30,138731,138732,138733],{},"icomoon字体库：",[324,138734,138737],{"href":138735,"rel":138736},"http:\u002F\u002Ficomoon.io\u002F",[28145],"http:\u002F\u002Ficomoon.io",[19,138739,138740],{},"进去之后点icomoon app",[1424,138742],{"style":130689,"src":138743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,138745,138746],{},"可以对其编辑：",[1424,138748],{"style":130689,"src":138749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,138751,138752],{},"生成字体：",[1424,138754],{"style":130689,"src":138755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,138757,138758],{},"下载：",[1424,138760],{"style":130689,"src":138761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1093,138763,138764],{},[30,138765,138766,138767],{},"阿里iconfont字体库： ",[324,138768,138769],{"href":138769,"rel":138770},"http:\u002F\u002Fwww.iconfont.cn\u002F",[28145],[44,138772,138774],{"id":138773},"_1234-字体图标的引入","12.3.4 字体图标的引入",[27,138776,138777],{},[30,138778,138779,138780,138783],{},"把下载包里面的 ",[235,138781,138782],{},"fonts"," 文件夹放入页面根目录下",[1424,138785],{"style":130689,"src":138786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[27,138788,138789],{"start":94},[30,138790,138791],{},"字体文件格式",[223,138793,138794,138803],{},[226,138795,138796],{},[229,138797,138798,138801],{},[232,138799,138800],{"align":28016},"格式",[232,138802,28020],{"align":28016},[270,138804,138805,138815,138825,138835],{},[229,138806,138807,138812],{},[275,138808,138809],{"align":28016},[235,138810,138811],{},".ttf",[275,138813,138814],{"align":28016},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[229,138816,138817,138822],{},[275,138818,138819],{"align":28016},[235,138820,138821],{},".woff",[275,138823,138824],{"align":28016},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[229,138826,138827,138832],{},[275,138828,138829],{"align":28016},[235,138830,138831],{},".eot",[275,138833,138834],{"align":28016},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[229,138836,138837,138842],{},[275,138838,138839],{"align":28016},[235,138840,138841],{},"svg",[275,138843,138844],{"align":28016},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[27,138846,138847],{"start":1141},[30,138848,138849],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[64,138851,138853],{"className":130833,"code":138852,"language":130835,"meta":69,"style":69},"\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",[71,138854,138855,138860,138867,138879,138895,138920,138941,138961,138981,138985,138991,139001,139012],{"__ignoreMap":69},[74,138856,138857],{"class":76,"line":77},[74,138858,138859],{"class":144},"\u002F* 引入字体图标 *\u002F\n",[74,138861,138862,138865],{"class":76,"line":94},[74,138863,138864],{"class":80},"@font-face",[74,138866,19851],{"class":84},[74,138868,138869,138872,138874,138877],{"class":76,"line":1141},[74,138870,138871],{"class":134},"  font-family",[74,138873,55718],{"class":84},[74,138875,138876],{"class":190},"'icomoon'",[74,138878,1252],{"class":84},[74,138880,138881,138884,138886,138888,138890,138893],{"class":76,"line":1156},[74,138882,138883],{"class":134},"  src",[74,138885,55718],{"class":84},[74,138887,66007],{"class":134},[74,138889,85],{"class":84},[74,138891,138892],{"class":190},"'fonts\u002Ficomoon.eot'",[74,138894,2682],{"class":84},[74,138896,138897,138899,138901,138903,138905,138908,138910,138913,138915,138918],{"class":76,"line":1162},[74,138898,138883],{"class":134},[74,138900,55718],{"class":84},[74,138902,66007],{"class":134},[74,138904,85],{"class":84},[74,138906,138907],{"class":190},"'fonts\u002Ficomoon.eot?#iefix'",[74,138909,17993],{"class":84},[74,138911,138912],{"class":134},"format",[74,138914,85],{"class":84},[74,138916,138917],{"class":190},"'embedded-opentype'",[74,138919,42328],{"class":84},[74,138921,138922,138925,138927,138930,138932,138934,138936,138939],{"class":76,"line":1176},[74,138923,138924],{"class":134},"       url",[74,138926,85],{"class":84},[74,138928,138929],{"class":190},"'fonts\u002Ficomoon.woff'",[74,138931,17993],{"class":84},[74,138933,138912],{"class":134},[74,138935,85],{"class":84},[74,138937,138938],{"class":190},"'woff'",[74,138940,42328],{"class":84},[74,138942,138943,138945,138947,138950,138952,138954,138956,138959],{"class":76,"line":1182},[74,138944,138924],{"class":134},[74,138946,85],{"class":84},[74,138948,138949],{"class":190},"'fonts\u002Ficomoon.ttf'",[74,138951,17993],{"class":84},[74,138953,138912],{"class":134},[74,138955,85],{"class":84},[74,138957,138958],{"class":190},"'truetype'",[74,138960,42328],{"class":84},[74,138962,138963,138965,138967,138970,138972,138974,138976,138979],{"class":76,"line":1273},[74,138964,138924],{"class":134},[74,138966,85],{"class":84},[74,138968,138969],{"class":190},"'fonts\u002Ficomoon.svg#icomoon'",[74,138971,17993],{"class":84},[74,138973,138912],{"class":134},[74,138975,85],{"class":84},[74,138977,138978],{"class":190},"'svg'",[74,138980,2682],{"class":84},[74,138982,138983],{"class":76,"line":1279},[74,138984,1527],{"class":84},[74,138986,138987,138989],{"class":76,"line":1291},[74,138988,138590],{"class":1925},[74,138990,19851],{"class":84},[74,138992,138993,138995,138997,138999],{"class":76,"line":1574},[74,138994,138871],{"class":134},[74,138996,55718],{"class":84},[74,138998,138876],{"class":190},[74,139000,1252],{"class":84},[74,139002,139003,139006,139008,139010],{"class":76,"line":1579},[74,139004,139005],{"class":134},"  font-style",[74,139007,55718],{"class":84},[74,139009,68122],{"class":134},[74,139011,1252],{"class":84},[74,139013,139014],{"class":76,"line":1585},[74,139015,1527],{"class":84},[19,139017,139018],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1424,139020],{"style":130689,"src":139021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[27,139023,139024],{"start":1156},[30,139025,139026],{},"添加字体",[1424,139028],{"style":130689,"src":139029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,139031,139032],{},"复制：",[1424,139034],{"style":130689,"src":139035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,139037,139038],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[27,139040,139041],{"start":1162},[30,139042,139043],{},"代码展示：",[64,139045,139046],{"className":130833,"code":138852,"language":130835,"meta":69,"style":69},[71,139047,139048,139052,139058,139068,139082,139104,139122,139140,139158,139162,139168,139178,139188],{"__ignoreMap":69},[74,139049,139050],{"class":76,"line":77},[74,139051,138859],{"class":144},[74,139053,139054,139056],{"class":76,"line":94},[74,139055,138864],{"class":80},[74,139057,19851],{"class":84},[74,139059,139060,139062,139064,139066],{"class":76,"line":1141},[74,139061,138871],{"class":134},[74,139063,55718],{"class":84},[74,139065,138876],{"class":190},[74,139067,1252],{"class":84},[74,139069,139070,139072,139074,139076,139078,139080],{"class":76,"line":1156},[74,139071,138883],{"class":134},[74,139073,55718],{"class":84},[74,139075,66007],{"class":134},[74,139077,85],{"class":84},[74,139079,138892],{"class":190},[74,139081,2682],{"class":84},[74,139083,139084,139086,139088,139090,139092,139094,139096,139098,139100,139102],{"class":76,"line":1162},[74,139085,138883],{"class":134},[74,139087,55718],{"class":84},[74,139089,66007],{"class":134},[74,139091,85],{"class":84},[74,139093,138907],{"class":190},[74,139095,17993],{"class":84},[74,139097,138912],{"class":134},[74,139099,85],{"class":84},[74,139101,138917],{"class":190},[74,139103,42328],{"class":84},[74,139105,139106,139108,139110,139112,139114,139116,139118,139120],{"class":76,"line":1176},[74,139107,138924],{"class":134},[74,139109,85],{"class":84},[74,139111,138929],{"class":190},[74,139113,17993],{"class":84},[74,139115,138912],{"class":134},[74,139117,85],{"class":84},[74,139119,138938],{"class":190},[74,139121,42328],{"class":84},[74,139123,139124,139126,139128,139130,139132,139134,139136,139138],{"class":76,"line":1182},[74,139125,138924],{"class":134},[74,139127,85],{"class":84},[74,139129,138949],{"class":190},[74,139131,17993],{"class":84},[74,139133,138912],{"class":134},[74,139135,85],{"class":84},[74,139137,138958],{"class":190},[74,139139,42328],{"class":84},[74,139141,139142,139144,139146,139148,139150,139152,139154,139156],{"class":76,"line":1273},[74,139143,138924],{"class":134},[74,139145,85],{"class":84},[74,139147,138969],{"class":190},[74,139149,17993],{"class":84},[74,139151,138912],{"class":134},[74,139153,85],{"class":84},[74,139155,138978],{"class":190},[74,139157,2682],{"class":84},[74,139159,139160],{"class":76,"line":1279},[74,139161,1527],{"class":84},[74,139163,139164,139166],{"class":76,"line":1291},[74,139165,138590],{"class":1925},[74,139167,19851],{"class":84},[74,139169,139170,139172,139174,139176],{"class":76,"line":1574},[74,139171,138871],{"class":134},[74,139173,55718],{"class":84},[74,139175,138876],{"class":190},[74,139177,1252],{"class":84},[74,139179,139180,139182,139184,139186],{"class":76,"line":1579},[74,139181,139005],{"class":134},[74,139183,55718],{"class":84},[74,139185,68122],{"class":134},[74,139187,1252],{"class":84},[74,139189,139190],{"class":76,"line":1585},[74,139191,1527],{"class":84},[1424,139193],{"style":130689,"src":139194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,139196,139197],{},"更加细节展示：",[27,139199,139200],{},[30,139201,139202],{},"html 标签内添加小图标",[1424,139204],{"style":130689,"src":139205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[27,139207,139208],{"start":94},[30,139209,139210],{},"给标签定义字体",[64,139212,139213],{"className":131580,"code":134937,"language":131582,"meta":69,"style":69},[71,139214,139215,139219,139233,139237],{"__ignoreMap":69},[74,139216,139217],{"class":76,"line":77},[74,139218,134944],{"class":144},[74,139220,139221,139223,139225,139227,139229,139231],{"class":76,"line":94},[74,139222,996],{"class":84},[74,139224,55892],{"class":55581},[74,139226,57767],{"class":1925},[74,139228,131],{"class":84},[74,139230,134957],{"class":190},[74,139232,55588],{"class":84},[74,139234,139235],{"class":76,"line":1141},[74,139236,134964],{"class":84},[74,139238,139239,139241,139243],{"class":76,"line":1156},[74,139240,56066],{"class":84},[74,139242,55892],{"class":55581},[74,139244,55588],{"class":84},[19,139246,139247],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1424,139249],{"style":130689,"src":139250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[44,139252,139254],{"id":139253},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,139256,139257],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,139259,139260,139261,139264],{},"把压缩包里面的 ",[235,139262,139263],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,139266,139267],{},"打开网站，点下方：",[1424,139269],{"style":130689,"src":139270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1424,139272],{"style":130689,"src":139273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1424,139275],{"style":130689,"src":139276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,139278,139279],{},"点yes重新加载",[19,139281,139282],{},"然后重复之前的操作就可以实现了",[19,139284,139285],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[44,139287,139289],{"id":139288},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1424,139291],{"style":130689,"src":139292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5090,139294,139295],{},"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":69,"searchDepth":94,"depth":94,"links":139297},[139298,139304,139309],{"id":137901,"depth":94,"text":137902,"children":139299},[139300,139301,139302,139303],{"id":137913,"depth":1141,"text":137914},{"id":137942,"depth":1141,"text":137943},{"id":137970,"depth":1141,"text":137971},{"id":138028,"depth":1141,"text":138029},{"id":138500,"depth":94,"text":138501,"children":139305},[139306,139307,139308],{"id":138504,"depth":1141,"text":138505},{"id":138549,"depth":1141,"text":138550},{"id":138565,"depth":1141,"text":138566},{"id":138665,"depth":94,"text":138666,"children":139310},[139311,139312,139313,139314,139315,139316],{"id":138669,"depth":1141,"text":138670},{"id":138703,"depth":1141,"text":138704},{"id":138726,"depth":1141,"text":138727},{"id":138773,"depth":1141,"text":138774},{"id":139253,"depth":1141,"text":139254},{"id":139288,"depth":1141,"text":139289},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":137893,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":139323,"title":139324,"body":139325,"description":27656,"extension":5121,"meta":140552,"navigation":2362,"path":140553,"seo":140554,"stem":140555,"__hash__":140556},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":139326,"toc":140533},[139327,139330,139334,139337,139351,139419,139449,139452,139456,139460,139562,139609,139613,139616,139619,139653,139656,139659,139662,139665,139668,139671,139674,139676,139679,139682,139685,139688,139691,139694,139697,139725,139728,139732,139735,139742,139745,139748,139774,139777,139781,139784,139787,139794,139798,139801,139803,139835,139838,139841,139853,139859,139862,139865,139868,139870,139874,139877,139880,139883,139928,139932,139934,139937,139944,139986,139989,139993,139998,140012,140016,140019,140022,140025,140028,140031,140065,140068,140071,140125,140128,140131,140134,140137,140189,140192,140195,140244,140248,140250,140253,140256,140259,140262,140265,140323,140326,140332,140335,140338,140370,140373,140377,140381,140384,140416,140420,140423,140467,140471,140474,140477,140480,140483,140486,140489,140492,140494,140497,140499,140502,140505,140508,140511,140516,140519,140521,140524,140527,140530],[10,139328,139324],{"id":139329},"_13-界面样式与布局技巧",[14,139331,139333],{"id":139332},"_131-css三角","13.1 css三角",[19,139335,139336],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1093,139338,139339,139342,139345,139348],{},[30,139340,139341],{},"用css 边框可以模拟三角效果",[30,139343,139344],{},"宽度高度为0",[30,139346,139347],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[30,139349,139350],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[64,139352,139354],{"className":130833,"code":139353,"language":130835,"meta":69,"style":69},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[71,139355,139356,139361,139368,139378,139388,139404,139415],{"__ignoreMap":69},[74,139357,139358],{"class":76,"line":77},[74,139359,139360],{"class":144},"\u002F* CSS 实现三角形 *\u002F\n",[74,139362,139363,139366],{"class":76,"line":94},[74,139364,139365],{"class":1925},".triangle",[74,139367,19851],{"class":84},[74,139369,139370,139372,139374,139376],{"class":76,"line":1141},[74,139371,74849],{"class":134},[74,139373,55718],{"class":84},[74,139375,277],{"class":134},[74,139377,1252],{"class":84},[74,139379,139380,139382,139384,139386],{"class":76,"line":1156},[74,139381,75069],{"class":134},[74,139383,55718],{"class":84},[74,139385,277],{"class":134},[74,139387,1252],{"class":84},[74,139389,139390,139392,139394,139396,139398,139400,139402],{"class":76,"line":1162},[74,139391,75177],{"class":134},[74,139393,55718],{"class":84},[74,139395,532],{"class":134},[74,139397,55773],{"class":80},[74,139399,55802],{"class":134},[74,139401,68272],{"class":134},[74,139403,1252],{"class":84},[74,139405,139406,139409,139411,139413],{"class":76,"line":1176},[74,139407,139408],{"class":134},"  border-bottom-color",[74,139410,55718],{"class":84},[74,139412,66650],{"class":134},[74,139414,1252],{"class":84},[74,139416,139417],{"class":76,"line":1182},[74,139418,1527],{"class":84},[64,139420,139421],{"className":130833,"code":134990,"language":130835,"meta":69,"style":69},[71,139422,139423,139429,139445],{"__ignoreMap":69},[74,139424,139425,139427],{"class":76,"line":77},[74,139426,55892],{"class":55581},[74,139428,19851],{"class":84},[74,139430,139431,139433,139435,139437,139439,139441,139443],{"class":76,"line":94},[74,139432,75177],{"class":134},[74,139434,55718],{"class":84},[74,139436,303],{"class":134},[74,139438,55773],{"class":80},[74,139440,55802],{"class":134},[74,139442,134225],{"class":134},[74,139444,1252],{"class":84},[74,139446,139447],{"class":76,"line":1141},[74,139448,1527],{"class":84},[1424,139450],{"style":130689,"src":139451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,139453,139455],{"id":139454},"_132-css用户界面样式","13.2 css用户界面样式",[44,139457,139459],{"id":139458},"_1321-鼠标样式","13.2.1 鼠标样式",[64,139461,139463],{"className":130833,"code":139462,"language":130835,"meta":69,"style":69},"\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",[71,139464,139465,139470,139489,139507,139526,139543],{"__ignoreMap":69},[74,139466,139467],{"class":76,"line":77},[74,139468,139469],{"class":144},"\u002F* 鼠标样式 *\u002F\n",[74,139471,139472,139474,139476,139479,139481,139483,139486],{"class":76,"line":94},[74,139473,55892],{"class":55581},[74,139475,84088],{"class":84},[74,139477,139478],{"class":134},"cursor",[74,139480,55718],{"class":84},[74,139482,66311],{"class":134},[74,139484,139485],{"class":84},"; }   ",[74,139487,139488],{"class":144},"\u002F* 手型 *\u002F\n",[74,139490,139491,139493,139495,139497,139499,139502,139504],{"class":76,"line":1141},[74,139492,55892],{"class":55581},[74,139494,84088],{"class":84},[74,139496,139478],{"class":134},[74,139498,55718],{"class":84},[74,139500,139501],{"class":134},"default",[74,139503,139485],{"class":84},[74,139505,139506],{"class":144},"\u002F* 默认 *\u002F\n",[74,139508,139509,139511,139513,139515,139517,139520,139523],{"class":76,"line":1156},[74,139510,55892],{"class":55581},[74,139512,84088],{"class":84},[74,139514,139478],{"class":134},[74,139516,55718],{"class":84},[74,139518,139519],{"class":134},"move",[74,139521,139522],{"class":84},"; }      ",[74,139524,139525],{"class":144},"\u002F* 移动 *\u002F\n",[74,139527,139528,139530,139532,139534,139536,139538,139540],{"class":76,"line":1162},[74,139529,55892],{"class":55581},[74,139531,84088],{"class":84},[74,139533,139478],{"class":134},[74,139535,55718],{"class":84},[74,139537,9466],{"class":134},[74,139539,139522],{"class":84},[74,139541,139542],{"class":144},"\u002F* 文本 *\u002F\n",[74,139544,139545,139547,139549,139551,139553,139556,139559],{"class":76,"line":1176},[74,139546,55892],{"class":55581},[74,139548,84088],{"class":84},[74,139550,139478],{"class":134},[74,139552,55718],{"class":84},[74,139554,139555],{"class":134},"not-allowed",[74,139557,139558],{"class":84},"; } ",[74,139560,139561],{"class":144},"\u002F* 禁止 *\u002F\n",[223,139563,139564,139572],{},[226,139565,139566],{},[229,139567,139568,139570],{},[232,139569,131297],{"align":28016},[232,139571,31770],{"align":28016},[270,139573,139574,139581,139588,139595,139602],{},[229,139575,139576,139578],{},[275,139577,139501],{"align":28016},[275,139579,139580],{"align":28016},"小白 默认",[229,139582,139583,139585],{},[275,139584,66311],{"align":28016},[275,139586,139587],{"align":28016},"小手",[229,139589,139590,139592],{},[275,139591,139519],{"align":28016},[275,139593,139594],{"align":28016},"移动",[229,139596,139597,139599],{},[275,139598,9466],{"align":28016},[275,139600,139601],{"align":28016},"文本",[229,139603,139604,139606],{},[275,139605,139555],{"align":28016},[275,139607,139608],{"align":28016},"禁止",[44,139610,139612],{"id":139611},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,139614,139615],{},"去除表单轮廓线",[19,139617,139618],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[64,139620,139621],{"className":130833,"code":134197,"language":130835,"meta":69,"style":69},[71,139622,139623,139627,139633,139649],{"__ignoreMap":69},[74,139624,139625],{"class":76,"line":77},[74,139626,134204],{"class":144},[74,139628,139629,139631],{"class":76,"line":94},[74,139630,55892],{"class":55581},[74,139632,19851],{"class":84},[74,139634,139635,139637,139639,139641,139643,139645,139647],{"class":76,"line":1141},[74,139636,75177],{"class":134},[74,139638,55718],{"class":84},[74,139640,303],{"class":134},[74,139642,55773],{"class":80},[74,139644,55802],{"class":134},[74,139646,134225],{"class":134},[74,139648,1252],{"class":84},[74,139650,139651],{"class":76,"line":1156},[74,139652,1527],{"class":84},[19,139654,139655],{},"文本域：",[1424,139657],{"style":130689,"src":139658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,139660,139661],{},"此时会有一个空白区域",[1424,139663],{"style":130689,"src":139664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,139666,139667],{},"写在同一行就不会出现这个问题",[1424,139669],{"style":130689,"src":139670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,139672,139673],{},"文本域是行内块元素，一定记住！！！",[19,139675,102514],{},[1424,139677],{"style":130689,"src":139678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,139680,139681],{},"文本域尽量放在一行",[19,139683,139684],{},"知识回顾：cols是列，rols是行",[1424,139686],{"style":130689,"src":139687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,139689,139690],{},"它可以进行拖动，显然这是我们不愿意看到的",[1424,139692],{"style":130689,"src":139693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,139695,139696],{},"使用resize进行解决",[64,139698,139700],{"className":130833,"code":139699,"language":130835,"meta":69,"style":69},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[71,139701,139702,139708,139721],{"__ignoreMap":69},[74,139703,139704,139706],{"class":76,"line":77},[74,139705,58102],{"class":55581},[74,139707,19851],{"class":84},[74,139709,139710,139712,139714,139716,139718],{"class":76,"line":94},[74,139711,75079],{"class":134},[74,139713,55718],{"class":84},[74,139715,59018],{"class":134},[74,139717,134696],{"class":84},[74,139719,139720],{"class":144},"\u002F* 取消表单轮廓线 *\u002F\n",[74,139722,139723],{"class":76,"line":1141},[74,139724,1527],{"class":84},[19,139726,139727],{},"此时就无法通过右下方实现拖动了",[44,139729,139731],{"id":139730},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,139733,139734],{},"实现一个盒子中的文字和图片对齐",[19,139736,139737,139738,139741],{},"用于设置一个元素的 ",[235,139739,139740],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,139743,139744],{},"图片和文字默认是基线对齐",[1424,139746],{"style":130689,"src":139747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[64,139749,139750],{"className":130833,"code":139699,"language":130835,"meta":69,"style":69},[71,139751,139752,139758,139770],{"__ignoreMap":69},[74,139753,139754,139756],{"class":76,"line":77},[74,139755,58102],{"class":55581},[74,139757,19851],{"class":84},[74,139759,139760,139762,139764,139766,139768],{"class":76,"line":94},[74,139761,75079],{"class":134},[74,139763,55718],{"class":84},[74,139765,59018],{"class":134},[74,139767,134696],{"class":84},[74,139769,139720],{"class":144},[74,139771,139772],{"class":76,"line":1141},[74,139773,1527],{"class":84},[1424,139775],{"style":130689,"src":139776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[26277,139778,139780],{"id":139779},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,139782,139783],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1424,139785],{"style":130689,"src":139786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,139788,139789,139790,139793],{},"此时可以给图片、表单这些行内块元素的 ",[235,139791,139792],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[26277,139795,139797],{"id":139796},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,139799,139800],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,139802,18912],{},[64,139804,139806],{"className":130833,"code":139805,"language":130835,"meta":69,"style":69},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[71,139807,139808,139813,139819,139831],{"__ignoreMap":69},[74,139809,139810],{"class":76,"line":77},[74,139811,139812],{"class":144},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[74,139814,139815,139817],{"class":76,"line":94},[74,139816,1424],{"class":55581},[74,139818,19851],{"class":84},[74,139820,139821,139824,139826,139829],{"class":76,"line":1141},[74,139822,139823],{"class":134},"  vertical-align",[74,139825,55718],{"class":84},[74,139827,139828],{"class":134},"middle",[74,139830,1252],{"class":84},[74,139832,139833],{"class":76,"line":1156},[74,139834,1527],{"class":84},[1424,139836],{"style":130689,"src":139837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,139839,139840],{},"主要解决方法有两种：",[27,139842,139843],{},[30,139844,139845,139848,139849,139852],{},[235,139846,139847],{},"给图片"," 添加 ",[235,139850,139851],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,139854,139855,139856],{},"2.把图片转换为块级元素 ",[235,139857,139858],{},"display: block",[19,139860,139861],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,139863,139864],{},"img {",[19,139866,139867],{},"vertical-align:middle;",[19,139869,1032],{},[44,139871,139873],{"id":139872},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,139875,139876],{},"效果：",[1424,139878],{"style":130689,"src":139879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,139881,139882],{},"单行文本溢出显示省略号--必须满足三个条件：",[64,139884,139886],{"className":130833,"code":139885,"language":130835,"meta":69,"style":69},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[71,139887,139888,139893,139899,139909,139914,139924],{"__ignoreMap":69},[74,139889,139890],{"class":76,"line":77},[74,139891,139892],{"class":144},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[74,139894,139895,139897],{"class":76,"line":94},[74,139896,1424],{"class":55581},[74,139898,19851],{"class":84},[74,139900,139901,139903,139905,139907],{"class":76,"line":1141},[74,139902,139823],{"class":134},[74,139904,55718],{"class":84},[74,139906,139828],{"class":134},[74,139908,1252],{"class":84},[74,139910,139911],{"class":76,"line":1156},[74,139912,139913],{"class":144},"  \u002F* 或 *\u002F\n",[74,139915,139916,139918,139920,139922],{"class":76,"line":1162},[74,139917,132449],{"class":134},[74,139919,55718],{"class":84},[74,139921,65150],{"class":134},[74,139923,1252],{"class":84},[74,139925,139926],{"class":76,"line":1176},[74,139927,1527],{"class":84},[44,139929,139931],{"id":139930},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,139933,139876],{},[1424,139935],{"style":130689,"src":139936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,139938,139939,139940,139943],{},"多行文本溢出显示省略号， ",[235,139941,139942],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[64,139945,139946],{"className":130833,"code":139885,"language":130835,"meta":69,"style":69},[71,139947,139948,139952,139958,139968,139972,139982],{"__ignoreMap":69},[74,139949,139950],{"class":76,"line":77},[74,139951,139892],{"class":144},[74,139953,139954,139956],{"class":76,"line":94},[74,139955,1424],{"class":55581},[74,139957,19851],{"class":84},[74,139959,139960,139962,139964,139966],{"class":76,"line":1141},[74,139961,139823],{"class":134},[74,139963,55718],{"class":84},[74,139965,139828],{"class":134},[74,139967,1252],{"class":84},[74,139969,139970],{"class":76,"line":1156},[74,139971,139913],{"class":144},[74,139973,139974,139976,139978,139980],{"class":76,"line":1162},[74,139975,132449],{"class":134},[74,139977,55718],{"class":84},[74,139979,65150],{"class":134},[74,139981,1252],{"class":84},[74,139983,139984],{"class":76,"line":1176},[74,139985,1527],{"class":84},[19,139987,139988],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,139990,139992],{"id":139991},"_133-常见布局技巧","13.3 常见布局技巧",[19,139994,139995],{},[235,139996,139997],{},"巧妙利用一个技术更快更好的布局：",[27,139999,140000,140003,140006,140009],{},[30,140001,140002],{},"margin负值的运用",[30,140004,140005],{},"文字围绕浮动元素",[30,140007,140008],{},"行内块的巧妙运用",[30,140010,140011],{},"CSS三角强化",[44,140013,140015],{"id":140014},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,140017,140018],{},"应用场景：",[1424,140020],{"style":130689,"src":140021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1424,140023],{"style":130689,"src":140024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,140026,140027],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,140029,140030],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[64,140032,140033],{"className":130833,"code":134197,"language":130835,"meta":69,"style":69},[71,140034,140035,140039,140045,140061],{"__ignoreMap":69},[74,140036,140037],{"class":76,"line":77},[74,140038,134204],{"class":144},[74,140040,140041,140043],{"class":76,"line":94},[74,140042,55892],{"class":55581},[74,140044,19851],{"class":84},[74,140046,140047,140049,140051,140053,140055,140057,140059],{"class":76,"line":1141},[74,140048,75177],{"class":134},[74,140050,55718],{"class":84},[74,140052,303],{"class":134},[74,140054,55773],{"class":80},[74,140056,55802],{"class":134},[74,140058,134225],{"class":134},[74,140060,1252],{"class":84},[74,140062,140063],{"class":76,"line":1156},[74,140064,1527],{"class":84},[1424,140066],{"style":130689,"src":140067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,140069,140070],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[64,140072,140074],{"className":130833,"code":140073,"language":130835,"meta":69,"style":69},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[71,140075,140076,140081,140087,140097,140109,140121],{"__ignoreMap":69},[74,140077,140078],{"class":76,"line":77},[74,140079,140080],{"class":144},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[74,140082,140083,140085],{"class":76,"line":94},[74,140084,134681],{"class":1925},[74,140086,19851],{"class":84},[74,140088,140089,140091,140093,140095],{"class":76,"line":1141},[74,140090,136639],{"class":134},[74,140092,55718],{"class":84},[74,140094,59045],{"class":134},[74,140096,1252],{"class":84},[74,140098,140099,140101,140103,140105,140107],{"class":76,"line":1156},[74,140100,136653],{"class":134},[74,140102,55718],{"class":84},[74,140104,532],{"class":134},[74,140106,55773],{"class":80},[74,140108,1252],{"class":84},[74,140110,140111,140113,140115,140117,140119],{"class":76,"line":1162},[74,140112,136670],{"class":134},[74,140114,55718],{"class":84},[74,140116,786],{"class":134},[74,140118,55773],{"class":80},[74,140120,1252],{"class":84},[74,140122,140123],{"class":76,"line":1176},[74,140124,1527],{"class":84},[19,140126,140127],{},"加上上述代码会发现：",[1424,140129],{"style":130689,"src":140130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,140132,140133],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,140135,140136],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[64,140138,140139],{"className":130833,"code":140073,"language":130835,"meta":69,"style":69},[71,140140,140141,140145,140151,140161,140173,140185],{"__ignoreMap":69},[74,140142,140143],{"class":76,"line":77},[74,140144,140080],{"class":144},[74,140146,140147,140149],{"class":76,"line":94},[74,140148,134681],{"class":1925},[74,140150,19851],{"class":84},[74,140152,140153,140155,140157,140159],{"class":76,"line":1141},[74,140154,136639],{"class":134},[74,140156,55718],{"class":84},[74,140158,59045],{"class":134},[74,140160,1252],{"class":84},[74,140162,140163,140165,140167,140169,140171],{"class":76,"line":1156},[74,140164,136653],{"class":134},[74,140166,55718],{"class":84},[74,140168,532],{"class":134},[74,140170,55773],{"class":80},[74,140172,1252],{"class":84},[74,140174,140175,140177,140179,140181,140183],{"class":76,"line":1162},[74,140176,136670],{"class":134},[74,140178,55718],{"class":84},[74,140180,786],{"class":134},[74,140182,55773],{"class":80},[74,140184,1252],{"class":84},[74,140186,140187],{"class":76,"line":1176},[74,140188,1527],{"class":84},[19,140190,140191],{},"解决方式2：",[19,140193,140194],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[64,140196,140198],{"className":130833,"code":140197,"language":130835,"meta":69,"style":69},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[71,140199,140200,140206,140216,140228,140240],{"__ignoreMap":69},[74,140201,140202,140204],{"class":76,"line":77},[74,140203,55892],{"class":55581},[74,140205,19851],{"class":84},[74,140207,140208,140210,140212,140214],{"class":76,"line":94},[74,140209,136639],{"class":134},[74,140211,55718],{"class":84},[74,140213,59045],{"class":134},[74,140215,1252],{"class":84},[74,140217,140218,140220,140222,140224,140226],{"class":76,"line":1141},[74,140219,136653],{"class":134},[74,140221,55718],{"class":84},[74,140223,532],{"class":134},[74,140225,55773],{"class":80},[74,140227,1252],{"class":84},[74,140229,140230,140232,140234,140236,140238],{"class":76,"line":1156},[74,140231,136670],{"class":134},[74,140233,55718],{"class":84},[74,140235,786],{"class":134},[74,140237,55773],{"class":80},[74,140239,1252],{"class":84},[74,140241,140242],{"class":76,"line":1162},[74,140243,1527],{"class":84},[44,140245,140247],{"id":140246},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,140249,140018],{},[1424,140251],{"style":130689,"src":140252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,140254,140255],{},"实现结构图：",[1424,140257],{"style":130689,"src":140258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,140260,140261],{},"巧妙运用浮动元素不会压住文字的特性",[19,140263,140264],{},"代码显示：",[64,140266,140268],{"className":130833,"code":140267,"language":130835,"meta":69,"style":69},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[71,140269,140270,140276,140286,140290,140295,140299,140305,140319],{"__ignoreMap":69},[74,140271,140272,140274],{"class":76,"line":77},[74,140273,134681],{"class":1925},[74,140275,19851],{"class":84},[74,140277,140278,140280,140282,140284],{"class":76,"line":94},[74,140279,135313],{"class":134},[74,140281,55718],{"class":84},[74,140283,28016],{"class":134},[74,140285,1252],{"class":84},[74,140287,140288],{"class":76,"line":1141},[74,140289,1527],{"class":84},[74,140291,140292],{"class":76,"line":1156},[74,140293,140294],{"class":84},"```Css\n",[74,140296,140297],{"class":76,"line":1162},[74,140298,134676],{"class":144},[74,140300,140301,140303],{"class":76,"line":1176},[74,140302,134681],{"class":1925},[74,140304,19851],{"class":84},[74,140306,140307,140309,140311,140313,140315,140317],{"class":76,"line":1182},[74,140308,74751],{"class":134},[74,140310,55718],{"class":84},[74,140312,277],{"class":134},[74,140314,55837],{"class":134},[74,140316,134696],{"class":84},[74,140318,134699],{"class":144},[74,140320,140321],{"class":76,"line":1273},[74,140322,1527],{"class":84},[19,140324,140325],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[64,140327,140330],{"className":140328,"code":140329,"language":9466},[9464],"\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",[71,140331,140329],{"__ignoreMap":69},[1424,140333],{"style":130689,"src":140334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,140336,140337],{},"最终展示结果：",[64,140339,140340],{"className":130833,"code":134669,"language":130835,"meta":69,"style":69},[71,140341,140342,140346,140352,140366],{"__ignoreMap":69},[74,140343,140344],{"class":76,"line":77},[74,140345,134676],{"class":144},[74,140347,140348,140350],{"class":76,"line":94},[74,140349,134681],{"class":1925},[74,140351,19851],{"class":84},[74,140353,140354,140356,140358,140360,140362,140364],{"class":76,"line":1141},[74,140355,74751],{"class":134},[74,140357,55718],{"class":84},[74,140359,277],{"class":134},[74,140361,55837],{"class":134},[74,140363,134696],{"class":84},[74,140365,134699],{"class":144},[74,140367,140368],{"class":76,"line":1156},[74,140369,1527],{"class":84},[1424,140371],{"style":130689,"src":140372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,140374,140376],{"id":140375},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[44,140378,140380],{"id":140379},"_1341-原理","13.4.1 原理",[1424,140382],{"style":130689,"src":140383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[64,140385,140386],{"className":130833,"code":134669,"language":130835,"meta":69,"style":69},[71,140387,140388,140392,140398,140412],{"__ignoreMap":69},[74,140389,140390],{"class":76,"line":77},[74,140391,134676],{"class":144},[74,140393,140394,140396],{"class":76,"line":94},[74,140395,134681],{"class":1925},[74,140397,19851],{"class":84},[74,140399,140400,140402,140404,140406,140408,140410],{"class":76,"line":1141},[74,140401,74751],{"class":134},[74,140403,55718],{"class":84},[74,140405,277],{"class":134},[74,140407,55837],{"class":134},[74,140409,134696],{"class":84},[74,140411,134699],{"class":144},[74,140413,140414],{"class":76,"line":1156},[74,140415,1527],{"class":84},[44,140417,140419],{"id":140418},"_1342-实例","13.4.2 实例",[1424,140421],{"style":130689,"src":140422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[64,140424,140425],{"className":130833,"code":135299,"language":130835,"meta":69,"style":69},[71,140426,140427,140433,140443,140447,140453,140463],{"__ignoreMap":69},[74,140428,140429,140431],{"class":76,"line":77},[74,140430,135306],{"class":1925},[74,140432,19851],{"class":84},[74,140434,140435,140437,140439,140441],{"class":76,"line":94},[74,140436,135313],{"class":134},[74,140438,55718],{"class":84},[74,140440,28016],{"class":134},[74,140442,1252],{"class":84},[74,140444,140445],{"class":76,"line":1141},[74,140446,1527],{"class":84},[74,140448,140449,140451],{"class":76,"line":1156},[74,140450,135328],{"class":1925},[74,140452,19851],{"class":84},[74,140454,140455,140457,140459,140461],{"class":76,"line":1162},[74,140456,135313],{"class":134},[74,140458,55718],{"class":84},[74,140460,76803],{"class":134},[74,140462,1252],{"class":84},[74,140464,140465],{"class":76,"line":1176},[74,140466,1527],{"class":84},[14,140468,140470],{"id":140469},"_135-css的初始化","13.5 css的初始化",[19,140472,140473],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,140475,140476],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,140478,140479],{},"每个网页都必须首先进行 CSS初始化。",[19,140481,140482],{},"这里我们以 京东CSS初始化代码为例。",[19,140484,140485],{},"在网页右键查看网页源代码",[19,140487,140488],{},"找到css的link引入语句",[19,140490,140491],{},"然后ctrl+f 输入body",[19,140493,81507],{},[1424,140495],{"style":130689,"src":140496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,140498,81530],{},[1424,140500],{"style":130689,"src":140501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,140503,140504],{},"③打开了网页上传压缩的代码",[1424,140506],{"style":130689,"src":140507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,140509,140510],{},"④从body前可以查看这个网页的初始化代码",[19,140512,140513],{},[235,140514,140515],{},"Unicode编码字体：",[19,140517,140518],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,140520,87488],{},[19,140522,140523],{},"黑体 \\9ED1\\4F53",[19,140525,140526],{},"宋体 \\5B8B\\4F53",[19,140528,140529],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5090,140531,140532],{},"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":69,"searchDepth":94,"depth":94,"links":140534},[140535,140536,140543,140547,140551],{"id":139332,"depth":94,"text":139333},{"id":139454,"depth":94,"text":139455,"children":140537},[140538,140539,140540,140541,140542],{"id":139458,"depth":1141,"text":139459},{"id":139611,"depth":1141,"text":139612},{"id":139730,"depth":1141,"text":139731},{"id":139872,"depth":1141,"text":139873},{"id":139930,"depth":1141,"text":139931},{"id":139991,"depth":94,"text":139992,"children":140544},[140545,140546],{"id":140014,"depth":1141,"text":140015},{"id":140246,"depth":1141,"text":140247},{"id":140375,"depth":94,"text":140376,"children":140548},[140549,140550],{"id":140379,"depth":1141,"text":140380},{"id":140418,"depth":1141,"text":140419},{"id":140469,"depth":94,"text":140470},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":139324,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":140558,"title":140559,"body":140560,"description":27656,"extension":5121,"meta":142246,"navigation":2362,"path":142247,"seo":142248,"stem":142249,"__hash__":142250},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":140561,"toc":142235},[140562,140565,140569,140573,140576,140583,140586,140589,140627,140630,140632,140646,140650,140659,140663,140668,140671,140674,140677,140712,140717,140720,140750,140753,140758,140761,140764,140794,140797,140851,140854,140858,140863,140875,140878,140882,140912,140915,140920,140923,140953,140956,140960,140977,140981,140985,140988,141021,141024,141028,141031,141034,141037,141040,141043,141154,141157,141160,141163,141265,141268,141272,141276,141280,141283,141323,141326,141328,141344,141348,141351,141356,141437,141440,141443,141569,141574,141577,141585,141588,141593,141678,141681,141685,141688,141691,141695,141715,141720,141804,141807,141812,141815,141818,141896,141899,141902,141905,141908,141911,141916,141919,141922,141994,141997,142002,142005,142102,142105,142111,142114,142117,142120,142123,142126,142129,142132,142135,142139,142144,142147,142180,142185,142188,142229,142232],[10,140563,140559],{"id":140564},"_14-html5与css3新特性",[14,140566,140568],{"id":140567},"_141-html5的新特性","14.1 HTML5的新特性",[44,140570,140572],{"id":140571},"_1411-基本标签","14.1.1 基本标签",[19,140574,140575],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,140577,140578,140579,140582],{},"这些新特性都有兼容性问题，基本是 ",[235,140580,140581],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,140584,140585],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,140587,140588],{},"现在使用的是新特性：",[1093,140590,140591,140597,140603,140609,140615,140621],{},[30,140592,140593,140596],{},[71,140594,140595],{},"\u003Cheader>"," 头部标签",[30,140598,140599,140602],{},[71,140600,140601],{},"\u003Cnav>"," 导航标签",[30,140604,140605,140608],{},[71,140606,140607],{},"\u003Carticle>"," 内容标签",[30,140610,140611,140614],{},[71,140612,140613],{},"\u003Csection>"," 定义文档某个区域",[30,140616,140617,140620],{},[71,140618,140619],{},"\u003Caside>"," 侧边栏标签",[30,140622,140623,140626],{},[71,140624,140625],{},"\u003Cfooter>"," 尾部标签",[1424,140628],{"style":130689,"src":140629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,140631,115],{},[1093,140633,140634,140637,140640,140643],{},[30,140635,140636],{},"这种语义化标准主要是针对搜索引擎的",[30,140638,140639],{},"这些标签页面中可以经常使用",[30,140641,140642],{},"在IE9中，需要把这些元素转换为块级元素",[30,140644,140645],{},"移动端更喜欢使用这些标签",[44,140647,140649],{"id":140648},"_1412-多媒体标签","14.1.2 多媒体标签",[19,140651,140652,140653,140655,140656,140658],{},"音频 ",[235,140654,32455],{}," 和视频 ",[235,140657,32464],{}," 两个标签",[26277,140660,140662],{"id":140661},"_14121-视频标签-video","14.1.2.1 视频标签- video",[27,140664,140665],{},[30,140666,140667],{},"支持格式：",[1424,140669],{"style":130689,"src":140670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,140672,140673],{},"尽量使用MP4，兼容性好",[19,140675,140676],{},"用MP4就可以",[64,140678,140680],{"className":131580,"code":140679,"language":131582,"meta":69,"style":69},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[71,140681,140682],{"__ignoreMap":69},[74,140683,140684,140686,140688,140690,140692,140695,140697,140700,140703,140706,140708,140710],{"class":76,"line":77},[74,140685,996],{"class":84},[74,140687,32464],{"class":55581},[74,140689,59520],{"class":1925},[74,140691,131],{"class":84},[74,140693,140694],{"class":190},"\"movie.mp4\"",[74,140696,96704],{"class":1925},[74,140698,140699],{"class":1925}," autoplay",[74,140701,140702],{"class":1925}," muted",[74,140704,140705],{"class":1925}," loop",[74,140707,59595],{"class":84},[74,140709,32464],{"class":55581},[74,140711,55588],{"class":84},[27,140713,140714],{"start":94},[30,140715,140716],{},"兼容写法",[19,140718,140719],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[64,140721,140722],{"className":131580,"code":140679,"language":131582,"meta":69,"style":69},[71,140723,140724],{"__ignoreMap":69},[74,140725,140726,140728,140730,140732,140734,140736,140738,140740,140742,140744,140746,140748],{"class":76,"line":77},[74,140727,996],{"class":84},[74,140729,32464],{"class":55581},[74,140731,59520],{"class":1925},[74,140733,131],{"class":84},[74,140735,140694],{"class":190},[74,140737,96704],{"class":1925},[74,140739,140699],{"class":1925},[74,140741,140702],{"class":1925},[74,140743,140705],{"class":1925},[74,140745,59595],{"class":84},[74,140747,32464],{"class":55581},[74,140749,55588],{"class":84},[19,140751,140752],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[27,140754,140755],{"start":1141},[30,140756,140757],{},"video常用属性",[1424,140759],{"style":130689,"src":140760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,140762,140763],{},"poster属性后面是跟的等待加载图片的地址",[64,140765,140766],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},[71,140767,140768],{"__ignoreMap":69},[74,140769,140770,140772,140774,140776,140778,140780,140782,140784,140786,140788,140790,140792],{"class":76,"line":77},[74,140771,996],{"class":84},[74,140773,1424],{"class":55581},[74,140775,59520],{"class":1925},[74,140777,131],{"class":84},[74,140779,138350],{"class":190},[74,140781,59528],{"class":1925},[74,140783,131],{"class":84},[74,140785,138357],{"class":190},[74,140787,138360],{"class":1925},[74,140789,131],{"class":84},[74,140791,138365],{"class":190},[74,140793,55588],{"class":84},[19,140795,140796],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[64,140798,140800],{"className":130833,"code":140799,"language":130835,"meta":69,"style":69},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[71,140801,140802,140807,140813,140837,140842,140847],{"__ignoreMap":69},[74,140803,140804],{"class":76,"line":77},[74,140805,140806],{"class":144},"\u002F* 2D 位移 *\u002F\n",[74,140808,140809,140811],{"class":76,"line":94},[74,140810,55892],{"class":55581},[74,140812,19851],{"class":84},[74,140814,140815,140818,140820,140823,140825,140827,140829,140831,140833,140835],{"class":76,"line":1141},[74,140816,140817],{"class":134},"  transform",[74,140819,55718],{"class":84},[74,140821,140822],{"class":134},"translate",[74,140824,85],{"class":84},[74,140826,397],{"class":134},[74,140828,55773],{"class":80},[74,140830,16714],{"class":84},[74,140832,742],{"class":134},[74,140834,55773],{"class":80},[74,140836,2682],{"class":84},[74,140838,140839],{"class":76,"line":1156},[74,140840,140841],{"class":144},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[74,140843,140844],{"class":76,"line":1162},[74,140845,140846],{"class":144},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[74,140848,140849],{"class":76,"line":1176},[74,140850,1527],{"class":84},[19,140852,140853],{},"muted:自动静音属性",[26277,140855,140857],{"id":140856},"_14122-音频标签audio","14.1.2.2 音频标签audio",[27,140859,140860],{},[30,140861,140862],{},"基本使用",[19,140864,140865,140866,140871,140872],{},"当前 ",[235,140867,140868],{},[71,140869,140870],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[235,140873,140874],{},"mp3格式",[1424,140876],{"style":130689,"src":140877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[27,140879,140880],{"start":94},[30,140881,140716],{},[64,140883,140884],{"className":131580,"code":140679,"language":131582,"meta":69,"style":69},[71,140885,140886],{"__ignoreMap":69},[74,140887,140888,140890,140892,140894,140896,140898,140900,140902,140904,140906,140908,140910],{"class":76,"line":77},[74,140889,996],{"class":84},[74,140891,32464],{"class":55581},[74,140893,59520],{"class":1925},[74,140895,131],{"class":84},[74,140897,140694],{"class":190},[74,140899,96704],{"class":1925},[74,140901,140699],{"class":1925},[74,140903,140702],{"class":1925},[74,140905,140705],{"class":1925},[74,140907,59595],{"class":84},[74,140909,32464],{"class":55581},[74,140911,55588],{"class":84},[19,140913,140914],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[27,140916,140917],{"start":1141},[30,140918,140919],{},"常用属性",[1424,140921],{"style":130689,"src":140922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[64,140924,140925],{"className":131580,"code":140679,"language":131582,"meta":69,"style":69},[71,140926,140927],{"__ignoreMap":69},[74,140928,140929,140931,140933,140935,140937,140939,140941,140943,140945,140947,140949,140951],{"class":76,"line":77},[74,140930,996],{"class":84},[74,140932,32464],{"class":55581},[74,140934,59520],{"class":1925},[74,140936,131],{"class":84},[74,140938,140694],{"class":190},[74,140940,96704],{"class":1925},[74,140942,140699],{"class":1925},[74,140944,140702],{"class":1925},[74,140946,140705],{"class":1925},[74,140948,59595],{"class":84},[74,140950,32464],{"class":55581},[74,140952,55588],{"class":84},[19,140954,140955],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[26277,140957,140959],{"id":140958},"_14123-总结","14.1.2.3 总结",[1093,140961,140962,140965,140968,140971,140974],{},[30,140963,140964],{},"音频标签和视频标签使用方式基本一致",[30,140966,140967],{},"浏览器支持情况不同",[30,140969,140970],{},"谷歌浏览器把音频和视频自动播放禁止了",[30,140972,140973],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[30,140975,140976],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[44,140978,140980],{"id":140979},"_1413-表单元素","14.1.3 表单元素",[26277,140982,140984],{"id":140983},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1424,140986],{"style":130689,"src":140987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[64,140989,140991],{"className":131580,"code":140990,"language":131582,"meta":69,"style":69},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[71,140992,140993],{"__ignoreMap":69},[74,140994,140995,140997,140999,141001,141003,141005,141007,141009,141012,141014,141016,141019],{"class":76,"line":77},[74,140996,996],{"class":84},[74,140998,58102],{"class":55581},[74,141000,58105],{"class":1925},[74,141002,131],{"class":84},[74,141004,66980],{"class":190},[74,141006,19199],{"class":1925},[74,141008,131],{"class":84},[74,141010,141011],{"class":190},"\"username\"",[74,141013,65301],{"class":1925},[74,141015,131],{"class":84},[74,141017,141018],{"class":190},"\"请输入用户名\"",[74,141020,55588],{"class":84},[1424,141022],{"style":130689,"src":141023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[26277,141025,141027],{"id":141026},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1424,141029],{"style":130689,"src":141030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,141032,141033],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,141035,141036],{},"快捷操作：",[1424,141038],{"style":130689,"src":141039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,141041,141042],{},"例子1：",[64,141044,141046],{"className":131580,"code":141045,"language":131582,"meta":69,"style":69},"\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",[71,141047,141048,141071,141098,141127,141146],{"__ignoreMap":69},[74,141049,141050,141052,141054,141056,141058,141061,141064,141066,141069],{"class":76,"line":77},[74,141051,996],{"class":84},[74,141053,70906],{"class":55581},[74,141055,70909],{"class":1925},[74,141057,131],{"class":84},[74,141059,141060],{"class":190},"\"\u002Fsubmit\"",[74,141062,141063],{"class":1925}," method",[74,141065,131],{"class":84},[74,141067,141068],{"class":190},"\"post\"",[74,141070,55588],{"class":84},[74,141072,141073,141075,141077,141079,141081,141083,141085,141087,141089,141091,141093,141096],{"class":76,"line":94},[74,141074,56425],{"class":84},[74,141076,58102],{"class":55581},[74,141078,58105],{"class":1925},[74,141080,131],{"class":84},[74,141082,66980],{"class":190},[74,141084,19199],{"class":1925},[74,141086,131],{"class":84},[74,141088,141011],{"class":190},[74,141090,65301],{"class":1925},[74,141092,131],{"class":84},[74,141094,141095],{"class":190},"\"用户名\"",[74,141097,55588],{"class":84},[74,141099,141100,141102,141104,141106,141108,141111,141113,141115,141118,141120,141122,141125],{"class":76,"line":1141},[74,141101,56425],{"class":84},[74,141103,58102],{"class":55581},[74,141105,58105],{"class":1925},[74,141107,131],{"class":84},[74,141109,141110],{"class":190},"\"password\"",[74,141112,19199],{"class":1925},[74,141114,131],{"class":84},[74,141116,141117],{"class":190},"\"pwd\"",[74,141119,65301],{"class":1925},[74,141121,131],{"class":84},[74,141123,141124],{"class":190},"\"密码\"",[74,141126,55588],{"class":84},[74,141128,141129,141131,141133,141135,141137,141139,141142,141144],{"class":76,"line":1156},[74,141130,56425],{"class":84},[74,141132,58168],{"class":55581},[74,141134,58105],{"class":1925},[74,141136,131],{"class":84},[74,141138,70929],{"class":190},[74,141140,141141],{"class":84},">提交\u003C\u002F",[74,141143,58168],{"class":55581},[74,141145,55588],{"class":84},[74,141147,141148,141150,141152],{"class":76,"line":1162},[74,141149,56066],{"class":84},[74,141151,70906],{"class":55581},[74,141153,55588],{"class":84},[1424,141155],{"style":130689,"src":141156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,141158,141159],{},"value是表单域的内容",[19,141161,141162],{},"例子2：",[64,141164,141165],{"className":131580,"code":141045,"language":131582,"meta":69,"style":69},[71,141166,141167,141187,141213,141239,141257],{"__ignoreMap":69},[74,141168,141169,141171,141173,141175,141177,141179,141181,141183,141185],{"class":76,"line":77},[74,141170,996],{"class":84},[74,141172,70906],{"class":55581},[74,141174,70909],{"class":1925},[74,141176,131],{"class":84},[74,141178,141060],{"class":190},[74,141180,141063],{"class":1925},[74,141182,131],{"class":84},[74,141184,141068],{"class":190},[74,141186,55588],{"class":84},[74,141188,141189,141191,141193,141195,141197,141199,141201,141203,141205,141207,141209,141211],{"class":76,"line":94},[74,141190,56425],{"class":84},[74,141192,58102],{"class":55581},[74,141194,58105],{"class":1925},[74,141196,131],{"class":84},[74,141198,66980],{"class":190},[74,141200,19199],{"class":1925},[74,141202,131],{"class":84},[74,141204,141011],{"class":190},[74,141206,65301],{"class":1925},[74,141208,131],{"class":84},[74,141210,141095],{"class":190},[74,141212,55588],{"class":84},[74,141214,141215,141217,141219,141221,141223,141225,141227,141229,141231,141233,141235,141237],{"class":76,"line":1141},[74,141216,56425],{"class":84},[74,141218,58102],{"class":55581},[74,141220,58105],{"class":1925},[74,141222,131],{"class":84},[74,141224,141110],{"class":190},[74,141226,19199],{"class":1925},[74,141228,131],{"class":84},[74,141230,141117],{"class":190},[74,141232,65301],{"class":1925},[74,141234,131],{"class":84},[74,141236,141124],{"class":190},[74,141238,55588],{"class":84},[74,141240,141241,141243,141245,141247,141249,141251,141253,141255],{"class":76,"line":1156},[74,141242,56425],{"class":84},[74,141244,58168],{"class":55581},[74,141246,58105],{"class":1925},[74,141248,131],{"class":84},[74,141250,70929],{"class":190},[74,141252,141141],{"class":84},[74,141254,58168],{"class":55581},[74,141256,55588],{"class":84},[74,141258,141259,141261,141263],{"class":76,"line":1162},[74,141260,56066],{"class":84},[74,141262,70906],{"class":55581},[74,141264,55588],{"class":84},[1424,141266],{"style":130689,"src":141267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,141269,141271],{"id":141270},"_142-css新特性","14.2 CSS新特性",[44,141273,141275],{"id":141274},"_1421-新增选择器","14.2.1 新增选择器",[26277,141277,141279],{"id":141278},"_14211-属性选择器","14.2.1.1 属性选择器",[1424,141281],{"style":130689,"src":141282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[64,141284,141286],{"className":130833,"code":141285,"language":130835,"meta":69,"style":69},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[71,141287,141288,141303,141319],{"__ignoreMap":69},[74,141289,141290,141292,141294,141296,141298,141300],{"class":76,"line":77},[74,141291,58102],{"class":55581},[74,141293,976],{"class":84},[74,141295,107388],{"class":1925},[74,141297,131],{"class":80},[74,141299,66980],{"class":190},[74,141301,141302],{"class":84},"] {\n",[74,141304,141305,141307,141309,141311,141313,141315,141317],{"class":76,"line":94},[74,141306,75177],{"class":134},[74,141308,55718],{"class":84},[74,141310,303],{"class":134},[74,141312,55773],{"class":80},[74,141314,55802],{"class":134},[74,141316,134413],{"class":134},[74,141318,1252],{"class":84},[74,141320,141321],{"class":76,"line":1141},[74,141322,1527],{"class":84},[1424,141324],{"style":130689,"src":141325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,141327,115],{},[1093,141329,141330,141333,141336,141339],{},[30,141331,141332],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[30,141334,141335],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[30,141337,141338],{},"属性选择器也可以选择出来自定义的属性",[30,141340,141341,141343],{},[235,141342,13304],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[26277,141345,141347],{"id":141346},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1424,141349],{"style":130689,"src":141350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[27,141352,141353],{},[30,141354,141355],{},"fist-child",[64,141357,141359],{"className":130833,"code":141358,"language":130835,"meta":69,"style":69},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[71,141360,141361,141366,141381,141401,141419],{"__ignoreMap":69},[74,141362,141363],{"class":76,"line":77},[74,141364,141365],{"class":144},"\u002F* 属性选择器 *\u002F\n",[74,141367,141368,141370,141372,141374,141376,141378],{"class":76,"line":94},[74,141369,58102],{"class":55581},[74,141371,976],{"class":84},[74,141373,107388],{"class":1925},[74,141375,131],{"class":80},[74,141377,66980],{"class":190},[74,141379,141380],{"class":84},"] { }\n",[74,141382,141383,141385,141387,141389,141392,141395,141398],{"class":76,"line":1141},[74,141384,58102],{"class":55581},[74,141386,976],{"class":84},[74,141388,18973],{"class":1925},[74,141390,141391],{"class":80},"^=",[74,141393,141394],{"class":190},"\"icon\"",[74,141396,141397],{"class":84},"] { }  ",[74,141399,141400],{"class":144},"\u002F* 以 icon 开头 *\u002F\n",[74,141402,141403,141405,141407,141409,141412,141414,141416],{"class":76,"line":1156},[74,141404,58102],{"class":55581},[74,141406,976],{"class":84},[74,141408,18973],{"class":1925},[74,141410,141411],{"class":80},"$=",[74,141413,141394],{"class":190},[74,141415,141397],{"class":84},[74,141417,141418],{"class":144},"\u002F* 以 icon 结尾 *\u002F\n",[74,141420,141421,141423,141425,141427,141430,141432,141434],{"class":76,"line":1162},[74,141422,58102],{"class":55581},[74,141424,976],{"class":84},[74,141426,18973],{"class":1925},[74,141428,141429],{"class":80},"*=",[74,141431,141394],{"class":190},[74,141433,141397],{"class":84},[74,141435,141436],{"class":144},"\u002F* 包含 icon *\u002F\n",[19,141438,141439],{},"ul的第一个儿子文本为红色",[19,141441,141442],{},"一定要在冒号前加空格，不然就是选中所有的了",[64,141444,141446],{"className":130833,"code":141445,"language":130835,"meta":69,"style":69},".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",[71,141447,141448,141454,141464,141468,141472,141477,141490,141503,141519,141536,141553],{"__ignoreMap":69},[74,141449,141450,141452],{"class":76,"line":77},[74,141451,131124],{"class":1925},[74,141453,19851],{"class":84},[74,141455,141456,141458,141460,141462],{"class":76,"line":94},[74,141457,75186],{"class":134},[74,141459,55718],{"class":84},[74,141461,61702],{"class":134},[74,141463,1252],{"class":84},[74,141465,141466],{"class":76,"line":1141},[74,141467,1527],{"class":84},[74,141469,141470],{"class":76,"line":1156},[74,141471,140294],{"class":84},[74,141473,141474],{"class":76,"line":1162},[74,141475,141476],{"class":144},"\u002F* 结构伪类选择器 *\u002F\n",[74,141478,141479,141481,141484,141487],{"class":76,"line":1176},[74,141480,30],{"class":55581},[74,141482,141483],{"class":1925},":first-child",[74,141485,141486],{"class":84}," { }           ",[74,141488,141489],{"class":144},"\u002F* 第一个 *\u002F\n",[74,141491,141492,141494,141497,141500],{"class":76,"line":1182},[74,141493,30],{"class":55581},[74,141495,141496],{"class":1925},":last-child",[74,141498,141499],{"class":84}," { }            ",[74,141501,141502],{"class":144},"\u002F* 最后一个 *\u002F\n",[74,141504,141505,141507,141509,141511,141513,141516],{"class":76,"line":1273},[74,141506,30],{"class":55581},[74,141508,133747],{"class":1925},[74,141510,85],{"class":84},[74,141512,163],{"class":134},[74,141514,141515],{"class":84},") { }          ",[74,141517,141518],{"class":144},"\u002F* 第2个 *\u002F\n",[74,141520,141521,141523,141525,141527,141530,141533],{"class":76,"line":1279},[74,141522,30],{"class":55581},[74,141524,133747],{"class":1925},[74,141526,85],{"class":84},[74,141528,141529],{"class":134},"2n",[74,141531,141532],{"class":84},") { }         ",[74,141534,141535],{"class":144},"\u002F* 偶数 *\u002F\n",[74,141537,141538,141540,141542,141544,141547,141550],{"class":76,"line":1291},[74,141539,30],{"class":55581},[74,141541,133747],{"class":1925},[74,141543,85],{"class":84},[74,141545,141546],{"class":134},"2n+1",[74,141548,141549],{"class":84},") { }       ",[74,141551,141552],{"class":144},"\u002F* 奇数 *\u002F\n",[74,141554,141555,141557,141559,141561,141564,141566],{"class":76,"line":1574},[74,141556,30],{"class":55581},[74,141558,133747],{"class":1925},[74,141560,85],{"class":84},[74,141562,141563],{"class":134},"-n+3",[74,141565,141549],{"class":84},[74,141567,141568],{"class":144},"\u002F* 前3个 *\u002F\n",[55892,141570,141573],{"className":141571},[141572],"example","\n  示例内容\n",[19,141575,141576],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1093,141578,141579],{},[30,141580,141581,141584],{},[71,141582,141583],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,141586,141587],{},"也就是说它选择的是熊大",[27,141589,141590],{"start":1176},[30,141591,141592],{},"权重",[64,141594,141596],{"className":130833,"code":141595,"language":130835,"meta":69,"style":69},"\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",[71,141597,141598,141602,141612,141622,141636,141650,141664],{"__ignoreMap":69},[74,141599,141600],{"class":76,"line":77},[74,141601,141476],{"class":144},[74,141603,141604,141606,141608,141610],{"class":76,"line":94},[74,141605,30],{"class":55581},[74,141607,141483],{"class":1925},[74,141609,141486],{"class":84},[74,141611,141489],{"class":144},[74,141613,141614,141616,141618,141620],{"class":76,"line":1141},[74,141615,30],{"class":55581},[74,141617,141496],{"class":1925},[74,141619,141499],{"class":84},[74,141621,141502],{"class":144},[74,141623,141624,141626,141628,141630,141632,141634],{"class":76,"line":1156},[74,141625,30],{"class":55581},[74,141627,133747],{"class":1925},[74,141629,85],{"class":84},[74,141631,163],{"class":134},[74,141633,141515],{"class":84},[74,141635,141518],{"class":144},[74,141637,141638,141640,141642,141644,141646,141648],{"class":76,"line":1162},[74,141639,30],{"class":55581},[74,141641,133747],{"class":1925},[74,141643,85],{"class":84},[74,141645,141529],{"class":134},[74,141647,141532],{"class":84},[74,141649,141535],{"class":144},[74,141651,141652,141654,141656,141658,141660,141662],{"class":76,"line":1176},[74,141653,30],{"class":55581},[74,141655,133747],{"class":1925},[74,141657,85],{"class":84},[74,141659,141546],{"class":134},[74,141661,141549],{"class":84},[74,141663,141552],{"class":144},[74,141665,141666,141668,141670,141672,141674,141676],{"class":76,"line":1182},[74,141667,30],{"class":55581},[74,141669,133747],{"class":1925},[74,141671,85],{"class":84},[74,141673,141563],{"class":134},[74,141675,141549],{"class":84},[74,141677,141568],{"class":144},[19,141679,141680],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[26277,141682,141684],{"id":141683},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,141686,141687],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1424,141689],{"style":130689,"src":141690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[27,141692,141693],{},[30,141694,115],{},[1093,141696,141697,141700,141703,141706,141709,141712],{},[30,141698,141699],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[30,141701,141702],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[30,141704,141705],{},"语法： element::before {}",[30,141707,141708],{},"before 和 after 必须有 content 属性",[30,141710,141711],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[30,141713,141714],{},"伪元素选择器和标签选择器一样，权重为 1",[27,141716,141717],{"start":94},[30,141718,141719],{},"实例",[64,141721,141722],{"className":130833,"code":141595,"language":130835,"meta":69,"style":69},[71,141723,141724,141728,141738,141748,141762,141776,141790],{"__ignoreMap":69},[74,141725,141726],{"class":76,"line":77},[74,141727,141476],{"class":144},[74,141729,141730,141732,141734,141736],{"class":76,"line":94},[74,141731,30],{"class":55581},[74,141733,141483],{"class":1925},[74,141735,141486],{"class":84},[74,141737,141489],{"class":144},[74,141739,141740,141742,141744,141746],{"class":76,"line":1141},[74,141741,30],{"class":55581},[74,141743,141496],{"class":1925},[74,141745,141499],{"class":84},[74,141747,141502],{"class":144},[74,141749,141750,141752,141754,141756,141758,141760],{"class":76,"line":1156},[74,141751,30],{"class":55581},[74,141753,133747],{"class":1925},[74,141755,85],{"class":84},[74,141757,163],{"class":134},[74,141759,141515],{"class":84},[74,141761,141518],{"class":144},[74,141763,141764,141766,141768,141770,141772,141774],{"class":76,"line":1162},[74,141765,30],{"class":55581},[74,141767,133747],{"class":1925},[74,141769,85],{"class":84},[74,141771,141529],{"class":134},[74,141773,141532],{"class":84},[74,141775,141535],{"class":144},[74,141777,141778,141780,141782,141784,141786,141788],{"class":76,"line":1176},[74,141779,30],{"class":55581},[74,141781,133747],{"class":1925},[74,141783,85],{"class":84},[74,141785,141546],{"class":134},[74,141787,141549],{"class":84},[74,141789,141552],{"class":144},[74,141791,141792,141794,141796,141798,141800,141802],{"class":76,"line":1182},[74,141793,30],{"class":55581},[74,141795,133747],{"class":1925},[74,141797,85],{"class":84},[74,141799,141563],{"class":134},[74,141801,141549],{"class":84},[74,141803,141568],{"class":144},[1424,141805],{"style":130689,"src":141806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[27,141808,141809],{"start":1141},[30,141810,141811],{},"使用场景1",[1424,141813],{"style":130689,"src":141814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,141816,141817],{},"不需要再加盒子来整红色那部分了",[64,141819,141821],{"className":130833,"code":141820,"language":130835,"meta":69,"style":69},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[71,141822,141823,141828,141837,141848,141858,141862,141871,141882,141892],{"__ignoreMap":69},[74,141824,141825],{"class":76,"line":77},[74,141826,141827],{"class":144},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[74,141829,141830,141832,141835],{"class":76,"line":94},[74,141831,55892],{"class":55581},[74,141833,141834],{"class":1925},"::before",[74,141836,19851],{"class":84},[74,141838,141839,141842,141844,141846],{"class":76,"line":1141},[74,141840,141841],{"class":134},"  content",[74,141843,55718],{"class":84},[74,141845,11931],{"class":190},[74,141847,1252],{"class":84},[74,141849,141850,141852,141854,141856],{"class":76,"line":1156},[74,141851,132449],{"class":134},[74,141853,55718],{"class":84},[74,141855,65150],{"class":134},[74,141857,1252],{"class":84},[74,141859,141860],{"class":76,"line":1162},[74,141861,1527],{"class":84},[74,141863,141864,141866,141869],{"class":76,"line":1176},[74,141865,55892],{"class":55581},[74,141867,141868],{"class":1925},"::after",[74,141870,19851],{"class":84},[74,141872,141873,141875,141877,141880],{"class":76,"line":1182},[74,141874,141841],{"class":134},[74,141876,55718],{"class":84},[74,141878,141879],{"class":190},"\"→\"",[74,141881,1252],{"class":84},[74,141883,141884,141886,141888,141890],{"class":76,"line":1273},[74,141885,75186],{"class":134},[74,141887,55718],{"class":84},[74,141889,66351],{"class":134},[74,141891,1252],{"class":84},[74,141893,141894],{"class":76,"line":1279},[74,141895,1527],{"class":84},[1424,141897],{"style":130689,"src":141898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,141900,141901],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1424,141903],{"style":130689,"src":141904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,141906,141907],{},"但是在引用时需要先转义一下",[19,141909,141910],{},"content='\\e930'",[27,141912,141913],{"start":1156},[30,141914,141915],{},"使用场景2",[19,141917,141918],{},"仿土豆效果",[19,141920,141921],{},"通过使用伪元素选择器可以减少body中盒子的数量",[64,141923,141924],{"className":130833,"code":141820,"language":130835,"meta":69,"style":69},[71,141925,141926,141930,141938,141948,141958,141962,141970,141980,141990],{"__ignoreMap":69},[74,141927,141928],{"class":76,"line":77},[74,141929,141827],{"class":144},[74,141931,141932,141934,141936],{"class":76,"line":94},[74,141933,55892],{"class":55581},[74,141935,141834],{"class":1925},[74,141937,19851],{"class":84},[74,141939,141940,141942,141944,141946],{"class":76,"line":1141},[74,141941,141841],{"class":134},[74,141943,55718],{"class":84},[74,141945,11931],{"class":190},[74,141947,1252],{"class":84},[74,141949,141950,141952,141954,141956],{"class":76,"line":1156},[74,141951,132449],{"class":134},[74,141953,55718],{"class":84},[74,141955,65150],{"class":134},[74,141957,1252],{"class":84},[74,141959,141960],{"class":76,"line":1162},[74,141961,1527],{"class":84},[74,141963,141964,141966,141968],{"class":76,"line":1176},[74,141965,55892],{"class":55581},[74,141967,141868],{"class":1925},[74,141969,19851],{"class":84},[74,141971,141972,141974,141976,141978],{"class":76,"line":1182},[74,141973,141841],{"class":134},[74,141975,55718],{"class":84},[74,141977,141879],{"class":190},[74,141979,1252],{"class":84},[74,141981,141982,141984,141986,141988],{"class":76,"line":1273},[74,141983,75186],{"class":134},[74,141985,55718],{"class":84},[74,141987,66351],{"class":134},[74,141989,1252],{"class":84},[74,141991,141992],{"class":76,"line":1279},[74,141993,1527],{"class":84},[1424,141995],{"style":130689,"src":141996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[27,141998,141999],{"start":1162},[30,142000,142001],{},"使用场景3",[19,142003,142004],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[64,142006,142008],{"className":130833,"code":142007,"language":130835,"meta":69,"style":69},".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",[71,142009,142010,142016,142026,142030,142034,142038,142046,142056,142066,142070,142078,142088,142098],{"__ignoreMap":69},[74,142011,142012,142014],{"class":76,"line":77},[74,142013,134681],{"class":1925},[74,142015,19851],{"class":84},[74,142017,142018,142020,142022,142024],{"class":76,"line":94},[74,142019,135313],{"class":134},[74,142021,55718],{"class":84},[74,142023,28016],{"class":134},[74,142025,1252],{"class":84},[74,142027,142028],{"class":76,"line":1141},[74,142029,1527],{"class":84},[74,142031,142032],{"class":76,"line":1156},[74,142033,140294],{"class":84},[74,142035,142036],{"class":76,"line":1162},[74,142037,141827],{"class":144},[74,142039,142040,142042,142044],{"class":76,"line":1176},[74,142041,55892],{"class":55581},[74,142043,141834],{"class":1925},[74,142045,19851],{"class":84},[74,142047,142048,142050,142052,142054],{"class":76,"line":1182},[74,142049,141841],{"class":134},[74,142051,55718],{"class":84},[74,142053,11931],{"class":190},[74,142055,1252],{"class":84},[74,142057,142058,142060,142062,142064],{"class":76,"line":1273},[74,142059,132449],{"class":134},[74,142061,55718],{"class":84},[74,142063,65150],{"class":134},[74,142065,1252],{"class":84},[74,142067,142068],{"class":76,"line":1279},[74,142069,1527],{"class":84},[74,142071,142072,142074,142076],{"class":76,"line":1291},[74,142073,55892],{"class":55581},[74,142075,141868],{"class":1925},[74,142077,19851],{"class":84},[74,142079,142080,142082,142084,142086],{"class":76,"line":1574},[74,142081,141841],{"class":134},[74,142083,55718],{"class":84},[74,142085,141879],{"class":190},[74,142087,1252],{"class":84},[74,142089,142090,142092,142094,142096],{"class":76,"line":1579},[74,142091,75186],{"class":134},[74,142093,55718],{"class":84},[74,142095,66351],{"class":134},[74,142097,1252],{"class":84},[74,142099,142100],{"class":76,"line":1585},[74,142101,1527],{"class":84},[19,142103,142104],{},"div {\nmargin: 0 auto;\n}",[64,142106,142109],{"className":142107,"code":142108,"language":9466},[9464],"\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",[71,142110,142108],{"__ignoreMap":69},[19,142112,142113],{},"如果想让多个元素都发生变化",[19,142115,142116],{},"不能如下操作：",[19,142118,142119],{},"transition: width 2s ease 0.5s;",[19,142121,142122],{},"transition: height 2s ease 0.5s;不对！！！",[19,142124,142125],{},"上方会样式冲突，导致不显示任何过渡效果",[19,142127,142128],{},"使用如下：加逗号隔开",[19,142130,142131],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,142133,142134],{},"transition all 2s ease;",[44,142136,142138],{"id":142137},"_1426-过渡练习","14.2.6 过渡练习",[27,142140,142141],{},[30,142142,142143],{},"进度条",[1424,142145],{"style":130689,"src":142146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[64,142148,142150],{"className":130833,"code":142149,"language":130835,"meta":69,"style":69},"div {\n  transition: all 0.3s ease;\n}\n",[71,142151,142152,142158,142176],{"__ignoreMap":69},[74,142153,142154,142156],{"class":76,"line":77},[74,142155,55892],{"class":55581},[74,142157,19851],{"class":84},[74,142159,142160,142163,142165,142167,142170,142172,142174],{"class":76,"line":94},[74,142161,142162],{"class":134},"  transition",[74,142164,55718],{"class":84},[74,142166,32402],{"class":134},[74,142168,142169],{"class":134}," 0.3",[74,142171,781],{"class":80},[74,142173,82961],{"class":134},[74,142175,1252],{"class":84},[74,142177,142178],{"class":76,"line":1141},[74,142179,1527],{"class":84},[27,142181,142182],{"start":94},[30,142183,142184],{},"小米logo",[19,142186,142187],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[64,142189,142191],{"className":130833,"code":142190,"language":130835,"meta":69,"style":69},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[71,142192,142193,142198,142204,142220,142225],{"__ignoreMap":69},[74,142194,142195],{"class":76,"line":77},[74,142196,142197],{"class":144},"\u002F* CSS3 过渡 *\u002F\n",[74,142199,142200,142202],{"class":76,"line":94},[74,142201,55892],{"class":55581},[74,142203,19851],{"class":84},[74,142205,142206,142208,142210,142212,142214,142216,142218],{"class":76,"line":1141},[74,142207,142162],{"class":134},[74,142209,55718],{"class":84},[74,142211,32402],{"class":134},[74,142213,142169],{"class":134},[74,142215,781],{"class":80},[74,142217,82961],{"class":134},[74,142219,1252],{"class":84},[74,142221,142222],{"class":76,"line":1156},[74,142223,142224],{"class":144},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[74,142226,142227],{"class":76,"line":1162},[74,142228,1527],{"class":84},[19,142230,142231],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5090,142233,142234],{},"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":69,"searchDepth":94,"depth":94,"links":142236},[142237,142242],{"id":140567,"depth":94,"text":140568,"children":142238},[142239,142240,142241],{"id":140571,"depth":1141,"text":140572},{"id":140648,"depth":1141,"text":140649},{"id":140979,"depth":1141,"text":140980},{"id":141270,"depth":94,"text":141271,"children":142243},[142244,142245],{"id":141274,"depth":1141,"text":141275},{"id":142137,"depth":1141,"text":142138},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":140559,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":142252,"title":142253,"body":142254,"description":27656,"extension":5121,"meta":143998,"navigation":2362,"path":143999,"seo":144000,"stem":144001,"__hash__":144002},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":142255,"toc":143979},[142256,142259,142263,142266,142272,142278,142282,142284,142287,142290,142293,142296,142299,142302,142305,142309,142313,142316,142319,142322,142326,142329,142332,142337,142340,142343,142346,142350,142353,142362,142365,142368,142372,142375,142378,142383,142390,142404,142412,142419,142424,142427,142430,142433,142440,142444,142450,142456,142459,142462,142467,142473,142475,142483,142488,142491,142497,142499,142504,142509,142512,142514,142519,142522,142527,142532,142566,142570,142574,142577,142581,142584,142670,142673,142710,142713,142749,142753,142758,142771,142825,142827,142855,142857,142885,142891,142905,142907,142951,142953,142997,143000,143007,143018,143020,143047,143049,143075,143082,143098,143100,143194,143196,143290,143297,143300,143305,143311,143385,143388,143390,143426,143428,143464,143467,143474,143493,143496,143499,143501,143526,143528,143552,143555,143558,143588,143592,143595,143658,143660,143726,143728,143792,143795,143827,143829,143855,143857,143883,143886,143917,143919,143945,143947,143973,143976],[10,142257,142253],{"id":142258},"_15-品优购项目上篇-搭建与公共模块",[14,142260,142262],{"id":142261},"_151-项目规划","15.1 项目规划",[1424,142264],{"style":130689,"src":142265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,142267,142268,142271],{},[235,142269,142270],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,142273,142274,142277],{},[235,142275,142276],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,142279,142281],{"id":142280},"_152-项目介绍","15.2 项目介绍",[19,142283,142270],{},[1424,142285],{"style":130689,"src":142286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,142288,142289],{},"主页：",[1424,142291],{"style":130689,"src":142292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,142294,142295],{},"列表页：",[1424,142297],{"style":130689,"src":142298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,142300,142301],{},"注册页：",[1424,142303],{"style":130689,"src":142304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,142306,142308],{"id":142307},"_153-项目搭建工作","15.3 项目搭建工作",[44,142310,142312],{"id":142311},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1424,142314],{"style":130689,"src":142315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,142317,142318],{},"经常更换的图片要放到upload文件夹中",[19,142320,142321],{},"不经常换的放到images文件夹中",[44,142323,142325],{"id":142324},"_1532-创建文件如下","15.3.2 创建文件如下",[1424,142327],{"style":130689,"src":142328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1424,142330],{"style":130689,"src":142331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,142333,142334],{},[235,142335,142336],{},"初始化样式：",[19,142338,142339],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,142341,142342],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,142344,142345],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[44,142347,142349],{"id":142348},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,142351,142352],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,142354,142355,142356,142361],{},"这里最典型的应用就是 ",[235,142357,142358],{},[71,142359,142360],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1424,142363],{"style":130689,"src":142364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,142366,142367],{},"通过link方法来引入",[44,142369,142371],{"id":142370},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1424,142373],{"style":130689,"src":142374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,142376,142377],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[27,142379,142380],{},[30,142381,142382],{},"制作favicon图标",[19,142384,142385,142386,142389],{},"①把品优购图标切成 ",[71,142387,142388],{},"png"," 图片",[19,142391,142392,142393,142395,142396,142399,142400],{},"②把 ",[71,142394,142388],{}," 图片转换为 ",[71,142397,142398],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[324,142401,142402],{"href":142402,"rel":142403},"http:\u002F\u002Fwww.bitbug.net\u002F",[28145],[27,142405,142406,142409],{"start":94},[30,142407,142408],{},"favicon图标放到网站根目录下",[30,142410,142411],{},"HTML页面引入favicon",[19,142413,142414,142415,142418],{},"在html 页面里面的 ",[71,142416,142417],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,142420,142421],{},[71,142422,142423],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,142425,142426],{},"复制这行代码或者在生成这个的网站进行复制",[1424,142428],{"style":130689,"src":142429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,142431,142432],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,142434,142435,142436],{},"例如:",[324,142437,142438],{"href":142438,"rel":142439},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[28145],[44,142441,142443],{"id":142442},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,142445,142446,142449],{},[235,142447,142448],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,142451,142452,142455],{},[235,142453,142454],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,142457,142458],{},"页面必须有三个标签用来符合 SEO 优化",[1424,142460],{"style":130689,"src":142461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[27,142463,142464],{},[30,142465,142466],{},"title网站标题",[19,142468,142469,142472],{},[235,142470,142471],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,142474,73071],{},[1093,142476,142477,142480],{},[30,142478,142479],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[30,142481,142482],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[27,142484,142485],{"start":94},[30,142486,142487],{},"description网站描述",[19,142489,142490],{},"简要说明我们网站主要是做什么的",[19,142492,142493,142496],{},[235,142494,142495],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,142498,73071],{},[19,142500,142501],{},[71,142502,142503],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[27,142505,142506],{"start":1141},[30,142507,142508],{},"keywords关键词",[19,142510,142511],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,142513,73071],{},[19,142515,142516],{},[71,142517,142518],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,142520,142521],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,142523,142524],{},[235,142525,142526],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[27,142528,142529],{"start":1156},[30,142530,142531],{},"代码总结",[64,142533,142534],{"className":131580,"code":134937,"language":131582,"meta":69,"style":69},[71,142535,142536,142540,142554,142558],{"__ignoreMap":69},[74,142537,142538],{"class":76,"line":77},[74,142539,134944],{"class":144},[74,142541,142542,142544,142546,142548,142550,142552],{"class":76,"line":94},[74,142543,996],{"class":84},[74,142545,55892],{"class":55581},[74,142547,57767],{"class":1925},[74,142549,131],{"class":84},[74,142551,134957],{"class":190},[74,142553,55588],{"class":84},[74,142555,142556],{"class":76,"line":1141},[74,142557,134964],{"class":84},[74,142559,142560,142562,142564],{"class":76,"line":1156},[74,142561,56066],{"class":84},[74,142563,55892],{"class":55581},[74,142565,55588],{"class":84},[14,142567,142569],{"id":142568},"_154-项目公共部分制作","15.4 项目公共部分制作",[44,142571,142573],{"id":142572},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1424,142575],{"style":130689,"src":142576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[44,142578,142580],{"id":142579},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,142582,142583],{},"布局思路：",[1093,142585,142586,142589,142592,142614,142647],{},[30,142587,142588],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[30,142590,142591],{},"里面包含版心的盒子",[30,142593,142594,142595],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1093,142596,142597,142605,142611],{},[30,142598,142599,142600,25779,142602,142604],{},"1 号盒子 里面包含一个",[71,142601,1093],{},[71,142603,1093],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[30,142606,142607,142608,142610],{},"里面的内容是水平排列，所以需要给",[71,142609,30],{},"设置浮动",[30,142612,142613],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[30,142615,142616,142617],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1093,142618,142619,142633,142638],{},[30,142620,142621,142622,25779,142624,142626,142627,142629,142630,142632],{},"2 号盒子 里面包含一个",[71,142623,1093],{},[71,142625,1093],{},"包裹",[71,142628,30],{},"，中间的",[71,142631,1007],{},"可以用样式去设置，也可以用字符 |",[30,142634,142635,142636,142610],{},"里面内容水平排列，给",[71,142637,30],{},[30,142639,142640,142641,142643,142644,142646],{},"找到里面所有偶数的 ",[71,142642,30],{}," 设置样式（偶数的 ",[71,142645,30],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[30,142648,142649,142650],{},"需要用到字体图标",[1093,142651,142652,142658,142661,142664,142667],{},[30,142653,142654,142655],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[71,142656,142657],{},"arrow-icon",[30,142659,142660],{},"先要引入字体图片的资源",[30,142662,142663],{},"在样式里面利用 font-face 来进行声明",[30,142665,142666],{},"在伪元素的 content属性设置 图标的编码",[30,142668,142669],{},"给伪元素设置font-family属性",[19,142671,142672],{},"结构实例代码：",[64,142674,142676],{"className":130833,"code":142675,"language":130835,"meta":69,"style":69},"div::before {\n  content: \"\";\n  display: block;\n}\n",[71,142677,142678,142686,142696,142706],{"__ignoreMap":69},[74,142679,142680,142682,142684],{"class":76,"line":77},[74,142681,55892],{"class":55581},[74,142683,141834],{"class":1925},[74,142685,19851],{"class":84},[74,142687,142688,142690,142692,142694],{"class":76,"line":94},[74,142689,141841],{"class":134},[74,142691,55718],{"class":84},[74,142693,11931],{"class":190},[74,142695,1252],{"class":84},[74,142697,142698,142700,142702,142704],{"class":76,"line":1141},[74,142699,132449],{"class":134},[74,142701,55718],{"class":84},[74,142703,65150],{"class":134},[74,142705,1252],{"class":84},[74,142707,142708],{"class":76,"line":1156},[74,142709,1527],{"class":84},[19,142711,142712],{},"样式实例代码：",[64,142714,142715],{"className":130833,"code":142675,"language":130835,"meta":69,"style":69},[71,142716,142717,142725,142735,142745],{"__ignoreMap":69},[74,142718,142719,142721,142723],{"class":76,"line":77},[74,142720,55892],{"class":55581},[74,142722,141834],{"class":1925},[74,142724,19851],{"class":84},[74,142726,142727,142729,142731,142733],{"class":76,"line":94},[74,142728,141841],{"class":134},[74,142730,55718],{"class":84},[74,142732,11931],{"class":190},[74,142734,1252],{"class":84},[74,142736,142737,142739,142741,142743],{"class":76,"line":1141},[74,142738,132449],{"class":134},[74,142740,55718],{"class":84},[74,142742,65150],{"class":134},[74,142744,1252],{"class":84},[74,142746,142747],{"class":76,"line":1156},[74,142748,1527],{"class":84},[44,142750,142752],{"id":142751},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1093,142754,142755],{},[30,142756,142757],{},"header 盒子必须要有高度",[19,142759,142760,142761,142763,142764],{},"1 号盒子是 ",[71,142762,135845],{}," 标志定位，在正常开发过程中， ",[235,142765,142766,142767,142770],{},"logo的布局其实是有讲究的，需要进行 ",[71,142768,142769],{},"logoSEO","的优化 （★★★）",[1093,142772,142773,142781,142789,142816],{},[30,142774,142775,142777,142778,142780],{},[71,142776,135845],{}," 里面首先放一个 ",[71,142779,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[30,142782,142783,142785,142786,142788],{},[71,142784,10],{}," 里面再放一个链接，可以返回首页的，把 ",[71,142787,135845],{}," 的背景图片给链接即可",[30,142790,142791,142792],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1093,142793,142794,142809],{},[30,142795,142796,142797,142800,142801,142804,142805,142808],{},"方法1：",[71,142798,142799],{},"text-indent"," 移到盒子外面（",[71,142802,142803],{},"text-indent: -9999px",") ，然后 ",[71,142806,142807],{},"overflow:hidden"," ，淘宝的做法",[30,142810,142811,142812,142815],{},"方法2：直接给 ",[71,142813,142814],{},"font-size: 0;"," 就看不到文字了，京东的做法",[30,142817,142818,142819,142821,142822,142824],{},"最后给链接一个 ",[71,142820,55688],{}," 属性，这样鼠标放到 ",[71,142823,135845],{}," 上就可以看到提示文字了",[19,142826,142672],{},[64,142828,142829],{"className":131580,"code":136066,"language":131582,"meta":69,"style":69},[71,142830,142831],{"__ignoreMap":69},[74,142832,142833,142835,142837,142839,142841,142843,142845,142847,142849,142851,142853],{"class":76,"line":77},[74,142834,996],{"class":84},[74,142836,324],{"class":55581},[74,142838,65338],{"class":1925},[74,142840,131],{"class":84},[74,142842,136081],{"class":190},[74,142844,136084],{"class":1925},[74,142846,131],{"class":84},[74,142848,136089],{"class":190},[74,142850,136092],{"class":84},[74,142852,324],{"class":55581},[74,142854,55588],{"class":84},[19,142856,142712],{},[64,142858,142859],{"className":131580,"code":136066,"language":131582,"meta":69,"style":69},[71,142860,142861],{"__ignoreMap":69},[74,142862,142863,142865,142867,142869,142871,142873,142875,142877,142879,142881,142883],{"class":76,"line":77},[74,142864,996],{"class":84},[74,142866,324],{"class":55581},[74,142868,65338],{"class":1925},[74,142870,131],{"class":84},[74,142872,136081],{"class":190},[74,142874,136084],{"class":1925},[74,142876,131],{"class":84},[74,142878,136089],{"class":190},[74,142880,136092],{"class":84},[74,142882,324],{"class":55581},[74,142884,55588],{"class":84},[19,142886,142887,142888,142890],{},"2 号盒子是 ",[71,142889,135858],{}," 搜索模块定位",[1093,142892,142893,142896,142899,142902],{},[30,142894,142895],{},"search盒子利用定位的方式放在对应的位置",[30,142897,142898],{},"search盒子设置绝对定位，header盒子设置相对定位",[30,142900,142901],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[30,142903,142904],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,142906,142672],{},[64,142908,142909],{"className":130833,"code":136153,"language":130835,"meta":69,"style":69},[71,142910,142911,142933,142937,142947],{"__ignoreMap":69},[74,142912,142913,142915,142917,142919,142921,142923,142925,142927,142929,142931],{"class":76,"line":77},[74,142914,55892],{"class":55581},[74,142916,16714],{"class":84},[74,142918,19],{"class":55581},[74,142920,16714],{"class":84},[74,142922,10],{"class":55581},[74,142924,16714],{"class":84},[74,142926,1093],{"class":55581},[74,142928,16714],{"class":84},[74,142930,30],{"class":55581},[74,142932,19851],{"class":84},[74,142934,142935],{"class":76,"line":94},[74,142936,136182],{"class":144},[74,142938,142939,142941,142943,142945],{"class":76,"line":1141},[74,142940,132449],{"class":134},[74,142942,55718],{"class":84},[74,142944,65150],{"class":134},[74,142946,1252],{"class":84},[74,142948,142949],{"class":76,"line":1156},[74,142950,1527],{"class":84},[19,142952,142712],{},[64,142954,142955],{"className":130833,"code":136153,"language":130835,"meta":69,"style":69},[71,142956,142957,142979,142983,142993],{"__ignoreMap":69},[74,142958,142959,142961,142963,142965,142967,142969,142971,142973,142975,142977],{"class":76,"line":77},[74,142960,55892],{"class":55581},[74,142962,16714],{"class":84},[74,142964,19],{"class":55581},[74,142966,16714],{"class":84},[74,142968,10],{"class":55581},[74,142970,16714],{"class":84},[74,142972,1093],{"class":55581},[74,142974,16714],{"class":84},[74,142976,30],{"class":55581},[74,142978,19851],{"class":84},[74,142980,142981],{"class":76,"line":94},[74,142982,136182],{"class":144},[74,142984,142985,142987,142989,142991],{"class":76,"line":1141},[74,142986,132449],{"class":134},[74,142988,55718],{"class":84},[74,142990,65150],{"class":134},[74,142992,1252],{"class":84},[74,142994,142995],{"class":76,"line":1156},[74,142996,1527],{"class":84},[19,142998,142999],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,143001,143002,143003,143006],{},"3 号盒子是 ",[71,143004,143005],{},"hotwords"," 热词模块定位",[1093,143008,143009,143012,143015],{},[30,143010,143011],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[30,143013,143014],{},"给里面所有的a标签设置 左右10px的外边距",[30,143016,143017],{},"给第一个a标签设置文字变红色（#c81623）",[19,143019,142672],{},[64,143021,143023],{"className":130833,"code":143022,"language":130835,"meta":69,"style":69},"div {\n  margin: 0 auto;\n}\n",[71,143024,143025,143031,143043],{"__ignoreMap":69},[74,143026,143027,143029],{"class":76,"line":77},[74,143028,55892],{"class":55581},[74,143030,19851],{"class":84},[74,143032,143033,143035,143037,143039,143041],{"class":76,"line":94},[74,143034,74751],{"class":134},[74,143036,55718],{"class":84},[74,143038,277],{"class":134},[74,143040,55837],{"class":134},[74,143042,1252],{"class":84},[74,143044,143045],{"class":76,"line":1141},[74,143046,1527],{"class":84},[19,143048,142712],{},[64,143050,143051],{"className":130833,"code":143022,"language":130835,"meta":69,"style":69},[71,143052,143053,143059,143071],{"__ignoreMap":69},[74,143054,143055,143057],{"class":76,"line":77},[74,143056,55892],{"class":55581},[74,143058,19851],{"class":84},[74,143060,143061,143063,143065,143067,143069],{"class":76,"line":94},[74,143062,74751],{"class":134},[74,143064,55718],{"class":84},[74,143066,277],{"class":134},[74,143068,55837],{"class":134},[74,143070,1252],{"class":84},[74,143072,143073],{"class":76,"line":1141},[74,143074,1527],{"class":84},[19,143076,143077,143078,143081],{},"4 号盒子是 ",[71,143079,143080],{},"shopcar"," 购物车模块",[1093,143083,143084,143089,143092,143095],{},[30,143085,127616,143086,143088],{},[71,143087,143080],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[30,143090,143091],{},"count 统计部分用绝对定位做",[30,143093,143094],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[30,143096,143097],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,143099,142672],{},[64,143101,143102],{"className":130833,"code":136265,"language":130835,"meta":69,"style":69},[71,143103,143104,143108,143122,143126,143140,143144,143158,143162,143176,143180],{"__ignoreMap":69},[74,143105,143106],{"class":76,"line":77},[74,143107,136272],{"class":144},[74,143109,143110,143112,143114,143116,143118,143120],{"class":76,"line":94},[74,143111,136277],{"class":1925},[74,143113,84088],{"class":84},[74,143115,133193],{"class":134},[74,143117,55718],{"class":84},[74,143119,136286],{"class":134},[74,143121,133763],{"class":84},[74,143123,143124],{"class":76,"line":1141},[74,143125,136293],{"class":144},[74,143127,143128,143130,143132,143134,143136,143138],{"class":76,"line":1156},[74,143129,136298],{"class":1925},[74,143131,84088],{"class":84},[74,143133,133193],{"class":134},[74,143135,55718],{"class":84},[74,143137,59045],{"class":134},[74,143139,133763],{"class":84},[74,143141,143142],{"class":76,"line":1162},[74,143143,136313],{"class":144},[74,143145,143146,143148,143150,143152,143154,143156],{"class":76,"line":1176},[74,143147,136318],{"class":1925},[74,143149,84088],{"class":84},[74,143151,133193],{"class":134},[74,143153,55718],{"class":84},[74,143155,59112],{"class":134},[74,143157,133763],{"class":84},[74,143159,143160],{"class":76,"line":1182},[74,143161,136333],{"class":144},[74,143163,143164,143166,143168,143170,143172,143174],{"class":76,"line":1273},[74,143165,136338],{"class":1925},[74,143167,84088],{"class":84},[74,143169,133193],{"class":134},[74,143171,55718],{"class":84},[74,143173,90514],{"class":134},[74,143175,133763],{"class":84},[74,143177,143178],{"class":76,"line":1279},[74,143179,136353],{"class":144},[74,143181,143182,143184,143186,143188,143190,143192],{"class":76,"line":1291},[74,143183,136358],{"class":1925},[74,143185,84088],{"class":84},[74,143187,133193],{"class":134},[74,143189,55718],{"class":84},[74,143191,136367],{"class":134},[74,143193,133763],{"class":84},[19,143195,142712],{},[64,143197,143198],{"className":130833,"code":136265,"language":130835,"meta":69,"style":69},[71,143199,143200,143204,143218,143222,143236,143240,143254,143258,143272,143276],{"__ignoreMap":69},[74,143201,143202],{"class":76,"line":77},[74,143203,136272],{"class":144},[74,143205,143206,143208,143210,143212,143214,143216],{"class":76,"line":94},[74,143207,136277],{"class":1925},[74,143209,84088],{"class":84},[74,143211,133193],{"class":134},[74,143213,55718],{"class":84},[74,143215,136286],{"class":134},[74,143217,133763],{"class":84},[74,143219,143220],{"class":76,"line":1141},[74,143221,136293],{"class":144},[74,143223,143224,143226,143228,143230,143232,143234],{"class":76,"line":1156},[74,143225,136298],{"class":1925},[74,143227,84088],{"class":84},[74,143229,133193],{"class":134},[74,143231,55718],{"class":84},[74,143233,59045],{"class":134},[74,143235,133763],{"class":84},[74,143237,143238],{"class":76,"line":1162},[74,143239,136313],{"class":144},[74,143241,143242,143244,143246,143248,143250,143252],{"class":76,"line":1176},[74,143243,136318],{"class":1925},[74,143245,84088],{"class":84},[74,143247,133193],{"class":134},[74,143249,55718],{"class":84},[74,143251,59112],{"class":134},[74,143253,133763],{"class":84},[74,143255,143256],{"class":76,"line":1182},[74,143257,136333],{"class":144},[74,143259,143260,143262,143264,143266,143268,143270],{"class":76,"line":1273},[74,143261,136338],{"class":1925},[74,143263,84088],{"class":84},[74,143265,133193],{"class":134},[74,143267,55718],{"class":84},[74,143269,90514],{"class":134},[74,143271,133763],{"class":84},[74,143273,143274],{"class":76,"line":1279},[74,143275,136353],{"class":144},[74,143277,143278,143280,143282,143284,143286,143288],{"class":76,"line":1291},[74,143279,136358],{"class":1925},[74,143281,84088],{"class":84},[74,143283,133193],{"class":134},[74,143285,55718],{"class":84},[74,143287,136367],{"class":134},[74,143289,133763],{"class":84},[44,143291,143293,143294,143296],{"id":143292},"_1544-nav导航模块制作","15.4.4 ",[71,143295,57994],{},"导航模块制作",[1424,143298],{"style":130689,"src":143299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,143301,143302,143304],{},[71,143303,57994],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,143306,143307,143308],{},"1 号盒子左侧浮动，",[71,143309,143310],{},"dropdown",[1093,143312,143313,143323,143331,143337,143345,143355,143363,143374],{},[30,143314,143315,143316,105299,143319,143322],{},"1号盒子有讲究，根据相关性 里面包含 ",[71,143317,143318],{},".dt",[71,143320,143321],{},".dd"," 两个盒子",[30,143324,143325,143327,143328,143330],{},[71,143326,143318],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[71,143329,143321],{}," 挤到下面去了",[30,143332,143333,143334,143336],{},"给 ",[71,143335,143321],{}," 盒子设置宽度 和 高度，以及背景颜色",[30,143338,143333,143339,143341,143342,124518],{},[71,143340,143321],{}," 盒子里面定义 无序列表 （",[71,143343,143344],{},"ul > li > a",[30,143346,143347,143348,143350,143351,143354],{},"每个 ",[71,143349,30],{}," 都有一个高度（",[71,143352,143353],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[30,143356,143333,143357,143359,143360,124518],{},[71,143358,30],{}," 里面的a设置文字大小（",[71,143361,143362],{},"14px",[30,143364,143333,143365,143367,143368,143370,143371,143373],{},[71,143366,30],{}," 设置 ",[71,143369,131994],{},"，当鼠标移入的时候，让",[71,143372,30],{},"的背景变成白色，让里面的文字变成红色",[30,143375,143376,143378,143379,143381,143382,143384],{},[71,143377,30],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[71,143380,30],{},"的右侧，那么给",[71,143383,30],{},"设置相对定位",[19,143386,143387],{},"一定要注意相关性",[19,143389,142672],{},[64,143391,143392],{"className":130833,"code":142675,"language":130835,"meta":69,"style":69},[71,143393,143394,143402,143412,143422],{"__ignoreMap":69},[74,143395,143396,143398,143400],{"class":76,"line":77},[74,143397,55892],{"class":55581},[74,143399,141834],{"class":1925},[74,143401,19851],{"class":84},[74,143403,143404,143406,143408,143410],{"class":76,"line":94},[74,143405,141841],{"class":134},[74,143407,55718],{"class":84},[74,143409,11931],{"class":190},[74,143411,1252],{"class":84},[74,143413,143414,143416,143418,143420],{"class":76,"line":1141},[74,143415,132449],{"class":134},[74,143417,55718],{"class":84},[74,143419,65150],{"class":134},[74,143421,1252],{"class":84},[74,143423,143424],{"class":76,"line":1156},[74,143425,1527],{"class":84},[19,143427,142712],{},[64,143429,143430],{"className":130833,"code":142675,"language":130835,"meta":69,"style":69},[71,143431,143432,143440,143450,143460],{"__ignoreMap":69},[74,143433,143434,143436,143438],{"class":76,"line":77},[74,143435,55892],{"class":55581},[74,143437,141834],{"class":1925},[74,143439,19851],{"class":84},[74,143441,143442,143444,143446,143448],{"class":76,"line":94},[74,143443,141841],{"class":134},[74,143445,55718],{"class":84},[74,143447,11931],{"class":190},[74,143449,1252],{"class":84},[74,143451,143452,143454,143456,143458],{"class":76,"line":1141},[74,143453,132449],{"class":134},[74,143455,55718],{"class":84},[74,143457,65150],{"class":134},[74,143459,1252],{"class":84},[74,143461,143462],{"class":76,"line":1156},[74,143463,1527],{"class":84},[19,143465,143466],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,143468,143469,143470,143473],{},"2 号盒子左侧浮动，",[71,143471,143472],{},"navitems"," 导航栏组",[1093,143475,143476,143481,143490],{},[30,143477,143478,143479],{},"里面结构是 ",[71,143480,143344],{},[30,143482,143483,143484,143486,143487,143489],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[71,143485,324],{},"左右的",[71,143488,35164],{},"把两侧撑开",[30,143491,143492],{},"让文字垂直居中（行高等于高度）",[1424,143494],{"style":130689,"src":143495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,143497,143498],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,143500,142672],{},[64,143502,143504],{"className":130833,"code":143503,"language":130835,"meta":69,"style":69},".box {\n  float: left;\n}\n",[71,143505,143506,143512,143522],{"__ignoreMap":69},[74,143507,143508,143510],{"class":76,"line":77},[74,143509,134681],{"class":1925},[74,143511,19851],{"class":84},[74,143513,143514,143516,143518,143520],{"class":76,"line":94},[74,143515,135313],{"class":134},[74,143517,55718],{"class":84},[74,143519,28016],{"class":134},[74,143521,1252],{"class":84},[74,143523,143524],{"class":76,"line":1141},[74,143525,1527],{"class":84},[19,143527,142712],{},[64,143529,143530],{"className":130833,"code":143503,"language":130835,"meta":69,"style":69},[71,143531,143532,143538,143548],{"__ignoreMap":69},[74,143533,143534,143536],{"class":76,"line":77},[74,143535,134681],{"class":1925},[74,143537,19851],{"class":84},[74,143539,143540,143542,143544,143546],{"class":76,"line":94},[74,143541,135313],{"class":134},[74,143543,55718],{"class":84},[74,143545,28016],{"class":134},[74,143547,1252],{"class":84},[74,143549,143550],{"class":76,"line":1141},[74,143551,1527],{"class":84},[19,143553,143554],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1424,143556],{"style":130689,"src":143557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[64,143559,143560],{"className":130833,"code":134990,"language":130835,"meta":69,"style":69},[71,143561,143562,143568,143584],{"__ignoreMap":69},[74,143563,143564,143566],{"class":76,"line":77},[74,143565,55892],{"class":55581},[74,143567,19851],{"class":84},[74,143569,143570,143572,143574,143576,143578,143580,143582],{"class":76,"line":94},[74,143571,75177],{"class":134},[74,143573,55718],{"class":84},[74,143575,303],{"class":134},[74,143577,55773],{"class":80},[74,143579,55802],{"class":134},[74,143581,134225],{"class":134},[74,143583,1252],{"class":84},[74,143585,143586],{"class":76,"line":1141},[74,143587,1527],{"class":84},[44,143589,143591],{"id":143590},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1424,143593],{"style":130689,"src":143594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1093,143596,143597,143602,143607],{},[30,143598,143599,143601],{},[71,143600,136036],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[30,143603,143604,143606],{},[71,143605,136036],{}," 里面有一个大的版心",[30,143608,143609,143610,143613,143614],{},"版心里面包含 1 号盒子，",[71,143611,143612],{},"mod_service"," 是服务模块，mod 是模块的意思",[1093,143615,143616,143621,143634,143650,143655],{},[30,143617,143333,143618,143620],{},[71,143619,143612],{}," 设置高度（80px）和下边框",[30,143622,143623,143624,143627,143628,143630,143631,143633],{},"在里面定义 ",[71,143625,143626],{},"ul > li"," ,每个",[71,143629,30],{}," 宽度是300px 高度是 50px，给每个",[71,143632,30],{},"设置35px的左内边距",[30,143635,143636,143637,143639,143640,143642,143643,143645,143646,22689,143648,124518],{},"在每个",[71,143638,30],{},"里面，放一个 ",[71,143641,27189],{},"（里面放图标），一个",[71,143644,55892],{},"（里面放",[71,143647,55892],{},[71,143649,19],{},[30,143651,143333,143652,143654],{},[71,143653,27189],{},"设置浮动，让h5与这个div左右排列",[30,143656,143657],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,143659,142672],{},[64,143661,143663],{"className":130833,"code":143662,"language":130835,"meta":69,"style":69},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[71,143664,143665,143671,143683,143695,143722],{"__ignoreMap":69},[74,143666,143667,143669],{"class":76,"line":77},[74,143668,138590],{"class":1925},[74,143670,19851],{"class":84},[74,143672,143673,143675,143677,143679,143681],{"class":76,"line":94},[74,143674,74849],{"class":134},[74,143676,55718],{"class":84},[74,143678,786],{"class":134},[74,143680,55773],{"class":80},[74,143682,1252],{"class":84},[74,143684,143685,143687,143689,143691,143693],{"class":76,"line":1141},[74,143686,75069],{"class":134},[74,143688,55718],{"class":84},[74,143690,786],{"class":134},[74,143692,55773],{"class":80},[74,143694,1252],{"class":84},[74,143696,143697,143699,143701,143703,143705,143707,143709,143711,143714,143716,143718,143720],{"class":76,"line":1156},[74,143698,74892],{"class":134},[74,143700,55718],{"class":84},[74,143702,66007],{"class":134},[74,143704,85],{"class":84},[74,143706,138629],{"class":9495},[74,143708,17993],{"class":84},[74,143710,66017],{"class":134},[74,143712,143713],{"class":134}," -10",[74,143715,55773],{"class":80},[74,143717,138648],{"class":134},[74,143719,55773],{"class":80},[74,143721,1252],{"class":84},[74,143723,143724],{"class":76,"line":1162},[74,143725,1527],{"class":84},[19,143727,142712],{},[64,143729,143730],{"className":130833,"code":143662,"language":130835,"meta":69,"style":69},[71,143731,143732,143738,143750,143762,143788],{"__ignoreMap":69},[74,143733,143734,143736],{"class":76,"line":77},[74,143735,138590],{"class":1925},[74,143737,19851],{"class":84},[74,143739,143740,143742,143744,143746,143748],{"class":76,"line":94},[74,143741,74849],{"class":134},[74,143743,55718],{"class":84},[74,143745,786],{"class":134},[74,143747,55773],{"class":80},[74,143749,1252],{"class":84},[74,143751,143752,143754,143756,143758,143760],{"class":76,"line":1141},[74,143753,75069],{"class":134},[74,143755,55718],{"class":84},[74,143757,786],{"class":134},[74,143759,55773],{"class":80},[74,143761,1252],{"class":84},[74,143763,143764,143766,143768,143770,143772,143774,143776,143778,143780,143782,143784,143786],{"class":76,"line":1156},[74,143765,74892],{"class":134},[74,143767,55718],{"class":84},[74,143769,66007],{"class":134},[74,143771,85],{"class":84},[74,143773,138629],{"class":9495},[74,143775,17993],{"class":84},[74,143777,66017],{"class":134},[74,143779,143713],{"class":134},[74,143781,55773],{"class":80},[74,143783,138648],{"class":134},[74,143785,55773],{"class":80},[74,143787,1252],{"class":84},[74,143789,143790],{"class":76,"line":1162},[74,143791,1527],{"class":84},[19,143793,143794],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1093,143796,143797,143800,143806,143812,143824],{},[30,143798,143799],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[30,143801,143802,143803,124518],{},"里面的布局利用 自定义列表来实现（",[71,143804,143805],{},"dl > dt + dd",[30,143807,143333,143808,143811],{},[71,143809,143810],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[30,143813,143333,143814,143817,143818,22689,143820,143823],{},[71,143815,143816],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[71,143819,143816],{},[71,143821,143822],{},"dd","之间有些距离",[30,143825,143826],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,143828,142672],{},[64,143830,143831],{"className":130833,"code":143022,"language":130835,"meta":69,"style":69},[71,143832,143833,143839,143851],{"__ignoreMap":69},[74,143834,143835,143837],{"class":76,"line":77},[74,143836,55892],{"class":55581},[74,143838,19851],{"class":84},[74,143840,143841,143843,143845,143847,143849],{"class":76,"line":94},[74,143842,74751],{"class":134},[74,143844,55718],{"class":84},[74,143846,277],{"class":134},[74,143848,55837],{"class":134},[74,143850,1252],{"class":84},[74,143852,143853],{"class":76,"line":1141},[74,143854,1527],{"class":84},[19,143856,142712],{},[64,143858,143859],{"className":130833,"code":143022,"language":130835,"meta":69,"style":69},[71,143860,143861,143867,143879],{"__ignoreMap":69},[74,143862,143863,143865],{"class":76,"line":77},[74,143864,55892],{"class":55581},[74,143866,19851],{"class":84},[74,143868,143869,143871,143873,143875,143877],{"class":76,"line":94},[74,143870,74751],{"class":134},[74,143872,55718],{"class":84},[74,143874,277],{"class":134},[74,143876,55837],{"class":134},[74,143878,1252],{"class":84},[74,143880,143881],{"class":76,"line":1141},[74,143882,1527],{"class":84},[19,143884,143885],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1093,143887,143888,143897,143900,143911],{},[30,143889,143890,143891,143893,143894,143896],{},"分为上下两块，上面是 ",[71,143892,136053],{}," 友情链接，下面是 ",[71,143895,136046],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[30,143898,143899],{},"把内容分别复制到相应模块中",[30,143901,143333,143902,143904,143905,143907,143908,143910],{},[71,143903,136053],{}," 设置 15px 的下外边距，给",[71,143906,136053],{}," 里面 的 ",[71,143909,324],{}," 标签设置 左右 3px 的外边距",[30,143912,143913,143914,143916],{},"给",[71,143915,136046],{}," 设置 20px 的行高",[19,143918,142672],{},[64,143920,143921],{"className":130833,"code":143022,"language":130835,"meta":69,"style":69},[71,143922,143923,143929,143941],{"__ignoreMap":69},[74,143924,143925,143927],{"class":76,"line":77},[74,143926,55892],{"class":55581},[74,143928,19851],{"class":84},[74,143930,143931,143933,143935,143937,143939],{"class":76,"line":94},[74,143932,74751],{"class":134},[74,143934,55718],{"class":84},[74,143936,277],{"class":134},[74,143938,55837],{"class":134},[74,143940,1252],{"class":84},[74,143942,143943],{"class":76,"line":1141},[74,143944,1527],{"class":84},[19,143946,142712],{},[64,143948,143949],{"className":130833,"code":143022,"language":130835,"meta":69,"style":69},[71,143950,143951,143957,143969],{"__ignoreMap":69},[74,143952,143953,143955],{"class":76,"line":77},[74,143954,55892],{"class":55581},[74,143956,19851],{"class":84},[74,143958,143959,143961,143963,143965,143967],{"class":76,"line":94},[74,143960,74751],{"class":134},[74,143962,55718],{"class":84},[74,143964,277],{"class":134},[74,143966,55837],{"class":134},[74,143968,1252],{"class":84},[74,143970,143971],{"class":76,"line":1141},[74,143972,1527],{"class":84},[19,143974,143975],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5090,143977,143978],{},"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":69,"searchDepth":94,"depth":94,"links":143980},[143981,143982,143983,143990],{"id":142261,"depth":94,"text":142262},{"id":142280,"depth":94,"text":142281},{"id":142307,"depth":94,"text":142308,"children":143984},[143985,143986,143987,143988,143989],{"id":142311,"depth":1141,"text":142312},{"id":142324,"depth":1141,"text":142325},{"id":142348,"depth":1141,"text":142349},{"id":142370,"depth":1141,"text":142371},{"id":142442,"depth":1141,"text":142443},{"id":142568,"depth":94,"text":142569,"children":143991},[143992,143993,143994,143995,143997],{"id":142572,"depth":1141,"text":142573},{"id":142579,"depth":1141,"text":142580},{"id":142751,"depth":1141,"text":142752},{"id":143292,"depth":1141,"text":143996},"15.4.4 nav导航模块制作",{"id":143590,"depth":1141,"text":143591},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":142253,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":144004,"title":144005,"body":144006,"description":27656,"extension":5121,"meta":146408,"navigation":2362,"path":146409,"seo":146410,"stem":146411,"__hash__":146412},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":144007,"toc":146385},[144008,144011,144015,144019,144031,144034,144037,144040,144051,144053,144077,144079,144103,144108,144111,144113,144149,144151,144187,144190,144195,144198,144201,144204,144234,144241,144244,144254,144256,144290,144293,144327,144333,144350,144352,144388,144390,144426,144431,144456,144458,144484,144486,144510,144517,144520,144584,144586,144628,144630,144670,144677,144682,144684,144714,144716,144746,144750,144753,144760,144772,144774,144800,144802,144826,144829,144831,144855,144861,144871,144873,144903,144905,144935,144942,144983,144985,145021,145023,145059,145063,145066,145069,145072,145078,145083,145086,145109,145112,145136,145139,145163,145168,145171,145174,145177,145180,145183,145257,145259,145289,145291,145321,145324,145327,145359,145363,145367,145381,145390,145393,145398,145400,145494,145496,145590,145613,145615,145639,145641,145665,145672,145675,145685,145687,145711,145716,145724,145726,145756,145761,145801,145803,145829,145831,145857,145861,145864,145869,145872,145876,145884,145891,145899,145901,145931,145933,145963,145971,145974,145977,145979,146009,146011,146041,146044,146049,146051,146075,146077,146101,146104,146189,146191,146215,146217,146241,146245,146247,146271,146273,146307,146311,146325,146328,146333,146336,146341,146344,146374,146382],[10,144009,144005],{"id":144010},"_16-品优购项目下篇-主体与页面开发",[14,144012,144014],{"id":144013},"_161-项目主体模块制作","16.1 项目主体模块制作",[44,144016,144018],{"id":144017},"_1611-首页制作","16.1.1 首页制作",[19,144020,144021,144023,144024,144026,144027,144030],{},[235,144022,106339],{}," 主体模块是 ",[235,144025,78339],{}," 里面专有的，注意需要新的样式文件 ",[235,144028,144029],{},"index.css，"," 就不要写在common.css中了",[1424,144032],{"style":130689,"src":144033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1424,144035],{"style":130689,"src":144036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,144038,144039],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1093,144041,144042,144045,144048],{},[30,144043,144044],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[30,144046,144047],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[30,144049,144050],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,144052,142672],{},[64,144054,144055],{"className":130833,"code":143503,"language":130835,"meta":69,"style":69},[71,144056,144057,144063,144073],{"__ignoreMap":69},[74,144058,144059,144061],{"class":76,"line":77},[74,144060,134681],{"class":1925},[74,144062,19851],{"class":84},[74,144064,144065,144067,144069,144071],{"class":76,"line":94},[74,144066,135313],{"class":134},[74,144068,55718],{"class":84},[74,144070,28016],{"class":134},[74,144072,1252],{"class":84},[74,144074,144075],{"class":76,"line":1141},[74,144076,1527],{"class":84},[19,144078,142712],{},[64,144080,144081],{"className":130833,"code":143503,"language":130835,"meta":69,"style":69},[71,144082,144083,144089,144099],{"__ignoreMap":69},[74,144084,144085,144087],{"class":76,"line":77},[74,144086,134681],{"class":1925},[74,144088,19851],{"class":84},[74,144090,144091,144093,144095,144097],{"class":76,"line":94},[74,144092,135313],{"class":134},[74,144094,55718],{"class":84},[74,144096,28016],{"class":134},[74,144098,1252],{"class":84},[74,144100,144101],{"class":76,"line":1141},[74,144102,1527],{"class":84},[27,144104,144105],{},[30,144106,144107],{},"左侧focus模块制作",[1424,144109],{"style":130689,"src":144110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,144112,142672],{},[64,144114,144115],{"className":130833,"code":132156,"language":130835,"meta":69,"style":69},[71,144116,144117,144125,144135,144145],{"__ignoreMap":69},[74,144118,144119,144121,144123],{"class":76,"line":77},[74,144120,58102],{"class":55581},[74,144122,66181],{"class":1925},[74,144124,19851],{"class":84},[74,144126,144127,144129,144131,144133],{"class":76,"line":94},[74,144128,132171],{"class":134},[74,144130,55718],{"class":84},[74,144132,59170],{"class":134},[74,144134,1252],{"class":84},[74,144136,144137,144139,144141,144143],{"class":76,"line":1141},[74,144138,75079],{"class":134},[74,144140,55718],{"class":84},[74,144142,59018],{"class":134},[74,144144,1252],{"class":84},[74,144146,144147],{"class":76,"line":1156},[74,144148,1527],{"class":84},[19,144150,142712],{},[64,144152,144153],{"className":130833,"code":132156,"language":130835,"meta":69,"style":69},[71,144154,144155,144163,144173,144183],{"__ignoreMap":69},[74,144156,144157,144159,144161],{"class":76,"line":77},[74,144158,58102],{"class":55581},[74,144160,66181],{"class":1925},[74,144162,19851],{"class":84},[74,144164,144165,144167,144169,144171],{"class":76,"line":94},[74,144166,132171],{"class":134},[74,144168,55718],{"class":84},[74,144170,59170],{"class":134},[74,144172,1252],{"class":84},[74,144174,144175,144177,144179,144181],{"class":76,"line":1141},[74,144176,75079],{"class":134},[74,144178,55718],{"class":84},[74,144180,59018],{"class":134},[74,144182,1252],{"class":84},[74,144184,144185],{"class":76,"line":1156},[74,144186,1527],{"class":84},[19,144188,144189],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[27,144191,144192],{"start":94},[30,144193,144194],{},"右侧newsflash模块制作",[1424,144196],{"style":130689,"src":144197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,144199,144200],{},"右侧的模块 分为上中下三个盒子",[19,144202,144203],{},"结构代码：",[64,144205,144206],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},[71,144207,144208],{"__ignoreMap":69},[74,144209,144210,144212,144214,144216,144218,144220,144222,144224,144226,144228,144230,144232],{"class":76,"line":77},[74,144211,996],{"class":84},[74,144213,1424],{"class":55581},[74,144215,59520],{"class":1925},[74,144217,131],{"class":84},[74,144219,138350],{"class":190},[74,144221,59528],{"class":1925},[74,144223,131],{"class":84},[74,144225,138357],{"class":190},[74,144227,138360],{"class":1925},[74,144229,131],{"class":84},[74,144231,138365],{"class":190},[74,144233,55588],{"class":84},[19,144235,144236,144237,144240],{},"1 号盒子为 ",[71,144238,144239],{},"news"," 新闻模块 高度为 165px",[1424,144242],{"style":130689,"src":144243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,144245,144246,144247,144250,144251],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[71,144248,144249],{},"news-hd","，下面是 ",[71,144252,144253],{},"news-bd",[19,144255,144203],{},[64,144257,144258],{"className":131580,"code":134937,"language":131582,"meta":69,"style":69},[71,144259,144260,144264,144278,144282],{"__ignoreMap":69},[74,144261,144262],{"class":76,"line":77},[74,144263,134944],{"class":144},[74,144265,144266,144268,144270,144272,144274,144276],{"class":76,"line":94},[74,144267,996],{"class":84},[74,144269,55892],{"class":55581},[74,144271,57767],{"class":1925},[74,144273,131],{"class":84},[74,144275,134957],{"class":190},[74,144277,55588],{"class":84},[74,144279,144280],{"class":76,"line":1141},[74,144281,134964],{"class":84},[74,144283,144284,144286,144288],{"class":76,"line":1156},[74,144285,56066],{"class":84},[74,144287,55892],{"class":55581},[74,144289,55588],{"class":84},[19,144291,144292],{},"样式代码：",[64,144294,144295],{"className":131580,"code":134937,"language":131582,"meta":69,"style":69},[71,144296,144297,144301,144315,144319],{"__ignoreMap":69},[74,144298,144299],{"class":76,"line":77},[74,144300,134944],{"class":144},[74,144302,144303,144305,144307,144309,144311,144313],{"class":76,"line":94},[74,144304,996],{"class":84},[74,144306,55892],{"class":55581},[74,144308,57767],{"class":1925},[74,144310,131],{"class":84},[74,144312,134957],{"class":190},[74,144314,55588],{"class":84},[74,144316,144317],{"class":76,"line":1141},[74,144318,134964],{"class":84},[74,144320,144321,144323,144325],{"class":76,"line":1156},[74,144322,56066],{"class":84},[74,144324,55892],{"class":55581},[74,144326,55588],{"class":84},[19,144328,144329,144330,144332],{},"上面是",[71,144331,144249],{},"，设置高度是 33px，设置下边框",[1093,144334,144335,144341],{},[30,144336,144337,144338,144340],{},"里面放一个",[71,144339,27189],{}," 标题",[30,144342,144343,144344,144346,144347,144349],{},"放一个a",[71,144345,106974],{},"，内容是 更多，然后让 ",[71,144348,324],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,144351,144203],{},[64,144353,144354],{"className":130833,"code":142675,"language":130835,"meta":69,"style":69},[71,144355,144356,144364,144374,144384],{"__ignoreMap":69},[74,144357,144358,144360,144362],{"class":76,"line":77},[74,144359,55892],{"class":55581},[74,144361,141834],{"class":1925},[74,144363,19851],{"class":84},[74,144365,144366,144368,144370,144372],{"class":76,"line":94},[74,144367,141841],{"class":134},[74,144369,55718],{"class":84},[74,144371,11931],{"class":190},[74,144373,1252],{"class":84},[74,144375,144376,144378,144380,144382],{"class":76,"line":1141},[74,144377,132449],{"class":134},[74,144379,55718],{"class":84},[74,144381,65150],{"class":134},[74,144383,1252],{"class":84},[74,144385,144386],{"class":76,"line":1156},[74,144387,1527],{"class":84},[19,144389,144292],{},[64,144391,144392],{"className":130833,"code":142675,"language":130835,"meta":69,"style":69},[71,144393,144394,144402,144412,144422],{"__ignoreMap":69},[74,144395,144396,144398,144400],{"class":76,"line":77},[74,144397,55892],{"class":55581},[74,144399,141834],{"class":1925},[74,144401,19851],{"class":84},[74,144403,144404,144406,144408,144410],{"class":76,"line":94},[74,144405,141841],{"class":134},[74,144407,55718],{"class":84},[74,144409,11931],{"class":190},[74,144411,1252],{"class":84},[74,144413,144414,144416,144418,144420],{"class":76,"line":1141},[74,144415,132449],{"class":134},[74,144417,55718],{"class":84},[74,144419,65150],{"class":134},[74,144421,1252],{"class":84},[74,144423,144424],{"class":76,"line":1156},[74,144425,1527],{"class":84},[19,144427,144428,144429],{},"下面是",[71,144430,144253],{},[1093,144432,144433,144441],{},[30,144434,144435,144436,105299,144438,144440],{},"里面包含 ",[71,144437,1093],{},[71,144439,30],{}," 还有链接",[30,144442,143913,144443,144445,144446,144448,144449,144452,144453],{},[71,144444,30],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[71,144447,135499],{}," 2.设置 ",[71,144450,144451],{},"white-space: nowrap;"," 3. 设置 ",[71,144454,144455],{},"text-overflow: ellipsis;",[19,144457,144203],{},[64,144459,144461],{"className":130833,"code":144460,"language":130835,"meta":69,"style":69},"div {\n  overflow: hidden;\n}\n",[71,144462,144463,144469,144480],{"__ignoreMap":69},[74,144464,144465,144467],{"class":76,"line":77},[74,144466,55892],{"class":55581},[74,144468,19851],{"class":84},[74,144470,144471,144474,144476,144478],{"class":76,"line":94},[74,144472,144473],{"class":134},"  overflow",[74,144475,55718],{"class":84},[74,144477,65995],{"class":134},[74,144479,1252],{"class":84},[74,144481,144482],{"class":76,"line":1141},[74,144483,1527],{"class":84},[19,144485,144292],{},[64,144487,144488],{"className":130833,"code":144460,"language":130835,"meta":69,"style":69},[71,144489,144490,144496,144506],{"__ignoreMap":69},[74,144491,144492,144494],{"class":76,"line":77},[74,144493,55892],{"class":55581},[74,144495,19851],{"class":84},[74,144497,144498,144500,144502,144504],{"class":76,"line":94},[74,144499,144473],{"class":134},[74,144501,55718],{"class":84},[74,144503,65995],{"class":134},[74,144505,1252],{"class":84},[74,144507,144508],{"class":76,"line":1141},[74,144509,1527],{"class":84},[19,144511,144512,144513,144516],{},"2 号盒子为 ",[71,144514,144515],{},"lifeservice"," 生活服务模块 高度为 209px",[1424,144518],{"style":130689,"src":144519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1093,144521,144522,144525,144535,144559,144570],{},[30,144523,144524],{},"设置边框（左右下边框）",[30,144526,144527,144528,144531,144532,144534],{},"里面的内容 是 ",[71,144529,144530],{},"ul > 12*li","，给",[71,144533,30],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[30,144536,144537,144538],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1093,144539,144540,144545,144554],{},[30,144541,144542,144544],{},[71,144543,144515],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[30,144546,144547,144548,144550,144551,144553],{},"可以让 ",[71,144549,144515],{}," 里面的 ",[71,144552,1093],{}," 宽度为 252，就可以装的下 4 个 小 li",[30,144555,144556,144558],{},[71,144557,144515],{}," 盒子 overflow 隐藏多余的部分就可以了",[30,144560,120748,144561,144563,144564,144566,144567,144569],{},[71,144562,30],{}," 里面放一个 ",[71,144565,527],{},"（里面放图标），下面的文本用 ",[71,144568,19],{}," 标签包裹",[30,144571,143333,144572,144574,144575,144577,144578,143367,144580,144583],{},[71,144573,527],{}," 设置 24px宽和28px的高（注意 ",[71,144576,527],{}," 是行内元素， 转成行内块），给 ",[71,144579,30],{},[71,144581,144582],{},"text-align:center"," 让里面内容居中显示",[19,144585,144203],{},[64,144587,144589],{"className":130833,"code":144588,"language":130835,"meta":69,"style":69},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[71,144590,144591,144609,144614,144624],{"__ignoreMap":69},[74,144592,144593,144595,144597,144599,144601,144603,144605,144607],{"class":76,"line":77},[74,144594,74],{"class":55581},[74,144596,16714],{"class":84},[74,144598,324],{"class":55581},[74,144600,16714],{"class":84},[74,144602,27833],{"class":55581},[74,144604,16714],{"class":84},[74,144606,235],{"class":55581},[74,144608,19851],{"class":84},[74,144610,144611],{"class":76,"line":94},[74,144612,144613],{"class":144},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[74,144615,144616,144618,144620,144622],{"class":76,"line":1141},[74,144617,132449],{"class":134},[74,144619,55718],{"class":84},[74,144621,132511],{"class":134},[74,144623,1252],{"class":84},[74,144625,144626],{"class":76,"line":1156},[74,144627,1527],{"class":84},[19,144629,144292],{},[64,144631,144632],{"className":130833,"code":144588,"language":130835,"meta":69,"style":69},[71,144633,144634,144652,144656,144666],{"__ignoreMap":69},[74,144635,144636,144638,144640,144642,144644,144646,144648,144650],{"class":76,"line":77},[74,144637,74],{"class":55581},[74,144639,16714],{"class":84},[74,144641,324],{"class":55581},[74,144643,16714],{"class":84},[74,144645,27833],{"class":55581},[74,144647,16714],{"class":84},[74,144649,235],{"class":55581},[74,144651,19851],{"class":84},[74,144653,144654],{"class":76,"line":94},[74,144655,144613],{"class":144},[74,144657,144658,144660,144662,144664],{"class":76,"line":1141},[74,144659,132449],{"class":134},[74,144661,55718],{"class":84},[74,144663,132511],{"class":134},[74,144665,1252],{"class":84},[74,144667,144668],{"class":76,"line":1156},[74,144669,1527],{"class":84},[19,144671,144672,144673,144676],{},"3 号盒子为 ",[71,144674,144675],{},"bargain"," 特价商品",[1093,144678,144679],{},[30,144680,144681],{},"这个比较简单，直接插入一张图片即可",[19,144683,144203],{},[64,144685,144686],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},[71,144687,144688],{"__ignoreMap":69},[74,144689,144690,144692,144694,144696,144698,144700,144702,144704,144706,144708,144710,144712],{"class":76,"line":77},[74,144691,996],{"class":84},[74,144693,1424],{"class":55581},[74,144695,59520],{"class":1925},[74,144697,131],{"class":84},[74,144699,138350],{"class":190},[74,144701,59528],{"class":1925},[74,144703,131],{"class":84},[74,144705,138357],{"class":190},[74,144707,138360],{"class":1925},[74,144709,131],{"class":84},[74,144711,138365],{"class":190},[74,144713,55588],{"class":84},[19,144715,144292],{},[64,144717,144718],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},[71,144719,144720],{"__ignoreMap":69},[74,144721,144722,144724,144726,144728,144730,144732,144734,144736,144738,144740,144742,144744],{"class":76,"line":77},[74,144723,996],{"class":84},[74,144725,1424],{"class":55581},[74,144727,59520],{"class":1925},[74,144729,131],{"class":84},[74,144731,138350],{"class":190},[74,144733,59528],{"class":1925},[74,144735,131],{"class":84},[74,144737,138357],{"class":190},[74,144739,138360],{"class":1925},[74,144741,131],{"class":84},[74,144743,138365],{"class":190},[74,144745,55588],{"class":84},[44,144747,144749],{"id":144748},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1424,144751],{"style":130689,"src":144752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,144754,144755,144756,144759],{},"大盒子 ",[71,144757,144758],{},"recom"," 推荐模块 recommend",[1093,144761,144762],{},[30,144763,144764,144765,144767,144768,144771],{},"给这个 ",[71,144766,144758],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[71,144769,144770],{},"#ebebeb","），设置距离上边 12px",[19,144773,144203],{},[64,144775,144777],{"className":130833,"code":144776,"language":130835,"meta":69,"style":69},"div {\n  background-color: #f0f0f0;\n}\n",[71,144778,144779,144785,144796],{"__ignoreMap":69},[74,144780,144781,144783],{"class":76,"line":77},[74,144782,55892],{"class":55581},[74,144784,19851],{"class":84},[74,144786,144787,144789,144791,144794],{"class":76,"line":94},[74,144788,75159],{"class":134},[74,144790,55718],{"class":84},[74,144792,144793],{"class":134},"#f0f0f0",[74,144795,1252],{"class":84},[74,144797,144798],{"class":76,"line":1141},[74,144799,1527],{"class":84},[19,144801,144292],{},[64,144803,144804],{"className":130833,"code":144776,"language":130835,"meta":69,"style":69},[71,144805,144806,144812,144822],{"__ignoreMap":69},[74,144807,144808,144810],{"class":76,"line":77},[74,144809,55892],{"class":55581},[74,144811,19851],{"class":84},[74,144813,144814,144816,144818,144820],{"class":76,"line":94},[74,144815,75159],{"class":134},[74,144817,55718],{"class":84},[74,144819,144793],{"class":134},[74,144821,1252],{"class":84},[74,144823,144824],{"class":76,"line":1141},[74,144825,1527],{"class":84},[19,144827,144828],{},"里面包含 2 个盒子， 浮动即可",[19,144830,144203],{},[64,144832,144833],{"className":130833,"code":143503,"language":130835,"meta":69,"style":69},[71,144834,144835,144841,144851],{"__ignoreMap":69},[74,144836,144837,144839],{"class":76,"line":77},[74,144838,134681],{"class":1925},[74,144840,19851],{"class":84},[74,144842,144843,144845,144847,144849],{"class":76,"line":94},[74,144844,135313],{"class":134},[74,144846,55718],{"class":84},[74,144848,28016],{"class":134},[74,144850,1252],{"class":84},[74,144852,144853],{"class":76,"line":1141},[74,144854,1527],{"class":84},[19,144856,144857,144858],{},"1 号盒子 ",[71,144859,144860],{},"recom_hd",[1093,144862,144863,144866],{},[30,144864,144865],{},"设置宽度205px，高度163px",[30,144867,144337,144868,144870],{},[71,144869,1424],{},"标签，插入图片即可",[19,144872,144203],{},[64,144874,144875],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},[71,144876,144877],{"__ignoreMap":69},[74,144878,144879,144881,144883,144885,144887,144889,144891,144893,144895,144897,144899,144901],{"class":76,"line":77},[74,144880,996],{"class":84},[74,144882,1424],{"class":55581},[74,144884,59520],{"class":1925},[74,144886,131],{"class":84},[74,144888,138350],{"class":190},[74,144890,59528],{"class":1925},[74,144892,131],{"class":84},[74,144894,138357],{"class":190},[74,144896,138360],{"class":1925},[74,144898,131],{"class":84},[74,144900,138365],{"class":190},[74,144902,55588],{"class":84},[19,144904,144292],{},[64,144906,144907],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},[71,144908,144909],{"__ignoreMap":69},[74,144910,144911,144913,144915,144917,144919,144921,144923,144925,144927,144929,144931,144933],{"class":76,"line":77},[74,144912,996],{"class":84},[74,144914,1424],{"class":55581},[74,144916,59520],{"class":1925},[74,144918,131],{"class":84},[74,144920,138350],{"class":190},[74,144922,59528],{"class":1925},[74,144924,131],{"class":84},[74,144926,138357],{"class":190},[74,144928,138360],{"class":1925},[74,144930,131],{"class":84},[74,144932,138365],{"class":190},[74,144934,55588],{"class":84},[19,144936,144937,144938,144941],{},"2 号盒子 ",[71,144939,144940],{},"recom_bd"," ，注意里面的小竖线",[1093,144943,144944,144955,144958,144963,144968],{},[30,144945,144946,144947,144949,144950,144952,144953],{},"右侧结构里面放 ",[71,144948,1093],{}," 包含 4个 ",[71,144951,30],{},"，每个li里面包含一个",[71,144954,1424],{},[30,144956,144957],{},"直接利用切片工具把里面的内容当成一张图片",[30,144959,143333,144960,144962],{},[71,144961,30],{}," 设置浮动",[30,144964,143333,144965,144967],{},[71,144966,1424],{}," 设置宽高，宽度 248px，高度 163px",[30,144969,144970,144971,144531,144974,144976,144977,144979,144980],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[71,144972,144973],{},"top 10px",[71,144975,30],{},"设置相对定位（注意，最后一个",[71,144978,30],{},"不用设置伪元素），可以利用 ",[71,144981,144982],{},"nth-child(-n+3){...}",[19,144984,144203],{},[64,144986,144987],{"className":130833,"code":142675,"language":130835,"meta":69,"style":69},[71,144988,144989,144997,145007,145017],{"__ignoreMap":69},[74,144990,144991,144993,144995],{"class":76,"line":77},[74,144992,55892],{"class":55581},[74,144994,141834],{"class":1925},[74,144996,19851],{"class":84},[74,144998,144999,145001,145003,145005],{"class":76,"line":94},[74,145000,141841],{"class":134},[74,145002,55718],{"class":84},[74,145004,11931],{"class":190},[74,145006,1252],{"class":84},[74,145008,145009,145011,145013,145015],{"class":76,"line":1141},[74,145010,132449],{"class":134},[74,145012,55718],{"class":84},[74,145014,65150],{"class":134},[74,145016,1252],{"class":84},[74,145018,145019],{"class":76,"line":1156},[74,145020,1527],{"class":84},[19,145022,144292],{},[64,145024,145025],{"className":130833,"code":142675,"language":130835,"meta":69,"style":69},[71,145026,145027,145035,145045,145055],{"__ignoreMap":69},[74,145028,145029,145031,145033],{"class":76,"line":77},[74,145030,55892],{"class":55581},[74,145032,141834],{"class":1925},[74,145034,19851],{"class":84},[74,145036,145037,145039,145041,145043],{"class":76,"line":94},[74,145038,141841],{"class":134},[74,145040,55718],{"class":84},[74,145042,11931],{"class":190},[74,145044,1252],{"class":84},[74,145046,145047,145049,145051,145053],{"class":76,"line":1141},[74,145048,132449],{"class":134},[74,145050,55718],{"class":84},[74,145052,65150],{"class":134},[74,145054,1252],{"class":84},[74,145056,145057],{"class":76,"line":1156},[74,145058,1527],{"class":84},[44,145060,145062],{"id":145061},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1424,145064],{"style":130689,"src":145065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,145067,145068],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,145070,145071],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,145073,145074,145077],{},[71,145075,145076],{},"box_hd"," 制作",[19,145079,144857,145080,145082],{},[71,145081,145076],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1424,145084],{"style":130689,"src":145085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1093,145087,145088,145093,145098,145101],{},[30,145089,145090,145092],{},[71,145091,145076],{}," 给 30px 的高度，2个像素的下边框",[30,145094,145095,145096],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[71,145097,143344],{},[30,145099,145100],{},"左侧盒左浮动，右侧盒子右浮动",[30,145102,145103,145105,145106,145108],{},[71,145104,324],{},"标签之间的距离用左右的",[71,145107,35164],{},"撑开即可",[19,145110,145111],{},"结构代码",[64,145113,145114],{"className":130833,"code":143503,"language":130835,"meta":69,"style":69},[71,145115,145116,145122,145132],{"__ignoreMap":69},[74,145117,145118,145120],{"class":76,"line":77},[74,145119,134681],{"class":1925},[74,145121,19851],{"class":84},[74,145123,145124,145126,145128,145130],{"class":76,"line":94},[74,145125,135313],{"class":134},[74,145127,55718],{"class":84},[74,145129,28016],{"class":134},[74,145131,1252],{"class":84},[74,145133,145134],{"class":76,"line":1141},[74,145135,1527],{"class":84},[19,145137,145138],{},"样式代码",[64,145140,145141],{"className":130833,"code":143503,"language":130835,"meta":69,"style":69},[71,145142,145143,145149,145159],{"__ignoreMap":69},[74,145144,145145,145147],{"class":76,"line":77},[74,145146,134681],{"class":1925},[74,145148,19851],{"class":84},[74,145150,145151,145153,145155,145157],{"class":76,"line":94},[74,145152,135313],{"class":134},[74,145154,55718],{"class":84},[74,145156,28016],{"class":134},[74,145158,1252],{"class":84},[74,145160,145161],{"class":76,"line":1141},[74,145162,1527],{"class":84},[19,145164,145165,145077],{},[71,145166,145167],{},"box_bd",[19,145169,145170],{},"2 号盒子 box_bd，不要给高度",[1424,145172],{"style":130689,"src":145173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,145175,145176],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,145178,145179],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,145181,145182],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1093,145184,145185,145197,145213],{},[30,145186,145187,145189,145190,145193,145194,145196],{},[71,145188,145167],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[71,145191,145192],{},"tab_content","，在",[71,145195,145192],{}," 里面包裹tab选项卡对应的内容",[30,145198,145199,145200,145203,145204,145206,145207,145209,145210,145212],{},"内容被一个大盒子包裹（",[71,145201,145202],{},"tab_list_item","），里面是 ",[71,145205,1093],{}," 包裹 5个 ",[71,145208,30],{},"，每个",[71,145211,30],{},"设置对应的宽度，然后设置浮动",[30,145214,145215,145216,145218,145219,145221,145222],{},"而这5个",[71,145217,30],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[71,145220,30],{},"设置",[1093,145223,145224,145242,145245],{},[30,145225,145226,145227,145229,145230,145232,145233,145235,145236,145238,145239,145241],{},"第一个小 ",[71,145228,30],{}," 分为上下结构，上面是 ",[71,145231,1093],{}," 包裹 ",[71,145234,30],{}," ，",[71,145237,30],{},"里面包裹 ",[71,145240,324],{},"，下面插入一张图片",[30,145243,145244],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[30,145246,145247,145248,145250,145251,145253,145254,145256],{},"后面的小 ",[71,145249,30],{}," 里面先放一个",[71,145252,324],{},"标签，然后在",[71,145255,324],{},"标签里面插入图片即可",[19,145258,145111],{},[64,145260,145261],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},[71,145262,145263],{"__ignoreMap":69},[74,145264,145265,145267,145269,145271,145273,145275,145277,145279,145281,145283,145285,145287],{"class":76,"line":77},[74,145266,996],{"class":84},[74,145268,1424],{"class":55581},[74,145270,59520],{"class":1925},[74,145272,131],{"class":84},[74,145274,138350],{"class":190},[74,145276,59528],{"class":1925},[74,145278,131],{"class":84},[74,145280,138357],{"class":190},[74,145282,138360],{"class":1925},[74,145284,131],{"class":84},[74,145286,138365],{"class":190},[74,145288,55588],{"class":84},[19,145290,145138],{},[64,145292,145293],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},[71,145294,145295],{"__ignoreMap":69},[74,145296,145297,145299,145301,145303,145305,145307,145309,145311,145313,145315,145317,145319],{"class":76,"line":77},[74,145298,996],{"class":84},[74,145300,1424],{"class":55581},[74,145302,59520],{"class":1925},[74,145304,131],{"class":84},[74,145306,138350],{"class":190},[74,145308,59528],{"class":1925},[74,145310,131],{"class":84},[74,145312,138357],{"class":190},[74,145314,138360],{"class":1925},[74,145316,131],{"class":84},[74,145318,138365],{"class":190},[74,145320,55588],{"class":84},[19,145322,145323],{},"tab栏切换需求！！！！！！介绍：",[1424,145325],{"style":130689,"src":145326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1093,145328,145329,145337,145343,145346],{},[30,145330,145331,145334,145335],{},[71,145332,145333],{},"tab","栏的布局是 ",[71,145336,143344],{},[30,145338,145339,145340,145342],{},"有多少个",[71,145341,145333],{},"选项卡，那么对应就有多少个内容",[30,145344,145345],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[30,145347,145348,145349,145352,145353,145355,145356,145358],{},"等后面我们学习了",[71,145350,145351],{},"js","之后，我们就会配合",[71,145354,145351],{},"来实现，",[71,145357,145333],{},"栏的切换",[14,145360,145362],{"id":145361},"_162-列表制作","16.2 列表制作",[44,145364,145366],{"id":145365},"_1621-准备工作","16.2.1 准备工作",[1093,145368,145369,145372,145375,145378],{},[30,145370,145371],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[30,145373,145374],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[30,145376,145377],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[30,145379,145380],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[44,145382,145384,145385,105299,145387,145389],{"id":145383},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[71,145386,135838],{},[71,145388,57994],{}," 修改",[1424,145391],{"style":130689,"src":145392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1093,145394,145395],{},[30,145396,145397],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,145399,144203],{},[64,145401,145402],{"className":130833,"code":136265,"language":130835,"meta":69,"style":69},[71,145403,145404,145408,145422,145426,145440,145444,145458,145462,145476,145480],{"__ignoreMap":69},[74,145405,145406],{"class":76,"line":77},[74,145407,136272],{"class":144},[74,145409,145410,145412,145414,145416,145418,145420],{"class":76,"line":94},[74,145411,136277],{"class":1925},[74,145413,84088],{"class":84},[74,145415,133193],{"class":134},[74,145417,55718],{"class":84},[74,145419,136286],{"class":134},[74,145421,133763],{"class":84},[74,145423,145424],{"class":76,"line":1141},[74,145425,136293],{"class":144},[74,145427,145428,145430,145432,145434,145436,145438],{"class":76,"line":1156},[74,145429,136298],{"class":1925},[74,145431,84088],{"class":84},[74,145433,133193],{"class":134},[74,145435,55718],{"class":84},[74,145437,59045],{"class":134},[74,145439,133763],{"class":84},[74,145441,145442],{"class":76,"line":1162},[74,145443,136313],{"class":144},[74,145445,145446,145448,145450,145452,145454,145456],{"class":76,"line":1176},[74,145447,136318],{"class":1925},[74,145449,84088],{"class":84},[74,145451,133193],{"class":134},[74,145453,55718],{"class":84},[74,145455,59112],{"class":134},[74,145457,133763],{"class":84},[74,145459,145460],{"class":76,"line":1182},[74,145461,136333],{"class":144},[74,145463,145464,145466,145468,145470,145472,145474],{"class":76,"line":1273},[74,145465,136338],{"class":1925},[74,145467,84088],{"class":84},[74,145469,133193],{"class":134},[74,145471,55718],{"class":84},[74,145473,90514],{"class":134},[74,145475,133763],{"class":84},[74,145477,145478],{"class":76,"line":1279},[74,145479,136353],{"class":144},[74,145481,145482,145484,145486,145488,145490,145492],{"class":76,"line":1291},[74,145483,136358],{"class":1925},[74,145485,84088],{"class":84},[74,145487,133193],{"class":134},[74,145489,55718],{"class":84},[74,145491,136367],{"class":134},[74,145493,133763],{"class":84},[19,145495,144292],{},[64,145497,145498],{"className":130833,"code":136265,"language":130835,"meta":69,"style":69},[71,145499,145500,145504,145518,145522,145536,145540,145554,145558,145572,145576],{"__ignoreMap":69},[74,145501,145502],{"class":76,"line":77},[74,145503,136272],{"class":144},[74,145505,145506,145508,145510,145512,145514,145516],{"class":76,"line":94},[74,145507,136277],{"class":1925},[74,145509,84088],{"class":84},[74,145511,133193],{"class":134},[74,145513,55718],{"class":84},[74,145515,136286],{"class":134},[74,145517,133763],{"class":84},[74,145519,145520],{"class":76,"line":1141},[74,145521,136293],{"class":144},[74,145523,145524,145526,145528,145530,145532,145534],{"class":76,"line":1156},[74,145525,136298],{"class":1925},[74,145527,84088],{"class":84},[74,145529,133193],{"class":134},[74,145531,55718],{"class":84},[74,145533,59045],{"class":134},[74,145535,133763],{"class":84},[74,145537,145538],{"class":76,"line":1162},[74,145539,136313],{"class":144},[74,145541,145542,145544,145546,145548,145550,145552],{"class":76,"line":1176},[74,145543,136318],{"class":1925},[74,145545,84088],{"class":84},[74,145547,133193],{"class":134},[74,145549,55718],{"class":84},[74,145551,59112],{"class":134},[74,145553,133763],{"class":84},[74,145555,145556],{"class":76,"line":1182},[74,145557,136333],{"class":144},[74,145559,145560,145562,145564,145566,145568,145570],{"class":76,"line":1273},[74,145561,136338],{"class":1925},[74,145563,84088],{"class":84},[74,145565,133193],{"class":134},[74,145567,55718],{"class":84},[74,145569,90514],{"class":134},[74,145571,133763],{"class":84},[74,145573,145574],{"class":76,"line":1279},[74,145575,136353],{"class":144},[74,145577,145578,145580,145582,145584,145586,145588],{"class":76,"line":1291},[74,145579,136358],{"class":1925},[74,145581,84088],{"class":84},[74,145583,133193],{"class":134},[74,145585,55718],{"class":84},[74,145587,136367],{"class":134},[74,145589,133763],{"class":84},[1093,145591,145592,145603],{},[30,145593,145594,145595,145598,145599,105299,145601],{},"1 号盒子左侧浮动 ",[71,145596,145597],{},"sk_list"," 里面包含 ",[71,145600,1093],{},[71,145602,30],{},[30,145604,145605,145606,145598,145609,105299,145611],{},"2 号盒子左侧浮动 ",[71,145607,145608],{},"sk_con",[71,145610,1093],{},[71,145612,30],{},[19,145614,144203],{},[64,145616,145617],{"className":130833,"code":143503,"language":130835,"meta":69,"style":69},[71,145618,145619,145625,145635],{"__ignoreMap":69},[74,145620,145621,145623],{"class":76,"line":77},[74,145622,134681],{"class":1925},[74,145624,19851],{"class":84},[74,145626,145627,145629,145631,145633],{"class":76,"line":94},[74,145628,135313],{"class":134},[74,145630,55718],{"class":84},[74,145632,28016],{"class":134},[74,145634,1252],{"class":84},[74,145636,145637],{"class":76,"line":1141},[74,145638,1527],{"class":84},[19,145640,144292],{},[64,145642,145643],{"className":130833,"code":143503,"language":130835,"meta":69,"style":69},[71,145644,145645,145651,145661],{"__ignoreMap":69},[74,145646,145647,145649],{"class":76,"line":77},[74,145648,134681],{"class":1925},[74,145650,19851],{"class":84},[74,145652,145653,145655,145657,145659],{"class":76,"line":94},[74,145654,135313],{"class":134},[74,145656,55718],{"class":84},[74,145658,28016],{"class":134},[74,145660,1252],{"class":84},[74,145662,145663],{"class":76,"line":1141},[74,145664,1527],{"class":84},[44,145666,145668,145669],{"id":145667},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[71,145670,145671],{},"sk_container",[1424,145673],{"style":130689,"src":145674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1093,145676,145677,145682],{},[30,145678,144857,145679,145681],{},[71,145680,145671],{}," 给宽度 1200，不要给高度",[30,145683,145684],{},"一定不要忘记清除浮动",[19,145686,144203],{},[64,145688,145689],{"className":130833,"code":143503,"language":130835,"meta":69,"style":69},[71,145690,145691,145697,145707],{"__ignoreMap":69},[74,145692,145693,145695],{"class":76,"line":77},[74,145694,134681],{"class":1925},[74,145696,19851],{"class":84},[74,145698,145699,145701,145703,145705],{"class":76,"line":94},[74,145700,135313],{"class":134},[74,145702,55718],{"class":84},[74,145704,28016],{"class":134},[74,145706,1252],{"class":84},[74,145708,145709],{"class":76,"line":1141},[74,145710,1527],{"class":84},[27,145712,145713],{},[30,145714,145715],{},"sk_hd制作",[1093,145717,145718],{},[30,145719,144937,145720,145723],{},[71,145721,145722],{},"sk_hd"," ，插入图片即可",[19,145725,144203],{},[64,145727,145728],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},[71,145729,145730],{"__ignoreMap":69},[74,145731,145732,145734,145736,145738,145740,145742,145744,145746,145748,145750,145752,145754],{"class":76,"line":77},[74,145733,996],{"class":84},[74,145735,1424],{"class":55581},[74,145737,59520],{"class":1925},[74,145739,131],{"class":84},[74,145741,138350],{"class":190},[74,145743,59528],{"class":1925},[74,145745,131],{"class":84},[74,145747,138357],{"class":190},[74,145749,138360],{"class":1925},[74,145751,131],{"class":84},[74,145753,138365],{"class":190},[74,145755,55588],{"class":84},[27,145757,145758],{"start":94},[30,145759,145760],{},"sk_bd制作",[1093,145762,145763],{},[30,145764,145765,145766,145769,145770,105299,145772,145774],{},"3 号盒子 ",[71,145767,145768],{},"sk_bd"," ，里面包含很多的 ",[71,145771,1093],{},[71,145773,30],{},[1093,145775,145776,145785],{},[30,145777,145778,145779,145781,145782,145784],{},"当鼠标移入到 ",[71,145780,30],{}," 上面的时候显示红色的边框，在这里先给 ",[71,145783,30],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[30,145786,145787,145788,145790,145791,145793,145794,145797,145798,145800],{},"由于给每个 ",[71,145789,30],{}," 都设置了外边距，导致一行的最后一个 ",[71,145792,30],{}," 掉了下来，在这里我们利用 ",[71,145795,145796],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[71,145799,30],{},"，去掉外边距就好了",[19,145802,144203],{},[64,145804,145805],{"className":130833,"code":143022,"language":130835,"meta":69,"style":69},[71,145806,145807,145813,145825],{"__ignoreMap":69},[74,145808,145809,145811],{"class":76,"line":77},[74,145810,55892],{"class":55581},[74,145812,19851],{"class":84},[74,145814,145815,145817,145819,145821,145823],{"class":76,"line":94},[74,145816,74751],{"class":134},[74,145818,55718],{"class":84},[74,145820,277],{"class":134},[74,145822,55837],{"class":134},[74,145824,1252],{"class":84},[74,145826,145827],{"class":76,"line":1141},[74,145828,1527],{"class":84},[19,145830,144292],{},[64,145832,145833],{"className":130833,"code":143022,"language":130835,"meta":69,"style":69},[71,145834,145835,145841,145853],{"__ignoreMap":69},[74,145836,145837,145839],{"class":76,"line":77},[74,145838,55892],{"class":55581},[74,145840,19851],{"class":84},[74,145842,145843,145845,145847,145849,145851],{"class":76,"line":94},[74,145844,74751],{"class":134},[74,145846,55718],{"class":84},[74,145848,277],{"class":134},[74,145850,55837],{"class":134},[74,145852,1252],{"class":84},[74,145854,145855],{"class":76,"line":1141},[74,145856,1527],{"class":84},[14,145858,145860],{"id":145859},"_163-注册页面制作","16.3 注册页面制作",[1424,145862],{"style":130689,"src":145863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,145865,145866,145868],{},[235,145867,13304],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1424,145870],{"style":130689,"src":145871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[44,145873,145875],{"id":145874},"_1631-准备工作","16.3.1 准备工作",[1093,145877,145878,145881],{},[30,145879,145880],{},"创建register.html，引入 base.css，引入favicon图标",[30,145882,145883],{},"创建register.css ，在html页面进行引入",[44,145885,145887,145888,145890],{"id":145886},"_1632-header-头部实现","16.3.2 ",[71,145889,135838],{}," 头部实现",[1093,145892,145893,145896],{},[30,145894,145895],{},"整个内容用 版心 进行包裹",[30,145897,145898],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,145900,144203],{},[64,145902,145903],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},[71,145904,145905],{"__ignoreMap":69},[74,145906,145907,145909,145911,145913,145915,145917,145919,145921,145923,145925,145927,145929],{"class":76,"line":77},[74,145908,996],{"class":84},[74,145910,1424],{"class":55581},[74,145912,59520],{"class":1925},[74,145914,131],{"class":84},[74,145916,138350],{"class":190},[74,145918,59528],{"class":1925},[74,145920,131],{"class":84},[74,145922,138357],{"class":190},[74,145924,138360],{"class":1925},[74,145926,131],{"class":84},[74,145928,138365],{"class":190},[74,145930,55588],{"class":84},[19,145932,144292],{},[64,145934,145935],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},[71,145936,145937],{"__ignoreMap":69},[74,145938,145939,145941,145943,145945,145947,145949,145951,145953,145955,145957,145959,145961],{"class":76,"line":77},[74,145940,996],{"class":84},[74,145942,1424],{"class":55581},[74,145944,59520],{"class":1925},[74,145946,131],{"class":84},[74,145948,138350],{"class":190},[74,145950,59528],{"class":1925},[74,145952,131],{"class":84},[74,145954,138357],{"class":190},[74,145956,138360],{"class":1925},[74,145958,131],{"class":84},[74,145960,138365],{"class":190},[74,145962,55588],{"class":84},[44,145964,145966,145967,145970],{"id":145965},"_1633-registerarea-主体模块实现","16.3.3 ",[71,145968,145969],{},"registerarea"," 主体模块实现",[1424,145972],{"style":130689,"src":145973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,145975,145976],{},"整个大盒子 高度为 522px，设置4个边框",[19,145978,144203],{},[64,145980,145981],{"className":130833,"code":134990,"language":130835,"meta":69,"style":69},[71,145982,145983,145989,146005],{"__ignoreMap":69},[74,145984,145985,145987],{"class":76,"line":77},[74,145986,55892],{"class":55581},[74,145988,19851],{"class":84},[74,145990,145991,145993,145995,145997,145999,146001,146003],{"class":76,"line":94},[74,145992,75177],{"class":134},[74,145994,55718],{"class":84},[74,145996,303],{"class":134},[74,145998,55773],{"class":80},[74,146000,55802],{"class":134},[74,146002,134225],{"class":134},[74,146004,1252],{"class":84},[74,146006,146007],{"class":76,"line":1141},[74,146008,1527],{"class":84},[19,146010,144292],{},[64,146012,146013],{"className":130833,"code":134990,"language":130835,"meta":69,"style":69},[71,146014,146015,146021,146037],{"__ignoreMap":69},[74,146016,146017,146019],{"class":76,"line":77},[74,146018,55892],{"class":55581},[74,146020,19851],{"class":84},[74,146022,146023,146025,146027,146029,146031,146033,146035],{"class":76,"line":94},[74,146024,75177],{"class":134},[74,146026,55718],{"class":84},[74,146028,303],{"class":134},[74,146030,55773],{"class":80},[74,146032,55802],{"class":134},[74,146034,134225],{"class":134},[74,146036,1252],{"class":84},[74,146038,146039],{"class":76,"line":1141},[74,146040,1527],{"class":84},[19,146042,146043],{},"1号盒子 是一个 h3 标签，放标题",[1093,146045,146046],{},[30,146047,146048],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,146050,144203],{},[64,146052,146053],{"className":130833,"code":143503,"language":130835,"meta":69,"style":69},[71,146054,146055,146061,146071],{"__ignoreMap":69},[74,146056,146057,146059],{"class":76,"line":77},[74,146058,134681],{"class":1925},[74,146060,19851],{"class":84},[74,146062,146063,146065,146067,146069],{"class":76,"line":94},[74,146064,135313],{"class":134},[74,146066,55718],{"class":84},[74,146068,28016],{"class":134},[74,146070,1252],{"class":84},[74,146072,146073],{"class":76,"line":1141},[74,146074,1527],{"class":84},[19,146076,144292],{},[64,146078,146079],{"className":130833,"code":143503,"language":130835,"meta":69,"style":69},[71,146080,146081,146087,146097],{"__ignoreMap":69},[74,146082,146083,146085],{"class":76,"line":77},[74,146084,134681],{"class":1925},[74,146086,19851],{"class":84},[74,146088,146089,146091,146093,146095],{"class":76,"line":94},[74,146090,135313],{"class":134},[74,146092,55718],{"class":84},[74,146094,28016],{"class":134},[74,146096,1252],{"class":84},[74,146098,146099],{"class":76,"line":1141},[74,146100,1527],{"class":84},[19,146102,146103],{},"2号盒子 里面放注册的内容",[1093,146105,146106,146109,146118,146132,146145,146148,146151,146169,146183],{},[30,146107,146108],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[30,146110,146111,146112,146114,146115,146117],{},"里面的内容利用 ",[71,146113,1093],{}," 包含 ",[71,146116,30],{}," 来实现的（不需要用表格）",[30,146119,143347,146120,146122,146123,146125,146126,146128,146129,146131],{},[71,146121,30],{}," 里面，左侧放 ",[71,146124,37889],{}," 标签， 中间放",[71,146127,58102],{}," 标签， 右侧放 ",[71,146130,74],{}," 提示信息",[30,146133,146134,146135,146137,146138,146140,146141,146144],{},"左侧 ",[71,146136,37889],{},"里面的文字都是右对齐，我们可以给",[71,146139,37889],{},"设置一个宽度（88px），然后利用",[71,146142,146143],{},"text-align"," 来设置右对齐",[30,146146,146147],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[30,146149,146150],{},"右侧 span修饰一下文字颜色",[30,146152,146153,146154],{},"提示信息的样式优化",[1093,146155,146156,146159,146162],{},[30,146157,146158],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[30,146160,146161],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[30,146163,146164,146165,146168],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[71,146166,146167],{},"vertical-algin"," 来设置 图片与文字对齐方式",[30,146170,146171,146172],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1093,146173,146174,146180],{},[30,146175,146176,146177,146179],{},"设置 ",[71,146178,27833],{}," 的 左右 12px 的内边距，设置一下文字颜色",[30,146181,146182],{},"分别设置 背景颜色",[30,146184,146185,146186,146188],{},"同意协议 和 完成注册 都是用 ",[71,146187,30],{}," 进行包裹",[19,146190,144203],{},[64,146192,146193],{"className":130833,"code":144776,"language":130835,"meta":69,"style":69},[71,146194,146195,146201,146211],{"__ignoreMap":69},[74,146196,146197,146199],{"class":76,"line":77},[74,146198,55892],{"class":55581},[74,146200,19851],{"class":84},[74,146202,146203,146205,146207,146209],{"class":76,"line":94},[74,146204,75159],{"class":134},[74,146206,55718],{"class":84},[74,146208,144793],{"class":134},[74,146210,1252],{"class":84},[74,146212,146213],{"class":76,"line":1141},[74,146214,1527],{"class":84},[19,146216,144292],{},[64,146218,146219],{"className":130833,"code":144776,"language":130835,"meta":69,"style":69},[71,146220,146221,146227,146237],{"__ignoreMap":69},[74,146222,146223,146225],{"class":76,"line":77},[74,146224,55892],{"class":55581},[74,146226,19851],{"class":84},[74,146228,146229,146231,146233,146235],{"class":76,"line":94},[74,146230,75159],{"class":134},[74,146232,55718],{"class":84},[74,146234,144793],{"class":134},[74,146236,1252],{"class":84},[74,146238,146239],{"class":76,"line":1141},[74,146240,1527],{"class":84},[44,146242,146244],{"id":146243},"_1634-底部实现","16.3.4 底部实现",[19,146246,144203],{},[64,146248,146249],{"className":130833,"code":144776,"language":130835,"meta":69,"style":69},[71,146250,146251,146257,146267],{"__ignoreMap":69},[74,146252,146253,146255],{"class":76,"line":77},[74,146254,55892],{"class":55581},[74,146256,19851],{"class":84},[74,146258,146259,146261,146263,146265],{"class":76,"line":94},[74,146260,75159],{"class":134},[74,146262,55718],{"class":84},[74,146264,144793],{"class":134},[74,146266,1252],{"class":84},[74,146268,146269],{"class":76,"line":1141},[74,146270,1527],{"class":84},[19,146272,144292],{},[64,146274,146275],{"className":131580,"code":134937,"language":131582,"meta":69,"style":69},[71,146276,146277,146281,146295,146299],{"__ignoreMap":69},[74,146278,146279],{"class":76,"line":77},[74,146280,134944],{"class":144},[74,146282,146283,146285,146287,146289,146291,146293],{"class":76,"line":94},[74,146284,996],{"class":84},[74,146286,55892],{"class":55581},[74,146288,57767],{"class":1925},[74,146290,131],{"class":84},[74,146292,134957],{"class":190},[74,146294,55588],{"class":84},[74,146296,146297],{"class":76,"line":1141},[74,146298,134964],{"class":84},[74,146300,146301,146303,146305],{"class":76,"line":1156},[74,146302,56066],{"class":84},[74,146304,55892],{"class":55581},[74,146306,55588],{"class":84},[14,146308,146310],{"id":146309},"_164-项目总结","16.4 项目总结",[27,146312,146313,146316,146319,146322],{},[30,146314,146315],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[30,146317,146318],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[30,146320,146321],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[30,146323,146324],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1424,146326],{"style":130689,"src":146327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[27,146329,146330],{"start":1162},[30,146331,146332],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1424,146334],{"style":130689,"src":146335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[27,146337,146338],{"start":1176},[30,146339,146340],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1424,146342],{"style":130689,"src":146343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[64,146345,146346],{"className":131580,"code":140990,"language":131582,"meta":69,"style":69},[71,146347,146348],{"__ignoreMap":69},[74,146349,146350,146352,146354,146356,146358,146360,146362,146364,146366,146368,146370,146372],{"class":76,"line":77},[74,146351,996],{"class":84},[74,146353,58102],{"class":55581},[74,146355,58105],{"class":1925},[74,146357,131],{"class":84},[74,146359,66980],{"class":190},[74,146361,19199],{"class":1925},[74,146363,131],{"class":84},[74,146365,141011],{"class":190},[74,146367,65301],{"class":1925},[74,146369,131],{"class":84},[74,146371,141018],{"class":190},[74,146373,55588],{"class":84},[27,146375,146376,146379],{"start":1182},[30,146377,146378],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[30,146380,146381],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5090,146383,146384],{},"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":69,"searchDepth":94,"depth":94,"links":146386},[146387,146392,146399,146407],{"id":144013,"depth":94,"text":144014,"children":146388},[146389,146390,146391],{"id":144017,"depth":1141,"text":144018},{"id":144748,"depth":1141,"text":144749},{"id":145061,"depth":1141,"text":145062},{"id":145361,"depth":94,"text":145362,"children":146393},[146394,146395,146397],{"id":145365,"depth":1141,"text":145366},{"id":145383,"depth":1141,"text":146396},"16.2.2 列表页 header 和 nav 修改",{"id":145667,"depth":1141,"text":146398},"16.2.3 列表页主体 sk_container",{"id":145859,"depth":94,"text":145860,"children":146400},[146401,146402,146404,146406],{"id":145874,"depth":1141,"text":145875},{"id":145886,"depth":1141,"text":146403},"16.3.2 header 头部实现",{"id":145965,"depth":1141,"text":146405},"16.3.3 registerarea 主体模块实现",{"id":146243,"depth":1141,"text":146244},{"id":146309,"depth":94,"text":146310},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":144005,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":146414,"title":146415,"body":146416,"description":27656,"extension":5121,"meta":146524,"navigation":2362,"path":146525,"seo":146526,"stem":146527,"__hash__":146528},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":146417,"toc":146519},[146418,146421,146425,146428,146431,146440,146449,146453,146458,146465,146483,146486,146489,146492,146495,146498,146501,146504,146507,146510,146513,146516],[10,146419,146415],{"id":146420},"_17-web服务器与网站发布",[14,146422,146424],{"id":146423},"_171-web服务器","17.1 Web服务器",[19,146426,146427],{},"把自己网站上传到服务器上，可以让其他人访问",[1424,146429],{"style":130689,"src":146430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,146432,146433,146436,146437],{},[235,146434,146435],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[235,146438,146439],{},"Web 服务器等",[19,146441,146442,146443,105299,146446,30021],{},"根据服务器在网络中所在的位置不同，又可分为 ",[235,146444,146445],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[235,146447,146448],{},"远程服务器",[44,146450,146452],{"id":146451},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,146454,146455],{},[235,146456,146457],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,146459,146460,146461],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[324,146462,146463],{"href":146463,"rel":146464},"http:\u002F\u002Ffree.3v.do\u002F",[28145],[1093,146466,146467,146470,146473,146480],{},[30,146468,146469],{},"去免费空间网站注册账号。",[30,146471,146472],{},"记录下主机名、用户名、密码、域名。",[30,146474,146475,146476,146479],{},"利用 ",[71,146477,146478],{},"utftp"," 软件 上传网站到远程服务器",[30,146481,146482],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,146484,146485],{},"使用软件上传，对上传软件文件进行解压",[1424,146487],{"style":130689,"src":146488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1424,146490],{"style":130689,"src":146491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,146493,146494],{},"输入刚刚申请的服务器账号信息：",[1424,146496],{"style":130689,"src":146497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1424,146499],{"style":130689,"src":146500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1424,146502],{"style":130689,"src":146503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1424,146505],{"style":130689,"src":146506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,146508,146509],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1424,146511],{"style":130689,"src":146512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,146514,146515],{},"浏览器输入域名即可访问",[19,146517,146518],{},"首页一定必须是index",{"title":69,"searchDepth":94,"depth":94,"links":146520},[146521],{"id":146423,"depth":94,"text":146424,"children":146522},[146523],{"id":146451,"depth":1141,"text":146452},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":146415,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":146530,"title":146531,"body":146532,"description":27656,"extension":5121,"meta":147459,"navigation":2362,"path":147460,"seo":147461,"stem":147462,"__hash__":147463},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":146533,"toc":147442},[146534,146537,146541,146544,146547,146558,146561,146565,146569,146574,146577,146580,146583,146586,146590,146616,146620,146624,146627,146630,146634,146667,146671,146674,146677,146741,146745,146749,146752,146755,146758,146762,146807,146811,146814,146844,146848,146852,146855,146858,146862,146865,146934,146937,147045,147047,147053,147057,147060,147063,147159,147162,147166,147190,147194,147197,147201,147204,147208,147211,147214,147217,147220,147224,147227,147230,147234,147238,147241,147244,147247,147250,147254,147257,147261,147264,147267,147312,147316,147320,147323,147326,147329,147361,147365,147368,147402,147406,147409,147439],[10,146535,146531],{"id":146536},"_18-2d动画与3d转换",[14,146538,146540],{"id":146539},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,146542,146543],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,146545,146546],{},"转换（transform）你可以简单理解为变形",[1093,146548,146549,146552,146555],{},[30,146550,146551],{},"移动：translate",[30,146553,146554],{},"旋转：rotate",[30,146556,146557],{},"缩放：scale",[1424,146559],{"style":130689,"src":146560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[44,146562,146564],{"id":146563},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[26277,146566,146568],{"id":146567},"_18111-translate介绍","18.1.1.1 translate介绍",[19,146570,146571,146572],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[235,146573,137492],{},[1424,146575],{"style":130689,"src":146576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,146578,146579],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,146581,146582],{},"对于行内元素无效",[19,146584,146585],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[26277,146587,146589],{"id":146588},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[64,146591,146592],{"className":130833,"code":143022,"language":130835,"meta":69,"style":69},[71,146593,146594,146600,146612],{"__ignoreMap":69},[74,146595,146596,146598],{"class":76,"line":77},[74,146597,55892],{"class":55581},[74,146599,19851],{"class":84},[74,146601,146602,146604,146606,146608,146610],{"class":76,"line":94},[74,146603,74751],{"class":134},[74,146605,55718],{"class":84},[74,146607,277],{"class":134},[74,146609,55837],{"class":134},[74,146611,1252],{"class":84},[74,146613,146614],{"class":76,"line":1141},[74,146615,1527],{"class":84},[44,146617,146619],{"id":146618},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[26277,146621,146623],{"id":146622},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,146625,146626],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1424,146628],{"style":130689,"src":146629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[26277,146631,146633],{"id":146632},"_18122-旋转效果","18.1.2.2 旋转效果",[64,146635,146637],{"className":130833,"code":146636,"language":130835,"meta":69,"style":69},"div {\n  transform: rotate(45deg);\n}\n",[71,146638,146639,146645,146663],{"__ignoreMap":69},[74,146640,146641,146643],{"class":76,"line":77},[74,146642,55892],{"class":55581},[74,146644,19851],{"class":84},[74,146646,146647,146649,146651,146654,146656,146658,146661],{"class":76,"line":94},[74,146648,140817],{"class":134},[74,146650,55718],{"class":84},[74,146652,146653],{"class":134},"rotate",[74,146655,85],{"class":84},[74,146657,615],{"class":134},[74,146659,146660],{"class":80},"deg",[74,146662,2682],{"class":84},[74,146664,146665],{"class":76,"line":1141},[74,146666,1527],{"class":84},[26277,146668,146670],{"id":146669},"_18123-三角做法","18.1.2.3 三角做法",[19,146672,146673],{},"该下标当经过最外层大盒子时会实现向上反转",[1424,146675],{"style":130689,"src":146676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[64,146678,146679],{"className":130833,"code":139353,"language":130835,"meta":69,"style":69},[71,146680,146681,146685,146691,146701,146711,146727,146737],{"__ignoreMap":69},[74,146682,146683],{"class":76,"line":77},[74,146684,139360],{"class":144},[74,146686,146687,146689],{"class":76,"line":94},[74,146688,139365],{"class":1925},[74,146690,19851],{"class":84},[74,146692,146693,146695,146697,146699],{"class":76,"line":1141},[74,146694,74849],{"class":134},[74,146696,55718],{"class":84},[74,146698,277],{"class":134},[74,146700,1252],{"class":84},[74,146702,146703,146705,146707,146709],{"class":76,"line":1156},[74,146704,75069],{"class":134},[74,146706,55718],{"class":84},[74,146708,277],{"class":134},[74,146710,1252],{"class":84},[74,146712,146713,146715,146717,146719,146721,146723,146725],{"class":76,"line":1162},[74,146714,75177],{"class":134},[74,146716,55718],{"class":84},[74,146718,532],{"class":134},[74,146720,55773],{"class":80},[74,146722,55802],{"class":134},[74,146724,68272],{"class":134},[74,146726,1252],{"class":84},[74,146728,146729,146731,146733,146735],{"class":76,"line":1176},[74,146730,139408],{"class":134},[74,146732,55718],{"class":84},[74,146734,66650],{"class":134},[74,146736,1252],{"class":84},[74,146738,146739],{"class":76,"line":1182},[74,146740,1527],{"class":84},[44,146742,146744],{"id":146743},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[26277,146746,146748],{"id":146747},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,146750,146751],{},"设置中心点",[1424,146753],{"style":130689,"src":146754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,146756,146757],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[26277,146759,146761],{"id":146760},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[64,146763,146765],{"className":130833,"code":146764,"language":130835,"meta":69,"style":69},"\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",[71,146766,146767,146772,146778,146793,146798,146803],{"__ignoreMap":69},[74,146768,146769],{"class":76,"line":77},[74,146770,146771],{"class":144},"\u002F* 转换中心点 *\u002F\n",[74,146773,146774,146776],{"class":76,"line":94},[74,146775,55892],{"class":55581},[74,146777,19851],{"class":84},[74,146779,146780,146783,146785,146787,146789,146791],{"class":76,"line":1141},[74,146781,146782],{"class":134},"  transform-origin",[74,146784,55718],{"class":84},[74,146786,55873],{"class":134},[74,146788,21423],{"class":134},[74,146790,134696],{"class":84},[74,146792,139506],{"class":144},[74,146794,146795],{"class":76,"line":1156},[74,146796,146797],{"class":144},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[74,146799,146800],{"class":76,"line":1162},[74,146801,146802],{"class":144},"  \u002F* transform-origin: left top; *\u002F\n",[74,146804,146805],{"class":76,"line":1176},[74,146806,1527],{"class":84},[26277,146808,146810],{"id":146809},"_18133-旋转案例","18.1.3.3 旋转案例",[1424,146812],{"style":130689,"src":146813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[64,146815,146816],{"className":130833,"code":146636,"language":130835,"meta":69,"style":69},[71,146817,146818,146824,146840],{"__ignoreMap":69},[74,146819,146820,146822],{"class":76,"line":77},[74,146821,55892],{"class":55581},[74,146823,19851],{"class":84},[74,146825,146826,146828,146830,146832,146834,146836,146838],{"class":76,"line":94},[74,146827,140817],{"class":134},[74,146829,55718],{"class":84},[74,146831,146653],{"class":134},[74,146833,85],{"class":84},[74,146835,615],{"class":134},[74,146837,146660],{"class":80},[74,146839,2682],{"class":84},[74,146841,146842],{"class":76,"line":1141},[74,146843,1527],{"class":84},[44,146845,146847],{"id":146846},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[26277,146849,146851],{"id":146850},"_18141-scale介绍","18.1.4.1 scale介绍",[19,146853,146854],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1424,146856],{"style":130689,"src":146857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[26277,146859,146861],{"id":146860},"_18142-分页按钮","18.1.4.2 分页按钮",[1424,146863],{"style":130689,"src":146864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[64,146866,146868],{"className":130833,"code":146867,"language":130835,"meta":69,"style":69},"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",[71,146869,146870,146876,146892,146896,146900,146905,146911,146925,146930],{"__ignoreMap":69},[74,146871,146872,146874],{"class":76,"line":77},[74,146873,55892],{"class":55581},[74,146875,19851],{"class":84},[74,146877,146878,146880,146882,146885,146887,146890],{"class":76,"line":94},[74,146879,140817],{"class":134},[74,146881,55718],{"class":84},[74,146883,146884],{"class":134},"scale",[74,146886,85],{"class":84},[74,146888,146889],{"class":134},"1.2",[74,146891,2682],{"class":84},[74,146893,146894],{"class":76,"line":1141},[74,146895,1527],{"class":84},[74,146897,146898],{"class":76,"line":1156},[74,146899,140294],{"class":84},[74,146901,146902],{"class":76,"line":1162},[74,146903,146904],{"class":144},"\u002F* 2D 缩放 *\u002F\n",[74,146906,146907,146909],{"class":76,"line":1176},[74,146908,55892],{"class":55581},[74,146910,19851],{"class":84},[74,146912,146913,146915,146917,146919,146921,146923],{"class":76,"line":1182},[74,146914,140817],{"class":134},[74,146916,55718],{"class":84},[74,146918,146884],{"class":134},[74,146920,85],{"class":84},[74,146922,146889],{"class":134},[74,146924,2682],{"class":84},[74,146926,146927],{"class":76,"line":1273},[74,146928,146929],{"class":144},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[74,146931,146932],{"class":76,"line":1279},[74,146933,1527],{"class":84},[19,146935,146936],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[64,146938,146940],{"className":130833,"code":146939,"language":130835,"meta":69,"style":69},"\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",[71,146941,146942,146947,146957,146978,146999,147003,147008,147014,147041],{"__ignoreMap":69},[74,146943,146944],{"class":76,"line":77},[74,146945,146946],{"class":144},"\u002F* 定义动画 *\u002F\n",[74,146948,146949,146952,146955],{"class":76,"line":94},[74,146950,146951],{"class":80},"@keyframes",[74,146953,146954],{"class":9495}," move",[74,146956,19851],{"class":84},[74,146958,146959,146962,146964,146966,146968,146971,146973,146975],{"class":76,"line":1141},[74,146960,146961],{"class":1925},"  0%",[74,146963,84088],{"class":84},[74,146965,52415],{"class":134},[74,146967,55718],{"class":84},[74,146969,146970],{"class":134},"translateX",[74,146972,85],{"class":84},[74,146974,277],{"class":134},[74,146976,146977],{"class":84},"); }\n",[74,146979,146980,146983,146985,146987,146989,146991,146993,146995,146997],{"class":76,"line":1156},[74,146981,146982],{"class":1925},"  100%",[74,146984,84088],{"class":84},[74,146986,52415],{"class":134},[74,146988,55718],{"class":84},[74,146990,146970],{"class":134},[74,146992,85],{"class":84},[74,146994,397],{"class":134},[74,146996,55773],{"class":80},[74,146998,146977],{"class":84},[74,147000,147001],{"class":76,"line":1162},[74,147002,1527],{"class":84},[74,147004,147005],{"class":76,"line":1176},[74,147006,147007],{"class":144},"\u002F* 调用动画 *\u002F\n",[74,147009,147010,147012],{"class":76,"line":1182},[74,147011,55892],{"class":55581},[74,147013,19851],{"class":84},[74,147015,147016,147019,147021,147023,147025,147027,147029,147031,147033,147036,147039],{"class":76,"line":1273},[74,147017,147018],{"class":134},"  animation",[74,147020,55718],{"class":84},[74,147022,139519],{"class":134},[74,147024,29399],{"class":134},[74,147026,781],{"class":80},[74,147028,82961],{"class":134},[74,147030,4056],{"class":134},[74,147032,781],{"class":80},[74,147034,147035],{"class":134}," infinite",[74,147037,147038],{"class":134}," alternate",[74,147040,1252],{"class":84},[74,147042,147043],{"class":76,"line":1279},[74,147044,1527],{"class":84},[19,147046,146936],{},[64,147048,147051],{"className":147049,"code":147050,"language":9466},[9464],"\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",[71,147052,147050],{"__ignoreMap":69},[26277,147054,147056],{"id":147055},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,147058,147059],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1424,147061],{"style":130689,"src":147062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[64,147064,147065],{"className":130833,"code":146939,"language":130835,"meta":69,"style":69},[71,147066,147067,147071,147079,147097,147117,147121,147125,147131,147155],{"__ignoreMap":69},[74,147068,147069],{"class":76,"line":77},[74,147070,146946],{"class":144},[74,147072,147073,147075,147077],{"class":76,"line":94},[74,147074,146951],{"class":80},[74,147076,146954],{"class":9495},[74,147078,19851],{"class":84},[74,147080,147081,147083,147085,147087,147089,147091,147093,147095],{"class":76,"line":1141},[74,147082,146961],{"class":1925},[74,147084,84088],{"class":84},[74,147086,52415],{"class":134},[74,147088,55718],{"class":84},[74,147090,146970],{"class":134},[74,147092,85],{"class":84},[74,147094,277],{"class":134},[74,147096,146977],{"class":84},[74,147098,147099,147101,147103,147105,147107,147109,147111,147113,147115],{"class":76,"line":1156},[74,147100,146982],{"class":1925},[74,147102,84088],{"class":84},[74,147104,52415],{"class":134},[74,147106,55718],{"class":84},[74,147108,146970],{"class":134},[74,147110,85],{"class":84},[74,147112,397],{"class":134},[74,147114,55773],{"class":80},[74,147116,146977],{"class":84},[74,147118,147119],{"class":76,"line":1162},[74,147120,1527],{"class":84},[74,147122,147123],{"class":76,"line":1176},[74,147124,147007],{"class":144},[74,147126,147127,147129],{"class":76,"line":1182},[74,147128,55892],{"class":55581},[74,147130,19851],{"class":84},[74,147132,147133,147135,147137,147139,147141,147143,147145,147147,147149,147151,147153],{"class":76,"line":1273},[74,147134,147018],{"class":134},[74,147136,55718],{"class":84},[74,147138,139519],{"class":134},[74,147140,29399],{"class":134},[74,147142,781],{"class":80},[74,147144,82961],{"class":134},[74,147146,4056],{"class":134},[74,147148,781],{"class":80},[74,147150,147035],{"class":134},[74,147152,147038],{"class":134},[74,147154,1252],{"class":84},[74,147156,147157],{"class":76,"line":1279},[74,147158,1527],{"class":84},[19,147160,147161],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[44,147163,147165],{"id":147164},"_1823-知识点回顾","18.2.3 知识点回顾",[64,147167,147168],{"className":130833,"code":133002,"language":130835,"meta":69,"style":69},[71,147169,147170,147176,147186],{"__ignoreMap":69},[74,147171,147172,147174],{"class":76,"line":77},[74,147173,55892],{"class":55581},[74,147175,19851],{"class":84},[74,147177,147178,147180,147182,147184],{"class":76,"line":94},[74,147179,133015],{"class":134},[74,147181,55718],{"class":84},[74,147183,66017],{"class":134},[74,147185,1252],{"class":84},[74,147187,147188],{"class":76,"line":1141},[74,147189,1527],{"class":84},[14,147191,147193],{"id":147192},"_183-3d-转换","18.3 3D 转换",[19,147195,147196],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[44,147198,147200],{"id":147199},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1424,147202],{"style":130689,"src":147203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[44,147205,147207],{"id":147206},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1424,147209],{"style":130689,"src":147210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,147212,147213],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,147215,147216],{},"translate3d的效果需要搭配透视perspective来使用",[1424,147218],{"style":130689,"src":147219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[44,147221,147223],{"id":147222},"_1833-透视-perspective","18.3.3 透视 perspective",[1424,147225],{"style":130689,"src":147226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,147228,147229],{},"透视写在父盒子上，单位为像素",[44,147231,147233],{"id":147232},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[26277,147235,147237],{"id":147236},"_18341-分开解释","18.3.4.1 分开解释",[1424,147239],{"style":130689,"src":147240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1424,147242],{"style":130689,"src":147243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1424,147245],{"style":130689,"src":147246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,147248,147249],{},"总结来说就是左手原则",[26277,147251,147253],{"id":147252},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1424,147255],{"style":130689,"src":147256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[44,147258,147260],{"id":147259},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1424,147262],{"style":130689,"src":147263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1424,147265],{"style":130689,"src":147266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[64,147268,147270],{"className":130833,"code":147269,"language":130835,"meta":69,"style":69},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[71,147271,147272,147278,147291,147308],{"__ignoreMap":69},[74,147273,147274,147276],{"class":76,"line":77},[74,147275,55892],{"class":55581},[74,147277,19851],{"class":84},[74,147279,147280,147283,147285,147287,147289],{"class":76,"line":94},[74,147281,147282],{"class":134},"  perspective",[74,147284,55718],{"class":84},[74,147286,69355],{"class":134},[74,147288,55773],{"class":80},[74,147290,1252],{"class":84},[74,147292,147293,147295,147297,147300,147302,147304,147306],{"class":76,"line":1141},[74,147294,140817],{"class":134},[74,147296,55718],{"class":84},[74,147298,147299],{"class":134},"rotateX",[74,147301,85],{"class":84},[74,147303,615],{"class":134},[74,147305,146660],{"class":80},[74,147307,2682],{"class":84},[74,147309,147310],{"class":76,"line":1156},[74,147311,1527],{"class":84},[44,147313,147315],{"id":147314},"_1836-案例","18.3.6 案例",[26277,147317,147319],{"id":147318},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1424,147321],{"style":130689,"src":147322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1424,147324],{"style":130689,"src":147325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1424,147327],{"style":130689,"src":147328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[64,147330,147332],{"className":130833,"code":147331,"language":130835,"meta":69,"style":69},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[71,147333,147334,147339,147345,147357],{"__ignoreMap":69},[74,147335,147336],{"class":76,"line":77},[74,147337,147338],{"class":144},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[74,147340,147341,147343],{"class":76,"line":94},[74,147342,137830],{"class":1925},[74,147344,19851],{"class":84},[74,147346,147347,147349,147351,147353,147355],{"class":76,"line":1141},[74,147348,147282],{"class":134},[74,147350,55718],{"class":84},[74,147352,69355],{"class":134},[74,147354,55773],{"class":80},[74,147356,1252],{"class":84},[74,147358,147359],{"class":76,"line":1156},[74,147360,1527],{"class":84},[26277,147362,147364],{"id":147363},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1424,147366],{"style":130689,"src":147367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[64,147369,147370],{"className":131580,"code":134937,"language":131582,"meta":69,"style":69},[71,147371,147372,147376,147390,147394],{"__ignoreMap":69},[74,147373,147374],{"class":76,"line":77},[74,147375,134944],{"class":144},[74,147377,147378,147380,147382,147384,147386,147388],{"class":76,"line":94},[74,147379,996],{"class":84},[74,147381,55892],{"class":55581},[74,147383,57767],{"class":1925},[74,147385,131],{"class":84},[74,147387,134957],{"class":190},[74,147389,55588],{"class":84},[74,147391,147392],{"class":76,"line":1141},[74,147393,134964],{"class":84},[74,147395,147396,147398,147400],{"class":76,"line":1156},[74,147397,56066],{"class":84},[74,147399,55892],{"class":55581},[74,147401,55588],{"class":84},[26277,147403,147405],{"id":147404},"_18363-旋转木马","18.3.6.3 旋转木马",[1424,147407],{"style":130689,"src":147408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[64,147410,147411],{"className":130833,"code":146636,"language":130835,"meta":69,"style":69},[71,147412,147413,147419,147435],{"__ignoreMap":69},[74,147414,147415,147417],{"class":76,"line":77},[74,147416,55892],{"class":55581},[74,147418,19851],{"class":84},[74,147420,147421,147423,147425,147427,147429,147431,147433],{"class":76,"line":94},[74,147422,140817],{"class":134},[74,147424,55718],{"class":84},[74,147426,146653],{"class":134},[74,147428,85],{"class":84},[74,147430,615],{"class":134},[74,147432,146660],{"class":80},[74,147434,2682],{"class":84},[74,147436,147437],{"class":76,"line":1141},[74,147438,1527],{"class":84},[5090,147440,147441],{},"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":69,"searchDepth":94,"depth":94,"links":147443},[147444,147451],{"id":146539,"depth":94,"text":146540,"children":147445},[147446,147447,147448,147449,147450],{"id":146563,"depth":1141,"text":146564},{"id":146618,"depth":1141,"text":146619},{"id":146743,"depth":1141,"text":146744},{"id":146846,"depth":1141,"text":146847},{"id":147164,"depth":1141,"text":147165},{"id":147192,"depth":94,"text":147193,"children":147452},[147453,147454,147455,147456,147457,147458],{"id":147199,"depth":1141,"text":147200},{"id":147206,"depth":1141,"text":147207},{"id":147222,"depth":1141,"text":147223},{"id":147232,"depth":1141,"text":147233},{"id":147259,"depth":1141,"text":147260},{"id":147314,"depth":1141,"text":147315},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":146531,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":147465,"title":147466,"body":147467,"description":27656,"extension":5121,"meta":147670,"navigation":2362,"path":147671,"seo":147672,"stem":147673,"__hash__":147674},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":147468,"toc":147659},[147469,147472,147476,147479,147482,147486,147489,147492,147495,147499,147502,147506,147509,147513,147516,147520,147534,147538,147563,147566,147569,147586,147590,147594,147597,147600,147604,147607,147610,147628,147632,147635,147649,147653,147656],[10,147470,147466],{"id":147471},"_19-移动端基础-前缀现状与视口",[14,147473,147475],{"id":147474},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1424,147477],{"style":130689,"src":147478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,147480,147481],{},"意思就是加个前缀，增加兼容性",[14,147483,147485],{"id":147484},"_192-移动端现状认识","19.2 移动端现状认识",[1424,147487],{"style":130689,"src":147488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,147490,147491],{},"调试方法：",[1424,147493],{"style":130689,"src":147494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,147496,147498],{"id":147497},"_193-视口","19.3 视口",[19,147500,147501],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[44,147503,147505],{"id":147504},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1424,147507],{"style":130689,"src":147508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[44,147510,147512],{"id":147511},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1424,147514],{"style":130689,"src":147515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[44,147517,147519],{"id":147518},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1093,147521,147522,147525,147528,147531],{},[30,147523,147524],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[30,147526,147527],{},"理想视口，对设备来讲，是最理想的视口尺寸",[30,147529,147530],{},"需要手动添写meta视口标签通知浏览器操作",[30,147532,147533],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[44,147535,147537],{"id":147536},"_1934-meta视口标签","19.3.4 meta视口标签",[64,147539,147541],{"className":131580,"code":147540,"language":131582,"meta":69,"style":69},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[71,147542,147543],{"__ignoreMap":69},[74,147544,147545,147547,147549,147551,147553,147555,147557,147559,147561],{"class":76,"line":77},[74,147546,996],{"class":84},[74,147548,55625],{"class":55581},[74,147550,19199],{"class":1925},[74,147552,131],{"class":84},[74,147554,55672],{"class":190},[74,147556,55652],{"class":1925},[74,147558,131],{"class":84},[74,147560,55679],{"class":190},[74,147562,55588],{"class":84},[1424,147564],{"style":130689,"src":147565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,147567,147568],{},"标准视口设置：",[27,147570,147571,147574,147577,147580,147583],{},[30,147572,147573],{},"视口宽度和设备保持一致",[30,147575,147576],{},"视口的默认缩放比例1.0",[30,147578,147579],{},"不允许用户自行缩放",[30,147581,147582],{},"最大允许的缩放比例1.0",[30,147584,147585],{},"最小允许的缩放比例1.0",[44,147587,147589],{"id":147588},"_1935-二倍图","19.3.5 二倍图",[26277,147591,147593],{"id":147592},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1424,147595],{"style":130689,"src":147596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1424,147598],{"style":130689,"src":147599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[26277,147601,147603],{"id":147602},"_19352-多倍图","19.3.5.2 多倍图",[1424,147605],{"style":130689,"src":147606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,147608,147609],{},"二倍图法，代码如下：",[64,147611,147613],{"className":130833,"code":147612,"language":130835,"meta":69,"style":69},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[71,147614,147615,147620],{"__ignoreMap":69},[74,147616,147617],{"class":76,"line":77},[74,147618,147619],{"class":144},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[74,147621,147622,147625],{"class":76,"line":94},[74,147623,147624],{"class":55581},"background-size",[74,147626,147627],{"class":84},": 50% 50%;\n",[26277,147629,147631],{"id":147630},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1424,147633],{"style":130689,"src":147634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[27,147636,147637,147640,147643,147646],{},[30,147638,147639],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[30,147641,147642],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[30,147644,147645],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[30,147647,147648],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[26277,147650,147652],{"id":147651},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1424,147654],{"style":130689,"src":147655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5090,147657,147658],{},"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":69,"searchDepth":94,"depth":94,"links":147660},[147661,147662,147663],{"id":147474,"depth":94,"text":147475},{"id":147484,"depth":94,"text":147485},{"id":147497,"depth":94,"text":147498,"children":147664},[147665,147666,147667,147668,147669],{"id":147504,"depth":1141,"text":147505},{"id":147511,"depth":1141,"text":147512},{"id":147518,"depth":1141,"text":147519},{"id":147536,"depth":1141,"text":147537},{"id":147588,"depth":1141,"text":147589},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":147466,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":147676,"title":147677,"body":147678,"description":27656,"extension":5121,"meta":148555,"navigation":2362,"path":148556,"seo":148557,"stem":148558,"__hash__":148559},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":147679,"toc":148539},[147680,147683,147687,147694,147697,147704,147707,147712,147715,147719,147723,147730,147733,147736,147740,147743,147746,147749,147752,147755,147759,147762,147766,147768,147771,147774,147777,147780,147782,147785,147787,147817,147819,147849,147853,147856,147860,147863,147880,147883,147886,147962,147964,147967,147970,147973,147976,147978,147981,147984,147988,148010,148013,148016,148020,148023,148029,148032,148036,148039,148042,148046,148049,148052,148055,148059,148062,148065,148068,148071,148075,148078,148082,148089,148092,148095,148098,148101,148111,148114,148117,148124,148127,148131,148134,148137,148141,148144,148147,148150,148195,148198,148201,148204,148206,148335,148337,148375,148378,148381,148383,148501,148503,148537],[10,147681,147677],{"id":147682},"_20-移动端布局实战上篇",[14,147684,147686],{"id":147685},"_201-移动端主流方案","20.1 移动端主流方案",[27,147688,147689],{},[30,147690,147691],{},[235,147692,147693],{},"单独移动端页面（主流）",[1424,147695],{"style":130689,"src":147696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[27,147698,147699],{"start":94},[30,147700,147701],{},[235,147702,147703],{},"响应式兼容PC移动端",[1424,147705],{"style":130689,"src":147706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[27,147708,147709],{"start":1141},[30,147710,147711],{},"两种页面选型布局方式",[1424,147713],{"style":130689,"src":147714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,147716,147718],{"id":147717},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[44,147720,147722],{"id":147721},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,147724,147725,147726],{},"官网地址： ",[324,147727,147728],{"href":147728,"rel":147729},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[28145],[1424,147731],{"style":130689,"src":147732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1424,147734],{"style":130689,"src":147735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[44,147737,147739],{"id":147738},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1424,147741],{"style":130689,"src":147742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1424,147744],{"style":130689,"src":147745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,147747,147748],{},"去除高亮：",[19,147750,147751],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,147753,147754],{},"-webkit- tap-highlight-color: transparent;",[14,147756,147758],{"id":147757},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1424,147760],{"style":130689,"src":147761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,147763,147765],{"id":147764},"_204-流式布局案例","20.4 流式布局案例",[19,147767,115],{},[19,147769,147770],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,147772,147773],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,147775,147776],{},"图片格式：",[1424,147778],{"style":130689,"src":147779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,147781,139876],{},[1424,147783],{"style":130689,"src":147784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,147786,144203],{},[64,147788,147789],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},[71,147790,147791],{"__ignoreMap":69},[74,147792,147793,147795,147797,147799,147801,147803,147805,147807,147809,147811,147813,147815],{"class":76,"line":77},[74,147794,996],{"class":84},[74,147796,1424],{"class":55581},[74,147798,59520],{"class":1925},[74,147800,131],{"class":84},[74,147802,138350],{"class":190},[74,147804,59528],{"class":1925},[74,147806,131],{"class":84},[74,147808,138357],{"class":190},[74,147810,138360],{"class":1925},[74,147812,131],{"class":84},[74,147814,138365],{"class":190},[74,147816,55588],{"class":84},[19,147818,144292],{},[64,147820,147821],{"className":131580,"code":138335,"language":131582,"meta":69,"style":69},[71,147822,147823],{"__ignoreMap":69},[74,147824,147825,147827,147829,147831,147833,147835,147837,147839,147841,147843,147845,147847],{"class":76,"line":77},[74,147826,996],{"class":84},[74,147828,1424],{"class":55581},[74,147830,59520],{"class":1925},[74,147832,131],{"class":84},[74,147834,138350],{"class":190},[74,147836,59528],{"class":1925},[74,147838,131],{"class":84},[74,147840,138357],{"class":190},[74,147842,138360],{"class":1925},[74,147844,131],{"class":84},[74,147846,138365],{"class":190},[74,147848,55588],{"class":84},[14,147850,147852],{"id":147851},"_205-flex布局","20.5 flex布局",[1424,147854],{"style":130689,"src":147855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[44,147857,147859],{"id":147858},"_2051-布局原理","20.5.1 布局原理",[19,147861,147862],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1093,147864,147865,147868,147871,147874,147877],{},[30,147866,147867],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[30,147869,147870],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[30,147872,147873],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[30,147875,147876],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[30,147878,147879],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,147881,147882],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,147884,147885],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[64,147887,147889],{"className":130833,"code":147888,"language":130835,"meta":69,"style":69},"\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",[71,147890,147891,147896,147903,147913,147925,147936,147947,147958],{"__ignoreMap":69},[74,147892,147893],{"class":76,"line":77},[74,147894,147895],{"class":144},"\u002F* Flex 弹性布局 *\u002F\n",[74,147897,147898,147901],{"class":76,"line":94},[74,147899,147900],{"class":1925},".container",[74,147902,19851],{"class":84},[74,147904,147905,147907,147909,147911],{"class":76,"line":1141},[74,147906,132449],{"class":134},[74,147908,55718],{"class":84},[74,147910,55758],{"class":134},[74,147912,1252],{"class":84},[74,147914,147915,147918,147920,147923],{"class":76,"line":1156},[74,147916,147917],{"class":134},"  flex-direction",[74,147919,55718],{"class":84},[74,147921,147922],{"class":134},"row",[74,147924,1252],{"class":84},[74,147926,147927,147930,147932,147934],{"class":76,"line":1162},[74,147928,147929],{"class":134},"  justify-content",[74,147931,55718],{"class":84},[74,147933,55949],{"class":134},[74,147935,1252],{"class":84},[74,147937,147938,147941,147943,147945],{"class":76,"line":1176},[74,147939,147940],{"class":134},"  align-items",[74,147942,55718],{"class":84},[74,147944,55873],{"class":134},[74,147946,1252],{"class":84},[74,147948,147949,147952,147954,147956],{"class":76,"line":1182},[74,147950,147951],{"class":134},"  flex-wrap",[74,147953,55718],{"class":84},[74,147955,82891],{"class":134},[74,147957,1252],{"class":84},[74,147959,147960],{"class":76,"line":1273},[74,147961,1527],{"class":84},[19,147963,74734],{},[19,147965,147966],{},".form-item .male-label {",[19,147968,147969],{},"   margin-right: 20px;",[19,147971,147972],{},"   display: inline-flex;",[19,147974,147975],{},"   align-items: center;",[19,147977,1032],{},[1424,147979],{"style":130689,"src":147980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1424,147982],{"style":130689,"src":147983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[44,147985,147987],{"id":147986},"_2052-常见父项属性","20.5.2 常见父项属性",[27,147989,147990,147993,147996,147999,148002,148005,148008],{},[30,147991,147992],{},"flex-direction：设置主轴的方向",[30,147994,147995],{},"justify-content：设置主轴上的子元素排列方式",[30,147997,147998],{},"flex-wrap：设置子元素是否换行",[30,148000,148001],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[30,148003,148004],{},"align-items：设置侧轴上的子元素排列方式（单行）",[30,148006,148007],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[30,148009,147992],{},[1424,148011],{"style":130689,"src":148012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1424,148014],{"style":130689,"src":148015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[27,148017,148018],{"start":94},[30,148019,147995],{},[1424,148021],{"style":130689,"src":148022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,148024,148025,148028],{},[71,148026,148027],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,148030,148031],{},"跟着主轴走",[27,148033,148034],{"start":1141},[30,148035,147998],{},[1424,148037],{"style":130689,"src":148038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,148040,148041],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[27,148043,148044],{"start":1156},[30,148045,148001],{},[1424,148047],{"style":130689,"src":148048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,148050,148051],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,148053,148054],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[27,148056,148057],{"start":1162},[30,148058,148004],{},[1424,148060],{"style":130689,"src":148061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,148063,148064],{},"align-items与align-content之间的区别：",[19,148066,148067],{},"单找items，多找content",[1424,148069],{"style":130689,"src":148070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[27,148072,148073],{"start":1176},[30,148074,148007],{},[1424,148076],{"style":130689,"src":148077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[44,148079,148081],{"id":148080},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[27,148083,148084],{},[30,148085,148086],{},[235,148087,148088],{},"flex 属性",[19,148090,148091],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1424,148093],{"style":130689,"src":148094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,148096,148097],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,148099,148100],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[27,148102,148103],{"start":94},[30,148104,148105,18074,148108],{},[235,148106,148107],{},"align-self",[235,148109,148110],{},"控制子项自己在侧轴上的排列方式",[1424,148112],{"style":130689,"src":148113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,148115,148116],{},"单个子盒子在父盒子侧轴上的排列方式",[27,148118,148119],{"start":1141},[30,148120,148121,148123],{},[235,148122,99578],{}," 属性定义项目的排列顺序",[1424,148125],{"style":130689,"src":148126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[44,148128,148130],{"id":148129},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1424,148132],{"style":130689,"src":148133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,148135,148136],{},"必须要添加浏览器的私有前缀",[44,148138,148140],{"id":148139},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,148142,148143],{},"学到最重要的知识：",[19,148145,148146],{},"flex处理这样的布局思路",[1424,148148],{"style":130689,"src":148149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[64,148151,148153],{"className":130833,"code":148152,"language":130835,"meta":69,"style":69},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[71,148154,148155,148161,148171,148181,148191],{"__ignoreMap":69},[74,148156,148157,148159],{"class":76,"line":77},[74,148158,147900],{"class":1925},[74,148160,19851],{"class":84},[74,148162,148163,148165,148167,148169],{"class":76,"line":94},[74,148164,132449],{"class":134},[74,148166,55718],{"class":84},[74,148168,55758],{"class":134},[74,148170,1252],{"class":84},[74,148172,148173,148175,148177,148179],{"class":76,"line":1141},[74,148174,147929],{"class":134},[74,148176,55718],{"class":84},[74,148178,55873],{"class":134},[74,148180,1252],{"class":84},[74,148182,148183,148185,148187,148189],{"class":76,"line":1156},[74,148184,147940],{"class":134},[74,148186,55718],{"class":84},[74,148188,55873],{"class":134},[74,148190,1252],{"class":84},[74,148192,148193],{"class":76,"line":1162},[74,148194,1527],{"class":84},[19,148196,148197],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,148199,148200],{},"使用属性选择器",[1424,148202],{"style":130689,"src":148203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,148205,73170],{},[64,148207,148209],{"className":131580,"code":148208,"language":131582,"meta":69,"style":69},"\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",[71,148210,148211,148216,148230,148235,148255,148260,148279,148284,148303,148308,148327],{"__ignoreMap":69},[74,148212,148213],{"class":76,"line":77},[74,148214,148215],{"class":144},"\u003C!-- 携程网移动端案例结构 -->\n",[74,148217,148218,148220,148222,148224,148226,148228],{"class":76,"line":94},[74,148219,996],{"class":84},[74,148221,55892],{"class":55581},[74,148223,57767],{"class":1925},[74,148225,131],{"class":84},[74,148227,96604],{"class":190},[74,148229,55588],{"class":84},[74,148231,148232],{"class":76,"line":1141},[74,148233,148234],{"class":144},"  \u003C!-- 搜索栏 -->\n",[74,148236,148237,148239,148241,148243,148245,148248,148251,148253],{"class":76,"line":1156},[74,148238,56425],{"class":84},[74,148240,55892],{"class":55581},[74,148242,57767],{"class":1925},[74,148244,131],{"class":84},[74,148246,148247],{"class":190},"\"search-index\"",[74,148249,148250],{"class":84},">...\u003C\u002F",[74,148252,55892],{"class":55581},[74,148254,55588],{"class":84},[74,148256,148257],{"class":76,"line":1162},[74,148258,148259],{"class":144},"  \u003C!-- 焦点图 -->\n",[74,148261,148262,148264,148266,148268,148270,148273,148275,148277],{"class":76,"line":1176},[74,148263,56425],{"class":84},[74,148265,55892],{"class":55581},[74,148267,57767],{"class":1925},[74,148269,131],{"class":84},[74,148271,148272],{"class":190},"\"focus\"",[74,148274,148250],{"class":84},[74,148276,55892],{"class":55581},[74,148278,55588],{"class":84},[74,148280,148281],{"class":76,"line":1182},[74,148282,148283],{"class":144},"  \u003C!-- 主导航 -->\n",[74,148285,148286,148288,148290,148292,148294,148297,148299,148301],{"class":76,"line":1273},[74,148287,56425],{"class":84},[74,148289,55892],{"class":55581},[74,148291,57767],{"class":1925},[74,148293,131],{"class":84},[74,148295,148296],{"class":190},"\"local-nav\"",[74,148298,148250],{"class":84},[74,148300,55892],{"class":55581},[74,148302,55588],{"class":84},[74,148304,148305],{"class":76,"line":1279},[74,148306,148307],{"class":144},"  \u003C!-- 子导航 -->\n",[74,148309,148310,148312,148314,148316,148318,148321,148323,148325],{"class":76,"line":1291},[74,148311,56425],{"class":84},[74,148313,55892],{"class":55581},[74,148315,57767],{"class":1925},[74,148317,131],{"class":84},[74,148319,148320],{"class":190},"\"nav-common\"",[74,148322,148250],{"class":84},[74,148324,55892],{"class":55581},[74,148326,55588],{"class":84},[74,148328,148329,148331,148333],{"class":76,"line":1574},[74,148330,56066],{"class":84},[74,148332,55892],{"class":55581},[74,148334,55588],{"class":84},[19,148336,74734],{},[64,148338,148339],{"className":130833,"code":141285,"language":130835,"meta":69,"style":69},[71,148340,148341,148355,148371],{"__ignoreMap":69},[74,148342,148343,148345,148347,148349,148351,148353],{"class":76,"line":77},[74,148344,58102],{"class":55581},[74,148346,976],{"class":84},[74,148348,107388],{"class":1925},[74,148350,131],{"class":80},[74,148352,66980],{"class":190},[74,148354,141302],{"class":84},[74,148356,148357,148359,148361,148363,148365,148367,148369],{"class":76,"line":94},[74,148358,75177],{"class":134},[74,148360,55718],{"class":84},[74,148362,303],{"class":134},[74,148364,55773],{"class":80},[74,148366,55802],{"class":134},[74,148368,134413],{"class":134},[74,148370,1252],{"class":84},[74,148372,148373],{"class":76,"line":1141},[74,148374,1527],{"class":84},[19,148376,148377],{},"总代码和效果展示：",[1424,148379],{"style":130689,"src":148380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,148382,73170],{},[64,148384,148385],{"className":131580,"code":148208,"language":131582,"meta":69,"style":69},[71,148386,148387,148391,148405,148409,148427,148431,148449,148453,148471,148475,148493],{"__ignoreMap":69},[74,148388,148389],{"class":76,"line":77},[74,148390,148215],{"class":144},[74,148392,148393,148395,148397,148399,148401,148403],{"class":76,"line":94},[74,148394,996],{"class":84},[74,148396,55892],{"class":55581},[74,148398,57767],{"class":1925},[74,148400,131],{"class":84},[74,148402,96604],{"class":190},[74,148404,55588],{"class":84},[74,148406,148407],{"class":76,"line":1141},[74,148408,148234],{"class":144},[74,148410,148411,148413,148415,148417,148419,148421,148423,148425],{"class":76,"line":1156},[74,148412,56425],{"class":84},[74,148414,55892],{"class":55581},[74,148416,57767],{"class":1925},[74,148418,131],{"class":84},[74,148420,148247],{"class":190},[74,148422,148250],{"class":84},[74,148424,55892],{"class":55581},[74,148426,55588],{"class":84},[74,148428,148429],{"class":76,"line":1162},[74,148430,148259],{"class":144},[74,148432,148433,148435,148437,148439,148441,148443,148445,148447],{"class":76,"line":1176},[74,148434,56425],{"class":84},[74,148436,55892],{"class":55581},[74,148438,57767],{"class":1925},[74,148440,131],{"class":84},[74,148442,148272],{"class":190},[74,148444,148250],{"class":84},[74,148446,55892],{"class":55581},[74,148448,55588],{"class":84},[74,148450,148451],{"class":76,"line":1182},[74,148452,148283],{"class":144},[74,148454,148455,148457,148459,148461,148463,148465,148467,148469],{"class":76,"line":1273},[74,148456,56425],{"class":84},[74,148458,55892],{"class":55581},[74,148460,57767],{"class":1925},[74,148462,131],{"class":84},[74,148464,148296],{"class":190},[74,148466,148250],{"class":84},[74,148468,55892],{"class":55581},[74,148470,55588],{"class":84},[74,148472,148473],{"class":76,"line":1279},[74,148474,148307],{"class":144},[74,148476,148477,148479,148481,148483,148485,148487,148489,148491],{"class":76,"line":1291},[74,148478,56425],{"class":84},[74,148480,55892],{"class":55581},[74,148482,57767],{"class":1925},[74,148484,131],{"class":84},[74,148486,148320],{"class":190},[74,148488,148250],{"class":84},[74,148490,55892],{"class":55581},[74,148492,55588],{"class":84},[74,148494,148495,148497,148499],{"class":76,"line":1574},[74,148496,56066],{"class":84},[74,148498,55892],{"class":55581},[74,148500,55588],{"class":84},[19,148502,74734],{},[64,148504,148505],{"className":131580,"code":134937,"language":131582,"meta":69,"style":69},[71,148506,148507,148511,148525,148529],{"__ignoreMap":69},[74,148508,148509],{"class":76,"line":77},[74,148510,134944],{"class":144},[74,148512,148513,148515,148517,148519,148521,148523],{"class":76,"line":94},[74,148514,996],{"class":84},[74,148516,55892],{"class":55581},[74,148518,57767],{"class":1925},[74,148520,131],{"class":84},[74,148522,134957],{"class":190},[74,148524,55588],{"class":84},[74,148526,148527],{"class":76,"line":1141},[74,148528,134964],{"class":84},[74,148530,148531,148533,148535],{"class":76,"line":1156},[74,148532,56066],{"class":84},[74,148534,55892],{"class":55581},[74,148536,55588],{"class":84},[5090,148538,142234],{},{"title":69,"searchDepth":94,"depth":94,"links":148540},[148541,148542,148546,148547,148548],{"id":147685,"depth":94,"text":147686},{"id":147717,"depth":94,"text":147718,"children":148543},[148544,148545],{"id":147721,"depth":1141,"text":147722},{"id":147738,"depth":1141,"text":147739},{"id":147757,"depth":94,"text":147758},{"id":147764,"depth":94,"text":147765},{"id":147851,"depth":94,"text":147852,"children":148549},[148550,148551,148552,148553,148554],{"id":147858,"depth":1141,"text":147859},{"id":147986,"depth":1141,"text":147987},{"id":148080,"depth":1141,"text":148081},{"id":148129,"depth":1141,"text":148130},{"id":148139,"depth":1141,"text":148140},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":147677,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":148561,"title":148562,"body":148563,"description":27656,"extension":5121,"meta":149790,"navigation":2362,"path":149791,"seo":149792,"stem":149793,"__hash__":149794},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":148564,"toc":149768},[148565,148568,148572,148576,148579,148582,148586,148591,148594,148597,148600,148603,148606,148663,148666,148671,148674,148677,148681,148692,148696,148699,148702,148709,148714,148718,148721,148727,148730,148734,148737,148744,148747,148750,148757,148760,148767,148770,148773,148780,148783,148786,148788,148805,148809,148812,148815,148818,148822,148825,148828,148831,148834,148837,148840,148842,148845,148848,148910,148913,149023,149030,149036,149039,149042,149046,149049,149053,149058,149061,149068,149071,149077,149082,149085,149088,149091,149094,149097,149100,149103,149106,149162,149164,149190,149194,149197,149200,149203,149211,149214,149217,149221,149277,149280,149284,149290,149301,149304,149309,149312,149315,149321,149324,149327,149330,149333,149336,149339,149342,149345,149370,149376,149379,149382,149385,149388,149391,149394,149399,149402,149405,149408,149416,149419,149426,149429,149432,149434,149458,149460,149463,149466,149469,149472,149475,149478,149481,149515,149518,149521,149555,149562,149565,149568,149571,149574,149577,149580,149587,149590,149593,149596,149599,149606,149609,149612,149619,149622,149625,149629,149632,149635,149638,149641,149644,149647,149650,149653,149655,149679,149681,149705,149709,149720,149723,149726,149729,149732,149735,149738,149741,149744,149747,149750,149753,149756,149759,149762,149765],[10,148566,148562],{"id":148567},"_21-移动端布局实战下篇",[14,148569,148571],{"id":148570},"_211-rem适配布局","21.1 rem适配布局",[44,148573,148575],{"id":148574},"_2111-rem单位","21.1.1 rem单位",[1424,148577],{"style":130689,"src":148578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,148580,148581],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[44,148583,148585],{"id":148584},"_2112-媒体查询","21.1.2 媒体查询",[27,148587,148588],{},[30,148589,148590],{},"参数介绍",[1424,148592],{"style":130689,"src":148593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1424,148595],{"style":130689,"src":148596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1424,148598],{"style":130689,"src":148599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1424,148601],{"style":130689,"src":148602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1424,148604],{"style":130689,"src":148605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[64,148607,148609],{"className":130833,"code":148608,"language":130835,"meta":69,"style":69},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[71,148610,148611,148616,148635,148642,148655,148659],{"__ignoreMap":69},[74,148612,148613],{"class":76,"line":77},[74,148614,148615],{"class":144},"\u002F* 媒体查询 *\u002F\n",[74,148617,148618,148621,148623,148626,148628,148631,148633],{"class":76,"line":94},[74,148619,148620],{"class":80},"@media",[74,148622,1620],{"class":84},[74,148624,148625],{"class":134},"max-width",[74,148627,55718],{"class":84},[74,148629,148630],{"class":134},"768",[74,148632,55773],{"class":80},[74,148634,16721],{"class":84},[74,148636,148637,148640],{"class":76,"line":1141},[74,148638,148639],{"class":1925},"  .container",[74,148641,19851],{"class":84},[74,148643,148644,148647,148649,148651,148653],{"class":76,"line":1156},[74,148645,148646],{"class":134},"    width",[74,148648,55718],{"class":84},[74,148650,397],{"class":134},[74,148652,414],{"class":80},[74,148654,1252],{"class":84},[74,148656,148657],{"class":76,"line":1162},[74,148658,131629],{"class":84},[74,148660,148661],{"class":76,"line":1176},[74,148662,1527],{"class":84},[19,148664,148665],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[27,148667,148668],{"start":94},[30,148669,148670],{},"引入资源",[1424,148672],{"style":130689,"src":148673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,148675,148676],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[44,148678,148680],{"id":148679},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1093,148682,148683,148686,148689],{},[30,148684,148685],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[30,148687,148688],{},"媒体查询可以根据不同设备宽度来修改样式",[30,148690,148691],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,148693,148695],{"id":148694},"_212-less基础","21.2 Less基础",[19,148697,148698],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,148700,148701],{},"Less可以解决该问题，它是css的扩展语言",[19,148703,148704,148705],{},"Less中文网址： ",[324,148706,148707],{"href":148707,"rel":148708},"http:\u002F\u002Flesscss.cn\u002F",[28145],[19,148710,148711],{},[235,148712,148713],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[44,148715,148717],{"id":148716},"_2121-less安装","21.2.1 less安装",[19,148719,148720],{},"如果使用vscode，则无需进行下方安装步骤",[19,148722,148723],{},[324,148724,148725],{"href":148725,"rel":148726},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[28145],[1424,148728],{"style":130689,"src":148729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[44,148731,148733],{"id":148732},"_2122-less使用","21.2.2 less使用",[19,148735,148736],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[27,148738,148739],{},[30,148740,148741],{},[235,148742,148743],{},"Less 变量",[1424,148745],{"style":130689,"src":148746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1424,148748],{"style":130689,"src":148749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[27,148751,148752],{"start":94},[30,148753,148754],{},[235,148755,148756],{},"Less 编译",[1424,148758],{"style":130689,"src":148759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[27,148761,148762],{"start":1141},[30,148763,148764],{},[235,148765,148766],{},"Less 嵌套",[1424,148768],{"style":130689,"src":148769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1424,148771],{"style":130689,"src":148772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[27,148774,148775],{"start":1156},[30,148776,148777],{},[235,148778,148779],{},"Less 运算",[1424,148781],{"style":130689,"src":148782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,148784,148785],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,148787,115],{},[1093,148789,148790,148793,148796,148799,148802],{},[30,148791,148792],{},"乘号（*）和除号（\u002F）的写法",[30,148794,148795],{},"运算符中间左右有个空格隔开 1px + 5",[30,148797,148798],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[30,148800,148801],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[30,148803,148804],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,148806,148808],{"id":148807},"_213-rem-适配方案","21.3 rem 适配方案",[19,148810,148811],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,148813,148814],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1424,148816],{"style":130689,"src":148817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[44,148819,148821],{"id":148820},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,148823,148824],{},"rem + 媒体查询 + less 技术",[1424,148826],{"style":130689,"src":148827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,148829,148830],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,148832,148833],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1424,148835],{"style":130689,"src":148836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,148838,148839],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,148841,18912],{},[1424,148843],{"style":130689,"src":148844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,148846,148847],{},"index.html:",[64,148849,148851],{"className":130833,"code":148850,"language":130835,"meta":69,"style":69},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[71,148852,148853,148858,148864,148880,148884,148890,148906],{"__ignoreMap":69},[74,148854,148855],{"class":76,"line":77},[74,148856,148857],{"class":144},"\u002F* rem 适配方案 *\u002F\n",[74,148859,148860,148862],{"class":76,"line":94},[74,148861,54916],{"class":55581},[74,148863,19851],{"class":84},[74,148865,148866,148868,148870,148873,148875,148877],{"class":76,"line":1141},[74,148867,74907],{"class":134},[74,148869,55718],{"class":84},[74,148871,148872],{"class":134},"62.5",[74,148874,414],{"class":80},[74,148876,134696],{"class":84},[74,148878,148879],{"class":144},"\u002F* 1rem = 10px *\u002F\n",[74,148881,148882],{"class":76,"line":1156},[74,148883,1527],{"class":84},[74,148885,148886,148888],{"class":76,"line":1162},[74,148887,134681],{"class":1925},[74,148889,19851],{"class":84},[74,148891,148892,148894,148896,148898,148901,148903],{"class":76,"line":1176},[74,148893,74849],{"class":134},[74,148895,55718],{"class":84},[74,148897,532],{"class":134},[74,148899,148900],{"class":80},"rem",[74,148902,134696],{"class":84},[74,148904,148905],{"class":144},"\u002F* 100px *\u002F\n",[74,148907,148908],{"class":76,"line":1182},[74,148909,1527],{"class":84},[19,148911,148912],{},"common.less",[64,148914,148916],{"className":130833,"code":148915,"language":130835,"meta":69,"style":69},"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",[71,148917,148918,148924,148939,148943,148949,148963,148967,148971,148975,148981,148995,148999,149005,149019],{"__ignoreMap":69},[74,148919,148920,148922],{"class":76,"line":77},[74,148921,54916],{"class":55581},[74,148923,19851],{"class":84},[74,148925,148926,148928,148930,148932,148934,148936],{"class":76,"line":94},[74,148927,74907],{"class":134},[74,148929,55718],{"class":84},[74,148931,148872],{"class":134},[74,148933,414],{"class":80},[74,148935,30348],{"class":84},[74,148937,148938],{"class":144},"\u002F* 10px *\u002F\n",[74,148940,148941],{"class":76,"line":1141},[74,148942,1527],{"class":84},[74,148944,148945,148947],{"class":76,"line":1156},[74,148946,55892],{"class":55581},[74,148948,19851],{"class":84},[74,148950,148951,148953,148955,148957,148959,148961],{"class":76,"line":1162},[74,148952,74849],{"class":134},[74,148954,55718],{"class":84},[74,148956,532],{"class":134},[74,148958,148900],{"class":80},[74,148960,30348],{"class":84},[74,148962,148905],{"class":144},[74,148964,148965],{"class":76,"line":1176},[74,148966,1527],{"class":84},[74,148968,148969],{"class":76,"line":1182},[74,148970,140294],{"class":84},[74,148972,148973],{"class":76,"line":1273},[74,148974,148857],{"class":144},[74,148976,148977,148979],{"class":76,"line":1279},[74,148978,54916],{"class":55581},[74,148980,19851],{"class":84},[74,148982,148983,148985,148987,148989,148991,148993],{"class":76,"line":1291},[74,148984,74907],{"class":134},[74,148986,55718],{"class":84},[74,148988,148872],{"class":134},[74,148990,414],{"class":80},[74,148992,134696],{"class":84},[74,148994,148879],{"class":144},[74,148996,148997],{"class":76,"line":1574},[74,148998,1527],{"class":84},[74,149000,149001,149003],{"class":76,"line":1579},[74,149002,134681],{"class":1925},[74,149004,19851],{"class":84},[74,149006,149007,149009,149011,149013,149015,149017],{"class":76,"line":1585},[74,149008,74849],{"class":134},[74,149010,55718],{"class":84},[74,149012,532],{"class":134},[74,149014,148900],{"class":80},[74,149016,134696],{"class":84},[74,149018,148905],{"class":144},[74,149020,149021],{"class":76,"line":1590},[74,149022,1527],{"class":84},[19,149024,149025,149026,149029],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[27833,149027,149028],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[64,149031,149034],{"className":149032,"code":149033,"language":9466},[9464],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[71,149035,149033],{"__ignoreMap":69},[19,149037,149038],{},"less保存时会自动变成.css文件",[19,149040,149041],{},"好好搞懂上述代码写法",[44,149043,149045],{"id":149044},"_2132-样式导入样式","21.3.2 样式导入样式",[1424,149047],{"style":130689,"src":149048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[44,149050,149052],{"id":149051},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[27,149054,149055],{},[30,149056,149057],{},"准备工作",[1424,149059],{"style":130689,"src":149060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,149062,149063,149064],{},"github地址：",[324,149065,149066],{"href":149066,"rel":149067},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[28145],[19,149069,149070],{},"下载之后，将index.js文件拖到项目中就可以了",[19,149072,149073,149074],{},"js文件引入到index.html中使用的是",[71,149075,149076],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[27,149078,149079],{"start":94},[30,149080,149081],{},"vscode插件",[1424,149083],{"style":130689,"src":149084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,149086,149087],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,149089,149090],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1424,149092],{"style":130689,"src":149093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,149095,149096],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1424,149098],{"style":130689,"src":149099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,149101,149102],{},"修改成75就可以，alt+z为快捷键",[19,149104,149105],{},"index.css：",[64,149107,149108],{"className":130833,"code":148850,"language":130835,"meta":69,"style":69},[71,149109,149110,149114,149120,149134,149138,149144,149158],{"__ignoreMap":69},[74,149111,149112],{"class":76,"line":77},[74,149113,148857],{"class":144},[74,149115,149116,149118],{"class":76,"line":94},[74,149117,54916],{"class":55581},[74,149119,19851],{"class":84},[74,149121,149122,149124,149126,149128,149130,149132],{"class":76,"line":1141},[74,149123,74907],{"class":134},[74,149125,55718],{"class":84},[74,149127,148872],{"class":134},[74,149129,414],{"class":80},[74,149131,134696],{"class":84},[74,149133,148879],{"class":144},[74,149135,149136],{"class":76,"line":1156},[74,149137,1527],{"class":84},[74,149139,149140,149142],{"class":76,"line":1162},[74,149141,134681],{"class":1925},[74,149143,19851],{"class":84},[74,149145,149146,149148,149150,149152,149154,149156],{"class":76,"line":1176},[74,149147,74849],{"class":134},[74,149149,55718],{"class":84},[74,149151,532],{"class":134},[74,149153,148900],{"class":80},[74,149155,134696],{"class":84},[74,149157,148905],{"class":144},[74,149159,149160],{"class":76,"line":1182},[74,149161,1527],{"class":84},[19,149163,148847],{},[64,149165,149166],{"className":130833,"code":131237,"language":130835,"meta":69,"style":69},[71,149167,149168,149174,149186],{"__ignoreMap":69},[74,149169,149170,149172],{"class":76,"line":77},[74,149171,56081],{"class":55581},[74,149173,19851],{"class":84},[74,149175,149176,149178,149180,149182,149184],{"class":76,"line":94},[74,149177,74907],{"class":134},[74,149179,55718],{"class":84},[74,149181,687],{"class":134},[74,149183,55773],{"class":80},[74,149185,1252],{"class":84},[74,149187,149188],{"class":76,"line":1141},[74,149189,1527],{"class":84},[14,149191,149193],{"id":149192},"_214-响应式开发","21.4 响应式开发",[19,149195,149196],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1424,149198],{"style":130689,"src":149199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,149201,149202],{},"做法：",[1093,149204,149205,149208],{},[30,149206,149207],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[30,149209,149210],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1424,149212],{"style":130689,"src":149213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,149215,149216],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[44,149218,149220],{"id":149219},"_2141-简单代码示范","21.4.1 简单代码示范",[64,149222,149223],{"className":130833,"code":148850,"language":130835,"meta":69,"style":69},[71,149224,149225,149229,149235,149249,149253,149259,149273],{"__ignoreMap":69},[74,149226,149227],{"class":76,"line":77},[74,149228,148857],{"class":144},[74,149230,149231,149233],{"class":76,"line":94},[74,149232,54916],{"class":55581},[74,149234,19851],{"class":84},[74,149236,149237,149239,149241,149243,149245,149247],{"class":76,"line":1141},[74,149238,74907],{"class":134},[74,149240,55718],{"class":84},[74,149242,148872],{"class":134},[74,149244,414],{"class":80},[74,149246,134696],{"class":84},[74,149248,148879],{"class":144},[74,149250,149251],{"class":76,"line":1156},[74,149252,1527],{"class":84},[74,149254,149255,149257],{"class":76,"line":1162},[74,149256,134681],{"class":1925},[74,149258,19851],{"class":84},[74,149260,149261,149263,149265,149267,149269,149271],{"class":76,"line":1176},[74,149262,74849],{"class":134},[74,149264,55718],{"class":84},[74,149266,532],{"class":134},[74,149268,148900],{"class":80},[74,149270,134696],{"class":84},[74,149272,148905],{"class":144},[74,149274,149275],{"class":76,"line":1182},[74,149276,1527],{"class":84},[19,149278,149279],{},"父盒子一般命名为container",[44,149281,149283],{"id":149282},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,149285,149286,149287],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[235,149288,149289],{},"使得 Web 开发更加快捷",[1093,149291,149292],{},[30,149293,149294,149295],{},"官网：",[235,149296,149297],{},[324,149298,149299],{"href":149299,"rel":149300},"http:\u002F\u002Fgetbootstrap.com\u002F",[28145],[19,149302,149303],{},"可以直接去官网拿现成的东西",[27,149305,149306],{},[30,149307,149308],{},"Bootstrap的使用",[19,149310,149311],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,149313,149314],{},"Bootstrap 使用四步曲：",[19,149316,149317,149320],{},[235,149318,149319],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1424,149322],{"style":130689,"src":149323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,149325,149326],{},"打开Bootstrap官网，然后下载",[1424,149328],{"style":130689,"src":149329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1424,149331],{"style":130689,"src":149332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,149334,149335],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,149337,149338],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,149340,149341],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1424,149343],{"style":130689,"src":149344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[64,149346,149348],{"className":130833,"code":149347,"language":130835,"meta":69,"style":69},".center {\n  color: red;\n}\n",[71,149349,149350,149356,149366],{"__ignoreMap":69},[74,149351,149352,149354],{"class":76,"line":77},[74,149353,131124],{"class":1925},[74,149355,19851],{"class":84},[74,149357,149358,149360,149362,149364],{"class":76,"line":94},[74,149359,75186],{"class":134},[74,149361,55718],{"class":84},[74,149363,61702],{"class":134},[74,149365,1252],{"class":84},[74,149367,149368],{"class":76,"line":1141},[74,149369,1527],{"class":84},[19,149371,149372,149375],{},[71,149373,149374],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1424,149377],{"style":130689,"src":149378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1424,149380],{"style":130689,"src":149381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1424,149383],{"style":130689,"src":149384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,149386,149387],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1424,149389],{"style":130689,"src":149390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,149392,149393],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[27,149395,149396],{"start":94},[30,149397,149398],{},"布局容器",[1424,149400],{"style":130689,"src":149401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,149403,149404],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,149406,149407],{},"container-fluid用于移动式布局比较方便",[27,149409,149410],{"start":1141},[30,149411,149412,149413],{},"bootstrap ",[235,149414,149415],{},"栅格系统原理",[1424,149417],{"style":130689,"src":149418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[27,149420,149421],{"start":1156},[30,149422,149423],{},[235,149424,149425],{},"栅格选项参数",[1424,149427],{"style":130689,"src":149428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,149430,149431],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,149433,18912],{},[64,149435,149436],{"className":130833,"code":149347,"language":130835,"meta":69,"style":69},[71,149437,149438,149444,149454],{"__ignoreMap":69},[74,149439,149440,149442],{"class":76,"line":77},[74,149441,131124],{"class":1925},[74,149443,19851],{"class":84},[74,149445,149446,149448,149450,149452],{"class":76,"line":94},[74,149447,75186],{"class":134},[74,149449,55718],{"class":84},[74,149451,61702],{"class":134},[74,149453,1252],{"class":84},[74,149455,149456],{"class":76,"line":1141},[74,149457,1527],{"class":84},[19,149459,139876],{},[1424,149461],{"style":130689,"src":149462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,149464,149465],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,149467,149468],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,149470,149471],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,149473,149474],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,149476,149477],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,149479,149480],{},"汇总展示说明：",[64,149482,149483],{"className":131580,"code":134937,"language":131582,"meta":69,"style":69},[71,149484,149485,149489,149503,149507],{"__ignoreMap":69},[74,149486,149487],{"class":76,"line":77},[74,149488,134944],{"class":144},[74,149490,149491,149493,149495,149497,149499,149501],{"class":76,"line":94},[74,149492,996],{"class":84},[74,149494,55892],{"class":55581},[74,149496,57767],{"class":1925},[74,149498,131],{"class":84},[74,149500,134957],{"class":190},[74,149502,55588],{"class":84},[74,149504,149505],{"class":76,"line":1141},[74,149506,134964],{"class":84},[74,149508,149509,149511,149513],{"class":76,"line":1156},[74,149510,56066],{"class":84},[74,149512,55892],{"class":55581},[74,149514,55588],{"class":84},[1424,149516],{"style":130689,"src":149517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,149519,149520],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[64,149522,149523],{"className":131580,"code":134937,"language":131582,"meta":69,"style":69},[71,149524,149525,149529,149543,149547],{"__ignoreMap":69},[74,149526,149527],{"class":76,"line":77},[74,149528,134944],{"class":144},[74,149530,149531,149533,149535,149537,149539,149541],{"class":76,"line":94},[74,149532,996],{"class":84},[74,149534,55892],{"class":55581},[74,149536,57767],{"class":1925},[74,149538,131],{"class":84},[74,149540,134957],{"class":190},[74,149542,55588],{"class":84},[74,149544,149545],{"class":76,"line":1141},[74,149546,134964],{"class":84},[74,149548,149549,149551,149553],{"class":76,"line":1156},[74,149550,56066],{"class":84},[74,149552,55892],{"class":55581},[74,149554,55588],{"class":84},[27,149556,149557],{"start":1162},[30,149558,149559],{},[235,149560,149561],{},"列嵌套",[1424,149563],{"style":130689,"src":149564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,149566,149567],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,149569,149570],{},"没加row内部这样：",[1424,149572],{"style":130689,"src":149573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,149575,149576],{},"加上row之后内部为：",[1424,149578],{"style":130689,"src":149579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[27,149581,149582],{"start":1176},[30,149583,149584],{},[235,149585,149586],{},"列偏移",[1424,149588],{"style":130689,"src":149589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,149591,149592],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,149594,149595],{},"要加偏移量，即偏移份数",[19,149597,149598],{},"偏移的份数=12-两个盒子的份数",[27,149600,149601],{"start":1182},[30,149602,149603],{},[235,149604,149605],{},"列排序",[1424,149607],{"style":130689,"src":149608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,149610,149611],{},"pull拉左；push推右",[27,149613,149614],{"start":1273},[30,149615,149616],{},[235,149617,149618],{},"响应式工具",[1424,149620],{"style":130689,"src":149621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,149623,149624],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[44,149626,149628],{"id":149627},"_2143-响应式小项目","21.4.3 响应式小项目",[19,149630,149631],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,149633,149634],{},"ul {",[19,149636,149637],{},"list-style: none;",[19,149639,149640],{},"margin:0;",[19,149642,149643],{},"padding:0; }",[1424,149645],{"style":130689,"src":149646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1424,149648],{"style":130689,"src":149649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,149651,149652],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,149654,73170],{},[64,149656,149657],{"className":130833,"code":143503,"language":130835,"meta":69,"style":69},[71,149658,149659,149665,149675],{"__ignoreMap":69},[74,149660,149661,149663],{"class":76,"line":77},[74,149662,134681],{"class":1925},[74,149664,19851],{"class":84},[74,149666,149667,149669,149671,149673],{"class":76,"line":94},[74,149668,135313],{"class":134},[74,149670,55718],{"class":84},[74,149672,28016],{"class":134},[74,149674,1252],{"class":84},[74,149676,149677],{"class":76,"line":1141},[74,149678,1527],{"class":84},[19,149680,74734],{},[64,149682,149683],{"className":130833,"code":143503,"language":130835,"meta":69,"style":69},[71,149684,149685,149691,149701],{"__ignoreMap":69},[74,149686,149687,149689],{"class":76,"line":77},[74,149688,134681],{"class":1925},[74,149690,19851],{"class":84},[74,149692,149693,149695,149697,149699],{"class":76,"line":94},[74,149694,135313],{"class":134},[74,149696,55718],{"class":84},[74,149698,28016],{"class":134},[74,149700,1252],{"class":84},[74,149702,149703],{"class":76,"line":1141},[74,149704,1527],{"class":84},[14,149706,149708],{"id":149707},"_215-swiper-插件使用","21.5 swiper 插件使用",[1093,149710,149711,149714,149717],{},[30,149712,149713],{},"下载需要的css和js文件html页面中 引入相关文件",[30,149715,149716],{},"官网找到类似案例，复制html结构，css样式 js 语法",[30,149718,149719],{},"根据需求定制修改模块",[1424,149721],{"style":130689,"src":149722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,149724,149725],{},"解压后将这两部分放到项目中",[1424,149727],{"style":130689,"src":149728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,149730,149731],{},"这个插件可以帮助我们实现轮播图效果",[19,149733,149734],{},"用法：",[1424,149736],{"style":130689,"src":149737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,149739,149740],{},"找到自己喜欢的",[1424,149742],{"style":130689,"src":149743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,149745,149746],{},"右键，查看网页源代码",[1424,149748],{"style":130689,"src":149749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,149751,149752],{},"复制人家的结构内容",[19,149754,149755],{},"然后去看API文档：",[1424,149757],{"style":130689,"src":149758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,149760,149761],{},"可以看看如何修改样式",[19,149763,149764],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5090,149766,149767],{},"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":69,"searchDepth":94,"depth":94,"links":149769},[149770,149775,149779,149784,149789],{"id":148570,"depth":94,"text":148571,"children":149771},[149772,149773,149774],{"id":148574,"depth":1141,"text":148575},{"id":148584,"depth":1141,"text":148585},{"id":148679,"depth":1141,"text":148680},{"id":148694,"depth":94,"text":148695,"children":149776},[149777,149778],{"id":148716,"depth":1141,"text":148717},{"id":148732,"depth":1141,"text":148733},{"id":148807,"depth":94,"text":148808,"children":149780},[149781,149782,149783],{"id":148820,"depth":1141,"text":148821},{"id":149044,"depth":1141,"text":149045},{"id":149051,"depth":1141,"text":149052},{"id":149192,"depth":94,"text":149193,"children":149785},[149786,149787,149788],{"id":149219,"depth":1141,"text":149220},{"id":149282,"depth":1141,"text":149283},{"id":149627,"depth":1141,"text":149628},{"id":149707,"depth":94,"text":149708},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":148562,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":149796,"title":149797,"body":149798,"description":27656,"extension":5121,"meta":150018,"navigation":2362,"path":150019,"seo":150020,"stem":150021,"__hash__":150022},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":149799,"toc":150014},[149800,149803,149807,149810,149825,149830,149833,149838,149873,149878,149890,149895,149908,149913,149930,149935,149955,149960,149978,149981,149984,149987,149990,149994,149997,150000,150003,150006,150009,150012],[10,149801,149797],{"id":149802},"_22-代码提交与新型相对单位",[14,149804,149806],{"id":149805},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,149808,149809],{},"法1：",[27,149811,149812,149819,149822],{},[30,149813,149814,149815],{},"登录网站注册：",[324,149816,149817],{"href":149817,"rel":149818},"https:\u002F\u002Fgitee.com\u002F",[28145],[30,149820,149821],{},"码云创建新的仓库",[30,149823,149824],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1093,149826,149827],{},[30,149828,149829],{},"在网站根目录右键-- Git Bash Here",[1424,149831],{"style":130689,"src":149832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1093,149834,149835],{},[30,149836,149837],{},"如果是第一次利用git提交，请配置好全局选项",[64,149839,149841],{"className":121577,"code":149840,"language":121579,"meta":69,"style":69},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[71,149842,149843,149859],{"__ignoreMap":69},[74,149844,149845,149848,149850,149853,149856],{"class":76,"line":77},[74,149846,149847],{"class":1925},"git",[74,149849,124000],{"class":190},[74,149851,149852],{"class":134}," --global",[74,149854,149855],{"class":190}," user.name",[74,149857,149858],{"class":190}," \"你的名字\"\n",[74,149860,149861,149863,149865,149867,149870],{"class":76,"line":94},[74,149862,149847],{"class":1925},[74,149864,124000],{"class":190},[74,149866,149852],{"class":134},[74,149868,149869],{"class":190}," user.email",[74,149871,149872],{"class":190}," \"你的邮箱\"\n",[1093,149874,149875],{},[30,149876,149877],{},"初始化仓库",[64,149879,149881],{"className":121577,"code":149880,"language":121579,"meta":69,"style":69},"git init\n",[71,149882,149883],{"__ignoreMap":69},[74,149884,149885,149887],{"class":76,"line":77},[74,149886,149847],{"class":1925},[74,149888,149889],{"class":190}," init\n",[1093,149891,149892],{},[30,149893,149894],{},"把本地文件放到暂存区",[64,149896,149898],{"className":121577,"code":149897,"language":121579,"meta":69,"style":69},"git add .\n",[71,149899,149900],{"__ignoreMap":69},[74,149901,149902,149904,149906],{"class":76,"line":77},[74,149903,149847],{"class":1925},[74,149905,9488],{"class":190},[74,149907,33022],{"class":190},[1093,149909,149910],{},[30,149911,149912],{},"把本地文件放到本地仓库里面",[64,149914,149916],{"className":121577,"code":149915,"language":121579,"meta":69,"style":69},"git commit -m \"first commit\"\n",[71,149917,149918],{"__ignoreMap":69},[74,149919,149920,149922,149925,149927],{"class":76,"line":77},[74,149921,149847],{"class":1925},[74,149923,149924],{"class":190}," commit",[74,149926,105163],{"class":134},[74,149928,149929],{"class":190}," \"first commit\"\n",[1093,149931,149932],{},[30,149933,149934],{},"链接远程仓库",[64,149936,149938],{"className":121577,"code":149937,"language":121579,"meta":69,"style":69},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[71,149939,149940],{"__ignoreMap":69},[74,149941,149942,149944,149947,149949,149952],{"class":76,"line":77},[74,149943,149847],{"class":1925},[74,149945,149946],{"class":190}," remote",[74,149948,9488],{"class":190},[74,149950,149951],{"class":190}," origin",[74,149953,149954],{"class":190}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1093,149956,149957],{},[30,149958,149959],{},"把本地仓库的文件推送到远程仓库 push",[64,149961,149963],{"className":121577,"code":149962,"language":121579,"meta":69,"style":69},"git push -u origin master\n",[71,149964,149965],{"__ignoreMap":69},[74,149966,149967,149969,149971,149973,149975],{"class":76,"line":77},[74,149968,149847],{"class":1925},[74,149970,33297],{"class":190},[74,149972,32571],{"class":134},[74,149974,149951],{"class":190},[74,149976,149977],{"class":190}," master\n",[1424,149979],{"style":130689,"src":149980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,149982,149983],{},"上方方法暂未实现，后边学完git后在整",[19,149985,149986],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1424,149988],{"style":130689,"src":149989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,149991,149993],{"id":149992},"_222-新型相对单位","22.2 新型相对单位",[1424,149995],{"style":130689,"src":149996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1424,149998],{"style":130689,"src":149999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,150001,150002],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,150004,150005],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1424,150007],{"style":130689,"src":150008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,150010,150011],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5090,150013,28238],{},{"title":69,"searchDepth":94,"depth":94,"links":150015},[150016,150017],{"id":149805,"depth":94,"text":149806},{"id":149992,"depth":94,"text":149993},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":149797,"description":27656},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":150024,"title":150025,"body":150026,"description":150030,"extension":5121,"meta":150031,"navigation":2362,"path":150032,"seo":150033,"stem":150034,"__hash__":150035},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":150027,"toc":150028},[],{"title":69,"searchDepth":94,"depth":94,"links":150029},[],"自己正经开始学编程的第一门语言！",{"category":97120},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":150025,"description":150030},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":150037,"title":150038,"body":150039,"description":27656,"extension":5121,"meta":151186,"navigation":2362,"path":151187,"seo":151188,"stem":151189,"__hash__":151190},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":150040,"toc":151162},[150041,150044,150048,150051,150054,150079,150082,150088,150092,150095,150122,150125,150165,150168,150180,150183,150189,150193,150197,150224,150241,150248,150252,150255,150281,150284,150288,150291,150331,150334,150351,150357,150361,150366,150410,150413,150431,150434,150502,150506,150513,150516,150531,150534,150543,150546,150557,150560,150569,150572,150589,150592,150607,150611,150615,150618,150620,150640,150644,150647,150650,150661,150664,150670,150674,150680,150707,150710,150722,150725,150736,150739,150745,150749,150755,150805,150808,150850,150853,150886,150889,150923,150927,150930,150950,150953,150989,150992,151005,151009,151013,151019,151022,151035,151039,151042,151048,151051,151055,151058,151061,151110,151114,151130,151136,151143,151149,151159],[10,150042,150038],{"id":150043},"_1-python环境与第一个程序",[14,150045,150047],{"id":150046},"_11-什么是python","1.1 什么是Python",[19,150049,150050],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,150052,150053],{},"理解 Python 时抓住三个关键词：",[27,150055,150056,150059,150062],{},[30,150057,150058],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[30,150060,150061],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[30,150063,150064,150065,298,150068,298,150071,298,150074,298,150076,32666],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[71,150066,150067],{},"os",[71,150069,150070],{},"sys",[71,150072,150073],{},"json",[71,150075,62141],{},[71,150077,150078],{},"datetime",[19,150080,150081],{},"Python 程序的运行链路：",[64,150083,150086],{"className":150084,"code":150085,"language":9466,"meta":69},[9464],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[71,150087,150085],{"__ignoreMap":69},[14,150089,150091],{"id":150090},"_12-python解释器","1.2 Python解释器",[19,150093,150094],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[64,150096,150098],{"className":28102,"code":150097,"language":28104,"meta":69,"style":69},"python --version\npython3 --version\npython\npython3\n",[71,150099,150100,150106,150112,150117],{"__ignoreMap":69},[74,150101,150102,150104],{"class":76,"line":77},[74,150103,34661],{"class":1925},[74,150105,30574],{"class":134},[74,150107,150108,150110],{"class":76,"line":94},[74,150109,105160],{"class":1925},[74,150111,30574],{"class":134},[74,150113,150114],{"class":76,"line":1141},[74,150115,150116],{"class":1925},"python\n",[74,150118,150119],{"class":76,"line":1156},[74,150120,150121],{"class":1925},"python3\n",[19,150123,150124],{},"进入交互模式后，可以直接输入表达式：",[64,150126,150128],{"className":34659,"code":150127,"language":34661,"meta":69,"style":69},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[71,150129,150130,150141,150146,150160],{"__ignoreMap":69},[74,150131,150132,150135,150137,150139],{"class":76,"line":77},[74,150133,150134],{"class":80},">>>",[74,150136,29399],{"class":134},[74,150138,49847],{"class":80},[74,150140,52004],{"class":134},[74,150142,150143],{"class":76,"line":94},[74,150144,150145],{"class":134},"3\n",[74,150147,150148,150150,150153,150155,150158],{"class":76,"line":1141},[74,150149,150134],{"class":80},[74,150151,150152],{"class":134}," print",[74,150154,85],{"class":84},[74,150156,150157],{"class":190},"\"hello python\"",[74,150159,91],{"class":84},[74,150161,150162],{"class":76,"line":1156},[74,150163,150164],{"class":84},"hello python\n",[19,150166,150167],{},"退出交互模式：",[64,150169,150171],{"className":34659,"code":150170,"language":34661,"meta":69,"style":69},"exit()\n",[71,150172,150173],{"__ignoreMap":69},[74,150174,150175,150178],{"class":76,"line":77},[74,150176,150177],{"class":134},"exit",[74,150179,1938],{"class":84},[19,150181,150182],{},"或使用快捷键：",[64,150184,150187],{"className":150185,"code":150186,"language":9466,"meta":69},[9464],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[71,150188,150186],{"__ignoreMap":69},[14,150190,150192],{"id":150191},"_13-安装python","1.3 安装Python",[44,150194,150196],{"id":150195},"_131-windows安装","1.3.1 Windows安装",[27,150198,150199,150206,150209,150215,150221],{},[30,150200,150201,150202],{},"打开 Python 官网：",[324,150203,150204],{"href":150204,"rel":150205},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[28145],[30,150207,150208],{},"下载 Windows Installer。",[30,150210,150211,150212,32666],{},"安装时勾选 ",[71,150213,150214],{},"Add Python to PATH",[30,150216,150217,150218,32666],{},"点击 ",[71,150219,150220],{},"Install Now",[30,150222,150223],{},"安装完成后打开命令提示符验证：",[64,150225,150227],{"className":28102,"code":150226,"language":28104,"meta":69,"style":69},"python --version\npip --version\n",[71,150228,150229,150235],{"__ignoreMap":69},[74,150230,150231,150233],{"class":76,"line":77},[74,150232,34661],{"class":1925},[74,150234,30574],{"class":134},[74,150236,150237,150239],{"class":76,"line":94},[74,150238,28111],{"class":1925},[74,150240,30574],{"class":134},[19,150242,150243,150244,150247],{},"如果提示 ",[71,150245,150246],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[44,150249,150251],{"id":150250},"_132-macos安装","1.3.2 macOS安装",[19,150253,150254],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[64,150256,150258],{"className":28102,"code":150257,"language":28104,"meta":69,"style":69},"brew install python\npython3 --version\npip3 --version\n",[71,150259,150260,150269,150275],{"__ignoreMap":69},[74,150261,150262,150265,150267],{"class":76,"line":77},[74,150263,150264],{"class":1925},"brew",[74,150266,28114],{"class":190},[74,150268,128599],{"class":190},[74,150270,150271,150273],{"class":76,"line":94},[74,150272,105160],{"class":1925},[74,150274,30574],{"class":134},[74,150276,150277,150279],{"class":76,"line":1141},[74,150278,123981],{"class":1925},[74,150280,30574],{"class":134},[19,150282,150283],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[44,150285,150287],{"id":150286},"_133-linux安装","1.3.3 Linux安装",[19,150289,150290],{},"Ubuntu\u002FDebian：",[64,150292,150294],{"className":28102,"code":150293,"language":28104,"meta":69,"style":69},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[71,150295,150296,150304,150319,150325],{"__ignoreMap":69},[74,150297,150298,150300,150302],{"class":76,"line":77},[74,150299,28857],{"class":1925},[74,150301,121598],{"class":190},[74,150303,30523],{"class":190},[74,150305,150306,150308,150310,150312,150314,150316],{"class":76,"line":94},[74,150307,28857],{"class":1925},[74,150309,121598],{"class":190},[74,150311,28114],{"class":190},[74,150313,108684],{"class":190},[74,150315,105079],{"class":190},[74,150317,150318],{"class":190}," python3-venv\n",[74,150320,150321,150323],{"class":76,"line":1141},[74,150322,105160],{"class":1925},[74,150324,30574],{"class":134},[74,150326,150327,150329],{"class":76,"line":1156},[74,150328,123981],{"class":1925},[74,150330,30574],{"class":134},[19,150332,150333],{},"Fedora：",[64,150335,150337],{"className":28102,"code":150336,"language":28104,"meta":69,"style":69},"sudo dnf install python3 python3-pip\n",[71,150338,150339],{"__ignoreMap":69},[74,150340,150341,150343,150345,150347,150349],{"class":76,"line":77},[74,150342,28857],{"class":1925},[74,150344,30596],{"class":190},[74,150346,28114],{"class":190},[74,150348,108684],{"class":190},[74,150350,124046],{"class":190},[19,150352,150353,150354,150356],{},"Linux 上通常使用 ",[71,150355,105160],{}," 命令，避免和系统旧版本 Python 冲突。",[14,150358,150360],{"id":150359},"_14-pip包管理器","1.4 pip包管理器",[19,150362,150363,150365],{},[71,150364,28111],{}," 用来安装第三方库。",[64,150367,150369],{"className":28102,"code":150368,"language":28104,"meta":69,"style":69},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[71,150370,150371,150380,150389,150397,150403],{"__ignoreMap":69},[74,150372,150373,150375,150377],{"class":76,"line":77},[74,150374,28111],{"class":1925},[74,150376,28114],{"class":190},[74,150378,150379],{"class":190}," requests\n",[74,150381,150382,150384,150387],{"class":76,"line":94},[74,150383,28111],{"class":1925},[74,150385,150386],{"class":190}," uninstall",[74,150388,150379],{"class":190},[74,150390,150391,150393,150395],{"class":76,"line":1141},[74,150392,28111],{"class":1925},[74,150394,121855],{"class":190},[74,150396,150379],{"class":190},[74,150398,150399,150401],{"class":76,"line":1156},[74,150400,28111],{"class":1925},[74,150402,123236],{"class":190},[74,150404,150405,150407],{"class":76,"line":1162},[74,150406,28111],{"class":1925},[74,150408,150409],{"class":190}," freeze\n",[19,150411,150412],{},"国内网络较慢时可以临时使用镜像：",[64,150414,150416],{"className":28102,"code":150415,"language":28104,"meta":69,"style":69},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[71,150417,150418],{"__ignoreMap":69},[74,150419,150420,150422,150424,150427,150429],{"class":76,"line":77},[74,150421,28111],{"class":1925},[74,150423,28114],{"class":190},[74,150425,150426],{"class":190}," requests",[74,150428,30711],{"class":134},[74,150430,124009],{"class":190},[19,150432,150433],{},"常见第三方库：",[223,150435,150436,150445],{},[226,150437,150438],{},[229,150439,150440,150443],{},[232,150441,150442],{},"库",[232,150444,106977],{},[270,150446,150447,150455,150462,150470,150478,150486,150494],{},[229,150448,150449,150452],{},[275,150450,150451],{},"requests",[275,150453,150454],{},"网络请求",[229,150456,150457,150459],{},[275,150458,104907],{},[275,150460,150461],{},"数值计算",[229,150463,150464,150467],{},[275,150465,150466],{},"pandas",[275,150468,150469],{},"表格数据处理",[229,150471,150472,150475],{},[275,150473,150474],{},"matplotlib",[275,150476,150477],{},"绘图",[229,150479,150480,150483],{},[275,150481,150482],{},"pyecharts",[275,150484,150485],{},"ECharts 图表",[229,150487,150488,150491],{},[275,150489,150490],{},"flask",[275,150492,150493],{},"Web 后端",[229,150495,150496,150499],{},[275,150497,150498],{},"pytest",[275,150500,150501],{},"自动化测试",[14,150503,150505],{"id":150504},"_15-虚拟环境","1.5 虚拟环境",[19,150507,150508,150509,150512],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[71,150510,150511],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,150514,150515],{},"创建虚拟环境：",[64,150517,150519],{"className":28102,"code":150518,"language":28104,"meta":69,"style":69},"python -m venv .venv\n",[71,150520,150521],{"__ignoreMap":69},[74,150522,150523,150525,150527,150529],{"class":76,"line":77},[74,150524,34661],{"class":1925},[74,150526,105163],{"class":134},[74,150528,105166],{"class":190},[74,150530,105169],{"class":190},[19,150532,150533],{},"Windows 激活：",[64,150535,150537],{"className":28102,"code":150536,"language":28104,"meta":69,"style":69},".venv\\Scripts\\activate\n",[71,150538,150539],{"__ignoreMap":69},[74,150540,150541],{"class":76,"line":77},[74,150542,150536],{"class":1925},[19,150544,150545],{},"macOS\u002FLinux 激活：",[64,150547,150549],{"className":28102,"code":150548,"language":28104,"meta":69,"style":69},"source .venv\u002Fbin\u002Factivate\n",[71,150550,150551],{"__ignoreMap":69},[74,150552,150553,150555],{"class":76,"line":77},[74,150554,105174],{"class":134},[74,150556,105177],{"class":190},[19,150558,150559],{},"退出虚拟环境：",[64,150561,150563],{"className":28102,"code":150562,"language":28104,"meta":69,"style":69},"deactivate\n",[71,150564,150565],{"__ignoreMap":69},[74,150566,150567],{"class":76,"line":77},[74,150568,150562],{"class":1925},[19,150570,150571],{},"保存依赖：",[64,150573,150575],{"className":28102,"code":150574,"language":28104,"meta":69,"style":69},"pip freeze > requirements.txt\n",[71,150576,150577],{"__ignoreMap":69},[74,150578,150579,150581,150584,150586],{"class":76,"line":77},[74,150580,28111],{"class":1925},[74,150582,150583],{"class":190}," freeze",[74,150585,30503],{"class":80},[74,150587,150588],{"class":190}," requirements.txt\n",[19,150590,150591],{},"安装依赖：",[64,150593,150595],{"className":28102,"code":150594,"language":28104,"meta":69,"style":69},"pip install -r requirements.txt\n",[71,150596,150597],{"__ignoreMap":69},[74,150598,150599,150601,150603,150605],{"class":76,"line":77},[74,150600,28111],{"class":1925},[74,150602,28114],{"class":190},[74,150604,123920],{"class":134},[74,150606,150588],{"class":190},[14,150608,150610],{"id":150609},"_16-开发工具","1.6 开发工具",[44,150612,150614],{"id":150613},"_161-pycharm","1.6.1 PyCharm",[19,150616,150617],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,150619,126343],{},[27,150621,150622,150625,150628,150634,150637],{},[30,150623,150624],{},"New Project：创建项目。",[30,150626,150627],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[30,150629,150630,150631,130264],{},"New Python File：创建 ",[71,150632,150633],{},".py",[30,150635,150636],{},"Run：运行当前文件。",[30,150638,150639],{},"Debug：断点调试。",[44,150641,150643],{"id":150642},"_162-vs-code","1.6.2 VS Code",[19,150645,150646],{},"VS Code 轻量，适合后续多语言开发。",[19,150648,150649],{},"建议安装插件：",[27,150651,150652,150655,150658],{},[30,150653,150654],{},"Python。",[30,150656,150657],{},"Pylance。",[30,150659,150660],{},"Jupyter。",[19,150662,150663],{},"选择解释器：",[64,150665,150668],{"className":150666,"code":150667,"language":9466,"meta":69},[9464],"Ctrl + Shift + P -> Python: Select Interpreter\n",[71,150669,150667],{"__ignoreMap":69},[14,150671,150673],{"id":150672},"_17-第一个python程序","1.7 第一个Python程序",[19,150675,150676,150677,28899],{},"创建文件 ",[71,150678,150679],{},"hello.py",[64,150681,150683],{"className":34659,"code":150682,"language":34661,"meta":69,"style":69},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[71,150684,150685,150696],{"__ignoreMap":69},[74,150686,150687,150689,150691,150694],{"class":76,"line":77},[74,150688,34696],{"class":134},[74,150690,85],{"class":84},[74,150692,150693],{"class":190},"\"Hello World\"",[74,150695,91],{"class":84},[74,150697,150698,150700,150702,150705],{"class":76,"line":94},[74,150699,34696],{"class":134},[74,150701,85],{"class":84},[74,150703,150704],{"class":190},"\"你好，Python\"",[74,150706,91],{"class":84},[19,150708,150709],{},"在终端运行：",[64,150711,150713],{"className":28102,"code":150712,"language":28104,"meta":69,"style":69},"python hello.py\n",[71,150714,150715],{"__ignoreMap":69},[74,150716,150717,150719],{"class":76,"line":77},[74,150718,34661],{"class":1925},[74,150720,150721],{"class":190}," hello.py\n",[19,150723,150724],{},"或：",[64,150726,150728],{"className":28102,"code":150727,"language":28104,"meta":69,"style":69},"python3 hello.py\n",[71,150729,150730],{"__ignoreMap":69},[74,150731,150732,150734],{"class":76,"line":77},[74,150733,105160],{"class":1925},[74,150735,150721],{"class":190},[19,150737,150738],{},"输出：",[64,150740,150743],{"className":150741,"code":150742,"language":9466,"meta":69},[9464],"Hello World\n你好，Python\n",[71,150744,150742],{"__ignoreMap":69},[14,150746,150748],{"id":150747},"_18-print函数","1.8 print函数",[19,150750,150751,150754],{},[71,150752,150753],{},"print()"," 用来输出内容。",[64,150756,150758],{"className":34659,"code":150757,"language":34661,"meta":69,"style":69},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[71,150759,150760,150770,150780,150790],{"__ignoreMap":69},[74,150761,150762,150764,150766,150768],{"class":76,"line":77},[74,150763,34696],{"class":134},[74,150765,85],{"class":84},[74,150767,10123],{"class":190},[74,150769,91],{"class":84},[74,150771,150772,150774,150776,150778],{"class":76,"line":94},[74,150773,34696],{"class":134},[74,150775,85],{"class":84},[74,150777,397],{"class":134},[74,150779,91],{"class":84},[74,150781,150782,150784,150786,150788],{"class":76,"line":1141},[74,150783,34696],{"class":134},[74,150785,85],{"class":84},[74,150787,135],{"class":134},[74,150789,91],{"class":84},[74,150791,150792,150794,150796,150799,150801,150803],{"class":76,"line":1156},[74,150793,34696],{"class":134},[74,150795,85],{"class":84},[74,150797,150798],{"class":190},"\"年龄:\"",[74,150800,16714],{"class":84},[74,150802,736],{"class":134},[74,150804,91],{"class":84},[19,150806,150807],{},"多个内容用逗号隔开，默认中间加空格：",[64,150809,150811],{"className":34659,"code":150810,"language":34661,"meta":69,"style":69},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[71,150812,150813,150823,150833],{"__ignoreMap":69},[74,150814,150815,150818,150820],{"class":76,"line":77},[74,150816,150817],{"class":84},"name ",[74,150819,131],{"class":80},[74,150821,150822],{"class":190}," \"张三\"\n",[74,150824,150825,150828,150830],{"class":76,"line":94},[74,150826,150827],{"class":84},"age ",[74,150829,131],{"class":80},[74,150831,150832],{"class":134}," 18\n",[74,150834,150835,150837,150839,150842,150845,150847],{"class":76,"line":1141},[74,150836,34696],{"class":134},[74,150838,85],{"class":84},[74,150840,150841],{"class":190},"\"姓名:\"",[74,150843,150844],{"class":84},", name, ",[74,150846,150798],{"class":190},[74,150848,150849],{"class":84},", age)\n",[19,150851,150852],{},"修改分隔符：",[64,150854,150856],{"className":34659,"code":150855,"language":34661,"meta":69,"style":69},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[71,150857,150858],{"__ignoreMap":69},[74,150859,150860,150862,150864,150867,150869,150871,150873,150875,150877,150880,150882,150884],{"class":76,"line":77},[74,150861,34696],{"class":134},[74,150863,85],{"class":84},[74,150865,150866],{"class":190},"\"2024\"",[74,150868,16714],{"class":84},[74,150870,58597],{"class":190},[74,150872,16714],{"class":84},[74,150874,58597],{"class":190},[74,150876,16714],{"class":84},[74,150878,150879],{"class":9495},"sep",[74,150881,131],{"class":80},[74,150883,36764],{"class":190},[74,150885,91],{"class":84},[19,150887,150888],{},"修改结尾符：",[64,150890,150892],{"className":34659,"code":150891,"language":34661,"meta":69,"style":69},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[71,150893,150894,150912],{"__ignoreMap":69},[74,150895,150896,150898,150900,150902,150904,150906,150908,150910],{"class":76,"line":77},[74,150897,34696],{"class":134},[74,150899,85],{"class":84},[74,150901,10123],{"class":190},[74,150903,16714],{"class":84},[74,150905,50082],{"class":9495},[74,150907,131],{"class":80},[74,150909,4322],{"class":190},[74,150911,91],{"class":84},[74,150913,150914,150916,150918,150921],{"class":76,"line":94},[74,150915,34696],{"class":134},[74,150917,85],{"class":84},[74,150919,150920],{"class":190},"\"python\"",[74,150922,91],{"class":84},[14,150924,150926],{"id":150925},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,150928,150929],{},"交互运行适合临时验证：",[64,150931,150933],{"className":34659,"code":150932,"language":34661,"meta":69,"style":69},">>> 10 * 3\n30\n",[71,150934,150935,150945],{"__ignoreMap":69},[74,150936,150937,150939,150941,150943],{"class":76,"line":77},[74,150938,150134],{"class":80},[74,150940,2000],{"class":134},[74,150942,10797],{"class":80},[74,150944,124317],{"class":134},[74,150946,150947],{"class":76,"line":94},[74,150948,150949],{"class":134},"30\n",[19,150951,150952],{},"脚本运行适合保存程序：",[64,150954,150956],{"className":34659,"code":150955,"language":34661,"meta":69,"style":69},"price = 8\ncount = 5\nprint(price * count)\n",[71,150957,150958,150968,150977],{"__ignoreMap":69},[74,150959,150960,150963,150965],{"class":76,"line":77},[74,150961,150962],{"class":84},"price ",[74,150964,131],{"class":80},[74,150966,150967],{"class":134}," 8\n",[74,150969,150970,150973,150975],{"class":76,"line":94},[74,150971,150972],{"class":84},"count ",[74,150974,131],{"class":80},[74,150976,58708],{"class":134},[74,150978,150979,150981,150984,150986],{"class":76,"line":1141},[74,150980,34696],{"class":134},[74,150982,150983],{"class":84},"(price ",[74,150985,541],{"class":80},[74,150987,150988],{"class":84}," count)\n",[19,150990,150991],{},"实际学习中推荐：",[27,150993,150994,150997,151002],{},[30,150995,150996],{},"临时试一个语法，用交互模式。",[30,150998,150999,151000,130264],{},"写完整练习，用 ",[71,151001,150633],{},[30,151003,151004],{},"写项目，用独立目录和虚拟环境。",[14,151006,151008],{"id":151007},"_110-常见错误","1.10 常见错误",[44,151010,151012],{"id":151011},"_1101-命令找不到","1.10.1 命令找不到",[64,151014,151017],{"className":151015,"code":151016,"language":9466,"meta":69},[9464],"python: command not found\n",[71,151018,151016],{"__ignoreMap":69},[19,151020,151021],{},"原因：",[27,151023,151024,151027,151030],{},[30,151025,151026],{},"没安装 Python。",[30,151028,151029],{},"PATH 没配置。",[30,151031,151032,151033,32666],{},"Linux\u002FmacOS 应该使用 ",[71,151034,105160],{},[44,151036,151038],{"id":151037},"_1102-文件名冲突","1.10.2 文件名冲突",[19,151040,151041],{},"不要把文件命名为：",[64,151043,151046],{"className":151044,"code":151045,"language":9466,"meta":69},[9464],"random.py\njson.py\ntime.py\nrequests.py\n",[71,151047,151045],{"__ignoreMap":69},[19,151049,151050],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[44,151052,151054],{"id":151053},"_1103-中文乱码","1.10.3 中文乱码",[19,151056,151057],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,151059,151060],{},"如果读写文件出现乱码，要明确指定编码：",[64,151062,151064],{"className":34659,"code":151063,"language":34661,"meta":69,"style":69},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[71,151065,151066,151100],{"__ignoreMap":69},[74,151067,151068,151070,151073,151075,151078,151080,151083,151085,151088,151090,151093,151095,151097],{"class":76,"line":77},[74,151069,112114],{"class":80},[74,151071,151072],{"class":134}," open",[74,151074,85],{"class":84},[74,151076,151077],{"class":190},"\"data.txt\"",[74,151079,16714],{"class":84},[74,151081,151082],{"class":190},"\"r\"",[74,151084,16714],{"class":84},[74,151086,151087],{"class":9495},"encoding",[74,151089,131],{"class":80},[74,151091,151092],{"class":190},"\"utf-8\"",[74,151094,17993],{"class":84},[74,151096,35664],{"class":80},[74,151098,151099],{"class":84}," f:\n",[74,151101,151102,151105,151107],{"class":76,"line":94},[74,151103,151104],{"class":84},"    content ",[74,151106,131],{"class":80},[74,151108,151109],{"class":84}," f.read()\n",[14,151111,151113],{"id":151112},"_111-本章练习","1.11 本章练习",[27,151115,151116,151119,151125],{},[30,151117,151118],{},"安装 Python，并在终端输出版本号。",[30,151120,151121,151122,151124],{},"新建 ",[71,151123,150679],{},"，输出自己的姓名、年龄、学习目标。",[30,151126,108647,151127,151129],{},[71,151128,150753],{}," 输出下面格式：",[64,151131,151134],{"className":151132,"code":151133,"language":9466,"meta":69},[9464],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[71,151135,151133],{"__ignoreMap":69},[27,151137,151138],{"start":1156},[30,151139,108647,151140,151142],{},[71,151141,150879],{}," 输出日期：",[64,151144,151147],{"className":151145,"code":151146,"language":9466,"meta":69},[9464],"2024-10-10\n",[71,151148,151146],{"__ignoreMap":69},[27,151150,151151],{"start":1162},[30,151152,108647,151153,151155,151156,151158],{},[71,151154,50082],{}," 让两次 ",[71,151157,150753],{}," 输出在同一行。",[5090,151160,151161],{},"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":69,"searchDepth":94,"depth":94,"links":151163},[151164,151165,151166,151171,151172,151173,151177,151178,151179,151180,151185],{"id":150046,"depth":94,"text":150047},{"id":150090,"depth":94,"text":150091},{"id":150191,"depth":94,"text":150192,"children":151167},[151168,151169,151170],{"id":150195,"depth":1141,"text":150196},{"id":150250,"depth":1141,"text":150251},{"id":150286,"depth":1141,"text":150287},{"id":150359,"depth":94,"text":150360},{"id":150504,"depth":94,"text":150505},{"id":150609,"depth":94,"text":150610,"children":151174},[151175,151176],{"id":150613,"depth":1141,"text":150614},{"id":150642,"depth":1141,"text":150643},{"id":150672,"depth":94,"text":150673},{"id":150747,"depth":94,"text":150748},{"id":150925,"depth":94,"text":150926},{"id":151007,"depth":94,"text":151008,"children":151181},[151182,151183,151184],{"id":151011,"depth":1141,"text":151012},{"id":151037,"depth":1141,"text":151038},{"id":151053,"depth":1141,"text":151054},{"id":151112,"depth":94,"text":151113},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":150038,"description":27656},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":151192,"title":151193,"body":151194,"description":27656,"extension":5121,"meta":153598,"navigation":2362,"path":153599,"seo":153600,"stem":153601,"__hash__":153602},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":151195,"toc":153583},[151196,151199,151203,151206,151209,151226,151229,151271,151274,151278,151281,151284,151321,151324,151358,151361,151453,151457,151471,151474,151501,151504,151508,151611,151618,151621,151638,151642,151649,151838,151841,151914,151918,151921,152005,152008,152040,152044,152248,152251,152255,152261,152363,152366,152622,152626,152629,152632,152646,152648,152834,152838,153200,153206,153210,153213,153337,153340,153519,153522,153526,153559,153563,153580],[10,151197,151193],{"id":151198},"_10-json与pyecharts折线图",[14,151200,151202],{"id":151201},"_101-数据可视化","10.1 数据可视化",[19,151204,151205],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,151207,151208],{},"常见图表：",[27,151210,151211,151214,151217,151220,151223],{},[30,151212,151213],{},"折线图：看趋势。",[30,151215,151216],{},"柱状图：看分类对比。",[30,151218,151219],{},"饼图：看占比。",[30,151221,151222],{},"地图：看地域分布。",[30,151224,151225],{},"散点图：看两个变量之间的关系。",[19,151227,151228],{},"Python 可视化常用库：",[223,151230,151231,151239],{},[226,151232,151233],{},[229,151234,151235,151237],{},[232,151236,150442],{},[232,151238,28020],{},[270,151240,151241,151248,151256,151263],{},[229,151242,151243,151245],{},[275,151244,150474],{},[275,151246,151247],{},"基础、经典、可定制",[229,151249,151250,151253],{},[275,151251,151252],{},"seaborn",[275,151254,151255],{},"统计图表更美观",[229,151257,151258,151260],{},[275,151259,150482],{},[275,151261,151262],{},"生成交互式网页图表",[229,151264,151265,151268],{},[275,151266,151267],{},"plotly",[275,151269,151270],{},"交互图表能力强",[19,151272,151273],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,151275,151277],{"id":151276},"_102-json回顾","10.2 JSON回顾",[19,151279,151280],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,151282,151283],{},"Python 字典：",[64,151285,151287],{"className":34659,"code":151286,"language":34661,"meta":69,"style":69},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[71,151288,151289,151297,151308,151317],{"__ignoreMap":69},[74,151290,151291,151293,151295],{"class":76,"line":77},[74,151292,105939],{"class":84},[74,151294,131],{"class":80},[74,151296,19851],{"class":84},[74,151298,151299,151302,151304,151306],{"class":76,"line":94},[74,151300,151301],{"class":190},"    \"name\"",[74,151303,55718],{"class":84},[74,151305,73550],{"class":190},[74,151307,35747],{"class":84},[74,151309,151310,151313,151315],{"class":76,"line":1141},[74,151311,151312],{"class":190},"    \"value\"",[74,151314,55718],{"class":84},[74,151316,101739],{"class":134},[74,151318,151319],{"class":76,"line":1156},[74,151320,1527],{"class":84},[19,151322,151323],{},"JSON 字符串：",[64,151325,151328],{"className":151326,"code":151327,"language":150073,"meta":69,"style":69},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[71,151329,151330,151334,151345,151354],{"__ignoreMap":69},[74,151331,151332],{"class":76,"line":77},[74,151333,1508],{"class":84},[74,151335,151336,151339,151341,151343],{"class":76,"line":94},[74,151337,151338],{"class":134},"  \"name\"",[74,151340,55718],{"class":84},[74,151342,73550],{"class":190},[74,151344,35747],{"class":84},[74,151346,151347,151350,151352],{"class":76,"line":1141},[74,151348,151349],{"class":134},"  \"value\"",[74,151351,55718],{"class":84},[74,151353,101739],{"class":134},[74,151355,151356],{"class":76,"line":1156},[74,151357,1527],{"class":84},[19,151359,151360],{},"Python 与 JSON 的转换：",[64,151362,151364],{"className":34659,"code":151363,"language":34661,"meta":69,"style":69},"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",[71,151365,151366,151373,151377,151402,151406,151425,151432,151436,151446],{"__ignoreMap":69},[74,151367,151368,151370],{"class":76,"line":77},[74,151369,34673],{"class":80},[74,151371,151372],{"class":84}," json\n",[74,151374,151375],{"class":76,"line":94},[74,151376,2363],{"emptyLinePlaceholder":2362},[74,151378,151379,151381,151383,151385,151387,151389,151391,151393,151396,151398,151400],{"class":76,"line":1141},[74,151380,105939],{"class":84},[74,151382,131],{"class":80},[74,151384,4411],{"class":84},[74,151386,66960],{"class":190},[74,151388,55718],{"class":84},[74,151390,73550],{"class":190},[74,151392,16714],{"class":84},[74,151394,151395],{"class":190},"\"value\"",[74,151397,55718],{"class":84},[74,151399,397],{"class":134},[74,151401,1527],{"class":84},[74,151403,151404],{"class":76,"line":1156},[74,151405,2363],{"emptyLinePlaceholder":2362},[74,151407,151408,151411,151413,151416,151419,151421,151423],{"class":76,"line":1162},[74,151409,151410],{"class":84},"json_text ",[74,151412,131],{"class":80},[74,151414,151415],{"class":84}," json.dumps(data, ",[74,151417,151418],{"class":9495},"ensure_ascii",[74,151420,131],{"class":80},[74,151422,38268],{"class":134},[74,151424,91],{"class":84},[74,151426,151427,151429],{"class":76,"line":1176},[74,151428,34696],{"class":134},[74,151430,151431],{"class":84},"(json_text)\n",[74,151433,151434],{"class":76,"line":1182},[74,151435,2363],{"emptyLinePlaceholder":2362},[74,151437,151438,151441,151443],{"class":76,"line":1273},[74,151439,151440],{"class":84},"new_data ",[74,151442,131],{"class":80},[74,151444,151445],{"class":84}," json.loads(json_text)\n",[74,151447,151448,151450],{"class":76,"line":1279},[74,151449,34696],{"class":134},[74,151451,151452],{"class":84},"(new_data)\n",[14,151454,151456],{"id":151455},"_103-安装pyecharts","10.3 安装pyecharts",[64,151458,151460],{"className":28102,"code":151459,"language":28104,"meta":69,"style":69},"pip install pyecharts\n",[71,151461,151462],{"__ignoreMap":69},[74,151463,151464,151466,151468],{"class":76,"line":77},[74,151465,28111],{"class":1925},[74,151467,28114],{"class":190},[74,151469,151470],{"class":190}," pyecharts\n",[19,151472,151473],{},"验证：",[64,151475,151477],{"className":34659,"code":151476,"language":34661,"meta":69,"style":69},"import pyecharts\n\nprint(pyecharts.__version__)\n",[71,151478,151479,151485,151489],{"__ignoreMap":69},[74,151480,151481,151483],{"class":76,"line":77},[74,151482,34673],{"class":80},[74,151484,151470],{"class":84},[74,151486,151487],{"class":76,"line":94},[74,151488,2363],{"emptyLinePlaceholder":2362},[74,151490,151491,151493,151496,151499],{"class":76,"line":1141},[74,151492,34696],{"class":134},[74,151494,151495],{"class":84},"(pyecharts.",[74,151497,151498],{"class":134},"__version__",[74,151500,91],{"class":84},[19,151502,151503],{},"如果使用虚拟环境，要先激活环境再安装。",[14,151505,151507],{"id":151506},"_104-第一个折线图","10.4 第一个折线图",[64,151509,151511],{"className":34659,"code":151510,"language":34661,"meta":69,"style":69},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[71,151512,151513,151525,151529,151539,151569,151601],{"__ignoreMap":69},[74,151514,151515,151517,151520,151522],{"class":76,"line":77},[74,151516,35018],{"class":80},[74,151518,151519],{"class":84}," pyecharts.charts ",[74,151521,34673],{"class":80},[74,151523,151524],{"class":84}," Line\n",[74,151526,151527],{"class":76,"line":94},[74,151528,2363],{"emptyLinePlaceholder":2362},[74,151530,151531,151534,151536],{"class":76,"line":1141},[74,151532,151533],{"class":84},"line ",[74,151535,131],{"class":80},[74,151537,151538],{"class":84}," Line()\n",[74,151540,151541,151544,151547,151549,151552,151554,151557,151559,151562,151564,151567],{"class":76,"line":1156},[74,151542,151543],{"class":84},"line.add_xaxis([",[74,151545,151546],{"class":190},"\"周一\"",[74,151548,16714],{"class":84},[74,151550,151551],{"class":190},"\"周二\"",[74,151553,16714],{"class":84},[74,151555,151556],{"class":190},"\"周三\"",[74,151558,16714],{"class":84},[74,151560,151561],{"class":190},"\"周四\"",[74,151563,16714],{"class":84},[74,151565,151566],{"class":190},"\"周五\"",[74,151568,4620],{"class":84},[74,151570,151571,151574,151577,151579,151581,151583,151585,151587,151589,151591,151594,151596,151599],{"class":76,"line":1162},[74,151572,151573],{"class":84},"line.add_yaxis(",[74,151575,151576],{"class":190},"\"销售额\"",[74,151578,81799],{"class":84},[74,151580,397],{"class":134},[74,151582,16714],{"class":84},[74,151584,903],{"class":134},[74,151586,16714],{"class":84},[74,151588,948],{"class":134},[74,151590,16714],{"class":84},[74,151592,151593],{"class":134},"150",[74,151595,16714],{"class":84},[74,151597,151598],{"class":134},"180",[74,151600,4620],{"class":84},[74,151602,151603,151606,151609],{"class":76,"line":1176},[74,151604,151605],{"class":84},"line.render(",[74,151607,151608],{"class":190},"\"line.html\"",[74,151610,91],{"class":84},[19,151612,151613,151614,151617],{},"运行后会生成 ",[71,151615,151616],{},"line.html","，用浏览器打开即可看到图表。",[19,151619,151620],{},"核心步骤：",[27,151622,151623,151626,151629,151632,151635],{},[30,151624,151625],{},"导入图表类。",[30,151627,151628],{},"创建图表对象。",[30,151630,151631],{},"添加 x 轴数据。",[30,151633,151634],{},"添加 y 轴数据。",[30,151636,151637],{},"渲染为 HTML。",[14,151639,151641],{"id":151640},"_105-全局配置","10.5 全局配置",[19,151643,151644,151645,151648],{},"常用配置在 ",[71,151646,151647],{},"pyecharts.options"," 中。",[64,151650,151652],{"className":34659,"code":151651,"language":34661,"meta":69,"style":69},"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",[71,151653,151654,151671,151681,151685,151693,151717,151745,151750,151769,151788,151806,151826,151830],{"__ignoreMap":69},[74,151655,151656,151658,151661,151663,151666,151668],{"class":76,"line":77},[74,151657,35018],{"class":80},[74,151659,151660],{"class":84}," pyecharts ",[74,151662,34673],{"class":80},[74,151664,151665],{"class":84}," options ",[74,151667,35664],{"class":80},[74,151669,151670],{"class":84}," opts\n",[74,151672,151673,151675,151677,151679],{"class":76,"line":94},[74,151674,35018],{"class":80},[74,151676,151519],{"class":84},[74,151678,34673],{"class":80},[74,151680,151524],{"class":84},[74,151682,151683],{"class":76,"line":1141},[74,151684,2363],{"emptyLinePlaceholder":2362},[74,151686,151687,151689,151691],{"class":76,"line":1156},[74,151688,151533],{"class":84},[74,151690,131],{"class":80},[74,151692,151538],{"class":84},[74,151694,151695,151697,151699,151701,151703,151705,151707,151709,151711,151713,151715],{"class":76,"line":1162},[74,151696,151543],{"class":84},[74,151698,151546],{"class":190},[74,151700,16714],{"class":84},[74,151702,151551],{"class":190},[74,151704,16714],{"class":84},[74,151706,151556],{"class":190},[74,151708,16714],{"class":84},[74,151710,151561],{"class":190},[74,151712,16714],{"class":84},[74,151714,151566],{"class":190},[74,151716,4620],{"class":84},[74,151718,151719,151721,151723,151725,151727,151729,151731,151733,151735,151737,151739,151741,151743],{"class":76,"line":1176},[74,151720,151573],{"class":84},[74,151722,151576],{"class":190},[74,151724,81799],{"class":84},[74,151726,397],{"class":134},[74,151728,16714],{"class":84},[74,151730,903],{"class":134},[74,151732,16714],{"class":84},[74,151734,948],{"class":134},[74,151736,16714],{"class":84},[74,151738,151593],{"class":134},[74,151740,16714],{"class":84},[74,151742,151598],{"class":134},[74,151744,4620],{"class":84},[74,151746,151747],{"class":76,"line":1182},[74,151748,151749],{"class":84},"line.set_global_opts(\n",[74,151751,151752,151755,151757,151760,151762,151764,151767],{"class":76,"line":1273},[74,151753,151754],{"class":9495},"    title_opts",[74,151756,131],{"class":80},[74,151758,151759],{"class":84},"opts.TitleOpts(",[74,151761,55688],{"class":9495},[74,151763,131],{"class":80},[74,151765,151766],{"class":190},"\"一周销售额\"",[74,151768,42328],{"class":84},[74,151770,151771,151774,151776,151779,151781,151783,151786],{"class":76,"line":1279},[74,151772,151773],{"class":9495},"    xaxis_opts",[74,151775,131],{"class":80},[74,151777,151778],{"class":84},"opts.AxisOpts(",[74,151780,84091],{"class":9495},[74,151782,131],{"class":80},[74,151784,151785],{"class":190},"\"日期\"",[74,151787,42328],{"class":84},[74,151789,151790,151793,151795,151797,151799,151801,151804],{"class":76,"line":1291},[74,151791,151792],{"class":9495},"    yaxis_opts",[74,151794,131],{"class":80},[74,151796,151778],{"class":84},[74,151798,84091],{"class":9495},[74,151800,131],{"class":80},[74,151802,151803],{"class":190},"\"金额\"",[74,151805,42328],{"class":84},[74,151807,151808,151811,151813,151816,151819,151821,151824],{"class":76,"line":1574},[74,151809,151810],{"class":9495},"    tooltip_opts",[74,151812,131],{"class":80},[74,151814,151815],{"class":84},"opts.TooltipOpts(",[74,151817,151818],{"class":9495},"trigger",[74,151820,131],{"class":80},[74,151822,151823],{"class":190},"\"axis\"",[74,151825,42328],{"class":84},[74,151827,151828],{"class":76,"line":1579},[74,151829,91],{"class":84},[74,151831,151832,151834,151836],{"class":76,"line":1585},[74,151833,151605],{"class":84},[74,151835,151608],{"class":190},[74,151837,91],{"class":84},[19,151839,151840],{},"常见全局配置：",[223,151842,151843,151852],{},[226,151844,151845],{},[229,151846,151847,151850],{},[232,151848,151849],{},"配置",[232,151851,106977],{},[270,151853,151854,151864,151874,151884,151894,151904],{},[229,151855,151856,151861],{},[275,151857,151858],{},[71,151859,151860],{},"TitleOpts",[275,151862,151863],{},"标题",[229,151865,151866,151871],{},[275,151867,151868],{},[71,151869,151870],{},"LegendOpts",[275,151872,151873],{},"图例",[229,151875,151876,151881],{},[275,151877,151878],{},[71,151879,151880],{},"TooltipOpts",[275,151882,151883],{},"提示框",[229,151885,151886,151891],{},[275,151887,151888],{},[71,151889,151890],{},"AxisOpts",[275,151892,151893],{},"坐标轴",[229,151895,151896,151901],{},[275,151897,151898],{},[71,151899,151900],{},"VisualMapOpts",[275,151902,151903],{},"视觉映射",[229,151905,151906,151911],{},[275,151907,151908],{},[71,151909,151910],{},"DataZoomOpts",[275,151912,151913],{},"区域缩放",[14,151915,151917],{"id":151916},"_106-系列配置","10.6 系列配置",[19,151919,151920],{},"系列配置作用于某一组数据。",[64,151922,151924],{"className":34659,"code":151923,"language":34661,"meta":69,"style":69},"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",[71,151925,151926,151931,151942,151971,151982,152001],{"__ignoreMap":69},[74,151927,151928],{"class":76,"line":77},[74,151929,151930],{"class":84},"line.add_yaxis(\n",[74,151932,151933,151936,151938,151940],{"class":76,"line":94},[74,151934,151935],{"class":9495},"    series_name",[74,151937,131],{"class":80},[74,151939,151576],{"class":190},[74,151941,35747],{"class":84},[74,151943,151944,151947,151949,151951,151953,151955,151957,151959,151961,151963,151965,151967,151969],{"class":76,"line":1141},[74,151945,151946],{"class":9495},"    y_axis",[74,151948,131],{"class":80},[74,151950,976],{"class":84},[74,151952,397],{"class":134},[74,151954,16714],{"class":84},[74,151956,903],{"class":134},[74,151958,16714],{"class":84},[74,151960,948],{"class":134},[74,151962,16714],{"class":84},[74,151964,151593],{"class":134},[74,151966,16714],{"class":84},[74,151968,151598],{"class":134},[74,151970,92117],{"class":84},[74,151972,151973,151976,151978,151980],{"class":76,"line":1156},[74,151974,151975],{"class":9495},"    is_smooth",[74,151977,131],{"class":80},[74,151979,35757],{"class":134},[74,151981,35747],{"class":84},[74,151983,151984,151987,151989,151992,151995,151997,151999],{"class":76,"line":1162},[74,151985,151986],{"class":9495},"    label_opts",[74,151988,131],{"class":80},[74,151990,151991],{"class":84},"opts.LabelOpts(",[74,151993,151994],{"class":9495},"is_show",[74,151996,131],{"class":80},[74,151998,35757],{"class":134},[74,152000,42328],{"class":84},[74,152002,152003],{"class":76,"line":1176},[74,152004,91],{"class":84},[19,152006,152007],{},"常用参数：",[27,152009,152010,152016,152022,152028,152034],{},[30,152011,152012,152015],{},[71,152013,152014],{},"series_name","：系列名称。",[30,152017,152018,152021],{},[71,152019,152020],{},"y_axis","：y 轴数据。",[30,152023,152024,152027],{},[71,152025,152026],{},"is_smooth","：是否平滑曲线。",[30,152029,152030,152033],{},[71,152031,152032],{},"label_opts","：标签配置。",[30,152035,152036,152039],{},[71,152037,152038],{},"symbol_size","：标记点大小。",[14,152041,152043],{"id":152042},"_107-多条折线","10.7 多条折线",[64,152045,152047],{"className":34659,"code":152046,"language":34661,"meta":69,"style":69},"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",[71,152048,152049,152063,152073,152077,152106,152110,152118,152123,152161,152198,152202,152219,152235,152239],{"__ignoreMap":69},[74,152050,152051,152053,152055,152057,152059,152061],{"class":76,"line":77},[74,152052,35018],{"class":80},[74,152054,151660],{"class":84},[74,152056,34673],{"class":80},[74,152058,151665],{"class":84},[74,152060,35664],{"class":80},[74,152062,151670],{"class":84},[74,152064,152065,152067,152069,152071],{"class":76,"line":94},[74,152066,35018],{"class":80},[74,152068,151519],{"class":84},[74,152070,34673],{"class":80},[74,152072,151524],{"class":84},[74,152074,152075],{"class":76,"line":1141},[74,152076,2363],{"emptyLinePlaceholder":2362},[74,152078,152079,152082,152084,152086,152088,152090,152092,152094,152096,152098,152100,152102,152104],{"class":76,"line":1156},[74,152080,152081],{"class":84},"dates ",[74,152083,131],{"class":80},[74,152085,56507],{"class":84},[74,152087,151546],{"class":190},[74,152089,16714],{"class":84},[74,152091,151551],{"class":190},[74,152093,16714],{"class":84},[74,152095,151556],{"class":190},[74,152097,16714],{"class":84},[74,152099,151561],{"class":190},[74,152101,16714],{"class":84},[74,152103,151566],{"class":190},[74,152105,37527],{"class":84},[74,152107,152108],{"class":76,"line":1162},[74,152109,2363],{"emptyLinePlaceholder":2362},[74,152111,152112,152114,152116],{"class":76,"line":1176},[74,152113,151533],{"class":84},[74,152115,131],{"class":80},[74,152117,151538],{"class":84},[74,152119,152120],{"class":76,"line":1182},[74,152121,152122],{"class":84},"line.add_xaxis(dates)\n",[74,152124,152125,152127,152130,152132,152134,152136,152139,152141,152143,152145,152147,152149,152151,152153,152155,152157,152159],{"class":76,"line":1273},[74,152126,151573],{"class":84},[74,152128,152129],{"class":190},"\"线上销售\"",[74,152131,81799],{"class":84},[74,152133,397],{"class":134},[74,152135,16714],{"class":84},[74,152137,152138],{"class":134},"130",[74,152140,16714],{"class":84},[74,152142,903],{"class":134},[74,152144,16714],{"class":84},[74,152146,25327],{"class":134},[74,152148,16714],{"class":84},[74,152150,1684],{"class":134},[74,152152,116483],{"class":84},[74,152154,152026],{"class":9495},[74,152156,131],{"class":80},[74,152158,35757],{"class":134},[74,152160,91],{"class":84},[74,152162,152163,152165,152168,152170,152172,152174,152176,152178,152180,152182,152184,152186,152188,152190,152192,152194,152196],{"class":76,"line":1279},[74,152164,151573],{"class":84},[74,152166,152167],{"class":190},"\"线下销售\"",[74,152169,81799],{"class":84},[74,152171,698],{"class":134},[74,152173,16714],{"class":84},[74,152175,948],{"class":134},[74,152177,16714],{"class":84},[74,152179,397],{"class":134},[74,152181,16714],{"class":84},[74,152183,903],{"class":134},[74,152185,16714],{"class":84},[74,152187,151593],{"class":134},[74,152189,116483],{"class":84},[74,152191,152026],{"class":9495},[74,152193,131],{"class":80},[74,152195,35757],{"class":134},[74,152197,91],{"class":84},[74,152199,152200],{"class":76,"line":1291},[74,152201,151749],{"class":84},[74,152203,152204,152206,152208,152210,152212,152214,152217],{"class":76,"line":1574},[74,152205,151754],{"class":9495},[74,152207,131],{"class":80},[74,152209,151759],{"class":84},[74,152211,55688],{"class":9495},[74,152213,131],{"class":80},[74,152215,152216],{"class":190},"\"线上线下销售趋势\"",[74,152218,42328],{"class":84},[74,152220,152221,152223,152225,152227,152229,152231,152233],{"class":76,"line":1579},[74,152222,151810],{"class":9495},[74,152224,131],{"class":80},[74,152226,151815],{"class":84},[74,152228,151818],{"class":9495},[74,152230,131],{"class":80},[74,152232,151823],{"class":190},[74,152234,42328],{"class":84},[74,152236,152237],{"class":76,"line":1585},[74,152238,91],{"class":84},[74,152240,152241,152243,152246],{"class":76,"line":1590},[74,152242,151605],{"class":84},[74,152244,152245],{"class":190},"\"sales.html\"",[74,152247,91],{"class":84},[19,152249,152250],{},"多条折线适合比较不同指标或不同地区。",[14,152252,152254],{"id":152253},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,152256,152257,152258,28899],{},"假设 ",[71,152259,152260],{},"sales.json",[64,152262,152264],{"className":151326,"code":152263,"language":150073,"meta":69,"style":69},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[71,152265,152266,152271,152303,152331,152359],{"__ignoreMap":69},[74,152267,152268],{"class":76,"line":77},[74,152269,152270],{"class":84},"[\n",[74,152272,152273,152276,152279,152281,152283,152285,152288,152290,152292,152294,152297,152299,152301],{"class":76,"line":94},[74,152274,152275],{"class":84},"  {",[74,152277,152278],{"class":134},"\"date\"",[74,152280,55718],{"class":84},[74,152282,151546],{"class":190},[74,152284,16714],{"class":84},[74,152286,152287],{"class":134},"\"online\"",[74,152289,55718],{"class":84},[74,152291,397],{"class":134},[74,152293,16714],{"class":84},[74,152295,152296],{"class":134},"\"offline\"",[74,152298,55718],{"class":84},[74,152300,698],{"class":134},[74,152302,4893],{"class":84},[74,152304,152305,152307,152309,152311,152313,152315,152317,152319,152321,152323,152325,152327,152329],{"class":76,"line":1141},[74,152306,152275],{"class":84},[74,152308,152278],{"class":134},[74,152310,55718],{"class":84},[74,152312,151551],{"class":190},[74,152314,16714],{"class":84},[74,152316,152287],{"class":134},[74,152318,55718],{"class":84},[74,152320,152138],{"class":134},[74,152322,16714],{"class":84},[74,152324,152296],{"class":134},[74,152326,55718],{"class":84},[74,152328,948],{"class":134},[74,152330,4893],{"class":84},[74,152332,152333,152335,152337,152339,152341,152343,152345,152347,152349,152351,152353,152355,152357],{"class":76,"line":1156},[74,152334,152275],{"class":84},[74,152336,152278],{"class":134},[74,152338,55718],{"class":84},[74,152340,151556],{"class":190},[74,152342,16714],{"class":84},[74,152344,152287],{"class":134},[74,152346,55718],{"class":84},[74,152348,903],{"class":134},[74,152350,16714],{"class":84},[74,152352,152296],{"class":134},[74,152354,55718],{"class":84},[74,152356,397],{"class":134},[74,152358,1527],{"class":84},[74,152360,152361],{"class":76,"line":1162},[74,152362,37527],{"class":84},[19,152364,152365],{},"读取并绘图：",[64,152367,152369],{"className":34659,"code":152368,"language":34661,"meta":69,"style":69},"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",[71,152370,152371,152377,152391,152401,152405,152437,152450,152454,152462,152471,152480,152484,152496,152505,152514,152523,152527,152535,152539,152556,152573,152577,152594,152610,152614],{"__ignoreMap":69},[74,152372,152373,152375],{"class":76,"line":77},[74,152374,34673],{"class":80},[74,152376,151372],{"class":84},[74,152378,152379,152381,152383,152385,152387,152389],{"class":76,"line":94},[74,152380,35018],{"class":80},[74,152382,151660],{"class":84},[74,152384,34673],{"class":80},[74,152386,151665],{"class":84},[74,152388,35664],{"class":80},[74,152390,151670],{"class":84},[74,152392,152393,152395,152397,152399],{"class":76,"line":1141},[74,152394,35018],{"class":80},[74,152396,151519],{"class":84},[74,152398,34673],{"class":80},[74,152400,151524],{"class":84},[74,152402,152403],{"class":76,"line":1156},[74,152404,2363],{"emptyLinePlaceholder":2362},[74,152406,152407,152409,152411,152413,152416,152418,152420,152422,152424,152426,152428,152430,152432,152435],{"class":76,"line":1162},[74,152408,112114],{"class":80},[74,152410,151072],{"class":134},[74,152412,85],{"class":84},[74,152414,152415],{"class":190},"\"sales.json\"",[74,152417,16714],{"class":84},[74,152419,151082],{"class":190},[74,152421,16714],{"class":84},[74,152423,151087],{"class":9495},[74,152425,131],{"class":80},[74,152427,151092],{"class":190},[74,152429,17993],{"class":84},[74,152431,35664],{"class":80},[74,152433,152434],{"class":9495}," file",[74,152436,3702],{"class":84},[74,152438,152439,152441,152443,152446,152448],{"class":76,"line":1176},[74,152440,105702],{"class":84},[74,152442,131],{"class":80},[74,152444,152445],{"class":84}," json.load(",[74,152447,49635],{"class":9495},[74,152449,91],{"class":84},[74,152451,152452],{"class":76,"line":1182},[74,152453,2363],{"emptyLinePlaceholder":2362},[74,152455,152456,152458,152460],{"class":76,"line":1273},[74,152457,152081],{"class":84},[74,152459,131],{"class":80},[74,152461,56119],{"class":84},[74,152463,152464,152467,152469],{"class":76,"line":1279},[74,152465,152466],{"class":84},"online_sales ",[74,152468,131],{"class":80},[74,152470,56119],{"class":84},[74,152472,152473,152476,152478],{"class":76,"line":1291},[74,152474,152475],{"class":84},"offline_sales ",[74,152477,131],{"class":80},[74,152479,56119],{"class":84},[74,152481,152482],{"class":76,"line":1574},[74,152483,2363],{"emptyLinePlaceholder":2362},[74,152485,152486,152488,152491,152493],{"class":76,"line":1579},[74,152487,2988],{"class":80},[74,152489,152490],{"class":84}," item ",[74,152492,30324],{"class":80},[74,152494,152495],{"class":84}," data:\n",[74,152497,152498,152501,152503],{"class":76,"line":1585},[74,152499,152500],{"class":84},"    dates.append(item[",[74,152502,152278],{"class":190},[74,152504,4620],{"class":84},[74,152506,152507,152510,152512],{"class":76,"line":1590},[74,152508,152509],{"class":84},"    online_sales.append(item[",[74,152511,152287],{"class":190},[74,152513,4620],{"class":84},[74,152515,152516,152519,152521],{"class":76,"line":1604},[74,152517,152518],{"class":84},"    offline_sales.append(item[",[74,152520,152296],{"class":190},[74,152522,4620],{"class":84},[74,152524,152525],{"class":76,"line":1609},[74,152526,2363],{"emptyLinePlaceholder":2362},[74,152528,152529,152531,152533],{"class":76,"line":1615},[74,152530,151533],{"class":84},[74,152532,131],{"class":80},[74,152534,151538],{"class":84},[74,152536,152537],{"class":76,"line":1636},[74,152538,152122],{"class":84},[74,152540,152541,152543,152545,152548,152550,152552,152554],{"class":76,"line":1641},[74,152542,151573],{"class":84},[74,152544,152129],{"class":190},[74,152546,152547],{"class":84},", online_sales, ",[74,152549,152026],{"class":9495},[74,152551,131],{"class":80},[74,152553,35757],{"class":134},[74,152555,91],{"class":84},[74,152557,152558,152560,152562,152565,152567,152569,152571],{"class":76,"line":1655},[74,152559,151573],{"class":84},[74,152561,152167],{"class":190},[74,152563,152564],{"class":84},", offline_sales, ",[74,152566,152026],{"class":9495},[74,152568,131],{"class":80},[74,152570,35757],{"class":134},[74,152572,91],{"class":84},[74,152574,152575],{"class":76,"line":1660},[74,152576,151749],{"class":84},[74,152578,152579,152581,152583,152585,152587,152589,152592],{"class":76,"line":1689},[74,152580,151754],{"class":9495},[74,152582,131],{"class":80},[74,152584,151759],{"class":84},[74,152586,55688],{"class":9495},[74,152588,131],{"class":80},[74,152590,152591],{"class":190},"\"销售趋势\"",[74,152593,42328],{"class":84},[74,152595,152596,152598,152600,152602,152604,152606,152608],{"class":76,"line":1694},[74,152597,151810],{"class":9495},[74,152599,131],{"class":80},[74,152601,151815],{"class":84},[74,152603,151818],{"class":9495},[74,152605,131],{"class":80},[74,152607,151823],{"class":190},[74,152609,42328],{"class":84},[74,152611,152612],{"class":76,"line":1711},[74,152613,91],{"class":84},[74,152615,152616,152618,152620],{"class":76,"line":1716},[74,152617,151605],{"class":84},[74,152619,152245],{"class":190},[74,152621,91],{"class":84},[14,152623,152625],{"id":152624},"_109-数据清洗","10.9 数据清洗",[19,152627,152628],{},"真实数据经常不整齐，需要清洗。",[19,152630,152631],{},"常见问题：",[27,152633,152634,152637,152640,152643],{},[30,152635,152636],{},"数字是字符串。",[30,152638,152639],{},"字段缺失。",[30,152641,152642],{},"空值。",[30,152644,152645],{},"日期格式不统一。",[19,152647,19414],{},[64,152649,152651],{"className":34659,"code":152650,"language":34661,"meta":69,"style":69},"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",[71,152652,152653,152662,152685,152705,152726,152730,152734,152742,152751,152755,152766,152780,152789,152794,152798,152806,152816,152820,152827],{"__ignoreMap":69},[74,152654,152655,152658,152660],{"class":76,"line":77},[74,152656,152657],{"class":84},"raw_data ",[74,152659,131],{"class":80},[74,152661,59728],{"class":84},[74,152663,152664,152667,152669,152671,152673,152675,152678,152680,152683],{"class":76,"line":94},[74,152665,152666],{"class":84},"    {",[74,152668,152278],{"class":190},[74,152670,55718],{"class":84},[74,152672,151546],{"class":190},[74,152674,16714],{"class":84},[74,152676,152677],{"class":190},"\"sales\"",[74,152679,55718],{"class":84},[74,152681,152682],{"class":190},"\"100\"",[74,152684,4893],{"class":84},[74,152686,152687,152689,152691,152693,152695,152697,152699,152701,152703],{"class":76,"line":1141},[74,152688,152666],{"class":84},[74,152690,152278],{"class":190},[74,152692,55718],{"class":84},[74,152694,151551],{"class":190},[74,152696,16714],{"class":84},[74,152698,152677],{"class":190},[74,152700,55718],{"class":84},[74,152702,11931],{"class":190},[74,152704,4893],{"class":84},[74,152706,152707,152709,152711,152713,152715,152717,152719,152721,152724],{"class":76,"line":1156},[74,152708,152666],{"class":84},[74,152710,152278],{"class":190},[74,152712,55718],{"class":84},[74,152714,151556],{"class":190},[74,152716,16714],{"class":84},[74,152718,152677],{"class":190},[74,152720,55718],{"class":84},[74,152722,152723],{"class":190},"\"120\"",[74,152725,4893],{"class":84},[74,152727,152728],{"class":76,"line":1162},[74,152729,37527],{"class":84},[74,152731,152732],{"class":76,"line":1176},[74,152733,2363],{"emptyLinePlaceholder":2362},[74,152735,152736,152738,152740],{"class":76,"line":1182},[74,152737,152081],{"class":84},[74,152739,131],{"class":80},[74,152741,56119],{"class":84},[74,152743,152744,152747,152749],{"class":76,"line":1273},[74,152745,152746],{"class":84},"sales ",[74,152748,131],{"class":80},[74,152750,56119],{"class":84},[74,152752,152753],{"class":76,"line":1279},[74,152754,2363],{"emptyLinePlaceholder":2362},[74,152756,152757,152759,152761,152763],{"class":76,"line":1291},[74,152758,2988],{"class":80},[74,152760,152490],{"class":84},[74,152762,30324],{"class":80},[74,152764,152765],{"class":84}," raw_data:\n",[74,152767,152768,152771,152773,152776,152778],{"class":76,"line":1574},[74,152769,152770],{"class":84},"    value ",[74,152772,131],{"class":80},[74,152774,152775],{"class":84}," item.get(",[74,152777,152677],{"class":190},[74,152779,91],{"class":84},[74,152781,152782,152784,152786],{"class":76,"line":1579},[74,152783,3064],{"class":80},[74,152785,43211],{"class":80},[74,152787,152788],{"class":84}," value:\n",[74,152790,152791],{"class":76,"line":1585},[74,152792,152793],{"class":80},"        continue\n",[74,152795,152796],{"class":76,"line":1590},[74,152797,2363],{"emptyLinePlaceholder":2362},[74,152799,152800,152802,152804],{"class":76,"line":1604},[74,152801,152500],{"class":84},[74,152803,152278],{"class":190},[74,152805,4620],{"class":84},[74,152807,152808,152811,152813],{"class":76,"line":1609},[74,152809,152810],{"class":84},"    sales.append(",[74,152812,88],{"class":134},[74,152814,152815],{"class":84},"(value))\n",[74,152817,152818],{"class":76,"line":1615},[74,152819,2363],{"emptyLinePlaceholder":2362},[74,152821,152822,152824],{"class":76,"line":1636},[74,152823,34696],{"class":134},[74,152825,152826],{"class":84},"(dates)\n",[74,152828,152829,152831],{"class":76,"line":1641},[74,152830,34696],{"class":134},[74,152832,152833],{"class":84},"(sales)\n",[14,152835,152837],{"id":152836},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[64,152839,152841],{"className":34659,"code":152840,"language":34661,"meta":69,"style":69},"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",[71,152842,152843,152857,152867,152871,152879,152900,152922,152944,152966,152988,152992,152996,153018,153039,153043,153051,153055,153059,153069,153078,153088,153104,153108,153112,153129,153145,153161,153177,153187,153191],{"__ignoreMap":69},[74,152844,152845,152847,152849,152851,152853,152855],{"class":76,"line":77},[74,152846,35018],{"class":80},[74,152848,151660],{"class":84},[74,152850,34673],{"class":80},[74,152852,151665],{"class":84},[74,152854,35664],{"class":80},[74,152856,151670],{"class":84},[74,152858,152859,152861,152863,152865],{"class":76,"line":94},[74,152860,35018],{"class":80},[74,152862,151519],{"class":84},[74,152864,34673],{"class":80},[74,152866,151524],{"class":84},[74,152868,152869],{"class":76,"line":1141},[74,152870,2363],{"emptyLinePlaceholder":2362},[74,152872,152873,152875,152877],{"class":76,"line":1156},[74,152874,152746],{"class":84},[74,152876,131],{"class":80},[74,152878,59728],{"class":84},[74,152880,152881,152883,152885,152887,152890,152892,152894,152896,152898],{"class":76,"line":1162},[74,152882,152666],{"class":84},[74,152884,152278],{"class":190},[74,152886,55718],{"class":84},[74,152888,152889],{"class":190},"\"2024-10-01\"",[74,152891,16714],{"class":84},[74,152893,88365],{"class":190},[74,152895,55718],{"class":84},[74,152897,96304],{"class":134},[74,152899,4893],{"class":84},[74,152901,152902,152904,152906,152908,152911,152913,152915,152917,152920],{"class":76,"line":1176},[74,152903,152666],{"class":84},[74,152905,152278],{"class":190},[74,152907,55718],{"class":84},[74,152909,152910],{"class":190},"\"2024-10-02\"",[74,152912,16714],{"class":84},[74,152914,88365],{"class":190},[74,152916,55718],{"class":84},[74,152918,152919],{"class":134},"1800",[74,152921,4893],{"class":84},[74,152923,152924,152926,152928,152930,152933,152935,152937,152939,152942],{"class":76,"line":1182},[74,152925,152666],{"class":84},[74,152927,152278],{"class":190},[74,152929,55718],{"class":84},[74,152931,152932],{"class":190},"\"2024-10-03\"",[74,152934,16714],{"class":84},[74,152936,88365],{"class":190},[74,152938,55718],{"class":84},[74,152940,152941],{"class":134},"1500",[74,152943,4893],{"class":84},[74,152945,152946,152948,152950,152952,152955,152957,152959,152961,152964],{"class":76,"line":1273},[74,152947,152666],{"class":84},[74,152949,152278],{"class":190},[74,152951,55718],{"class":84},[74,152953,152954],{"class":190},"\"2024-10-04\"",[74,152956,16714],{"class":84},[74,152958,88365],{"class":190},[74,152960,55718],{"class":84},[74,152962,152963],{"class":134},"2100",[74,152965,4893],{"class":84},[74,152967,152968,152970,152972,152974,152977,152979,152981,152983,152986],{"class":76,"line":1279},[74,152969,152666],{"class":84},[74,152971,152278],{"class":190},[74,152973,55718],{"class":84},[74,152975,152976],{"class":190},"\"2024-10-05\"",[74,152978,16714],{"class":84},[74,152980,88365],{"class":190},[74,152982,55718],{"class":84},[74,152984,152985],{"class":134},"2600",[74,152987,4893],{"class":84},[74,152989,152990],{"class":76,"line":1291},[74,152991,37527],{"class":84},[74,152993,152994],{"class":76,"line":1574},[74,152995,2363],{"emptyLinePlaceholder":2362},[74,152997,152998,153000,153002,153005,153007,153009,153011,153013,153015],{"class":76,"line":1579},[74,152999,152081],{"class":84},[74,153001,131],{"class":80},[74,153003,153004],{"class":84}," [item[",[74,153006,152278],{"class":190},[74,153008,4406],{"class":84},[74,153010,2988],{"class":80},[74,153012,152490],{"class":84},[74,153014,30324],{"class":80},[74,153016,153017],{"class":84}," sales]\n",[74,153019,153020,153023,153025,153027,153029,153031,153033,153035,153037],{"class":76,"line":1585},[74,153021,153022],{"class":84},"amounts ",[74,153024,131],{"class":80},[74,153026,153004],{"class":84},[74,153028,88365],{"class":190},[74,153030,4406],{"class":84},[74,153032,2988],{"class":80},[74,153034,152490],{"class":84},[74,153036,30324],{"class":80},[74,153038,153017],{"class":84},[74,153040,153041],{"class":76,"line":1590},[74,153042,2363],{"emptyLinePlaceholder":2362},[74,153044,153045,153047,153049],{"class":76,"line":1604},[74,153046,151533],{"class":84},[74,153048,131],{"class":80},[74,153050,151538],{"class":84},[74,153052,153053],{"class":76,"line":1609},[74,153054,152122],{"class":84},[74,153056,153057],{"class":76,"line":1615},[74,153058,151930],{"class":84},[74,153060,153061,153063,153065,153067],{"class":76,"line":1636},[74,153062,151935],{"class":9495},[74,153064,131],{"class":80},[74,153066,151576],{"class":190},[74,153068,35747],{"class":84},[74,153070,153071,153073,153075],{"class":76,"line":1641},[74,153072,151946],{"class":9495},[74,153074,131],{"class":80},[74,153076,153077],{"class":84},"amounts,\n",[74,153079,153080,153082,153084,153086],{"class":76,"line":1655},[74,153081,151975],{"class":9495},[74,153083,131],{"class":80},[74,153085,35757],{"class":134},[74,153087,35747],{"class":84},[74,153089,153090,153092,153094,153096,153098,153100,153102],{"class":76,"line":1660},[74,153091,151986],{"class":9495},[74,153093,131],{"class":80},[74,153095,151991],{"class":84},[74,153097,151994],{"class":9495},[74,153099,131],{"class":80},[74,153101,35757],{"class":134},[74,153103,42328],{"class":84},[74,153105,153106],{"class":76,"line":1689},[74,153107,91],{"class":84},[74,153109,153110],{"class":76,"line":1694},[74,153111,151749],{"class":84},[74,153113,153114,153116,153118,153120,153122,153124,153127],{"class":76,"line":1711},[74,153115,151754],{"class":9495},[74,153117,131],{"class":80},[74,153119,151759],{"class":84},[74,153121,55688],{"class":9495},[74,153123,131],{"class":80},[74,153125,153126],{"class":190},"\"每日销售额\"",[74,153128,42328],{"class":84},[74,153130,153131,153133,153135,153137,153139,153141,153143],{"class":76,"line":1716},[74,153132,151773],{"class":9495},[74,153134,131],{"class":80},[74,153136,151778],{"class":84},[74,153138,84091],{"class":9495},[74,153140,131],{"class":80},[74,153142,151785],{"class":190},[74,153144,42328],{"class":84},[74,153146,153147,153149,153151,153153,153155,153157,153159],{"class":76,"line":1721},[74,153148,151792],{"class":9495},[74,153150,131],{"class":80},[74,153152,151778],{"class":84},[74,153154,84091],{"class":9495},[74,153156,131],{"class":80},[74,153158,151803],{"class":190},[74,153160,42328],{"class":84},[74,153162,153163,153165,153167,153169,153171,153173,153175],{"class":76,"line":1726},[74,153164,151810],{"class":9495},[74,153166,131],{"class":80},[74,153168,151815],{"class":84},[74,153170,151818],{"class":9495},[74,153172,131],{"class":80},[74,153174,151823],{"class":190},[74,153176,42328],{"class":84},[74,153178,153179,153182,153184],{"class":76,"line":1740},[74,153180,153181],{"class":9495},"    datazoom_opts",[74,153183,131],{"class":80},[74,153185,153186],{"class":84},"[opts.DataZoomOpts()],\n",[74,153188,153189],{"class":76,"line":1745},[74,153190,91],{"class":84},[74,153192,153193,153195,153198],{"class":76,"line":2540},[74,153194,151605],{"class":84},[74,153196,153197],{"class":190},"\"daily_sales.html\"",[74,153199,91],{"class":84},[19,153201,153202,153205],{},[71,153203,153204],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,153207,153209],{"id":153208},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,153211,153212],{},"如果数据结构如下：",[64,153214,153216],{"className":34659,"code":153215,"language":34661,"meta":69,"style":69},"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",[71,153217,153218,153226,153234,153256,153277,153282,153289,153309,153329,153333],{"__ignoreMap":69},[74,153219,153220,153222,153224],{"class":76,"line":77},[74,153221,105939],{"class":84},[74,153223,131],{"class":80},[74,153225,19851],{"class":84},[74,153227,153228,153231],{"class":76,"line":94},[74,153229,153230],{"class":190},"    \"北京\"",[74,153232,153233],{"class":84},": [\n",[74,153235,153236,153238,153240,153242,153245,153247,153250,153252,153254],{"class":76,"line":1141},[74,153237,4880],{"class":84},[74,153239,152278],{"class":190},[74,153241,55718],{"class":84},[74,153243,153244],{"class":190},"\"2024-01-01\"",[74,153246,16714],{"class":84},[74,153248,153249],{"class":190},"\"confirm\"",[74,153251,55718],{"class":84},[74,153253,532],{"class":134},[74,153255,4893],{"class":84},[74,153257,153258,153260,153262,153264,153267,153269,153271,153273,153275],{"class":76,"line":1156},[74,153259,4880],{"class":84},[74,153261,152278],{"class":190},[74,153263,55718],{"class":84},[74,153265,153266],{"class":190},"\"2024-01-02\"",[74,153268,16714],{"class":84},[74,153270,153249],{"class":190},[74,153272,55718],{"class":84},[74,153274,584],{"class":134},[74,153276,4893],{"class":84},[74,153278,153279],{"class":76,"line":1162},[74,153280,153281],{"class":84},"    ],\n",[74,153283,153284,153287],{"class":76,"line":1176},[74,153285,153286],{"class":190},"    \"上海\"",[74,153288,153233],{"class":84},[74,153290,153291,153293,153295,153297,153299,153301,153303,153305,153307],{"class":76,"line":1182},[74,153292,4880],{"class":84},[74,153294,152278],{"class":190},[74,153296,55718],{"class":84},[74,153298,153244],{"class":190},[74,153300,16714],{"class":84},[74,153302,153249],{"class":190},[74,153304,55718],{"class":84},[74,153306,481],{"class":134},[74,153308,4893],{"class":84},[74,153310,153311,153313,153315,153317,153319,153321,153323,153325,153327],{"class":76,"line":1273},[74,153312,4880],{"class":84},[74,153314,152278],{"class":190},[74,153316,55718],{"class":84},[74,153318,153266],{"class":190},[74,153320,16714],{"class":84},[74,153322,153249],{"class":190},[74,153324,55718],{"class":84},[74,153326,609],{"class":134},[74,153328,4893],{"class":84},[74,153330,153331],{"class":76,"line":1279},[74,153332,153281],{"class":84},[74,153334,153335],{"class":76,"line":1291},[74,153336,1527],{"class":84},[19,153338,153339],{},"绘制多地区趋势：",[64,153341,153343],{"className":34659,"code":153342,"language":34661,"meta":69,"style":69},"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",[71,153344,153345,153359,153369,153373,153398,153402,153410,153414,153418,153430,153452,153465,153469,153473,153490,153506,153510],{"__ignoreMap":69},[74,153346,153347,153349,153351,153353,153355,153357],{"class":76,"line":77},[74,153348,35018],{"class":80},[74,153350,151660],{"class":84},[74,153352,34673],{"class":80},[74,153354,151665],{"class":84},[74,153356,35664],{"class":80},[74,153358,151670],{"class":84},[74,153360,153361,153363,153365,153367],{"class":76,"line":94},[74,153362,35018],{"class":80},[74,153364,151519],{"class":84},[74,153366,34673],{"class":80},[74,153368,151524],{"class":84},[74,153370,153371],{"class":76,"line":1141},[74,153372,2363],{"emptyLinePlaceholder":2362},[74,153374,153375,153377,153379,153381,153383,153385,153387,153389,153391,153394,153396],{"class":76,"line":1156},[74,153376,152081],{"class":84},[74,153378,131],{"class":80},[74,153380,153004],{"class":84},[74,153382,152278],{"class":190},[74,153384,4406],{"class":84},[74,153386,2988],{"class":80},[74,153388,152490],{"class":84},[74,153390,30324],{"class":80},[74,153392,153393],{"class":84}," data[",[74,153395,73550],{"class":190},[74,153397,81808],{"class":84},[74,153399,153400],{"class":76,"line":1162},[74,153401,2363],{"emptyLinePlaceholder":2362},[74,153403,153404,153406,153408],{"class":76,"line":1176},[74,153405,151533],{"class":84},[74,153407,131],{"class":80},[74,153409,151538],{"class":84},[74,153411,153412],{"class":76,"line":1182},[74,153413,152122],{"class":84},[74,153415,153416],{"class":76,"line":1273},[74,153417,2363],{"emptyLinePlaceholder":2362},[74,153419,153420,153422,153425,153427],{"class":76,"line":1279},[74,153421,2988],{"class":80},[74,153423,153424],{"class":84}," city, records ",[74,153426,30324],{"class":80},[74,153428,153429],{"class":84}," data.items():\n",[74,153431,153432,153435,153437,153439,153441,153443,153445,153447,153449],{"class":76,"line":1291},[74,153433,153434],{"class":84},"    values ",[74,153436,131],{"class":80},[74,153438,153004],{"class":84},[74,153440,153249],{"class":190},[74,153442,4406],{"class":84},[74,153444,2988],{"class":80},[74,153446,152490],{"class":84},[74,153448,30324],{"class":80},[74,153450,153451],{"class":84}," records]\n",[74,153453,153454,153457,153459,153461,153463],{"class":76,"line":1574},[74,153455,153456],{"class":84},"    line.add_yaxis(city, values, ",[74,153458,152026],{"class":9495},[74,153460,131],{"class":80},[74,153462,35757],{"class":134},[74,153464,91],{"class":84},[74,153466,153467],{"class":76,"line":1579},[74,153468,2363],{"emptyLinePlaceholder":2362},[74,153470,153471],{"class":76,"line":1585},[74,153472,151749],{"class":84},[74,153474,153475,153477,153479,153481,153483,153485,153488],{"class":76,"line":1590},[74,153476,151754],{"class":9495},[74,153478,131],{"class":80},[74,153480,151759],{"class":84},[74,153482,55688],{"class":9495},[74,153484,131],{"class":80},[74,153486,153487],{"class":190},"\"多地区趋势图\"",[74,153489,42328],{"class":84},[74,153491,153492,153494,153496,153498,153500,153502,153504],{"class":76,"line":1604},[74,153493,151810],{"class":9495},[74,153495,131],{"class":80},[74,153497,151815],{"class":84},[74,153499,151818],{"class":9495},[74,153501,131],{"class":80},[74,153503,151823],{"class":190},[74,153505,42328],{"class":84},[74,153507,153508],{"class":76,"line":1609},[74,153509,91],{"class":84},[74,153511,153512,153514,153517],{"class":76,"line":1615},[74,153513,151605],{"class":84},[74,153515,153516],{"class":190},"\"trend.html\"",[74,153518,91],{"class":84},[19,153520,153521],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,153523,153525],{"id":153524},"_1012-易错点","10.12 易错点",[27,153527,153528,153534,153540,153550,153556],{},[30,153529,153530,153533],{},[71,153531,153532],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[30,153535,153536,153539],{},[71,153537,153538],{},"render()"," 生成的是 HTML，不是图片。",[30,153541,153542,153543,153546,153547,32666],{},"JSON 字符串用 ",[71,153544,153545],{},"json.loads()","，JSON 文件用 ",[71,153548,153549],{},"json.load()",[30,153551,153552,153553,32666],{},"中文 JSON 保存时加 ",[71,153554,153555],{},"ensure_ascii=False",[30,153557,153558],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,153560,153562],{"id":153561},"_1013-本章练习","10.13 本章练习",[27,153564,153565,153568,153571,153574,153577],{},[30,153566,153567],{},"安装 pyecharts 并生成第一个折线图。",[30,153569,153570],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[30,153572,153573],{},"绘制两条折线，对比线上和线下销售额。",[30,153575,153576],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[30,153578,153579],{},"对含有空值的销售数据进行清洗后再绘图。",[5090,153581,153582],{},"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":69,"searchDepth":94,"depth":94,"links":153584},[153585,153586,153587,153588,153589,153590,153591,153592,153593,153594,153595,153596,153597],{"id":151201,"depth":94,"text":151202},{"id":151276,"depth":94,"text":151277},{"id":151455,"depth":94,"text":151456},{"id":151506,"depth":94,"text":151507},{"id":151640,"depth":94,"text":151641},{"id":151916,"depth":94,"text":151917},{"id":152042,"depth":94,"text":152043},{"id":152253,"depth":94,"text":152254},{"id":152624,"depth":94,"text":152625},{"id":152836,"depth":94,"text":152837},{"id":153208,"depth":94,"text":153209},{"id":153524,"depth":94,"text":153525},{"id":153561,"depth":94,"text":153562},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":151193,"description":27656},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":153604,"title":153605,"body":153606,"description":27656,"extension":5121,"meta":155966,"navigation":2362,"path":155967,"seo":155968,"stem":155969,"__hash__":155970},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":153607,"toc":155943},[153608,153611,153615,153618,153621,153697,153700,153791,153794,153798,153801,153845,153858,153862,153865,153932,153935,153939,153942,154026,154034,154038,154043,154184,154187,154198,154204,154210,154324,154328,154331,154334,154587,154590,154594,154597,154701,154704,154708,154859,154863,154870,154983,154987,154990,155096,155099,155103,155106,155137,155140,155245,155248,155252,155256,155266,155334,155338,155345,155409,155412,155416,155422,155518,155527,155531,155855,155864,155868,155896,155900,155940],[10,153609,153605],{"id":153610},"_11-面向对象基础",[14,153612,153614],{"id":153613},"_111-什么是面向对象","11.1 什么是面向对象",[19,153616,153617],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,153619,153620],{},"面向过程：",[64,153622,153624],{"className":34659,"code":153623,"language":34661,"meta":69,"style":69},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[71,153625,153626,153635,153643,153647,153657,153688,153692],{"__ignoreMap":69},[74,153627,153628,153630,153632],{"class":76,"line":77},[74,153629,150817],{"class":84},[74,153631,131],{"class":80},[74,153633,153634],{"class":190}," \"小明\"\n",[74,153636,153637,153639,153641],{"class":76,"line":94},[74,153638,150827],{"class":84},[74,153640,131],{"class":80},[74,153642,150832],{"class":134},[74,153644,153645],{"class":76,"line":1141},[74,153646,2363],{"emptyLinePlaceholder":2362},[74,153648,153649,153651,153654],{"class":76,"line":1156},[74,153650,36228],{"class":80},[74,153652,153653],{"class":1925}," introduce",[74,153655,153656],{"class":84},"(name, age):\n",[74,153658,153659,153661,153663,153665,153668,153670,153672,153674,153677,153679,153681,153683,153686],{"class":76,"line":1162},[74,153660,35580],{"class":134},[74,153662,85],{"class":84},[74,153664,138],{"class":80},[74,153666,153667],{"class":190},"\"我叫",[74,153669,982],{"class":134},[74,153671,84091],{"class":84},[74,153673,1032],{"class":134},[74,153675,153676],{"class":190},"，今年",[74,153678,982],{"class":134},[74,153680,74502],{"class":84},[74,153682,1032],{"class":134},[74,153684,153685],{"class":190},"岁\"",[74,153687,91],{"class":84},[74,153689,153690],{"class":76,"line":1176},[74,153691,2363],{"emptyLinePlaceholder":2362},[74,153693,153694],{"class":76,"line":1182},[74,153695,153696],{"class":84},"introduce(name, age)\n",[19,153698,153699],{},"面向对象：",[64,153701,153703],{"className":34659,"code":153702,"language":34661,"meta":69,"style":69},"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",[71,153704,153705,153713,153721,153750,153754,153758,153768,153777,153786],{"__ignoreMap":69},[74,153706,153707,153709,153711],{"class":76,"line":77},[74,153708,18973],{"class":80},[74,153710,12177],{"class":1925},[74,153712,3702],{"class":84},[74,153714,153715,153717,153719],{"class":76,"line":94},[74,153716,35082],{"class":80},[74,153718,153653],{"class":1925},[74,153720,35088],{"class":84},[74,153722,153723,153725,153727,153729,153731,153734,153736,153738,153740,153742,153744,153746,153748],{"class":76,"line":1141},[74,153724,36732],{"class":134},[74,153726,85],{"class":84},[74,153728,138],{"class":80},[74,153730,153667],{"class":190},[74,153732,153733],{"class":134},"{self",[74,153735,84582],{"class":84},[74,153737,1032],{"class":134},[74,153739,153676],{"class":190},[74,153741,153733],{"class":134},[74,153743,84594],{"class":84},[74,153745,1032],{"class":134},[74,153747,153685],{"class":190},[74,153749,91],{"class":84},[74,153751,153752],{"class":76,"line":1156},[74,153753,2363],{"emptyLinePlaceholder":2362},[74,153755,153756],{"class":76,"line":1162},[74,153757,2363],{"emptyLinePlaceholder":2362},[74,153759,153760,153763,153765],{"class":76,"line":1176},[74,153761,153762],{"class":84},"student ",[74,153764,131],{"class":80},[74,153766,153767],{"class":84}," Student()\n",[74,153769,153770,153773,153775],{"class":76,"line":1182},[74,153771,153772],{"class":84},"student.name ",[74,153774,131],{"class":80},[74,153776,153634],{"class":190},[74,153778,153779,153782,153784],{"class":76,"line":1273},[74,153780,153781],{"class":84},"student.age ",[74,153783,131],{"class":80},[74,153785,150832],{"class":134},[74,153787,153788],{"class":76,"line":1279},[74,153789,153790],{"class":84},"student.introduce()\n",[19,153792,153793],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,153795,153797],{"id":153796},"_112-类和对象","11.2 类和对象",[19,153799,153800],{},"类是模板，对象是根据模板创建出来的具体实例。",[64,153802,153804],{"className":34659,"code":153803,"language":34661,"meta":69,"style":69},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[71,153805,153806,153814,153819,153823,153827,153836],{"__ignoreMap":69},[74,153807,153808,153810,153812],{"class":76,"line":77},[74,153809,18973],{"class":80},[74,153811,12177],{"class":1925},[74,153813,3702],{"class":84},[74,153815,153816],{"class":76,"line":94},[74,153817,153818],{"class":80},"    pass\n",[74,153820,153821],{"class":76,"line":1141},[74,153822,2363],{"emptyLinePlaceholder":2362},[74,153824,153825],{"class":76,"line":1156},[74,153826,2363],{"emptyLinePlaceholder":2362},[74,153828,153829,153832,153834],{"class":76,"line":1162},[74,153830,153831],{"class":84},"student1 ",[74,153833,131],{"class":80},[74,153835,153767],{"class":84},[74,153837,153838,153841,153843],{"class":76,"line":1176},[74,153839,153840],{"class":84},"student2 ",[74,153842,131],{"class":80},[74,153844,153767],{"class":84},[19,153846,153847,153850,153851,105299,153854,153857],{},[71,153848,153849],{},"Student"," 是类，",[71,153852,153853],{},"student1",[71,153855,153856],{},"student2"," 是对象。",[14,153859,153861],{"id":153860},"_113-属性","11.3 属性",[19,153863,153864],{},"属性是对象保存的数据。",[64,153866,153868],{"className":34659,"code":153867,"language":34661,"meta":69,"style":69},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[71,153869,153870,153878,153882,153886,153890,153898,153906,153914,153918,153925],{"__ignoreMap":69},[74,153871,153872,153874,153876],{"class":76,"line":77},[74,153873,18973],{"class":80},[74,153875,12177],{"class":1925},[74,153877,3702],{"class":84},[74,153879,153880],{"class":76,"line":94},[74,153881,153818],{"class":80},[74,153883,153884],{"class":76,"line":1141},[74,153885,2363],{"emptyLinePlaceholder":2362},[74,153887,153888],{"class":76,"line":1156},[74,153889,2363],{"emptyLinePlaceholder":2362},[74,153891,153892,153894,153896],{"class":76,"line":1162},[74,153893,153762],{"class":84},[74,153895,131],{"class":80},[74,153897,153767],{"class":84},[74,153899,153900,153902,153904],{"class":76,"line":1176},[74,153901,153772],{"class":84},[74,153903,131],{"class":80},[74,153905,153634],{"class":190},[74,153907,153908,153910,153912],{"class":76,"line":1182},[74,153909,153781],{"class":84},[74,153911,131],{"class":80},[74,153913,150832],{"class":134},[74,153915,153916],{"class":76,"line":1273},[74,153917,2363],{"emptyLinePlaceholder":2362},[74,153919,153920,153922],{"class":76,"line":1279},[74,153921,34696],{"class":134},[74,153923,153924],{"class":84},"(student.name)\n",[74,153926,153927,153929],{"class":76,"line":1291},[74,153928,34696],{"class":134},[74,153930,153931],{"class":84},"(student.age)\n",[19,153933,153934],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,153936,153938],{"id":153937},"_114-方法","11.4 方法",[19,153940,153941],{},"类中的函数叫方法。",[64,153943,153944],{"className":34659,"code":153702,"language":34661,"meta":69,"style":69},[71,153945,153946,153954,153962,153990,153994,153998,154006,154014,154022],{"__ignoreMap":69},[74,153947,153948,153950,153952],{"class":76,"line":77},[74,153949,18973],{"class":80},[74,153951,12177],{"class":1925},[74,153953,3702],{"class":84},[74,153955,153956,153958,153960],{"class":76,"line":94},[74,153957,35082],{"class":80},[74,153959,153653],{"class":1925},[74,153961,35088],{"class":84},[74,153963,153964,153966,153968,153970,153972,153974,153976,153978,153980,153982,153984,153986,153988],{"class":76,"line":1141},[74,153965,36732],{"class":134},[74,153967,85],{"class":84},[74,153969,138],{"class":80},[74,153971,153667],{"class":190},[74,153973,153733],{"class":134},[74,153975,84582],{"class":84},[74,153977,1032],{"class":134},[74,153979,153676],{"class":190},[74,153981,153733],{"class":134},[74,153983,84594],{"class":84},[74,153985,1032],{"class":134},[74,153987,153685],{"class":190},[74,153989,91],{"class":84},[74,153991,153992],{"class":76,"line":1156},[74,153993,2363],{"emptyLinePlaceholder":2362},[74,153995,153996],{"class":76,"line":1162},[74,153997,2363],{"emptyLinePlaceholder":2362},[74,153999,154000,154002,154004],{"class":76,"line":1176},[74,154001,153762],{"class":84},[74,154003,131],{"class":80},[74,154005,153767],{"class":84},[74,154007,154008,154010,154012],{"class":76,"line":1182},[74,154009,153772],{"class":84},[74,154011,131],{"class":80},[74,154013,153634],{"class":190},[74,154015,154016,154018,154020],{"class":76,"line":1273},[74,154017,153781],{"class":84},[74,154019,131],{"class":80},[74,154021,150832],{"class":134},[74,154023,154024],{"class":76,"line":1279},[74,154025,153790],{"class":84},[19,154027,154028,154030,154031,154033],{},[71,154029,35104],{}," 表示当前对象。调用方法时不需要手动传入 ",[71,154032,35104],{},"，Python 会自动传。",[14,154035,154037],{"id":154036},"_115-构造方法__init__","11.5 构造方法__init__",[19,154039,154040,154042],{},[71,154041,35110],{}," 在对象创建时自动执行，用于初始化属性。",[64,154044,154046],{"className":34659,"code":154045,"language":34661,"meta":69,"style":69},"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",[71,154047,154048,154056,154065,154077,154089,154100,154104,154112,154150,154154,154158,154180],{"__ignoreMap":69},[74,154049,154050,154052,154054],{"class":76,"line":77},[74,154051,18973],{"class":80},[74,154053,12177],{"class":1925},[74,154055,3702],{"class":84},[74,154057,154058,154060,154062],{"class":76,"line":94},[74,154059,35082],{"class":80},[74,154061,35085],{"class":134},[74,154063,154064],{"class":84},"(self, name, age, score):\n",[74,154066,154067,154069,154072,154074],{"class":76,"line":1141},[74,154068,35126],{"class":134},[74,154070,154071],{"class":84},".name ",[74,154073,131],{"class":80},[74,154075,154076],{"class":84}," name\n",[74,154078,154079,154081,154084,154086],{"class":76,"line":1156},[74,154080,35126],{"class":134},[74,154082,154083],{"class":84},".age ",[74,154085,131],{"class":80},[74,154087,154088],{"class":84}," age\n",[74,154090,154091,154093,154096,154098],{"class":76,"line":1162},[74,154092,35126],{"class":134},[74,154094,154095],{"class":84},".score ",[74,154097,131],{"class":80},[74,154099,1541],{"class":84},[74,154101,154102],{"class":76,"line":1176},[74,154103,2363],{"emptyLinePlaceholder":2362},[74,154105,154106,154108,154110],{"class":76,"line":1182},[74,154107,35082],{"class":80},[74,154109,153653],{"class":1925},[74,154111,35088],{"class":84},[74,154113,154114,154116,154118,154120,154122,154124,154126,154128,154130,154132,154134,154136,154139,154141,154144,154146,154148],{"class":76,"line":1273},[74,154115,36732],{"class":134},[74,154117,85],{"class":84},[74,154119,138],{"class":80},[74,154121,153667],{"class":190},[74,154123,153733],{"class":134},[74,154125,84582],{"class":84},[74,154127,1032],{"class":134},[74,154129,153676],{"class":190},[74,154131,153733],{"class":134},[74,154133,84594],{"class":84},[74,154135,1032],{"class":134},[74,154137,154138],{"class":190},"岁，成绩",[74,154140,153733],{"class":134},[74,154142,154143],{"class":84},".score",[74,154145,1032],{"class":134},[74,154147,337],{"class":190},[74,154149,91],{"class":84},[74,154151,154152],{"class":76,"line":1279},[74,154153,2363],{"emptyLinePlaceholder":2362},[74,154155,154156],{"class":76,"line":1291},[74,154157,2363],{"emptyLinePlaceholder":2362},[74,154159,154160,154162,154164,154167,154170,154172,154174,154176,154178],{"class":76,"line":1574},[74,154161,153762],{"class":84},[74,154163,131],{"class":80},[74,154165,154166],{"class":84}," Student(",[74,154168,154169],{"class":190},"\"小明\"",[74,154171,16714],{"class":84},[74,154173,736],{"class":134},[74,154175,16714],{"class":84},[74,154177,1075],{"class":134},[74,154179,91],{"class":84},[74,154181,154182],{"class":76,"line":1579},[74,154183,153790],{"class":84},[19,154185,154186],{},"构造方法的好处：",[27,154188,154189,154192,154195],{},[30,154190,154191],{},"创建对象时必须提供必要数据。",[30,154193,154194],{},"属性初始化集中，不容易漏。",[30,154196,154197],{},"对象状态更完整。",[14,154199,154201,154202],{"id":154200},"_116-str","11.6 ",[235,154203,1261],{},[19,154205,154206,154207,32666],{},"直接打印对象时，默认输出不直观。可以定义 ",[71,154208,154209],{},"__str__",[64,154211,154213],{"className":34659,"code":154212,"language":34661,"meta":69,"style":69},"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",[71,154214,154215,154223,154232,154242,154252,154256,154265,154293,154297,154301,154317],{"__ignoreMap":69},[74,154216,154217,154219,154221],{"class":76,"line":77},[74,154218,18973],{"class":80},[74,154220,12177],{"class":1925},[74,154222,3702],{"class":84},[74,154224,154225,154227,154229],{"class":76,"line":94},[74,154226,35082],{"class":80},[74,154228,35085],{"class":134},[74,154230,154231],{"class":84},"(self, name, age):\n",[74,154233,154234,154236,154238,154240],{"class":76,"line":1141},[74,154235,35126],{"class":134},[74,154237,154071],{"class":84},[74,154239,131],{"class":80},[74,154241,154076],{"class":84},[74,154243,154244,154246,154248,154250],{"class":76,"line":1156},[74,154245,35126],{"class":134},[74,154247,154083],{"class":84},[74,154249,131],{"class":80},[74,154251,154088],{"class":84},[74,154253,154254],{"class":76,"line":1162},[74,154255,2363],{"emptyLinePlaceholder":2362},[74,154257,154258,154260,154263],{"class":76,"line":1176},[74,154259,35082],{"class":80},[74,154261,154262],{"class":134}," __str__",[74,154264,35088],{"class":84},[74,154266,154267,154269,154272,154275,154277,154279,154281,154284,154286,154288,154290],{"class":76,"line":1182},[74,154268,19031],{"class":80},[74,154270,154271],{"class":80}," f",[74,154273,154274],{"class":190},"\"Student(name=",[74,154276,153733],{"class":134},[74,154278,84582],{"class":84},[74,154280,1032],{"class":134},[74,154282,154283],{"class":190},", age=",[74,154285,153733],{"class":134},[74,154287,84594],{"class":84},[74,154289,1032],{"class":134},[74,154291,154292],{"class":190},")\"\n",[74,154294,154295],{"class":76,"line":1273},[74,154296,2363],{"emptyLinePlaceholder":2362},[74,154298,154299],{"class":76,"line":1279},[74,154300,2363],{"emptyLinePlaceholder":2362},[74,154302,154303,154305,154307,154309,154311,154313,154315],{"class":76,"line":1291},[74,154304,153762],{"class":84},[74,154306,131],{"class":80},[74,154308,154166],{"class":84},[74,154310,154169],{"class":190},[74,154312,16714],{"class":84},[74,154314,736],{"class":134},[74,154316,91],{"class":84},[74,154318,154319,154321],{"class":76,"line":1574},[74,154320,34696],{"class":134},[74,154322,154323],{"class":84},"(student)\n",[14,154325,154327],{"id":154326},"_117-封装","11.7 封装",[19,154329,154330],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,154332,154333],{},"Python 中以双下划线开头的属性通常视为私有属性。",[64,154335,154337],{"className":34659,"code":154336,"language":34661,"meta":69,"style":69},"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",[71,154338,154339,154348,154357,154369,154381,154385,154394,154403,154407,154417,154430,154441,154446,154457,154461,154470,154482,154493,154497,154510,154521,154525,154536,154540,154544,154562,154571,154580],{"__ignoreMap":69},[74,154340,154341,154343,154346],{"class":76,"line":77},[74,154342,18973],{"class":80},[74,154344,154345],{"class":1925}," Account",[74,154347,3702],{"class":84},[74,154349,154350,154352,154354],{"class":76,"line":94},[74,154351,35082],{"class":80},[74,154353,35085],{"class":134},[74,154355,154356],{"class":84},"(self, owner, balance):\n",[74,154358,154359,154361,154364,154366],{"class":76,"line":1141},[74,154360,35126],{"class":134},[74,154362,154363],{"class":84},".owner ",[74,154365,131],{"class":80},[74,154367,154368],{"class":84}," owner\n",[74,154370,154371,154373,154376,154378],{"class":76,"line":1156},[74,154372,35126],{"class":134},[74,154374,154375],{"class":84},".__balance ",[74,154377,131],{"class":80},[74,154379,154380],{"class":84}," balance\n",[74,154382,154383],{"class":76,"line":1162},[74,154384,2363],{"emptyLinePlaceholder":2362},[74,154386,154387,154389,154392],{"class":76,"line":1176},[74,154388,35082],{"class":80},[74,154390,154391],{"class":1925}," get_balance",[74,154393,35088],{"class":84},[74,154395,154396,154398,154400],{"class":76,"line":1182},[74,154397,19031],{"class":80},[74,154399,43154],{"class":134},[74,154401,154402],{"class":84},".__balance\n",[74,154404,154405],{"class":76,"line":1273},[74,154406,2363],{"emptyLinePlaceholder":2362},[74,154408,154409,154411,154414],{"class":76,"line":1279},[74,154410,35082],{"class":80},[74,154412,154413],{"class":1925}," deposit",[74,154415,154416],{"class":84},"(self, money):\n",[74,154418,154419,154421,154424,154426,154428],{"class":76,"line":1291},[74,154420,2460],{"class":80},[74,154422,154423],{"class":84}," money ",[74,154425,1550],{"class":80},[74,154427,4056],{"class":134},[74,154429,3702],{"class":84},[74,154431,154432,154434,154436,154439],{"class":76,"line":1574},[74,154433,38931],{"class":134},[74,154435,85],{"class":84},[74,154437,154438],{"class":190},"\"存款金额必须大于0\"",[74,154440,91],{"class":84},[74,154442,154443],{"class":76,"line":1579},[74,154444,154445],{"class":80},"            return\n",[74,154447,154448,154450,154452,154454],{"class":76,"line":1585},[74,154449,35126],{"class":134},[74,154451,154375],{"class":84},[74,154453,13756],{"class":80},[74,154455,154456],{"class":84}," money\n",[74,154458,154459],{"class":76,"line":1590},[74,154460,2363],{"emptyLinePlaceholder":2362},[74,154462,154463,154465,154468],{"class":76,"line":1604},[74,154464,35082],{"class":80},[74,154466,154467],{"class":1925}," withdraw",[74,154469,154416],{"class":84},[74,154471,154472,154474,154476,154478,154480],{"class":76,"line":1609},[74,154473,2460],{"class":80},[74,154475,154423],{"class":84},[74,154477,1550],{"class":80},[74,154479,4056],{"class":134},[74,154481,3702],{"class":84},[74,154483,154484,154486,154488,154491],{"class":76,"line":1615},[74,154485,38931],{"class":134},[74,154487,85],{"class":84},[74,154489,154490],{"class":190},"\"取款金额必须大于0\"",[74,154492,91],{"class":84},[74,154494,154495],{"class":76,"line":1636},[74,154496,154445],{"class":80},[74,154498,154499,154501,154503,154505,154507],{"class":76,"line":1641},[74,154500,2460],{"class":80},[74,154502,154423],{"class":84},[74,154504,1046],{"class":80},[74,154506,43154],{"class":134},[74,154508,154509],{"class":84},".__balance:\n",[74,154511,154512,154514,154516,154519],{"class":76,"line":1655},[74,154513,38931],{"class":134},[74,154515,85],{"class":84},[74,154517,154518],{"class":190},"\"余额不足\"",[74,154520,91],{"class":84},[74,154522,154523],{"class":76,"line":1660},[74,154524,154445],{"class":80},[74,154526,154527,154529,154531,154534],{"class":76,"line":1689},[74,154528,35126],{"class":134},[74,154530,154375],{"class":84},[74,154532,154533],{"class":80},"-=",[74,154535,154456],{"class":84},[74,154537,154538],{"class":76,"line":1694},[74,154539,2363],{"emptyLinePlaceholder":2362},[74,154541,154542],{"class":76,"line":1711},[74,154543,2363],{"emptyLinePlaceholder":2362},[74,154545,154546,154549,154551,154554,154556,154558,154560],{"class":76,"line":1716},[74,154547,154548],{"class":84},"account ",[74,154550,131],{"class":80},[74,154552,154553],{"class":84}," Account(",[74,154555,154169],{"class":190},[74,154557,16714],{"class":84},[74,154559,10689],{"class":134},[74,154561,91],{"class":84},[74,154563,154564,154567,154569],{"class":76,"line":1721},[74,154565,154566],{"class":84},"account.deposit(",[74,154568,1684],{"class":134},[74,154570,91],{"class":84},[74,154572,154573,154576,154578],{"class":76,"line":1726},[74,154574,154575],{"class":84},"account.withdraw(",[74,154577,397],{"class":134},[74,154579,91],{"class":84},[74,154581,154582,154584],{"class":76,"line":1740},[74,154583,34696],{"class":134},[74,154585,154586],{"class":84},"(account.get_balance())\n",[19,154588,154589],{},"封装的意义是避免外部随意修改内部状态。",[14,154591,154593],{"id":154592},"_118-继承","11.8 继承",[19,154595,154596],{},"继承可以让子类复用父类的属性和方法。",[64,154598,154600],{"className":34659,"code":154599,"language":34661,"meta":69,"style":69},"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",[71,154601,154602,154611,154620,154631,154635,154639,154653,154662,154673,154677,154681,154691,154696],{"__ignoreMap":69},[74,154603,154604,154606,154609],{"class":76,"line":77},[74,154605,18973],{"class":80},[74,154607,154608],{"class":1925}," Animal",[74,154610,3702],{"class":84},[74,154612,154613,154615,154618],{"class":76,"line":94},[74,154614,35082],{"class":80},[74,154616,154617],{"class":1925}," eat",[74,154619,35088],{"class":84},[74,154621,154622,154624,154626,154629],{"class":76,"line":1141},[74,154623,36732],{"class":134},[74,154625,85],{"class":84},[74,154627,154628],{"class":190},"\"吃东西\"",[74,154630,91],{"class":84},[74,154632,154633],{"class":76,"line":1156},[74,154634,2363],{"emptyLinePlaceholder":2362},[74,154636,154637],{"class":76,"line":1162},[74,154638,2363],{"emptyLinePlaceholder":2362},[74,154640,154641,154643,154646,154648,154651],{"class":76,"line":1176},[74,154642,18973],{"class":80},[74,154644,154645],{"class":1925}," Dog",[74,154647,85],{"class":84},[74,154649,154650],{"class":1925},"Animal",[74,154652,35067],{"class":84},[74,154654,154655,154657,154660],{"class":76,"line":1182},[74,154656,35082],{"class":80},[74,154658,154659],{"class":1925}," bark",[74,154661,35088],{"class":84},[74,154663,154664,154666,154668,154671],{"class":76,"line":1273},[74,154665,36732],{"class":134},[74,154667,85],{"class":84},[74,154669,154670],{"class":190},"\"汪汪\"",[74,154672,91],{"class":84},[74,154674,154675],{"class":76,"line":1279},[74,154676,2363],{"emptyLinePlaceholder":2362},[74,154678,154679],{"class":76,"line":1291},[74,154680,2363],{"emptyLinePlaceholder":2362},[74,154682,154683,154686,154688],{"class":76,"line":1574},[74,154684,154685],{"class":84},"dog ",[74,154687,131],{"class":80},[74,154689,154690],{"class":84}," Dog()\n",[74,154692,154693],{"class":76,"line":1579},[74,154694,154695],{"class":84},"dog.eat()\n",[74,154697,154698],{"class":76,"line":1585},[74,154699,154700],{"class":84},"dog.bark()\n",[19,154702,154703],{},"子类可以扩展新方法，也可以重写父类方法。",[14,154705,154707],{"id":154706},"_119-方法重写","11.9 方法重写",[64,154709,154711],{"className":34659,"code":154710,"language":34661,"meta":69,"style":69},"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",[71,154712,154713,154721,154730,154741,154745,154749,154761,154769,154779,154783,154787,154800,154808,154819,154823,154827,154835,154845,154849,154854],{"__ignoreMap":69},[74,154714,154715,154717,154719],{"class":76,"line":77},[74,154716,18973],{"class":80},[74,154718,154608],{"class":1925},[74,154720,3702],{"class":84},[74,154722,154723,154725,154728],{"class":76,"line":94},[74,154724,35082],{"class":80},[74,154726,154727],{"class":1925}," speak",[74,154729,35088],{"class":84},[74,154731,154732,154734,154736,154739],{"class":76,"line":1141},[74,154733,36732],{"class":134},[74,154735,85],{"class":84},[74,154737,154738],{"class":190},"\"动物叫\"",[74,154740,91],{"class":84},[74,154742,154743],{"class":76,"line":1156},[74,154744,2363],{"emptyLinePlaceholder":2362},[74,154746,154747],{"class":76,"line":1162},[74,154748,2363],{"emptyLinePlaceholder":2362},[74,154750,154751,154753,154755,154757,154759],{"class":76,"line":1176},[74,154752,18973],{"class":80},[74,154754,154645],{"class":1925},[74,154756,85],{"class":84},[74,154758,154650],{"class":1925},[74,154760,35067],{"class":84},[74,154762,154763,154765,154767],{"class":76,"line":1182},[74,154764,35082],{"class":80},[74,154766,154727],{"class":1925},[74,154768,35088],{"class":84},[74,154770,154771,154773,154775,154777],{"class":76,"line":1273},[74,154772,36732],{"class":134},[74,154774,85],{"class":84},[74,154776,154670],{"class":190},[74,154778,91],{"class":84},[74,154780,154781],{"class":76,"line":1279},[74,154782,2363],{"emptyLinePlaceholder":2362},[74,154784,154785],{"class":76,"line":1291},[74,154786,2363],{"emptyLinePlaceholder":2362},[74,154788,154789,154791,154794,154796,154798],{"class":76,"line":1574},[74,154790,18973],{"class":80},[74,154792,154793],{"class":1925}," Cat",[74,154795,85],{"class":84},[74,154797,154650],{"class":1925},[74,154799,35067],{"class":84},[74,154801,154802,154804,154806],{"class":76,"line":1579},[74,154803,35082],{"class":80},[74,154805,154727],{"class":1925},[74,154807,35088],{"class":84},[74,154809,154810,154812,154814,154817],{"class":76,"line":1585},[74,154811,36732],{"class":134},[74,154813,85],{"class":84},[74,154815,154816],{"class":190},"\"喵喵\"",[74,154818,91],{"class":84},[74,154820,154821],{"class":76,"line":1590},[74,154822,2363],{"emptyLinePlaceholder":2362},[74,154824,154825],{"class":76,"line":1604},[74,154826,2363],{"emptyLinePlaceholder":2362},[74,154828,154829,154831,154833],{"class":76,"line":1609},[74,154830,154685],{"class":84},[74,154832,131],{"class":80},[74,154834,154690],{"class":84},[74,154836,154837,154840,154842],{"class":76,"line":1615},[74,154838,154839],{"class":84},"cat ",[74,154841,131],{"class":80},[74,154843,154844],{"class":84}," Cat()\n",[74,154846,154847],{"class":76,"line":1636},[74,154848,2363],{"emptyLinePlaceholder":2362},[74,154850,154851],{"class":76,"line":1641},[74,154852,154853],{"class":84},"dog.speak()\n",[74,154855,154856],{"class":76,"line":1655},[74,154857,154858],{"class":84},"cat.speak()\n",[14,154860,154862],{"id":154861},"_1110-super","11.10 super",[19,154864,154865,154866,154869],{},"子类可以通过 ",[71,154867,154868],{},"super()"," 调用父类方法。",[64,154871,154873],{"className":34659,"code":154872,"language":34661,"meta":69,"style":69},"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",[71,154874,154875,154883,154892,154902,154906,154910,154922,154931,154942,154952,154956,154960,154976],{"__ignoreMap":69},[74,154876,154877,154879,154881],{"class":76,"line":77},[74,154878,18973],{"class":80},[74,154880,19848],{"class":1925},[74,154882,3702],{"class":84},[74,154884,154885,154887,154889],{"class":76,"line":94},[74,154886,35082],{"class":80},[74,154888,35085],{"class":134},[74,154890,154891],{"class":84},"(self, name):\n",[74,154893,154894,154896,154898,154900],{"class":76,"line":1141},[74,154895,35126],{"class":134},[74,154897,154071],{"class":84},[74,154899,131],{"class":80},[74,154901,154076],{"class":84},[74,154903,154904],{"class":76,"line":1156},[74,154905,2363],{"emptyLinePlaceholder":2362},[74,154907,154908],{"class":76,"line":1162},[74,154909,2363],{"emptyLinePlaceholder":2362},[74,154911,154912,154914,154916,154918,154920],{"class":76,"line":1176},[74,154913,18973],{"class":80},[74,154915,12177],{"class":1925},[74,154917,85],{"class":84},[74,154919,23325],{"class":1925},[74,154921,35067],{"class":84},[74,154923,154924,154926,154928],{"class":76,"line":1182},[74,154925,35082],{"class":80},[74,154927,35085],{"class":134},[74,154929,154930],{"class":84},"(self, name, score):\n",[74,154932,154933,154935,154937,154939],{"class":76,"line":1273},[74,154934,35098],{"class":134},[74,154936,21540],{"class":84},[74,154938,35110],{"class":134},[74,154940,154941],{"class":84},"(name)\n",[74,154943,154944,154946,154948,154950],{"class":76,"line":1279},[74,154945,35126],{"class":134},[74,154947,154095],{"class":84},[74,154949,131],{"class":80},[74,154951,1541],{"class":84},[74,154953,154954],{"class":76,"line":1291},[74,154955,2363],{"emptyLinePlaceholder":2362},[74,154957,154958],{"class":76,"line":1574},[74,154959,2363],{"emptyLinePlaceholder":2362},[74,154961,154962,154964,154966,154968,154970,154972,154974],{"class":76,"line":1579},[74,154963,153762],{"class":84},[74,154965,131],{"class":80},[74,154967,154166],{"class":84},[74,154969,154169],{"class":190},[74,154971,16714],{"class":84},[74,154973,1075],{"class":134},[74,154975,91],{"class":84},[74,154977,154978,154980],{"class":76,"line":1585},[74,154979,34696],{"class":134},[74,154981,154982],{"class":84},"(student.name, student.score)\n",[14,154984,154986],{"id":154985},"_1111-多态","11.11 多态",[19,154988,154989],{},"多态指不同对象响应同一个方法，表现出不同结果。",[64,154991,154993],{"className":34659,"code":154992,"language":34661,"meta":69,"style":69},"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",[71,154994,154995,155003,155011,155021,155025,155029,155037,155045,155055,155059,155063,155073,155078,155082,155086,155091],{"__ignoreMap":69},[74,154996,154997,154999,155001],{"class":76,"line":77},[74,154998,18973],{"class":80},[74,155000,154645],{"class":1925},[74,155002,3702],{"class":84},[74,155004,155005,155007,155009],{"class":76,"line":94},[74,155006,35082],{"class":80},[74,155008,154727],{"class":1925},[74,155010,35088],{"class":84},[74,155012,155013,155015,155017,155019],{"class":76,"line":1141},[74,155014,36732],{"class":134},[74,155016,85],{"class":84},[74,155018,154670],{"class":190},[74,155020,91],{"class":84},[74,155022,155023],{"class":76,"line":1156},[74,155024,2363],{"emptyLinePlaceholder":2362},[74,155026,155027],{"class":76,"line":1162},[74,155028,2363],{"emptyLinePlaceholder":2362},[74,155030,155031,155033,155035],{"class":76,"line":1176},[74,155032,18973],{"class":80},[74,155034,154793],{"class":1925},[74,155036,3702],{"class":84},[74,155038,155039,155041,155043],{"class":76,"line":1182},[74,155040,35082],{"class":80},[74,155042,154727],{"class":1925},[74,155044,35088],{"class":84},[74,155046,155047,155049,155051,155053],{"class":76,"line":1273},[74,155048,36732],{"class":134},[74,155050,85],{"class":84},[74,155052,154816],{"class":190},[74,155054,91],{"class":84},[74,155056,155057],{"class":76,"line":1279},[74,155058,2363],{"emptyLinePlaceholder":2362},[74,155060,155061],{"class":76,"line":1291},[74,155062,2363],{"emptyLinePlaceholder":2362},[74,155064,155065,155067,155070],{"class":76,"line":1574},[74,155066,36228],{"class":80},[74,155068,155069],{"class":1925}," make_sound",[74,155071,155072],{"class":84},"(animal):\n",[74,155074,155075],{"class":76,"line":1579},[74,155076,155077],{"class":84},"    animal.speak()\n",[74,155079,155080],{"class":76,"line":1585},[74,155081,2363],{"emptyLinePlaceholder":2362},[74,155083,155084],{"class":76,"line":1590},[74,155085,2363],{"emptyLinePlaceholder":2362},[74,155087,155088],{"class":76,"line":1604},[74,155089,155090],{"class":84},"make_sound(Dog())\n",[74,155092,155093],{"class":76,"line":1609},[74,155094,155095],{"class":84},"make_sound(Cat())\n",[19,155097,155098],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,155100,155102],{"id":155101},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,155104,155105],{},"实例属性属于对象：",[64,155107,155109],{"className":34659,"code":155108,"language":34661,"meta":69,"style":69},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[71,155110,155111,155119,155127],{"__ignoreMap":69},[74,155112,155113,155115,155117],{"class":76,"line":77},[74,155114,18973],{"class":80},[74,155116,12177],{"class":1925},[74,155118,3702],{"class":84},[74,155120,155121,155123,155125],{"class":76,"line":94},[74,155122,35082],{"class":80},[74,155124,35085],{"class":134},[74,155126,154891],{"class":84},[74,155128,155129,155131,155133,155135],{"class":76,"line":1141},[74,155130,35126],{"class":134},[74,155132,154071],{"class":84},[74,155134,131],{"class":80},[74,155136,154076],{"class":84},[19,155138,155139],{},"类属性属于类，所有对象共享：",[64,155141,155143],{"className":34659,"code":155142,"language":34661,"meta":69,"style":69},"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",[71,155144,155145,155153,155163,155167,155175,155185,155189,155193,155206,155220,155224,155231,155238],{"__ignoreMap":69},[74,155146,155147,155149,155151],{"class":76,"line":77},[74,155148,18973],{"class":80},[74,155150,12177],{"class":1925},[74,155152,3702],{"class":84},[74,155154,155155,155158,155160],{"class":76,"line":94},[74,155156,155157],{"class":84},"    school ",[74,155159,131],{"class":80},[74,155161,155162],{"class":190}," \"黑马学校\"\n",[74,155164,155165],{"class":76,"line":1141},[74,155166,2363],{"emptyLinePlaceholder":2362},[74,155168,155169,155171,155173],{"class":76,"line":1156},[74,155170,35082],{"class":80},[74,155172,35085],{"class":134},[74,155174,154891],{"class":84},[74,155176,155177,155179,155181,155183],{"class":76,"line":1162},[74,155178,35126],{"class":134},[74,155180,154071],{"class":84},[74,155182,131],{"class":80},[74,155184,154076],{"class":84},[74,155186,155187],{"class":76,"line":1176},[74,155188,2363],{"emptyLinePlaceholder":2362},[74,155190,155191],{"class":76,"line":1182},[74,155192,2363],{"emptyLinePlaceholder":2362},[74,155194,155195,155198,155200,155202,155204],{"class":76,"line":1273},[74,155196,155197],{"class":84},"s1 ",[74,155199,131],{"class":80},[74,155201,154166],{"class":84},[74,155203,154169],{"class":190},[74,155205,91],{"class":84},[74,155207,155208,155211,155213,155215,155218],{"class":76,"line":1279},[74,155209,155210],{"class":84},"s2 ",[74,155212,131],{"class":80},[74,155214,154166],{"class":84},[74,155216,155217],{"class":190},"\"小红\"",[74,155219,91],{"class":84},[74,155221,155222],{"class":76,"line":1291},[74,155223,2363],{"emptyLinePlaceholder":2362},[74,155225,155226,155228],{"class":76,"line":1574},[74,155227,34696],{"class":134},[74,155229,155230],{"class":84},"(s1.school)\n",[74,155232,155233,155235],{"class":76,"line":1579},[74,155234,34696],{"class":134},[74,155236,155237],{"class":84},"(s2.school)\n",[74,155239,155240,155242],{"class":76,"line":1585},[74,155241,34696],{"class":134},[74,155243,155244],{"class":84},"(Student.school)\n",[19,155246,155247],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,155249,155251],{"id":155250},"_1113-类方法和静态方法","11.13 类方法和静态方法",[44,155253,155255],{"id":155254},"_11131-类方法","11.13.1 类方法",[19,155257,155258,155259,155262,155263,32666],{},"类方法使用 ",[71,155260,155261],{},"@classmethod","，第一个参数通常是 ",[71,155264,155265],{},"cls",[64,155267,155269],{"className":34659,"code":155268,"language":34661,"meta":69,"style":69},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[71,155270,155271,155279,155287,155291,155299,155309,155319,155323,155327],{"__ignoreMap":69},[74,155272,155273,155275,155277],{"class":76,"line":77},[74,155274,18973],{"class":80},[74,155276,12177],{"class":1925},[74,155278,3702],{"class":84},[74,155280,155281,155283,155285],{"class":76,"line":94},[74,155282,155157],{"class":84},[74,155284,131],{"class":80},[74,155286,155162],{"class":190},[74,155288,155289],{"class":76,"line":1141},[74,155290,2363],{"emptyLinePlaceholder":2362},[74,155292,155293,155296],{"class":76,"line":1156},[74,155294,155295],{"class":1925},"    @",[74,155297,155298],{"class":134},"classmethod\n",[74,155300,155301,155303,155306],{"class":76,"line":1162},[74,155302,35082],{"class":80},[74,155304,155305],{"class":1925}," get_school",[74,155307,155308],{"class":84},"(cls):\n",[74,155310,155311,155313,155316],{"class":76,"line":1176},[74,155312,19031],{"class":80},[74,155314,155315],{"class":134}," cls",[74,155317,155318],{"class":84},".school\n",[74,155320,155321],{"class":76,"line":1182},[74,155322,2363],{"emptyLinePlaceholder":2362},[74,155324,155325],{"class":76,"line":1273},[74,155326,2363],{"emptyLinePlaceholder":2362},[74,155328,155329,155331],{"class":76,"line":1279},[74,155330,34696],{"class":134},[74,155332,155333],{"class":84},"(Student.get_school())\n",[44,155335,155337],{"id":155336},"_11132-静态方法","11.13.2 静态方法",[19,155339,155340,155341,155344],{},"静态方法使用 ",[71,155342,155343],{},"@staticmethod","，不需要访问实例和类。",[64,155346,155348],{"className":34659,"code":155347,"language":34661,"meta":69,"style":69},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[71,155349,155350,155359,155366,155375,155386,155390,155394],{"__ignoreMap":69},[74,155351,155352,155354,155357],{"class":76,"line":77},[74,155353,18973],{"class":80},[74,155355,155356],{"class":1925}," MathUtils",[74,155358,3702],{"class":84},[74,155360,155361,155363],{"class":76,"line":94},[74,155362,155295],{"class":1925},[74,155364,155365],{"class":134},"staticmethod\n",[74,155367,155368,155370,155372],{"class":76,"line":1141},[74,155369,35082],{"class":80},[74,155371,9488],{"class":1925},[74,155373,155374],{"class":84},"(a, b):\n",[74,155376,155377,155379,155381,155383],{"class":76,"line":1156},[74,155378,19031],{"class":80},[74,155380,15148],{"class":84},[74,155382,567],{"class":80},[74,155384,155385],{"class":84}," b\n",[74,155387,155388],{"class":76,"line":1162},[74,155389,2363],{"emptyLinePlaceholder":2362},[74,155391,155392],{"class":76,"line":1176},[74,155393,2363],{"emptyLinePlaceholder":2362},[74,155395,155396,155398,155401,155403,155405,155407],{"class":76,"line":1182},[74,155397,34696],{"class":134},[74,155399,155400],{"class":84},"(MathUtils.add(",[74,155402,303],{"class":134},[74,155404,16714],{"class":84},[74,155406,163],{"class":134},[74,155408,34778],{"class":84},[19,155410,155411],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,155413,155415],{"id":155414},"_1114-dataclass","11.14 dataclass",[19,155417,155418,155421],{},[71,155419,155420],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[64,155423,155425],{"className":34659,"code":155424,"language":34661,"meta":69,"style":69},"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",[71,155426,155427,155439,155443,155447,155452,155460,155468,155476,155484,155488,155492,155512],{"__ignoreMap":69},[74,155428,155429,155431,155434,155436],{"class":76,"line":77},[74,155430,35018],{"class":80},[74,155432,155433],{"class":84}," dataclasses ",[74,155435,34673],{"class":80},[74,155437,155438],{"class":84}," dataclass\n",[74,155440,155441],{"class":76,"line":94},[74,155442,2363],{"emptyLinePlaceholder":2362},[74,155444,155445],{"class":76,"line":1141},[74,155446,2363],{"emptyLinePlaceholder":2362},[74,155448,155449],{"class":76,"line":1156},[74,155450,155451],{"class":1925},"@dataclass\n",[74,155453,155454,155456,155458],{"class":76,"line":1162},[74,155455,18973],{"class":80},[74,155457,12177],{"class":1925},[74,155459,3702],{"class":84},[74,155461,155462,155465],{"class":76,"line":1176},[74,155463,155464],{"class":84},"    name: ",[74,155466,155467],{"class":134},"str\n",[74,155469,155470,155473],{"class":76,"line":1182},[74,155471,155472],{"class":84},"    age: ",[74,155474,155475],{"class":134},"int\n",[74,155477,155478,155481],{"class":76,"line":1273},[74,155479,155480],{"class":84},"    score: ",[74,155482,155483],{"class":134},"float\n",[74,155485,155486],{"class":76,"line":1279},[74,155487,2363],{"emptyLinePlaceholder":2362},[74,155489,155490],{"class":76,"line":1291},[74,155491,2363],{"emptyLinePlaceholder":2362},[74,155493,155494,155496,155498,155500,155502,155504,155506,155508,155510],{"class":76,"line":1574},[74,155495,153762],{"class":84},[74,155497,131],{"class":80},[74,155499,154166],{"class":84},[74,155501,154169],{"class":190},[74,155503,16714],{"class":84},[74,155505,736],{"class":134},[74,155507,16714],{"class":84},[74,155509,1075],{"class":134},[74,155511,91],{"class":84},[74,155513,155514,155516],{"class":76,"line":1579},[74,155515,34696],{"class":134},[74,155517,154323],{"class":84},[19,155519,155520,155521,298,155523,155526],{},"它会自动生成 ",[71,155522,35110],{},[71,155524,155525],{},"__repr__"," 等方法。适合数据模型类。",[14,155528,155530],{"id":155529},"_1115-小案例学生类","11.15 小案例：学生类",[64,155532,155534],{"className":34659,"code":155533,"language":34661,"meta":69,"style":69},"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",[71,155535,155536,155544,155553,155565,155575,155585,155595,155599,155608,155621,155625,155634,155640,155652,155664,155676,155688,155692,155696,155702,155712,155721,155731,155739,155747,155756,155760,155764,155772,155808,155812,155816,155841,155848],{"__ignoreMap":69},[74,155537,155538,155540,155542],{"class":76,"line":77},[74,155539,18973],{"class":80},[74,155541,12177],{"class":1925},[74,155543,3702],{"class":84},[74,155545,155546,155548,155550],{"class":76,"line":94},[74,155547,35082],{"class":80},[74,155549,35085],{"class":134},[74,155551,155552],{"class":84},"(self, student_id, name, age, score):\n",[74,155554,155555,155557,155560,155562],{"class":76,"line":1141},[74,155556,35126],{"class":134},[74,155558,155559],{"class":84},".student_id ",[74,155561,131],{"class":80},[74,155563,155564],{"class":84}," student_id\n",[74,155566,155567,155569,155571,155573],{"class":76,"line":1156},[74,155568,35126],{"class":134},[74,155570,154071],{"class":84},[74,155572,131],{"class":80},[74,155574,154076],{"class":84},[74,155576,155577,155579,155581,155583],{"class":76,"line":1162},[74,155578,35126],{"class":134},[74,155580,154083],{"class":84},[74,155582,131],{"class":80},[74,155584,154088],{"class":84},[74,155586,155587,155589,155591,155593],{"class":76,"line":1176},[74,155588,35126],{"class":134},[74,155590,154095],{"class":84},[74,155592,131],{"class":80},[74,155594,1541],{"class":84},[74,155596,155597],{"class":76,"line":1182},[74,155598,2363],{"emptyLinePlaceholder":2362},[74,155600,155601,155603,155606],{"class":76,"line":1273},[74,155602,35082],{"class":80},[74,155604,155605],{"class":1925}," is_passed",[74,155607,35088],{"class":84},[74,155609,155610,155612,155614,155616,155618],{"class":76,"line":1279},[74,155611,19031],{"class":80},[74,155613,43154],{"class":134},[74,155615,154095],{"class":84},[74,155617,1672],{"class":80},[74,155619,155620],{"class":134}," 60\n",[74,155622,155623],{"class":76,"line":1291},[74,155624,2363],{"emptyLinePlaceholder":2362},[74,155626,155627,155629,155632],{"class":76,"line":1574},[74,155628,35082],{"class":80},[74,155630,155631],{"class":1925}," to_dict",[74,155633,35088],{"class":84},[74,155635,155636,155638],{"class":76,"line":1579},[74,155637,19031],{"class":80},[74,155639,19851],{"class":84},[74,155641,155642,155645,155647,155649],{"class":76,"line":1585},[74,155643,155644],{"class":190},"            \"student_id\"",[74,155646,55718],{"class":84},[74,155648,35104],{"class":134},[74,155650,155651],{"class":84},".student_id,\n",[74,155653,155654,155657,155659,155661],{"class":76,"line":1590},[74,155655,155656],{"class":190},"            \"name\"",[74,155658,55718],{"class":84},[74,155660,35104],{"class":134},[74,155662,155663],{"class":84},".name,\n",[74,155665,155666,155669,155671,155673],{"class":76,"line":1604},[74,155667,155668],{"class":190},"            \"age\"",[74,155670,55718],{"class":84},[74,155672,35104],{"class":134},[74,155674,155675],{"class":84},".age,\n",[74,155677,155678,155681,155683,155685],{"class":76,"line":1609},[74,155679,155680],{"class":190},"            \"score\"",[74,155682,55718],{"class":84},[74,155684,35104],{"class":134},[74,155686,155687],{"class":84},".score,\n",[74,155689,155690],{"class":76,"line":1615},[74,155691,2492],{"class":84},[74,155693,155694],{"class":76,"line":1636},[74,155695,2363],{"emptyLinePlaceholder":2362},[74,155697,155698,155700],{"class":76,"line":1641},[74,155699,155295],{"class":1925},[74,155701,155298],{"class":134},[74,155703,155704,155706,155709],{"class":76,"line":1655},[74,155705,35082],{"class":80},[74,155707,155708],{"class":1925}," from_dict",[74,155710,155711],{"class":84},"(cls, data):\n",[74,155713,155714,155716,155718],{"class":76,"line":1660},[74,155715,19031],{"class":80},[74,155717,155315],{"class":134},[74,155719,155720],{"class":84},"(\n",[74,155722,155723,155726,155729],{"class":76,"line":1689},[74,155724,155725],{"class":84},"            data[",[74,155727,155728],{"class":190},"\"student_id\"",[74,155730,92117],{"class":84},[74,155732,155733,155735,155737],{"class":76,"line":1694},[74,155734,155725],{"class":84},[74,155736,66960],{"class":190},[74,155738,92117],{"class":84},[74,155740,155741,155743,155745],{"class":76,"line":1711},[74,155742,155725],{"class":84},[74,155744,73405],{"class":190},[74,155746,92117],{"class":84},[74,155748,155749,155751,155754],{"class":76,"line":1716},[74,155750,155725],{"class":84},[74,155752,155753],{"class":190},"\"score\"",[74,155755,92117],{"class":84},[74,155757,155758],{"class":76,"line":1721},[74,155759,42407],{"class":84},[74,155761,155762],{"class":76,"line":1726},[74,155763,2363],{"emptyLinePlaceholder":2362},[74,155765,155766,155768,155770],{"class":76,"line":1740},[74,155767,35082],{"class":80},[74,155769,154262],{"class":134},[74,155771,35088],{"class":84},[74,155773,155774,155776,155778,155780,155782,155785,155787,155790,155792,155794,155796,155798,155800,155802,155804,155806],{"class":76,"line":1745},[74,155775,19031],{"class":80},[74,155777,154271],{"class":80},[74,155779,337],{"class":190},[74,155781,153733],{"class":134},[74,155783,155784],{"class":84},".student_id",[74,155786,1032],{"class":134},[74,155788,155789],{"class":134}," {self",[74,155791,84582],{"class":84},[74,155793,1032],{"class":134},[74,155795,155789],{"class":134},[74,155797,84594],{"class":84},[74,155799,1032],{"class":134},[74,155801,155789],{"class":134},[74,155803,154143],{"class":84},[74,155805,1032],{"class":134},[74,155807,29414],{"class":190},[74,155809,155810],{"class":76,"line":2540},[74,155811,2363],{"emptyLinePlaceholder":2362},[74,155813,155814],{"class":76,"line":2554},[74,155815,2363],{"emptyLinePlaceholder":2362},[74,155817,155818,155820,155822,155824,155827,155829,155831,155833,155835,155837,155839],{"class":76,"line":2562},[74,155819,153762],{"class":84},[74,155821,131],{"class":80},[74,155823,154166],{"class":84},[74,155825,155826],{"class":190},"\"001\"",[74,155828,16714],{"class":84},[74,155830,154169],{"class":190},[74,155832,16714],{"class":84},[74,155834,736],{"class":134},[74,155836,16714],{"class":84},[74,155838,1075],{"class":134},[74,155840,91],{"class":84},[74,155842,155843,155845],{"class":76,"line":2567},[74,155844,34696],{"class":134},[74,155846,155847],{"class":84},"(student.is_passed())\n",[74,155849,155850,155852],{"class":76,"line":2573},[74,155851,34696],{"class":134},[74,155853,155854],{"class":84},"(student.to_dict())\n",[19,155856,155857,105299,155860,155863],{},[71,155858,155859],{},"to_dict()",[71,155861,155862],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,155865,155867],{"id":155866},"_1116-易错点","11.16 易错点",[27,155869,155870,155876,155882,155887,155890,155893],{},[30,155871,155872,155873,32666],{},"类名推荐使用大驼峰，如 ",[71,155874,155875],{},"StudentManager",[30,155877,155878,155879,155881],{},"方法第一个参数必须写 ",[71,155880,35104],{},"，调用时不用传。",[30,155883,155884,155886],{},[71,155885,35110],{}," 不是普通方法，它在创建对象时自动执行。",[30,155888,155889],{},"私有属性不是绝对安全，只是约定和名称改写。",[30,155891,155892],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[30,155894,155895],{},"类中方法太多时，说明职责可能过重。",[14,155897,155899],{"id":155898},"_1117-本章练习","11.17 本章练习",[27,155901,155902,155908,155914,155919,155932],{},[30,155903,155904,155905,155907],{},"定义 ",[71,155906,153849],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[30,155909,155904,155910,155913],{},[71,155911,155912],{},"Account"," 类，实现存款、取款、查询余额。",[30,155915,155904,155916,155918],{},[71,155917,21505],{}," 类，计算圆的周长和面积。",[30,155920,155904,155921,298,155924,155927,155928,155931],{},[71,155922,155923],{},"Dog",[71,155925,155926],{},"Cat"," 类，并用同一个函数调用它们的 ",[71,155929,155930],{},"speak()"," 方法。",[30,155933,108647,155934,155936,155937,32666],{},[71,155935,155420],{}," 定义一个商品类 ",[71,155938,155939],{},"Product",[5090,155941,155942],{},"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":69,"searchDepth":94,"depth":94,"links":155944},[155945,155946,155947,155948,155949,155950,155952,155953,155954,155955,155956,155957,155958,155962,155963,155964,155965],{"id":153613,"depth":94,"text":153614},{"id":153796,"depth":94,"text":153797},{"id":153860,"depth":94,"text":153861},{"id":153937,"depth":94,"text":153938},{"id":154036,"depth":94,"text":154037},{"id":154200,"depth":94,"text":155951},"11.6 str",{"id":154326,"depth":94,"text":154327},{"id":154592,"depth":94,"text":154593},{"id":154706,"depth":94,"text":154707},{"id":154861,"depth":94,"text":154862},{"id":154985,"depth":94,"text":154986},{"id":155101,"depth":94,"text":155102},{"id":155250,"depth":94,"text":155251,"children":155959},[155960,155961],{"id":155254,"depth":1141,"text":155255},{"id":155336,"depth":1141,"text":155337},{"id":155414,"depth":94,"text":155415},{"id":155529,"depth":94,"text":155530},{"id":155866,"depth":94,"text":155867},{"id":155898,"depth":94,"text":155899},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":153605,"description":27656},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":155972,"title":155973,"body":155974,"description":27656,"extension":5121,"meta":159287,"navigation":2362,"path":159288,"seo":159289,"stem":159290,"__hash__":159291},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":155975,"toc":159263},[155976,155979,155983,155986,155989,156018,156021,156029,156033,156037,156040,156063,156066,156072,156076,157522,157525,157546,157550,157553,157565,157568,157752,157755,157881,157884,157888,157892,158028,158032,158118,158122,158204,158208,158245,158249,158438,158442,158445,158675,158679,158682,158863,158866,158870,158873,158879,158882,158908,158912,158915,158929,158932,158957,158960,158974,158977,158994,158997,159014,159017,159034,159038,159064,159068,159091,159095,159098,159100,159106,159108,159129,159132,159138,159144,159148,159151,159227,159230,159234,159260],[10,155977,155973],{"id":155978},"_12-综合案例与复习路线",[14,155980,155982],{"id":155981},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,155984,155985],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,155987,155988],{},"一个合格的入门综合项目最好覆盖：",[27,155990,155991,155994,155997,156000,156003,156006,156009,156012,156015],{},[30,155992,155993],{},"输入输出。",[30,155995,155996],{},"判断和循环。",[30,155998,155999],{},"函数拆分。",[30,156001,156002],{},"列表、字典等容器。",[30,156004,156005],{},"文件持久化。",[30,156007,156008],{},"异常处理。",[30,156010,156011],{},"模块拆分。",[30,156013,156014],{},"可选：面向对象。",[30,156016,156017],{},"可选：数据可视化。",[19,156019,156020],{},"本章整理两个方向：",[27,156022,156023,156026],{},[30,156024,156025],{},"学生管理系统。",[30,156027,156028],{},"销售数据统计和可视化。",[14,156030,156032],{"id":156031},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[44,156034,156036],{"id":156035},"_1221-需求","12.2.1 需求",[19,156038,156039],{},"实现一个命令行学生管理系统：",[27,156041,156042,156045,156048,156051,156054,156057,156060],{},[30,156043,156044],{},"添加学生。",[30,156046,156047],{},"删除学生。",[30,156049,156050],{},"修改学生。",[30,156052,156053],{},"查询学生。",[30,156055,156056],{},"显示所有学生。",[30,156058,156059],{},"保存到 JSON 文件。",[30,156061,156062],{},"程序启动时自动读取 JSON 文件。",[19,156064,156065],{},"学生字段：",[64,156067,156070],{"className":156068,"code":156069,"language":9466,"meta":69},[9464],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[71,156071,156069],{"__ignoreMap":69},[14,156073,156075],{"id":156074},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[64,156077,156079],{"className":34659,"code":156078,"language":34661,"meta":69,"style":69},"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",[71,156080,156081,156087,156097,156101,156115,156119,156123,156132,156144,156150,156154,156160,156191,156201,156208,156219,156225,156229,156233,156243,156274,156300,156304,156308,156317,156328,156339,156350,156361,156372,156383,156394,156398,156402,156412,156424,156440,156447,156454,156458,156462,156472,156480,156487,156500,156510,156521,156525,156529,156538,156546,156552,156564,156572,156583,156587,156591,156600,156616,156620,156627,156638,156643,156647,156663,156678,156693,156697,156702,156710,156718,156726,156734,156738,156743,156754,156758,156762,156771,156786,156796,156800,156812,156823,156827,156831,156836,156840,156851,156855,156859,156868,156883,156891,156895,156907,156917,156921,156925,156940,156953,156966,156970,156983,156995,157007,157011,157015,157026,157030,157034,157043,157058,157066,157070,157082,157092,157096,157100,157105,157109,157113,157123,157129,157151,157170,157189,157208,157213,157217,157221,157230,157238,157249,157253,157257,157283,157293,157298,157302,157306,157314,157324,157328,157336,157341,157357,157361,157375,157380,157394,157399,157412,157417,157430,157435,157448,157453,157466,157477,157481,157487,157498,157502,157506,157518],{"__ignoreMap":69},[74,156082,156083,156085],{"class":76,"line":77},[74,156084,34673],{"class":80},[74,156086,151372],{"class":84},[74,156088,156089,156091,156093,156095],{"class":76,"line":94},[74,156090,35018],{"class":80},[74,156092,112592],{"class":84},[74,156094,34673],{"class":80},[74,156096,112597],{"class":84},[74,156098,156099],{"class":76,"line":1141},[74,156100,2363],{"emptyLinePlaceholder":2362},[74,156102,156103,156106,156108,156110,156113],{"class":76,"line":1156},[74,156104,156105],{"class":134},"DATA_FILE",[74,156107,17843],{"class":80},[74,156109,112826],{"class":84},[74,156111,156112],{"class":190},"\"students.json\"",[74,156114,91],{"class":84},[74,156116,156117],{"class":76,"line":1162},[74,156118,2363],{"emptyLinePlaceholder":2362},[74,156120,156121],{"class":76,"line":1176},[74,156122,2363],{"emptyLinePlaceholder":2362},[74,156124,156125,156127,156130],{"class":76,"line":1182},[74,156126,36228],{"class":80},[74,156128,156129],{"class":1925}," load_students",[74,156131,36234],{"class":84},[74,156133,156134,156136,156138,156141],{"class":76,"line":1273},[74,156135,3064],{"class":80},[74,156137,43211],{"class":80},[74,156139,156140],{"class":134}," DATA_FILE",[74,156142,156143],{"class":84},".exists():\n",[74,156145,156146,156148],{"class":76,"line":1279},[74,156147,19031],{"class":80},[74,156149,56119],{"class":84},[74,156151,156152],{"class":76,"line":1291},[74,156153,2363],{"emptyLinePlaceholder":2362},[74,156155,156156,156158],{"class":76,"line":1574},[74,156157,130065],{"class":80},[74,156159,3702],{"class":84},[74,156161,156162,156165,156167,156169,156171,156173,156175,156177,156179,156181,156183,156185,156187,156189],{"class":76,"line":1579},[74,156163,156164],{"class":80},"        with",[74,156166,151072],{"class":134},[74,156168,85],{"class":84},[74,156170,156105],{"class":134},[74,156172,16714],{"class":84},[74,156174,151082],{"class":190},[74,156176,16714],{"class":84},[74,156178,151087],{"class":9495},[74,156180,131],{"class":80},[74,156182,151092],{"class":190},[74,156184,17993],{"class":84},[74,156186,35664],{"class":80},[74,156188,152434],{"class":9495},[74,156190,3702],{"class":84},[74,156192,156193,156195,156197,156199],{"class":76,"line":1585},[74,156194,20011],{"class":80},[74,156196,152445],{"class":84},[74,156198,49635],{"class":9495},[74,156200,91],{"class":84},[74,156202,156203,156205],{"class":76,"line":1590},[74,156204,130093],{"class":80},[74,156206,156207],{"class":84}," json.JSONDecodeError:\n",[74,156209,156210,156212,156214,156217],{"class":76,"line":1604},[74,156211,36732],{"class":134},[74,156213,85],{"class":84},[74,156215,156216],{"class":190},"\"数据文件格式错误，已使用空数据启动\"",[74,156218,91],{"class":84},[74,156220,156221,156223],{"class":76,"line":1609},[74,156222,19031],{"class":80},[74,156224,56119],{"class":84},[74,156226,156227],{"class":76,"line":1615},[74,156228,2363],{"emptyLinePlaceholder":2362},[74,156230,156231],{"class":76,"line":1636},[74,156232,2363],{"emptyLinePlaceholder":2362},[74,156234,156235,156237,156240],{"class":76,"line":1641},[74,156236,36228],{"class":80},[74,156238,156239],{"class":1925}," save_students",[74,156241,156242],{"class":84},"(students):\n",[74,156244,156245,156247,156249,156251,156253,156255,156258,156260,156262,156264,156266,156268,156270,156272],{"class":76,"line":1655},[74,156246,38459],{"class":80},[74,156248,151072],{"class":134},[74,156250,85],{"class":84},[74,156252,156105],{"class":134},[74,156254,16714],{"class":84},[74,156256,156257],{"class":190},"\"w\"",[74,156259,16714],{"class":84},[74,156261,151087],{"class":9495},[74,156263,131],{"class":80},[74,156265,151092],{"class":190},[74,156267,17993],{"class":84},[74,156269,35664],{"class":80},[74,156271,152434],{"class":9495},[74,156273,3702],{"class":84},[74,156275,156276,156279,156281,156283,156285,156287,156289,156291,156294,156296,156298],{"class":76,"line":1660},[74,156277,156278],{"class":84},"        json.dump(students, ",[74,156280,49635],{"class":9495},[74,156282,16714],{"class":84},[74,156284,151418],{"class":9495},[74,156286,131],{"class":80},[74,156288,38268],{"class":134},[74,156290,16714],{"class":84},[74,156292,156293],{"class":9495},"indent",[74,156295,131],{"class":80},[74,156297,163],{"class":134},[74,156299,91],{"class":84},[74,156301,156302],{"class":76,"line":1689},[74,156303,2363],{"emptyLinePlaceholder":2362},[74,156305,156306],{"class":76,"line":1694},[74,156307,2363],{"emptyLinePlaceholder":2362},[74,156309,156310,156312,156315],{"class":76,"line":1711},[74,156311,36228],{"class":80},[74,156313,156314],{"class":1925}," show_menu",[74,156316,36234],{"class":84},[74,156318,156319,156321,156323,156326],{"class":76,"line":1716},[74,156320,35580],{"class":134},[74,156322,85],{"class":84},[74,156324,156325],{"class":190},"\"====== 学生管理系统 ======\"",[74,156327,91],{"class":84},[74,156329,156330,156332,156334,156337],{"class":76,"line":1721},[74,156331,35580],{"class":134},[74,156333,85],{"class":84},[74,156335,156336],{"class":190},"\"1. 添加学生\"",[74,156338,91],{"class":84},[74,156340,156341,156343,156345,156348],{"class":76,"line":1726},[74,156342,35580],{"class":134},[74,156344,85],{"class":84},[74,156346,156347],{"class":190},"\"2. 删除学生\"",[74,156349,91],{"class":84},[74,156351,156352,156354,156356,156359],{"class":76,"line":1740},[74,156353,35580],{"class":134},[74,156355,85],{"class":84},[74,156357,156358],{"class":190},"\"3. 修改学生\"",[74,156360,91],{"class":84},[74,156362,156363,156365,156367,156370],{"class":76,"line":1745},[74,156364,35580],{"class":134},[74,156366,85],{"class":84},[74,156368,156369],{"class":190},"\"4. 查询学生\"",[74,156371,91],{"class":84},[74,156373,156374,156376,156378,156381],{"class":76,"line":2540},[74,156375,35580],{"class":134},[74,156377,85],{"class":84},[74,156379,156380],{"class":190},"\"5. 显示所有学生\"",[74,156382,91],{"class":84},[74,156384,156385,156387,156389,156392],{"class":76,"line":2554},[74,156386,35580],{"class":134},[74,156388,85],{"class":84},[74,156390,156391],{"class":190},"\"0. 退出系统\"",[74,156393,91],{"class":84},[74,156395,156396],{"class":76,"line":2562},[74,156397,2363],{"emptyLinePlaceholder":2362},[74,156399,156400],{"class":76,"line":2567},[74,156401,2363],{"emptyLinePlaceholder":2362},[74,156403,156404,156406,156409],{"class":76,"line":2573},[74,156405,36228],{"class":80},[74,156407,156408],{"class":1925}," find_student",[74,156410,156411],{"class":84},"(students, student_id):\n",[74,156413,156414,156416,156419,156421],{"class":76,"line":2579},[74,156415,3164],{"class":80},[74,156417,156418],{"class":84}," student ",[74,156420,30324],{"class":80},[74,156422,156423],{"class":84}," students:\n",[74,156425,156426,156428,156431,156433,156435,156437],{"class":76,"line":2584},[74,156427,2460],{"class":80},[74,156429,156430],{"class":84}," student[",[74,156432,155728],{"class":190},[74,156434,4406],{"class":84},[74,156436,2912],{"class":80},[74,156438,156439],{"class":84}," student_id:\n",[74,156441,156442,156444],{"class":76,"line":12227},[74,156443,20011],{"class":80},[74,156445,156446],{"class":84}," student\n",[74,156448,156449,156451],{"class":76,"line":12251},[74,156450,4053],{"class":80},[74,156452,156453],{"class":134}," None\n",[74,156455,156456],{"class":76,"line":12256},[74,156457,2363],{"emptyLinePlaceholder":2362},[74,156459,156460],{"class":76,"line":12262},[74,156461,2363],{"emptyLinePlaceholder":2362},[74,156463,156464,156466,156469],{"class":76,"line":12289},[74,156465,36228],{"class":80},[74,156467,156468],{"class":1925}," input_int",[74,156470,156471],{"class":84},"(prompt):\n",[74,156473,156474,156476,156478],{"class":76,"line":12294},[74,156475,2213],{"class":80},[74,156477,99573],{"class":134},[74,156479,3702],{"class":84},[74,156481,156482,156485],{"class":76,"line":12300},[74,156483,156484],{"class":80},"        try",[74,156486,3702],{"class":84},[74,156488,156489,156491,156493,156495,156497],{"class":76,"line":12312},[74,156490,20011],{"class":80},[74,156492,2344],{"class":134},[74,156494,85],{"class":84},[74,156496,58102],{"class":134},[74,156498,156499],{"class":84},"(prompt))\n",[74,156501,156502,156505,156508],{"class":76,"line":12324},[74,156503,156504],{"class":80},"        except",[74,156506,156507],{"class":134}," ValueError",[74,156509,3702],{"class":84},[74,156511,156512,156514,156516,156519],{"class":76,"line":12336},[74,156513,38931],{"class":134},[74,156515,85],{"class":84},[74,156517,156518],{"class":190},"\"请输入整数\"",[74,156520,91],{"class":84},[74,156522,156523],{"class":76,"line":13995},[74,156524,2363],{"emptyLinePlaceholder":2362},[74,156526,156527],{"class":76,"line":14020},[74,156528,2363],{"emptyLinePlaceholder":2362},[74,156530,156531,156533,156536],{"class":76,"line":14043},[74,156532,36228],{"class":80},[74,156534,156535],{"class":1925}," input_float",[74,156537,156471],{"class":84},[74,156539,156540,156542,156544],{"class":76,"line":14067},[74,156541,2213],{"class":80},[74,156543,99573],{"class":134},[74,156545,3702],{"class":84},[74,156547,156548,156550],{"class":76,"line":14072},[74,156549,156484],{"class":80},[74,156551,3702],{"class":84},[74,156553,156554,156556,156558,156560,156562],{"class":76,"line":14077},[74,156555,20011],{"class":80},[74,156557,114078],{"class":134},[74,156559,85],{"class":84},[74,156561,58102],{"class":134},[74,156563,156499],{"class":84},[74,156565,156566,156568,156570],{"class":76,"line":14082},[74,156567,156504],{"class":80},[74,156569,156507],{"class":134},[74,156571,3702],{"class":84},[74,156573,156574,156576,156578,156581],{"class":76,"line":14091},[74,156575,38931],{"class":134},[74,156577,85],{"class":84},[74,156579,156580],{"class":190},"\"请输入数字\"",[74,156582,91],{"class":84},[74,156584,156585],{"class":76,"line":14096},[74,156586,2363],{"emptyLinePlaceholder":2362},[74,156588,156589],{"class":76,"line":14102},[74,156590,2363],{"emptyLinePlaceholder":2362},[74,156592,156593,156595,156598],{"class":76,"line":14123},[74,156594,36228],{"class":80},[74,156596,156597],{"class":1925}," add_student",[74,156599,156242],{"class":84},[74,156601,156602,156605,156607,156609,156611,156614],{"class":76,"line":14129},[74,156603,156604],{"class":84},"    student_id ",[74,156606,131],{"class":80},[74,156608,64886],{"class":134},[74,156610,85],{"class":84},[74,156612,156613],{"class":190},"\"请输入学号:\"",[74,156615,91],{"class":84},[74,156617,156618],{"class":76,"line":14143},[74,156619,2363],{"emptyLinePlaceholder":2362},[74,156621,156622,156624],{"class":76,"line":14149},[74,156623,3064],{"class":80},[74,156625,156626],{"class":84}," find_student(students, student_id):\n",[74,156628,156629,156631,156633,156636],{"class":76,"line":14176},[74,156630,36732],{"class":134},[74,156632,85],{"class":84},[74,156634,156635],{"class":190},"\"学号已存在\"",[74,156637,91],{"class":84},[74,156639,156640],{"class":76,"line":14185},[74,156641,156642],{"class":80},"        return\n",[74,156644,156645],{"class":76,"line":14191},[74,156646,2363],{"emptyLinePlaceholder":2362},[74,156648,156649,156652,156654,156656,156658,156661],{"class":76,"line":14199},[74,156650,156651],{"class":84},"    name ",[74,156653,131],{"class":80},[74,156655,64886],{"class":134},[74,156657,85],{"class":84},[74,156659,156660],{"class":190},"\"请输入姓名:\"",[74,156662,91],{"class":84},[74,156664,156665,156668,156670,156673,156676],{"class":76,"line":14204},[74,156666,156667],{"class":84},"    age ",[74,156669,131],{"class":80},[74,156671,156672],{"class":84}," input_int(",[74,156674,156675],{"class":190},"\"请输入年龄:\"",[74,156677,91],{"class":84},[74,156679,156680,156683,156685,156688,156691],{"class":76,"line":20883},[74,156681,156682],{"class":84},"    score ",[74,156684,131],{"class":80},[74,156686,156687],{"class":84}," input_float(",[74,156689,156690],{"class":190},"\"请输入成绩:\"",[74,156692,91],{"class":84},[74,156694,156695],{"class":76,"line":20889},[74,156696,2363],{"emptyLinePlaceholder":2362},[74,156698,156699],{"class":76,"line":20912},[74,156700,156701],{"class":84},"    students.append({\n",[74,156703,156704,156707],{"class":76,"line":20918},[74,156705,156706],{"class":190},"        \"student_id\"",[74,156708,156709],{"class":84},": student_id,\n",[74,156711,156712,156715],{"class":76,"line":20941},[74,156713,156714],{"class":190},"        \"name\"",[74,156716,156717],{"class":84},": name,\n",[74,156719,156720,156723],{"class":76,"line":20955},[74,156721,156722],{"class":190},"        \"age\"",[74,156724,156725],{"class":84},": age,\n",[74,156727,156728,156731],{"class":76,"line":20975},[74,156729,156730],{"class":190},"        \"score\"",[74,156732,156733],{"class":84},": score,\n",[74,156735,156736],{"class":76,"line":20981},[74,156737,37742],{"class":84},[74,156739,156740],{"class":76,"line":20992},[74,156741,156742],{"class":84},"    save_students(students)\n",[74,156744,156745,156747,156749,156752],{"class":76,"line":21015},[74,156746,35580],{"class":134},[74,156748,85],{"class":84},[74,156750,156751],{"class":190},"\"添加成功\"",[74,156753,91],{"class":84},[74,156755,156756],{"class":76,"line":21037},[74,156757,2363],{"emptyLinePlaceholder":2362},[74,156759,156760],{"class":76,"line":21042},[74,156761,2363],{"emptyLinePlaceholder":2362},[74,156763,156764,156766,156769],{"class":76,"line":21048},[74,156765,36228],{"class":80},[74,156767,156768],{"class":1925}," delete_student",[74,156770,156242],{"class":84},[74,156772,156773,156775,156777,156779,156781,156784],{"class":76,"line":21062},[74,156774,156604],{"class":84},[74,156776,131],{"class":80},[74,156778,64886],{"class":134},[74,156780,85],{"class":84},[74,156782,156783],{"class":190},"\"请输入要删除的学号:\"",[74,156785,91],{"class":84},[74,156787,156788,156791,156793],{"class":76,"line":21075},[74,156789,156790],{"class":84},"    student ",[74,156792,131],{"class":80},[74,156794,156795],{"class":84}," find_student(students, student_id)\n",[74,156797,156798],{"class":76,"line":21080},[74,156799,2363],{"emptyLinePlaceholder":2362},[74,156801,156802,156804,156806,156808,156810],{"class":76,"line":21094},[74,156803,3064],{"class":80},[74,156805,156418],{"class":84},[74,156807,43208],{"class":80},[74,156809,43214],{"class":134},[74,156811,3702],{"class":84},[74,156813,156814,156816,156818,156821],{"class":76,"line":21099},[74,156815,36732],{"class":134},[74,156817,85],{"class":84},[74,156819,156820],{"class":190},"\"学生不存在\"",[74,156822,91],{"class":84},[74,156824,156825],{"class":76,"line":21105},[74,156826,156642],{"class":80},[74,156828,156829],{"class":76,"line":21110},[74,156830,2363],{"emptyLinePlaceholder":2362},[74,156832,156833],{"class":76,"line":21124},[74,156834,156835],{"class":84},"    students.remove(student)\n",[74,156837,156838],{"class":76,"line":21129},[74,156839,156742],{"class":84},[74,156841,156842,156844,156846,156849],{"class":76,"line":21134},[74,156843,35580],{"class":134},[74,156845,85],{"class":84},[74,156847,156848],{"class":190},"\"删除成功\"",[74,156850,91],{"class":84},[74,156852,156853],{"class":76,"line":21148},[74,156854,2363],{"emptyLinePlaceholder":2362},[74,156856,156857],{"class":76,"line":21160},[74,156858,2363],{"emptyLinePlaceholder":2362},[74,156860,156861,156863,156866],{"class":76,"line":21165},[74,156862,36228],{"class":80},[74,156864,156865],{"class":1925}," update_student",[74,156867,156242],{"class":84},[74,156869,156870,156872,156874,156876,156878,156881],{"class":76,"line":21178},[74,156871,156604],{"class":84},[74,156873,131],{"class":80},[74,156875,64886],{"class":134},[74,156877,85],{"class":84},[74,156879,156880],{"class":190},"\"请输入要修改的学号:\"",[74,156882,91],{"class":84},[74,156884,156885,156887,156889],{"class":76,"line":21183},[74,156886,156790],{"class":84},[74,156888,131],{"class":80},[74,156890,156795],{"class":84},[74,156892,156893],{"class":76,"line":21188},[74,156894,2363],{"emptyLinePlaceholder":2362},[74,156896,156897,156899,156901,156903,156905],{"class":76,"line":21193},[74,156898,3064],{"class":80},[74,156900,156418],{"class":84},[74,156902,43208],{"class":80},[74,156904,43214],{"class":134},[74,156906,3702],{"class":84},[74,156908,156909,156911,156913,156915],{"class":76,"line":21206},[74,156910,36732],{"class":134},[74,156912,85],{"class":84},[74,156914,156820],{"class":190},[74,156916,91],{"class":84},[74,156918,156919],{"class":76,"line":21211},[74,156920,156642],{"class":80},[74,156922,156923],{"class":76,"line":36914},[74,156924,2363],{"emptyLinePlaceholder":2362},[74,156926,156927,156929,156931,156933,156935,156938],{"class":76,"line":36920},[74,156928,156651],{"class":84},[74,156930,131],{"class":80},[74,156932,64886],{"class":134},[74,156934,85],{"class":84},[74,156936,156937],{"class":190},"\"请输入新姓名:\"",[74,156939,91],{"class":84},[74,156941,156942,156944,156946,156948,156951],{"class":76,"line":36926},[74,156943,156667],{"class":84},[74,156945,131],{"class":80},[74,156947,156672],{"class":84},[74,156949,156950],{"class":190},"\"请输入新年龄:\"",[74,156952,91],{"class":84},[74,156954,156955,156957,156959,156961,156964],{"class":76,"line":36932},[74,156956,156682],{"class":84},[74,156958,131],{"class":80},[74,156960,156687],{"class":84},[74,156962,156963],{"class":190},"\"请输入新成绩:\"",[74,156965,91],{"class":84},[74,156967,156968],{"class":76,"line":36938},[74,156969,2363],{"emptyLinePlaceholder":2362},[74,156971,156972,156975,156977,156979,156981],{"class":76,"line":36949},[74,156973,156974],{"class":84},"    student[",[74,156976,66960],{"class":190},[74,156978,4406],{"class":84},[74,156980,131],{"class":80},[74,156982,154076],{"class":84},[74,156984,156985,156987,156989,156991,156993],{"class":76,"line":36955},[74,156986,156974],{"class":84},[74,156988,73405],{"class":190},[74,156990,4406],{"class":84},[74,156992,131],{"class":80},[74,156994,154088],{"class":84},[74,156996,156997,156999,157001,157003,157005],{"class":76,"line":36975},[74,156998,156974],{"class":84},[74,157000,155753],{"class":190},[74,157002,4406],{"class":84},[74,157004,131],{"class":80},[74,157006,1541],{"class":84},[74,157008,157009],{"class":76,"line":36981},[74,157010,2363],{"emptyLinePlaceholder":2362},[74,157012,157013],{"class":76,"line":36992},[74,157014,156742],{"class":84},[74,157016,157017,157019,157021,157024],{"class":76,"line":36998},[74,157018,35580],{"class":134},[74,157020,85],{"class":84},[74,157022,157023],{"class":190},"\"修改成功\"",[74,157025,91],{"class":84},[74,157027,157028],{"class":76,"line":37004},[74,157029,2363],{"emptyLinePlaceholder":2362},[74,157031,157032],{"class":76,"line":37010},[74,157033,2363],{"emptyLinePlaceholder":2362},[74,157035,157036,157038,157041],{"class":76,"line":37016},[74,157037,36228],{"class":80},[74,157039,157040],{"class":1925}," query_student",[74,157042,156242],{"class":84},[74,157044,157045,157047,157049,157051,157053,157056],{"class":76,"line":37022},[74,157046,156604],{"class":84},[74,157048,131],{"class":80},[74,157050,64886],{"class":134},[74,157052,85],{"class":84},[74,157054,157055],{"class":190},"\"请输入要查询的学号:\"",[74,157057,91],{"class":84},[74,157059,157060,157062,157064],{"class":76,"line":37028},[74,157061,156790],{"class":84},[74,157063,131],{"class":80},[74,157065,156795],{"class":84},[74,157067,157068],{"class":76,"line":37034},[74,157069,2363],{"emptyLinePlaceholder":2362},[74,157071,157072,157074,157076,157078,157080],{"class":76,"line":37054},[74,157073,3064],{"class":80},[74,157075,156418],{"class":84},[74,157077,43208],{"class":80},[74,157079,43214],{"class":134},[74,157081,3702],{"class":84},[74,157083,157084,157086,157088,157090],{"class":76,"line":37060},[74,157085,36732],{"class":134},[74,157087,85],{"class":84},[74,157089,156820],{"class":190},[74,157091,91],{"class":84},[74,157093,157094],{"class":76,"line":37076},[74,157095,156642],{"class":80},[74,157097,157098],{"class":76,"line":37082},[74,157099,2363],{"emptyLinePlaceholder":2362},[74,157101,157102],{"class":76,"line":37096},[74,157103,157104],{"class":84},"    print_student(student)\n",[74,157106,157107],{"class":76,"line":37102},[74,157108,2363],{"emptyLinePlaceholder":2362},[74,157110,157111],{"class":76,"line":37117},[74,157112,2363],{"emptyLinePlaceholder":2362},[74,157114,157115,157117,157120],{"class":76,"line":37123},[74,157116,36228],{"class":80},[74,157118,157119],{"class":1925}," print_student",[74,157121,157122],{"class":84},"(student):\n",[74,157124,157125,157127],{"class":76,"line":37132},[74,157126,35580],{"class":134},[74,157128,155720],{"class":84},[74,157130,157131,157134,157136,157138,157141,157144,157146,157149],{"class":76,"line":37138},[74,157132,157133],{"class":80},"        f",[74,157135,337],{"class":190},[74,157137,982],{"class":134},[74,157139,157140],{"class":84},"student[",[74,157142,157143],{"class":190},"'student_id'",[74,157145,1026],{"class":84},[74,157147,157148],{"class":134},"}\\t",[74,157150,29414],{"class":190},[74,157152,157153,157155,157157,157159,157161,157164,157166,157168],{"class":76,"line":37147},[74,157154,157133],{"class":80},[74,157156,337],{"class":190},[74,157158,982],{"class":134},[74,157160,157140],{"class":84},[74,157162,157163],{"class":190},"'name'",[74,157165,1026],{"class":84},[74,157167,157148],{"class":134},[74,157169,29414],{"class":190},[74,157171,157172,157174,157176,157178,157180,157183,157185,157187],{"class":76,"line":37153},[74,157173,157133],{"class":80},[74,157175,337],{"class":190},[74,157177,982],{"class":134},[74,157179,157140],{"class":84},[74,157181,157182],{"class":190},"'age'",[74,157184,1026],{"class":84},[74,157186,157148],{"class":134},[74,157188,29414],{"class":190},[74,157190,157191,157193,157195,157197,157199,157202,157204,157206],{"class":76,"line":37159},[74,157192,157133],{"class":80},[74,157194,337],{"class":190},[74,157196,982],{"class":134},[74,157198,157140],{"class":84},[74,157200,157201],{"class":190},"'score'",[74,157203,1026],{"class":84},[74,157205,1032],{"class":134},[74,157207,29414],{"class":190},[74,157209,157210],{"class":76,"line":37168},[74,157211,157212],{"class":84},"    )\n",[74,157214,157215],{"class":76,"line":37174},[74,157216,2363],{"emptyLinePlaceholder":2362},[74,157218,157219],{"class":76,"line":37185},[74,157220,2363],{"emptyLinePlaceholder":2362},[74,157222,157223,157225,157228],{"class":76,"line":37191},[74,157224,36228],{"class":80},[74,157226,157227],{"class":1925}," show_all_students",[74,157229,156242],{"class":84},[74,157231,157232,157234,157236],{"class":76,"line":37210},[74,157233,3064],{"class":80},[74,157235,43211],{"class":80},[74,157237,156423],{"class":84},[74,157239,157240,157242,157244,157247],{"class":76,"line":37216},[74,157241,36732],{"class":134},[74,157243,85],{"class":84},[74,157245,157246],{"class":190},"\"暂无学生\"",[74,157248,91],{"class":84},[74,157250,157251],{"class":76,"line":37227},[74,157252,156642],{"class":80},[74,157254,157255],{"class":76,"line":37233},[74,157256,2363],{"emptyLinePlaceholder":2362},[74,157258,157259,157261,157263,157266,157268,157271,157273,157276,157278,157281],{"class":76,"line":37253},[74,157260,35580],{"class":134},[74,157262,85],{"class":84},[74,157264,157265],{"class":190},"\"学号",[74,157267,1192],{"class":134},[74,157269,157270],{"class":190},"姓名",[74,157272,1192],{"class":134},[74,157274,157275],{"class":190},"年龄",[74,157277,1192],{"class":134},[74,157279,157280],{"class":190},"成绩\"",[74,157282,91],{"class":84},[74,157284,157285,157287,157289,157291],{"class":76,"line":37269},[74,157286,3164],{"class":80},[74,157288,156418],{"class":84},[74,157290,30324],{"class":80},[74,157292,156423],{"class":84},[74,157294,157295],{"class":76,"line":37275},[74,157296,157297],{"class":84},"        print_student(student)\n",[74,157299,157300],{"class":76,"line":37289},[74,157301,2363],{"emptyLinePlaceholder":2362},[74,157303,157304],{"class":76,"line":37295},[74,157305,2363],{"emptyLinePlaceholder":2362},[74,157307,157308,157310,157312],{"class":76,"line":37301},[74,157309,36228],{"class":80},[74,157311,1935],{"class":1925},[74,157313,36234],{"class":84},[74,157315,157316,157319,157321],{"class":76,"line":37312},[74,157317,157318],{"class":84},"    students ",[74,157320,131],{"class":80},[74,157322,157323],{"class":84}," load_students()\n",[74,157325,157326],{"class":76,"line":37318},[74,157327,2363],{"emptyLinePlaceholder":2362},[74,157329,157330,157332,157334],{"class":76,"line":37324},[74,157331,2213],{"class":80},[74,157333,99573],{"class":134},[74,157335,3702],{"class":84},[74,157337,157338],{"class":76,"line":37334},[74,157339,157340],{"class":84},"        show_menu()\n",[74,157342,157343,157346,157348,157350,157352,157355],{"class":76,"line":37340},[74,157344,157345],{"class":84},"        choice ",[74,157347,131],{"class":80},[74,157349,64886],{"class":134},[74,157351,85],{"class":84},[74,157353,157354],{"class":190},"\"请输入操作:\"",[74,157356,91],{"class":84},[74,157358,157359],{"class":76,"line":37351},[74,157360,2363],{"emptyLinePlaceholder":2362},[74,157362,157363,157365,157368,157370,157373],{"class":76,"line":37357},[74,157364,2460],{"class":80},[74,157366,157367],{"class":84}," choice ",[74,157369,2912],{"class":80},[74,157371,157372],{"class":190}," \"1\"",[74,157374,3702],{"class":84},[74,157376,157377],{"class":76,"line":37367},[74,157378,157379],{"class":84},"            add_student(students)\n",[74,157381,157382,157385,157387,157389,157392],{"class":76,"line":37372},[74,157383,157384],{"class":80},"        elif",[74,157386,157367],{"class":84},[74,157388,2912],{"class":80},[74,157390,157391],{"class":190}," \"2\"",[74,157393,3702],{"class":84},[74,157395,157396],{"class":76,"line":37378},[74,157397,157398],{"class":84},"            delete_student(students)\n",[74,157400,157401,157403,157405,157407,157410],{"class":76,"line":37427},[74,157402,157384],{"class":80},[74,157404,157367],{"class":84},[74,157406,2912],{"class":80},[74,157408,157409],{"class":190}," \"3\"",[74,157411,3702],{"class":84},[74,157413,157414],{"class":76,"line":37474},[74,157415,157416],{"class":84},"            update_student(students)\n",[74,157418,157419,157421,157423,157425,157428],{"class":76,"line":37479},[74,157420,157384],{"class":80},[74,157422,157367],{"class":84},[74,157424,2912],{"class":80},[74,157426,157427],{"class":190}," \"4\"",[74,157429,3702],{"class":84},[74,157431,157432],{"class":76,"line":37485},[74,157433,157434],{"class":84},"            query_student(students)\n",[74,157436,157437,157439,157441,157443,157446],{"class":76,"line":37504},[74,157438,157384],{"class":80},[74,157440,157367],{"class":84},[74,157442,2912],{"class":80},[74,157444,157445],{"class":190}," \"5\"",[74,157447,3702],{"class":84},[74,157449,157450],{"class":76,"line":37510},[74,157451,157452],{"class":84},"            show_all_students(students)\n",[74,157454,157455,157457,157459,157461,157464],{"class":76,"line":37530},[74,157456,157384],{"class":80},[74,157458,157367],{"class":84},[74,157460,2912],{"class":80},[74,157462,157463],{"class":190}," \"0\"",[74,157465,3702],{"class":84},[74,157467,157468,157470,157472,157475],{"class":76,"line":37536},[74,157469,38931],{"class":134},[74,157471,85],{"class":84},[74,157473,157474],{"class":190},"\"退出系统\"",[74,157476,91],{"class":84},[74,157478,157479],{"class":76,"line":37542},[74,157480,119379],{"class":80},[74,157482,157483,157485],{"class":76,"line":37552},[74,157484,2497],{"class":80},[74,157486,3702],{"class":84},[74,157488,157489,157491,157493,157496],{"class":76,"line":37557},[74,157490,38931],{"class":134},[74,157492,85],{"class":84},[74,157494,157495],{"class":190},"\"输入错误\"",[74,157497,91],{"class":84},[74,157499,157500],{"class":76,"line":37563},[74,157501,2363],{"emptyLinePlaceholder":2362},[74,157503,157504],{"class":76,"line":37579},[74,157505,2363],{"emptyLinePlaceholder":2362},[74,157507,157508,157510,157512,157514,157516],{"class":76,"line":37624},[74,157509,1493],{"class":80},[74,157511,35501],{"class":134},[74,157513,105840],{"class":80},[74,157515,105843],{"class":190},[74,157517,3702],{"class":84},[74,157519,157520],{"class":76,"line":37630},[74,157521,105850],{"class":84},[19,157523,157524],{},"这个项目串联了：",[27,157526,157527,157530,157533,157536,157539,157541],{},[30,157528,157529],{},"菜单循环。",[30,157531,157532],{},"函数封装。",[30,157534,157535],{},"列表字典。",[30,157537,157538],{},"JSON 读写。",[30,157540,156008],{},[30,157542,157543,32666],{},[71,157544,157545],{},"if __name__ == \"__main__\"",[14,157547,157549],{"id":157548},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,157551,157552],{},"可以进一步拆成两个类：",[27,157554,157555,157560],{},[30,157556,157557,157559],{},[71,157558,153849],{},"：表示单个学生。",[30,157561,157562,157564],{},[71,157563,155875],{},"：负责学生增删改查和文件保存。",[19,157566,157567],{},"示意代码：",[64,157569,157571],{"className":34659,"code":157570,"language":34661,"meta":69,"style":69},"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",[71,157572,157573,157583,157587,157591,157595,157603,157610,157616,157622,157628,157632,157640,157646,157656,157666,157676,157686,157690,157694,157700,157708,157716,157724,157732,157740,157748],{"__ignoreMap":69},[74,157574,157575,157577,157579,157581],{"class":76,"line":77},[74,157576,35018],{"class":80},[74,157578,155433],{"class":84},[74,157580,34673],{"class":80},[74,157582,155438],{"class":84},[74,157584,157585],{"class":76,"line":94},[74,157586,2363],{"emptyLinePlaceholder":2362},[74,157588,157589],{"class":76,"line":1141},[74,157590,2363],{"emptyLinePlaceholder":2362},[74,157592,157593],{"class":76,"line":1156},[74,157594,155451],{"class":1925},[74,157596,157597,157599,157601],{"class":76,"line":1162},[74,157598,18973],{"class":80},[74,157600,12177],{"class":1925},[74,157602,3702],{"class":84},[74,157604,157605,157608],{"class":76,"line":1176},[74,157606,157607],{"class":84},"    student_id: ",[74,157609,155467],{"class":134},[74,157611,157612,157614],{"class":76,"line":1182},[74,157613,155464],{"class":84},[74,157615,155467],{"class":134},[74,157617,157618,157620],{"class":76,"line":1273},[74,157619,155472],{"class":84},[74,157621,155475],{"class":134},[74,157623,157624,157626],{"class":76,"line":1279},[74,157625,155480],{"class":84},[74,157627,155483],{"class":134},[74,157629,157630],{"class":76,"line":1291},[74,157631,2363],{"emptyLinePlaceholder":2362},[74,157633,157634,157636,157638],{"class":76,"line":1574},[74,157635,35082],{"class":80},[74,157637,155631],{"class":1925},[74,157639,35088],{"class":84},[74,157641,157642,157644],{"class":76,"line":1579},[74,157643,19031],{"class":80},[74,157645,19851],{"class":84},[74,157647,157648,157650,157652,157654],{"class":76,"line":1585},[74,157649,155644],{"class":190},[74,157651,55718],{"class":84},[74,157653,35104],{"class":134},[74,157655,155651],{"class":84},[74,157657,157658,157660,157662,157664],{"class":76,"line":1590},[74,157659,155656],{"class":190},[74,157661,55718],{"class":84},[74,157663,35104],{"class":134},[74,157665,155663],{"class":84},[74,157667,157668,157670,157672,157674],{"class":76,"line":1604},[74,157669,155668],{"class":190},[74,157671,55718],{"class":84},[74,157673,35104],{"class":134},[74,157675,155675],{"class":84},[74,157677,157678,157680,157682,157684],{"class":76,"line":1609},[74,157679,155680],{"class":190},[74,157681,55718],{"class":84},[74,157683,35104],{"class":134},[74,157685,155687],{"class":84},[74,157687,157688],{"class":76,"line":1615},[74,157689,2492],{"class":84},[74,157691,157692],{"class":76,"line":1636},[74,157693,2363],{"emptyLinePlaceholder":2362},[74,157695,157696,157698],{"class":76,"line":1641},[74,157697,155295],{"class":1925},[74,157699,155298],{"class":134},[74,157701,157702,157704,157706],{"class":76,"line":1655},[74,157703,35082],{"class":80},[74,157705,155708],{"class":1925},[74,157707,155711],{"class":84},[74,157709,157710,157712,157714],{"class":76,"line":1660},[74,157711,19031],{"class":80},[74,157713,155315],{"class":134},[74,157715,155720],{"class":84},[74,157717,157718,157720,157722],{"class":76,"line":1689},[74,157719,155725],{"class":84},[74,157721,155728],{"class":190},[74,157723,92117],{"class":84},[74,157725,157726,157728,157730],{"class":76,"line":1694},[74,157727,155725],{"class":84},[74,157729,66960],{"class":190},[74,157731,92117],{"class":84},[74,157733,157734,157736,157738],{"class":76,"line":1711},[74,157735,155725],{"class":84},[74,157737,73405],{"class":190},[74,157739,92117],{"class":84},[74,157741,157742,157744,157746],{"class":76,"line":1716},[74,157743,155725],{"class":84},[74,157745,155753],{"class":190},[74,157747,92117],{"class":84},[74,157749,157750],{"class":76,"line":1721},[74,157751,42407],{"class":84},[19,157753,157754],{},"管理器示意：",[64,157756,157758],{"className":34659,"code":157757,"language":34661,"meta":69,"style":69},"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",[71,157759,157760,157769,157777,157788,157792,157802,157815,157826,157833,157839,157843,157852,157861,157867,157874],{"__ignoreMap":69},[74,157761,157762,157764,157767],{"class":76,"line":77},[74,157763,18973],{"class":80},[74,157765,157766],{"class":1925}," StudentManager",[74,157768,3702],{"class":84},[74,157770,157771,157773,157775],{"class":76,"line":94},[74,157772,35082],{"class":80},[74,157774,35085],{"class":134},[74,157776,35088],{"class":84},[74,157778,157779,157781,157784,157786],{"class":76,"line":1141},[74,157780,35126],{"class":134},[74,157782,157783],{"class":84},".students ",[74,157785,131],{"class":80},[74,157787,56119],{"class":84},[74,157789,157790],{"class":76,"line":1156},[74,157791,2363],{"emptyLinePlaceholder":2362},[74,157793,157794,157796,157799],{"class":76,"line":1162},[74,157795,35082],{"class":80},[74,157797,157798],{"class":1925}," find_by_id",[74,157800,157801],{"class":84},"(self, student_id):\n",[74,157803,157804,157806,157808,157810,157812],{"class":76,"line":1176},[74,157805,3366],{"class":80},[74,157807,156418],{"class":84},[74,157809,30324],{"class":80},[74,157811,43154],{"class":134},[74,157813,157814],{"class":84},".students:\n",[74,157816,157817,157819,157822,157824],{"class":76,"line":1182},[74,157818,4605],{"class":80},[74,157820,157821],{"class":84}," student.student_id ",[74,157823,2912],{"class":80},[74,157825,156439],{"class":84},[74,157827,157828,157831],{"class":76,"line":1273},[74,157829,157830],{"class":80},"                return",[74,157832,156446],{"class":84},[74,157834,157835,157837],{"class":76,"line":1279},[74,157836,19031],{"class":80},[74,157838,156453],{"class":134},[74,157840,157841],{"class":76,"line":1291},[74,157842,2363],{"emptyLinePlaceholder":2362},[74,157844,157845,157847,157849],{"class":76,"line":1574},[74,157846,35082],{"class":80},[74,157848,9488],{"class":1925},[74,157850,157851],{"class":84},"(self, student):\n",[74,157853,157854,157856,157858],{"class":76,"line":1579},[74,157855,2460],{"class":80},[74,157857,43154],{"class":134},[74,157859,157860],{"class":84},".find_by_id(student.student_id):\n",[74,157862,157863,157865],{"class":76,"line":1585},[74,157864,20011],{"class":80},[74,157866,130088],{"class":134},[74,157868,157869,157871],{"class":76,"line":1590},[74,157870,35126],{"class":134},[74,157872,157873],{"class":84},".students.append(student)\n",[74,157875,157876,157878],{"class":76,"line":1604},[74,157877,19031],{"class":80},[74,157879,157880],{"class":134}," True\n",[19,157882,157883],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,157885,157887],{"id":157886},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[44,157889,157891],{"id":157890},"_1251-数据结构","12.5.1 数据结构",[64,157893,157895],{"className":34659,"code":157894,"language":34661,"meta":69,"style":69},"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",[71,157896,157897,157905,157936,157966,157995,158024],{"__ignoreMap":69},[74,157898,157899,157901,157903],{"class":76,"line":77},[74,157900,152746],{"class":84},[74,157902,131],{"class":80},[74,157904,59728],{"class":84},[74,157906,157907,157909,157911,157913,157915,157917,157920,157922,157925,157927,157929,157931,157934],{"class":76,"line":94},[74,157908,152666],{"class":84},[74,157910,152278],{"class":190},[74,157912,55718],{"class":84},[74,157914,152889],{"class":190},[74,157916,16714],{"class":84},[74,157918,157919],{"class":190},"\"category\"",[74,157921,55718],{"class":84},[74,157923,157924],{"class":190},"\"手机\"",[74,157926,16714],{"class":84},[74,157928,88365],{"class":190},[74,157930,55718],{"class":84},[74,157932,157933],{"class":134},"12000",[74,157935,4893],{"class":84},[74,157937,157938,157940,157942,157944,157946,157948,157950,157952,157955,157957,157959,157961,157964],{"class":76,"line":1141},[74,157939,152666],{"class":84},[74,157941,152278],{"class":190},[74,157943,55718],{"class":84},[74,157945,152889],{"class":190},[74,157947,16714],{"class":84},[74,157949,157919],{"class":190},[74,157951,55718],{"class":84},[74,157953,157954],{"class":190},"\"电脑\"",[74,157956,16714],{"class":84},[74,157958,88365],{"class":190},[74,157960,55718],{"class":84},[74,157962,157963],{"class":134},"18000",[74,157965,4893],{"class":84},[74,157967,157968,157970,157972,157974,157976,157978,157980,157982,157984,157986,157988,157990,157993],{"class":76,"line":1156},[74,157969,152666],{"class":84},[74,157971,152278],{"class":190},[74,157973,55718],{"class":84},[74,157975,152910],{"class":190},[74,157977,16714],{"class":84},[74,157979,157919],{"class":190},[74,157981,55718],{"class":84},[74,157983,157924],{"class":190},[74,157985,16714],{"class":84},[74,157987,88365],{"class":190},[74,157989,55718],{"class":84},[74,157991,157992],{"class":134},"15000",[74,157994,4893],{"class":84},[74,157996,157997,157999,158001,158003,158005,158007,158009,158011,158013,158015,158017,158019,158022],{"class":76,"line":1162},[74,157998,152666],{"class":84},[74,158000,152278],{"class":190},[74,158002,55718],{"class":84},[74,158004,152910],{"class":190},[74,158006,16714],{"class":84},[74,158008,157919],{"class":190},[74,158010,55718],{"class":84},[74,158012,157954],{"class":190},[74,158014,16714],{"class":84},[74,158016,88365],{"class":190},[74,158018,55718],{"class":84},[74,158020,158021],{"class":134},"16000",[74,158023,4893],{"class":84},[74,158025,158026],{"class":76,"line":1176},[74,158027,37527],{"class":84},[44,158029,158031],{"id":158030},"_1252-按日期统计","12.5.2 按日期统计",[64,158033,158035],{"className":34659,"code":158034,"language":34661,"meta":69,"style":69},"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",[71,158036,158037,158046,158050,158061,158075,158088,158107,158111],{"__ignoreMap":69},[74,158038,158039,158042,158044],{"class":76,"line":77},[74,158040,158041],{"class":84},"daily_total ",[74,158043,131],{"class":80},[74,158045,92149],{"class":84},[74,158047,158048],{"class":76,"line":94},[74,158049,2363],{"emptyLinePlaceholder":2362},[74,158051,158052,158054,158056,158058],{"class":76,"line":1141},[74,158053,2988],{"class":80},[74,158055,152490],{"class":84},[74,158057,30324],{"class":80},[74,158059,158060],{"class":84}," sales:\n",[74,158062,158063,158066,158068,158071,158073],{"class":76,"line":1156},[74,158064,158065],{"class":84},"    date ",[74,158067,131],{"class":80},[74,158069,158070],{"class":84}," item[",[74,158072,152278],{"class":190},[74,158074,37527],{"class":84},[74,158076,158077,158080,158082,158084,158086],{"class":76,"line":1162},[74,158078,158079],{"class":84},"    amount ",[74,158081,131],{"class":80},[74,158083,158070],{"class":84},[74,158085,88365],{"class":190},[74,158087,37527],{"class":84},[74,158089,158090,158093,158095,158098,158100,158102,158104],{"class":76,"line":1176},[74,158091,158092],{"class":84},"    daily_total[date] ",[74,158094,131],{"class":80},[74,158096,158097],{"class":84}," daily_total.get(date, ",[74,158099,277],{"class":134},[74,158101,17993],{"class":84},[74,158103,567],{"class":80},[74,158105,158106],{"class":84}," amount\n",[74,158108,158109],{"class":76,"line":1182},[74,158110,2363],{"emptyLinePlaceholder":2362},[74,158112,158113,158115],{"class":76,"line":1273},[74,158114,34696],{"class":134},[74,158116,158117],{"class":84},"(daily_total)\n",[44,158119,158121],{"id":158120},"_1253-按类别统计","12.5.3 按类别统计",[64,158123,158125],{"className":34659,"code":158124,"language":34661,"meta":69,"style":69},"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",[71,158126,158127,158136,158140,158150,158163,158175,158193,158197],{"__ignoreMap":69},[74,158128,158129,158132,158134],{"class":76,"line":77},[74,158130,158131],{"class":84},"category_total ",[74,158133,131],{"class":80},[74,158135,92149],{"class":84},[74,158137,158138],{"class":76,"line":94},[74,158139,2363],{"emptyLinePlaceholder":2362},[74,158141,158142,158144,158146,158148],{"class":76,"line":1141},[74,158143,2988],{"class":80},[74,158145,152490],{"class":84},[74,158147,30324],{"class":80},[74,158149,158060],{"class":84},[74,158151,158152,158155,158157,158159,158161],{"class":76,"line":1156},[74,158153,158154],{"class":84},"    category ",[74,158156,131],{"class":80},[74,158158,158070],{"class":84},[74,158160,157919],{"class":190},[74,158162,37527],{"class":84},[74,158164,158165,158167,158169,158171,158173],{"class":76,"line":1162},[74,158166,158079],{"class":84},[74,158168,131],{"class":80},[74,158170,158070],{"class":84},[74,158172,88365],{"class":190},[74,158174,37527],{"class":84},[74,158176,158177,158180,158182,158185,158187,158189,158191],{"class":76,"line":1176},[74,158178,158179],{"class":84},"    category_total[category] ",[74,158181,131],{"class":80},[74,158183,158184],{"class":84}," category_total.get(category, ",[74,158186,277],{"class":134},[74,158188,17993],{"class":84},[74,158190,567],{"class":80},[74,158192,158106],{"class":84},[74,158194,158195],{"class":76,"line":1182},[74,158196,2363],{"emptyLinePlaceholder":2362},[74,158198,158199,158201],{"class":76,"line":1273},[74,158200,34696],{"class":134},[74,158202,158203],{"class":84},"(category_total)\n",[44,158205,158207],{"id":158206},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[64,158209,158211],{"className":34659,"code":158210,"language":34661,"meta":69,"style":69},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[71,158212,158213,158238],{"__ignoreMap":69},[74,158214,158215,158218,158220,158222,158225,158228,158231,158234,158236],{"class":76,"line":77},[74,158216,158217],{"class":84},"top_date, top_amount ",[74,158219,131],{"class":80},[74,158221,10230],{"class":134},[74,158223,158224],{"class":84},"(daily_total.items(), ",[74,158226,158227],{"class":9495},"key",[74,158229,158230],{"class":80},"=lambda",[74,158232,158233],{"class":84}," item: item[",[74,158235,303],{"class":134},[74,158237,4620],{"class":84},[74,158239,158240,158242],{"class":76,"line":94},[74,158241,34696],{"class":134},[74,158243,158244],{"class":84},"(top_date, top_amount)\n",[14,158246,158248],{"id":158247},"_126-绘制柱状图","12.6 绘制柱状图",[64,158250,158252],{"className":34659,"code":158251,"language":34661,"meta":69,"style":69},"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",[71,158253,158254,158268,158279,158283,158291,158303,158315,158326,158330,158334,158344,158355,158369,158374,158391,158408,158424,158428],{"__ignoreMap":69},[74,158255,158256,158258,158260,158262,158264,158266],{"class":76,"line":77},[74,158257,35018],{"class":80},[74,158259,151660],{"class":84},[74,158261,34673],{"class":80},[74,158263,151665],{"class":84},[74,158265,35664],{"class":80},[74,158267,151670],{"class":84},[74,158269,158270,158272,158274,158276],{"class":76,"line":94},[74,158271,35018],{"class":80},[74,158273,151519],{"class":84},[74,158275,34673],{"class":80},[74,158277,158278],{"class":84}," Bar\n",[74,158280,158281],{"class":76,"line":1141},[74,158282,2363],{"emptyLinePlaceholder":2362},[74,158284,158285,158287,158289],{"class":76,"line":1156},[74,158286,158131],{"class":84},[74,158288,131],{"class":80},[74,158290,19851],{"class":84},[74,158292,158293,158296,158298,158301],{"class":76,"line":1162},[74,158294,158295],{"class":190},"    \"手机\"",[74,158297,55718],{"class":84},[74,158299,158300],{"class":134},"27000",[74,158302,35747],{"class":84},[74,158304,158305,158308,158310,158313],{"class":76,"line":1176},[74,158306,158307],{"class":190},"    \"电脑\"",[74,158309,55718],{"class":84},[74,158311,158312],{"class":134},"34000",[74,158314,35747],{"class":84},[74,158316,158317,158320,158322,158324],{"class":76,"line":1182},[74,158318,158319],{"class":190},"    \"耳机\"",[74,158321,55718],{"class":84},[74,158323,128680],{"class":134},[74,158325,35747],{"class":84},[74,158327,158328],{"class":76,"line":1273},[74,158329,1527],{"class":84},[74,158331,158332],{"class":76,"line":1279},[74,158333,2363],{"emptyLinePlaceholder":2362},[74,158335,158336,158339,158341],{"class":76,"line":1291},[74,158337,158338],{"class":84},"bar ",[74,158340,131],{"class":80},[74,158342,158343],{"class":84}," Bar()\n",[74,158345,158346,158349,158352],{"class":76,"line":1574},[74,158347,158348],{"class":84},"bar.add_xaxis(",[74,158350,158351],{"class":134},"list",[74,158353,158354],{"class":84},"(category_total.keys()))\n",[74,158356,158357,158360,158362,158364,158366],{"class":76,"line":1579},[74,158358,158359],{"class":84},"bar.add_yaxis(",[74,158361,151576],{"class":190},[74,158363,16714],{"class":84},[74,158365,158351],{"class":134},[74,158367,158368],{"class":84},"(category_total.values()))\n",[74,158370,158371],{"class":76,"line":1585},[74,158372,158373],{"class":84},"bar.set_global_opts(\n",[74,158375,158376,158378,158380,158382,158384,158386,158389],{"class":76,"line":1590},[74,158377,151754],{"class":9495},[74,158379,131],{"class":80},[74,158381,151759],{"class":84},[74,158383,55688],{"class":9495},[74,158385,131],{"class":80},[74,158387,158388],{"class":190},"\"品类销售额\"",[74,158390,42328],{"class":84},[74,158392,158393,158395,158397,158399,158401,158403,158406],{"class":76,"line":1604},[74,158394,151773],{"class":9495},[74,158396,131],{"class":80},[74,158398,151778],{"class":84},[74,158400,84091],{"class":9495},[74,158402,131],{"class":80},[74,158404,158405],{"class":190},"\"品类\"",[74,158407,42328],{"class":84},[74,158409,158410,158412,158414,158416,158418,158420,158422],{"class":76,"line":1609},[74,158411,151792],{"class":9495},[74,158413,131],{"class":80},[74,158415,151778],{"class":84},[74,158417,84091],{"class":9495},[74,158419,131],{"class":80},[74,158421,151576],{"class":190},[74,158423,42328],{"class":84},[74,158425,158426],{"class":76,"line":1615},[74,158427,91],{"class":84},[74,158429,158430,158433,158436],{"class":76,"line":1636},[74,158431,158432],{"class":84},"bar.render(",[74,158434,158435],{"class":190},"\"category_sales.html\"",[74,158437,91],{"class":84},[14,158439,158441],{"id":158440},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,158443,158444],{},"时间线适合展示不同日期、月份、年份的数据变化。",[64,158446,158448],{"className":34659,"code":158447,"language":34661,"meta":69,"style":69},"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",[71,158449,158450,158464,158475,158479,158487,158511,158534,158559,158563,158567,158577,158581,158592,158601,158611,158625,158656,158661,158665],{"__ignoreMap":69},[74,158451,158452,158454,158456,158458,158460,158462],{"class":76,"line":77},[74,158453,35018],{"class":80},[74,158455,151660],{"class":84},[74,158457,34673],{"class":80},[74,158459,151665],{"class":84},[74,158461,35664],{"class":80},[74,158463,151670],{"class":84},[74,158465,158466,158468,158470,158472],{"class":76,"line":94},[74,158467,35018],{"class":80},[74,158469,151519],{"class":84},[74,158471,34673],{"class":80},[74,158473,158474],{"class":84}," Bar, Timeline\n",[74,158476,158477],{"class":76,"line":1141},[74,158478,2363],{"emptyLinePlaceholder":2362},[74,158480,158481,158483,158485],{"class":76,"line":1156},[74,158482,105939],{"class":84},[74,158484,131],{"class":80},[74,158486,19851],{"class":84},[74,158488,158489,158492,158495,158497,158499,158501,158503,158505,158507,158509],{"class":76,"line":1162},[74,158490,158491],{"class":190},"    \"2024-10-01\"",[74,158493,158494],{"class":84},": {",[74,158496,157924],{"class":190},[74,158498,55718],{"class":84},[74,158500,157933],{"class":134},[74,158502,16714],{"class":84},[74,158504,157954],{"class":190},[74,158506,55718],{"class":84},[74,158508,157963],{"class":134},[74,158510,4893],{"class":84},[74,158512,158513,158516,158518,158520,158522,158524,158526,158528,158530,158532],{"class":76,"line":1176},[74,158514,158515],{"class":190},"    \"2024-10-02\"",[74,158517,158494],{"class":84},[74,158519,157924],{"class":190},[74,158521,55718],{"class":84},[74,158523,157992],{"class":134},[74,158525,16714],{"class":84},[74,158527,157954],{"class":190},[74,158529,55718],{"class":84},[74,158531,158021],{"class":134},[74,158533,4893],{"class":84},[74,158535,158536,158539,158541,158543,158545,158548,158550,158552,158554,158557],{"class":76,"line":1182},[74,158537,158538],{"class":190},"    \"2024-10-03\"",[74,158540,158494],{"class":84},[74,158542,157924],{"class":190},[74,158544,55718],{"class":84},[74,158546,158547],{"class":134},"17000",[74,158549,16714],{"class":84},[74,158551,157954],{"class":190},[74,158553,55718],{"class":84},[74,158555,158556],{"class":134},"19000",[74,158558,4893],{"class":84},[74,158560,158561],{"class":76,"line":1273},[74,158562,1527],{"class":84},[74,158564,158565],{"class":76,"line":1279},[74,158566,2363],{"emptyLinePlaceholder":2362},[74,158568,158569,158572,158574],{"class":76,"line":1291},[74,158570,158571],{"class":84},"timeline ",[74,158573,131],{"class":80},[74,158575,158576],{"class":84}," Timeline()\n",[74,158578,158579],{"class":76,"line":1574},[74,158580,2363],{"emptyLinePlaceholder":2362},[74,158582,158583,158585,158588,158590],{"class":76,"line":1579},[74,158584,2988],{"class":80},[74,158586,158587],{"class":84}," date, category_data ",[74,158589,30324],{"class":80},[74,158591,153429],{"class":84},[74,158593,158594,158597,158599],{"class":76,"line":1585},[74,158595,158596],{"class":84},"    bar ",[74,158598,131],{"class":80},[74,158600,158343],{"class":84},[74,158602,158603,158606,158608],{"class":76,"line":1590},[74,158604,158605],{"class":84},"    bar.add_xaxis(",[74,158607,158351],{"class":134},[74,158609,158610],{"class":84},"(category_data.keys()))\n",[74,158612,158613,158616,158618,158620,158622],{"class":76,"line":1604},[74,158614,158615],{"class":84},"    bar.add_yaxis(",[74,158617,151576],{"class":190},[74,158619,16714],{"class":84},[74,158621,158351],{"class":134},[74,158623,158624],{"class":84},"(category_data.values()))\n",[74,158626,158627,158630,158633,158635,158637,158639,158641,158643,158645,158647,158649,158651,158654],{"class":76,"line":1609},[74,158628,158629],{"class":84},"    bar.set_global_opts(",[74,158631,158632],{"class":9495},"title_opts",[74,158634,131],{"class":80},[74,158636,151759],{"class":84},[74,158638,55688],{"class":9495},[74,158640,131],{"class":80},[74,158642,138],{"class":80},[74,158644,337],{"class":190},[74,158646,982],{"class":134},[74,158648,78207],{"class":84},[74,158650,1032],{"class":134},[74,158652,158653],{"class":190},"销售额\"",[74,158655,34778],{"class":84},[74,158657,158658],{"class":76,"line":1615},[74,158659,158660],{"class":84},"    timeline.add(bar, date)\n",[74,158662,158663],{"class":76,"line":1636},[74,158664,2363],{"emptyLinePlaceholder":2362},[74,158666,158667,158670,158673],{"class":76,"line":1641},[74,158668,158669],{"class":84},"timeline.render(",[74,158671,158672],{"class":190},"\"timeline_sales.html\"",[74,158674,91],{"class":84},[14,158676,158678],{"id":158677},"_128-绘制地图","12.8 绘制地图",[19,158680,158681],{},"地图适合展示地区数据。",[64,158683,158685],{"className":34659,"code":158684,"language":34661,"meta":69,"style":69},"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",[71,158686,158687,158701,158712,158716,158724,158737,158749,158762,158775,158779,158783,158793,158808,158813,158830,158849,158853],{"__ignoreMap":69},[74,158688,158689,158691,158693,158695,158697,158699],{"class":76,"line":77},[74,158690,35018],{"class":80},[74,158692,151660],{"class":84},[74,158694,34673],{"class":80},[74,158696,151665],{"class":84},[74,158698,35664],{"class":80},[74,158700,151670],{"class":84},[74,158702,158703,158705,158707,158709],{"class":76,"line":94},[74,158704,35018],{"class":80},[74,158706,151519],{"class":84},[74,158708,34673],{"class":80},[74,158710,158711],{"class":84}," Map\n",[74,158713,158714],{"class":76,"line":1141},[74,158715,2363],{"emptyLinePlaceholder":2362},[74,158717,158718,158720,158722],{"class":76,"line":1156},[74,158719,105939],{"class":84},[74,158721,131],{"class":80},[74,158723,59728],{"class":84},[74,158725,158726,158729,158731,158733,158735],{"class":76,"line":1162},[74,158727,158728],{"class":84},"    (",[74,158730,73550],{"class":190},[74,158732,16714],{"class":84},[74,158734,903],{"class":134},[74,158736,42328],{"class":84},[74,158738,158739,158741,158743,158745,158747],{"class":76,"line":1176},[74,158740,158728],{"class":84},[74,158742,73570],{"class":190},[74,158744,16714],{"class":84},[74,158746,151593],{"class":134},[74,158748,42328],{"class":84},[74,158750,158751,158753,158756,158758,158760],{"class":76,"line":1182},[74,158752,158728],{"class":84},[74,158754,158755],{"class":190},"\"广东\"",[74,158757,16714],{"class":84},[74,158759,1684],{"class":134},[74,158761,42328],{"class":84},[74,158763,158764,158766,158769,158771,158773],{"class":76,"line":1273},[74,158765,158728],{"class":84},[74,158767,158768],{"class":190},"\"浙江\"",[74,158770,16714],{"class":84},[74,158772,151598],{"class":134},[74,158774,42328],{"class":84},[74,158776,158777],{"class":76,"line":1279},[74,158778,37527],{"class":84},[74,158780,158781],{"class":76,"line":1291},[74,158782,2363],{"emptyLinePlaceholder":2362},[74,158784,158785,158788,158790],{"class":76,"line":1574},[74,158786,158787],{"class":84},"map_chart ",[74,158789,131],{"class":80},[74,158791,158792],{"class":84}," Map()\n",[74,158794,158795,158798,158800,158803,158806],{"class":76,"line":1579},[74,158796,158797],{"class":84},"map_chart.add(",[74,158799,151576],{"class":190},[74,158801,158802],{"class":84},", data, ",[74,158804,158805],{"class":190},"\"china\"",[74,158807,91],{"class":84},[74,158809,158810],{"class":76,"line":1585},[74,158811,158812],{"class":84},"map_chart.set_global_opts(\n",[74,158814,158815,158817,158819,158821,158823,158825,158828],{"class":76,"line":1590},[74,158816,151754],{"class":9495},[74,158818,131],{"class":80},[74,158820,151759],{"class":84},[74,158822,55688],{"class":9495},[74,158824,131],{"class":80},[74,158826,158827],{"class":190},"\"地区销售额\"",[74,158829,42328],{"class":84},[74,158831,158832,158835,158837,158840,158843,158845,158847],{"class":76,"line":1604},[74,158833,158834],{"class":9495},"    visualmap_opts",[74,158836,131],{"class":80},[74,158838,158839],{"class":84},"opts.VisualMapOpts(",[74,158841,158842],{"class":9495},"max_",[74,158844,131],{"class":80},[74,158846,1684],{"class":134},[74,158848,42328],{"class":84},[74,158850,158851],{"class":76,"line":1609},[74,158852,91],{"class":84},[74,158854,158855,158858,158861],{"class":76,"line":1615},[74,158856,158857],{"class":84},"map_chart.render(",[74,158859,158860],{"class":190},"\"map_sales.html\"",[74,158862,91],{"class":84},[19,158864,158865],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,158867,158869],{"id":158868},"_129-项目拆分建议","12.9 项目拆分建议",[19,158871,158872],{},"当代码超过一个文件时，可以这样组织：",[64,158874,158877],{"className":158875,"code":158876,"language":9466,"meta":69},[9464],"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",[71,158878,158876],{"__ignoreMap":69},[19,158880,158881],{},"职责：",[27,158883,158884,158890,158896,158902],{},[30,158885,158886,158889],{},[71,158887,158888],{},"main.py","：程序入口。",[30,158891,158892,158895],{},[71,158893,158894],{},"file_utils.py","：读写 JSON。",[30,158897,158898,158901],{},[71,158899,158900],{},"sales_service.py","：统计销售数据。",[30,158903,158904,158907],{},[71,158905,158906],{},"chart_builder.py","：生成图表。",[14,158909,158911],{"id":158910},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,158913,158914],{},"语法基础：",[27,158916,158917,158920,158923,158926],{},[30,158918,158919],{},"会写变量、注释、输入输出。",[30,158921,158922],{},"会使用 int、float、str、bool。",[30,158924,158925],{},"会做类型转换。",[30,158927,158928],{},"会使用 f-string 格式化输出。",[19,158930,158931],{},"流程控制：",[27,158933,158934,158940,158946,158954],{},[30,158935,158936,158937,32666],{},"会写 ",[71,158938,158939],{},"if elif else",[30,158941,158936,158942,105299,158944,32666],{},[71,158943,112944],{},[71,158945,2988],{},[30,158947,158948,158949,105299,158951,32666],{},"理解 ",[71,158950,2015],{},[71,158952,158953],{},"continue",[30,158955,158956],{},"能写嵌套循环。",[19,158958,158959],{},"函数：",[27,158961,158962,158965,158968,158971],{},[30,158963,158964],{},"会定义和调用函数。",[30,158966,158967],{},"理解参数和返回值。",[30,158969,158970],{},"知道局部变量和全局变量。",[30,158972,158973],{},"会使用默认参数、关键字参数、不定长参数。",[19,158975,158976],{},"容器：",[27,158978,158979,158982,158985,158988,158991],{},[30,158980,158981],{},"会使用列表增删改查。",[30,158983,158984],{},"会遍历列表、字典。",[30,158986,158987],{},"会使用切片。",[30,158989,158990],{},"会用集合去重。",[30,158992,158993],{},"会处理列表嵌套字典。",[19,158995,158996],{},"文件和模块：",[27,158998,158999,159002,159005,159008,159011],{},[30,159000,159001],{},"会读写文本文件。",[30,159003,159004],{},"会读写 JSON。",[30,159006,159007],{},"会捕获常见异常。",[30,159009,159010],{},"会导入模块和第三方包。",[30,159012,159013],{},"会创建简单包结构。",[19,159015,159016],{},"项目能力：",[27,159018,159019,159022,159025,159028,159031],{},[30,159020,159021],{},"能把代码拆成函数。",[30,159023,159024],{},"能把数据保存到文件。",[30,159026,159027],{},"能处理用户输入错误。",[30,159029,159030],{},"能写一个完整菜单程序。",[30,159032,159033],{},"能用 pyecharts 生成图表。",[14,159035,159037],{"id":159036},"_1211-推荐练习顺序","12.11 推荐练习顺序",[27,159039,159040,159043,159046,159049,159052,159055,159058,159061],{},[30,159041,159042],{},"猜数字游戏。",[30,159044,159045],{},"ATM 菜单程序。",[30,159047,159048],{},"学生成绩统计。",[30,159050,159051],{},"学生管理系统函数版。",[30,159053,159054],{},"学生管理系统文件持久化版。",[30,159056,159057],{},"学生管理系统面向对象版。",[30,159059,159060],{},"销售数据统计。",[30,159062,159063],{},"销售数据可视化。",[14,159065,159067],{"id":159066},"_1212-常见学习误区","12.12 常见学习误区",[27,159069,159070,159073,159076,159079,159082,159085,159088],{},[30,159071,159072],{},"只看视频不敲代码。",[30,159074,159075],{},"一报错就复制错误去搜，不先读报错位置。",[30,159077,159078],{},"变量名随便写，后续自己看不懂。",[30,159080,159081],{},"所有代码都写在一个文件一个函数里。",[30,159083,159084],{},"不保存练习代码，复习时没有材料。",[30,159086,159087],{},"还没掌握列表字典就急着学框架。",[30,159089,159090],{},"不会读官方文档，只依赖教程。",[14,159092,159094],{"id":159093},"_1213-如何读报错","12.13 如何读报错",[19,159096,159097],{},"报错通常从下往上看最后几行。",[19,159099,19414],{},[64,159101,159104],{"className":159102,"code":159103,"language":9466,"meta":69},[9464],"ValueError: invalid literal for int() with base 10: 'abc'\n",[71,159105,159103],{"__ignoreMap":69},[19,159107,28880],{},[27,159109,159110,159116,159126],{},[30,159111,159112,159113,32666],{},"异常类型是 ",[71,159114,159115],{},"ValueError",[30,159117,111626,159118,159121,159122,159125],{},[71,159119,159120],{},"int()"," 无法把 ",[71,159123,159124],{},"'abc'"," 转成整数。",[30,159127,159128],{},"应该检查输入内容或增加异常处理。",[19,159130,159131],{},"再看文件名和行号：",[64,159133,159136],{"className":159134,"code":159135,"language":9466,"meta":69},[9464],"File \"main.py\", line 10, in \u003Cmodule>\n",[71,159137,159135],{"__ignoreMap":69},[19,159139,159140,159141,159143],{},"表示错误发生在 ",[71,159142,158888],{}," 第 10 行。",[14,159145,159147],{"id":159146},"_1214-后续学习方向","12.14 后续学习方向",[19,159149,159150],{},"Python 基础完成后，可以按兴趣选择方向：",[27,159152,159153,159165,159174,159186,159197,159206,159216],{},[30,159154,159155,159156,298,159159,298,159162,32666],{},"自动化办公：",[71,159157,159158],{},"openpyxl",[71,159160,159161],{},"python-docx",[71,159163,159164],{},"pdfplumber",[30,159166,159167,159168,298,159170,298,159172,32666],{},"数据分析：",[71,159169,104907],{},[71,159171,150466],{},[71,159173,150474],{},[30,159175,159176,159177,298,159180,298,159183,32666],{},"Web 后端：",[71,159178,159179],{},"Flask",[71,159181,159182],{},"FastAPI",[71,159184,159185],{},"Django",[30,159187,159188,159189,298,159191,298,159194,32666],{},"爬虫：",[71,159190,150451],{},[71,159192,159193],{},"BeautifulSoup",[71,159195,159196],{},"Scrapy",[30,159198,159199,159200,298,159202,159205],{},"测试开发：",[71,159201,150498],{},[71,159203,159204],{},"selenium","、接口测试。",[30,159207,159208,159209,298,159211,298,159213,32666],{},"人工智能：",[71,159210,104907],{},[71,159212,150466],{},[71,159214,159215],{},"pytorch",[30,159217,159218,159219,298,159221,298,159224,32666],{},"运维脚本：",[71,159220,150067],{},[71,159222,159223],{},"subprocess",[71,159225,159226],{},"paramiko",[19,159228,159229],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,159231,159233],{"id":159232},"_1215-结课练习","12.15 结课练习",[27,159235,159236,159239,159242,159245,159248,159251,159254,159257],{},[30,159237,159238],{},"完成函数版学生管理系统。",[30,159240,159241],{},"给学生管理系统增加 JSON 持久化。",[30,159243,159244],{},"给学生管理系统增加异常处理。",[30,159246,159247],{},"把学生管理系统改成面向对象版。",[30,159249,159250],{},"使用 pyecharts 绘制学生成绩柱状图。",[30,159252,159253],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[30,159255,159256],{},"按品类统计销售额并绘制柱状图。",[30,159258,159259],{},"写一份自己的 Python 学习路线图。",[5090,159261,159262],{},"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":69,"searchDepth":94,"depth":94,"links":159264},[159265,159266,159269,159270,159271,159277,159278,159279,159280,159281,159282,159283,159284,159285,159286],{"id":155981,"depth":94,"text":155982},{"id":156031,"depth":94,"text":156032,"children":159267},[159268],{"id":156035,"depth":1141,"text":156036},{"id":156074,"depth":94,"text":156075},{"id":157548,"depth":94,"text":157549},{"id":157886,"depth":94,"text":157887,"children":159272},[159273,159274,159275,159276],{"id":157890,"depth":1141,"text":157891},{"id":158030,"depth":1141,"text":158031},{"id":158120,"depth":1141,"text":158121},{"id":158206,"depth":1141,"text":158207},{"id":158247,"depth":94,"text":158248},{"id":158440,"depth":94,"text":158441},{"id":158677,"depth":94,"text":158678},{"id":158868,"depth":94,"text":158869},{"id":158910,"depth":94,"text":158911},{"id":159036,"depth":94,"text":159037},{"id":159066,"depth":94,"text":159067},{"id":159093,"depth":94,"text":159094},{"id":159146,"depth":94,"text":159147},{"id":159232,"depth":94,"text":159233},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":155973,"description":27656},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":159293,"title":159294,"body":159295,"description":27656,"extension":5121,"meta":161764,"navigation":2362,"path":161765,"seo":161766,"stem":161767,"__hash__":161768},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":159296,"toc":161739},[159297,159300,159304,159307,159310,159330,159333,159356,159359,159362,159384,159387,159409,159413,159416,159456,159459,159580,159584,159587,159627,159630,159654,159657,159661,159664,159678,159711,159714,159749,159752,159775,159778,159811,159814,159816,159822,159897,159900,159906,159923,159963,159967,159970,160016,160018,160056,160059,160094,160097,160132,160135,160167,160170,160189,160193,160197,160310,160312,160387,160391,160437,160440,160466,160475,160479,160482,160545,160553,160581,160585,160625,160690,160694,160697,160736,160739,160784,160787,160848,160852,160879,160882,160910,160913,160917,160921,160986,160989,161027,161030,161062,161066,161165,161169,161172,161245,161248,161296,161300,161306,161346,161349,161396,161399,161448,161452,161454,161468,161470,161651,161655,161682,161702,161709,161713,161730,161736],[10,159298,159294],{"id":159299},"_2-基础语法变量与字符串",[14,159301,159303],{"id":159302},"_21-注释","2.1 注释",[19,159305,159306],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,159308,159309],{},"单行注释：",[64,159311,159313],{"className":34659,"code":159312,"language":34661,"meta":69,"style":69},"# 这是单行注释\nprint(\"hello\")\n",[71,159314,159315,159320],{"__ignoreMap":69},[74,159316,159317],{"class":76,"line":77},[74,159318,159319],{"class":144},"# 这是单行注释\n",[74,159321,159322,159324,159326,159328],{"class":76,"line":94},[74,159323,34696],{"class":134},[74,159325,85],{"class":84},[74,159327,10123],{"class":190},[74,159329,91],{"class":84},[19,159331,159332],{},"多行说明常用三引号：",[64,159334,159336],{"className":34659,"code":159335,"language":34661,"meta":69,"style":69},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[71,159337,159338,159342,159347,159352],{"__ignoreMap":69},[74,159339,159340],{"class":76,"line":77},[74,159341,99979],{"class":190},[74,159343,159344],{"class":76,"line":94},[74,159345,159346],{"class":190},"这是多行说明。\n",[74,159348,159349],{"class":76,"line":1141},[74,159350,159351],{"class":190},"常用于文件顶部说明、函数说明等。\n",[74,159353,159354],{"class":76,"line":1156},[74,159355,99979],{"class":190},[19,159357,159358],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,159360,159361],{},"不好：",[64,159363,159365],{"className":34659,"code":159364,"language":34661,"meta":69,"style":69},"# age 加 1\nage = age + 1\n",[71,159366,159367,159372],{"__ignoreMap":69},[74,159368,159369],{"class":76,"line":77},[74,159370,159371],{"class":144},"# age 加 1\n",[74,159373,159374,159376,159378,159380,159382],{"class":76,"line":94},[74,159375,150827],{"class":84},[74,159377,131],{"class":80},[74,159379,19986],{"class":84},[74,159381,567],{"class":80},[74,159383,59980],{"class":134},[19,159385,159386],{},"较好：",[64,159388,159390],{"className":34659,"code":159389,"language":34661,"meta":69,"style":69},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[71,159391,159392,159397],{"__ignoreMap":69},[74,159393,159394],{"class":76,"line":77},[74,159395,159396],{"class":144},"# 用户过完生日后，年龄增加一岁\n",[74,159398,159399,159401,159403,159405,159407],{"class":76,"line":94},[74,159400,150827],{"class":84},[74,159402,131],{"class":80},[74,159404,19986],{"class":84},[74,159406,567],{"class":80},[74,159408,59980],{"class":134},[14,159410,159412],{"id":159411},"_22-字面量","2.2 字面量",[19,159414,159415],{},"字面量就是代码中直接写出来的数据。",[64,159417,159419],{"className":34659,"code":159418,"language":34661,"meta":69,"style":69},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[71,159420,159421,159428,159435,159442,159449],{"__ignoreMap":69},[74,159422,159423,159425],{"class":76,"line":77},[74,159424,397],{"class":134},[74,159426,159427],{"class":144},"          # 整数\n",[74,159429,159430,159432],{"class":76,"line":94},[74,159431,135],{"class":134},[74,159433,159434],{"class":144},"         # 小数\n",[74,159436,159437,159439],{"class":76,"line":1141},[74,159438,10123],{"class":190},[74,159440,159441],{"class":144},"      # 字符串\n",[74,159443,159444,159446],{"class":76,"line":1156},[74,159445,35757],{"class":134},[74,159447,159448],{"class":144},"         # 布尔值\n",[74,159450,159451,159453],{"class":76,"line":1162},[74,159452,99967],{"class":134},[74,159454,159455],{"class":144},"         # 空值\n",[19,159457,159458],{},"常见字面量类型：",[223,159460,159461,159471],{},[226,159462,159463],{},[229,159464,159465,159467,159469],{},[232,159466,28017],{},[232,159468,31773],{},[232,159470,30150],{},[270,159472,159473,159484,159495,159506,159518,159530,159542,159555,159567],{},[229,159474,159475,159477,159481],{},[275,159476,88],{},[275,159478,159479],{},[71,159480,397],{},[275,159482,159483],{},"整数",[229,159485,159486,159488,159492],{},[275,159487,125],{},[275,159489,159490],{},[71,159491,135],{},[275,159493,159494],{},"浮点数",[229,159496,159497,159499,159503],{},[275,159498,1261],{},[275,159500,159501],{},[71,159502,10123],{},[275,159504,159505],{},"字符串",[229,159507,159508,159510,159516],{},[275,159509,1316],{},[275,159511,159512,298,159514],{},[71,159513,35757],{},[71,159515,38268],{},[275,159517,70296],{},[229,159519,159520,159523,159527],{},[275,159521,159522],{},"NoneType",[275,159524,159525],{},[71,159526,99967],{},[275,159528,159529],{},"空值",[229,159531,159532,159534,159539],{},[275,159533,158351],{},[275,159535,159536],{},[71,159537,159538],{},"[1, 2, 3]",[275,159540,159541],{},"列表",[229,159543,159544,159547,159552],{},[275,159545,159546],{},"tuple",[275,159548,159549],{},[71,159550,159551],{},"(1, 2, 3)",[275,159553,159554],{},"元组",[229,159556,159557,159559,159564],{},[275,159558,118827],{},[275,159560,159561],{},[71,159562,159563],{},"{\"name\": \"张三\"}",[275,159565,159566],{},"字典",[229,159568,159569,159572,159577],{},[275,159570,159571],{},"set",[275,159573,159574],{},[71,159575,159576],{},"{1, 2, 3}",[275,159578,159579],{},"集合",[14,159581,159583],{"id":159582},"_23-变量","2.3 变量",[19,159585,159586],{},"变量是保存数据的名字。",[64,159588,159590],{"className":34659,"code":159589,"language":34661,"meta":69,"style":69},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[71,159591,159592,159600,159608,159618],{"__ignoreMap":69},[74,159593,159594,159596,159598],{"class":76,"line":77},[74,159595,150817],{"class":84},[74,159597,131],{"class":80},[74,159599,153634],{"class":190},[74,159601,159602,159604,159606],{"class":76,"line":94},[74,159603,150827],{"class":84},[74,159605,131],{"class":80},[74,159607,150832],{"class":134},[74,159609,159610,159613,159615],{"class":76,"line":1141},[74,159611,159612],{"class":84},"height ",[74,159614,131],{"class":80},[74,159616,159617],{"class":134}," 1.75\n",[74,159619,159620,159623,159625],{"class":76,"line":1156},[74,159621,159622],{"class":84},"is_student ",[74,159624,131],{"class":80},[74,159626,157880],{"class":134},[19,159628,159629],{},"Python 的变量不需要提前声明类型：",[64,159631,159633],{"className":34659,"code":159632,"language":34661,"meta":69,"style":69},"score = 100\nscore = \"满分\"\n",[71,159634,159635,159645],{"__ignoreMap":69},[74,159636,159637,159640,159642],{"class":76,"line":77},[74,159638,159639],{"class":84},"score ",[74,159641,131],{"class":80},[74,159643,159644],{"class":134}," 100\n",[74,159646,159647,159649,159651],{"class":76,"line":94},[74,159648,159639],{"class":84},[74,159650,131],{"class":80},[74,159652,159653],{"class":190}," \"满分\"\n",[19,159655,159656],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,159658,159660],{"id":159659},"_24-变量命名规则","2.4 变量命名规则",[19,159662,159663],{},"硬性规则：",[27,159665,159666,159669,159672,159675],{},[30,159667,159668],{},"只能由字母、数字、下划线组成。",[30,159670,159671],{},"不能以数字开头。",[30,159673,159674],{},"不能使用 Python 关键字。",[30,159676,159677],{},"区分大小写。",[64,159679,159681],{"className":34659,"code":159680,"language":34661,"meta":69,"style":69},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[71,159682,159683,159692,159701],{"__ignoreMap":69},[74,159684,159685,159688,159690],{"class":76,"line":77},[74,159686,159687],{"class":84},"user_name ",[74,159689,131],{"class":80},[74,159691,150822],{"class":190},[74,159693,159694,159697,159699],{"class":76,"line":94},[74,159695,159696],{"class":84},"age2 ",[74,159698,131],{"class":80},[74,159700,150832],{"class":134},[74,159702,159703,159706,159708],{"class":76,"line":1141},[74,159704,159705],{"class":84},"_token ",[74,159707,131],{"class":80},[74,159709,159710],{"class":190}," \"abc\"\n",[19,159712,159713],{},"错误写法：",[64,159715,159717],{"className":34659,"code":159716,"language":34661,"meta":69,"style":69},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[71,159718,159719,159728,159740],{"__ignoreMap":69},[74,159720,159721,159724,159726],{"class":76,"line":77},[74,159722,159723],{"class":81684},"2age",[74,159725,17843],{"class":80},[74,159727,150832],{"class":134},[74,159729,159730,159732,159734,159736,159738],{"class":76,"line":94},[74,159731,135865],{"class":84},[74,159733,618],{"class":80},[74,159735,150817],{"class":84},[74,159737,131],{"class":80},[74,159739,150822],{"class":190},[74,159741,159742,159744,159746],{"class":76,"line":1141},[74,159743,18973],{"class":80},[74,159745,17843],{"class":80},[74,159747,159748],{"class":190}," \"一班\"\n",[19,159750,159751],{},"查看关键字：",[64,159753,159755],{"className":34659,"code":159754,"language":34661,"meta":69,"style":69},"import keyword\n\nprint(keyword.kwlist)\n",[71,159756,159757,159764,159768],{"__ignoreMap":69},[74,159758,159759,159761],{"class":76,"line":77},[74,159760,34673],{"class":80},[74,159762,159763],{"class":84}," keyword\n",[74,159765,159766],{"class":76,"line":94},[74,159767,2363],{"emptyLinePlaceholder":2362},[74,159769,159770,159772],{"class":76,"line":1141},[74,159771,34696],{"class":134},[74,159773,159774],{"class":84},"(keyword.kwlist)\n",[19,159776,159777],{},"推荐命名风格：",[64,159779,159781],{"className":34659,"code":159780,"language":34661,"meta":69,"style":69},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[71,159782,159783,159792,159802],{"__ignoreMap":69},[74,159784,159785,159788,159790],{"class":76,"line":77},[74,159786,159787],{"class":84},"student_name ",[74,159789,131],{"class":80},[74,159791,153634],{"class":190},[74,159793,159794,159797,159799],{"class":76,"line":94},[74,159795,159796],{"class":84},"total_price ",[74,159798,131],{"class":80},[74,159800,159801],{"class":134}," 99.8\n",[74,159803,159804,159807,159809],{"class":76,"line":1141},[74,159805,159806],{"class":84},"is_finished ",[74,159808,131],{"class":80},[74,159810,130088],{"class":134},[19,159812,159813],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,159815,55013],{"id":55012},[19,159817,108647,159818,159821],{},[71,159819,159820],{},"type()"," 查看数据类型：",[64,159823,159825],{"className":34659,"code":159824,"language":34661,"meta":69,"style":69},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[71,159826,159827,159841,159855,159869,159883],{"__ignoreMap":69},[74,159828,159829,159831,159833,159835,159837,159839],{"class":76,"line":77},[74,159830,34696],{"class":134},[74,159832,85],{"class":84},[74,159834,107388],{"class":134},[74,159836,85],{"class":84},[74,159838,397],{"class":134},[74,159840,34778],{"class":84},[74,159842,159843,159845,159847,159849,159851,159853],{"class":76,"line":94},[74,159844,34696],{"class":134},[74,159846,85],{"class":84},[74,159848,107388],{"class":134},[74,159850,85],{"class":84},[74,159852,135],{"class":134},[74,159854,34778],{"class":84},[74,159856,159857,159859,159861,159863,159865,159867],{"class":76,"line":1141},[74,159858,34696],{"class":134},[74,159860,85],{"class":84},[74,159862,107388],{"class":134},[74,159864,85],{"class":84},[74,159866,10123],{"class":190},[74,159868,34778],{"class":84},[74,159870,159871,159873,159875,159877,159879,159881],{"class":76,"line":1156},[74,159872,34696],{"class":134},[74,159874,85],{"class":84},[74,159876,107388],{"class":134},[74,159878,85],{"class":84},[74,159880,35757],{"class":134},[74,159882,34778],{"class":84},[74,159884,159885,159887,159889,159891,159893,159895],{"class":76,"line":1162},[74,159886,34696],{"class":134},[74,159888,85],{"class":84},[74,159890,107388],{"class":134},[74,159892,85],{"class":84},[74,159894,99967],{"class":134},[74,159896,34778],{"class":84},[19,159898,159899],{},"输出类似：",[64,159901,159904],{"className":159902,"code":159903,"language":9466,"meta":69},[9464],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[71,159905,159903],{"__ignoreMap":69},[19,159907,13304,159908,111564,159910,159912,159913,159915,159916,25779,159918,159915,159920,159922],{},[71,159909,1316],{},[71,159911,88],{}," 的子类，",[71,159914,35757],{}," 可以当作 ",[71,159917,303],{},[71,159919,38268],{},[71,159921,277],{},"，但业务代码中不要滥用。",[64,159924,159926],{"className":34659,"code":159925,"language":34661,"meta":69,"style":69},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[71,159927,159928,159946],{"__ignoreMap":69},[74,159929,159930,159932,159934,159936,159938,159940,159943],{"class":76,"line":77},[74,159931,34696],{"class":134},[74,159933,85],{"class":84},[74,159935,35757],{"class":134},[74,159937,49847],{"class":80},[74,159939,29399],{"class":134},[74,159941,159942],{"class":84},")   ",[74,159944,159945],{"class":144},"# 2\n",[74,159947,159948,159950,159952,159954,159956,159958,159960],{"class":76,"line":94},[74,159949,34696],{"class":134},[74,159951,85],{"class":84},[74,159953,38268],{"class":134},[74,159955,49847],{"class":80},[74,159957,29399],{"class":134},[74,159959,50089],{"class":84},[74,159961,159962],{"class":144},"# 1\n",[14,159964,159966],{"id":159965},"_26-类型转换","2.6 类型转换",[19,159968,159969],{},"常用转换函数：",[64,159971,159973],{"className":34659,"code":159972,"language":34661,"meta":69,"style":69},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[71,159974,159975,159985,159996,160006],{"__ignoreMap":69},[74,159976,159977,159979,159981,159983],{"class":76,"line":77},[74,159978,88],{"class":134},[74,159980,85],{"class":84},[74,159982,58597],{"class":190},[74,159984,91],{"class":84},[74,159986,159987,159989,159991,159994],{"class":76,"line":94},[74,159988,125],{"class":134},[74,159990,85],{"class":84},[74,159992,159993],{"class":190},"\"3.14\"",[74,159995,91],{"class":84},[74,159997,159998,160000,160002,160004],{"class":76,"line":1141},[74,159999,1261],{"class":134},[74,160001,85],{"class":84},[74,160003,397],{"class":134},[74,160005,91],{"class":84},[74,160007,160008,160010,160012,160014],{"class":76,"line":1156},[74,160009,1316],{"class":134},[74,160011,85],{"class":84},[74,160013,303],{"class":134},[74,160015,91],{"class":84},[19,160017,19414],{},[64,160019,160021],{"className":34659,"code":160020,"language":34661,"meta":69,"style":69},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[71,160022,160023,160032,160043],{"__ignoreMap":69},[74,160024,160025,160027,160029],{"class":76,"line":77},[74,160026,150827],{"class":84},[74,160028,131],{"class":80},[74,160030,160031],{"class":190}," \"18\"\n",[74,160033,160034,160036,160038,160040],{"class":76,"line":94},[74,160035,150827],{"class":84},[74,160037,131],{"class":80},[74,160039,2344],{"class":134},[74,160041,160042],{"class":84},"(age)\n",[74,160044,160045,160047,160050,160052,160054],{"class":76,"line":1141},[74,160046,34696],{"class":134},[74,160048,160049],{"class":84},"(age ",[74,160051,567],{"class":80},[74,160053,29399],{"class":134},[74,160055,91],{"class":84},[19,160057,160058],{},"输入得到的内容永远是字符串：",[64,160060,160062],{"className":34659,"code":160061,"language":34661,"meta":69,"style":69},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[71,160063,160064,160080],{"__ignoreMap":69},[74,160065,160066,160069,160071,160073,160075,160078],{"class":76,"line":77},[74,160067,160068],{"class":84},"num ",[74,160070,131],{"class":80},[74,160072,64886],{"class":134},[74,160074,85],{"class":84},[74,160076,160077],{"class":190},"\"请输入数字:\"",[74,160079,91],{"class":84},[74,160081,160082,160084,160086,160088,160091],{"class":76,"line":94},[74,160083,34696],{"class":134},[74,160085,85],{"class":84},[74,160087,107388],{"class":134},[74,160089,160090],{"class":84},"(num))  ",[74,160092,160093],{"class":144},"# str\n",[19,160095,160096],{},"如果要做数学运算，必须转换：",[64,160098,160100],{"className":34659,"code":160099,"language":34661,"meta":69,"style":69},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[71,160101,160102,160120],{"__ignoreMap":69},[74,160103,160104,160106,160108,160110,160112,160114,160116,160118],{"class":76,"line":77},[74,160105,160068],{"class":84},[74,160107,131],{"class":80},[74,160109,2344],{"class":134},[74,160111,85],{"class":84},[74,160113,58102],{"class":134},[74,160115,85],{"class":84},[74,160117,160077],{"class":190},[74,160119,34778],{"class":84},[74,160121,160122,160124,160126,160128,160130],{"class":76,"line":94},[74,160123,34696],{"class":134},[74,160125,49900],{"class":84},[74,160127,567],{"class":80},[74,160129,2000],{"class":134},[74,160131,91],{"class":84},[19,160133,160134],{},"常见错误：",[64,160136,160138],{"className":34659,"code":160137,"language":34661,"meta":69,"style":69},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[71,160139,160140,160153],{"__ignoreMap":69},[74,160141,160142,160144,160146,160148,160150],{"class":76,"line":77},[74,160143,88],{"class":134},[74,160145,85],{"class":84},[74,160147,159993],{"class":190},[74,160149,159942],{"class":84},[74,160151,160152],{"class":144},"# 错误\n",[74,160154,160155,160157,160159,160162,160165],{"class":76,"line":94},[74,160156,88],{"class":134},[74,160158,85],{"class":84},[74,160160,160161],{"class":190},"\"abc\"",[74,160163,160164],{"class":84},")    ",[74,160166,160152],{"class":144},[19,160168,160169],{},"正确写法：",[64,160171,160173],{"className":34659,"code":160172,"language":34661,"meta":69,"style":69},"num = float(\"3.14\")\n",[71,160174,160175],{"__ignoreMap":69},[74,160176,160177,160179,160181,160183,160185,160187],{"class":76,"line":77},[74,160178,160068],{"class":84},[74,160180,131],{"class":80},[74,160182,114078],{"class":134},[74,160184,85],{"class":84},[74,160186,159993],{"class":190},[74,160188,91],{"class":84},[14,160190,160192],{"id":160191},"_27-运算符","2.7 运算符",[44,160194,160196],{"id":160195},"_271-算术运算符","2.7.1 算术运算符",[223,160198,160199,160210],{},[226,160200,160201],{},[229,160202,160203,160206,160208],{},[232,160204,160205],{},"运算符",[232,160207,30150],{},[232,160209,31773],{},[270,160211,160212,160226,160240,160254,160268,160282,160296],{},[229,160213,160214,160218,160221],{},[275,160215,160216],{},[71,160217,567],{},[275,160219,160220],{},"加法",[275,160222,160223],{},[71,160224,160225],{},"1 + 2",[229,160227,160228,160232,160235],{},[275,160229,160230],{},[71,160231,618],{},[275,160233,160234],{},"减法",[275,160236,160237],{},[71,160238,160239],{},"5 - 3",[229,160241,160242,160246,160249],{},[275,160243,160244],{},[71,160245,541],{},[275,160247,160248],{},"乘法",[275,160250,160251],{},[71,160252,160253],{},"2 * 3",[229,160255,160256,160260,160263],{},[275,160257,160258],{},[71,160259,670],{},[275,160261,160262],{},"除法，结果是浮点数",[275,160264,160265],{},[71,160266,160267],{},"5 \u002F 2",[229,160269,160270,160274,160277],{},[275,160271,160272],{},[71,160273,37610],{},[275,160275,160276],{},"整除",[275,160278,160279],{},[71,160280,160281],{},"5 \u002F\u002F 2",[229,160283,160284,160288,160291],{},[275,160285,160286],{},[71,160287,414],{},[275,160289,160290],{},"取余",[275,160292,160293],{},[71,160294,160295],{},"5 % 2",[229,160297,160298,160302,160305],{},[275,160299,160300],{},[71,160301,14940],{},[275,160303,160304],{},"幂运算",[275,160306,160307],{},[71,160308,160309],{},"2 ** 3",[19,160311,19414],{},[64,160313,160315],{"className":34659,"code":160314,"language":34661,"meta":69,"style":69},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[71,160316,160317,160335,160352,160369],{"__ignoreMap":69},[74,160318,160319,160321,160323,160325,160328,160330,160332],{"class":76,"line":77},[74,160320,34696],{"class":134},[74,160322,85],{"class":84},[74,160324,405],{"class":134},[74,160326,160327],{"class":80}," \u002F",[74,160329,19034],{"class":134},[74,160331,159942],{"class":84},[74,160333,160334],{"class":144},"# 2.5\n",[74,160336,160337,160339,160341,160343,160346,160348,160350],{"class":76,"line":94},[74,160338,34696],{"class":134},[74,160340,85],{"class":84},[74,160342,405],{"class":134},[74,160344,160345],{"class":80}," \u002F\u002F",[74,160347,19034],{"class":134},[74,160349,50089],{"class":84},[74,160351,159945],{"class":144},[74,160353,160354,160356,160358,160360,160363,160365,160367],{"class":76,"line":1141},[74,160355,34696],{"class":134},[74,160357,85],{"class":84},[74,160359,405],{"class":134},[74,160361,160362],{"class":80}," %",[74,160364,19034],{"class":134},[74,160366,159942],{"class":84},[74,160368,159962],{"class":144},[74,160370,160371,160373,160375,160377,160380,160382,160384],{"class":76,"line":1156},[74,160372,34696],{"class":134},[74,160374,85],{"class":84},[74,160376,163],{"class":134},[74,160378,160379],{"class":80}," **",[74,160381,82351],{"class":134},[74,160383,50089],{"class":84},[74,160385,160386],{"class":144},"# 8\n",[44,160388,160390],{"id":160389},"_272-赋值运算符","2.7.2 赋值运算符",[64,160392,160394],{"className":34659,"code":160393,"language":34661,"meta":69,"style":69},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[71,160395,160396,160404,160412,160420,160428],{"__ignoreMap":69},[74,160397,160398,160400,160402],{"class":76,"line":77},[74,160399,160068],{"class":84},[74,160401,131],{"class":80},[74,160403,62709],{"class":134},[74,160405,160406,160408,160410],{"class":76,"line":94},[74,160407,160068],{"class":84},[74,160409,13756],{"class":80},[74,160411,58708],{"class":134},[74,160413,160414,160416,160418],{"class":76,"line":1141},[74,160415,160068],{"class":84},[74,160417,154533],{"class":80},[74,160419,52004],{"class":134},[74,160421,160422,160424,160426],{"class":76,"line":1156},[74,160423,160068],{"class":84},[74,160425,141429],{"class":80},[74,160427,124317],{"class":134},[74,160429,160430,160432,160435],{"class":76,"line":1162},[74,160431,160068],{"class":84},[74,160433,160434],{"class":80},"\u002F=",[74,160436,52004],{"class":134},[19,160438,160439],{},"等价关系：",[64,160441,160443],{"className":34659,"code":160442,"language":34661,"meta":69,"style":69},"num += 1\nnum = num + 1\n",[71,160444,160445,160453],{"__ignoreMap":69},[74,160446,160447,160449,160451],{"class":76,"line":77},[74,160448,160068],{"class":84},[74,160450,13756],{"class":80},[74,160452,59980],{"class":134},[74,160454,160455,160457,160459,160462,160464],{"class":76,"line":94},[74,160456,160068],{"class":84},[74,160458,131],{"class":80},[74,160460,160461],{"class":84}," num ",[74,160463,567],{"class":80},[74,160465,59980],{"class":134},[19,160467,160468,160469,105299,160472,32666],{},"Python 没有 ",[71,160470,160471],{},"num++",[71,160473,160474],{},"num--",[44,160476,160478],{"id":160477},"_273-比较运算符","2.7.3 比较运算符",[19,160480,160481],{},"比较运算结果是布尔值。",[64,160483,160485],{"className":34659,"code":160484,"language":34661,"meta":69,"style":69},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[71,160486,160487,160501,160516,160530],{"__ignoreMap":69},[74,160488,160489,160491,160493,160495,160497,160499],{"class":76,"line":77},[74,160490,34696],{"class":134},[74,160492,85],{"class":84},[74,160494,532],{"class":134},[74,160496,30503],{"class":80},[74,160498,2110],{"class":134},[74,160500,91],{"class":84},[74,160502,160503,160505,160507,160509,160512,160514],{"class":76,"line":94},[74,160504,34696],{"class":134},[74,160506,85],{"class":84},[74,160508,532],{"class":134},[74,160510,160511],{"class":80}," >=",[74,160513,2000],{"class":134},[74,160515,91],{"class":84},[74,160517,160518,160520,160522,160524,160526,160528],{"class":76,"line":1141},[74,160519,34696],{"class":134},[74,160521,85],{"class":84},[74,160523,532],{"class":134},[74,160525,105840],{"class":80},[74,160527,2045],{"class":134},[74,160529,91],{"class":84},[74,160531,160532,160534,160536,160538,160541,160543],{"class":76,"line":1156},[74,160533,34696],{"class":134},[74,160535,85],{"class":84},[74,160537,532],{"class":134},[74,160539,160540],{"class":80}," !=",[74,160542,2045],{"class":134},[74,160544,91],{"class":84},[19,160546,160547,160548,160550,160551,32666],{},"注意：判断相等用 ",[71,160549,2912],{},"，赋值用 ",[71,160552,131],{},[64,160554,160556],{"className":34659,"code":160555,"language":34661,"meta":69,"style":69},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[71,160557,160558,160570],{"__ignoreMap":69},[74,160559,160560,160562,160564,160567],{"class":76,"line":77},[74,160561,150827],{"class":84},[74,160563,131],{"class":80},[74,160565,160566],{"class":134}," 18",[74,160568,160569],{"class":144},"       # 赋值\n",[74,160571,160572,160574,160576,160578],{"class":76,"line":94},[74,160573,150827],{"class":84},[74,160575,2912],{"class":80},[74,160577,160566],{"class":134},[74,160579,160580],{"class":144},"      # 判断是否相等\n",[44,160582,160584],{"id":160583},"_274-逻辑运算符","2.7.4 逻辑运算符",[223,160586,160587,160595],{},[226,160588,160589],{},[229,160590,160591,160593],{},[232,160592,160205],{},[232,160594,30150],{},[270,160596,160597,160606,160615],{},[229,160598,160599,160603],{},[275,160600,160601],{},[71,160602,34743],{},[275,160604,160605],{},"并且",[229,160607,160608,160612],{},[275,160609,160610],{},[71,160611,119371],{},[275,160613,160614],{},"或者",[229,160616,160617,160622],{},[275,160618,160619],{},[71,160620,160621],{},"not",[275,160623,160624],{},"取反",[64,160626,160628],{"className":34659,"code":160627,"language":34661,"meta":69,"style":69},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[71,160629,160630,160638,160647,160651,160666,160680],{"__ignoreMap":69},[74,160631,160632,160634,160636],{"class":76,"line":77},[74,160633,150827],{"class":84},[74,160635,131],{"class":80},[74,160637,92346],{"class":134},[74,160639,160640,160643,160645],{"class":76,"line":94},[74,160641,160642],{"class":84},"has_ticket ",[74,160644,131],{"class":80},[74,160646,157880],{"class":134},[74,160648,160649],{"class":76,"line":1141},[74,160650,2363],{"emptyLinePlaceholder":2362},[74,160652,160653,160655,160657,160659,160661,160663],{"class":76,"line":1156},[74,160654,34696],{"class":134},[74,160656,160049],{"class":84},[74,160658,1672],{"class":80},[74,160660,160566],{"class":134},[74,160662,124710],{"class":80},[74,160664,160665],{"class":84}," has_ticket)\n",[74,160667,160668,160670,160672,160674,160676,160678],{"class":76,"line":1162},[74,160669,34696],{"class":134},[74,160671,160049],{"class":84},[74,160673,996],{"class":80},[74,160675,160566],{"class":134},[74,160677,118482],{"class":80},[74,160679,160665],{"class":84},[74,160681,160682,160684,160686,160688],{"class":76,"line":1176},[74,160683,34696],{"class":134},[74,160685,85],{"class":84},[74,160687,160621],{"class":80},[74,160689,160665],{"class":84},[14,160691,160693],{"id":160692},"_28-字符串定义","2.8 字符串定义",[19,160695,160696],{},"三种常见写法：",[64,160698,160700],{"className":34659,"code":160699,"language":34661,"meta":69,"style":69},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[71,160701,160702,160712,160721,160731],{"__ignoreMap":69},[74,160703,160704,160707,160709],{"class":76,"line":77},[74,160705,160706],{"class":84},"name1 ",[74,160708,131],{"class":80},[74,160710,160711],{"class":190}," '小明'\n",[74,160713,160714,160717,160719],{"class":76,"line":94},[74,160715,160716],{"class":84},"name2 ",[74,160718,131],{"class":80},[74,160720,153634],{"class":190},[74,160722,160723,160726,160728],{"class":76,"line":1141},[74,160724,160725],{"class":84},"text ",[74,160727,131],{"class":80},[74,160729,160730],{"class":190}," \"\"\"这是多行字符串\n",[74,160732,160733],{"class":76,"line":1156},[74,160734,160735],{"class":190},"可以换行\"\"\"\n",[19,160737,160738],{},"字符串中包含引号：",[64,160740,160742],{"className":34659,"code":160741,"language":34661,"meta":69,"style":69},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[71,160743,160744,160754,160764],{"__ignoreMap":69},[74,160745,160746,160749,160751],{"class":76,"line":77},[74,160747,160748],{"class":84},"msg ",[74,160750,131],{"class":80},[74,160752,160753],{"class":190}," \"他说:'你好'\"\n",[74,160755,160756,160759,160761],{"class":76,"line":94},[74,160757,160758],{"class":84},"msg2 ",[74,160760,131],{"class":80},[74,160762,160763],{"class":190}," '他说:\"你好\"'\n",[74,160765,160766,160769,160771,160774,160777,160780,160782],{"class":76,"line":1141},[74,160767,160768],{"class":84},"msg3 ",[74,160770,131],{"class":80},[74,160772,160773],{"class":190}," \"他说:",[74,160775,160776],{"class":134},"\\\"",[74,160778,160779],{"class":190},"你好",[74,160781,160776],{"class":134},[74,160783,29414],{"class":190},[19,160785,160786],{},"常见转义字符：",[223,160788,160789,160798],{},[226,160790,160791],{},[229,160792,160793,160796],{},[232,160794,160795],{},"写法",[232,160797,104981],{},[270,160799,160800,160810,160819,160829,160838],{},[229,160801,160802,160807],{},[275,160803,160804],{},[71,160805,160806],{},"\\n",[275,160808,160809],{},"换行",[229,160811,160812,160816],{},[275,160813,160814],{},[71,160815,1192],{},[275,160817,160818],{},"制表符",[229,160820,160821,160826],{},[275,160822,160823],{},[71,160824,160825],{},"\\\\",[275,160827,160828],{},"反斜杠",[229,160830,160831,160835],{},[275,160832,160833],{},[71,160834,160776],{},[275,160836,160837],{},"双引号",[229,160839,160840,160845],{},[275,160841,160842],{},[71,160843,160844],{},"\\'",[275,160846,160847],{},"单引号",[14,160849,160851],{"id":160850},"_29-字符串拼接","2.9 字符串拼接",[64,160853,160855],{"className":34659,"code":160854,"language":34661,"meta":69,"style":69},"name = \"小明\"\nprint(\"你好，\" + name)\n",[71,160856,160857,160865],{"__ignoreMap":69},[74,160858,160859,160861,160863],{"class":76,"line":77},[74,160860,150817],{"class":84},[74,160862,131],{"class":80},[74,160864,153634],{"class":190},[74,160866,160867,160869,160871,160874,160876],{"class":76,"line":94},[74,160868,34696],{"class":134},[74,160870,85],{"class":84},[74,160872,160873],{"class":190},"\"你好，\"",[74,160875,49847],{"class":80},[74,160877,160878],{"class":84}," name)\n",[19,160880,160881],{},"字符串只能和字符串拼接：",[64,160883,160885],{"className":34659,"code":160884,"language":34661,"meta":69,"style":69},"age = 18\nprint(\"年龄:\" + str(age))\n",[71,160886,160887,160895],{"__ignoreMap":69},[74,160888,160889,160891,160893],{"class":76,"line":77},[74,160890,150827],{"class":84},[74,160892,131],{"class":80},[74,160894,150832],{"class":134},[74,160896,160897,160899,160901,160903,160905,160907],{"class":76,"line":94},[74,160898,34696],{"class":134},[74,160900,85],{"class":84},[74,160902,150798],{"class":190},[74,160904,49847],{"class":80},[74,160906,78200],{"class":134},[74,160908,160909],{"class":84},"(age))\n",[19,160911,160912],{},"更推荐使用格式化字符串。",[14,160914,160916],{"id":160915},"_210-字符串格式化","2.10 字符串格式化",[44,160918,160920],{"id":160919},"_2101-百分号格式化","2.10.1 百分号格式化",[64,160922,160924],{"className":34659,"code":160923,"language":34661,"meta":69,"style":69},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[71,160925,160926,160934,160942,160951,160955],{"__ignoreMap":69},[74,160927,160928,160930,160932],{"class":76,"line":77},[74,160929,150817],{"class":84},[74,160931,131],{"class":80},[74,160933,153634],{"class":190},[74,160935,160936,160938,160940],{"class":76,"line":94},[74,160937,150827],{"class":84},[74,160939,131],{"class":80},[74,160941,150832],{"class":134},[74,160943,160944,160946,160948],{"class":76,"line":1141},[74,160945,159639],{"class":84},[74,160947,131],{"class":80},[74,160949,160950],{"class":134}," 95.5\n",[74,160952,160953],{"class":76,"line":1156},[74,160954,2363],{"emptyLinePlaceholder":2362},[74,160956,160957,160959,160961,160964,160967,160970,160973,160976,160979,160981,160983],{"class":76,"line":1162},[74,160958,34696],{"class":134},[74,160960,85],{"class":84},[74,160962,160963],{"class":190},"\"姓名:",[74,160965,160966],{"class":134},"%s",[74,160968,160969],{"class":190}," 年龄:",[74,160971,160972],{"class":134},"%d",[74,160974,160975],{"class":190}," 分数:",[74,160977,160978],{"class":134},"%.1f",[74,160980,337],{"class":190},[74,160982,160362],{"class":80},[74,160984,160985],{"class":84}," (name, age, score))\n",[19,160987,160988],{},"常用占位符：",[223,160990,160991,161000],{},[226,160992,160993],{},[229,160994,160995,160998],{},[232,160996,160997],{},"占位符",[232,160999,30150],{},[270,161001,161002,161010,161018],{},[229,161003,161004,161008],{},[275,161005,161006],{},[71,161007,160966],{},[275,161009,159505],{},[229,161011,161012,161016],{},[275,161013,161014],{},[71,161015,160972],{},[275,161017,159483],{},[229,161019,161020,161025],{},[275,161021,161022],{},[71,161023,161024],{},"%f",[275,161026,159494],{},[19,161028,161029],{},"精度控制：",[64,161031,161033],{"className":34659,"code":161032,"language":34661,"meta":69,"style":69},"price = 12.3456\nprint(\"%.2f\" % price)\n",[71,161034,161035,161044],{"__ignoreMap":69},[74,161036,161037,161039,161041],{"class":76,"line":77},[74,161038,150962],{"class":84},[74,161040,131],{"class":80},[74,161042,161043],{"class":134}," 12.3456\n",[74,161045,161046,161048,161050,161052,161055,161057,161059],{"class":76,"line":94},[74,161047,34696],{"class":134},[74,161049,85],{"class":84},[74,161051,337],{"class":190},[74,161053,161054],{"class":134},"%.2f",[74,161056,337],{"class":190},[74,161058,160362],{"class":80},[74,161060,161061],{"class":84}," price)\n",[44,161063,161065],{"id":161064},"_2102-format方法","2.10.2 format方法",[64,161067,161069],{"className":34659,"code":161068,"language":34661,"meta":69,"style":69},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[71,161070,161071,161079,161087,161091,161110,161130],{"__ignoreMap":69},[74,161072,161073,161075,161077],{"class":76,"line":77},[74,161074,150817],{"class":84},[74,161076,131],{"class":80},[74,161078,153634],{"class":190},[74,161080,161081,161083,161085],{"class":76,"line":94},[74,161082,150827],{"class":84},[74,161084,131],{"class":80},[74,161086,150832],{"class":134},[74,161088,161089],{"class":76,"line":1141},[74,161090,2363],{"emptyLinePlaceholder":2362},[74,161092,161093,161095,161097,161099,161101,161103,161105,161107],{"class":76,"line":1156},[74,161094,34696],{"class":134},[74,161096,85],{"class":84},[74,161098,160963],{"class":190},[74,161100,36740],{"class":134},[74,161102,160969],{"class":190},[74,161104,36740],{"class":134},[74,161106,337],{"class":190},[74,161108,161109],{"class":84},".format(name, age))\n",[74,161111,161112,161114,161116,161118,161121,161123,161126,161128],{"class":76,"line":1162},[74,161113,34696],{"class":134},[74,161115,85],{"class":84},[74,161117,160963],{"class":190},[74,161119,161120],{"class":134},"{0}",[74,161122,160969],{"class":190},[74,161124,161125],{"class":134},"{1}",[74,161127,337],{"class":190},[74,161129,161109],{"class":84},[74,161131,161132,161134,161136,161138,161141,161143,161146,161148,161151,161153,161155,161158,161160,161162],{"class":76,"line":1176},[74,161133,34696],{"class":134},[74,161135,85],{"class":84},[74,161137,160963],{"class":190},[74,161139,161140],{"class":134},"{name}",[74,161142,160969],{"class":190},[74,161144,161145],{"class":134},"{age}",[74,161147,337],{"class":190},[74,161149,161150],{"class":84},".format(",[74,161152,84091],{"class":9495},[74,161154,131],{"class":80},[74,161156,161157],{"class":84},"name, ",[74,161159,74502],{"class":9495},[74,161161,131],{"class":80},[74,161163,161164],{"class":84},"age))\n",[44,161166,161168],{"id":161167},"_2103-f-string","2.10.3 f-string",[19,161170,161171],{},"推荐写法：",[64,161173,161175],{"className":34659,"code":161174,"language":34661,"meta":69,"style":69},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[71,161176,161177,161185,161193,161201,161205],{"__ignoreMap":69},[74,161178,161179,161181,161183],{"class":76,"line":77},[74,161180,150817],{"class":84},[74,161182,131],{"class":80},[74,161184,153634],{"class":190},[74,161186,161187,161189,161191],{"class":76,"line":94},[74,161188,150827],{"class":84},[74,161190,131],{"class":80},[74,161192,150832],{"class":134},[74,161194,161195,161197,161199],{"class":76,"line":1141},[74,161196,159639],{"class":84},[74,161198,131],{"class":80},[74,161200,160950],{"class":134},[74,161202,161203],{"class":76,"line":1156},[74,161204,2363],{"emptyLinePlaceholder":2362},[74,161206,161207,161209,161211,161213,161215,161217,161219,161221,161223,161225,161227,161229,161231,161233,161236,161239,161241,161243],{"class":76,"line":1162},[74,161208,34696],{"class":134},[74,161210,85],{"class":84},[74,161212,138],{"class":80},[74,161214,160963],{"class":190},[74,161216,982],{"class":134},[74,161218,84091],{"class":84},[74,161220,1032],{"class":134},[74,161222,160969],{"class":190},[74,161224,982],{"class":134},[74,161226,74502],{"class":84},[74,161228,1032],{"class":134},[74,161230,160975],{"class":190},[74,161232,982],{"class":134},[74,161234,161235],{"class":84},"score",[74,161237,161238],{"class":80},":.1f",[74,161240,1032],{"class":134},[74,161242,337],{"class":190},[74,161244,91],{"class":84},[19,161246,161247],{},"表达式也可以放进去：",[64,161249,161251],{"className":34659,"code":161250,"language":34661,"meta":69,"style":69},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[71,161252,161253,161261,161269],{"__ignoreMap":69},[74,161254,161255,161257,161259],{"class":76,"line":77},[74,161256,150962],{"class":84},[74,161258,131],{"class":80},[74,161260,150967],{"class":134},[74,161262,161263,161265,161267],{"class":76,"line":94},[74,161264,150972],{"class":84},[74,161266,131],{"class":80},[74,161268,58708],{"class":134},[74,161270,161271,161273,161275,161277,161280,161282,161284,161286,161289,161291,161294],{"class":76,"line":1141},[74,161272,34696],{"class":134},[74,161274,85],{"class":84},[74,161276,138],{"class":80},[74,161278,161279],{"class":190},"\"总价:",[74,161281,982],{"class":134},[74,161283,150962],{"class":84},[74,161285,541],{"class":80},[74,161287,161288],{"class":84}," count",[74,161290,1032],{"class":134},[74,161292,161293],{"class":190},"元\"",[74,161295,91],{"class":84},[14,161297,161299],{"id":161298},"_211-input输入","2.11 input输入",[19,161301,161302,161305],{},[71,161303,161304],{},"input()"," 会暂停程序，等待用户输入。",[64,161307,161309],{"className":34659,"code":161308,"language":34661,"meta":69,"style":69},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[71,161310,161311,161325],{"__ignoreMap":69},[74,161312,161313,161315,161317,161319,161321,161323],{"class":76,"line":77},[74,161314,150817],{"class":84},[74,161316,131],{"class":80},[74,161318,64886],{"class":134},[74,161320,85],{"class":84},[74,161322,156660],{"class":190},[74,161324,91],{"class":84},[74,161326,161327,161329,161331,161333,161336,161338,161340,161342,161344],{"class":76,"line":94},[74,161328,34696],{"class":134},[74,161330,85],{"class":84},[74,161332,138],{"class":80},[74,161334,161335],{"class":190},"\"你好，",[74,161337,982],{"class":134},[74,161339,84091],{"class":84},[74,161341,1032],{"class":134},[74,161343,337],{"class":190},[74,161345,91],{"class":84},[19,161347,161348],{},"输入整数：",[64,161350,161352],{"className":34659,"code":161351,"language":34661,"meta":69,"style":69},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[71,161353,161354,161372],{"__ignoreMap":69},[74,161355,161356,161358,161360,161362,161364,161366,161368,161370],{"class":76,"line":77},[74,161357,150827],{"class":84},[74,161359,131],{"class":80},[74,161361,2344],{"class":134},[74,161363,85],{"class":84},[74,161365,58102],{"class":134},[74,161367,85],{"class":84},[74,161369,156675],{"class":190},[74,161371,34778],{"class":84},[74,161373,161374,161376,161378,161380,161383,161385,161387,161389,161392,161394],{"class":76,"line":94},[74,161375,34696],{"class":134},[74,161377,85],{"class":84},[74,161379,138],{"class":80},[74,161381,161382],{"class":190},"\"明年你",[74,161384,982],{"class":134},[74,161386,150827],{"class":84},[74,161388,567],{"class":80},[74,161390,161391],{"class":134}," 1}",[74,161393,153685],{"class":190},[74,161395,91],{"class":84},[19,161397,161398],{},"输入小数：",[64,161400,161402],{"className":34659,"code":161401,"language":34661,"meta":69,"style":69},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[71,161403,161404,161423],{"__ignoreMap":69},[74,161405,161406,161408,161410,161412,161414,161416,161418,161421],{"class":76,"line":77},[74,161407,159612],{"class":84},[74,161409,131],{"class":80},[74,161411,114078],{"class":134},[74,161413,85],{"class":84},[74,161415,58102],{"class":134},[74,161417,85],{"class":84},[74,161419,161420],{"class":190},"\"请输入身高:\"",[74,161422,34778],{"class":84},[74,161424,161425,161427,161429,161431,161434,161436,161438,161441,161443,161446],{"class":76,"line":94},[74,161426,34696],{"class":134},[74,161428,85],{"class":84},[74,161430,138],{"class":80},[74,161432,161433],{"class":190},"\"身高:",[74,161435,982],{"class":134},[74,161437,29262],{"class":84},[74,161439,161440],{"class":80},":.2f",[74,161442,1032],{"class":134},[74,161444,161445],{"class":190},"米\"",[74,161447,91],{"class":84},[14,161449,161451],{"id":161450},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,161453,127573],{},[27,161455,161456,161459,161462,161465],{},[30,161457,161458],{},"输入商品单价。",[30,161460,161461],{},"输入购买数量。",[30,161463,161464],{},"输入折扣，例如 0.8 表示八折。",[30,161466,161467],{},"输出最终金额，保留两位小数。",[19,161469,14314],{},[64,161471,161473],{"className":34659,"code":161472,"language":34661,"meta":69,"style":69},"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",[71,161474,161475,161494,161513,161533,161537,161557,161561,161584,161605,161627],{"__ignoreMap":69},[74,161476,161477,161479,161481,161483,161485,161487,161489,161492],{"class":76,"line":77},[74,161478,150962],{"class":84},[74,161480,131],{"class":80},[74,161482,114078],{"class":134},[74,161484,85],{"class":84},[74,161486,58102],{"class":134},[74,161488,85],{"class":84},[74,161490,161491],{"class":190},"\"请输入商品单价:\"",[74,161493,34778],{"class":84},[74,161495,161496,161498,161500,161502,161504,161506,161508,161511],{"class":76,"line":94},[74,161497,150972],{"class":84},[74,161499,131],{"class":80},[74,161501,2344],{"class":134},[74,161503,85],{"class":84},[74,161505,58102],{"class":134},[74,161507,85],{"class":84},[74,161509,161510],{"class":190},"\"请输入购买数量:\"",[74,161512,34778],{"class":84},[74,161514,161515,161518,161520,161522,161524,161526,161528,161531],{"class":76,"line":1141},[74,161516,161517],{"class":84},"discount ",[74,161519,131],{"class":80},[74,161521,114078],{"class":134},[74,161523,85],{"class":84},[74,161525,58102],{"class":134},[74,161527,85],{"class":84},[74,161529,161530],{"class":190},"\"请输入折扣:\"",[74,161532,34778],{"class":84},[74,161534,161535],{"class":76,"line":1156},[74,161536,2363],{"emptyLinePlaceholder":2362},[74,161538,161539,161542,161544,161547,161549,161552,161554],{"class":76,"line":1162},[74,161540,161541],{"class":84},"total ",[74,161543,131],{"class":80},[74,161545,161546],{"class":84}," price ",[74,161548,541],{"class":80},[74,161550,161551],{"class":84}," count ",[74,161553,541],{"class":80},[74,161555,161556],{"class":84}," discount\n",[74,161558,161559],{"class":76,"line":1176},[74,161560,2363],{"emptyLinePlaceholder":2362},[74,161562,161563,161565,161567,161569,161572,161574,161576,161578,161580,161582],{"class":76,"line":1182},[74,161564,34696],{"class":134},[74,161566,85],{"class":84},[74,161568,138],{"class":80},[74,161570,161571],{"class":190},"\"商品单价:",[74,161573,982],{"class":134},[74,161575,84096],{"class":84},[74,161577,161440],{"class":80},[74,161579,1032],{"class":134},[74,161581,337],{"class":190},[74,161583,91],{"class":84},[74,161585,161586,161588,161590,161592,161595,161597,161599,161601,161603],{"class":76,"line":1273},[74,161587,34696],{"class":134},[74,161589,85],{"class":84},[74,161591,138],{"class":80},[74,161593,161594],{"class":190},"\"购买数量:",[74,161596,982],{"class":134},[74,161598,88715],{"class":84},[74,161600,1032],{"class":134},[74,161602,337],{"class":190},[74,161604,91],{"class":84},[74,161606,161607,161609,161611,161613,161616,161618,161621,161623,161625],{"class":76,"line":1279},[74,161608,34696],{"class":134},[74,161610,85],{"class":84},[74,161612,138],{"class":80},[74,161614,161615],{"class":190},"\"折扣:",[74,161617,982],{"class":134},[74,161619,161620],{"class":84},"discount",[74,161622,1032],{"class":134},[74,161624,337],{"class":190},[74,161626,91],{"class":84},[74,161628,161629,161631,161633,161635,161638,161640,161643,161645,161647,161649],{"class":76,"line":1291},[74,161630,34696],{"class":134},[74,161632,85],{"class":84},[74,161634,138],{"class":80},[74,161636,161637],{"class":190},"\"应付金额:",[74,161639,982],{"class":134},[74,161641,161642],{"class":84},"total",[74,161644,161440],{"class":80},[74,161646,1032],{"class":134},[74,161648,161293],{"class":190},[74,161650,91],{"class":84},[14,161652,161654],{"id":161653},"_213-易错点","2.13 易错点",[27,161656,161657,161662,161668,161676,161679],{},[30,161658,161659,161661],{},[71,161660,161304],{}," 的结果是字符串，做运算前要转换。",[30,161663,161664,161665,32666],{},"字符串拼接时，数字要先 ",[71,161666,161667],{},"str()",[30,161669,161670,161672,161673,161675],{},[71,161671,131],{}," 是赋值，",[71,161674,2912],{}," 是比较。",[30,161677,161678],{},"Python 没有自增自减运算符。",[30,161680,161681],{},"浮点数计算可能有精度误差：",[64,161683,161685],{"className":34659,"code":161684,"language":34661,"meta":69,"style":69},"print(0.1 + 0.2)\n",[71,161686,161687],{"__ignoreMap":69},[74,161688,161689,161691,161693,161695,161697,161700],{"class":76,"line":77},[74,161690,34696],{"class":134},[74,161692,85],{"class":84},[74,161694,90491],{"class":134},[74,161696,49847],{"class":80},[74,161698,161699],{"class":134}," 0.2",[74,161701,91],{"class":84},[19,161703,161704,161705,161708],{},"金额计算如果要求严格，可以后续学习 ",[71,161706,161707],{},"decimal"," 模块。",[14,161710,161712],{"id":161711},"_214-本章练习","2.14 本章练习",[27,161714,161715,161718,161721,161724,161727],{},[30,161716,161717],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[30,161719,161720],{},"输入圆的半径，计算面积，保留两位小数。",[30,161722,161723],{},"输入工资和奖金，计算总收入。",[30,161725,161726],{},"输入摄氏温度，转换为华氏温度。",[30,161728,161729],{},"写一个 BMI 计算程序：",[64,161731,161734],{"className":161732,"code":161733,"language":9466,"meta":69},[9464],"BMI = 体重kg \u002F 身高m ** 2\n",[71,161735,161733],{"__ignoreMap":69},[5090,161737,161738],{},"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":69,"searchDepth":94,"depth":94,"links":161740},[161741,161742,161743,161744,161745,161746,161747,161753,161754,161755,161760,161761,161762,161763],{"id":159302,"depth":94,"text":159303},{"id":159411,"depth":94,"text":159412},{"id":159582,"depth":94,"text":159583},{"id":159659,"depth":94,"text":159660},{"id":55012,"depth":94,"text":55013},{"id":159965,"depth":94,"text":159966},{"id":160191,"depth":94,"text":160192,"children":161748},[161749,161750,161751,161752],{"id":160195,"depth":1141,"text":160196},{"id":160389,"depth":1141,"text":160390},{"id":160477,"depth":1141,"text":160478},{"id":160583,"depth":1141,"text":160584},{"id":160692,"depth":94,"text":160693},{"id":160850,"depth":94,"text":160851},{"id":160915,"depth":94,"text":160916,"children":161756},[161757,161758,161759],{"id":160919,"depth":1141,"text":160920},{"id":161064,"depth":1141,"text":161065},{"id":161167,"depth":1141,"text":161168},{"id":161298,"depth":94,"text":161299},{"id":161450,"depth":94,"text":161451},{"id":161653,"depth":94,"text":161654},{"id":161711,"depth":94,"text":161712},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":159294,"description":27656},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":161770,"title":161771,"body":161772,"description":27656,"extension":5121,"meta":163408,"navigation":2362,"path":163409,"seo":163410,"stem":163411,"__hash__":163412},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":161773,"toc":163389},[161774,161777,161781,161784,161799,161802,161830,161834,161884,161886,161902,161905,161931,161934,161938,162005,162008,162024,162028,162031,162149,162152,162159,162208,162214,162218,162221,162334,162337,162341,162345,162348,162398,162402,162405,162455,162459,162462,162500,162504,162507,162553,162556,162591,162595,162600,162603,162649,162651,162718,162722,162728,162839,162848,162852,162854,162865,162867,163033,163037,163039,163053,163055,163269,163273,163292,163309,163312,163358,163362,163386],[10,161775,161771],{"id":161776},"_3-判断语句",[14,161778,161780],{"id":161779},"_31-布尔值","3.1 布尔值",[19,161782,161783],{},"判断语句依赖布尔值：",[64,161785,161787],{"className":34659,"code":161786,"language":34661,"meta":69,"style":69},"True\nFalse\n",[71,161788,161789,161794],{"__ignoreMap":69},[74,161790,161791],{"class":76,"line":77},[74,161792,161793],{"class":134},"True\n",[74,161795,161796],{"class":76,"line":94},[74,161797,161798],{"class":134},"False\n",[19,161800,161801],{},"比较表达式会产生布尔值：",[64,161803,161805],{"className":34659,"code":161804,"language":34661,"meta":69,"style":69},"age = 18\nprint(age >= 18)  # True\n",[71,161806,161807,161815],{"__ignoreMap":69},[74,161808,161809,161811,161813],{"class":76,"line":77},[74,161810,150827],{"class":84},[74,161812,131],{"class":80},[74,161814,150832],{"class":134},[74,161816,161817,161819,161821,161823,161825,161827],{"class":76,"line":94},[74,161818,34696],{"class":134},[74,161820,160049],{"class":84},[74,161822,1672],{"class":80},[74,161824,160566],{"class":134},[74,161826,50089],{"class":84},[74,161828,161829],{"class":144},"# True\n",[14,161831,161833],{"id":161832},"_32-if基础语法","3.2 if基础语法",[64,161835,161837],{"className":34659,"code":161836,"language":34661,"meta":69,"style":69},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[71,161838,161839,161857,161861,161873],{"__ignoreMap":69},[74,161840,161841,161843,161845,161847,161849,161851,161853,161855],{"class":76,"line":77},[74,161842,150827],{"class":84},[74,161844,131],{"class":80},[74,161846,2344],{"class":134},[74,161848,85],{"class":84},[74,161850,58102],{"class":134},[74,161852,85],{"class":84},[74,161854,156675],{"class":190},[74,161856,34778],{"class":84},[74,161858,161859],{"class":76,"line":94},[74,161860,2363],{"emptyLinePlaceholder":2362},[74,161862,161863,161865,161867,161869,161871],{"class":76,"line":1141},[74,161864,1493],{"class":80},[74,161866,19986],{"class":84},[74,161868,1672],{"class":80},[74,161870,160566],{"class":134},[74,161872,3702],{"class":84},[74,161874,161875,161877,161879,161882],{"class":76,"line":1156},[74,161876,35580],{"class":134},[74,161878,85],{"class":84},[74,161880,161881],{"class":190},"\"可以进入网吧\"",[74,161883,91],{"class":84},[19,161885,13304],{},[27,161887,161888,161893,161896,161899],{},[30,161889,161890,161892],{},[71,161891,1493],{}," 后面是条件表达式。",[30,161894,161895],{},"条件后面必须写冒号。",[30,161897,161898],{},"条件成立时执行缩进代码块。",[30,161900,161901],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,161903,161904],{},"错误示例：",[64,161906,161908],{"className":34659,"code":161907,"language":34661,"meta":69,"style":69},"if age >= 18\n    print(\"可以进入\")\n",[71,161909,161910,161920],{"__ignoreMap":69},[74,161911,161912,161914,161916,161918],{"class":76,"line":77},[74,161913,1493],{"class":80},[74,161915,19986],{"class":84},[74,161917,1672],{"class":80},[74,161919,150832],{"class":134},[74,161921,161922,161924,161926,161929],{"class":76,"line":94},[74,161923,35580],{"class":134},[74,161925,85],{"class":84},[74,161927,161928],{"class":190},"\"可以进入\"",[74,161930,91],{"class":84},[19,161932,161933],{},"缺少冒号。",[14,161935,161937],{"id":161936},"_33-if-else","3.3 if else",[64,161939,161941],{"className":34659,"code":161940,"language":34661,"meta":69,"style":69},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[71,161942,161943,161961,161965,161977,161988,161994],{"__ignoreMap":69},[74,161944,161945,161947,161949,161951,161953,161955,161957,161959],{"class":76,"line":77},[74,161946,150827],{"class":84},[74,161948,131],{"class":80},[74,161950,2344],{"class":134},[74,161952,85],{"class":84},[74,161954,58102],{"class":134},[74,161956,85],{"class":84},[74,161958,156675],{"class":190},[74,161960,34778],{"class":84},[74,161962,161963],{"class":76,"line":94},[74,161964,2363],{"emptyLinePlaceholder":2362},[74,161966,161967,161969,161971,161973,161975],{"class":76,"line":1141},[74,161968,1493],{"class":80},[74,161970,19986],{"class":84},[74,161972,1672],{"class":80},[74,161974,160566],{"class":134},[74,161976,3702],{"class":84},[74,161978,161979,161981,161983,161986],{"class":76,"line":1156},[74,161980,35580],{"class":134},[74,161982,85],{"class":84},[74,161984,161985],{"class":190},"\"成年人\"",[74,161987,91],{"class":84},[74,161989,161990,161992],{"class":76,"line":1162},[74,161991,1663],{"class":80},[74,161993,3702],{"class":84},[74,161995,161996,161998,162000,162003],{"class":76,"line":1176},[74,161997,35580],{"class":134},[74,161999,85],{"class":84},[74,162001,162002],{"class":190},"\"未成年人\"",[74,162004,91],{"class":84},[19,162006,162007],{},"执行逻辑：",[27,162009,162010,162016,162021],{},[30,162011,162012,162013,162015],{},"条件成立，执行 ",[71,162014,1493],{}," 代码块。",[30,162017,162018,162019,162015],{},"条件不成立，执行 ",[71,162020,1663],{},[30,162022,162023],{},"两个代码块只会执行其中一个。",[14,162025,162027],{"id":162026},"_34-if-elif-else","3.4 if elif else",[19,162029,162030],{},"多条件判断：",[64,162032,162034],{"className":34659,"code":162033,"language":34661,"meta":69,"style":69},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[71,162035,162036,162054,162058,162072,162083,162097,162108,162121,162132,162138],{"__ignoreMap":69},[74,162037,162038,162040,162042,162044,162046,162048,162050,162052],{"class":76,"line":77},[74,162039,159639],{"class":84},[74,162041,131],{"class":80},[74,162043,2344],{"class":134},[74,162045,85],{"class":84},[74,162047,58102],{"class":134},[74,162049,85],{"class":84},[74,162051,156690],{"class":190},[74,162053,34778],{"class":84},[74,162055,162056],{"class":76,"line":94},[74,162057,2363],{"emptyLinePlaceholder":2362},[74,162059,162060,162062,162065,162067,162070],{"class":76,"line":1141},[74,162061,1493],{"class":80},[74,162063,162064],{"class":84}," score ",[74,162066,1672],{"class":80},[74,162068,162069],{"class":134}," 90",[74,162071,3702],{"class":84},[74,162073,162074,162076,162078,162081],{"class":76,"line":1156},[74,162075,35580],{"class":134},[74,162077,85],{"class":84},[74,162079,162080],{"class":190},"\"优秀\"",[74,162082,91],{"class":84},[74,162084,162085,162088,162090,162092,162095],{"class":76,"line":1162},[74,162086,162087],{"class":80},"elif",[74,162089,162064],{"class":84},[74,162091,1672],{"class":80},[74,162093,162094],{"class":134}," 80",[74,162096,3702],{"class":84},[74,162098,162099,162101,162103,162106],{"class":76,"line":1176},[74,162100,35580],{"class":134},[74,162102,85],{"class":84},[74,162104,162105],{"class":190},"\"良好\"",[74,162107,91],{"class":84},[74,162109,162110,162112,162114,162116,162119],{"class":76,"line":1182},[74,162111,162087],{"class":80},[74,162113,162064],{"class":84},[74,162115,1672],{"class":80},[74,162117,162118],{"class":134}," 60",[74,162120,3702],{"class":84},[74,162122,162123,162125,162127,162130],{"class":76,"line":1273},[74,162124,35580],{"class":134},[74,162126,85],{"class":84},[74,162128,162129],{"class":190},"\"及格\"",[74,162131,91],{"class":84},[74,162133,162134,162136],{"class":76,"line":1279},[74,162135,1663],{"class":80},[74,162137,3702],{"class":84},[74,162139,162140,162142,162144,162147],{"class":76,"line":1291},[74,162141,35580],{"class":134},[74,162143,85],{"class":84},[74,162145,162146],{"class":190},"\"不及格\"",[74,162148,91],{"class":84},[19,162150,162151],{},"注意判断顺序很重要。",[19,162153,162154,162155,162158],{},"如果把 ",[71,162156,162157],{},"score >= 60"," 放在最前面：",[64,162160,162162],{"className":34659,"code":162161,"language":34661,"meta":69,"style":69},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[71,162163,162164,162176,162186,162198],{"__ignoreMap":69},[74,162165,162166,162168,162170,162172,162174],{"class":76,"line":77},[74,162167,1493],{"class":80},[74,162169,162064],{"class":84},[74,162171,1672],{"class":80},[74,162173,162118],{"class":134},[74,162175,3702],{"class":84},[74,162177,162178,162180,162182,162184],{"class":76,"line":94},[74,162179,35580],{"class":134},[74,162181,85],{"class":84},[74,162183,162129],{"class":190},[74,162185,91],{"class":84},[74,162187,162188,162190,162192,162194,162196],{"class":76,"line":1141},[74,162189,162087],{"class":80},[74,162191,162064],{"class":84},[74,162193,1672],{"class":80},[74,162195,162069],{"class":134},[74,162197,3702],{"class":84},[74,162199,162200,162202,162204,162206],{"class":76,"line":1156},[74,162201,35580],{"class":134},[74,162203,85],{"class":84},[74,162205,162080],{"class":190},[74,162207,91],{"class":84},[19,162209,162210,162211,162213],{},"成绩 95 会先满足 ",[71,162212,162157],{},"，后面的优秀分支就不会执行。",[14,162215,162217],{"id":162216},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,162219,162220],{},"嵌套判断就是在一个判断内部再写判断。",[64,162222,162224],{"className":34659,"code":162223,"language":34661,"meta":69,"style":69},"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",[71,162225,162226,162244,162259,162263,162275,162289,162299,162306,162317,162323],{"__ignoreMap":69},[74,162227,162228,162230,162232,162234,162236,162238,162240,162242],{"class":76,"line":77},[74,162229,150827],{"class":84},[74,162231,131],{"class":80},[74,162233,2344],{"class":134},[74,162235,85],{"class":84},[74,162237,58102],{"class":134},[74,162239,85],{"class":84},[74,162241,156675],{"class":190},[74,162243,34778],{"class":84},[74,162245,162246,162248,162250,162252,162254,162257],{"class":76,"line":94},[74,162247,160642],{"class":84},[74,162249,131],{"class":80},[74,162251,64886],{"class":134},[74,162253,85],{"class":84},[74,162255,162256],{"class":190},"\"是否有票(y\u002Fn):\"",[74,162258,91],{"class":84},[74,162260,162261],{"class":76,"line":1141},[74,162262,2363],{"emptyLinePlaceholder":2362},[74,162264,162265,162267,162269,162271,162273],{"class":76,"line":1156},[74,162266,1493],{"class":80},[74,162268,19986],{"class":84},[74,162270,1672],{"class":80},[74,162272,160566],{"class":134},[74,162274,3702],{"class":84},[74,162276,162277,162279,162282,162284,162287],{"class":76,"line":1162},[74,162278,3064],{"class":80},[74,162280,162281],{"class":84}," has_ticket ",[74,162283,2912],{"class":80},[74,162285,162286],{"class":190}," \"y\"",[74,162288,3702],{"class":84},[74,162290,162291,162293,162295,162297],{"class":76,"line":1176},[74,162292,36732],{"class":134},[74,162294,85],{"class":84},[74,162296,161928],{"class":190},[74,162298,91],{"class":84},[74,162300,162301,162304],{"class":76,"line":1182},[74,162302,162303],{"class":80},"    else",[74,162305,3702],{"class":84},[74,162307,162308,162310,162312,162315],{"class":76,"line":1273},[74,162309,36732],{"class":134},[74,162311,85],{"class":84},[74,162313,162314],{"class":190},"\"请先买票\"",[74,162316,91],{"class":84},[74,162318,162319,162321],{"class":76,"line":1279},[74,162320,1663],{"class":80},[74,162322,3702],{"class":84},[74,162324,162325,162327,162329,162332],{"class":76,"line":1291},[74,162326,35580],{"class":134},[74,162328,85],{"class":84},[74,162330,162331],{"class":190},"\"未成年人禁止进入\"",[74,162333,91],{"class":84},[19,162335,162336],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,162338,162340],{"id":162339},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[44,162342,162344],{"id":162343},"_361-and","3.6.1 and",[19,162346,162347],{},"两个条件都成立才成立。",[64,162349,162351],{"className":34659,"code":162350,"language":34661,"meta":69,"style":69},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[71,162352,162353,162361,162369,162373,162388],{"__ignoreMap":69},[74,162354,162355,162357,162359],{"class":76,"line":77},[74,162356,150827],{"class":84},[74,162358,131],{"class":80},[74,162360,92346],{"class":134},[74,162362,162363,162365,162367],{"class":76,"line":94},[74,162364,160642],{"class":84},[74,162366,131],{"class":80},[74,162368,157880],{"class":134},[74,162370,162371],{"class":76,"line":1141},[74,162372,2363],{"emptyLinePlaceholder":2362},[74,162374,162375,162377,162379,162381,162383,162385],{"class":76,"line":1156},[74,162376,1493],{"class":80},[74,162378,19986],{"class":84},[74,162380,1672],{"class":80},[74,162382,160566],{"class":134},[74,162384,124710],{"class":80},[74,162386,162387],{"class":84}," has_ticket:\n",[74,162389,162390,162392,162394,162396],{"class":76,"line":1162},[74,162391,35580],{"class":134},[74,162393,85],{"class":84},[74,162395,161928],{"class":190},[74,162397,91],{"class":84},[44,162399,162401],{"id":162400},"_362-or","3.6.2 or",[19,162403,162404],{},"只要一个条件成立就成立。",[64,162406,162408],{"className":34659,"code":162407,"language":34661,"meta":69,"style":69},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[71,162409,162410,162419,162428,162432,162444],{"__ignoreMap":69},[74,162411,162412,162415,162417],{"class":76,"line":77},[74,162413,162414],{"class":84},"is_vip ",[74,162416,131],{"class":80},[74,162418,130088],{"class":134},[74,162420,162421,162424,162426],{"class":76,"line":94},[74,162422,162423],{"class":84},"coupon ",[74,162425,131],{"class":80},[74,162427,157880],{"class":134},[74,162429,162430],{"class":76,"line":1141},[74,162431,2363],{"emptyLinePlaceholder":2362},[74,162433,162434,162436,162439,162441],{"class":76,"line":1156},[74,162435,1493],{"class":80},[74,162437,162438],{"class":84}," is_vip ",[74,162440,119371],{"class":80},[74,162442,162443],{"class":84}," coupon:\n",[74,162445,162446,162448,162450,162453],{"class":76,"line":1162},[74,162447,35580],{"class":134},[74,162449,85],{"class":84},[74,162451,162452],{"class":190},"\"可以享受优惠\"",[74,162454,91],{"class":84},[44,162456,162458],{"id":162457},"_363-not","3.6.3 not",[19,162460,162461],{},"取反。",[64,162463,162465],{"className":34659,"code":162464,"language":34661,"meta":69,"style":69},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[71,162466,162467,162476,162480,162489],{"__ignoreMap":69},[74,162468,162469,162472,162474],{"class":76,"line":77},[74,162470,162471],{"class":84},"is_closed ",[74,162473,131],{"class":80},[74,162475,130088],{"class":134},[74,162477,162478],{"class":76,"line":94},[74,162479,2363],{"emptyLinePlaceholder":2362},[74,162481,162482,162484,162486],{"class":76,"line":1141},[74,162483,1493],{"class":80},[74,162485,43211],{"class":80},[74,162487,162488],{"class":84}," is_closed:\n",[74,162490,162491,162493,162495,162498],{"class":76,"line":1156},[74,162492,35580],{"class":134},[74,162494,85],{"class":84},[74,162496,162497],{"class":190},"\"店铺营业中\"",[74,162499,91],{"class":84},[14,162501,162503],{"id":162502},"_37-链式比较","3.7 链式比较",[19,162505,162506],{},"Python 支持链式比较：",[64,162508,162510],{"className":34659,"code":162509,"language":34661,"meta":69,"style":69},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[71,162511,162512,162521,162525,162542],{"__ignoreMap":69},[74,162513,162514,162516,162518],{"class":76,"line":77},[74,162515,159639],{"class":84},[74,162517,131],{"class":80},[74,162519,162520],{"class":134}," 85\n",[74,162522,162523],{"class":76,"line":94},[74,162524,2363],{"emptyLinePlaceholder":2362},[74,162526,162527,162529,162531,162534,162536,162538,162540],{"class":76,"line":1141},[74,162528,1493],{"class":80},[74,162530,4056],{"class":134},[74,162532,162533],{"class":80}," \u003C=",[74,162535,162064],{"class":84},[74,162537,1550],{"class":80},[74,162539,10033],{"class":134},[74,162541,3702],{"class":84},[74,162543,162544,162546,162548,162551],{"class":76,"line":1156},[74,162545,35580],{"class":134},[74,162547,85],{"class":84},[74,162549,162550],{"class":190},"\"成绩合法\"",[74,162552,91],{"class":84},[19,162554,162555],{},"等价于：",[64,162557,162559],{"className":34659,"code":162558,"language":34661,"meta":69,"style":69},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[71,162560,162561,162581],{"__ignoreMap":69},[74,162562,162563,162565,162567,162569,162571,162573,162575,162577,162579],{"class":76,"line":77},[74,162564,1493],{"class":80},[74,162566,162064],{"class":84},[74,162568,1672],{"class":80},[74,162570,4056],{"class":134},[74,162572,124710],{"class":80},[74,162574,162064],{"class":84},[74,162576,1550],{"class":80},[74,162578,10033],{"class":134},[74,162580,3702],{"class":84},[74,162582,162583,162585,162587,162589],{"class":76,"line":94},[74,162584,35580],{"class":134},[74,162586,85],{"class":84},[74,162588,162550],{"class":190},[74,162590,91],{"class":84},[14,162592,162594],{"id":162593},"_38-真值和假值","3.8 真值和假值",[19,162596,120748,162597,162599],{},[71,162598,1493],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,162601,162602],{},"假值：",[64,162604,162606],{"className":34659,"code":162605,"language":34661,"meta":69,"style":69},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[71,162607,162608,162612,162617,162621,162625,162630,162634,162638,162643],{"__ignoreMap":69},[74,162609,162610],{"class":76,"line":77},[74,162611,161798],{"class":134},[74,162613,162614],{"class":76,"line":94},[74,162615,162616],{"class":134},"None\n",[74,162618,162619],{"class":76,"line":1141},[74,162620,3048],{"class":134},[74,162622,162623],{"class":76,"line":1156},[74,162624,36623],{"class":134},[74,162626,162627],{"class":76,"line":1162},[74,162628,162629],{"class":190},"\"\"\n",[74,162631,162632],{"class":76,"line":1176},[74,162633,36638],{"class":84},[74,162635,162636],{"class":76,"line":1182},[74,162637,1938],{"class":84},[74,162639,162640],{"class":76,"line":1273},[74,162641,162642],{"class":84},"{}\n",[74,162644,162645,162647],{"class":76,"line":1279},[74,162646,159571],{"class":134},[74,162648,1938],{"class":84},[19,162650,19414],{},[64,162652,162654],{"className":34659,"code":162653,"language":34661,"meta":69,"style":69},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[71,162655,162656,162670,162674,162681,162701,162707],{"__ignoreMap":69},[74,162657,162658,162660,162662,162664,162666,162668],{"class":76,"line":77},[74,162659,150817],{"class":84},[74,162661,131],{"class":80},[74,162663,64886],{"class":134},[74,162665,85],{"class":84},[74,162667,156660],{"class":190},[74,162669,91],{"class":84},[74,162671,162672],{"class":76,"line":94},[74,162673,2363],{"emptyLinePlaceholder":2362},[74,162675,162676,162678],{"class":76,"line":1141},[74,162677,1493],{"class":80},[74,162679,162680],{"class":84}," name:\n",[74,162682,162683,162685,162687,162689,162691,162693,162695,162697,162699],{"class":76,"line":1156},[74,162684,35580],{"class":134},[74,162686,85],{"class":84},[74,162688,138],{"class":80},[74,162690,161335],{"class":190},[74,162692,982],{"class":134},[74,162694,84091],{"class":84},[74,162696,1032],{"class":134},[74,162698,337],{"class":190},[74,162700,91],{"class":84},[74,162702,162703,162705],{"class":76,"line":1162},[74,162704,1663],{"class":80},[74,162706,3702],{"class":84},[74,162708,162709,162711,162713,162716],{"class":76,"line":1176},[74,162710,35580],{"class":134},[74,162712,85],{"class":84},[74,162714,162715],{"class":190},"\"姓名不能为空\"",[74,162717,91],{"class":84},[14,162719,162721],{"id":162720},"_39-match语句","3.9 match语句",[19,162723,162724,162725,162727],{},"Python 3.10 开始支持 ",[71,162726,75546],{},"。它适合处理固定选项。",[64,162729,162731],{"className":34659,"code":162730,"language":34661,"meta":69,"style":69},"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",[71,162732,162733,162749,162753,162760,162770,162781,162790,162801,162810,162821,162828],{"__ignoreMap":69},[74,162734,162735,162738,162740,162742,162744,162747],{"class":76,"line":77},[74,162736,162737],{"class":84},"command ",[74,162739,131],{"class":80},[74,162741,64886],{"class":134},[74,162743,85],{"class":84},[74,162745,162746],{"class":190},"\"请输入命令:\"",[74,162748,91],{"class":84},[74,162750,162751],{"class":76,"line":94},[74,162752,2363],{"emptyLinePlaceholder":2362},[74,162754,162755,162757],{"class":76,"line":1141},[74,162756,75546],{"class":80},[74,162758,162759],{"class":84}," command:\n",[74,162761,162762,162765,162768],{"class":76,"line":1156},[74,162763,162764],{"class":80},"    case",[74,162766,162767],{"class":190}," \"start\"",[74,162769,3702],{"class":84},[74,162771,162772,162774,162776,162779],{"class":76,"line":1162},[74,162773,36732],{"class":134},[74,162775,85],{"class":84},[74,162777,162778],{"class":190},"\"启动\"",[74,162780,91],{"class":84},[74,162782,162783,162785,162788],{"class":76,"line":1176},[74,162784,162764],{"class":80},[74,162786,162787],{"class":190}," \"stop\"",[74,162789,3702],{"class":84},[74,162791,162792,162794,162796,162799],{"class":76,"line":1182},[74,162793,36732],{"class":134},[74,162795,85],{"class":84},[74,162797,162798],{"class":190},"\"停止\"",[74,162800,91],{"class":84},[74,162802,162803,162805,162808],{"class":76,"line":1273},[74,162804,162764],{"class":80},[74,162806,162807],{"class":190}," \"restart\"",[74,162809,3702],{"class":84},[74,162811,162812,162814,162816,162819],{"class":76,"line":1279},[74,162813,36732],{"class":134},[74,162815,85],{"class":84},[74,162817,162818],{"class":190},"\"重启\"",[74,162820,91],{"class":84},[74,162822,162823,162825],{"class":76,"line":1291},[74,162824,162764],{"class":80},[74,162826,162827],{"class":84}," _:\n",[74,162829,162830,162832,162834,162837],{"class":76,"line":1574},[74,162831,36732],{"class":134},[74,162833,85],{"class":84},[74,162835,162836],{"class":190},"\"未知命令\"",[74,162838,91],{"class":84},[19,162840,162841,162842,162844,162845,162847],{},"入门阶段掌握 ",[71,162843,158939],{}," 更重要，",[71,162846,75546],{}," 可以作为补充。",[14,162849,162851],{"id":162850},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,162853,127573],{},[27,162855,162856,162859,162862],{},[30,162857,162858],{},"输入成绩。",[30,162860,162861],{},"判断成绩是否合法。",[30,162863,162864],{},"输出等级。",[19,162866,14314],{},[64,162868,162870],{"className":34659,"code":162869,"language":34661,"meta":69,"style":69},"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",[71,162871,162872,162890,162894,162912,162923,162935,162946,162958,162969,162982,162993,163005,163016,163022],{"__ignoreMap":69},[74,162873,162874,162876,162878,162880,162882,162884,162886,162888],{"class":76,"line":77},[74,162875,159639],{"class":84},[74,162877,131],{"class":80},[74,162879,114078],{"class":134},[74,162881,85],{"class":84},[74,162883,58102],{"class":134},[74,162885,85],{"class":84},[74,162887,156690],{"class":190},[74,162889,34778],{"class":84},[74,162891,162892],{"class":76,"line":94},[74,162893,2363],{"emptyLinePlaceholder":2362},[74,162895,162896,162898,162900,162902,162904,162906,162908,162910],{"class":76,"line":1141},[74,162897,1493],{"class":80},[74,162899,43211],{"class":80},[74,162901,4056],{"class":134},[74,162903,162533],{"class":80},[74,162905,162064],{"class":84},[74,162907,1550],{"class":80},[74,162909,10033],{"class":134},[74,162911,3702],{"class":84},[74,162913,162914,162916,162918,162921],{"class":76,"line":1156},[74,162915,35580],{"class":134},[74,162917,85],{"class":84},[74,162919,162920],{"class":190},"\"成绩不合法\"",[74,162922,91],{"class":84},[74,162924,162925,162927,162929,162931,162933],{"class":76,"line":1162},[74,162926,162087],{"class":80},[74,162928,162064],{"class":84},[74,162930,1672],{"class":80},[74,162932,162069],{"class":134},[74,162934,3702],{"class":84},[74,162936,162937,162939,162941,162944],{"class":76,"line":1176},[74,162938,35580],{"class":134},[74,162940,85],{"class":84},[74,162942,162943],{"class":190},"\"等级:A\"",[74,162945,91],{"class":84},[74,162947,162948,162950,162952,162954,162956],{"class":76,"line":1182},[74,162949,162087],{"class":80},[74,162951,162064],{"class":84},[74,162953,1672],{"class":80},[74,162955,162094],{"class":134},[74,162957,3702],{"class":84},[74,162959,162960,162962,162964,162967],{"class":76,"line":1273},[74,162961,35580],{"class":134},[74,162963,85],{"class":84},[74,162965,162966],{"class":190},"\"等级:B\"",[74,162968,91],{"class":84},[74,162970,162971,162973,162975,162977,162980],{"class":76,"line":1279},[74,162972,162087],{"class":80},[74,162974,162064],{"class":84},[74,162976,1672],{"class":80},[74,162978,162979],{"class":134}," 70",[74,162981,3702],{"class":84},[74,162983,162984,162986,162988,162991],{"class":76,"line":1291},[74,162985,35580],{"class":134},[74,162987,85],{"class":84},[74,162989,162990],{"class":190},"\"等级:C\"",[74,162992,91],{"class":84},[74,162994,162995,162997,162999,163001,163003],{"class":76,"line":1574},[74,162996,162087],{"class":80},[74,162998,162064],{"class":84},[74,163000,1672],{"class":80},[74,163002,162118],{"class":134},[74,163004,3702],{"class":84},[74,163006,163007,163009,163011,163014],{"class":76,"line":1579},[74,163008,35580],{"class":134},[74,163010,85],{"class":84},[74,163012,163013],{"class":190},"\"等级:D\"",[74,163015,91],{"class":84},[74,163017,163018,163020],{"class":76,"line":1585},[74,163019,1663],{"class":80},[74,163021,3702],{"class":84},[74,163023,163024,163026,163028,163031],{"class":76,"line":1590},[74,163025,35580],{"class":134},[74,163027,85],{"class":84},[74,163029,163030],{"class":190},"\"等级:E\"",[74,163032,91],{"class":84},[14,163034,163036],{"id":163035},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,163038,127573],{},[27,163040,163041,163044,163047,163050],{},[30,163042,163043],{},"输入消费金额。",[30,163045,163046],{},"输入会员等级，普通、银卡、金卡。",[30,163048,163049],{},"普通不打折，银卡 9 折，金卡 8 折。",[30,163051,163052],{},"满 500 再减 50。",[19,163054,14314],{},[64,163056,163058],{"className":34659,"code":163057,"language":34661,"meta":69,"style":69},"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",[71,163059,163060,163080,163096,163100,163108,163112,163126,163136,163149,163158,163171,163179,163185,163196,163200,163214,163218,163232,163242,163246],{"__ignoreMap":69},[74,163061,163062,163065,163067,163069,163071,163073,163075,163078],{"class":76,"line":77},[74,163063,163064],{"class":84},"amount ",[74,163066,131],{"class":80},[74,163068,114078],{"class":134},[74,163070,85],{"class":84},[74,163072,58102],{"class":134},[74,163074,85],{"class":84},[74,163076,163077],{"class":190},"\"请输入消费金额:\"",[74,163079,34778],{"class":84},[74,163081,163082,163085,163087,163089,163091,163094],{"class":76,"line":94},[74,163083,163084],{"class":84},"level ",[74,163086,131],{"class":80},[74,163088,64886],{"class":134},[74,163090,85],{"class":84},[74,163092,163093],{"class":190},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[74,163095,91],{"class":84},[74,163097,163098],{"class":76,"line":1141},[74,163099,2363],{"emptyLinePlaceholder":2362},[74,163101,163102,163104,163106],{"class":76,"line":1156},[74,163103,161517],{"class":84},[74,163105,131],{"class":80},[74,163107,59980],{"class":134},[74,163109,163110],{"class":76,"line":1162},[74,163111,2363],{"emptyLinePlaceholder":2362},[74,163113,163114,163116,163119,163121,163124],{"class":76,"line":1176},[74,163115,1493],{"class":80},[74,163117,163118],{"class":84}," level ",[74,163120,2912],{"class":80},[74,163122,163123],{"class":190}," \"银卡\"",[74,163125,3702],{"class":84},[74,163127,163128,163131,163133],{"class":76,"line":1182},[74,163129,163130],{"class":84},"    discount ",[74,163132,131],{"class":80},[74,163134,163135],{"class":134}," 0.9\n",[74,163137,163138,163140,163142,163144,163147],{"class":76,"line":1273},[74,163139,162087],{"class":80},[74,163141,163118],{"class":84},[74,163143,2912],{"class":80},[74,163145,163146],{"class":190}," \"金卡\"",[74,163148,3702],{"class":84},[74,163150,163151,163153,163155],{"class":76,"line":1279},[74,163152,163130],{"class":84},[74,163154,131],{"class":80},[74,163156,163157],{"class":134}," 0.8\n",[74,163159,163160,163162,163164,163166,163169],{"class":76,"line":1291},[74,163161,162087],{"class":80},[74,163163,163118],{"class":84},[74,163165,2912],{"class":80},[74,163167,163168],{"class":190}," \"普通\"",[74,163170,3702],{"class":84},[74,163172,163173,163175,163177],{"class":76,"line":1574},[74,163174,163130],{"class":84},[74,163176,131],{"class":80},[74,163178,59980],{"class":134},[74,163180,163181,163183],{"class":76,"line":1579},[74,163182,1663],{"class":80},[74,163184,3702],{"class":84},[74,163186,163187,163189,163191,163194],{"class":76,"line":1585},[74,163188,35580],{"class":134},[74,163190,85],{"class":84},[74,163192,163193],{"class":190},"\"会员等级输入错误，按普通会员计算\"",[74,163195,91],{"class":84},[74,163197,163198],{"class":76,"line":1590},[74,163199,2363],{"emptyLinePlaceholder":2362},[74,163201,163202,163205,163207,163210,163212],{"class":76,"line":1604},[74,163203,163204],{"class":84},"pay ",[74,163206,131],{"class":80},[74,163208,163209],{"class":84}," amount ",[74,163211,541],{"class":80},[74,163213,161556],{"class":84},[74,163215,163216],{"class":76,"line":1609},[74,163217,2363],{"emptyLinePlaceholder":2362},[74,163219,163220,163222,163225,163227,163230],{"class":76,"line":1615},[74,163221,1493],{"class":80},[74,163223,163224],{"class":84}," pay ",[74,163226,1672],{"class":80},[74,163228,163229],{"class":134}," 500",[74,163231,3702],{"class":84},[74,163233,163234,163237,163239],{"class":76,"line":1636},[74,163235,163236],{"class":84},"    pay ",[74,163238,154533],{"class":80},[74,163240,163241],{"class":134}," 50\n",[74,163243,163244],{"class":76,"line":1641},[74,163245,2363],{"emptyLinePlaceholder":2362},[74,163247,163248,163250,163252,163254,163256,163258,163261,163263,163265,163267],{"class":76,"line":1655},[74,163249,34696],{"class":134},[74,163251,85],{"class":84},[74,163253,138],{"class":80},[74,163255,161637],{"class":190},[74,163257,982],{"class":134},[74,163259,163260],{"class":84},"pay",[74,163262,161440],{"class":80},[74,163264,1032],{"class":134},[74,163266,161293],{"class":190},[74,163268,91],{"class":84},[14,163270,163272],{"id":163271},"_312-易错点","3.12 易错点",[27,163274,163275,163278,163281,163284,163289],{},[30,163276,163277],{},"冒号不能漏。",[30,163279,163280],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[30,163282,163283],{},"多分支判断要注意顺序。",[30,163285,163286,163287,32666],{},"判断相等用 ",[71,163288,2912],{},[30,163290,163291],{},"字符串比较区分大小写：",[64,163293,163295],{"className":34659,"code":163294,"language":34661,"meta":69,"style":69},"\"Y\" == \"y\"  # False\n",[71,163296,163297],{"__ignoreMap":69},[74,163298,163299,163302,163304,163306],{"class":76,"line":77},[74,163300,163301],{"class":190},"\"Y\"",[74,163303,105840],{"class":80},[74,163305,162286],{"class":190},[74,163307,163308],{"class":144},"  # False\n",[19,163310,163311],{},"可转换后再判断：",[64,163313,163315],{"className":34659,"code":163314,"language":34661,"meta":69,"style":69},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[71,163316,163317,163334,163347],{"__ignoreMap":69},[74,163318,163319,163322,163324,163326,163328,163331],{"class":76,"line":77},[74,163320,163321],{"class":84},"answer ",[74,163323,131],{"class":80},[74,163325,64886],{"class":134},[74,163327,85],{"class":84},[74,163329,163330],{"class":190},"\"是否继续(y\u002Fn):\"",[74,163332,163333],{"class":84},").lower()\n",[74,163335,163336,163338,163341,163343,163345],{"class":76,"line":94},[74,163337,1493],{"class":80},[74,163339,163340],{"class":84}," answer ",[74,163342,2912],{"class":80},[74,163344,162286],{"class":190},[74,163346,3702],{"class":84},[74,163348,163349,163351,163353,163356],{"class":76,"line":1141},[74,163350,35580],{"class":134},[74,163352,85],{"class":84},[74,163354,163355],{"class":190},"\"继续\"",[74,163357,91],{"class":84},[14,163359,163361],{"id":163360},"_313-本章练习","3.13 本章练习",[27,163363,163364,163367,163370,163373,163383],{},[30,163365,163366],{},"输入年龄，判断是否成年。",[30,163368,163369],{},"输入年份，判断是否为闰年。",[30,163371,163372],{},"输入三个数字，输出最大值。",[30,163374,163375,163376,163379,163380,163382],{},"写登录判断：用户名是 ",[71,163377,163378],{},"admin"," 且密码是 ",[71,163381,19363],{}," 才登录成功。",[30,163384,163385],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5090,163387,163388],{},"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":69,"searchDepth":94,"depth":94,"links":163390},[163391,163392,163393,163394,163395,163396,163401,163402,163403,163404,163405,163406,163407],{"id":161779,"depth":94,"text":161780},{"id":161832,"depth":94,"text":161833},{"id":161936,"depth":94,"text":161937},{"id":162026,"depth":94,"text":162027},{"id":162216,"depth":94,"text":162217},{"id":162339,"depth":94,"text":162340,"children":163397},[163398,163399,163400],{"id":162343,"depth":1141,"text":162344},{"id":162400,"depth":1141,"text":162401},{"id":162457,"depth":1141,"text":162458},{"id":162502,"depth":94,"text":162503},{"id":162593,"depth":94,"text":162594},{"id":162720,"depth":94,"text":162721},{"id":162850,"depth":94,"text":162851},{"id":163035,"depth":94,"text":163036},{"id":163271,"depth":94,"text":163272},{"id":163360,"depth":94,"text":163361},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":161771,"description":27656},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":163414,"title":163415,"body":163416,"description":27656,"extension":5121,"meta":165185,"navigation":2362,"path":165186,"seo":165187,"stem":165188,"__hash__":165189},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":163417,"toc":165165},[163418,163421,163425,163431,163434,163451,163455,163457,163474,163476,163521,163523,163540,163544,163547,163613,163616,163634,163638,163799,163808,163812,163816,163821,163868,163870,163876,163880,163885,163932,163934,163940,163944,163949,163985,163988,164035,164039,164045,164103,164108,164139,164144,164148,164203,164206,164278,164281,164340,164344,164347,164422,164425,164429,164535,164538,164564,164568,164580,164649,164652,164744,164748,164750,164761,164763,164893,164897,165099,165107,165111,165141,165145,165162],[10,163419,163415],{"id":163420},"_4-循环语句",[14,163422,163424],{"id":163423},"_41-为什么需要循环","4.1 为什么需要循环",[19,163426,163427,163428,163430],{},"如果要输出 1 到 100，不应该写 100 行 ",[71,163429,150753],{},"，而应该用循环。",[19,163432,163433],{},"循环适合处理重复任务：",[27,163435,163436,163439,163442,163445,163448],{},[30,163437,163438],{},"重复输出。",[30,163440,163441],{},"重复输入。",[30,163443,163444],{},"遍历数据。",[30,163446,163447],{},"持续执行菜单。",[30,163449,163450],{},"批量处理文件或数据。",[14,163452,163454],{"id":163453},"_42-while循环","4.2 while循环",[19,163456,9460],{},[64,163458,163460],{"className":34659,"code":163459,"language":34661,"meta":69,"style":69},"while 条件:\n    循环体\n",[71,163461,163462,163469],{"__ignoreMap":69},[74,163463,163464,163466],{"class":76,"line":77},[74,163465,112944],{"class":80},[74,163467,163468],{"class":84}," 条件:\n",[74,163470,163471],{"class":76,"line":94},[74,163472,163473],{"class":84},"    循环体\n",[19,163475,19414],{},[64,163477,163479],{"className":34659,"code":163478,"language":34661,"meta":69,"style":69},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[71,163480,163481,163489,163493,163505,163512],{"__ignoreMap":69},[74,163482,163483,163485,163487],{"class":76,"line":77},[74,163484,104429],{"class":84},[74,163486,131],{"class":80},[74,163488,59980],{"class":134},[74,163490,163491],{"class":76,"line":94},[74,163492,2363],{"emptyLinePlaceholder":2362},[74,163494,163495,163497,163499,163501,163503],{"class":76,"line":1141},[74,163496,112944],{"class":80},[74,163498,13717],{"class":84},[74,163500,1550],{"class":80},[74,163502,2110],{"class":134},[74,163504,3702],{"class":84},[74,163506,163507,163509],{"class":76,"line":1156},[74,163508,35580],{"class":134},[74,163510,163511],{"class":84},"(i)\n",[74,163513,163514,163517,163519],{"class":76,"line":1162},[74,163515,163516],{"class":84},"    i ",[74,163518,13756],{"class":80},[74,163520,59980],{"class":134},[19,163522,85210],{},[27,163524,163525,163531,163534,163537],{},[30,163526,163527,163528,32666],{},"判断条件 ",[71,163529,163530],{},"i \u003C= 5",[30,163532,163533],{},"条件成立，执行循环体。",[30,163535,163536],{},"执行完后回到条件判断。",[30,163538,163539],{},"条件不成立，退出循环。",[14,163541,163543],{"id":163542},"_43-while累加","4.3 while累加",[19,163545,163546],{},"计算 1 到 100 的和：",[64,163548,163550],{"className":34659,"code":163549,"language":34661,"meta":69,"style":69},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[71,163551,163552,163560,163568,163572,163584,163594,163602,163606],{"__ignoreMap":69},[74,163553,163554,163556,163558],{"class":76,"line":77},[74,163555,104429],{"class":84},[74,163557,131],{"class":80},[74,163559,59980],{"class":134},[74,163561,163562,163564,163566],{"class":76,"line":94},[74,163563,161541],{"class":84},[74,163565,131],{"class":80},[74,163567,51614],{"class":134},[74,163569,163570],{"class":76,"line":1141},[74,163571,2363],{"emptyLinePlaceholder":2362},[74,163573,163574,163576,163578,163580,163582],{"class":76,"line":1156},[74,163575,112944],{"class":80},[74,163577,13717],{"class":84},[74,163579,1550],{"class":80},[74,163581,10033],{"class":134},[74,163583,3702],{"class":84},[74,163585,163586,163589,163591],{"class":76,"line":1162},[74,163587,163588],{"class":84},"    total ",[74,163590,13756],{"class":80},[74,163592,163593],{"class":84}," i\n",[74,163595,163596,163598,163600],{"class":76,"line":1176},[74,163597,163516],{"class":84},[74,163599,13756],{"class":80},[74,163601,59980],{"class":134},[74,163603,163604],{"class":76,"line":1182},[74,163605,2363],{"emptyLinePlaceholder":2362},[74,163607,163608,163610],{"class":76,"line":1273},[74,163609,34696],{"class":134},[74,163611,163612],{"class":84},"(total)\n",[19,163614,163615],{},"核心思想：",[27,163617,163618,163623,163628],{},[30,163619,163620,163622],{},[71,163621,527],{}," 控制循环次数。",[30,163624,163625,163627],{},[71,163626,161642],{}," 保存累加结果。",[30,163629,163630,163631,163633],{},"每轮循环都要更新 ",[71,163632,527],{},"，否则可能死循环。",[14,163635,163637],{"id":163636},"_44-while猜数字","4.4 while猜数字",[64,163639,163641],{"className":34659,"code":163640,"language":34661,"meta":69,"style":69},"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",[71,163642,163643,163649,163653,163670,163678,163682,163690,163710,163719,163723,163735,163746,163756,163767,163773,163795],{"__ignoreMap":69},[74,163644,163645,163647],{"class":76,"line":77},[74,163646,34673],{"class":80},[74,163648,49609],{"class":84},[74,163650,163651],{"class":76,"line":94},[74,163652,2363],{"emptyLinePlaceholder":2362},[74,163654,163655,163657,163659,163662,163664,163666,163668],{"class":76,"line":1141},[74,163656,163321],{"class":84},[74,163658,131],{"class":80},[74,163660,163661],{"class":84}," random.randint(",[74,163663,303],{"class":134},[74,163665,16714],{"class":84},[74,163667,397],{"class":134},[74,163669,91],{"class":84},[74,163671,163672,163674,163676],{"class":76,"line":1156},[74,163673,150972],{"class":84},[74,163675,131],{"class":80},[74,163677,51614],{"class":134},[74,163679,163680],{"class":76,"line":1162},[74,163681,2363],{"emptyLinePlaceholder":2362},[74,163683,163684,163686,163688],{"class":76,"line":1176},[74,163685,112944],{"class":80},[74,163687,99573],{"class":134},[74,163689,3702],{"class":84},[74,163691,163692,163695,163697,163699,163701,163703,163705,163708],{"class":76,"line":1182},[74,163693,163694],{"class":84},"    guess ",[74,163696,131],{"class":80},[74,163698,2344],{"class":134},[74,163700,85],{"class":84},[74,163702,58102],{"class":134},[74,163704,85],{"class":84},[74,163706,163707],{"class":190},"\"请输入1到100之间的数字:\"",[74,163709,34778],{"class":84},[74,163711,163712,163715,163717],{"class":76,"line":1273},[74,163713,163714],{"class":84},"    count ",[74,163716,13756],{"class":80},[74,163718,59980],{"class":134},[74,163720,163721],{"class":76,"line":1279},[74,163722,2363],{"emptyLinePlaceholder":2362},[74,163724,163725,163727,163730,163732],{"class":76,"line":1291},[74,163726,3064],{"class":80},[74,163728,163729],{"class":84}," guess ",[74,163731,1046],{"class":80},[74,163733,163734],{"class":84}," answer:\n",[74,163736,163737,163739,163741,163744],{"class":76,"line":1574},[74,163738,36732],{"class":134},[74,163740,85],{"class":84},[74,163742,163743],{"class":190},"\"猜大了\"",[74,163745,91],{"class":84},[74,163747,163748,163750,163752,163754],{"class":76,"line":1579},[74,163749,43574],{"class":80},[74,163751,163729],{"class":84},[74,163753,996],{"class":80},[74,163755,163734],{"class":84},[74,163757,163758,163760,163762,163765],{"class":76,"line":1585},[74,163759,36732],{"class":134},[74,163761,85],{"class":84},[74,163763,163764],{"class":190},"\"猜小了\"",[74,163766,91],{"class":84},[74,163768,163769,163771],{"class":76,"line":1590},[74,163770,162303],{"class":80},[74,163772,3702],{"class":84},[74,163774,163775,163777,163779,163781,163784,163786,163788,163790,163793],{"class":76,"line":1604},[74,163776,36732],{"class":134},[74,163778,85],{"class":84},[74,163780,138],{"class":80},[74,163782,163783],{"class":190},"\"猜对了，一共猜了",[74,163785,982],{"class":134},[74,163787,88715],{"class":84},[74,163789,1032],{"class":134},[74,163791,163792],{"class":190},"次\"",[74,163794,91],{"class":84},[74,163796,163797],{"class":76,"line":1609},[74,163798,35908],{"class":80},[19,163800,163801,163804,163805,163807],{},[71,163802,163803],{},"while True"," 表示无限循环，通常配合 ",[71,163806,2015],{}," 使用。",[14,163809,163811],{"id":163810},"_45-break和continue","4.5 break和continue",[44,163813,163815],{"id":163814},"_451-break","4.5.1 break",[19,163817,163818,163820],{},[71,163819,2015],{}," 直接结束整个循环。",[64,163822,163824],{"className":34659,"code":163823,"language":34661,"meta":69,"style":69},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[71,163825,163826,163846,163858,163862],{"__ignoreMap":69},[74,163827,163828,163830,163832,163834,163836,163838,163840,163842,163844],{"class":76,"line":77},[74,163829,2988],{"class":80},[74,163831,13717],{"class":84},[74,163833,30324],{"class":80},[74,163835,36724],{"class":134},[74,163837,85],{"class":84},[74,163839,303],{"class":134},[74,163841,16714],{"class":84},[74,163843,430],{"class":134},[74,163845,35067],{"class":84},[74,163847,163848,163850,163852,163854,163856],{"class":76,"line":94},[74,163849,3064],{"class":80},[74,163851,13717],{"class":84},[74,163853,2912],{"class":80},[74,163855,82351],{"class":134},[74,163857,3702],{"class":84},[74,163859,163860],{"class":76,"line":1141},[74,163861,35908],{"class":80},[74,163863,163864,163866],{"class":76,"line":1156},[74,163865,35580],{"class":134},[74,163867,163511],{"class":84},[19,163869,150738],{},[64,163871,163874],{"className":163872,"code":163873,"language":9466,"meta":69},[9464],"1\n2\n",[71,163875,163873],{"__ignoreMap":69},[44,163877,163879],{"id":163878},"_452-continue","4.5.2 continue",[19,163881,163882,163884],{},[71,163883,158953],{}," 跳过本轮剩余代码，进入下一轮循环。",[64,163886,163888],{"className":34659,"code":163887,"language":34661,"meta":69,"style":69},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[71,163889,163890,163910,163922,163926],{"__ignoreMap":69},[74,163891,163892,163894,163896,163898,163900,163902,163904,163906,163908],{"class":76,"line":77},[74,163893,2988],{"class":80},[74,163895,13717],{"class":84},[74,163897,30324],{"class":80},[74,163899,36724],{"class":134},[74,163901,85],{"class":84},[74,163903,303],{"class":134},[74,163905,16714],{"class":84},[74,163907,430],{"class":134},[74,163909,35067],{"class":84},[74,163911,163912,163914,163916,163918,163920],{"class":76,"line":94},[74,163913,3064],{"class":80},[74,163915,13717],{"class":84},[74,163917,2912],{"class":80},[74,163919,82351],{"class":134},[74,163921,3702],{"class":84},[74,163923,163924],{"class":76,"line":1141},[74,163925,152793],{"class":80},[74,163927,163928,163930],{"class":76,"line":1156},[74,163929,35580],{"class":134},[74,163931,163511],{"class":84},[19,163933,150738],{},[64,163935,163938],{"className":163936,"code":163937,"language":9466,"meta":69},[9464],"1\n2\n4\n5\n",[71,163939,163937],{"__ignoreMap":69},[14,163941,163943],{"id":163942},"_46-for循环","4.6 for循环",[19,163945,163946,163948],{},[71,163947,2988],{}," 常用于遍历序列。",[64,163950,163952],{"className":34659,"code":163951,"language":34661,"meta":69,"style":69},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[71,163953,163954,163963,163967,163978],{"__ignoreMap":69},[74,163955,163956,163958,163960],{"class":76,"line":77},[74,163957,150817],{"class":84},[74,163959,131],{"class":80},[74,163961,163962],{"class":190}," \"python\"\n",[74,163964,163965],{"class":76,"line":94},[74,163966,2363],{"emptyLinePlaceholder":2362},[74,163968,163969,163971,163974,163976],{"class":76,"line":1141},[74,163970,2988],{"class":80},[74,163972,163973],{"class":84}," ch ",[74,163975,30324],{"class":80},[74,163977,162680],{"class":84},[74,163979,163980,163982],{"class":76,"line":1156},[74,163981,35580],{"class":134},[74,163983,163984],{"class":84},"(ch)\n",[19,163986,163987],{},"遍历列表：",[64,163989,163991],{"className":34659,"code":163990,"language":34661,"meta":69,"style":69},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[71,163992,163993,164015,164019,164029],{"__ignoreMap":69},[74,163994,163995,163998,164000,164002,164004,164006,164008,164010,164013],{"class":76,"line":77},[74,163996,163997],{"class":84},"students ",[74,163999,131],{"class":80},[74,164001,56507],{"class":84},[74,164003,154169],{"class":190},[74,164005,16714],{"class":84},[74,164007,155217],{"class":190},[74,164009,16714],{"class":84},[74,164011,164012],{"class":190},"\"小刚\"",[74,164014,37527],{"class":84},[74,164016,164017],{"class":76,"line":94},[74,164018,2363],{"emptyLinePlaceholder":2362},[74,164020,164021,164023,164025,164027],{"class":76,"line":1141},[74,164022,2988],{"class":80},[74,164024,156418],{"class":84},[74,164026,30324],{"class":80},[74,164028,156423],{"class":84},[74,164030,164031,164033],{"class":76,"line":1156},[74,164032,35580],{"class":134},[74,164034,154323],{"class":84},[14,164036,164038],{"id":164037},"_47-range函数","4.7 range函数",[19,164040,164041,164044],{},[71,164042,164043],{},"range()"," 用于生成整数序列。",[64,164046,164048],{"className":34659,"code":164047,"language":34661,"meta":69,"style":69},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[71,164049,164050,164064,164082],{"__ignoreMap":69},[74,164051,164052,164054,164056,164058,164061],{"class":76,"line":77},[74,164053,37697],{"class":134},[74,164055,85],{"class":84},[74,164057,405],{"class":134},[74,164059,164060],{"class":84},")          ",[74,164062,164063],{"class":144},"# 0,1,2,3,4\n",[74,164065,164066,164068,164070,164072,164074,164076,164079],{"class":76,"line":94},[74,164067,37697],{"class":134},[74,164069,85],{"class":84},[74,164071,303],{"class":134},[74,164073,16714],{"class":84},[74,164075,405],{"class":134},[74,164077,164078],{"class":84},")       ",[74,164080,164081],{"class":144},"# 1,2,3,4\n",[74,164083,164084,164086,164088,164090,164092,164094,164096,164098,164100],{"class":76,"line":1141},[74,164085,37697],{"class":134},[74,164087,85],{"class":84},[74,164089,303],{"class":134},[74,164091,16714],{"class":84},[74,164093,532],{"class":134},[74,164095,16714],{"class":84},[74,164097,163],{"class":134},[74,164099,159942],{"class":84},[74,164101,164102],{"class":144},"# 1,3,5,7,9\n",[19,164104,164105,164106,28899],{},"配合 ",[71,164107,2988],{},[64,164109,164111],{"className":34659,"code":164110,"language":34661,"meta":69,"style":69},"for i in range(1, 6):\n    print(i)\n",[71,164112,164113,164133],{"__ignoreMap":69},[74,164114,164115,164117,164119,164121,164123,164125,164127,164129,164131],{"class":76,"line":77},[74,164116,2988],{"class":80},[74,164118,13717],{"class":84},[74,164120,30324],{"class":80},[74,164122,36724],{"class":134},[74,164124,85],{"class":84},[74,164126,303],{"class":134},[74,164128,16714],{"class":84},[74,164130,430],{"class":134},[74,164132,35067],{"class":84},[74,164134,164135,164137],{"class":76,"line":94},[74,164136,35580],{"class":134},[74,164138,163511],{"class":84},[19,164140,13304,164141,164143],{},[71,164142,37697],{}," 的结束值不包含在内。",[14,164145,164147],{"id":164146},"_48-for循环求和","4.8 for循环求和",[64,164149,164151],{"className":34659,"code":164150,"language":34661,"meta":69,"style":69},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[71,164152,164153,164161,164165,164185,164193,164197],{"__ignoreMap":69},[74,164154,164155,164157,164159],{"class":76,"line":77},[74,164156,161541],{"class":84},[74,164158,131],{"class":80},[74,164160,51614],{"class":134},[74,164162,164163],{"class":76,"line":94},[74,164164,2363],{"emptyLinePlaceholder":2362},[74,164166,164167,164169,164171,164173,164175,164177,164179,164181,164183],{"class":76,"line":1141},[74,164168,2988],{"class":80},[74,164170,13717],{"class":84},[74,164172,30324],{"class":80},[74,164174,36724],{"class":134},[74,164176,85],{"class":84},[74,164178,303],{"class":134},[74,164180,16714],{"class":84},[74,164182,423],{"class":134},[74,164184,35067],{"class":84},[74,164186,164187,164189,164191],{"class":76,"line":1156},[74,164188,163588],{"class":84},[74,164190,13756],{"class":80},[74,164192,163593],{"class":84},[74,164194,164195],{"class":76,"line":1162},[74,164196,2363],{"emptyLinePlaceholder":2362},[74,164198,164199,164201],{"class":76,"line":1176},[74,164200,34696],{"class":134},[74,164202,163612],{"class":84},[19,164204,164205],{},"求偶数和：",[64,164207,164209],{"className":34659,"code":164208,"language":34661,"meta":69,"style":69},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[71,164210,164211,164219,164223,164243,164259,164268,164272],{"__ignoreMap":69},[74,164212,164213,164215,164217],{"class":76,"line":77},[74,164214,161541],{"class":84},[74,164216,131],{"class":80},[74,164218,51614],{"class":134},[74,164220,164221],{"class":76,"line":94},[74,164222,2363],{"emptyLinePlaceholder":2362},[74,164224,164225,164227,164229,164231,164233,164235,164237,164239,164241],{"class":76,"line":1141},[74,164226,2988],{"class":80},[74,164228,13717],{"class":84},[74,164230,30324],{"class":80},[74,164232,36724],{"class":134},[74,164234,85],{"class":84},[74,164236,303],{"class":134},[74,164238,16714],{"class":84},[74,164240,423],{"class":134},[74,164242,35067],{"class":84},[74,164244,164245,164247,164249,164251,164253,164255,164257],{"class":76,"line":1156},[74,164246,3064],{"class":80},[74,164248,13717],{"class":84},[74,164250,414],{"class":80},[74,164252,19034],{"class":134},[74,164254,105840],{"class":80},[74,164256,4056],{"class":134},[74,164258,3702],{"class":84},[74,164260,164261,164264,164266],{"class":76,"line":1162},[74,164262,164263],{"class":84},"        total ",[74,164265,13756],{"class":80},[74,164267,163593],{"class":84},[74,164269,164270],{"class":76,"line":1176},[74,164271,2363],{"emptyLinePlaceholder":2362},[74,164273,164274,164276],{"class":76,"line":1182},[74,164275,34696],{"class":134},[74,164277,163612],{"class":84},[19,164279,164280],{},"也可以：",[64,164282,164284],{"className":34659,"code":164283,"language":34661,"meta":69,"style":69},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[71,164285,164286,164294,164298,164322,164330,164334],{"__ignoreMap":69},[74,164287,164288,164290,164292],{"class":76,"line":77},[74,164289,161541],{"class":84},[74,164291,131],{"class":80},[74,164293,51614],{"class":134},[74,164295,164296],{"class":76,"line":94},[74,164297,2363],{"emptyLinePlaceholder":2362},[74,164299,164300,164302,164304,164306,164308,164310,164312,164314,164316,164318,164320],{"class":76,"line":1141},[74,164301,2988],{"class":80},[74,164303,13717],{"class":84},[74,164305,30324],{"class":80},[74,164307,36724],{"class":134},[74,164309,85],{"class":84},[74,164311,163],{"class":134},[74,164313,16714],{"class":84},[74,164315,423],{"class":134},[74,164317,16714],{"class":84},[74,164319,163],{"class":134},[74,164321,35067],{"class":84},[74,164323,164324,164326,164328],{"class":76,"line":1156},[74,164325,163588],{"class":84},[74,164327,13756],{"class":80},[74,164329,163593],{"class":84},[74,164331,164332],{"class":76,"line":1162},[74,164333,2363],{"emptyLinePlaceholder":2362},[74,164335,164336,164338],{"class":76,"line":1176},[74,164337,34696],{"class":134},[74,164339,163612],{"class":84},[14,164341,164343],{"id":164342},"_49-循环嵌套","4.9 循环嵌套",[19,164345,164346],{},"嵌套循环就是循环里面再写循环。",[64,164348,164350],{"className":34659,"code":164349,"language":34661,"meta":69,"style":69},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[71,164351,164352,164372,164392],{"__ignoreMap":69},[74,164353,164354,164356,164358,164360,164362,164364,164366,164368,164370],{"class":76,"line":77},[74,164355,2988],{"class":80},[74,164357,13717],{"class":84},[74,164359,30324],{"class":80},[74,164361,36724],{"class":134},[74,164363,85],{"class":84},[74,164365,303],{"class":134},[74,164367,16714],{"class":84},[74,164369,379],{"class":134},[74,164371,35067],{"class":84},[74,164373,164374,164376,164378,164380,164382,164384,164386,164388,164390],{"class":76,"line":94},[74,164375,3164],{"class":80},[74,164377,13779],{"class":84},[74,164379,30324],{"class":80},[74,164381,36724],{"class":134},[74,164383,85],{"class":84},[74,164385,303],{"class":134},[74,164387,16714],{"class":84},[74,164389,379],{"class":134},[74,164391,35067],{"class":84},[74,164393,164394,164396,164398,164400,164403,164405,164407,164409,164412,164414,164416,164418,164420],{"class":76,"line":1141},[74,164395,36732],{"class":134},[74,164397,85],{"class":84},[74,164399,138],{"class":80},[74,164401,164402],{"class":190},"\"i=",[74,164404,982],{"class":134},[74,164406,527],{"class":84},[74,164408,1032],{"class":134},[74,164410,164411],{"class":190},", j=",[74,164413,982],{"class":134},[74,164415,553],{"class":84},[74,164417,1032],{"class":134},[74,164419,337],{"class":190},[74,164421,91],{"class":84},[19,164423,164424],{},"外层循环执行一次，内层循环执行完整一轮。",[14,164426,164428],{"id":164427},"_410-九九乘法表","4.10 九九乘法表",[64,164430,164432],{"className":34659,"code":164431,"language":34661,"meta":69,"style":69},"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",[71,164433,164434,164454,164477,164529],{"__ignoreMap":69},[74,164435,164436,164438,164440,164442,164444,164446,164448,164450,164452],{"class":76,"line":77},[74,164437,2988],{"class":80},[74,164439,13717],{"class":84},[74,164441,30324],{"class":80},[74,164443,36724],{"class":134},[74,164445,85],{"class":84},[74,164447,303],{"class":134},[74,164449,16714],{"class":84},[74,164451,532],{"class":134},[74,164453,35067],{"class":84},[74,164455,164456,164458,164460,164462,164464,164466,164468,164471,164473,164475],{"class":76,"line":94},[74,164457,3164],{"class":80},[74,164459,13779],{"class":84},[74,164461,30324],{"class":80},[74,164463,36724],{"class":134},[74,164465,85],{"class":84},[74,164467,303],{"class":134},[74,164469,164470],{"class":84},", i ",[74,164472,567],{"class":80},[74,164474,29399],{"class":134},[74,164476,35067],{"class":84},[74,164478,164479,164481,164483,164485,164487,164489,164491,164493,164495,164497,164499,164501,164503,164505,164507,164509,164511,164513,164515,164517,164519,164521,164523,164525,164527],{"class":76,"line":1141},[74,164480,36732],{"class":134},[74,164482,85],{"class":84},[74,164484,138],{"class":80},[74,164486,337],{"class":190},[74,164488,982],{"class":134},[74,164490,553],{"class":84},[74,164492,1032],{"class":134},[74,164494,541],{"class":190},[74,164496,982],{"class":134},[74,164498,527],{"class":84},[74,164500,1032],{"class":134},[74,164502,131],{"class":190},[74,164504,982],{"class":134},[74,164506,104429],{"class":84},[74,164508,541],{"class":80},[74,164510,3373],{"class":84},[74,164512,1032],{"class":134},[74,164514,337],{"class":190},[74,164516,16714],{"class":84},[74,164518,50082],{"class":9495},[74,164520,131],{"class":80},[74,164522,337],{"class":190},[74,164524,1192],{"class":134},[74,164526,337],{"class":190},[74,164528,91],{"class":84},[74,164530,164531,164533],{"class":76,"line":1156},[74,164532,35580],{"class":134},[74,164534,1938],{"class":84},[19,164536,164537],{},"关键点：",[27,164539,164540,164546,164552,164558],{},[30,164541,164542,164543,164545],{},"外层 ",[71,164544,527],{}," 控制行。",[30,164547,164548,164549,164551],{},"内层 ",[71,164550,553],{}," 控制列。",[30,164553,164554,164555,164557],{},"每行结束后用 ",[71,164556,150753],{}," 换行。",[30,164559,164560,164563],{},[71,164561,164562],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,164565,164567],{"id":164566},"_411-循环else","4.11 循环else",[19,164569,164570,164571,164573,164574,164576,164577,164579],{},"Python 的循环可以带 ",[71,164572,1663],{},"。当循环正常结束时执行 ",[71,164575,1663],{},"，如果被 ",[71,164578,2015],{}," 打断，则不执行。",[64,164581,164583],{"className":34659,"code":164582,"language":34661,"meta":69,"style":69},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[71,164584,164585,164605,164617,164628,164632,164638],{"__ignoreMap":69},[74,164586,164587,164589,164591,164593,164595,164597,164599,164601,164603],{"class":76,"line":77},[74,164588,2988],{"class":80},[74,164590,13717],{"class":84},[74,164592,30324],{"class":80},[74,164594,36724],{"class":134},[74,164596,85],{"class":84},[74,164598,303],{"class":134},[74,164600,16714],{"class":84},[74,164602,430],{"class":134},[74,164604,35067],{"class":84},[74,164606,164607,164609,164611,164613,164615],{"class":76,"line":94},[74,164608,3064],{"class":80},[74,164610,13717],{"class":84},[74,164612,2912],{"class":80},[74,164614,2000],{"class":134},[74,164616,3702],{"class":84},[74,164618,164619,164621,164623,164626],{"class":76,"line":1141},[74,164620,36732],{"class":134},[74,164622,85],{"class":84},[74,164624,164625],{"class":190},"\"找到了\"",[74,164627,91],{"class":84},[74,164629,164630],{"class":76,"line":1156},[74,164631,35908],{"class":80},[74,164633,164634,164636],{"class":76,"line":1162},[74,164635,1663],{"class":80},[74,164637,3702],{"class":84},[74,164639,164640,164642,164644,164647],{"class":76,"line":1176},[74,164641,35580],{"class":134},[74,164643,85],{"class":84},[74,164645,164646],{"class":190},"\"没找到\"",[74,164648,91],{"class":84},[19,164650,164651],{},"常用于搜索。",[64,164653,164655],{"className":34659,"code":164654,"language":34661,"meta":69,"style":69},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[71,164656,164657,164678,164687,164691,164703,164714,164724,164728,164734],{"__ignoreMap":69},[74,164658,164659,164662,164664,164666,164668,164670,164672,164674,164676],{"class":76,"line":77},[74,164660,164661],{"class":84},"names ",[74,164663,131],{"class":80},[74,164665,56507],{"class":84},[74,164667,154169],{"class":190},[74,164669,16714],{"class":84},[74,164671,155217],{"class":190},[74,164673,16714],{"class":84},[74,164675,164012],{"class":190},[74,164677,37527],{"class":84},[74,164679,164680,164682,164684],{"class":76,"line":94},[74,164681,115859],{"class":84},[74,164683,131],{"class":80},[74,164685,164686],{"class":190}," \"小李\"\n",[74,164688,164689],{"class":76,"line":1141},[74,164690,2363],{"emptyLinePlaceholder":2362},[74,164692,164693,164695,164698,164700],{"class":76,"line":1156},[74,164694,2988],{"class":80},[74,164696,164697],{"class":84}," name ",[74,164699,30324],{"class":80},[74,164701,164702],{"class":84}," names:\n",[74,164704,164705,164707,164709,164711],{"class":76,"line":1162},[74,164706,3064],{"class":80},[74,164708,164697],{"class":84},[74,164710,2912],{"class":80},[74,164712,164713],{"class":84}," target:\n",[74,164715,164716,164718,164720,164722],{"class":76,"line":1176},[74,164717,36732],{"class":134},[74,164719,85],{"class":84},[74,164721,164625],{"class":190},[74,164723,91],{"class":84},[74,164725,164726],{"class":76,"line":1182},[74,164727,35908],{"class":80},[74,164729,164730,164732],{"class":76,"line":1273},[74,164731,1663],{"class":80},[74,164733,3702],{"class":84},[74,164735,164736,164738,164740,164742],{"class":76,"line":1279},[74,164737,35580],{"class":134},[74,164739,85],{"class":84},[74,164741,164646],{"class":190},[74,164743,91],{"class":84},[14,164745,164747],{"id":164746},"_412-小案例登录重试","4.12 小案例：登录重试",[19,164749,127573],{},[27,164751,164752,164755,164758],{},[30,164753,164754],{},"用户最多输入 3 次密码。",[30,164756,164757],{},"密码正确则登录成功。",[30,164759,164760],{},"3 次都错误则锁定账号。",[19,164762,14314],{},[64,164764,164766],{"className":34659,"code":164765,"language":34661,"meta":69,"style":69},"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",[71,164767,164768,164778,164782,164798,164814,164818,164830,164841,164845,164851,164876,164882],{"__ignoreMap":69},[74,164769,164770,164773,164775],{"class":76,"line":77},[74,164771,164772],{"class":84},"password ",[74,164774,131],{"class":80},[74,164776,164777],{"class":190}," \"123456\"\n",[74,164779,164780],{"class":76,"line":94},[74,164781,2363],{"emptyLinePlaceholder":2362},[74,164783,164784,164786,164788,164790,164792,164794,164796],{"class":76,"line":1141},[74,164785,2988],{"class":80},[74,164787,13717],{"class":84},[74,164789,30324],{"class":80},[74,164791,36724],{"class":134},[74,164793,85],{"class":84},[74,164795,157],{"class":134},[74,164797,35067],{"class":84},[74,164799,164800,164803,164805,164807,164809,164812],{"class":76,"line":1156},[74,164801,164802],{"class":84},"    user_password ",[74,164804,131],{"class":80},[74,164806,64886],{"class":134},[74,164808,85],{"class":84},[74,164810,164811],{"class":190},"\"请输入密码:\"",[74,164813,91],{"class":84},[74,164815,164816],{"class":76,"line":1162},[74,164817,2363],{"emptyLinePlaceholder":2362},[74,164819,164820,164822,164825,164827],{"class":76,"line":1176},[74,164821,3064],{"class":80},[74,164823,164824],{"class":84}," user_password ",[74,164826,2912],{"class":80},[74,164828,164829],{"class":84}," password:\n",[74,164831,164832,164834,164836,164839],{"class":76,"line":1182},[74,164833,36732],{"class":134},[74,164835,85],{"class":84},[74,164837,164838],{"class":190},"\"登录成功\"",[74,164840,91],{"class":84},[74,164842,164843],{"class":76,"line":1273},[74,164844,35908],{"class":80},[74,164846,164847,164849],{"class":76,"line":1279},[74,164848,162303],{"class":80},[74,164850,3702],{"class":84},[74,164852,164853,164855,164857,164859,164862,164865,164867,164869,164871,164874],{"class":76,"line":1291},[74,164854,36732],{"class":134},[74,164856,85],{"class":84},[74,164858,138],{"class":80},[74,164860,164861],{"class":190},"\"密码错误，还剩",[74,164863,164864],{"class":134},"{2",[74,164866,56552],{"class":80},[74,164868,2995],{"class":84},[74,164870,1032],{"class":134},[74,164872,164873],{"class":190},"次机会\"",[74,164875,91],{"class":84},[74,164877,164878,164880],{"class":76,"line":1574},[74,164879,1663],{"class":80},[74,164881,3702],{"class":84},[74,164883,164884,164886,164888,164891],{"class":76,"line":1579},[74,164885,35580],{"class":134},[74,164887,85],{"class":84},[74,164889,164890],{"class":190},"\"账号已锁定\"",[74,164892,91],{"class":84},[14,164894,164896],{"id":164895},"_413-小案例菜单程序","4.13 小案例：菜单程序",[64,164898,164900],{"className":34659,"code":164899,"language":34661,"meta":69,"style":69},"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",[71,164901,164902,164910,164921,164932,164943,164954,164965,164969,164984,164988,165000,165011,165023,165034,165046,165057,165069,165079,165083,165089],{"__ignoreMap":69},[74,164903,164904,164906,164908],{"class":76,"line":77},[74,164905,112944],{"class":80},[74,164907,99573],{"class":134},[74,164909,3702],{"class":84},[74,164911,164912,164914,164916,164919],{"class":76,"line":94},[74,164913,35580],{"class":134},[74,164915,85],{"class":84},[74,164917,164918],{"class":190},"\"====== 菜单 ======\"",[74,164920,91],{"class":84},[74,164922,164923,164925,164927,164930],{"class":76,"line":1141},[74,164924,35580],{"class":134},[74,164926,85],{"class":84},[74,164928,164929],{"class":190},"\"1. 查询余额\"",[74,164931,91],{"class":84},[74,164933,164934,164936,164938,164941],{"class":76,"line":1156},[74,164935,35580],{"class":134},[74,164937,85],{"class":84},[74,164939,164940],{"class":190},"\"2. 存款\"",[74,164942,91],{"class":84},[74,164944,164945,164947,164949,164952],{"class":76,"line":1162},[74,164946,35580],{"class":134},[74,164948,85],{"class":84},[74,164950,164951],{"class":190},"\"3. 取款\"",[74,164953,91],{"class":84},[74,164955,164956,164958,164960,164963],{"class":76,"line":1176},[74,164957,35580],{"class":134},[74,164959,85],{"class":84},[74,164961,164962],{"class":190},"\"0. 退出\"",[74,164964,91],{"class":84},[74,164966,164967],{"class":76,"line":1182},[74,164968,2363],{"emptyLinePlaceholder":2362},[74,164970,164971,164974,164976,164978,164980,164982],{"class":76,"line":1273},[74,164972,164973],{"class":84},"    choice ",[74,164975,131],{"class":80},[74,164977,64886],{"class":134},[74,164979,85],{"class":84},[74,164981,157354],{"class":190},[74,164983,91],{"class":84},[74,164985,164986],{"class":76,"line":1279},[74,164987,2363],{"emptyLinePlaceholder":2362},[74,164989,164990,164992,164994,164996,164998],{"class":76,"line":1291},[74,164991,3064],{"class":80},[74,164993,157367],{"class":84},[74,164995,2912],{"class":80},[74,164997,157372],{"class":190},[74,164999,3702],{"class":84},[74,165001,165002,165004,165006,165009],{"class":76,"line":1574},[74,165003,36732],{"class":134},[74,165005,85],{"class":84},[74,165007,165008],{"class":190},"\"余额为1000元\"",[74,165010,91],{"class":84},[74,165012,165013,165015,165017,165019,165021],{"class":76,"line":1579},[74,165014,43574],{"class":80},[74,165016,157367],{"class":84},[74,165018,2912],{"class":80},[74,165020,157391],{"class":190},[74,165022,3702],{"class":84},[74,165024,165025,165027,165029,165032],{"class":76,"line":1585},[74,165026,36732],{"class":134},[74,165028,85],{"class":84},[74,165030,165031],{"class":190},"\"存款功能\"",[74,165033,91],{"class":84},[74,165035,165036,165038,165040,165042,165044],{"class":76,"line":1590},[74,165037,43574],{"class":80},[74,165039,157367],{"class":84},[74,165041,2912],{"class":80},[74,165043,157409],{"class":190},[74,165045,3702],{"class":84},[74,165047,165048,165050,165052,165055],{"class":76,"line":1604},[74,165049,36732],{"class":134},[74,165051,85],{"class":84},[74,165053,165054],{"class":190},"\"取款功能\"",[74,165056,91],{"class":84},[74,165058,165059,165061,165063,165065,165067],{"class":76,"line":1609},[74,165060,43574],{"class":80},[74,165062,157367],{"class":84},[74,165064,2912],{"class":80},[74,165066,157463],{"class":190},[74,165068,3702],{"class":84},[74,165070,165071,165073,165075,165077],{"class":76,"line":1615},[74,165072,36732],{"class":134},[74,165074,85],{"class":84},[74,165076,157474],{"class":190},[74,165078,91],{"class":84},[74,165080,165081],{"class":76,"line":1636},[74,165082,35908],{"class":80},[74,165084,165085,165087],{"class":76,"line":1641},[74,165086,162303],{"class":80},[74,165088,3702],{"class":84},[74,165090,165091,165093,165095,165097],{"class":76,"line":1655},[74,165092,36732],{"class":134},[74,165094,85],{"class":84},[74,165096,157495],{"class":190},[74,165098,91],{"class":84},[19,165100,165101,165102,165104,165105,32666],{},"菜单类程序通常使用 ",[71,165103,163803],{},"，用户选择退出时 ",[71,165106,2015],{},[14,165108,165110],{"id":165109},"_414-易错点","4.14 易错点",[27,165112,165113,165118,165124,165132,165138],{},[30,165114,165115,165117],{},[71,165116,112944],{}," 循环必须更新控制变量。",[30,165119,165120,165123],{},[71,165121,165122],{},"range(1, 10)"," 不包含 10。",[30,165125,165126,165128,165129,165131],{},[71,165127,2015],{}," 结束整个循环，",[71,165130,158953],{}," 只跳过本轮。",[30,165133,165134,165135,165137],{},"嵌套循环中，",[71,165136,2015],{}," 只跳出当前所在的一层循环。",[30,165139,165140],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,165142,165144],{"id":165143},"_415-本章练习","4.15 本章练习",[27,165146,165147,165150,165153,165156,165159],{},[30,165148,165149],{},"输出 1 到 100。",[30,165151,165152],{},"计算 1 到 100 的偶数和。",[30,165154,165155],{},"输出 100 以内能被 3 和 5 同时整除的数。",[30,165157,165158],{},"编写猜数字游戏，限制最多猜 7 次。",[30,165160,165161],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5090,165163,165164],{},"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":69,"searchDepth":94,"depth":94,"links":165166},[165167,165168,165169,165170,165171,165175,165176,165177,165178,165179,165180,165181,165182,165183,165184],{"id":163423,"depth":94,"text":163424},{"id":163453,"depth":94,"text":163454},{"id":163542,"depth":94,"text":163543},{"id":163636,"depth":94,"text":163637},{"id":163810,"depth":94,"text":163811,"children":165172},[165173,165174],{"id":163814,"depth":1141,"text":163815},{"id":163878,"depth":1141,"text":163879},{"id":163942,"depth":94,"text":163943},{"id":164037,"depth":94,"text":164038},{"id":164146,"depth":94,"text":164147},{"id":164342,"depth":94,"text":164343},{"id":164427,"depth":94,"text":164428},{"id":164566,"depth":94,"text":164567},{"id":164746,"depth":94,"text":164747},{"id":164895,"depth":94,"text":164896},{"id":165109,"depth":94,"text":165110},{"id":165143,"depth":94,"text":165144},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":163415,"description":27656},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":165191,"title":165192,"body":165193,"description":27656,"extension":5121,"meta":167198,"navigation":2362,"path":167199,"seo":167200,"stem":167201,"__hash__":167202},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":165194,"toc":167178},[165195,165198,165202,165205,165208,165222,165225,165239,165243,165245,165264,165266,165313,165315,165329,165333,165407,165410,165414,165417,165476,165484,165487,165540,165543,165547,165552,165607,165615,165665,165669,165674,165682,165781,165787,165791,165796,165799,165810,165851,165864,165868,165871,165907,165910,165923,165926,165986,165990,165994,165997,166048,166052,166055,166102,166108,166174,166177,166181,166184,166300,166303,166307,166310,166416,166420,166423,166461,166464,166506,166509,166569,166572,166576,167040,167043,167047,167074,167080,167141,167145,167175],[10,165196,165192],{"id":165197},"_5-函数基础",[14,165199,165201],{"id":165200},"_51-为什么需要函数","5.1 为什么需要函数",[19,165203,165204],{},"函数用于封装一段可以重复使用的代码。",[19,165206,165207],{},"不使用函数的问题：",[27,165209,165210,165213,165216,165219],{},[30,165211,165212],{},"重复代码多。",[30,165214,165215],{},"修改逻辑时容易漏改。",[30,165217,165218],{},"主流程不清晰。",[30,165220,165221],{},"程序越写越长，难以维护。",[19,165223,165224],{},"使用函数后的好处：",[27,165226,165227,165230,165233,165236],{},[30,165228,165229],{},"提高复用性。",[30,165231,165232],{},"提高可读性。",[30,165234,165235],{},"便于调试。",[30,165237,165238],{},"便于分工。",[14,165240,165242],{"id":165241},"_52-函数定义","5.2 函数定义",[19,165244,9460],{},[64,165246,165248],{"className":34659,"code":165247,"language":34661,"meta":69,"style":69},"def 函数名():\n    函数体\n",[71,165249,165250,165259],{"__ignoreMap":69},[74,165251,165252,165254,165257],{"class":76,"line":77},[74,165253,36228],{"class":80},[74,165255,165256],{"class":1925}," 函数名",[74,165258,36234],{"class":84},[74,165260,165261],{"class":76,"line":94},[74,165262,165263],{"class":84},"    函数体\n",[19,165265,19414],{},[64,165267,165269],{"className":34659,"code":165268,"language":34661,"meta":69,"style":69},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[71,165270,165271,165280,165290,165300,165304,165308],{"__ignoreMap":69},[74,165272,165273,165275,165278],{"class":76,"line":77},[74,165274,36228],{"class":80},[74,165276,165277],{"class":1925}," say_hello",[74,165279,36234],{"class":84},[74,165281,165282,165284,165286,165288],{"class":76,"line":94},[74,165283,35580],{"class":134},[74,165285,85],{"class":84},[74,165287,10123],{"class":190},[74,165289,91],{"class":84},[74,165291,165292,165294,165296,165298],{"class":76,"line":1141},[74,165293,35580],{"class":134},[74,165295,85],{"class":84},[74,165297,150920],{"class":190},[74,165299,91],{"class":84},[74,165301,165302],{"class":76,"line":1156},[74,165303,2363],{"emptyLinePlaceholder":2362},[74,165305,165306],{"class":76,"line":1162},[74,165307,2363],{"emptyLinePlaceholder":2362},[74,165309,165310],{"class":76,"line":1176},[74,165311,165312],{"class":84},"say_hello()\n",[19,165314,13304],{},[27,165316,165317,165320,165323,165326],{},[30,165318,165319],{},"函数必须先定义，再调用。",[30,165321,165322],{},"函数名遵循变量命名规则。",[30,165324,165325],{},"函数体需要缩进。",[30,165327,165328],{},"函数不调用就不会执行。",[14,165330,165332],{"id":165331},"_53-函数调用","5.3 函数调用",[64,165334,165336],{"className":34659,"code":165335,"language":34661,"meta":69,"style":69},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[71,165337,165338,165347,165358,165369,165380,165390,165394,165398,165403],{"__ignoreMap":69},[74,165339,165340,165342,165345],{"class":76,"line":77},[74,165341,36228],{"class":80},[74,165343,165344],{"class":1925}," print_menu",[74,165346,36234],{"class":84},[74,165348,165349,165351,165353,165356],{"class":76,"line":94},[74,165350,35580],{"class":134},[74,165352,85],{"class":84},[74,165354,165355],{"class":190},"\"1. 查询\"",[74,165357,91],{"class":84},[74,165359,165360,165362,165364,165367],{"class":76,"line":1141},[74,165361,35580],{"class":134},[74,165363,85],{"class":84},[74,165365,165366],{"class":190},"\"2. 添加\"",[74,165368,91],{"class":84},[74,165370,165371,165373,165375,165378],{"class":76,"line":1156},[74,165372,35580],{"class":134},[74,165374,85],{"class":84},[74,165376,165377],{"class":190},"\"3. 删除\"",[74,165379,91],{"class":84},[74,165381,165382,165384,165386,165388],{"class":76,"line":1162},[74,165383,35580],{"class":134},[74,165385,85],{"class":84},[74,165387,164962],{"class":190},[74,165389,91],{"class":84},[74,165391,165392],{"class":76,"line":1176},[74,165393,2363],{"emptyLinePlaceholder":2362},[74,165395,165396],{"class":76,"line":1182},[74,165397,2363],{"emptyLinePlaceholder":2362},[74,165399,165400],{"class":76,"line":1273},[74,165401,165402],{"class":84},"print_menu()\n",[74,165404,165405],{"class":76,"line":1279},[74,165406,165402],{"class":84},[19,165408,165409],{},"函数可以多次调用，每次调用都会执行函数体。",[14,165411,165413],{"id":165412},"_54-参数","5.4 参数",[19,165415,165416],{},"参数用于向函数传递数据。",[64,165418,165420],{"className":34659,"code":165419,"language":34661,"meta":69,"style":69},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[71,165421,165422,165431,165451,165455,165459,165468],{"__ignoreMap":69},[74,165423,165424,165426,165428],{"class":76,"line":77},[74,165425,36228],{"class":80},[74,165427,165277],{"class":1925},[74,165429,165430],{"class":84},"(name):\n",[74,165432,165433,165435,165437,165439,165441,165443,165445,165447,165449],{"class":76,"line":94},[74,165434,35580],{"class":134},[74,165436,85],{"class":84},[74,165438,138],{"class":80},[74,165440,161335],{"class":190},[74,165442,982],{"class":134},[74,165444,84091],{"class":84},[74,165446,1032],{"class":134},[74,165448,337],{"class":190},[74,165450,91],{"class":84},[74,165452,165453],{"class":76,"line":1141},[74,165454,2363],{"emptyLinePlaceholder":2362},[74,165456,165457],{"class":76,"line":1156},[74,165458,2363],{"emptyLinePlaceholder":2362},[74,165460,165461,165464,165466],{"class":76,"line":1162},[74,165462,165463],{"class":84},"say_hello(",[74,165465,154169],{"class":190},[74,165467,91],{"class":84},[74,165469,165470,165472,165474],{"class":76,"line":1176},[74,165471,165463],{"class":84},[74,165473,155217],{"class":190},[74,165475,91],{"class":84},[19,165477,165478,165480,165481,165483],{},[71,165479,84091],{}," 是形参，",[71,165482,154169],{}," 是实参。",[19,165485,165486],{},"多个参数：",[64,165488,165490],{"className":34659,"code":165489,"language":34661,"meta":69,"style":69},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[71,165491,165492,165500,165513,165519,165523,165527],{"__ignoreMap":69},[74,165493,165494,165496,165498],{"class":76,"line":77},[74,165495,36228],{"class":80},[74,165497,9488],{"class":1925},[74,165499,155374],{"class":84},[74,165501,165502,165505,165507,165509,165511],{"class":76,"line":94},[74,165503,165504],{"class":84},"    result ",[74,165506,131],{"class":80},[74,165508,15148],{"class":84},[74,165510,567],{"class":80},[74,165512,155385],{"class":84},[74,165514,165515,165517],{"class":76,"line":1141},[74,165516,35580],{"class":134},[74,165518,80866],{"class":84},[74,165520,165521],{"class":76,"line":1156},[74,165522,2363],{"emptyLinePlaceholder":2362},[74,165524,165525],{"class":76,"line":1162},[74,165526,2363],{"emptyLinePlaceholder":2362},[74,165528,165529,165532,165534,165536,165538],{"class":76,"line":1176},[74,165530,165531],{"class":84},"add(",[74,165533,532],{"class":134},[74,165535,16714],{"class":84},[74,165537,786],{"class":134},[74,165539,91],{"class":84},[19,165541,165542],{},"调用时参数数量必须匹配。",[14,165544,165546],{"id":165545},"_55-返回值","5.5 返回值",[19,165548,165549,165551],{},[71,165550,21325],{}," 用于把函数内部的结果返回给调用者。",[64,165553,165555],{"className":34659,"code":165554,"language":34661,"meta":69,"style":69},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[71,165556,165557,165565,165575,165579,165583,165601],{"__ignoreMap":69},[74,165558,165559,165561,165563],{"class":76,"line":77},[74,165560,36228],{"class":80},[74,165562,9488],{"class":1925},[74,165564,155374],{"class":84},[74,165566,165567,165569,165571,165573],{"class":76,"line":94},[74,165568,4053],{"class":80},[74,165570,15148],{"class":84},[74,165572,567],{"class":80},[74,165574,155385],{"class":84},[74,165576,165577],{"class":76,"line":1141},[74,165578,2363],{"emptyLinePlaceholder":2362},[74,165580,165581],{"class":76,"line":1156},[74,165582,2363],{"emptyLinePlaceholder":2362},[74,165584,165585,165588,165590,165593,165595,165597,165599],{"class":76,"line":1162},[74,165586,165587],{"class":84},"result ",[74,165589,131],{"class":80},[74,165591,165592],{"class":84}," add(",[74,165594,532],{"class":134},[74,165596,16714],{"class":84},[74,165598,786],{"class":134},[74,165600,91],{"class":84},[74,165602,165603,165605],{"class":76,"line":1176},[74,165604,34696],{"class":134},[74,165606,80866],{"class":84},[19,165608,165609,165610,165612,165613,32666],{},"如果函数没有写 ",[71,165611,21325],{},"，默认返回 ",[71,165614,99967],{},[64,165616,165618],{"className":34659,"code":165617,"language":34661,"meta":69,"style":69},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[71,165619,165620,165628,165638,165642,165646,165655],{"__ignoreMap":69},[74,165621,165622,165624,165626],{"class":76,"line":77},[74,165623,36228],{"class":80},[74,165625,165277],{"class":1925},[74,165627,36234],{"class":84},[74,165629,165630,165632,165634,165636],{"class":76,"line":94},[74,165631,35580],{"class":134},[74,165633,85],{"class":84},[74,165635,10123],{"class":190},[74,165637,91],{"class":84},[74,165639,165640],{"class":76,"line":1141},[74,165641,2363],{"emptyLinePlaceholder":2362},[74,165643,165644],{"class":76,"line":1156},[74,165645,2363],{"emptyLinePlaceholder":2362},[74,165647,165648,165650,165652],{"class":76,"line":1162},[74,165649,165587],{"class":84},[74,165651,131],{"class":80},[74,165653,165654],{"class":84}," say_hello()\n",[74,165656,165657,165659,165662],{"class":76,"line":1176},[74,165658,34696],{"class":134},[74,165660,165661],{"class":84},"(result)  ",[74,165663,165664],{"class":144},"# None\n",[14,165666,165668],{"id":165667},"_56-return的作用","5.6 return的作用",[19,165670,165671,165673],{},[71,165672,21325],{}," 有两个作用：",[27,165675,165676,165679],{},[30,165677,165678],{},"返回结果。",[30,165680,165681],{},"结束函数。",[64,165683,165685],{"className":34659,"code":165684,"language":34661,"meta":69,"style":69},"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",[71,165686,165687,165697,165709,165716,165720,165732,165739,165743,165750,165754,165758,165769],{"__ignoreMap":69},[74,165688,165689,165691,165694],{"class":76,"line":77},[74,165690,36228],{"class":80},[74,165692,165693],{"class":1925}," check_age",[74,165695,165696],{"class":84},"(age):\n",[74,165698,165699,165701,165703,165705,165707],{"class":76,"line":94},[74,165700,3064],{"class":80},[74,165702,19986],{"class":84},[74,165704,996],{"class":80},[74,165706,4056],{"class":134},[74,165708,3702],{"class":84},[74,165710,165711,165713],{"class":76,"line":1141},[74,165712,19031],{"class":80},[74,165714,165715],{"class":190}," \"年龄不合法\"\n",[74,165717,165718],{"class":76,"line":1156},[74,165719,2363],{"emptyLinePlaceholder":2362},[74,165721,165722,165724,165726,165728,165730],{"class":76,"line":1162},[74,165723,3064],{"class":80},[74,165725,19986],{"class":84},[74,165727,1672],{"class":80},[74,165729,160566],{"class":134},[74,165731,3702],{"class":84},[74,165733,165734,165736],{"class":76,"line":1176},[74,165735,19031],{"class":80},[74,165737,165738],{"class":190}," \"成年人\"\n",[74,165740,165741],{"class":76,"line":1182},[74,165742,2363],{"emptyLinePlaceholder":2362},[74,165744,165745,165747],{"class":76,"line":1273},[74,165746,4053],{"class":80},[74,165748,165749],{"class":190}," \"未成年人\"\n",[74,165751,165752],{"class":76,"line":1279},[74,165753,2363],{"emptyLinePlaceholder":2362},[74,165755,165756],{"class":76,"line":1291},[74,165757,2363],{"emptyLinePlaceholder":2362},[74,165759,165760,165762,165765,165767],{"class":76,"line":1574},[74,165761,34696],{"class":134},[74,165763,165764],{"class":84},"(check_age(",[74,165766,786],{"class":134},[74,165768,34778],{"class":84},[74,165770,165771,165773,165775,165777,165779],{"class":76,"line":1579},[74,165772,34696],{"class":134},[74,165774,165764],{"class":84},[74,165776,618],{"class":80},[74,165778,303],{"class":134},[74,165780,34778],{"class":84},[19,165782,165783,165784,165786],{},"函数执行到 ",[71,165785,21325],{}," 后，后面的代码不会继续执行。",[14,165788,165790],{"id":165789},"_57-none","5.7 None",[19,165792,165793,165795],{},[71,165794,99967],{}," 表示空值或没有结果。",[19,165797,165798],{},"常见使用场景：",[27,165800,165801,165804,165807],{},[30,165802,165803],{},"函数没有返回值。",[30,165805,165806],{},"变量暂时没有具体值。",[30,165808,165809],{},"表示查询不到结果。",[64,165811,165813],{"className":34659,"code":165812,"language":34661,"meta":69,"style":69},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[71,165814,165815,165823,165827,165840],{"__ignoreMap":69},[74,165816,165817,165819,165821],{"class":76,"line":77},[74,165818,165587],{"class":84},[74,165820,131],{"class":80},[74,165822,156453],{"class":134},[74,165824,165825],{"class":76,"line":94},[74,165826,2363],{"emptyLinePlaceholder":2362},[74,165828,165829,165831,165834,165836,165838],{"class":76,"line":1141},[74,165830,1493],{"class":80},[74,165832,165833],{"class":84}," result ",[74,165835,43208],{"class":80},[74,165837,43214],{"class":134},[74,165839,3702],{"class":84},[74,165841,165842,165844,165846,165849],{"class":76,"line":1156},[74,165843,35580],{"class":134},[74,165845,85],{"class":84},[74,165847,165848],{"class":190},"\"没有数据\"",[74,165850,91],{"class":84},[19,165852,165853,165854,165856,165857,165860,165861,32666],{},"判断 ",[71,165855,99967],{}," 推荐使用 ",[71,165858,165859],{},"is None","，不要写成 ",[71,165862,165863],{},"== None",[14,165865,165867],{"id":165866},"_58-函数文档字符串","5.8 函数文档字符串",[19,165869,165870],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[64,165872,165874],{"className":34659,"code":165873,"language":34661,"meta":69,"style":69},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[71,165875,165876,165886,165891],{"__ignoreMap":69},[74,165877,165878,165880,165883],{"class":76,"line":77},[74,165879,36228],{"class":80},[74,165881,165882],{"class":1925}," calculate_bmi",[74,165884,165885],{"class":84},"(weight, height):\n",[74,165887,165888],{"class":76,"line":94},[74,165889,165890],{"class":190},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[74,165892,165893,165895,165898,165900,165903,165905],{"class":76,"line":1141},[74,165894,4053],{"class":80},[74,165896,165897],{"class":84}," weight ",[74,165899,670],{"class":80},[74,165901,165902],{"class":84}," height ",[74,165904,14940],{"class":80},[74,165906,52004],{"class":134},[19,165908,165909],{},"查看说明：",[64,165911,165913],{"className":34659,"code":165912,"language":34661,"meta":69,"style":69},"help(calculate_bmi)\n",[71,165914,165915],{"__ignoreMap":69},[74,165916,165917,165920],{"class":76,"line":77},[74,165918,165919],{"class":134},"help",[74,165921,165922],{"class":84},"(calculate_bmi)\n",[19,165924,165925],{},"较完整的写法：",[64,165927,165929],{"className":34659,"code":165928,"language":34661,"meta":69,"style":69},"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",[71,165930,165931,165939,165944,165949,165953,165958,165963,165968,165972],{"__ignoreMap":69},[74,165932,165933,165935,165937],{"class":76,"line":77},[74,165934,36228],{"class":80},[74,165936,165882],{"class":1925},[74,165938,165885],{"class":84},[74,165940,165941],{"class":76,"line":94},[74,165942,165943],{"class":190},"    \"\"\"\n",[74,165945,165946],{"class":76,"line":1141},[74,165947,165948],{"class":190},"    计算BMI。\n",[74,165950,165951],{"class":76,"line":1156},[74,165952,2363],{"emptyLinePlaceholder":2362},[74,165954,165955],{"class":76,"line":1162},[74,165956,165957],{"class":190},"    :param weight: 体重，单位kg\n",[74,165959,165960],{"class":76,"line":1176},[74,165961,165962],{"class":190},"    :param height: 身高，单位m\n",[74,165964,165965],{"class":76,"line":1182},[74,165966,165967],{"class":190},"    :return: BMI数值\n",[74,165969,165970],{"class":76,"line":1273},[74,165971,165943],{"class":190},[74,165973,165974,165976,165978,165980,165982,165984],{"class":76,"line":1279},[74,165975,4053],{"class":80},[74,165977,165897],{"class":84},[74,165979,670],{"class":80},[74,165981,165902],{"class":84},[74,165983,14940],{"class":80},[74,165985,52004],{"class":134},[14,165987,165989],{"id":165988},"_59-变量作用域","5.9 变量作用域",[44,165991,165993],{"id":165992},"_591-局部变量","5.9.1 局部变量",[19,165995,165996],{},"在函数内部定义的变量，只能在函数内部使用。",[64,165998,166000],{"className":34659,"code":165999,"language":34661,"meta":69,"style":69},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[71,166001,166002,166011,166019,166025,166029,166033,166038],{"__ignoreMap":69},[74,166003,166004,166006,166009],{"class":76,"line":77},[74,166005,36228],{"class":80},[74,166007,166008],{"class":1925}," test",[74,166010,36234],{"class":84},[74,166012,166013,166015,166017],{"class":76,"line":94},[74,166014,49874],{"class":84},[74,166016,131],{"class":80},[74,166018,62709],{"class":134},[74,166020,166021,166023],{"class":76,"line":1141},[74,166022,35580],{"class":134},[74,166024,99],{"class":84},[74,166026,166027],{"class":76,"line":1156},[74,166028,2363],{"emptyLinePlaceholder":2362},[74,166030,166031],{"class":76,"line":1162},[74,166032,2363],{"emptyLinePlaceholder":2362},[74,166034,166035],{"class":76,"line":1176},[74,166036,166037],{"class":84},"test()\n",[74,166039,166040,166042,166045],{"class":76,"line":1182},[74,166041,34696],{"class":134},[74,166043,166044],{"class":84},"(num)  ",[74,166046,166047],{"class":144},"# 报错\n",[44,166049,166051],{"id":166050},"_592-全局变量","5.9.2 全局变量",[19,166053,166054],{},"在函数外部定义的变量，可以在函数内部读取。",[64,166056,166058],{"className":34659,"code":166057,"language":34661,"meta":69,"style":69},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[71,166059,166060,166068,166072,166076,166084,166090,166094,166098],{"__ignoreMap":69},[74,166061,166062,166064,166066],{"class":76,"line":77},[74,166063,150817],{"class":84},[74,166065,131],{"class":80},[74,166067,153634],{"class":190},[74,166069,166070],{"class":76,"line":94},[74,166071,2363],{"emptyLinePlaceholder":2362},[74,166073,166074],{"class":76,"line":1141},[74,166075,2363],{"emptyLinePlaceholder":2362},[74,166077,166078,166080,166082],{"class":76,"line":1156},[74,166079,36228],{"class":80},[74,166081,165277],{"class":1925},[74,166083,36234],{"class":84},[74,166085,166086,166088],{"class":76,"line":1162},[74,166087,35580],{"class":134},[74,166089,154941],{"class":84},[74,166091,166092],{"class":76,"line":1176},[74,166093,2363],{"emptyLinePlaceholder":2362},[74,166095,166096],{"class":76,"line":1182},[74,166097,2363],{"emptyLinePlaceholder":2362},[74,166099,166100],{"class":76,"line":1273},[74,166101,165312],{"class":84},[19,166103,166104,166105,32666],{},"如果要在函数内部修改全局变量，需要 ",[71,166106,166107],{},"global",[64,166109,166111],{"className":34659,"code":166110,"language":34661,"meta":69,"style":69},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[71,166112,166113,166121,166125,166129,166138,166146,166154,166158,166162,166167],{"__ignoreMap":69},[74,166114,166115,166117,166119],{"class":76,"line":77},[74,166116,150972],{"class":84},[74,166118,131],{"class":80},[74,166120,51614],{"class":134},[74,166122,166123],{"class":76,"line":94},[74,166124,2363],{"emptyLinePlaceholder":2362},[74,166126,166127],{"class":76,"line":1141},[74,166128,2363],{"emptyLinePlaceholder":2362},[74,166130,166131,166133,166136],{"class":76,"line":1156},[74,166132,36228],{"class":80},[74,166134,166135],{"class":1925}," add_count",[74,166137,36234],{"class":84},[74,166139,166140,166143],{"class":76,"line":1162},[74,166141,166142],{"class":80},"    global",[74,166144,166145],{"class":84}," count\n",[74,166147,166148,166150,166152],{"class":76,"line":1176},[74,166149,163714],{"class":84},[74,166151,13756],{"class":80},[74,166153,59980],{"class":134},[74,166155,166156],{"class":76,"line":1182},[74,166157,2363],{"emptyLinePlaceholder":2362},[74,166159,166160],{"class":76,"line":1273},[74,166161,2363],{"emptyLinePlaceholder":2362},[74,166163,166164],{"class":76,"line":1279},[74,166165,166166],{"class":84},"add_count()\n",[74,166168,166169,166171],{"class":76,"line":1291},[74,166170,34696],{"class":134},[74,166172,166173],{"class":84},"(count)\n",[19,166175,166176],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,166178,166180],{"id":166179},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,166182,166183],{},"一个函数中可以调用另一个函数。",[64,166185,166187],{"className":34659,"code":166186,"language":34661,"meta":69,"style":69},"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",[71,166188,166189,166198,166212,166216,166220,166229,166234,166254,166275,166279,166283,166287],{"__ignoreMap":69},[74,166190,166191,166193,166196],{"class":76,"line":77},[74,166192,36228],{"class":80},[74,166194,166195],{"class":1925}," print_line",[74,166197,36234],{"class":84},[74,166199,166200,166202,166204,166206,166208,166210],{"class":76,"line":94},[74,166201,35580],{"class":134},[74,166203,85],{"class":84},[74,166205,36764],{"class":190},[74,166207,10797],{"class":80},[74,166209,82946],{"class":134},[74,166211,91],{"class":84},[74,166213,166214],{"class":76,"line":1141},[74,166215,2363],{"emptyLinePlaceholder":2362},[74,166217,166218],{"class":76,"line":1156},[74,166219,2363],{"emptyLinePlaceholder":2362},[74,166221,166222,166224,166227],{"class":76,"line":1162},[74,166223,36228],{"class":80},[74,166225,166226],{"class":1925}," print_info",[74,166228,153656],{"class":84},[74,166230,166231],{"class":76,"line":1176},[74,166232,166233],{"class":84},"    print_line()\n",[74,166235,166236,166238,166240,166242,166244,166246,166248,166250,166252],{"class":76,"line":1182},[74,166237,35580],{"class":134},[74,166239,85],{"class":84},[74,166241,138],{"class":80},[74,166243,160963],{"class":190},[74,166245,982],{"class":134},[74,166247,84091],{"class":84},[74,166249,1032],{"class":134},[74,166251,337],{"class":190},[74,166253,91],{"class":84},[74,166255,166256,166258,166260,166262,166265,166267,166269,166271,166273],{"class":76,"line":1273},[74,166257,35580],{"class":134},[74,166259,85],{"class":84},[74,166261,138],{"class":80},[74,166263,166264],{"class":190},"\"年龄:",[74,166266,982],{"class":134},[74,166268,74502],{"class":84},[74,166270,1032],{"class":134},[74,166272,337],{"class":190},[74,166274,91],{"class":84},[74,166276,166277],{"class":76,"line":1279},[74,166278,166233],{"class":84},[74,166280,166281],{"class":76,"line":1291},[74,166282,2363],{"emptyLinePlaceholder":2362},[74,166284,166285],{"class":76,"line":1574},[74,166286,2363],{"emptyLinePlaceholder":2362},[74,166288,166289,166292,166294,166296,166298],{"class":76,"line":1579},[74,166290,166291],{"class":84},"print_info(",[74,166293,154169],{"class":190},[74,166295,16714],{"class":84},[74,166297,736],{"class":134},[74,166299,91],{"class":84},[19,166301,166302],{},"这种方式可以把小功能组合成大功能。",[14,166304,166306],{"id":166305},"_511-参数检查","5.11 参数检查",[19,166308,166309],{},"函数内部可以检查参数是否合法。",[64,166311,166313],{"className":34659,"code":166312,"language":34661,"meta":69,"style":69},"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",[71,166314,166315,166324,166336,166342,166352,166356,166360,166377,166381,166393,166404,166410],{"__ignoreMap":69},[74,166316,166317,166319,166322],{"class":76,"line":77},[74,166318,36228],{"class":80},[74,166320,166321],{"class":1925}," divide",[74,166323,155374],{"class":84},[74,166325,166326,166328,166330,166332,166334],{"class":76,"line":94},[74,166327,3064],{"class":80},[74,166329,15161],{"class":84},[74,166331,2912],{"class":80},[74,166333,4056],{"class":134},[74,166335,3702],{"class":84},[74,166337,166338,166340],{"class":76,"line":1141},[74,166339,19031],{"class":80},[74,166341,156453],{"class":134},[74,166343,166344,166346,166348,166350],{"class":76,"line":1156},[74,166345,4053],{"class":80},[74,166347,15148],{"class":84},[74,166349,670],{"class":80},[74,166351,155385],{"class":84},[74,166353,166354],{"class":76,"line":1162},[74,166355,2363],{"emptyLinePlaceholder":2362},[74,166357,166358],{"class":76,"line":1176},[74,166359,2363],{"emptyLinePlaceholder":2362},[74,166361,166362,166364,166366,166369,166371,166373,166375],{"class":76,"line":1182},[74,166363,165587],{"class":84},[74,166365,131],{"class":80},[74,166367,166368],{"class":84}," divide(",[74,166370,532],{"class":134},[74,166372,16714],{"class":84},[74,166374,277],{"class":134},[74,166376,91],{"class":84},[74,166378,166379],{"class":76,"line":1273},[74,166380,2363],{"emptyLinePlaceholder":2362},[74,166382,166383,166385,166387,166389,166391],{"class":76,"line":1279},[74,166384,1493],{"class":80},[74,166386,165833],{"class":84},[74,166388,43208],{"class":80},[74,166390,43214],{"class":134},[74,166392,3702],{"class":84},[74,166394,166395,166397,166399,166402],{"class":76,"line":1291},[74,166396,35580],{"class":134},[74,166398,85],{"class":84},[74,166400,166401],{"class":190},"\"除数不能为0\"",[74,166403,91],{"class":84},[74,166405,166406,166408],{"class":76,"line":1574},[74,166407,1663],{"class":80},[74,166409,3702],{"class":84},[74,166411,166412,166414],{"class":76,"line":1579},[74,166413,35580],{"class":134},[74,166415,80866],{"class":84},[14,166417,166419],{"id":166418},"_512-类型提示","5.12 类型提示",[19,166421,166422],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[64,166424,166426],{"className":34659,"code":166425,"language":34661,"meta":69,"style":69},"def add(a: int, b: int) -> int:\n    return a + b\n",[71,166427,166428,166451],{"__ignoreMap":69},[74,166429,166430,166432,166434,166437,166439,166442,166444,166447,166449],{"class":76,"line":77},[74,166431,36228],{"class":80},[74,166433,9488],{"class":1925},[74,166435,166436],{"class":84},"(a: ",[74,166438,88],{"class":134},[74,166440,166441],{"class":84},", b: ",[74,166443,88],{"class":134},[74,166445,166446],{"class":84},") -> ",[74,166448,88],{"class":134},[74,166450,3702],{"class":84},[74,166452,166453,166455,166457,166459],{"class":76,"line":94},[74,166454,4053],{"class":80},[74,166456,15148],{"class":84},[74,166458,567],{"class":80},[74,166460,155385],{"class":84},[19,166462,166463],{},"字符串参数：",[64,166465,166467],{"className":34659,"code":166466,"language":34661,"meta":69,"style":69},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[71,166468,166469,166486],{"__ignoreMap":69},[74,166470,166471,166473,166475,166478,166480,166482,166484],{"class":76,"line":77},[74,166472,36228],{"class":80},[74,166474,165277],{"class":1925},[74,166476,166477],{"class":84},"(name: ",[74,166479,1261],{"class":134},[74,166481,166446],{"class":84},[74,166483,99967],{"class":134},[74,166485,3702],{"class":84},[74,166487,166488,166490,166492,166494,166496,166498,166500,166502,166504],{"class":76,"line":94},[74,166489,35580],{"class":134},[74,166491,85],{"class":84},[74,166493,138],{"class":80},[74,166495,161335],{"class":190},[74,166497,982],{"class":134},[74,166499,84091],{"class":84},[74,166501,1032],{"class":134},[74,166503,337],{"class":190},[74,166505,91],{"class":84},[19,166507,166508],{},"列表参数：",[64,166510,166512],{"className":34659,"code":166511,"language":34661,"meta":69,"style":69},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[71,166513,166514,166533,166541,166553,166562],{"__ignoreMap":69},[74,166515,166516,166518,166521,166524,166526,166529,166531],{"class":76,"line":77},[74,166517,36228],{"class":80},[74,166519,166520],{"class":1925}," get_total",[74,166522,166523],{"class":84},"(numbers: list[",[74,166525,88],{"class":134},[74,166527,166528],{"class":84},"]) -> ",[74,166530,88],{"class":134},[74,166532,3702],{"class":84},[74,166534,166535,166537,166539],{"class":76,"line":94},[74,166536,163588],{"class":84},[74,166538,131],{"class":80},[74,166540,51614],{"class":134},[74,166542,166543,166545,166548,166550],{"class":76,"line":1141},[74,166544,3164],{"class":80},[74,166546,166547],{"class":84}," number ",[74,166549,30324],{"class":80},[74,166551,166552],{"class":84}," numbers:\n",[74,166554,166555,166557,166559],{"class":76,"line":1156},[74,166556,164263],{"class":84},[74,166558,13756],{"class":80},[74,166560,166561],{"class":84}," number\n",[74,166563,166564,166566],{"class":76,"line":1162},[74,166565,4053],{"class":80},[74,166567,166568],{"class":84}," total\n",[19,166570,166571],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,166573,166575],{"id":166574},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[64,166577,166579],{"className":34659,"code":166578,"language":34661,"meta":69,"style":69},"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",[71,166580,166581,166591,166595,166599,166607,166618,166628,166638,166648,166658,166662,166666,166675,166697,166701,166705,166714,166720,166740,166752,166763,166767,166776,166787,166792,166796,166800,166809,166815,166834,166846,166856,166860,166871,166881,166885,166893,166904,166908,166912,166916,166924,166929,166943,166947,166959,166964,166976,166981,166993,166998,167010,167020,167024,167030],{"__ignoreMap":69},[74,166582,166583,166586,166588],{"class":76,"line":77},[74,166584,166585],{"class":84},"balance ",[74,166587,131],{"class":80},[74,166589,166590],{"class":134}," 1000\n",[74,166592,166593],{"class":76,"line":94},[74,166594,2363],{"emptyLinePlaceholder":2362},[74,166596,166597],{"class":76,"line":1141},[74,166598,2363],{"emptyLinePlaceholder":2362},[74,166600,166601,166603,166605],{"class":76,"line":1156},[74,166602,36228],{"class":80},[74,166604,156314],{"class":1925},[74,166606,36234],{"class":84},[74,166608,166609,166611,166613,166616],{"class":76,"line":1162},[74,166610,35580],{"class":134},[74,166612,85],{"class":84},[74,166614,166615],{"class":190},"\"====== ATM ======\"",[74,166617,91],{"class":84},[74,166619,166620,166622,166624,166626],{"class":76,"line":1176},[74,166621,35580],{"class":134},[74,166623,85],{"class":84},[74,166625,164929],{"class":190},[74,166627,91],{"class":84},[74,166629,166630,166632,166634,166636],{"class":76,"line":1182},[74,166631,35580],{"class":134},[74,166633,85],{"class":84},[74,166635,164940],{"class":190},[74,166637,91],{"class":84},[74,166639,166640,166642,166644,166646],{"class":76,"line":1273},[74,166641,35580],{"class":134},[74,166643,85],{"class":84},[74,166645,164951],{"class":190},[74,166647,91],{"class":84},[74,166649,166650,166652,166654,166656],{"class":76,"line":1279},[74,166651,35580],{"class":134},[74,166653,85],{"class":84},[74,166655,164962],{"class":190},[74,166657,91],{"class":84},[74,166659,166660],{"class":76,"line":1291},[74,166661,2363],{"emptyLinePlaceholder":2362},[74,166663,166664],{"class":76,"line":1574},[74,166665,2363],{"emptyLinePlaceholder":2362},[74,166667,166668,166670,166673],{"class":76,"line":1579},[74,166669,36228],{"class":80},[74,166671,166672],{"class":1925}," show_balance",[74,166674,36234],{"class":84},[74,166676,166677,166679,166681,166683,166686,166688,166691,166693,166695],{"class":76,"line":1585},[74,166678,35580],{"class":134},[74,166680,85],{"class":84},[74,166682,138],{"class":80},[74,166684,166685],{"class":190},"\"当前余额:",[74,166687,982],{"class":134},[74,166689,166690],{"class":84},"balance",[74,166692,1032],{"class":134},[74,166694,161293],{"class":190},[74,166696,91],{"class":84},[74,166698,166699],{"class":76,"line":1590},[74,166700,2363],{"emptyLinePlaceholder":2362},[74,166702,166703],{"class":76,"line":1604},[74,166704,2363],{"emptyLinePlaceholder":2362},[74,166706,166707,166709,166712],{"class":76,"line":1609},[74,166708,36228],{"class":80},[74,166710,166711],{"class":1925}," save_money",[74,166713,36234],{"class":84},[74,166715,166716,166718],{"class":76,"line":1615},[74,166717,166142],{"class":80},[74,166719,154380],{"class":84},[74,166721,166722,166725,166727,166729,166731,166733,166735,166738],{"class":76,"line":1636},[74,166723,166724],{"class":84},"    money ",[74,166726,131],{"class":80},[74,166728,114078],{"class":134},[74,166730,85],{"class":84},[74,166732,58102],{"class":134},[74,166734,85],{"class":84},[74,166736,166737],{"class":190},"\"请输入存款金额:\"",[74,166739,34778],{"class":84},[74,166741,166742,166744,166746,166748,166750],{"class":76,"line":1641},[74,166743,3064],{"class":80},[74,166745,154423],{"class":84},[74,166747,1550],{"class":80},[74,166749,4056],{"class":134},[74,166751,3702],{"class":84},[74,166753,166754,166756,166758,166761],{"class":76,"line":1655},[74,166755,36732],{"class":134},[74,166757,85],{"class":84},[74,166759,166760],{"class":190},"\"金额必须大于0\"",[74,166762,91],{"class":84},[74,166764,166765],{"class":76,"line":1660},[74,166766,156642],{"class":80},[74,166768,166769,166772,166774],{"class":76,"line":1689},[74,166770,166771],{"class":84},"    balance ",[74,166773,13756],{"class":80},[74,166775,154456],{"class":84},[74,166777,166778,166780,166782,166785],{"class":76,"line":1694},[74,166779,35580],{"class":134},[74,166781,85],{"class":84},[74,166783,166784],{"class":190},"\"存款成功\"",[74,166786,91],{"class":84},[74,166788,166789],{"class":76,"line":1711},[74,166790,166791],{"class":84},"    show_balance()\n",[74,166793,166794],{"class":76,"line":1716},[74,166795,2363],{"emptyLinePlaceholder":2362},[74,166797,166798],{"class":76,"line":1721},[74,166799,2363],{"emptyLinePlaceholder":2362},[74,166801,166802,166804,166807],{"class":76,"line":1726},[74,166803,36228],{"class":80},[74,166805,166806],{"class":1925}," withdraw_money",[74,166808,36234],{"class":84},[74,166810,166811,166813],{"class":76,"line":1740},[74,166812,166142],{"class":80},[74,166814,154380],{"class":84},[74,166816,166817,166819,166821,166823,166825,166827,166829,166832],{"class":76,"line":1745},[74,166818,166724],{"class":84},[74,166820,131],{"class":80},[74,166822,114078],{"class":134},[74,166824,85],{"class":84},[74,166826,58102],{"class":134},[74,166828,85],{"class":84},[74,166830,166831],{"class":190},"\"请输入取款金额:\"",[74,166833,34778],{"class":84},[74,166835,166836,166838,166840,166842,166844],{"class":76,"line":2540},[74,166837,3064],{"class":80},[74,166839,154423],{"class":84},[74,166841,1550],{"class":80},[74,166843,4056],{"class":134},[74,166845,3702],{"class":84},[74,166847,166848,166850,166852,166854],{"class":76,"line":2554},[74,166849,36732],{"class":134},[74,166851,85],{"class":84},[74,166853,166760],{"class":190},[74,166855,91],{"class":84},[74,166857,166858],{"class":76,"line":2562},[74,166859,156642],{"class":80},[74,166861,166862,166864,166866,166868],{"class":76,"line":2567},[74,166863,3064],{"class":80},[74,166865,154423],{"class":84},[74,166867,1046],{"class":80},[74,166869,166870],{"class":84}," balance:\n",[74,166872,166873,166875,166877,166879],{"class":76,"line":2573},[74,166874,36732],{"class":134},[74,166876,85],{"class":84},[74,166878,154518],{"class":190},[74,166880,91],{"class":84},[74,166882,166883],{"class":76,"line":2579},[74,166884,156642],{"class":80},[74,166886,166887,166889,166891],{"class":76,"line":2584},[74,166888,166771],{"class":84},[74,166890,154533],{"class":80},[74,166892,154456],{"class":84},[74,166894,166895,166897,166899,166902],{"class":76,"line":12227},[74,166896,35580],{"class":134},[74,166898,85],{"class":84},[74,166900,166901],{"class":190},"\"取款成功\"",[74,166903,91],{"class":84},[74,166905,166906],{"class":76,"line":12251},[74,166907,166791],{"class":84},[74,166909,166910],{"class":76,"line":12256},[74,166911,2363],{"emptyLinePlaceholder":2362},[74,166913,166914],{"class":76,"line":12262},[74,166915,2363],{"emptyLinePlaceholder":2362},[74,166917,166918,166920,166922],{"class":76,"line":12289},[74,166919,112944],{"class":80},[74,166921,99573],{"class":134},[74,166923,3702],{"class":84},[74,166925,166926],{"class":76,"line":12294},[74,166927,166928],{"class":84},"    show_menu()\n",[74,166930,166931,166933,166935,166937,166939,166941],{"class":76,"line":12300},[74,166932,164973],{"class":84},[74,166934,131],{"class":80},[74,166936,64886],{"class":134},[74,166938,85],{"class":84},[74,166940,157354],{"class":190},[74,166942,91],{"class":84},[74,166944,166945],{"class":76,"line":12312},[74,166946,2363],{"emptyLinePlaceholder":2362},[74,166948,166949,166951,166953,166955,166957],{"class":76,"line":12324},[74,166950,3064],{"class":80},[74,166952,157367],{"class":84},[74,166954,2912],{"class":80},[74,166956,157372],{"class":190},[74,166958,3702],{"class":84},[74,166960,166961],{"class":76,"line":12336},[74,166962,166963],{"class":84},"        show_balance()\n",[74,166965,166966,166968,166970,166972,166974],{"class":76,"line":13995},[74,166967,43574],{"class":80},[74,166969,157367],{"class":84},[74,166971,2912],{"class":80},[74,166973,157391],{"class":190},[74,166975,3702],{"class":84},[74,166977,166978],{"class":76,"line":14020},[74,166979,166980],{"class":84},"        save_money()\n",[74,166982,166983,166985,166987,166989,166991],{"class":76,"line":14043},[74,166984,43574],{"class":80},[74,166986,157367],{"class":84},[74,166988,2912],{"class":80},[74,166990,157409],{"class":190},[74,166992,3702],{"class":84},[74,166994,166995],{"class":76,"line":14067},[74,166996,166997],{"class":84},"        withdraw_money()\n",[74,166999,167000,167002,167004,167006,167008],{"class":76,"line":14072},[74,167001,43574],{"class":80},[74,167003,157367],{"class":84},[74,167005,2912],{"class":80},[74,167007,157463],{"class":190},[74,167009,3702],{"class":84},[74,167011,167012,167014,167016,167018],{"class":76,"line":14077},[74,167013,36732],{"class":134},[74,167015,85],{"class":84},[74,167017,157474],{"class":190},[74,167019,91],{"class":84},[74,167021,167022],{"class":76,"line":14082},[74,167023,35908],{"class":80},[74,167025,167026,167028],{"class":76,"line":14091},[74,167027,162303],{"class":80},[74,167029,3702],{"class":84},[74,167031,167032,167034,167036,167038],{"class":76,"line":14096},[74,167033,36732],{"class":134},[74,167035,85],{"class":84},[74,167037,157495],{"class":190},[74,167039,91],{"class":84},[19,167041,167042],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,167044,167046],{"id":167045},"_514-易错点","5.14 易错点",[27,167048,167049,167052,167055,167060,167065,167068],{},[30,167050,167051],{},"函数定义后必须调用才会执行。",[30,167053,167054],{},"函数名后面有括号才是调用。",[30,167056,167057,167059],{},[71,167058,21325],{}," 后面的代码不会执行。",[30,167061,167062,167063,32666],{},"没有返回值的函数默认返回 ",[71,167064,99967],{},[30,167066,167067],{},"局部变量不能在函数外部访问。",[30,167069,167070,167071,167073],{},"不要滥用 ",[71,167072,166107],{},"，更好的方式是让函数返回新值。",[19,167075,167076,167077,167079],{},"例如不用 ",[71,167078,166107],{}," 改写存款：",[64,167081,167083],{"className":34659,"code":167082,"language":34661,"meta":69,"style":69},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[71,167084,167085,167094,167105,167109,167113,167121,167134],{"__ignoreMap":69},[74,167086,167087,167089,167091],{"class":76,"line":77},[74,167088,36228],{"class":80},[74,167090,166711],{"class":1925},[74,167092,167093],{"class":84},"(balance, money):\n",[74,167095,167096,167098,167101,167103],{"class":76,"line":94},[74,167097,4053],{"class":80},[74,167099,167100],{"class":84}," balance ",[74,167102,567],{"class":80},[74,167104,154456],{"class":84},[74,167106,167107],{"class":76,"line":1141},[74,167108,2363],{"emptyLinePlaceholder":2362},[74,167110,167111],{"class":76,"line":1156},[74,167112,2363],{"emptyLinePlaceholder":2362},[74,167114,167115,167117,167119],{"class":76,"line":1162},[74,167116,166585],{"class":84},[74,167118,131],{"class":80},[74,167120,166590],{"class":134},[74,167122,167123,167125,167127,167130,167132],{"class":76,"line":1176},[74,167124,166585],{"class":84},[74,167126,131],{"class":80},[74,167128,167129],{"class":84}," save_money(balance, ",[74,167131,1684],{"class":134},[74,167133,91],{"class":84},[74,167135,167136,167138],{"class":76,"line":1182},[74,167137,34696],{"class":134},[74,167139,167140],{"class":84},"(balance)\n",[14,167142,167144],{"id":167143},"_515-本章练习","5.15 本章练习",[27,167146,167147,167154,167160,167166,167172],{},[30,167148,167149,167150,167153],{},"定义函数 ",[71,167151,167152],{},"print_student(name, age)","，输出学生信息。",[30,167155,167149,167156,167159],{},[71,167157,167158],{},"get_max(a, b, c)","，返回三个数中的最大值。",[30,167161,167149,167162,167165],{},[71,167163,167164],{},"is_even(num)","，判断一个数是否为偶数。",[30,167167,167149,167168,167171],{},[71,167169,167170],{},"calculate_bmi(weight, height)","，返回 BMI。",[30,167173,167174],{},"把第 4 章的菜单程序拆分成多个函数。",[5090,167176,167177],{},"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":69,"searchDepth":94,"depth":94,"links":167179},[167180,167181,167182,167183,167184,167185,167186,167187,167188,167192,167193,167194,167195,167196,167197],{"id":165200,"depth":94,"text":165201},{"id":165241,"depth":94,"text":165242},{"id":165331,"depth":94,"text":165332},{"id":165412,"depth":94,"text":165413},{"id":165545,"depth":94,"text":165546},{"id":165667,"depth":94,"text":165668},{"id":165789,"depth":94,"text":165790},{"id":165866,"depth":94,"text":165867},{"id":165988,"depth":94,"text":165989,"children":167189},[167190,167191],{"id":165992,"depth":1141,"text":165993},{"id":166050,"depth":1141,"text":166051},{"id":166179,"depth":94,"text":166180},{"id":166305,"depth":94,"text":166306},{"id":166418,"depth":94,"text":166419},{"id":166574,"depth":94,"text":166575},{"id":167045,"depth":94,"text":167046},{"id":167143,"depth":94,"text":167144},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":165192,"description":27656},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":167204,"title":167205,"body":167206,"description":27656,"extension":5121,"meta":170250,"navigation":2362,"path":170251,"seo":170252,"stem":170253,"__hash__":170254},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":167207,"toc":170231},[167208,167211,167215,167218,167221,167325,167328,167332,167335,167415,167418,167422,167425,167485,167488,167524,167527,167542,167546,167619,167622,167677,167680,167750,167753,167837,167847,167905,167909,167954,167957,167983,167986,168092,168096,168099,168141,168144,168208,168211,168215,168218,168279,168282,168312,168315,168353,168357,168360,168369,168372,168496,168499,168540,168544,168547,168558,168598,168601,168616,168621,168624,168691,168694,168784,168788,168791,168839,168842,168869,168871,168901,168904,168924,168927,168958,168961,168994,168998,169001,169025,169028,169052,169055,169079,169083,169086,169216,169219,169299,169302,169377,169381,169384,169434,169437,169479,169482,169506,169508,169532,169535,169590,169593,169659,169663,169666,169669,169707,169710,169763,169766,169812,169815,169848,169851,169855,170174,170178,170207,170211,170228],[10,167209,167205],{"id":167210},"_6-数据容器",[14,167212,167214],{"id":167213},"_61-什么是数据容器","6.1 什么是数据容器",[19,167216,167217],{},"数据容器用于一次保存多个数据。",[19,167219,167220],{},"常见容器：",[223,167222,167223,167240],{},[226,167224,167225],{},[229,167226,167227,167229,167232,167235,167238],{},[232,167228,30052],{},[232,167230,167231],{},"是否有序",[232,167233,167234],{},"是否可变",[232,167236,167237],{},"是否允许重复",[232,167239,31773],{},[270,167241,167242,167260,167276,167291,167308],{},[229,167243,167244,167247,167250,167253,167256],{},[275,167245,167246],{},"list列表",[275,167248,167249],{},"有序",[275,167251,167252],{},"可变",[275,167254,167255],{},"允许",[275,167257,167258],{},[71,167259,159538],{},[229,167261,167262,167265,167267,167270,167272],{},[275,167263,167264],{},"tuple元组",[275,167266,167249],{},[275,167268,167269],{},"不可变",[275,167271,167255],{},[275,167273,167274],{},[71,167275,159551],{},[229,167277,167278,167281,167283,167285,167287],{},[275,167279,167280],{},"str字符串",[275,167282,167249],{},[275,167284,167269],{},[275,167286,167255],{},[275,167288,167289],{},[71,167290,160161],{},[229,167292,167293,167296,167299,167301,167304],{},[275,167294,167295],{},"set集合",[275,167297,167298],{},"无序",[275,167300,167252],{},[275,167302,167303],{},"不允许",[275,167305,167306],{},[71,167307,159576],{},[229,167309,167310,167313,167315,167317,167320],{},[275,167311,167312],{},"dict字典",[275,167314,167249],{},[275,167316,167252],{},[275,167318,167319],{},"key不允许重复",[275,167321,167322],{},[71,167323,167324],{},"{\"name\": \"小明\"}",[19,167326,167327],{},"Python 3.7 之后，字典保持插入顺序。",[14,167329,167331],{"id":167330},"_62-列表list","6.2 列表list",[19,167333,167334],{},"列表用于保存一组有顺序的数据。",[64,167336,167338],{"className":34659,"code":167337,"language":34661,"meta":69,"style":69},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[71,167339,167340,167360,167385,167406],{"__ignoreMap":69},[74,167341,167342,167344,167346,167348,167350,167352,167354,167356,167358],{"class":76,"line":77},[74,167343,164661],{"class":84},[74,167345,131],{"class":80},[74,167347,56507],{"class":84},[74,167349,154169],{"class":190},[74,167351,16714],{"class":84},[74,167353,155217],{"class":190},[74,167355,16714],{"class":84},[74,167357,164012],{"class":190},[74,167359,37527],{"class":84},[74,167361,167362,167365,167367,167369,167371,167373,167375,167377,167379,167381,167383],{"class":76,"line":94},[74,167363,167364],{"class":84},"numbers ",[74,167366,131],{"class":80},[74,167368,56507],{"class":84},[74,167370,303],{"class":134},[74,167372,16714],{"class":84},[74,167374,163],{"class":134},[74,167376,16714],{"class":84},[74,167378,157],{"class":134},[74,167380,16714],{"class":84},[74,167382,379],{"class":134},[74,167384,37527],{"class":84},[74,167386,167387,167390,167392,167394,167396,167398,167400,167402,167404],{"class":76,"line":1141},[74,167388,167389],{"class":84},"mixed ",[74,167391,131],{"class":80},[74,167393,56507],{"class":84},[74,167395,154169],{"class":190},[74,167397,16714],{"class":84},[74,167399,736],{"class":134},[74,167401,16714],{"class":84},[74,167403,35757],{"class":134},[74,167405,37527],{"class":84},[74,167407,167408,167411,167413],{"class":76,"line":1156},[74,167409,167410],{"class":84},"empty ",[74,167412,131],{"class":80},[74,167414,56119],{"class":84},[19,167416,167417],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,167419,167421],{"id":167420},"_63-列表索引","6.3 列表索引",[19,167423,167424],{},"正向索引从 0 开始：",[64,167426,167428],{"className":34659,"code":167427,"language":34661,"meta":69,"style":69},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[71,167429,167430,167450,167454,167465,167475],{"__ignoreMap":69},[74,167431,167432,167434,167436,167438,167440,167442,167444,167446,167448],{"class":76,"line":77},[74,167433,164661],{"class":84},[74,167435,131],{"class":80},[74,167437,56507],{"class":84},[74,167439,154169],{"class":190},[74,167441,16714],{"class":84},[74,167443,155217],{"class":190},[74,167445,16714],{"class":84},[74,167447,164012],{"class":190},[74,167449,37527],{"class":84},[74,167451,167452],{"class":76,"line":94},[74,167453,2363],{"emptyLinePlaceholder":2362},[74,167455,167456,167458,167461,167463],{"class":76,"line":1141},[74,167457,34696],{"class":134},[74,167459,167460],{"class":84},"(names[",[74,167462,277],{"class":134},[74,167464,4620],{"class":84},[74,167466,167467,167469,167471,167473],{"class":76,"line":1156},[74,167468,34696],{"class":134},[74,167470,167460],{"class":84},[74,167472,303],{"class":134},[74,167474,4620],{"class":84},[74,167476,167477,167479,167481,167483],{"class":76,"line":1162},[74,167478,34696],{"class":134},[74,167480,167460],{"class":84},[74,167482,163],{"class":134},[74,167484,4620],{"class":84},[19,167486,167487],{},"反向索引从 -1 开始：",[64,167489,167491],{"className":34659,"code":167490,"language":34661,"meta":69,"style":69},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[71,167492,167493,167509],{"__ignoreMap":69},[74,167494,167495,167497,167499,167501,167503,167506],{"class":76,"line":77},[74,167496,34696],{"class":134},[74,167498,167460],{"class":84},[74,167500,618],{"class":80},[74,167502,303],{"class":134},[74,167504,167505],{"class":84},"])  ",[74,167507,167508],{"class":144},"# 小刚\n",[74,167510,167511,167513,167515,167517,167519,167521],{"class":76,"line":94},[74,167512,34696],{"class":134},[74,167514,167460],{"class":84},[74,167516,618],{"class":80},[74,167518,163],{"class":134},[74,167520,167505],{"class":84},[74,167522,167523],{"class":144},"# 小红\n",[19,167525,167526],{},"索引越界会报错：",[64,167528,167530],{"className":34659,"code":167529,"language":34661,"meta":69,"style":69},"print(names[3])\n",[71,167531,167532],{"__ignoreMap":69},[74,167533,167534,167536,167538,167540],{"class":76,"line":77},[74,167535,34696],{"class":134},[74,167537,167460],{"class":84},[74,167539,157],{"class":134},[74,167541,4620],{"class":84},[14,167543,167545],{"id":167544},"_64-列表常用方法","6.4 列表常用方法",[64,167547,167549],{"className":34659,"code":167548,"language":34661,"meta":69,"style":69},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[71,167550,167551,167567,167571,167580,167594,167608,167612],{"__ignoreMap":69},[74,167552,167553,167555,167557,167559,167561,167563,167565],{"class":76,"line":77},[74,167554,164661],{"class":84},[74,167556,131],{"class":80},[74,167558,56507],{"class":84},[74,167560,154169],{"class":190},[74,167562,16714],{"class":84},[74,167564,155217],{"class":190},[74,167566,37527],{"class":84},[74,167568,167569],{"class":76,"line":94},[74,167570,2363],{"emptyLinePlaceholder":2362},[74,167572,167573,167576,167578],{"class":76,"line":1141},[74,167574,167575],{"class":84},"names.append(",[74,167577,164012],{"class":190},[74,167579,91],{"class":84},[74,167581,167582,167585,167587,167589,167592],{"class":76,"line":1156},[74,167583,167584],{"class":84},"names.insert(",[74,167586,303],{"class":134},[74,167588,16714],{"class":84},[74,167590,167591],{"class":190},"\"小李\"",[74,167593,91],{"class":84},[74,167595,167596,167599,167601,167603,167606],{"class":76,"line":1162},[74,167597,167598],{"class":84},"names.extend([",[74,167600,12962],{"class":190},[74,167602,16714],{"class":84},[74,167604,167605],{"class":190},"\"小赵\"",[74,167607,4620],{"class":84},[74,167609,167610],{"class":76,"line":1176},[74,167611,2363],{"emptyLinePlaceholder":2362},[74,167613,167614,167616],{"class":76,"line":1182},[74,167615,34696],{"class":134},[74,167617,167618],{"class":84},"(names)\n",[19,167620,167621],{},"删除元素：",[64,167623,167625],{"className":34659,"code":167624,"language":34661,"meta":69,"style":69},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[71,167626,167627,167636,167646,167660,167672],{"__ignoreMap":69},[74,167628,167629,167632,167634],{"class":76,"line":77},[74,167630,167631],{"class":84},"names.remove(",[74,167633,155217],{"class":190},[74,167635,91],{"class":84},[74,167637,167638,167641,167643],{"class":76,"line":94},[74,167639,167640],{"class":84},"last ",[74,167642,131],{"class":80},[74,167644,167645],{"class":84}," names.pop()\n",[74,167647,167648,167651,167653,167656,167658],{"class":76,"line":1141},[74,167649,167650],{"class":84},"first ",[74,167652,131],{"class":80},[74,167654,167655],{"class":84}," names.pop(",[74,167657,277],{"class":134},[74,167659,91],{"class":84},[74,167661,167662,167665,167668,167670],{"class":76,"line":1156},[74,167663,167664],{"class":80},"del",[74,167666,167667],{"class":84}," names[",[74,167669,277],{"class":134},[74,167671,37527],{"class":84},[74,167673,167674],{"class":76,"line":1162},[74,167675,167676],{"class":84},"names.clear()\n",[19,167678,167679],{},"查询和统计：",[64,167681,167683],{"className":34659,"code":167682,"language":34661,"meta":69,"style":69},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[71,167684,167685,167713,167717,167728,167739],{"__ignoreMap":69},[74,167686,167687,167689,167691,167693,167695,167697,167699,167701,167703,167705,167707,167709,167711],{"class":76,"line":77},[74,167688,167364],{"class":84},[74,167690,131],{"class":80},[74,167692,56507],{"class":84},[74,167694,303],{"class":134},[74,167696,16714],{"class":84},[74,167698,163],{"class":134},[74,167700,16714],{"class":84},[74,167702,157],{"class":134},[74,167704,16714],{"class":84},[74,167706,163],{"class":134},[74,167708,16714],{"class":84},[74,167710,379],{"class":134},[74,167712,37527],{"class":84},[74,167714,167715],{"class":76,"line":94},[74,167716,2363],{"emptyLinePlaceholder":2362},[74,167718,167719,167721,167724,167726],{"class":76,"line":1141},[74,167720,34696],{"class":134},[74,167722,167723],{"class":84},"(numbers.index(",[74,167725,157],{"class":134},[74,167727,34778],{"class":84},[74,167729,167730,167732,167735,167737],{"class":76,"line":1156},[74,167731,34696],{"class":134},[74,167733,167734],{"class":84},"(numbers.count(",[74,167736,163],{"class":134},[74,167738,34778],{"class":84},[74,167740,167741,167743,167745,167747],{"class":76,"line":1162},[74,167742,34696],{"class":134},[74,167744,85],{"class":84},[74,167746,11637],{"class":134},[74,167748,167749],{"class":84},"(numbers))\n",[19,167751,167752],{},"排序：",[64,167754,167756],{"className":34659,"code":167755,"language":34661,"meta":69,"style":69},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[71,167757,167758,167782,167786,167791,167798,167802,167816,167822,167826,167831],{"__ignoreMap":69},[74,167759,167760,167762,167764,167766,167768,167770,167772,167774,167776,167778,167780],{"class":76,"line":77},[74,167761,167364],{"class":84},[74,167763,131],{"class":80},[74,167765,56507],{"class":84},[74,167767,157],{"class":134},[74,167769,16714],{"class":84},[74,167771,303],{"class":134},[74,167773,16714],{"class":84},[74,167775,405],{"class":134},[74,167777,16714],{"class":84},[74,167779,163],{"class":134},[74,167781,37527],{"class":84},[74,167783,167784],{"class":76,"line":94},[74,167785,2363],{"emptyLinePlaceholder":2362},[74,167787,167788],{"class":76,"line":1141},[74,167789,167790],{"class":84},"numbers.sort()\n",[74,167792,167793,167795],{"class":76,"line":1156},[74,167794,34696],{"class":134},[74,167796,167797],{"class":84},"(numbers)\n",[74,167799,167800],{"class":76,"line":1162},[74,167801,2363],{"emptyLinePlaceholder":2362},[74,167803,167804,167807,167810,167812,167814],{"class":76,"line":1176},[74,167805,167806],{"class":84},"numbers.sort(",[74,167808,167809],{"class":9495},"reverse",[74,167811,131],{"class":80},[74,167813,35757],{"class":134},[74,167815,91],{"class":84},[74,167817,167818,167820],{"class":76,"line":1182},[74,167819,34696],{"class":134},[74,167821,167797],{"class":84},[74,167823,167824],{"class":76,"line":1273},[74,167825,2363],{"emptyLinePlaceholder":2362},[74,167827,167828],{"class":76,"line":1279},[74,167829,167830],{"class":84},"numbers.reverse()\n",[74,167832,167833,167835],{"class":76,"line":1291},[74,167834,34696],{"class":134},[74,167836,167797],{"class":84},[19,167838,167839,167842,167843,167846],{},[71,167840,167841],{},"sort()"," 会修改原列表，",[71,167844,167845],{},"sorted()"," 返回新列表。",[64,167848,167850],{"className":34659,"code":167849,"language":34661,"meta":69,"style":69},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[71,167851,167852,167876,167888,167892,167898],{"__ignoreMap":69},[74,167853,167854,167856,167858,167860,167862,167864,167866,167868,167870,167872,167874],{"class":76,"line":77},[74,167855,167364],{"class":84},[74,167857,131],{"class":80},[74,167859,56507],{"class":84},[74,167861,157],{"class":134},[74,167863,16714],{"class":84},[74,167865,303],{"class":134},[74,167867,16714],{"class":84},[74,167869,405],{"class":134},[74,167871,16714],{"class":84},[74,167873,163],{"class":134},[74,167875,37527],{"class":84},[74,167877,167878,167881,167883,167886],{"class":76,"line":94},[74,167879,167880],{"class":84},"new_numbers ",[74,167882,131],{"class":80},[74,167884,167885],{"class":134}," sorted",[74,167887,167797],{"class":84},[74,167889,167890],{"class":76,"line":1141},[74,167891,2363],{"emptyLinePlaceholder":2362},[74,167893,167894,167896],{"class":76,"line":1156},[74,167895,34696],{"class":134},[74,167897,167797],{"class":84},[74,167899,167900,167902],{"class":76,"line":1162},[74,167901,34696],{"class":134},[74,167903,167904],{"class":84},"(new_numbers)\n",[14,167906,167908],{"id":167907},"_65-列表遍历","6.5 列表遍历",[64,167910,167912],{"className":34659,"code":167911,"language":34661,"meta":69,"style":69},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[71,167913,167914,167934,167938,167948],{"__ignoreMap":69},[74,167915,167916,167918,167920,167922,167924,167926,167928,167930,167932],{"class":76,"line":77},[74,167917,164661],{"class":84},[74,167919,131],{"class":80},[74,167921,56507],{"class":84},[74,167923,154169],{"class":190},[74,167925,16714],{"class":84},[74,167927,155217],{"class":190},[74,167929,16714],{"class":84},[74,167931,164012],{"class":190},[74,167933,37527],{"class":84},[74,167935,167936],{"class":76,"line":94},[74,167937,2363],{"emptyLinePlaceholder":2362},[74,167939,167940,167942,167944,167946],{"class":76,"line":1141},[74,167941,2988],{"class":80},[74,167943,164697],{"class":84},[74,167945,30324],{"class":80},[74,167947,164702],{"class":84},[74,167949,167950,167952],{"class":76,"line":1156},[74,167951,35580],{"class":134},[74,167953,154941],{"class":84},[19,167955,167956],{},"需要索引时：",[64,167958,167960],{"className":34659,"code":167959,"language":34661,"meta":69,"style":69},"for index, name in enumerate(names):\n    print(index, name)\n",[71,167961,167962,167976],{"__ignoreMap":69},[74,167963,167964,167966,167969,167971,167973],{"class":76,"line":77},[74,167965,2988],{"class":80},[74,167967,167968],{"class":84}," index, name ",[74,167970,30324],{"class":80},[74,167972,35887],{"class":134},[74,167974,167975],{"class":84},"(names):\n",[74,167977,167978,167980],{"class":76,"line":94},[74,167979,35580],{"class":134},[74,167981,167982],{"class":84},"(index, name)\n",[19,167984,167985],{},"统计总分：",[64,167987,167989],{"className":34659,"code":167988,"language":34661,"meta":69,"style":69},"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",[71,167990,167991,168016,168024,168028,168039,168047,168051,168068],{"__ignoreMap":69},[74,167992,167993,167996,167998,168000,168002,168004,168006,168008,168010,168012,168014],{"class":76,"line":77},[74,167994,167995],{"class":84},"scores ",[74,167997,131],{"class":80},[74,167999,56507],{"class":84},[74,168001,948],{"class":134},[74,168003,16714],{"class":84},[74,168005,822],{"class":134},[74,168007,16714],{"class":84},[74,168009,340],{"class":134},[74,168011,16714],{"class":84},[74,168013,647],{"class":134},[74,168015,37527],{"class":84},[74,168017,168018,168020,168022],{"class":76,"line":94},[74,168019,161541],{"class":84},[74,168021,131],{"class":80},[74,168023,51614],{"class":134},[74,168025,168026],{"class":76,"line":1141},[74,168027,2363],{"emptyLinePlaceholder":2362},[74,168029,168030,168032,168034,168036],{"class":76,"line":1156},[74,168031,2988],{"class":80},[74,168033,162064],{"class":84},[74,168035,30324],{"class":80},[74,168037,168038],{"class":84}," scores:\n",[74,168040,168041,168043,168045],{"class":76,"line":1162},[74,168042,163588],{"class":84},[74,168044,13756],{"class":80},[74,168046,1541],{"class":84},[74,168048,168049],{"class":76,"line":1176},[74,168050,2363],{"emptyLinePlaceholder":2362},[74,168052,168053,168056,168058,168061,168063,168065],{"class":76,"line":1182},[74,168054,168055],{"class":84},"avg ",[74,168057,131],{"class":80},[74,168059,168060],{"class":84}," total ",[74,168062,670],{"class":80},[74,168064,11610],{"class":134},[74,168066,168067],{"class":84},"(scores)\n",[74,168069,168070,168072,168074,168076,168079,168081,168084,168086,168088,168090],{"class":76,"line":1273},[74,168071,34696],{"class":134},[74,168073,85],{"class":84},[74,168075,138],{"class":80},[74,168077,168078],{"class":190},"\"平均分:",[74,168080,982],{"class":134},[74,168082,168083],{"class":84},"avg",[74,168085,161440],{"class":80},[74,168087,1032],{"class":134},[74,168089,337],{"class":190},[74,168091,91],{"class":84},[14,168093,168095],{"id":168094},"_66-元组tuple","6.6 元组tuple",[19,168097,168098],{},"元组和列表类似，但不可修改。",[64,168100,168102],{"className":34659,"code":168101,"language":34661,"meta":69,"style":69},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[71,168103,168104,168121],{"__ignoreMap":69},[74,168105,168106,168109,168111,168113,168115,168117,168119],{"class":76,"line":77},[74,168107,168108],{"class":84},"point ",[74,168110,131],{"class":80},[74,168112,1620],{"class":84},[74,168114,532],{"class":134},[74,168116,16714],{"class":84},[74,168118,786],{"class":134},[74,168120,91],{"class":84},[74,168122,168123,168125,168127,168129,168131,168133,168135,168137,168139],{"class":76,"line":94},[74,168124,120595],{"class":84},[74,168126,131],{"class":80},[74,168128,1620],{"class":84},[74,168130,154169],{"class":190},[74,168132,16714],{"class":84},[74,168134,736],{"class":134},[74,168136,16714],{"class":84},[74,168138,73550],{"class":190},[74,168140,91],{"class":84},[19,168142,168143],{},"单元素元组必须加逗号：",[64,168145,168147],{"className":34659,"code":168146,"language":34661,"meta":69,"style":69},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[71,168148,168149,168163,168176,168180,168194],{"__ignoreMap":69},[74,168150,168151,168154,168156,168158,168160],{"class":76,"line":77},[74,168152,168153],{"class":84},"t1 ",[74,168155,131],{"class":80},[74,168157,1620],{"class":84},[74,168159,532],{"class":134},[74,168161,168162],{"class":84},",)\n",[74,168164,168165,168168,168170,168172,168174],{"class":76,"line":94},[74,168166,168167],{"class":84},"t2 ",[74,168169,131],{"class":80},[74,168171,1620],{"class":84},[74,168173,532],{"class":134},[74,168175,91],{"class":84},[74,168177,168178],{"class":76,"line":1141},[74,168179,2363],{"emptyLinePlaceholder":2362},[74,168181,168182,168184,168186,168188,168191],{"class":76,"line":1156},[74,168183,34696],{"class":134},[74,168185,85],{"class":84},[74,168187,107388],{"class":134},[74,168189,168190],{"class":84},"(t1))  ",[74,168192,168193],{"class":144},"# tuple\n",[74,168195,168196,168198,168200,168202,168205],{"class":76,"line":1162},[74,168197,34696],{"class":134},[74,168199,85],{"class":84},[74,168201,107388],{"class":134},[74,168203,168204],{"class":84},"(t2))  ",[74,168206,168207],{"class":144},"# int\n",[19,168209,168210],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,168212,168214],{"id":168213},"_67-字符串str","6.7 字符串str",[19,168216,168217],{},"字符串也是序列，可以索引、切片和遍历。",[64,168219,168221],{"className":34659,"code":168220,"language":34661,"meta":69,"style":69},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[71,168222,168223,168231,168235,168246,168258,168262,168273],{"__ignoreMap":69},[74,168224,168225,168227,168229],{"class":76,"line":77},[74,168226,160725],{"class":84},[74,168228,131],{"class":80},[74,168230,163962],{"class":190},[74,168232,168233],{"class":76,"line":94},[74,168234,2363],{"emptyLinePlaceholder":2362},[74,168236,168237,168239,168242,168244],{"class":76,"line":1141},[74,168238,34696],{"class":134},[74,168240,168241],{"class":84},"(text[",[74,168243,277],{"class":134},[74,168245,4620],{"class":84},[74,168247,168248,168250,168252,168254,168256],{"class":76,"line":1156},[74,168249,34696],{"class":134},[74,168251,168241],{"class":84},[74,168253,618],{"class":80},[74,168255,303],{"class":134},[74,168257,4620],{"class":84},[74,168259,168260],{"class":76,"line":1162},[74,168261,2363],{"emptyLinePlaceholder":2362},[74,168263,168264,168266,168268,168270],{"class":76,"line":1176},[74,168265,2988],{"class":80},[74,168267,163973],{"class":84},[74,168269,30324],{"class":80},[74,168271,168272],{"class":84}," text:\n",[74,168274,168275,168277],{"class":76,"line":1182},[74,168276,35580],{"class":134},[74,168278,163984],{"class":84},[19,168280,168281],{},"字符串不可变：",[64,168283,168285],{"className":34659,"code":168284,"language":34661,"meta":69,"style":69},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[71,168286,168287,168295],{"__ignoreMap":69},[74,168288,168289,168291,168293],{"class":76,"line":77},[74,168290,160725],{"class":84},[74,168292,131],{"class":80},[74,168294,163962],{"class":190},[74,168296,168297,168300,168302,168304,168306,168309],{"class":76,"line":94},[74,168298,168299],{"class":84},"text[",[74,168301,277],{"class":134},[74,168303,4406],{"class":84},[74,168305,131],{"class":80},[74,168307,168308],{"class":190}," \"P\"",[74,168310,168311],{"class":144},"  # 报错\n",[19,168313,168314],{},"如果要得到新字符串：",[64,168316,168318],{"className":34659,"code":168317,"language":34661,"meta":69,"style":69},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[71,168319,168320,168328,168346],{"__ignoreMap":69},[74,168321,168322,168324,168326],{"class":76,"line":77},[74,168323,160725],{"class":84},[74,168325,131],{"class":80},[74,168327,163962],{"class":190},[74,168329,168330,168332,168334,168336,168338,168341,168343],{"class":76,"line":94},[74,168331,160725],{"class":84},[74,168333,131],{"class":80},[74,168335,168308],{"class":190},[74,168337,49847],{"class":80},[74,168339,168340],{"class":84}," text[",[74,168342,303],{"class":134},[74,168344,168345],{"class":84},":]\n",[74,168347,168348,168350],{"class":76,"line":1141},[74,168349,34696],{"class":134},[74,168351,168352],{"class":84},"(text)\n",[14,168354,168356],{"id":168355},"_68-切片","6.8 切片",[19,168358,168359],{},"切片用于从序列中取一部分。",[64,168361,168363],{"className":34659,"code":168362,"language":34661,"meta":69,"style":69},"序列[开始:结束:步长]\n",[71,168364,168365],{"__ignoreMap":69},[74,168366,168367],{"class":76,"line":77},[74,168368,168362],{"class":84},[19,168370,168371],{},"结束位置不包含。",[64,168373,168375],{"className":34659,"code":168374,"language":34661,"meta":69,"style":69},"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",[71,168376,168377,168414,168418,168437,168452,168466,168480],{"__ignoreMap":69},[74,168378,168379,168382,168384,168386,168388,168390,168392,168394,168396,168398,168400,168402,168404,168406,168408,168410,168412],{"class":76,"line":77},[74,168380,168381],{"class":84},"nums ",[74,168383,131],{"class":80},[74,168385,56507],{"class":84},[74,168387,277],{"class":134},[74,168389,16714],{"class":84},[74,168391,303],{"class":134},[74,168393,16714],{"class":84},[74,168395,163],{"class":134},[74,168397,16714],{"class":84},[74,168399,157],{"class":134},[74,168401,16714],{"class":84},[74,168403,379],{"class":134},[74,168405,16714],{"class":84},[74,168407,405],{"class":134},[74,168409,16714],{"class":84},[74,168411,430],{"class":134},[74,168413,37527],{"class":84},[74,168415,168416],{"class":76,"line":94},[74,168417,2363],{"emptyLinePlaceholder":2362},[74,168419,168420,168422,168425,168427,168429,168431,168434],{"class":76,"line":1141},[74,168421,34696],{"class":134},[74,168423,168424],{"class":84},"(nums[",[74,168426,303],{"class":134},[74,168428,945],{"class":84},[74,168430,379],{"class":134},[74,168432,168433],{"class":84},"])    ",[74,168435,168436],{"class":144},"# [1, 2, 3]\n",[74,168438,168439,168441,168444,168446,168449],{"class":76,"line":1156},[74,168440,34696],{"class":134},[74,168442,168443],{"class":84},"(nums[:",[74,168445,157],{"class":134},[74,168447,168448],{"class":84},"])     ",[74,168450,168451],{"class":144},"# [0, 1, 2]\n",[74,168453,168454,168456,168458,168460,168463],{"class":76,"line":1162},[74,168455,34696],{"class":134},[74,168457,168424],{"class":84},[74,168459,157],{"class":134},[74,168461,168462],{"class":84},":])     ",[74,168464,168465],{"class":144},"# [3, 4, 5, 6]\n",[74,168467,168468,168470,168473,168475,168477],{"class":76,"line":1176},[74,168469,34696],{"class":134},[74,168471,168472],{"class":84},"(nums[::",[74,168474,163],{"class":134},[74,168476,168433],{"class":84},[74,168478,168479],{"class":144},"# [0, 2, 4, 6]\n",[74,168481,168482,168484,168486,168488,168490,168493],{"class":76,"line":1182},[74,168483,34696],{"class":134},[74,168485,168472],{"class":84},[74,168487,618],{"class":80},[74,168489,303],{"class":134},[74,168491,168492],{"class":84},"])   ",[74,168494,168495],{"class":144},"# 反转\n",[19,168497,168498],{},"字符串切片：",[64,168500,168502],{"className":34659,"code":168501,"language":34661,"meta":69,"style":69},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[71,168503,168504,168513,168527],{"__ignoreMap":69},[74,168505,168506,168508,168510],{"class":76,"line":77},[74,168507,160725],{"class":84},[74,168509,131],{"class":80},[74,168511,168512],{"class":190}," \"abcdef\"\n",[74,168514,168515,168517,168519,168521,168523,168525],{"class":76,"line":94},[74,168516,34696],{"class":134},[74,168518,168241],{"class":84},[74,168520,303],{"class":134},[74,168522,945],{"class":84},[74,168524,379],{"class":134},[74,168526,4620],{"class":84},[74,168528,168529,168531,168534,168536,168538],{"class":76,"line":1141},[74,168530,34696],{"class":134},[74,168532,168533],{"class":84},"(text[::",[74,168535,618],{"class":80},[74,168537,303],{"class":134},[74,168539,4620],{"class":84},[14,168541,168543],{"id":168542},"_69-集合set","6.9 集合set",[19,168545,168546],{},"集合特点：",[27,168548,168549,168552,168555],{},[30,168550,168551],{},"无序。",[30,168553,168554],{},"元素不重复。",[30,168556,168557],{},"可以做交集、并集、差集。",[64,168559,168561],{"className":34659,"code":168560,"language":34661,"meta":69,"style":69},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[71,168562,168563,168591],{"__ignoreMap":69},[74,168564,168565,168567,168569,168571,168573,168575,168577,168579,168581,168583,168585,168587,168589],{"class":76,"line":77},[74,168566,168381],{"class":84},[74,168568,131],{"class":80},[74,168570,4411],{"class":84},[74,168572,303],{"class":134},[74,168574,16714],{"class":84},[74,168576,163],{"class":134},[74,168578,16714],{"class":84},[74,168580,157],{"class":134},[74,168582,16714],{"class":84},[74,168584,157],{"class":134},[74,168586,16714],{"class":84},[74,168588,379],{"class":134},[74,168590,1527],{"class":84},[74,168592,168593,168595],{"class":76,"line":94},[74,168594,34696],{"class":134},[74,168596,168597],{"class":84},"(nums)\n",[19,168599,168600],{},"创建空集合：",[64,168602,168604],{"className":34659,"code":168603,"language":34661,"meta":69,"style":69},"s = set()\n",[71,168605,168606],{"__ignoreMap":69},[74,168607,168608,168610,168612,168614],{"class":76,"line":77},[74,168609,14858],{"class":84},[74,168611,131],{"class":80},[74,168613,124003],{"class":134},[74,168615,1938],{"class":84},[19,168617,13304,168618,168620],{},[71,168619,36740],{}," 是空字典，不是空集合。",[19,168622,168623],{},"集合常用操作：",[64,168625,168627],{"className":34659,"code":168626,"language":34661,"meta":69,"style":69},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[71,168628,168629,168649,168653,168662,168671,168680],{"__ignoreMap":69},[74,168630,168631,168633,168635,168637,168639,168641,168643,168645,168647],{"class":76,"line":77},[74,168632,14858],{"class":84},[74,168634,131],{"class":80},[74,168636,4411],{"class":84},[74,168638,303],{"class":134},[74,168640,16714],{"class":84},[74,168642,163],{"class":134},[74,168644,16714],{"class":84},[74,168646,157],{"class":134},[74,168648,1527],{"class":84},[74,168650,168651],{"class":76,"line":94},[74,168652,2363],{"emptyLinePlaceholder":2362},[74,168654,168655,168658,168660],{"class":76,"line":1141},[74,168656,168657],{"class":84},"s.add(",[74,168659,379],{"class":134},[74,168661,91],{"class":84},[74,168663,168664,168667,168669],{"class":76,"line":1156},[74,168665,168666],{"class":84},"s.remove(",[74,168668,163],{"class":134},[74,168670,91],{"class":84},[74,168672,168673,168676,168678],{"class":76,"line":1162},[74,168674,168675],{"class":84},"s.discard(",[74,168677,532],{"class":134},[74,168679,91],{"class":84},[74,168681,168682,168684,168686,168688],{"class":76,"line":1176},[74,168683,34696],{"class":134},[74,168685,85],{"class":84},[74,168687,11637],{"class":134},[74,168689,168690],{"class":84},"(s))\n",[19,168692,168693],{},"交并差：",[64,168695,168697],{"className":34659,"code":168696,"language":34661,"meta":69,"style":69},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[71,168698,168699,168719,168739,168743,168758,168771],{"__ignoreMap":69},[74,168700,168701,168703,168705,168707,168709,168711,168713,168715,168717],{"class":76,"line":77},[74,168702,15198],{"class":84},[74,168704,131],{"class":80},[74,168706,4411],{"class":84},[74,168708,303],{"class":134},[74,168710,16714],{"class":84},[74,168712,163],{"class":134},[74,168714,16714],{"class":84},[74,168716,157],{"class":134},[74,168718,1527],{"class":84},[74,168720,168721,168723,168725,168727,168729,168731,168733,168735,168737],{"class":76,"line":94},[74,168722,15224],{"class":84},[74,168724,131],{"class":80},[74,168726,4411],{"class":84},[74,168728,157],{"class":134},[74,168730,16714],{"class":84},[74,168732,379],{"class":134},[74,168734,16714],{"class":84},[74,168736,405],{"class":134},[74,168738,1527],{"class":84},[74,168740,168741],{"class":76,"line":1141},[74,168742,2363],{"emptyLinePlaceholder":2362},[74,168744,168745,168747,168750,168752,168755],{"class":76,"line":1156},[74,168746,34696],{"class":134},[74,168748,168749],{"class":84},"(a ",[74,168751,439],{"class":80},[74,168753,168754],{"class":84}," b)  ",[74,168756,168757],{"class":144},"# 交集\n",[74,168759,168760,168762,168764,168766,168768],{"class":76,"line":1162},[74,168761,34696],{"class":134},[74,168763,168749],{"class":84},[74,168765,1007],{"class":80},[74,168767,168754],{"class":84},[74,168769,168770],{"class":144},"# 并集\n",[74,168772,168773,168775,168777,168779,168781],{"class":76,"line":1176},[74,168774,34696],{"class":134},[74,168776,168749],{"class":84},[74,168778,618],{"class":80},[74,168780,168754],{"class":84},[74,168782,168783],{"class":144},"# 差集\n",[14,168785,168787],{"id":168786},"_610-字典dict","6.10 字典dict",[19,168789,168790],{},"字典通过 key-value 保存数据。",[64,168792,168794],{"className":34659,"code":168793,"language":34661,"meta":69,"style":69},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[71,168795,168796,168804,168814,168825,168835],{"__ignoreMap":69},[74,168797,168798,168800,168802],{"class":76,"line":77},[74,168799,153762],{"class":84},[74,168801,131],{"class":80},[74,168803,19851],{"class":84},[74,168805,168806,168808,168810,168812],{"class":76,"line":94},[74,168807,151301],{"class":190},[74,168809,55718],{"class":84},[74,168811,154169],{"class":190},[74,168813,35747],{"class":84},[74,168815,168816,168819,168821,168823],{"class":76,"line":1141},[74,168817,168818],{"class":190},"    \"age\"",[74,168820,55718],{"class":84},[74,168822,736],{"class":134},[74,168824,35747],{"class":84},[74,168826,168827,168830,168832],{"class":76,"line":1156},[74,168828,168829],{"class":190},"    \"score\"",[74,168831,55718],{"class":84},[74,168833,168834],{"class":134},"95\n",[74,168836,168837],{"class":76,"line":1162},[74,168838,1527],{"class":84},[19,168840,168841],{},"获取值：",[64,168843,168845],{"className":34659,"code":168844,"language":34661,"meta":69,"style":69},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[71,168846,168847,168858],{"__ignoreMap":69},[74,168848,168849,168851,168854,168856],{"class":76,"line":77},[74,168850,34696],{"class":134},[74,168852,168853],{"class":84},"(student[",[74,168855,66960],{"class":190},[74,168857,4620],{"class":84},[74,168859,168860,168862,168865,168867],{"class":76,"line":94},[74,168861,34696],{"class":134},[74,168863,168864],{"class":84},"(student.get(",[74,168866,66960],{"class":190},[74,168868,34778],{"class":84},[19,168870,19667],{},[64,168872,168874],{"className":34659,"code":168873,"language":34661,"meta":69,"style":69},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[71,168875,168876,168889],{"__ignoreMap":69},[74,168877,168878,168880,168883,168886],{"class":76,"line":77},[74,168879,157140],{"class":84},[74,168881,168882],{"class":190},"\"address\"",[74,168884,168885],{"class":84},"]     ",[74,168887,168888],{"class":144},"# key不存在会报错\n",[74,168890,168891,168894,168896,168898],{"class":76,"line":94},[74,168892,168893],{"class":84},"student.get(",[74,168895,168882],{"class":190},[74,168897,17993],{"class":84},[74,168899,168900],{"class":144},"# key不存在返回None\n",[19,168902,168903],{},"设置默认值：",[64,168905,168907],{"className":34659,"code":168906,"language":34661,"meta":69,"style":69},"print(student.get(\"address\", \"未知\"))\n",[71,168908,168909],{"__ignoreMap":69},[74,168910,168911,168913,168915,168917,168919,168922],{"class":76,"line":77},[74,168912,34696],{"class":134},[74,168914,168864],{"class":84},[74,168916,168882],{"class":190},[74,168918,16714],{"class":84},[74,168920,168921],{"class":190},"\"未知\"",[74,168923,34778],{"class":84},[19,168925,168926],{},"新增和修改：",[64,168928,168930],{"className":34659,"code":168929,"language":34661,"meta":69,"style":69},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[71,168931,168932,168945],{"__ignoreMap":69},[74,168933,168934,168936,168938,168940,168942],{"class":76,"line":77},[74,168935,157140],{"class":84},[74,168937,73405],{"class":190},[74,168939,4406],{"class":84},[74,168941,131],{"class":80},[74,168943,168944],{"class":134}," 19\n",[74,168946,168947,168949,168951,168953,168955],{"class":76,"line":94},[74,168948,157140],{"class":84},[74,168950,168882],{"class":190},[74,168952,4406],{"class":84},[74,168954,131],{"class":80},[74,168956,168957],{"class":190}," \"北京\"\n",[19,168959,168960],{},"删除：",[64,168962,168964],{"className":34659,"code":168963,"language":34661,"meta":69,"style":69},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[71,168965,168966,168979,168989],{"__ignoreMap":69},[74,168967,168968,168970,168972,168975,168977],{"class":76,"line":77},[74,168969,159639],{"class":84},[74,168971,131],{"class":80},[74,168973,168974],{"class":84}," student.pop(",[74,168976,155753],{"class":190},[74,168978,91],{"class":84},[74,168980,168981,168983,168985,168987],{"class":76,"line":94},[74,168982,167664],{"class":80},[74,168984,156430],{"class":84},[74,168986,73405],{"class":190},[74,168988,37527],{"class":84},[74,168990,168991],{"class":76,"line":1141},[74,168992,168993],{"class":84},"student.clear()\n",[14,168995,168997],{"id":168996},"_611-字典遍历","6.11 字典遍历",[19,168999,169000],{},"遍历 key：",[64,169002,169004],{"className":34659,"code":169003,"language":34661,"meta":69,"style":69},"for key in student:\n    print(key, student[key])\n",[71,169005,169006,169018],{"__ignoreMap":69},[74,169007,169008,169010,169013,169015],{"class":76,"line":77},[74,169009,2988],{"class":80},[74,169011,169012],{"class":84}," key ",[74,169014,30324],{"class":80},[74,169016,169017],{"class":84}," student:\n",[74,169019,169020,169022],{"class":76,"line":94},[74,169021,35580],{"class":134},[74,169023,169024],{"class":84},"(key, student[key])\n",[19,169026,169027],{},"遍历 value：",[64,169029,169031],{"className":34659,"code":169030,"language":34661,"meta":69,"style":69},"for value in student.values():\n    print(value)\n",[71,169032,169033,169045],{"__ignoreMap":69},[74,169034,169035,169037,169040,169042],{"class":76,"line":77},[74,169036,2988],{"class":80},[74,169038,169039],{"class":84}," value ",[74,169041,30324],{"class":80},[74,169043,169044],{"class":84}," student.values():\n",[74,169046,169047,169049],{"class":76,"line":94},[74,169048,35580],{"class":134},[74,169050,169051],{"class":84},"(value)\n",[19,169053,169054],{},"遍历 key 和 value：",[64,169056,169058],{"className":34659,"code":169057,"language":34661,"meta":69,"style":69},"for key, value in student.items():\n    print(key, value)\n",[71,169059,169060,169072],{"__ignoreMap":69},[74,169061,169062,169064,169067,169069],{"class":76,"line":77},[74,169063,2988],{"class":80},[74,169065,169066],{"class":84}," key, value ",[74,169068,30324],{"class":80},[74,169070,169071],{"class":84}," student.items():\n",[74,169073,169074,169076],{"class":76,"line":94},[74,169075,35580],{"class":134},[74,169077,169078],{"class":84},"(key, value)\n",[14,169080,169082],{"id":169081},"_612-嵌套容器","6.12 嵌套容器",[19,169084,169085],{},"列表中保存字典，是项目中最常见的结构之一。",[64,169087,169089],{"className":34659,"code":169088,"language":34661,"meta":69,"style":69},"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",[71,169090,169091,169099,169127,169155,169183,169187,169191,169201],{"__ignoreMap":69},[74,169092,169093,169095,169097],{"class":76,"line":77},[74,169094,163997],{"class":84},[74,169096,131],{"class":80},[74,169098,59728],{"class":84},[74,169100,169101,169103,169105,169107,169109,169111,169113,169115,169117,169119,169121,169123,169125],{"class":76,"line":94},[74,169102,152666],{"class":84},[74,169104,66960],{"class":190},[74,169106,55718],{"class":84},[74,169108,154169],{"class":190},[74,169110,16714],{"class":84},[74,169112,73405],{"class":190},[74,169114,55718],{"class":84},[74,169116,736],{"class":134},[74,169118,16714],{"class":84},[74,169120,155753],{"class":190},[74,169122,55718],{"class":84},[74,169124,1075],{"class":134},[74,169126,4893],{"class":84},[74,169128,169129,169131,169133,169135,169137,169139,169141,169143,169145,169147,169149,169151,169153],{"class":76,"line":1141},[74,169130,152666],{"class":84},[74,169132,66960],{"class":190},[74,169134,55718],{"class":84},[74,169136,155217],{"class":190},[74,169138,16714],{"class":84},[74,169140,73405],{"class":190},[74,169142,55718],{"class":84},[74,169144,711],{"class":134},[74,169146,16714],{"class":84},[74,169148,155753],{"class":190},[74,169150,55718],{"class":84},[74,169152,897],{"class":134},[74,169154,4893],{"class":84},[74,169156,169157,169159,169161,169163,169165,169167,169169,169171,169173,169175,169177,169179,169181],{"class":76,"line":1156},[74,169158,152666],{"class":84},[74,169160,66960],{"class":190},[74,169162,55718],{"class":84},[74,169164,164012],{"class":190},[74,169166,16714],{"class":84},[74,169168,73405],{"class":190},[74,169170,55718],{"class":84},[74,169172,761],{"class":134},[74,169174,16714],{"class":84},[74,169176,155753],{"class":190},[74,169178,55718],{"class":84},[74,169180,492],{"class":134},[74,169182,4893],{"class":84},[74,169184,169185],{"class":76,"line":1162},[74,169186,37527],{"class":84},[74,169188,169189],{"class":76,"line":1176},[74,169190,2363],{"emptyLinePlaceholder":2362},[74,169192,169193,169195,169197,169199],{"class":76,"line":1182},[74,169194,2988],{"class":80},[74,169196,156418],{"class":84},[74,169198,30324],{"class":80},[74,169200,156423],{"class":84},[74,169202,169203,169205,169207,169209,169212,169214],{"class":76,"line":1273},[74,169204,35580],{"class":134},[74,169206,168853],{"class":84},[74,169208,66960],{"class":190},[74,169210,169211],{"class":84},"], student[",[74,169213,155753],{"class":190},[74,169215,4620],{"class":84},[19,169217,169218],{},"统计平均分：",[64,169220,169222],{"className":34659,"code":169221,"language":34661,"meta":69,"style":69},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[71,169223,169224,169232,169236,169246,169258,169262,169277],{"__ignoreMap":69},[74,169225,169226,169228,169230],{"class":76,"line":77},[74,169227,161541],{"class":84},[74,169229,131],{"class":80},[74,169231,51614],{"class":134},[74,169233,169234],{"class":76,"line":94},[74,169235,2363],{"emptyLinePlaceholder":2362},[74,169237,169238,169240,169242,169244],{"class":76,"line":1141},[74,169239,2988],{"class":80},[74,169241,156418],{"class":84},[74,169243,30324],{"class":80},[74,169245,156423],{"class":84},[74,169247,169248,169250,169252,169254,169256],{"class":76,"line":1156},[74,169249,163588],{"class":84},[74,169251,13756],{"class":80},[74,169253,156430],{"class":84},[74,169255,155753],{"class":190},[74,169257,37527],{"class":84},[74,169259,169260],{"class":76,"line":1162},[74,169261,2363],{"emptyLinePlaceholder":2362},[74,169263,169264,169266,169268,169270,169272,169274],{"class":76,"line":1176},[74,169265,168055],{"class":84},[74,169267,131],{"class":80},[74,169269,168060],{"class":84},[74,169271,670],{"class":80},[74,169273,11610],{"class":134},[74,169275,169276],{"class":84},"(students)\n",[74,169278,169279,169281,169283,169285,169287,169289,169291,169293,169295,169297],{"class":76,"line":1182},[74,169280,34696],{"class":134},[74,169282,85],{"class":84},[74,169284,138],{"class":80},[74,169286,168078],{"class":190},[74,169288,982],{"class":134},[74,169290,168083],{"class":84},[74,169292,161440],{"class":80},[74,169294,1032],{"class":134},[74,169296,337],{"class":190},[74,169298,91],{"class":84},[19,169300,169301],{},"查找学生：",[64,169303,169305],{"className":34659,"code":169304,"language":34661,"meta":69,"style":69},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[71,169306,169307,169322,169326,169336,169350,169356,169360,169366],{"__ignoreMap":69},[74,169308,169309,169311,169313,169315,169317,169320],{"class":76,"line":77},[74,169310,115859],{"class":84},[74,169312,131],{"class":80},[74,169314,64886],{"class":134},[74,169316,85],{"class":84},[74,169318,169319],{"class":190},"\"请输入学生姓名:\"",[74,169321,91],{"class":84},[74,169323,169324],{"class":76,"line":94},[74,169325,2363],{"emptyLinePlaceholder":2362},[74,169327,169328,169330,169332,169334],{"class":76,"line":1141},[74,169329,2988],{"class":80},[74,169331,156418],{"class":84},[74,169333,30324],{"class":80},[74,169335,156423],{"class":84},[74,169337,169338,169340,169342,169344,169346,169348],{"class":76,"line":1156},[74,169339,3064],{"class":80},[74,169341,156430],{"class":84},[74,169343,66960],{"class":190},[74,169345,4406],{"class":84},[74,169347,2912],{"class":80},[74,169349,164713],{"class":84},[74,169351,169352,169354],{"class":76,"line":1162},[74,169353,36732],{"class":134},[74,169355,154323],{"class":84},[74,169357,169358],{"class":76,"line":1176},[74,169359,35908],{"class":80},[74,169361,169362,169364],{"class":76,"line":1182},[74,169363,1663],{"class":80},[74,169365,3702],{"class":84},[74,169367,169368,169370,169372,169375],{"class":76,"line":1273},[74,169369,35580],{"class":134},[74,169371,85],{"class":84},[74,169373,169374],{"class":190},"\"没有找到\"",[74,169376,91],{"class":84},[14,169378,169380],{"id":169379},"_613-容器通用操作","6.13 容器通用操作",[19,169382,169383],{},"长度：",[64,169385,169387],{"className":34659,"code":169386,"language":34661,"meta":69,"style":69},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[71,169388,169389,169408,169418],{"__ignoreMap":69},[74,169390,169391,169393,169396,169398,169400,169402,169404,169406],{"class":76,"line":77},[74,169392,11637],{"class":134},[74,169394,169395],{"class":84},"([",[74,169397,303],{"class":134},[74,169399,16714],{"class":84},[74,169401,163],{"class":134},[74,169403,16714],{"class":84},[74,169405,157],{"class":134},[74,169407,4620],{"class":84},[74,169409,169410,169412,169414,169416],{"class":76,"line":94},[74,169411,11637],{"class":134},[74,169413,85],{"class":84},[74,169415,160161],{"class":190},[74,169417,91],{"class":84},[74,169419,169420,169422,169425,169427,169429,169431],{"class":76,"line":1141},[74,169421,11637],{"class":134},[74,169423,169424],{"class":84},"({",[74,169426,66960],{"class":190},[74,169428,55718],{"class":84},[74,169430,154169],{"class":190},[74,169432,169433],{"class":84},"})\n",[19,169435,169436],{},"最大最小：",[64,169438,169440],{"className":34659,"code":169439,"language":34661,"meta":69,"style":69},"max([1, 2, 3])\nmin([1, 2, 3])\n",[71,169441,169442,169460],{"__ignoreMap":69},[74,169443,169444,169446,169448,169450,169452,169454,169456,169458],{"class":76,"line":77},[74,169445,10294],{"class":134},[74,169447,169395],{"class":84},[74,169449,303],{"class":134},[74,169451,16714],{"class":84},[74,169453,163],{"class":134},[74,169455,16714],{"class":84},[74,169457,157],{"class":134},[74,169459,4620],{"class":84},[74,169461,169462,169465,169467,169469,169471,169473,169475,169477],{"class":76,"line":94},[74,169463,169464],{"class":134},"min",[74,169466,169395],{"class":84},[74,169468,303],{"class":134},[74,169470,16714],{"class":84},[74,169472,163],{"class":134},[74,169474,16714],{"class":84},[74,169476,157],{"class":134},[74,169478,4620],{"class":84},[19,169480,169481],{},"求和：",[64,169483,169485],{"className":34659,"code":169484,"language":34661,"meta":69,"style":69},"sum([1, 2, 3])\n",[71,169486,169487],{"__ignoreMap":69},[74,169488,169489,169492,169494,169496,169498,169500,169502,169504],{"class":76,"line":77},[74,169490,169491],{"class":134},"sum",[74,169493,169395],{"class":84},[74,169495,303],{"class":134},[74,169497,16714],{"class":84},[74,169499,163],{"class":134},[74,169501,16714],{"class":84},[74,169503,157],{"class":134},[74,169505,4620],{"class":84},[19,169507,167752],{},[64,169509,169511],{"className":34659,"code":169510,"language":34661,"meta":69,"style":69},"sorted([3, 1, 2])\n",[71,169512,169513],{"__ignoreMap":69},[74,169514,169515,169518,169520,169522,169524,169526,169528,169530],{"class":76,"line":77},[74,169516,169517],{"class":134},"sorted",[74,169519,169395],{"class":84},[74,169521,157],{"class":134},[74,169523,16714],{"class":84},[74,169525,303],{"class":134},[74,169527,16714],{"class":84},[74,169529,163],{"class":134},[74,169531,4620],{"class":84},[19,169533,169534],{},"类型转换：",[64,169536,169538],{"className":34659,"code":169537,"language":34661,"meta":69,"style":69},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[71,169539,169540,169550,169568],{"__ignoreMap":69},[74,169541,169542,169544,169546,169548],{"class":76,"line":77},[74,169543,158351],{"class":134},[74,169545,85],{"class":84},[74,169547,160161],{"class":190},[74,169549,91],{"class":84},[74,169551,169552,169554,169556,169558,169560,169562,169564,169566],{"class":76,"line":94},[74,169553,159546],{"class":134},[74,169555,169395],{"class":84},[74,169557,303],{"class":134},[74,169559,16714],{"class":84},[74,169561,163],{"class":134},[74,169563,16714],{"class":84},[74,169565,157],{"class":134},[74,169567,4620],{"class":84},[74,169569,169570,169572,169574,169576,169578,169580,169582,169584,169586,169588],{"class":76,"line":1141},[74,169571,159571],{"class":134},[74,169573,169395],{"class":84},[74,169575,303],{"class":134},[74,169577,16714],{"class":84},[74,169579,303],{"class":134},[74,169581,16714],{"class":84},[74,169583,163],{"class":134},[74,169585,16714],{"class":84},[74,169587,157],{"class":134},[74,169589,4620],{"class":84},[19,169591,169592],{},"成员判断：",[64,169594,169596],{"className":34659,"code":169595,"language":34661,"meta":69,"style":69},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[71,169597,169598,169615,169639],{"__ignoreMap":69},[74,169599,169600,169602,169604,169607,169610,169613],{"class":76,"line":77},[74,169601,34696],{"class":134},[74,169603,85],{"class":84},[74,169605,169606],{"class":190},"\"a\"",[74,169608,169609],{"class":80}," in",[74,169611,169612],{"class":190}," \"abc\"",[74,169614,91],{"class":84},[74,169616,169617,169619,169621,169623,169625,169627,169629,169631,169633,169635,169637],{"class":76,"line":94},[74,169618,34696],{"class":134},[74,169620,85],{"class":84},[74,169622,303],{"class":134},[74,169624,169609],{"class":80},[74,169626,56507],{"class":84},[74,169628,303],{"class":134},[74,169630,16714],{"class":84},[74,169632,163],{"class":134},[74,169634,16714],{"class":84},[74,169636,157],{"class":134},[74,169638,4620],{"class":84},[74,169640,169641,169643,169645,169647,169649,169651,169653,169655,169657],{"class":76,"line":1141},[74,169642,34696],{"class":134},[74,169644,85],{"class":84},[74,169646,66960],{"class":190},[74,169648,169609],{"class":80},[74,169650,4411],{"class":84},[74,169652,66960],{"class":190},[74,169654,55718],{"class":84},[74,169656,154169],{"class":190},[74,169658,169433],{"class":84},[14,169660,169662],{"id":169661},"_614-推导式","6.14 推导式",[19,169664,169665],{},"推导式用于快速生成容器。",[19,169667,169668],{},"列表推导式：",[64,169670,169672],{"className":34659,"code":169671,"language":34661,"meta":69,"style":69},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[71,169673,169674,169701],{"__ignoreMap":69},[74,169675,169676,169678,169680,169683,169685,169687,169689,169691,169693,169695,169697,169699],{"class":76,"line":77},[74,169677,168381],{"class":84},[74,169679,131],{"class":80},[74,169681,169682],{"class":84}," [i ",[74,169684,2988],{"class":80},[74,169686,13717],{"class":84},[74,169688,30324],{"class":80},[74,169690,36724],{"class":134},[74,169692,85],{"class":84},[74,169694,303],{"class":134},[74,169696,16714],{"class":84},[74,169698,430],{"class":134},[74,169700,101581],{"class":84},[74,169702,169703,169705],{"class":76,"line":94},[74,169704,34696],{"class":134},[74,169706,168597],{"class":84},[19,169708,169709],{},"带条件：",[64,169711,169713],{"className":34659,"code":169712,"language":34661,"meta":69,"style":69},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[71,169714,169715,169756],{"__ignoreMap":69},[74,169716,169717,169720,169722,169724,169726,169728,169730,169732,169734,169736,169738,169740,169742,169744,169746,169748,169750,169752,169754],{"class":76,"line":77},[74,169718,169719],{"class":84},"even_nums ",[74,169721,131],{"class":80},[74,169723,169682],{"class":84},[74,169725,2988],{"class":80},[74,169727,13717],{"class":84},[74,169729,30324],{"class":80},[74,169731,36724],{"class":134},[74,169733,85],{"class":84},[74,169735,303],{"class":134},[74,169737,16714],{"class":84},[74,169739,423],{"class":134},[74,169741,17993],{"class":84},[74,169743,1493],{"class":80},[74,169745,13717],{"class":84},[74,169747,414],{"class":80},[74,169749,19034],{"class":134},[74,169751,105840],{"class":80},[74,169753,4056],{"class":134},[74,169755,37527],{"class":84},[74,169757,169758,169760],{"class":76,"line":94},[74,169759,34696],{"class":134},[74,169761,169762],{"class":84},"(even_nums)\n",[19,169764,169765],{},"字典推导式：",[64,169767,169769],{"className":34659,"code":169768,"language":34661,"meta":69,"style":69},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[71,169770,169771,169805],{"__ignoreMap":69},[74,169772,169773,169776,169778,169781,169783,169785,169788,169790,169792,169794,169796,169798,169800,169802],{"class":76,"line":77},[74,169774,169775],{"class":84},"squares ",[74,169777,131],{"class":80},[74,169779,169780],{"class":84}," {i: i ",[74,169782,14940],{"class":80},[74,169784,19034],{"class":134},[74,169786,169787],{"class":80}," for",[74,169789,13717],{"class":84},[74,169791,30324],{"class":80},[74,169793,36724],{"class":134},[74,169795,85],{"class":84},[74,169797,303],{"class":134},[74,169799,16714],{"class":84},[74,169801,430],{"class":134},[74,169803,169804],{"class":84},")}\n",[74,169806,169807,169809],{"class":76,"line":94},[74,169808,34696],{"class":134},[74,169810,169811],{"class":84},"(squares)\n",[19,169813,169814],{},"集合推导式：",[64,169816,169818],{"className":34659,"code":169817,"language":34661,"meta":69,"style":69},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[71,169819,169820,169841],{"__ignoreMap":69},[74,169821,169822,169825,169827,169830,169832,169834,169836,169839],{"class":76,"line":77},[74,169823,169824],{"class":84},"chars ",[74,169826,131],{"class":80},[74,169828,169829],{"class":84}," {ch ",[74,169831,2988],{"class":80},[74,169833,163973],{"class":84},[74,169835,30324],{"class":80},[74,169837,169838],{"class":190}," \"hello\"",[74,169840,1527],{"class":84},[74,169842,169843,169845],{"class":76,"line":94},[74,169844,34696],{"class":134},[74,169846,169847],{"class":84},"(chars)\n",[19,169849,169850],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,169852,169854],{"id":169853},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[64,169856,169858],{"className":34659,"code":169857,"language":34661,"meta":69,"style":69},"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",[71,169859,169860,169868,169888,169908,169928,169948,169952,169956,169964,169978,169987,169991,170001,170013,170017,170037,170046,170050,170066,170071,170075,170089,170093,170115,170151],{"__ignoreMap":69},[74,169861,169862,169864,169866],{"class":76,"line":77},[74,169863,163997],{"class":84},[74,169865,131],{"class":80},[74,169867,59728],{"class":84},[74,169869,169870,169872,169874,169876,169878,169880,169882,169884,169886],{"class":76,"line":94},[74,169871,152666],{"class":84},[74,169873,66960],{"class":190},[74,169875,55718],{"class":84},[74,169877,154169],{"class":190},[74,169879,16714],{"class":84},[74,169881,155753],{"class":190},[74,169883,55718],{"class":84},[74,169885,1075],{"class":134},[74,169887,4893],{"class":84},[74,169889,169890,169892,169894,169896,169898,169900,169902,169904,169906],{"class":76,"line":1141},[74,169891,152666],{"class":84},[74,169893,66960],{"class":190},[74,169895,55718],{"class":84},[74,169897,155217],{"class":190},[74,169899,16714],{"class":84},[74,169901,155753],{"class":190},[74,169903,55718],{"class":84},[74,169905,897],{"class":134},[74,169907,4893],{"class":84},[74,169909,169910,169912,169914,169916,169918,169920,169922,169924,169926],{"class":76,"line":1156},[74,169911,152666],{"class":84},[74,169913,66960],{"class":190},[74,169915,55718],{"class":84},[74,169917,164012],{"class":190},[74,169919,16714],{"class":84},[74,169921,155753],{"class":190},[74,169923,55718],{"class":84},[74,169925,492],{"class":134},[74,169927,4893],{"class":84},[74,169929,169930,169932,169934,169936,169938,169940,169942,169944,169946],{"class":76,"line":1162},[74,169931,152666],{"class":84},[74,169933,66960],{"class":190},[74,169935,55718],{"class":84},[74,169937,167591],{"class":190},[74,169939,16714],{"class":84},[74,169941,155753],{"class":190},[74,169943,55718],{"class":84},[74,169945,968],{"class":134},[74,169947,4893],{"class":84},[74,169949,169950],{"class":76,"line":1176},[74,169951,37527],{"class":84},[74,169953,169954],{"class":76,"line":1182},[74,169955,2363],{"emptyLinePlaceholder":2362},[74,169957,169958,169960,169962],{"class":76,"line":1273},[74,169959,161541],{"class":84},[74,169961,131],{"class":80},[74,169963,51614],{"class":134},[74,169965,169966,169969,169971,169974,169976],{"class":76,"line":1279},[74,169967,169968],{"class":84},"max_student ",[74,169970,131],{"class":80},[74,169972,169973],{"class":84}," students[",[74,169975,277],{"class":134},[74,169977,37527],{"class":84},[74,169979,169980,169983,169985],{"class":76,"line":1291},[74,169981,169982],{"class":84},"passed ",[74,169984,131],{"class":80},[74,169986,56119],{"class":84},[74,169988,169989],{"class":76,"line":1574},[74,169990,2363],{"emptyLinePlaceholder":2362},[74,169992,169993,169995,169997,169999],{"class":76,"line":1579},[74,169994,2988],{"class":80},[74,169996,156418],{"class":84},[74,169998,30324],{"class":80},[74,170000,156423],{"class":84},[74,170002,170003,170005,170007,170009,170011],{"class":76,"line":1585},[74,170004,163588],{"class":84},[74,170006,13756],{"class":80},[74,170008,156430],{"class":84},[74,170010,155753],{"class":190},[74,170012,37527],{"class":84},[74,170014,170015],{"class":76,"line":1590},[74,170016,2363],{"emptyLinePlaceholder":2362},[74,170018,170019,170021,170023,170025,170027,170029,170032,170034],{"class":76,"line":1604},[74,170020,3064],{"class":80},[74,170022,156430],{"class":84},[74,170024,155753],{"class":190},[74,170026,4406],{"class":84},[74,170028,1046],{"class":80},[74,170030,170031],{"class":84}," max_student[",[74,170033,155753],{"class":190},[74,170035,170036],{"class":84},"]:\n",[74,170038,170039,170042,170044],{"class":76,"line":1609},[74,170040,170041],{"class":84},"        max_student ",[74,170043,131],{"class":80},[74,170045,156446],{"class":84},[74,170047,170048],{"class":76,"line":1615},[74,170049,2363],{"emptyLinePlaceholder":2362},[74,170051,170052,170054,170056,170058,170060,170062,170064],{"class":76,"line":1636},[74,170053,3064],{"class":80},[74,170055,156430],{"class":84},[74,170057,155753],{"class":190},[74,170059,4406],{"class":84},[74,170061,1672],{"class":80},[74,170063,162118],{"class":134},[74,170065,3702],{"class":84},[74,170067,170068],{"class":76,"line":1641},[74,170069,170070],{"class":84},"        passed.append(student)\n",[74,170072,170073],{"class":76,"line":1655},[74,170074,2363],{"emptyLinePlaceholder":2362},[74,170076,170077,170079,170081,170083,170085,170087],{"class":76,"line":1660},[74,170078,168055],{"class":84},[74,170080,131],{"class":80},[74,170082,168060],{"class":84},[74,170084,670],{"class":80},[74,170086,11610],{"class":134},[74,170088,169276],{"class":84},[74,170090,170091],{"class":76,"line":1689},[74,170092,2363],{"emptyLinePlaceholder":2362},[74,170094,170095,170097,170099,170101,170103,170105,170107,170109,170111,170113],{"class":76,"line":1694},[74,170096,34696],{"class":134},[74,170098,85],{"class":84},[74,170100,138],{"class":80},[74,170102,168078],{"class":190},[74,170104,982],{"class":134},[74,170106,168083],{"class":84},[74,170108,161440],{"class":80},[74,170110,1032],{"class":134},[74,170112,337],{"class":190},[74,170114,91],{"class":84},[74,170116,170117,170119,170121,170123,170126,170128,170131,170133,170135,170137,170139,170141,170143,170145,170147,170149],{"class":76,"line":1711},[74,170118,34696],{"class":134},[74,170120,85],{"class":84},[74,170122,138],{"class":80},[74,170124,170125],{"class":190},"\"最高分学生:",[74,170127,982],{"class":134},[74,170129,170130],{"class":84},"max_student[",[74,170132,157163],{"class":190},[74,170134,1026],{"class":84},[74,170136,1032],{"class":134},[74,170138,4411],{"class":134},[74,170140,170130],{"class":84},[74,170142,157201],{"class":190},[74,170144,1026],{"class":84},[74,170146,1032],{"class":134},[74,170148,337],{"class":190},[74,170150,91],{"class":84},[74,170152,170153,170155,170157,170159,170162,170165,170168,170170,170172],{"class":76,"line":1716},[74,170154,34696],{"class":134},[74,170156,85],{"class":84},[74,170158,138],{"class":80},[74,170160,170161],{"class":190},"\"及格人数:",[74,170163,170164],{"class":134},"{len",[74,170166,170167],{"class":84},"(passed)",[74,170169,1032],{"class":134},[74,170171,337],{"class":190},[74,170173,91],{"class":84},[14,170175,170177],{"id":170176},"_616-易错点","6.16 易错点",[27,170179,170180,170183,170186,170189,170195,170204],{},[30,170181,170182],{},"列表可变，元组和字符串不可变。",[30,170184,170185],{},"切片结束位置不包含。",[30,170187,170188],{},"字典通过 key 取值，不是通过索引。",[30,170190,170191,170192,32666],{},"空集合要用 ",[71,170193,170194],{},"set()",[30,170196,108647,170197,170200,170201,32666],{},[71,170198,170199],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[71,170202,170203],{},"get()",[30,170205,170206],{},"嵌套容器要先看清楚每一层是什么类型。",[14,170208,170210],{"id":170209},"_617-本章练习","6.17 本章练习",[27,170212,170213,170216,170219,170222,170225],{},[30,170214,170215],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[30,170217,170218],{},"输入一句话，统计每个字符出现次数。",[30,170220,170221],{},"使用集合去除列表中的重复元素。",[30,170223,170224],{},"使用字典保存一个学生的信息，并实现修改成绩。",[30,170226,170227],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5090,170229,170230],{},"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":69,"searchDepth":94,"depth":94,"links":170232},[170233,170234,170235,170236,170237,170238,170239,170240,170241,170242,170243,170244,170245,170246,170247,170248,170249],{"id":167213,"depth":94,"text":167214},{"id":167330,"depth":94,"text":167331},{"id":167420,"depth":94,"text":167421},{"id":167544,"depth":94,"text":167545},{"id":167907,"depth":94,"text":167908},{"id":168094,"depth":94,"text":168095},{"id":168213,"depth":94,"text":168214},{"id":168355,"depth":94,"text":168356},{"id":168542,"depth":94,"text":168543},{"id":168786,"depth":94,"text":168787},{"id":168996,"depth":94,"text":168997},{"id":169081,"depth":94,"text":169082},{"id":169379,"depth":94,"text":169380},{"id":169661,"depth":94,"text":169662},{"id":169853,"depth":94,"text":169854},{"id":170176,"depth":94,"text":170177},{"id":170209,"depth":94,"text":170210},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":167205,"description":27656},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":170256,"title":170257,"body":170258,"description":27656,"extension":5121,"meta":172430,"navigation":2362,"path":172431,"seo":172432,"stem":172433,"__hash__":172434},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":170259,"toc":172405},[170260,170263,170267,170270,170350,170353,170374,170377,170381,170384,170446,170449,170466,170470,170473,170518,170520,170528,170532,170535,170617,170620,170623,170648,170651,170674,170678,170681,170683,170745,170748,170750,170801,170805,170809,170815,170920,170924,170930,171001,171005,171008,171076,171079,171159,171163,171169,171205,171208,171211,171321,171327,171331,171334,171406,171409,171413,171417,171422,171484,171488,171493,171561,171565,171570,171686,171690,171693,171773,171776,171780,171783,171887,171889,171904,171907,171911,172049,172057,172061,172063,172074,172076,172334,172338,172370,172374,172402],[10,170261,170257],{"id":170262},"_7-函数进阶",[14,170264,170266],{"id":170265},"_71-多返回值","7.1 多返回值",[19,170268,170269],{},"Python 函数可以返回多个值，本质上返回的是元组。",[64,170271,170273],{"className":34659,"code":170272,"language":34661,"meta":69,"style":69},"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",[71,170274,170275,170284,170292,170300,170309,170316,170320,170324,170333,170339],{"__ignoreMap":69},[74,170276,170277,170279,170282],{"class":76,"line":77},[74,170278,36228],{"class":80},[74,170280,170281],{"class":1925}," get_info",[74,170283,36234],{"class":84},[74,170285,170286,170288,170290],{"class":76,"line":94},[74,170287,156651],{"class":84},[74,170289,131],{"class":80},[74,170291,153634],{"class":190},[74,170293,170294,170296,170298],{"class":76,"line":1141},[74,170295,156667],{"class":84},[74,170297,131],{"class":80},[74,170299,150832],{"class":134},[74,170301,170302,170304,170306],{"class":76,"line":1156},[74,170303,156682],{"class":84},[74,170305,131],{"class":80},[74,170307,170308],{"class":134}," 95\n",[74,170310,170311,170313],{"class":76,"line":1162},[74,170312,4053],{"class":80},[74,170314,170315],{"class":84}," name, age, score\n",[74,170317,170318],{"class":76,"line":1176},[74,170319,2363],{"emptyLinePlaceholder":2362},[74,170321,170322],{"class":76,"line":1182},[74,170323,2363],{"emptyLinePlaceholder":2362},[74,170325,170326,170328,170330],{"class":76,"line":1273},[74,170327,165587],{"class":84},[74,170329,131],{"class":80},[74,170331,170332],{"class":84}," get_info()\n",[74,170334,170335,170337],{"class":76,"line":1279},[74,170336,34696],{"class":134},[74,170338,80866],{"class":84},[74,170340,170341,170343,170345,170347],{"class":76,"line":1291},[74,170342,34696],{"class":134},[74,170344,85],{"class":84},[74,170346,107388],{"class":134},[74,170348,170349],{"class":84},"(result))\n",[19,170351,170352],{},"可以直接解包：",[64,170354,170356],{"className":34659,"code":170355,"language":34661,"meta":69,"style":69},"name, age, score = get_info()\nprint(name, age, score)\n",[71,170357,170358,170367],{"__ignoreMap":69},[74,170359,170360,170363,170365],{"class":76,"line":77},[74,170361,170362],{"class":84},"name, age, score ",[74,170364,131],{"class":80},[74,170366,170332],{"class":84},[74,170368,170369,170371],{"class":76,"line":94},[74,170370,34696],{"class":134},[74,170372,170373],{"class":84},"(name, age, score)\n",[19,170375,170376],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,170378,170380],{"id":170379},"_72-位置参数","7.2 位置参数",[19,170382,170383],{},"位置参数按顺序传递。",[64,170385,170387],{"className":34659,"code":170386,"language":34661,"meta":69,"style":69},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[71,170388,170389,170397,170425,170429,170433],{"__ignoreMap":69},[74,170390,170391,170393,170395],{"class":76,"line":77},[74,170392,36228],{"class":80},[74,170394,153653],{"class":1925},[74,170396,153656],{"class":84},[74,170398,170399,170401,170403,170405,170407,170409,170411,170413,170415,170417,170419,170421,170423],{"class":76,"line":94},[74,170400,35580],{"class":134},[74,170402,85],{"class":84},[74,170404,138],{"class":80},[74,170406,153667],{"class":190},[74,170408,982],{"class":134},[74,170410,84091],{"class":84},[74,170412,1032],{"class":134},[74,170414,153676],{"class":190},[74,170416,982],{"class":134},[74,170418,74502],{"class":84},[74,170420,1032],{"class":134},[74,170422,153685],{"class":190},[74,170424,91],{"class":84},[74,170426,170427],{"class":76,"line":1141},[74,170428,2363],{"emptyLinePlaceholder":2362},[74,170430,170431],{"class":76,"line":1156},[74,170432,2363],{"emptyLinePlaceholder":2362},[74,170434,170435,170438,170440,170442,170444],{"class":76,"line":1162},[74,170436,170437],{"class":84},"introduce(",[74,170439,154169],{"class":190},[74,170441,16714],{"class":84},[74,170443,736],{"class":134},[74,170445,91],{"class":84},[19,170447,170448],{},"顺序错了就会得到错误含义：",[64,170450,170452],{"className":34659,"code":170451,"language":34661,"meta":69,"style":69},"introduce(18, \"小明\")\n",[71,170453,170454],{"__ignoreMap":69},[74,170455,170456,170458,170460,170462,170464],{"class":76,"line":77},[74,170457,170437],{"class":84},[74,170459,736],{"class":134},[74,170461,16714],{"class":84},[74,170463,154169],{"class":190},[74,170465,91],{"class":84},[14,170467,170469],{"id":170468},"_73-关键字参数","7.3 关键字参数",[19,170471,170472],{},"关键字参数按参数名传递。",[64,170474,170476],{"className":34659,"code":170475,"language":34661,"meta":69,"style":69},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[71,170477,170478,170498],{"__ignoreMap":69},[74,170479,170480,170482,170484,170486,170488,170490,170492,170494,170496],{"class":76,"line":77},[74,170481,170437],{"class":84},[74,170483,84091],{"class":9495},[74,170485,131],{"class":80},[74,170487,154169],{"class":190},[74,170489,16714],{"class":84},[74,170491,74502],{"class":9495},[74,170493,131],{"class":80},[74,170495,736],{"class":134},[74,170497,91],{"class":84},[74,170499,170500,170502,170504,170506,170508,170510,170512,170514,170516],{"class":76,"line":94},[74,170501,170437],{"class":84},[74,170503,74502],{"class":9495},[74,170505,131],{"class":80},[74,170507,736],{"class":134},[74,170509,16714],{"class":84},[74,170511,84091],{"class":9495},[74,170513,131],{"class":80},[74,170515,154169],{"class":190},[74,170517,91],{"class":84},[19,170519,122215],{},[27,170521,170522,170525],{},[30,170523,170524],{},"顺序不容易错。",[30,170526,170527],{},"调用时可读性更强。",[14,170529,170531],{"id":170530},"_74-默认参数","7.4 默认参数",[19,170533,170534],{},"默认参数给参数设置默认值。",[64,170536,170538],{"className":34659,"code":170537,"language":34661,"meta":69,"style":69},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[71,170539,170540,170556,170586,170590,170594,170604],{"__ignoreMap":69},[74,170541,170542,170544,170546,170549,170551,170554],{"class":76,"line":77},[74,170543,36228],{"class":80},[74,170545,126374],{"class":1925},[74,170547,170548],{"class":84},"(host, port",[74,170550,131],{"class":80},[74,170552,170553],{"class":134},"3306",[74,170555,35067],{"class":84},[74,170557,170558,170560,170562,170564,170567,170569,170571,170573,170575,170577,170580,170582,170584],{"class":76,"line":94},[74,170559,35580],{"class":134},[74,170561,85],{"class":84},[74,170563,138],{"class":80},[74,170565,170566],{"class":190},"\"连接",[74,170568,982],{"class":134},[74,170570,31676],{"class":84},[74,170572,1032],{"class":134},[74,170574,945],{"class":190},[74,170576,982],{"class":134},[74,170578,170579],{"class":84},"port",[74,170581,1032],{"class":134},[74,170583,337],{"class":190},[74,170585,91],{"class":84},[74,170587,170588],{"class":76,"line":1141},[74,170589,2363],{"emptyLinePlaceholder":2362},[74,170591,170592],{"class":76,"line":1156},[74,170593,2363],{"emptyLinePlaceholder":2362},[74,170595,170596,170599,170602],{"class":76,"line":1162},[74,170597,170598],{"class":84},"connect(",[74,170600,170601],{"class":190},"\"localhost\"",[74,170603,91],{"class":84},[74,170605,170606,170608,170610,170612,170615],{"class":76,"line":1176},[74,170607,170598],{"class":84},[74,170609,170601],{"class":190},[74,170611,16714],{"class":84},[74,170613,170614],{"class":134},"6379",[74,170616,91],{"class":84},[19,170618,170619],{},"注意：默认参数必须放在非默认参数后面。",[19,170621,170622],{},"错误：",[64,170624,170626],{"className":34659,"code":170625,"language":34661,"meta":69,"style":69},"def connect(port=3306, host):\n    pass\n",[71,170627,170628,170644],{"__ignoreMap":69},[74,170629,170630,170632,170634,170637,170639,170641],{"class":76,"line":77},[74,170631,36228],{"class":80},[74,170633,126374],{"class":1925},[74,170635,170636],{"class":84},"(port",[74,170638,131],{"class":80},[74,170640,170553],{"class":134},[74,170642,170643],{"class":84},", host):\n",[74,170645,170646],{"class":76,"line":94},[74,170647,153818],{"class":80},[19,170649,170650],{},"正确：",[64,170652,170654],{"className":34659,"code":170653,"language":34661,"meta":69,"style":69},"def connect(host, port=3306):\n    pass\n",[71,170655,170656,170670],{"__ignoreMap":69},[74,170657,170658,170660,170662,170664,170666,170668],{"class":76,"line":77},[74,170659,36228],{"class":80},[74,170661,126374],{"class":1925},[74,170663,170548],{"class":84},[74,170665,131],{"class":80},[74,170667,170553],{"class":134},[74,170669,35067],{"class":84},[74,170671,170672],{"class":76,"line":94},[74,170673,153818],{"class":80},[14,170675,170677],{"id":170676},"_75-默认参数的坑","7.5 默认参数的坑",[19,170679,170680],{},"不要使用可变对象作为默认参数。",[19,170682,161904],{},[64,170684,170686],{"className":34659,"code":170685,"language":34661,"meta":69,"style":69},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[71,170687,170688,170703,170708,170715,170719,170723,170734],{"__ignoreMap":69},[74,170689,170690,170692,170695,170698,170700],{"class":76,"line":77},[74,170691,36228],{"class":80},[74,170693,170694],{"class":1925}," add_item",[74,170696,170697],{"class":84},"(item, items",[74,170699,131],{"class":80},[74,170701,170702],{"class":84},"[]):\n",[74,170704,170705],{"class":76,"line":94},[74,170706,170707],{"class":84},"    items.append(item)\n",[74,170709,170710,170712],{"class":76,"line":1141},[74,170711,4053],{"class":80},[74,170713,170714],{"class":84}," items\n",[74,170716,170717],{"class":76,"line":1156},[74,170718,2363],{"emptyLinePlaceholder":2362},[74,170720,170721],{"class":76,"line":1162},[74,170722,2363],{"emptyLinePlaceholder":2362},[74,170724,170725,170727,170730,170732],{"class":76,"line":1176},[74,170726,34696],{"class":134},[74,170728,170729],{"class":84},"(add_item(",[74,170731,169606],{"class":190},[74,170733,34778],{"class":84},[74,170735,170736,170738,170740,170743],{"class":76,"line":1182},[74,170737,34696],{"class":134},[74,170739,170729],{"class":84},[74,170741,170742],{"class":190},"\"b\"",[74,170744,34778],{"class":84},[19,170746,170747],{},"第二次调用会复用第一次的列表。",[19,170749,160169],{},[64,170751,170753],{"className":34659,"code":170752,"language":34661,"meta":69,"style":69},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[71,170754,170755,170769,170782,170791,170795],{"__ignoreMap":69},[74,170756,170757,170759,170761,170763,170765,170767],{"class":76,"line":77},[74,170758,36228],{"class":80},[74,170760,170694],{"class":1925},[74,170762,170697],{"class":84},[74,170764,131],{"class":80},[74,170766,99967],{"class":134},[74,170768,35067],{"class":84},[74,170770,170771,170773,170776,170778,170780],{"class":76,"line":94},[74,170772,3064],{"class":80},[74,170774,170775],{"class":84}," items ",[74,170777,43208],{"class":80},[74,170779,43214],{"class":134},[74,170781,3702],{"class":84},[74,170783,170784,170787,170789],{"class":76,"line":1141},[74,170785,170786],{"class":84},"        items ",[74,170788,131],{"class":80},[74,170790,56119],{"class":84},[74,170792,170793],{"class":76,"line":1156},[74,170794,170707],{"class":84},[74,170796,170797,170799],{"class":76,"line":1162},[74,170798,4053],{"class":80},[74,170800,170714],{"class":84},[14,170802,170804],{"id":170803},"_76-不定长参数","7.6 不定长参数",[44,170806,170808],{"id":170807},"_761-args","7.6.1 *args",[19,170810,170811,170814],{},[71,170812,170813],{},"*args"," 接收任意数量的位置参数，得到元组。",[64,170816,170818],{"className":34659,"code":170817,"language":34661,"meta":69,"style":69},"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",[71,170819,170820,170833,170841,170852,170861,170867,170871,170875,170894],{"__ignoreMap":69},[74,170821,170822,170824,170826,170828,170830],{"class":76,"line":77},[74,170823,36228],{"class":80},[74,170825,9488],{"class":1925},[74,170827,85],{"class":84},[74,170829,541],{"class":80},[74,170831,170832],{"class":84},"args):\n",[74,170834,170835,170837,170839],{"class":76,"line":94},[74,170836,163588],{"class":84},[74,170838,131],{"class":80},[74,170840,51614],{"class":134},[74,170842,170843,170845,170847,170849],{"class":76,"line":1141},[74,170844,3164],{"class":80},[74,170846,160461],{"class":84},[74,170848,30324],{"class":80},[74,170850,170851],{"class":84}," args:\n",[74,170853,170854,170856,170858],{"class":76,"line":1156},[74,170855,164263],{"class":84},[74,170857,13756],{"class":80},[74,170859,170860],{"class":84}," num\n",[74,170862,170863,170865],{"class":76,"line":1162},[74,170864,4053],{"class":80},[74,170866,166568],{"class":84},[74,170868,170869],{"class":76,"line":1176},[74,170870,2363],{"emptyLinePlaceholder":2362},[74,170872,170873],{"class":76,"line":1182},[74,170874,2363],{"emptyLinePlaceholder":2362},[74,170876,170877,170879,170882,170884,170886,170888,170890,170892],{"class":76,"line":1273},[74,170878,34696],{"class":134},[74,170880,170881],{"class":84},"(add(",[74,170883,303],{"class":134},[74,170885,16714],{"class":84},[74,170887,163],{"class":134},[74,170889,16714],{"class":84},[74,170891,157],{"class":134},[74,170893,34778],{"class":84},[74,170895,170896,170898,170900,170902,170904,170906,170908,170910,170912,170914,170916,170918],{"class":76,"line":1279},[74,170897,34696],{"class":134},[74,170899,170881],{"class":84},[74,170901,303],{"class":134},[74,170903,16714],{"class":84},[74,170905,163],{"class":134},[74,170907,16714],{"class":84},[74,170909,157],{"class":134},[74,170911,16714],{"class":84},[74,170913,379],{"class":134},[74,170915,16714],{"class":84},[74,170917,405],{"class":134},[74,170919,34778],{"class":84},[44,170921,170923],{"id":170922},"_762-kwargs","7.6.2 **kwargs",[19,170925,170926,170929],{},[71,170927,170928],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[64,170931,170933],{"className":34659,"code":170932,"language":34661,"meta":69,"style":69},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[71,170934,170935,170948,170959,170965,170969,170973],{"__ignoreMap":69},[74,170936,170937,170939,170941,170943,170945],{"class":76,"line":77},[74,170938,36228],{"class":80},[74,170940,166226],{"class":1925},[74,170942,85],{"class":84},[74,170944,14940],{"class":80},[74,170946,170947],{"class":84},"kwargs):\n",[74,170949,170950,170952,170954,170956],{"class":76,"line":94},[74,170951,3164],{"class":80},[74,170953,169066],{"class":84},[74,170955,30324],{"class":80},[74,170957,170958],{"class":84}," kwargs.items():\n",[74,170960,170961,170963],{"class":76,"line":1141},[74,170962,36732],{"class":134},[74,170964,169078],{"class":84},[74,170966,170967],{"class":76,"line":1156},[74,170968,2363],{"emptyLinePlaceholder":2362},[74,170970,170971],{"class":76,"line":1162},[74,170972,2363],{"emptyLinePlaceholder":2362},[74,170974,170975,170977,170979,170981,170983,170985,170987,170989,170991,170993,170995,170997,170999],{"class":76,"line":1176},[74,170976,166291],{"class":84},[74,170978,84091],{"class":9495},[74,170980,131],{"class":80},[74,170982,154169],{"class":190},[74,170984,16714],{"class":84},[74,170986,74502],{"class":9495},[74,170988,131],{"class":80},[74,170990,736],{"class":134},[74,170992,16714],{"class":84},[74,170994,74553],{"class":9495},[74,170996,131],{"class":80},[74,170998,73550],{"class":190},[74,171000,91],{"class":84},[14,171002,171004],{"id":171003},"_77-参数解包","7.7 参数解包",[19,171006,171007],{},"列表或元组解包为位置参数：",[64,171009,171011],{"className":34659,"code":171010,"language":34661,"meta":69,"style":69},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[71,171012,171013,171022,171037,171041,171045,171065],{"__ignoreMap":69},[74,171014,171015,171017,171019],{"class":76,"line":77},[74,171016,36228],{"class":80},[74,171018,9488],{"class":1925},[74,171020,171021],{"class":84},"(a, b, c):\n",[74,171023,171024,171026,171028,171030,171032,171034],{"class":76,"line":94},[74,171025,4053],{"class":80},[74,171027,15148],{"class":84},[74,171029,567],{"class":80},[74,171031,15161],{"class":84},[74,171033,567],{"class":80},[74,171035,171036],{"class":84}," c\n",[74,171038,171039],{"class":76,"line":1141},[74,171040,2363],{"emptyLinePlaceholder":2362},[74,171042,171043],{"class":76,"line":1156},[74,171044,2363],{"emptyLinePlaceholder":2362},[74,171046,171047,171049,171051,171053,171055,171057,171059,171061,171063],{"class":76,"line":1162},[74,171048,168381],{"class":84},[74,171050,131],{"class":80},[74,171052,56507],{"class":84},[74,171054,303],{"class":134},[74,171056,16714],{"class":84},[74,171058,163],{"class":134},[74,171060,16714],{"class":84},[74,171062,157],{"class":134},[74,171064,37527],{"class":84},[74,171066,171067,171069,171071,171073],{"class":76,"line":1176},[74,171068,34696],{"class":134},[74,171070,170881],{"class":84},[74,171072,541],{"class":80},[74,171074,171075],{"class":84},"nums))\n",[19,171077,171078],{},"字典解包为关键字参数：",[64,171080,171082],{"className":34659,"code":171081,"language":34661,"meta":69,"style":69},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[71,171083,171084,171092,171118,171122,171126,171150],{"__ignoreMap":69},[74,171085,171086,171088,171090],{"class":76,"line":77},[74,171087,36228],{"class":80},[74,171089,153653],{"class":1925},[74,171091,153656],{"class":84},[74,171093,171094,171096,171098,171100,171102,171104,171106,171108,171110,171112,171114,171116],{"class":76,"line":94},[74,171095,35580],{"class":134},[74,171097,85],{"class":84},[74,171099,138],{"class":80},[74,171101,337],{"class":190},[74,171103,982],{"class":134},[74,171105,84091],{"class":84},[74,171107,1032],{"class":134},[74,171109,4411],{"class":134},[74,171111,74502],{"class":84},[74,171113,1032],{"class":134},[74,171115,337],{"class":190},[74,171117,91],{"class":84},[74,171119,171120],{"class":76,"line":1141},[74,171121,2363],{"emptyLinePlaceholder":2362},[74,171123,171124],{"class":76,"line":1156},[74,171125,2363],{"emptyLinePlaceholder":2362},[74,171127,171128,171130,171132,171134,171136,171138,171140,171142,171144,171146,171148],{"class":76,"line":1162},[74,171129,120595],{"class":84},[74,171131,131],{"class":80},[74,171133,4411],{"class":84},[74,171135,66960],{"class":190},[74,171137,55718],{"class":84},[74,171139,154169],{"class":190},[74,171141,16714],{"class":84},[74,171143,73405],{"class":190},[74,171145,55718],{"class":84},[74,171147,736],{"class":134},[74,171149,1527],{"class":84},[74,171151,171152,171154,171156],{"class":76,"line":1176},[74,171153,170437],{"class":84},[74,171155,14940],{"class":80},[74,171157,171158],{"class":84},"info)\n",[14,171160,171162],{"id":171161},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,171164,171165,171168],{},[71,171166,171167],{},"lambda"," 用于定义简单匿名函数。",[64,171170,171172],{"className":34659,"code":171171,"language":34661,"meta":69,"style":69},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[71,171173,171174,171191],{"__ignoreMap":69},[74,171175,171176,171179,171181,171184,171187,171189],{"class":76,"line":77},[74,171177,171178],{"class":84},"add ",[74,171180,131],{"class":80},[74,171182,171183],{"class":80}," lambda",[74,171185,171186],{"class":84}," a, b: a ",[74,171188,567],{"class":80},[74,171190,155385],{"class":84},[74,171192,171193,171195,171197,171199,171201,171203],{"class":76,"line":94},[74,171194,34696],{"class":134},[74,171196,170881],{"class":84},[74,171198,303],{"class":134},[74,171200,16714],{"class":84},[74,171202,163],{"class":134},[74,171204,34778],{"class":84},[19,171206,171207],{},"常和排序、过滤等函数一起使用。",[19,171209,171210],{},"按分数排序：",[64,171212,171214],{"className":34659,"code":171213,"language":34661,"meta":69,"style":69},"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",[71,171215,171216,171224,171244,171264,171284,171288,171292,171315],{"__ignoreMap":69},[74,171217,171218,171220,171222],{"class":76,"line":77},[74,171219,163997],{"class":84},[74,171221,131],{"class":80},[74,171223,59728],{"class":84},[74,171225,171226,171228,171230,171232,171234,171236,171238,171240,171242],{"class":76,"line":94},[74,171227,152666],{"class":84},[74,171229,66960],{"class":190},[74,171231,55718],{"class":84},[74,171233,154169],{"class":190},[74,171235,16714],{"class":84},[74,171237,155753],{"class":190},[74,171239,55718],{"class":84},[74,171241,1075],{"class":134},[74,171243,4893],{"class":84},[74,171245,171246,171248,171250,171252,171254,171256,171258,171260,171262],{"class":76,"line":1141},[74,171247,152666],{"class":84},[74,171249,66960],{"class":190},[74,171251,55718],{"class":84},[74,171253,155217],{"class":190},[74,171255,16714],{"class":84},[74,171257,155753],{"class":190},[74,171259,55718],{"class":84},[74,171261,897],{"class":134},[74,171263,4893],{"class":84},[74,171265,171266,171268,171270,171272,171274,171276,171278,171280,171282],{"class":76,"line":1156},[74,171267,152666],{"class":84},[74,171269,66960],{"class":190},[74,171271,55718],{"class":84},[74,171273,164012],{"class":190},[74,171275,16714],{"class":84},[74,171277,155753],{"class":190},[74,171279,55718],{"class":84},[74,171281,492],{"class":134},[74,171283,4893],{"class":84},[74,171285,171286],{"class":76,"line":1162},[74,171287,37527],{"class":84},[74,171289,171290],{"class":76,"line":1176},[74,171291,2363],{"emptyLinePlaceholder":2362},[74,171293,171294,171297,171299,171301,171303,171305,171307,171309,171311,171313],{"class":76,"line":1182},[74,171295,171296],{"class":84},"students.sort(",[74,171298,158227],{"class":9495},[74,171300,158230],{"class":80},[74,171302,158233],{"class":84},[74,171304,155753],{"class":190},[74,171306,116483],{"class":84},[74,171308,167809],{"class":9495},[74,171310,131],{"class":80},[74,171312,35757],{"class":134},[74,171314,91],{"class":84},[74,171316,171317,171319],{"class":76,"line":1273},[74,171318,34696],{"class":134},[74,171320,169276],{"class":84},[19,171322,171323,171324,171326],{},"如果逻辑复杂，不要硬写 ",[71,171325,171167],{},"，定义普通函数更清晰。",[14,171328,171330],{"id":171329},"_79-函数作为参数","7.9 函数作为参数",[19,171332,171333],{},"函数可以作为参数传给另一个函数。",[64,171335,171337],{"className":34659,"code":171336,"language":34661,"meta":69,"style":69},"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",[71,171338,171339,171347,171357,171361,171365,171375,171382,171386,171390],{"__ignoreMap":69},[74,171340,171341,171343,171345],{"class":76,"line":77},[74,171342,36228],{"class":80},[74,171344,9488],{"class":1925},[74,171346,155374],{"class":84},[74,171348,171349,171351,171353,171355],{"class":76,"line":94},[74,171350,4053],{"class":80},[74,171352,15148],{"class":84},[74,171354,567],{"class":80},[74,171356,155385],{"class":84},[74,171358,171359],{"class":76,"line":1141},[74,171360,2363],{"emptyLinePlaceholder":2362},[74,171362,171363],{"class":76,"line":1156},[74,171364,2363],{"emptyLinePlaceholder":2362},[74,171366,171367,171369,171372],{"class":76,"line":1162},[74,171368,36228],{"class":80},[74,171370,171371],{"class":1925}," calculate",[74,171373,171374],{"class":84},"(a, b, func):\n",[74,171376,171377,171379],{"class":76,"line":1176},[74,171378,4053],{"class":80},[74,171380,171381],{"class":84}," func(a, b)\n",[74,171383,171384],{"class":76,"line":1182},[74,171385,2363],{"emptyLinePlaceholder":2362},[74,171387,171388],{"class":76,"line":1273},[74,171389,2363],{"emptyLinePlaceholder":2362},[74,171391,171392,171394,171397,171399,171401,171403],{"class":76,"line":1279},[74,171393,34696],{"class":134},[74,171395,171396],{"class":84},"(calculate(",[74,171398,532],{"class":134},[74,171400,16714],{"class":84},[74,171402,786],{"class":134},[74,171404,171405],{"class":84},", add))\n",[19,171407,171408],{},"这种思想在排序、回调、框架中经常出现。",[14,171410,171412],{"id":171411},"_710-mapfiltersorted","7.10 map、filter、sorted",[44,171414,171416],{"id":171415},"_7101-map","7.10.1 map",[19,171418,171419,171421],{},[71,171420,78325],{}," 对每个元素执行函数。",[64,171423,171425],{"className":34659,"code":171424,"language":34661,"meta":69,"style":69},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[71,171426,171427,171451,171474],{"__ignoreMap":69},[74,171428,171429,171431,171433,171435,171437,171439,171441,171443,171445,171447,171449],{"class":76,"line":77},[74,171430,168381],{"class":84},[74,171432,131],{"class":80},[74,171434,56507],{"class":84},[74,171436,303],{"class":134},[74,171438,16714],{"class":84},[74,171440,163],{"class":134},[74,171442,16714],{"class":84},[74,171444,157],{"class":134},[74,171446,16714],{"class":84},[74,171448,379],{"class":134},[74,171450,37527],{"class":84},[74,171452,171453,171455,171457,171460,171462,171464,171467,171469,171471],{"class":76,"line":94},[74,171454,165587],{"class":84},[74,171456,131],{"class":80},[74,171458,171459],{"class":134}," map",[74,171461,85],{"class":84},[74,171463,171167],{"class":80},[74,171465,171466],{"class":84}," x: x ",[74,171468,541],{"class":80},[74,171470,19034],{"class":134},[74,171472,171473],{"class":84},", nums)\n",[74,171475,171476,171478,171480,171482],{"class":76,"line":1141},[74,171477,34696],{"class":134},[74,171479,85],{"class":84},[74,171481,158351],{"class":134},[74,171483,170349],{"class":84},[44,171485,171487],{"id":171486},"_7102-filter","7.10.2 filter",[19,171489,171490,171492],{},[71,171491,84332],{}," 保留满足条件的元素。",[64,171494,171496],{"className":34659,"code":171495,"language":34661,"meta":69,"style":69},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[71,171497,171498,171526,171551],{"__ignoreMap":69},[74,171499,171500,171502,171504,171506,171508,171510,171512,171514,171516,171518,171520,171522,171524],{"class":76,"line":77},[74,171501,168381],{"class":84},[74,171503,131],{"class":80},[74,171505,56507],{"class":84},[74,171507,303],{"class":134},[74,171509,16714],{"class":84},[74,171511,163],{"class":134},[74,171513,16714],{"class":84},[74,171515,157],{"class":134},[74,171517,16714],{"class":84},[74,171519,379],{"class":134},[74,171521,16714],{"class":84},[74,171523,405],{"class":134},[74,171525,37527],{"class":84},[74,171527,171528,171530,171532,171535,171537,171539,171541,171543,171545,171547,171549],{"class":76,"line":94},[74,171529,165587],{"class":84},[74,171531,131],{"class":80},[74,171533,171534],{"class":134}," filter",[74,171536,85],{"class":84},[74,171538,171167],{"class":80},[74,171540,171466],{"class":84},[74,171542,414],{"class":80},[74,171544,19034],{"class":134},[74,171546,105840],{"class":80},[74,171548,4056],{"class":134},[74,171550,171473],{"class":84},[74,171552,171553,171555,171557,171559],{"class":76,"line":1141},[74,171554,34696],{"class":134},[74,171556,85],{"class":84},[74,171558,158351],{"class":134},[74,171560,170349],{"class":84},[44,171562,171564],{"id":171563},"_7103-sorted","7.10.3 sorted",[19,171566,171567,171569],{},[71,171568,169517],{}," 返回排序后的新列表。",[64,171571,171573],{"className":34659,"code":171572,"language":34661,"meta":69,"style":69},"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",[71,171574,171575,171583,171603,171623,171643,171647,171651,171680],{"__ignoreMap":69},[74,171576,171577,171579,171581],{"class":76,"line":77},[74,171578,163997],{"class":84},[74,171580,131],{"class":80},[74,171582,59728],{"class":84},[74,171584,171585,171587,171589,171591,171593,171595,171597,171599,171601],{"class":76,"line":94},[74,171586,152666],{"class":84},[74,171588,66960],{"class":190},[74,171590,55718],{"class":84},[74,171592,154169],{"class":190},[74,171594,16714],{"class":84},[74,171596,155753],{"class":190},[74,171598,55718],{"class":84},[74,171600,1075],{"class":134},[74,171602,4893],{"class":84},[74,171604,171605,171607,171609,171611,171613,171615,171617,171619,171621],{"class":76,"line":1141},[74,171606,152666],{"class":84},[74,171608,66960],{"class":190},[74,171610,55718],{"class":84},[74,171612,155217],{"class":190},[74,171614,16714],{"class":84},[74,171616,155753],{"class":190},[74,171618,55718],{"class":84},[74,171620,897],{"class":134},[74,171622,4893],{"class":84},[74,171624,171625,171627,171629,171631,171633,171635,171637,171639,171641],{"class":76,"line":1156},[74,171626,152666],{"class":84},[74,171628,66960],{"class":190},[74,171630,55718],{"class":84},[74,171632,164012],{"class":190},[74,171634,16714],{"class":84},[74,171636,155753],{"class":190},[74,171638,55718],{"class":84},[74,171640,492],{"class":134},[74,171642,4893],{"class":84},[74,171644,171645],{"class":76,"line":1162},[74,171646,37527],{"class":84},[74,171648,171649],{"class":76,"line":1176},[74,171650,2363],{"emptyLinePlaceholder":2362},[74,171652,171653,171655,171657,171659,171662,171664,171666,171668,171670,171672,171674,171676,171678],{"class":76,"line":1182},[74,171654,165587],{"class":84},[74,171656,131],{"class":80},[74,171658,167885],{"class":134},[74,171660,171661],{"class":84},"(students, ",[74,171663,158227],{"class":9495},[74,171665,158230],{"class":80},[74,171667,158233],{"class":84},[74,171669,155753],{"class":190},[74,171671,116483],{"class":84},[74,171673,167809],{"class":9495},[74,171675,131],{"class":80},[74,171677,35757],{"class":134},[74,171679,91],{"class":84},[74,171681,171682,171684],{"class":76,"line":1273},[74,171683,34696],{"class":134},[74,171685,80866],{"class":84},[14,171687,171689],{"id":171688},"_711-闭包入门","7.11 闭包入门",[19,171691,171692],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[64,171694,171696],{"className":34659,"code":171695,"language":34661,"meta":69,"style":69},"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",[71,171697,171698,171708,171718,171729,171733,171740,171744,171748,171762],{"__ignoreMap":69},[74,171699,171700,171702,171705],{"class":76,"line":77},[74,171701,36228],{"class":80},[74,171703,171704],{"class":1925}," outer",[74,171706,171707],{"class":84},"(base):\n",[74,171709,171710,171712,171715],{"class":76,"line":94},[74,171711,35082],{"class":80},[74,171713,171714],{"class":1925}," inner",[74,171716,171717],{"class":84},"(num):\n",[74,171719,171720,171722,171725,171727],{"class":76,"line":1141},[74,171721,19031],{"class":80},[74,171723,171724],{"class":84}," base ",[74,171726,567],{"class":80},[74,171728,170860],{"class":84},[74,171730,171731],{"class":76,"line":1156},[74,171732,2363],{"emptyLinePlaceholder":2362},[74,171734,171735,171737],{"class":76,"line":1162},[74,171736,4053],{"class":80},[74,171738,171739],{"class":84}," inner\n",[74,171741,171742],{"class":76,"line":1176},[74,171743,2363],{"emptyLinePlaceholder":2362},[74,171745,171746],{"class":76,"line":1182},[74,171747,2363],{"emptyLinePlaceholder":2362},[74,171749,171750,171753,171755,171758,171760],{"class":76,"line":1273},[74,171751,171752],{"class":84},"add_10 ",[74,171754,131],{"class":80},[74,171756,171757],{"class":84}," outer(",[74,171759,532],{"class":134},[74,171761,91],{"class":84},[74,171763,171764,171766,171769,171771],{"class":76,"line":1279},[74,171765,34696],{"class":134},[74,171767,171768],{"class":84},"(add_10(",[74,171770,405],{"class":134},[74,171772,34778],{"class":84},[19,171774,171775],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,171777,171779],{"id":171778},"_712-装饰器入门","7.12 装饰器入门",[19,171781,171782],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[64,171784,171786],{"className":34659,"code":171785,"language":34661,"meta":69,"style":69},"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",[71,171787,171788,171797,171806,171817,171822,171833,171837,171844,171848,171852,171857,171865,171875,171879,171883],{"__ignoreMap":69},[74,171789,171790,171792,171794],{"class":76,"line":77},[74,171791,36228],{"class":80},[74,171793,91472],{"class":1925},[74,171795,171796],{"class":84},"(func):\n",[74,171798,171799,171801,171804],{"class":76,"line":94},[74,171800,35082],{"class":80},[74,171802,171803],{"class":1925}," wrapper",[74,171805,36234],{"class":84},[74,171807,171808,171810,171812,171815],{"class":76,"line":1141},[74,171809,36732],{"class":134},[74,171811,85],{"class":84},[74,171813,171814],{"class":190},"\"函数开始执行\"",[74,171816,91],{"class":84},[74,171818,171819],{"class":76,"line":1156},[74,171820,171821],{"class":84},"        func()\n",[74,171823,171824,171826,171828,171831],{"class":76,"line":1162},[74,171825,36732],{"class":134},[74,171827,85],{"class":84},[74,171829,171830],{"class":190},"\"函数执行结束\"",[74,171832,91],{"class":84},[74,171834,171835],{"class":76,"line":1176},[74,171836,2363],{"emptyLinePlaceholder":2362},[74,171838,171839,171841],{"class":76,"line":1182},[74,171840,4053],{"class":80},[74,171842,171843],{"class":84}," wrapper\n",[74,171845,171846],{"class":76,"line":1273},[74,171847,2363],{"emptyLinePlaceholder":2362},[74,171849,171850],{"class":76,"line":1279},[74,171851,2363],{"emptyLinePlaceholder":2362},[74,171853,171854],{"class":76,"line":1291},[74,171855,171856],{"class":1925},"@log\n",[74,171858,171859,171861,171863],{"class":76,"line":1574},[74,171860,36228],{"class":80},[74,171862,165277],{"class":1925},[74,171864,36234],{"class":84},[74,171866,171867,171869,171871,171873],{"class":76,"line":1579},[74,171868,35580],{"class":134},[74,171870,85],{"class":84},[74,171872,10123],{"class":190},[74,171874,91],{"class":84},[74,171876,171877],{"class":76,"line":1585},[74,171878,2363],{"emptyLinePlaceholder":2362},[74,171880,171881],{"class":76,"line":1590},[74,171882,2363],{"emptyLinePlaceholder":2362},[74,171884,171885],{"class":76,"line":1604},[74,171886,165312],{"class":84},[19,171888,162555],{},[64,171890,171892],{"className":34659,"code":171891,"language":34661,"meta":69,"style":69},"say_hello = log(say_hello)\n",[71,171893,171894],{"__ignoreMap":69},[74,171895,171896,171899,171901],{"class":76,"line":77},[74,171897,171898],{"class":84},"say_hello ",[74,171900,131],{"class":80},[74,171902,171903],{"class":84}," log(say_hello)\n",[19,171905,171906],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,171908,171910],{"id":171909},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[64,171912,171914],{"className":34659,"code":171913,"language":34661,"meta":69,"style":69},"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",[71,171915,171916,171924,171941,171951,171970,171980,171987,171991,171997,172001,172005,172009,172017,172027,172031,172035],{"__ignoreMap":69},[74,171917,171918,171920,171922],{"class":76,"line":77},[74,171919,36228],{"class":80},[74,171921,91472],{"class":1925},[74,171923,171796],{"class":84},[74,171925,171926,171928,171930,171932,171934,171937,171939],{"class":76,"line":94},[74,171927,35082],{"class":80},[74,171929,171803],{"class":1925},[74,171931,85],{"class":84},[74,171933,541],{"class":80},[74,171935,171936],{"class":84},"args, ",[74,171938,14940],{"class":80},[74,171940,170947],{"class":84},[74,171942,171943,171945,171947,171949],{"class":76,"line":1141},[74,171944,36732],{"class":134},[74,171946,85],{"class":84},[74,171948,171814],{"class":190},[74,171950,91],{"class":84},[74,171952,171953,171956,171958,171961,171963,171965,171967],{"class":76,"line":1156},[74,171954,171955],{"class":84},"        result ",[74,171957,131],{"class":80},[74,171959,171960],{"class":84}," func(",[74,171962,541],{"class":80},[74,171964,171936],{"class":84},[74,171966,14940],{"class":80},[74,171968,171969],{"class":84},"kwargs)\n",[74,171971,171972,171974,171976,171978],{"class":76,"line":1162},[74,171973,36732],{"class":134},[74,171975,85],{"class":84},[74,171977,171830],{"class":190},[74,171979,91],{"class":84},[74,171981,171982,171984],{"class":76,"line":1176},[74,171983,19031],{"class":80},[74,171985,171986],{"class":84}," result\n",[74,171988,171989],{"class":76,"line":1182},[74,171990,2363],{"emptyLinePlaceholder":2362},[74,171992,171993,171995],{"class":76,"line":1273},[74,171994,4053],{"class":80},[74,171996,171843],{"class":84},[74,171998,171999],{"class":76,"line":1279},[74,172000,2363],{"emptyLinePlaceholder":2362},[74,172002,172003],{"class":76,"line":1291},[74,172004,2363],{"emptyLinePlaceholder":2362},[74,172006,172007],{"class":76,"line":1574},[74,172008,171856],{"class":1925},[74,172010,172011,172013,172015],{"class":76,"line":1579},[74,172012,36228],{"class":80},[74,172014,9488],{"class":1925},[74,172016,155374],{"class":84},[74,172018,172019,172021,172023,172025],{"class":76,"line":1585},[74,172020,4053],{"class":80},[74,172022,15148],{"class":84},[74,172024,567],{"class":80},[74,172026,155385],{"class":84},[74,172028,172029],{"class":76,"line":1590},[74,172030,2363],{"emptyLinePlaceholder":2362},[74,172032,172033],{"class":76,"line":1604},[74,172034,2363],{"emptyLinePlaceholder":2362},[74,172036,172037,172039,172041,172043,172045,172047],{"class":76,"line":1609},[74,172038,34696],{"class":134},[74,172040,170881],{"class":84},[74,172042,532],{"class":134},[74,172044,16714],{"class":84},[74,172046,786],{"class":134},[74,172048,34778],{"class":84},[19,172050,172051,172052,105299,172054,172056],{},"这个写法使用 ",[71,172053,170813],{},[71,172055,170928],{}," 接收原函数的所有参数。",[14,172058,172060],{"id":172059},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,172062,127573],{},[27,172064,172065,172068,172071],{},[30,172066,172067],{},"给定一组学生数据。",[30,172069,172070],{},"封装函数，根据传入规则筛选学生。",[30,172072,172073],{},"筛选及格、优秀、未成年学生。",[19,172075,14314],{},[64,172077,172079],{"className":34659,"code":172078,"language":34661,"meta":69,"style":69},"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",[71,172080,172081,172089,172117,172145,172173,172177,172181,172185,172195,172203,172213,172220,172225,172231,172235,172239,172263,172286,172309,172313,172320,172327],{"__ignoreMap":69},[74,172082,172083,172085,172087],{"class":76,"line":77},[74,172084,163997],{"class":84},[74,172086,131],{"class":80},[74,172088,59728],{"class":84},[74,172090,172091,172093,172095,172097,172099,172101,172103,172105,172107,172109,172111,172113,172115],{"class":76,"line":94},[74,172092,152666],{"class":84},[74,172094,66960],{"class":190},[74,172096,55718],{"class":84},[74,172098,154169],{"class":190},[74,172100,16714],{"class":84},[74,172102,73405],{"class":190},[74,172104,55718],{"class":84},[74,172106,736],{"class":134},[74,172108,16714],{"class":84},[74,172110,155753],{"class":190},[74,172112,55718],{"class":84},[74,172114,1075],{"class":134},[74,172116,4893],{"class":84},[74,172118,172119,172121,172123,172125,172127,172129,172131,172133,172135,172137,172139,172141,172143],{"class":76,"line":1141},[74,172120,152666],{"class":84},[74,172122,66960],{"class":190},[74,172124,55718],{"class":84},[74,172126,155217],{"class":190},[74,172128,16714],{"class":84},[74,172130,73405],{"class":190},[74,172132,55718],{"class":84},[74,172134,711],{"class":134},[74,172136,16714],{"class":84},[74,172138,155753],{"class":190},[74,172140,55718],{"class":84},[74,172142,897],{"class":134},[74,172144,4893],{"class":84},[74,172146,172147,172149,172151,172153,172155,172157,172159,172161,172163,172165,172167,172169,172171],{"class":76,"line":1156},[74,172148,152666],{"class":84},[74,172150,66960],{"class":190},[74,172152,55718],{"class":84},[74,172154,164012],{"class":190},[74,172156,16714],{"class":84},[74,172158,73405],{"class":190},[74,172160,55718],{"class":84},[74,172162,761],{"class":134},[74,172164,16714],{"class":84},[74,172166,155753],{"class":190},[74,172168,55718],{"class":84},[74,172170,968],{"class":134},[74,172172,4893],{"class":84},[74,172174,172175],{"class":76,"line":1162},[74,172176,37527],{"class":84},[74,172178,172179],{"class":76,"line":1176},[74,172180,2363],{"emptyLinePlaceholder":2362},[74,172182,172183],{"class":76,"line":1182},[74,172184,2363],{"emptyLinePlaceholder":2362},[74,172186,172187,172189,172192],{"class":76,"line":1273},[74,172188,36228],{"class":80},[74,172190,172191],{"class":1925}," filter_students",[74,172193,172194],{"class":84},"(students, condition):\n",[74,172196,172197,172199,172201],{"class":76,"line":1279},[74,172198,165504],{"class":84},[74,172200,131],{"class":80},[74,172202,56119],{"class":84},[74,172204,172205,172207,172209,172211],{"class":76,"line":1291},[74,172206,3164],{"class":80},[74,172208,156418],{"class":84},[74,172210,30324],{"class":80},[74,172212,156423],{"class":84},[74,172214,172215,172217],{"class":76,"line":1574},[74,172216,2460],{"class":80},[74,172218,172219],{"class":84}," condition(student):\n",[74,172221,172222],{"class":76,"line":1579},[74,172223,172224],{"class":84},"            result.append(student)\n",[74,172226,172227,172229],{"class":76,"line":1585},[74,172228,4053],{"class":80},[74,172230,171986],{"class":84},[74,172232,172233],{"class":76,"line":1590},[74,172234,2363],{"emptyLinePlaceholder":2362},[74,172236,172237],{"class":76,"line":1604},[74,172238,2363],{"emptyLinePlaceholder":2362},[74,172240,172241,172243,172245,172248,172250,172253,172255,172257,172259,172261],{"class":76,"line":1609},[74,172242,169982],{"class":84},[74,172244,131],{"class":80},[74,172246,172247],{"class":84}," filter_students(students, ",[74,172249,171167],{"class":80},[74,172251,172252],{"class":84}," s: s[",[74,172254,155753],{"class":190},[74,172256,4406],{"class":84},[74,172258,1672],{"class":80},[74,172260,162118],{"class":134},[74,172262,91],{"class":84},[74,172264,172265,172268,172270,172272,172274,172276,172278,172280,172282,172284],{"class":76,"line":1615},[74,172266,172267],{"class":84},"excellent ",[74,172269,131],{"class":80},[74,172271,172247],{"class":84},[74,172273,171167],{"class":80},[74,172275,172252],{"class":84},[74,172277,155753],{"class":190},[74,172279,4406],{"class":84},[74,172281,1672],{"class":80},[74,172283,162069],{"class":134},[74,172285,91],{"class":84},[74,172287,172288,172291,172293,172295,172297,172299,172301,172303,172305,172307],{"class":76,"line":1636},[74,172289,172290],{"class":84},"under_age ",[74,172292,131],{"class":80},[74,172294,172247],{"class":84},[74,172296,171167],{"class":80},[74,172298,172252],{"class":84},[74,172300,73405],{"class":190},[74,172302,4406],{"class":84},[74,172304,996],{"class":80},[74,172306,160566],{"class":134},[74,172308,91],{"class":84},[74,172310,172311],{"class":76,"line":1641},[74,172312,2363],{"emptyLinePlaceholder":2362},[74,172314,172315,172317],{"class":76,"line":1655},[74,172316,34696],{"class":134},[74,172318,172319],{"class":84},"(passed)\n",[74,172321,172322,172324],{"class":76,"line":1660},[74,172323,34696],{"class":134},[74,172325,172326],{"class":84},"(excellent)\n",[74,172328,172329,172331],{"class":76,"line":1689},[74,172330,34696],{"class":134},[74,172332,172333],{"class":84},"(under_age)\n",[14,172335,172337],{"id":172336},"_715-易错点","7.15 易错点",[27,172339,172340,172343,172351,172356,172367],{},[30,172341,172342],{},"默认参数不要写可变对象。",[30,172344,172345,172347,172348,172350],{},[71,172346,170813],{}," 是元组，",[71,172349,170928],{}," 是字典。",[30,172352,172353,172355],{},[71,172354,171167],{}," 只适合简单表达式。",[30,172357,172358,105299,172360,172362,172363,172366],{},[71,172359,78325],{},[71,172361,84332],{}," 的结果是迭代器，常用 ",[71,172364,172365],{},"list()"," 转换查看。",[30,172368,172369],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,172371,172373],{"id":172372},"_716-本章练习","7.16 本章练习",[27,172375,172376,172383,172389,172394,172399],{},[30,172377,172378,172379,172382],{},"写函数 ",[71,172380,172381],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[30,172384,172378,172385,172388],{},[71,172386,172387],{},"print_user(**kwargs)","，输出用户所有字段。",[30,172390,108647,172391,172393],{},[71,172392,171167],{}," 对学生列表按年龄排序。",[30,172395,108647,172396,172398],{},[71,172397,84332],{}," 找出成绩不及格的学生。",[30,172400,172401],{},"写一个装饰器，统计函数执行前后的提示信息。",[5090,172403,172404],{},"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":69,"searchDepth":94,"depth":94,"links":172406},[172407,172408,172409,172410,172411,172412,172416,172417,172418,172419,172424,172425,172426,172427,172428,172429],{"id":170265,"depth":94,"text":170266},{"id":170379,"depth":94,"text":170380},{"id":170468,"depth":94,"text":170469},{"id":170530,"depth":94,"text":170531},{"id":170676,"depth":94,"text":170677},{"id":170803,"depth":94,"text":170804,"children":172413},[172414,172415],{"id":170807,"depth":1141,"text":170808},{"id":170922,"depth":1141,"text":170923},{"id":171003,"depth":94,"text":171004},{"id":171161,"depth":94,"text":171162},{"id":171329,"depth":94,"text":171330},{"id":171411,"depth":94,"text":171412,"children":172420},[172421,172422,172423],{"id":171415,"depth":1141,"text":171416},{"id":171486,"depth":1141,"text":171487},{"id":171563,"depth":1141,"text":171564},{"id":171688,"depth":94,"text":171689},{"id":171778,"depth":94,"text":171779},{"id":171909,"depth":94,"text":171910},{"id":172059,"depth":94,"text":172060},{"id":172336,"depth":94,"text":172337},{"id":172372,"depth":94,"text":172373},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":170257,"description":27656},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":172436,"title":172437,"body":172438,"description":27656,"extension":5121,"meta":174957,"navigation":2362,"path":174958,"seo":174959,"stem":174960,"__hash__":174961},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":172439,"toc":174932},[172440,172443,172447,172450,172453,172484,172488,172492,172495,172522,172526,172529,172580,172583,172598,172601,172636,172640,172642,172666,172669,172729,172733,172737,172740,172797,172800,172820,172824,172827,172890,172894,172897,172953,172960,172984,172988,172991,173054,173058,173063,173114,173117,173121,173126,173193,173196,173278,173282,173287,173338,173341,173345,173348,173351,173359,173362,173408,173411,173457,173461,173467,173511,173514,173560,173563,173603,173606,173667,173671,173674,173764,173767,173909,173912,173979,173983,173986,173989,174130,174133,174211,174214,174390,174394,174396,174407,174409,174608,174612,174856,174860,174894,174898,174929],[10,172441,172437],{"id":172442},"_8-文件操作",[14,172444,172446],{"id":172445},"_81-文件操作的意义","8.1 文件操作的意义",[19,172448,172449],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,172451,172452],{},"常见文件类型：",[27,172454,172455,172461,172467,172473,172479],{},[30,172456,172457,172460],{},[71,172458,172459],{},".txt","：普通文本。",[30,172462,172463,172466],{},[71,172464,172465],{},".csv","：表格文本。",[30,172468,172469,172472],{},[71,172470,172471],{},".json","：结构化数据。",[30,172474,172475,172478],{},[71,172476,172477],{},".log","：日志文件。",[30,172480,172481,172483],{},[71,172482,150633],{},"：Python 源代码。",[14,172485,172487],{"id":172486},"_82-路径","8.2 路径",[44,172489,172491],{"id":172490},"_821-相对路径","8.2.1 相对路径",[19,172493,172494],{},"相对当前运行目录：",[64,172496,172498],{"className":34659,"code":172497,"language":34661,"meta":69,"style":69},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[71,172499,172500],{"__ignoreMap":69},[74,172501,172502,172504,172506,172508,172510,172512,172514,172516,172518,172520],{"class":76,"line":77},[74,172503,91196],{"class":134},[74,172505,85],{"class":84},[74,172507,151077],{"class":190},[74,172509,16714],{"class":84},[74,172511,151082],{"class":190},[74,172513,16714],{"class":84},[74,172515,151087],{"class":9495},[74,172517,131],{"class":80},[74,172519,151092],{"class":190},[74,172521,91],{"class":84},[44,172523,172525],{"id":172524},"_822-绝对路径","8.2.2 绝对路径",[19,172527,172528],{},"从根目录或盘符开始：",[64,172530,172532],{"className":34659,"code":172531,"language":34661,"meta":69,"style":69},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[71,172533,172534,172557],{"__ignoreMap":69},[74,172535,172536,172538,172540,172543,172545,172547,172549,172551,172553,172555],{"class":76,"line":77},[74,172537,91196],{"class":134},[74,172539,85],{"class":84},[74,172541,172542],{"class":190},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[74,172544,16714],{"class":84},[74,172546,151082],{"class":190},[74,172548,16714],{"class":84},[74,172550,151087],{"class":9495},[74,172552,131],{"class":80},[74,172554,151092],{"class":190},[74,172556,91],{"class":84},[74,172558,172559,172561,172563,172566,172568,172570,172572,172574,172576,172578],{"class":76,"line":94},[74,172560,91196],{"class":134},[74,172562,85],{"class":84},[74,172564,172565],{"class":190},"\"D:\u002Fdata\u002Fdata.txt\"",[74,172567,16714],{"class":84},[74,172569,151082],{"class":190},[74,172571,16714],{"class":84},[74,172573,151087],{"class":9495},[74,172575,131],{"class":80},[74,172577,151092],{"class":190},[74,172579,91],{"class":84},[19,172581,172582],{},"Windows 路径建议写成：",[64,172584,172586],{"className":34659,"code":172585,"language":34661,"meta":69,"style":69},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[71,172587,172588],{"__ignoreMap":69},[74,172589,172590,172593,172595],{"class":76,"line":77},[74,172591,172592],{"class":84},"path ",[74,172594,131],{"class":80},[74,172596,172597],{"class":190}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,172599,172600],{},"或原始字符串：",[64,172602,172604],{"className":34659,"code":172603,"language":34661,"meta":69,"style":69},"path = r\"D:\\data\\data.txt\"\n",[71,172605,172606],{"__ignoreMap":69},[74,172607,172608,172610,172612,172614,172616,172619,172622,172625,172627,172629,172631,172634],{"class":76,"line":77},[74,172609,172592],{"class":84},[74,172611,131],{"class":80},[74,172613,21400],{"class":80},[74,172615,337],{"class":190},[74,172617,172618],{"class":52258},"D:",[74,172620,172621],{"class":134},"\\d",[74,172623,172624],{"class":52258},"ata",[74,172626,172621],{"class":134},[74,172628,172624],{"class":52258},[74,172630,644],{"class":134},[74,172632,172633],{"class":52258},"txt",[74,172635,29414],{"class":190},[14,172637,172639],{"id":172638},"_83-open函数","8.3 open函数",[19,172641,9460],{},[64,172643,172645],{"className":34659,"code":172644,"language":34661,"meta":69,"style":69},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[71,172646,172647],{"__ignoreMap":69},[74,172648,172649,172651,172653,172655,172658,172660,172662,172664],{"class":76,"line":77},[74,172650,49635],{"class":9495},[74,172652,17843],{"class":80},[74,172654,151072],{"class":134},[74,172656,172657],{"class":84},"(文件路径, 打开模式, ",[74,172659,151087],{"class":9495},[74,172661,131],{"class":80},[74,172663,151092],{"class":190},[74,172665,91],{"class":84},[19,172667,172668],{},"常见模式：",[223,172670,172671,172680],{},[226,172672,172673],{},[229,172674,172675,172678],{},[232,172676,172677],{},"模式",[232,172679,30150],{},[270,172681,172682,172691,172700,172709,172719],{},[229,172683,172684,172688],{},[275,172685,172686],{},[71,172687,756],{},[275,172689,172690],{},"只读，文件不存在会报错",[229,172692,172693,172697],{},[275,172694,172695],{},[71,172696,881],{},[275,172698,172699],{},"只写，文件不存在会创建，存在会清空",[229,172701,172702,172706],{},[275,172703,172704],{},[71,172705,324],{},[275,172707,172708],{},"追加，文件不存在会创建",[229,172710,172711,172716],{},[275,172712,172713],{},[71,172714,172715],{},"rb",[275,172717,172718],{},"二进制只读",[229,172720,172721,172726],{},[275,172722,172723],{},[71,172724,172725],{},"wb",[275,172727,172728],{},"二进制只写",[14,172730,172732],{"id":172731},"_84-读取文件","8.4 读取文件",[44,172734,172736],{"id":172735},"_841-read","8.4.1 read",[19,172738,172739],{},"一次读取全部内容：",[64,172741,172743],{"className":34659,"code":172742,"language":34661,"meta":69,"style":69},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[71,172744,172745,172771,172783,172790],{"__ignoreMap":69},[74,172746,172747,172749,172751,172753,172755,172757,172759,172761,172763,172765,172767,172769],{"class":76,"line":77},[74,172748,49635],{"class":9495},[74,172750,17843],{"class":80},[74,172752,151072],{"class":134},[74,172754,85],{"class":84},[74,172756,151077],{"class":190},[74,172758,16714],{"class":84},[74,172760,151082],{"class":190},[74,172762,16714],{"class":84},[74,172764,151087],{"class":9495},[74,172766,131],{"class":80},[74,172768,151092],{"class":190},[74,172770,91],{"class":84},[74,172772,172773,172776,172778,172780],{"class":76,"line":94},[74,172774,172775],{"class":84},"content ",[74,172777,131],{"class":80},[74,172779,152434],{"class":9495},[74,172781,172782],{"class":84},".read()\n",[74,172784,172785,172787],{"class":76,"line":1141},[74,172786,34696],{"class":134},[74,172788,172789],{"class":84},"(content)\n",[74,172791,172792,172794],{"class":76,"line":1156},[74,172793,49635],{"class":9495},[74,172795,172796],{"class":84},".close()\n",[19,172798,172799],{},"可以指定读取字符数：",[64,172801,172803],{"className":34659,"code":172802,"language":34661,"meta":69,"style":69},"content = file.read(10)\n",[71,172804,172805],{"__ignoreMap":69},[74,172806,172807,172809,172811,172813,172816,172818],{"class":76,"line":77},[74,172808,172775],{"class":84},[74,172810,131],{"class":80},[74,172812,152434],{"class":9495},[74,172814,172815],{"class":84},".read(",[74,172817,532],{"class":134},[74,172819,91],{"class":84},[44,172821,172823],{"id":172822},"_842-readline","8.4.2 readline",[19,172825,172826],{},"一次读取一行：",[64,172828,172830],{"className":34659,"code":172829,"language":34661,"meta":69,"style":69},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[71,172831,172832,172858,172862,172873,172880,172884],{"__ignoreMap":69},[74,172833,172834,172836,172838,172840,172842,172844,172846,172848,172850,172852,172854,172856],{"class":76,"line":77},[74,172835,49635],{"class":9495},[74,172837,17843],{"class":80},[74,172839,151072],{"class":134},[74,172841,85],{"class":84},[74,172843,151077],{"class":190},[74,172845,16714],{"class":84},[74,172847,151082],{"class":190},[74,172849,16714],{"class":84},[74,172851,151087],{"class":9495},[74,172853,131],{"class":80},[74,172855,151092],{"class":190},[74,172857,91],{"class":84},[74,172859,172860],{"class":76,"line":94},[74,172861,2363],{"emptyLinePlaceholder":2362},[74,172863,172864,172866,172868,172870],{"class":76,"line":1141},[74,172865,151533],{"class":84},[74,172867,131],{"class":80},[74,172869,152434],{"class":9495},[74,172871,172872],{"class":84},".readline()\n",[74,172874,172875,172877],{"class":76,"line":1156},[74,172876,34696],{"class":134},[74,172878,172879],{"class":84},"(line)\n",[74,172881,172882],{"class":76,"line":1162},[74,172883,2363],{"emptyLinePlaceholder":2362},[74,172885,172886,172888],{"class":76,"line":1176},[74,172887,49635],{"class":9495},[74,172889,172796],{"class":84},[44,172891,172893],{"id":172892},"_843-readlines","8.4.3 readlines",[19,172895,172896],{},"读取所有行，返回列表：",[64,172898,172900],{"className":34659,"code":172899,"language":34661,"meta":69,"style":69},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[71,172901,172902,172928,172940,172947],{"__ignoreMap":69},[74,172903,172904,172906,172908,172910,172912,172914,172916,172918,172920,172922,172924,172926],{"class":76,"line":77},[74,172905,49635],{"class":9495},[74,172907,17843],{"class":80},[74,172909,151072],{"class":134},[74,172911,85],{"class":84},[74,172913,151077],{"class":190},[74,172915,16714],{"class":84},[74,172917,151082],{"class":190},[74,172919,16714],{"class":84},[74,172921,151087],{"class":9495},[74,172923,131],{"class":80},[74,172925,151092],{"class":190},[74,172927,91],{"class":84},[74,172929,172930,172933,172935,172937],{"class":76,"line":94},[74,172931,172932],{"class":84},"lines ",[74,172934,131],{"class":80},[74,172936,152434],{"class":9495},[74,172938,172939],{"class":84},".readlines()\n",[74,172941,172942,172944],{"class":76,"line":1141},[74,172943,34696],{"class":134},[74,172945,172946],{"class":84},"(lines)\n",[74,172948,172949,172951],{"class":76,"line":1156},[74,172950,49635],{"class":9495},[74,172952,172796],{"class":84},[19,172954,172955,172956,172959],{},"每一行通常带有换行符，可以用 ",[71,172957,172958],{},"strip()"," 去掉：",[64,172961,172963],{"className":34659,"code":172962,"language":34661,"meta":69,"style":69},"for line in lines:\n    print(line.strip())\n",[71,172964,172965,172977],{"__ignoreMap":69},[74,172966,172967,172969,172972,172974],{"class":76,"line":77},[74,172968,2988],{"class":80},[74,172970,172971],{"class":84}," line ",[74,172973,30324],{"class":80},[74,172975,172976],{"class":84}," lines:\n",[74,172978,172979,172981],{"class":76,"line":94},[74,172980,35580],{"class":134},[74,172982,172983],{"class":84},"(line.strip())\n",[44,172985,172987],{"id":172986},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,172989,172990],{},"推荐读取大文件时使用：",[64,172992,172994],{"className":34659,"code":172993,"language":34661,"meta":69,"style":69},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[71,172995,172996,173022,173026,173038,173044,173048],{"__ignoreMap":69},[74,172997,172998,173000,173002,173004,173006,173008,173010,173012,173014,173016,173018,173020],{"class":76,"line":77},[74,172999,49635],{"class":9495},[74,173001,17843],{"class":80},[74,173003,151072],{"class":134},[74,173005,85],{"class":84},[74,173007,151077],{"class":190},[74,173009,16714],{"class":84},[74,173011,151082],{"class":190},[74,173013,16714],{"class":84},[74,173015,151087],{"class":9495},[74,173017,131],{"class":80},[74,173019,151092],{"class":190},[74,173021,91],{"class":84},[74,173023,173024],{"class":76,"line":94},[74,173025,2363],{"emptyLinePlaceholder":2362},[74,173027,173028,173030,173032,173034,173036],{"class":76,"line":1141},[74,173029,2988],{"class":80},[74,173031,172971],{"class":84},[74,173033,30324],{"class":80},[74,173035,152434],{"class":9495},[74,173037,3702],{"class":84},[74,173039,173040,173042],{"class":76,"line":1156},[74,173041,35580],{"class":134},[74,173043,172983],{"class":84},[74,173045,173046],{"class":76,"line":1162},[74,173047,2363],{"emptyLinePlaceholder":2362},[74,173049,173050,173052],{"class":76,"line":1176},[74,173051,49635],{"class":9495},[74,173053,172796],{"class":84},[14,173055,173057],{"id":173056},"_85-with语句","8.5 with语句",[19,173059,173060,173062],{},[71,173061,112114],{}," 会自动关闭文件，推荐使用。",[64,173064,173066],{"className":34659,"code":173065,"language":34661,"meta":69,"style":69},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[71,173067,173068,173098,173108],{"__ignoreMap":69},[74,173069,173070,173072,173074,173076,173078,173080,173082,173084,173086,173088,173090,173092,173094,173096],{"class":76,"line":77},[74,173071,112114],{"class":80},[74,173073,151072],{"class":134},[74,173075,85],{"class":84},[74,173077,151077],{"class":190},[74,173079,16714],{"class":84},[74,173081,151082],{"class":190},[74,173083,16714],{"class":84},[74,173085,151087],{"class":9495},[74,173087,131],{"class":80},[74,173089,151092],{"class":190},[74,173091,17993],{"class":84},[74,173093,35664],{"class":80},[74,173095,152434],{"class":9495},[74,173097,3702],{"class":84},[74,173099,173100,173102,173104,173106],{"class":76,"line":94},[74,173101,151104],{"class":84},[74,173103,131],{"class":80},[74,173105,152434],{"class":9495},[74,173107,172782],{"class":84},[74,173109,173110,173112],{"class":76,"line":1141},[74,173111,35580],{"class":134},[74,173113,172789],{"class":84},[19,173115,173116],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,173118,173120],{"id":173119},"_86-写入文件","8.6 写入文件",[19,173122,173123,173125],{},[71,173124,881],{}," 模式会清空原文件。",[64,173127,173129],{"className":34659,"code":173128,"language":34661,"meta":69,"style":69},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[71,173130,173131,173161,173178],{"__ignoreMap":69},[74,173132,173133,173135,173137,173139,173141,173143,173145,173147,173149,173151,173153,173155,173157,173159],{"class":76,"line":77},[74,173134,112114],{"class":80},[74,173136,151072],{"class":134},[74,173138,85],{"class":84},[74,173140,151077],{"class":190},[74,173142,16714],{"class":84},[74,173144,156257],{"class":190},[74,173146,16714],{"class":84},[74,173148,151087],{"class":9495},[74,173150,131],{"class":80},[74,173152,151092],{"class":190},[74,173154,17993],{"class":84},[74,173156,35664],{"class":80},[74,173158,152434],{"class":9495},[74,173160,3702],{"class":84},[74,173162,173163,173166,173169,173172,173174,173176],{"class":76,"line":94},[74,173164,173165],{"class":9495},"    file",[74,173167,173168],{"class":84},".write(",[74,173170,173171],{"class":190},"\"hello",[74,173173,160806],{"class":134},[74,173175,337],{"class":190},[74,173177,91],{"class":84},[74,173179,173180,173182,173184,173187,173189,173191],{"class":76,"line":1141},[74,173181,173165],{"class":9495},[74,173183,173168],{"class":84},[74,173185,173186],{"class":190},"\"python",[74,173188,160806],{"class":134},[74,173190,337],{"class":190},[74,173192,91],{"class":84},[19,173194,173195],{},"写入多行：",[64,173197,173199],{"className":34659,"code":173198,"language":34661,"meta":69,"style":69},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[71,173200,173201,173236,173240,173271],{"__ignoreMap":69},[74,173202,173203,173205,173207,173209,173212,173214,173216,173218,173221,173223,173225,173227,173230,173232,173234],{"class":76,"line":77},[74,173204,172932],{"class":84},[74,173206,131],{"class":80},[74,173208,56507],{"class":84},[74,173210,173211],{"class":190},"\"小明,18",[74,173213,160806],{"class":134},[74,173215,337],{"class":190},[74,173217,16714],{"class":84},[74,173219,173220],{"class":190},"\"小红,17",[74,173222,160806],{"class":134},[74,173224,337],{"class":190},[74,173226,16714],{"class":84},[74,173228,173229],{"class":190},"\"小刚,19",[74,173231,160806],{"class":134},[74,173233,337],{"class":190},[74,173235,37527],{"class":84},[74,173237,173238],{"class":76,"line":94},[74,173239,2363],{"emptyLinePlaceholder":2362},[74,173241,173242,173244,173246,173248,173251,173253,173255,173257,173259,173261,173263,173265,173267,173269],{"class":76,"line":1141},[74,173243,112114],{"class":80},[74,173245,151072],{"class":134},[74,173247,85],{"class":84},[74,173249,173250],{"class":190},"\"students.txt\"",[74,173252,16714],{"class":84},[74,173254,156257],{"class":190},[74,173256,16714],{"class":84},[74,173258,151087],{"class":9495},[74,173260,131],{"class":80},[74,173262,151092],{"class":190},[74,173264,17993],{"class":84},[74,173266,35664],{"class":80},[74,173268,152434],{"class":9495},[74,173270,3702],{"class":84},[74,173272,173273,173275],{"class":76,"line":1156},[74,173274,173165],{"class":9495},[74,173276,173277],{"class":84},".writelines(lines)\n",[14,173279,173281],{"id":173280},"_87-追加文件","8.7 追加文件",[19,173283,173284,173286],{},[71,173285,324],{}," 模式不会清空原内容，而是在末尾追加。",[64,173288,173290],{"className":34659,"code":173289,"language":34661,"meta":69,"style":69},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[71,173291,173292,173323],{"__ignoreMap":69},[74,173293,173294,173296,173298,173300,173303,173305,173307,173309,173311,173313,173315,173317,173319,173321],{"class":76,"line":77},[74,173295,112114],{"class":80},[74,173297,151072],{"class":134},[74,173299,85],{"class":84},[74,173301,173302],{"class":190},"\"log.txt\"",[74,173304,16714],{"class":84},[74,173306,169606],{"class":190},[74,173308,16714],{"class":84},[74,173310,151087],{"class":9495},[74,173312,131],{"class":80},[74,173314,151092],{"class":190},[74,173316,17993],{"class":84},[74,173318,35664],{"class":80},[74,173320,152434],{"class":9495},[74,173322,3702],{"class":84},[74,173324,173325,173327,173329,173332,173334,173336],{"class":76,"line":94},[74,173326,173165],{"class":9495},[74,173328,173168],{"class":84},[74,173330,173331],{"class":190},"\"程序启动",[74,173333,160806],{"class":134},[74,173335,337],{"class":190},[74,173337,91],{"class":84},[19,173339,173340],{},"日志类文件常用追加模式。",[14,173342,173344],{"id":173343},"_88-文件编码","8.8 文件编码",[19,173346,173347],{},"编码决定文字如何保存为字节。",[19,173349,173350],{},"常见编码：",[27,173352,173353,173356],{},[30,173354,173355],{},"UTF-8：推荐。",[30,173357,173358],{},"GBK：部分 Windows 中文文件常见。",[19,173360,173361],{},"读取文件乱码时，可以尝试：",[64,173363,173365],{"className":34659,"code":173364,"language":34661,"meta":69,"style":69},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[71,173366,173367,173398],{"__ignoreMap":69},[74,173368,173369,173371,173373,173375,173377,173379,173381,173383,173385,173387,173390,173392,173394,173396],{"class":76,"line":77},[74,173370,112114],{"class":80},[74,173372,151072],{"class":134},[74,173374,85],{"class":84},[74,173376,151077],{"class":190},[74,173378,16714],{"class":84},[74,173380,151082],{"class":190},[74,173382,16714],{"class":84},[74,173384,151087],{"class":9495},[74,173386,131],{"class":80},[74,173388,173389],{"class":190},"\"gbk\"",[74,173391,17993],{"class":84},[74,173393,35664],{"class":80},[74,173395,152434],{"class":9495},[74,173397,3702],{"class":84},[74,173399,173400,173402,173404,173406],{"class":76,"line":94},[74,173401,151104],{"class":84},[74,173403,131],{"class":80},[74,173405,152434],{"class":9495},[74,173407,172782],{"class":84},[19,173409,173410],{},"写文件时建议统一 UTF-8：",[64,173412,173414],{"className":34659,"code":173413,"language":34661,"meta":69,"style":69},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[71,173415,173416,173446],{"__ignoreMap":69},[74,173417,173418,173420,173422,173424,173426,173428,173430,173432,173434,173436,173438,173440,173442,173444],{"class":76,"line":77},[74,173419,112114],{"class":80},[74,173421,151072],{"class":134},[74,173423,85],{"class":84},[74,173425,151077],{"class":190},[74,173427,16714],{"class":84},[74,173429,156257],{"class":190},[74,173431,16714],{"class":84},[74,173433,151087],{"class":9495},[74,173435,131],{"class":80},[74,173437,151092],{"class":190},[74,173439,17993],{"class":84},[74,173441,35664],{"class":80},[74,173443,152434],{"class":9495},[74,173445,3702],{"class":84},[74,173447,173448,173450,173452,173455],{"class":76,"line":94},[74,173449,173165],{"class":9495},[74,173451,173168],{"class":84},[74,173453,173454],{"class":190},"\"中文内容\"",[74,173456,91],{"class":84},[14,173458,173460],{"id":173459},"_89-pathlib","8.9 pathlib",[19,173462,173463,173466],{},[71,173464,173465],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[64,173468,173470],{"className":34659,"code":173469,"language":34661,"meta":69,"style":69},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[71,173471,173472,173482,173486,173504],{"__ignoreMap":69},[74,173473,173474,173476,173478,173480],{"class":76,"line":77},[74,173475,35018],{"class":80},[74,173477,112592],{"class":84},[74,173479,34673],{"class":80},[74,173481,112597],{"class":84},[74,173483,173484],{"class":76,"line":94},[74,173485,2363],{"emptyLinePlaceholder":2362},[74,173487,173488,173490,173492,173494,173497,173499,173501],{"class":76,"line":1141},[74,173489,172592],{"class":84},[74,173491,131],{"class":80},[74,173493,112826],{"class":84},[74,173495,173496],{"class":190},"\"data\"",[74,173498,17993],{"class":84},[74,173500,670],{"class":80},[74,173502,173503],{"class":190}," \"students.txt\"\n",[74,173505,173506,173508],{"class":76,"line":1156},[74,173507,34696],{"class":134},[74,173509,173510],{"class":84},"(path)\n",[19,173512,173513],{},"创建目录：",[64,173515,173517],{"className":34659,"code":173516,"language":34661,"meta":69,"style":69},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[71,173518,173519,173529,173533,173546],{"__ignoreMap":69},[74,173520,173521,173523,173525,173527],{"class":76,"line":77},[74,173522,35018],{"class":80},[74,173524,112592],{"class":84},[74,173526,34673],{"class":80},[74,173528,112597],{"class":84},[74,173530,173531],{"class":76,"line":94},[74,173532,2363],{"emptyLinePlaceholder":2362},[74,173534,173535,173538,173540,173542,173544],{"class":76,"line":1141},[74,173536,173537],{"class":84},"data_dir ",[74,173539,131],{"class":80},[74,173541,112826],{"class":84},[74,173543,173496],{"class":190},[74,173545,91],{"class":84},[74,173547,173548,173551,173554,173556,173558],{"class":76,"line":1156},[74,173549,173550],{"class":84},"data_dir.mkdir(",[74,173552,173553],{"class":9495},"exist_ok",[74,173555,131],{"class":80},[74,173557,35757],{"class":134},[74,173559,91],{"class":84},[19,173561,173562],{},"判断文件是否存在：",[64,173564,173566],{"className":34659,"code":173565,"language":34661,"meta":69,"style":69},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[71,173567,173568,173581,173585,173592],{"__ignoreMap":69},[74,173569,173570,173572,173574,173576,173579],{"class":76,"line":77},[74,173571,172592],{"class":84},[74,173573,131],{"class":80},[74,173575,112826],{"class":84},[74,173577,173578],{"class":190},"\"data\u002Fstudents.txt\"",[74,173580,91],{"class":84},[74,173582,173583],{"class":76,"line":94},[74,173584,2363],{"emptyLinePlaceholder":2362},[74,173586,173587,173589],{"class":76,"line":1141},[74,173588,1493],{"class":80},[74,173590,173591],{"class":84}," path.exists():\n",[74,173593,173594,173596,173598,173601],{"class":76,"line":1156},[74,173595,35580],{"class":134},[74,173597,85],{"class":84},[74,173599,173600],{"class":190},"\"文件存在\"",[74,173602,91],{"class":84},[19,173604,173605],{},"读写文本：",[64,173607,173609],{"className":34659,"code":173608,"language":34661,"meta":69,"style":69},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[71,173610,173611,173623,173627,173644,173661],{"__ignoreMap":69},[74,173612,173613,173615,173617,173619,173621],{"class":76,"line":77},[74,173614,172592],{"class":84},[74,173616,131],{"class":80},[74,173618,112826],{"class":84},[74,173620,151077],{"class":190},[74,173622,91],{"class":84},[74,173624,173625],{"class":76,"line":94},[74,173626,2363],{"emptyLinePlaceholder":2362},[74,173628,173629,173632,173634,173636,173638,173640,173642],{"class":76,"line":1141},[74,173630,173631],{"class":84},"path.write_text(",[74,173633,150157],{"class":190},[74,173635,16714],{"class":84},[74,173637,151087],{"class":9495},[74,173639,131],{"class":80},[74,173641,151092],{"class":190},[74,173643,91],{"class":84},[74,173645,173646,173648,173650,173653,173655,173657,173659],{"class":76,"line":1156},[74,173647,172775],{"class":84},[74,173649,131],{"class":80},[74,173651,173652],{"class":84}," path.read_text(",[74,173654,151087],{"class":9495},[74,173656,131],{"class":80},[74,173658,151092],{"class":190},[74,173660,91],{"class":84},[74,173662,173663,173665],{"class":76,"line":1162},[74,173664,34696],{"class":134},[74,173666,172789],{"class":84},[14,173668,173670],{"id":173669},"_810-json文件","8.10 JSON文件",[19,173672,173673],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[64,173675,173677],{"className":34659,"code":173676,"language":34661,"meta":69,"style":69},"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",[71,173678,173679,173685,173689,173697,173707,173717,173725,173729,173733,173758],{"__ignoreMap":69},[74,173680,173681,173683],{"class":76,"line":77},[74,173682,34673],{"class":80},[74,173684,151372],{"class":84},[74,173686,173687],{"class":76,"line":94},[74,173688,2363],{"emptyLinePlaceholder":2362},[74,173690,173691,173693,173695],{"class":76,"line":1141},[74,173692,153762],{"class":84},[74,173694,131],{"class":80},[74,173696,19851],{"class":84},[74,173698,173699,173701,173703,173705],{"class":76,"line":1156},[74,173700,151301],{"class":190},[74,173702,55718],{"class":84},[74,173704,154169],{"class":190},[74,173706,35747],{"class":84},[74,173708,173709,173711,173713,173715],{"class":76,"line":1162},[74,173710,168818],{"class":190},[74,173712,55718],{"class":84},[74,173714,736],{"class":134},[74,173716,35747],{"class":84},[74,173718,173719,173721,173723],{"class":76,"line":1176},[74,173720,168829],{"class":190},[74,173722,55718],{"class":84},[74,173724,168834],{"class":134},[74,173726,173727],{"class":76,"line":1182},[74,173728,1527],{"class":84},[74,173730,173731],{"class":76,"line":1273},[74,173732,2363],{"emptyLinePlaceholder":2362},[74,173734,173735,173737,173739,173742,173744,173746,173748,173750,173752,173754,173756],{"class":76,"line":1279},[74,173736,160725],{"class":84},[74,173738,131],{"class":80},[74,173740,173741],{"class":84}," json.dumps(student, ",[74,173743,151418],{"class":9495},[74,173745,131],{"class":80},[74,173747,38268],{"class":134},[74,173749,16714],{"class":84},[74,173751,156293],{"class":9495},[74,173753,131],{"class":80},[74,173755,163],{"class":134},[74,173757,91],{"class":84},[74,173759,173760,173762],{"class":76,"line":1291},[74,173761,34696],{"class":134},[74,173763,168352],{"class":84},[19,173765,173766],{},"写入 JSON 文件：",[64,173768,173770],{"className":34659,"code":173769,"language":34661,"meta":69,"style":69},"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",[71,173771,173772,173778,173782,173790,173818,173846,173850,173854,173884],{"__ignoreMap":69},[74,173773,173774,173776],{"class":76,"line":77},[74,173775,34673],{"class":80},[74,173777,151372],{"class":84},[74,173779,173780],{"class":76,"line":94},[74,173781,2363],{"emptyLinePlaceholder":2362},[74,173783,173784,173786,173788],{"class":76,"line":1141},[74,173785,163997],{"class":84},[74,173787,131],{"class":80},[74,173789,59728],{"class":84},[74,173791,173792,173794,173796,173798,173800,173802,173804,173806,173808,173810,173812,173814,173816],{"class":76,"line":1156},[74,173793,152666],{"class":84},[74,173795,66960],{"class":190},[74,173797,55718],{"class":84},[74,173799,154169],{"class":190},[74,173801,16714],{"class":84},[74,173803,73405],{"class":190},[74,173805,55718],{"class":84},[74,173807,736],{"class":134},[74,173809,16714],{"class":84},[74,173811,155753],{"class":190},[74,173813,55718],{"class":84},[74,173815,1075],{"class":134},[74,173817,4893],{"class":84},[74,173819,173820,173822,173824,173826,173828,173830,173832,173834,173836,173838,173840,173842,173844],{"class":76,"line":1162},[74,173821,152666],{"class":84},[74,173823,66960],{"class":190},[74,173825,55718],{"class":84},[74,173827,155217],{"class":190},[74,173829,16714],{"class":84},[74,173831,73405],{"class":190},[74,173833,55718],{"class":84},[74,173835,711],{"class":134},[74,173837,16714],{"class":84},[74,173839,155753],{"class":190},[74,173841,55718],{"class":84},[74,173843,897],{"class":134},[74,173845,4893],{"class":84},[74,173847,173848],{"class":76,"line":1176},[74,173849,37527],{"class":84},[74,173851,173852],{"class":76,"line":1182},[74,173853,2363],{"emptyLinePlaceholder":2362},[74,173855,173856,173858,173860,173862,173864,173866,173868,173870,173872,173874,173876,173878,173880,173882],{"class":76,"line":1273},[74,173857,112114],{"class":80},[74,173859,151072],{"class":134},[74,173861,85],{"class":84},[74,173863,156112],{"class":190},[74,173865,16714],{"class":84},[74,173867,156257],{"class":190},[74,173869,16714],{"class":84},[74,173871,151087],{"class":9495},[74,173873,131],{"class":80},[74,173875,151092],{"class":190},[74,173877,17993],{"class":84},[74,173879,35664],{"class":80},[74,173881,152434],{"class":9495},[74,173883,3702],{"class":84},[74,173885,173886,173889,173891,173893,173895,173897,173899,173901,173903,173905,173907],{"class":76,"line":1279},[74,173887,173888],{"class":84},"    json.dump(students, ",[74,173890,49635],{"class":9495},[74,173892,16714],{"class":84},[74,173894,151418],{"class":9495},[74,173896,131],{"class":80},[74,173898,38268],{"class":134},[74,173900,16714],{"class":84},[74,173902,156293],{"class":9495},[74,173904,131],{"class":80},[74,173906,163],{"class":134},[74,173908,91],{"class":84},[19,173910,173911],{},"读取 JSON 文件：",[64,173913,173915],{"className":34659,"code":173914,"language":34661,"meta":69,"style":69},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[71,173916,173917,173923,173927,173957,173969,173973],{"__ignoreMap":69},[74,173918,173919,173921],{"class":76,"line":77},[74,173920,34673],{"class":80},[74,173922,151372],{"class":84},[74,173924,173925],{"class":76,"line":94},[74,173926,2363],{"emptyLinePlaceholder":2362},[74,173928,173929,173931,173933,173935,173937,173939,173941,173943,173945,173947,173949,173951,173953,173955],{"class":76,"line":1141},[74,173930,112114],{"class":80},[74,173932,151072],{"class":134},[74,173934,85],{"class":84},[74,173936,156112],{"class":190},[74,173938,16714],{"class":84},[74,173940,151082],{"class":190},[74,173942,16714],{"class":84},[74,173944,151087],{"class":9495},[74,173946,131],{"class":80},[74,173948,151092],{"class":190},[74,173950,17993],{"class":84},[74,173952,35664],{"class":80},[74,173954,152434],{"class":9495},[74,173956,3702],{"class":84},[74,173958,173959,173961,173963,173965,173967],{"class":76,"line":1156},[74,173960,157318],{"class":84},[74,173962,131],{"class":80},[74,173964,152445],{"class":84},[74,173966,49635],{"class":9495},[74,173968,91],{"class":84},[74,173970,173971],{"class":76,"line":1162},[74,173972,2363],{"emptyLinePlaceholder":2362},[74,173974,173975,173977],{"class":76,"line":1176},[74,173976,34696],{"class":134},[74,173978,169276],{"class":84},[14,173980,173982],{"id":173981},"_811-csv文件","8.11 CSV文件",[19,173984,173985],{},"CSV 是逗号分隔值，常用于表格数据。",[19,173987,173988],{},"写入 CSV：",[64,173990,173992],{"className":34659,"code":173991,"language":34661,"meta":69,"style":69},"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",[71,173993,173994,174001,174005,174013,174031,174047,174063,174067,174071,174111,174125],{"__ignoreMap":69},[74,173995,173996,173998],{"class":76,"line":77},[74,173997,34673],{"class":80},[74,173999,174000],{"class":84}," csv\n",[74,174002,174003],{"class":76,"line":94},[74,174004,2363],{"emptyLinePlaceholder":2362},[74,174006,174007,174009,174011],{"class":76,"line":1141},[74,174008,163997],{"class":84},[74,174010,131],{"class":80},[74,174012,59728],{"class":84},[74,174014,174015,174018,174020,174022,174024,174026,174029],{"class":76,"line":1156},[74,174016,174017],{"class":84},"    [",[74,174019,77380],{"class":190},[74,174021,16714],{"class":84},[74,174023,77413],{"class":190},[74,174025,16714],{"class":84},[74,174027,174028],{"class":190},"\"成绩\"",[74,174030,92117],{"class":84},[74,174032,174033,174035,174037,174039,174041,174043,174045],{"class":76,"line":1162},[74,174034,174017],{"class":84},[74,174036,154169],{"class":190},[74,174038,16714],{"class":84},[74,174040,736],{"class":134},[74,174042,16714],{"class":84},[74,174044,1075],{"class":134},[74,174046,92117],{"class":84},[74,174048,174049,174051,174053,174055,174057,174059,174061],{"class":76,"line":1176},[74,174050,174017],{"class":84},[74,174052,155217],{"class":190},[74,174054,16714],{"class":84},[74,174056,711],{"class":134},[74,174058,16714],{"class":84},[74,174060,897],{"class":134},[74,174062,92117],{"class":84},[74,174064,174065],{"class":76,"line":1182},[74,174066,37527],{"class":84},[74,174068,174069],{"class":76,"line":1273},[74,174070,2363],{"emptyLinePlaceholder":2362},[74,174072,174073,174075,174077,174079,174082,174084,174086,174088,174090,174092,174094,174096,174099,174101,174103,174105,174107,174109],{"class":76,"line":1279},[74,174074,112114],{"class":80},[74,174076,151072],{"class":134},[74,174078,85],{"class":84},[74,174080,174081],{"class":190},"\"students.csv\"",[74,174083,16714],{"class":84},[74,174085,156257],{"class":190},[74,174087,16714],{"class":84},[74,174089,151087],{"class":9495},[74,174091,131],{"class":80},[74,174093,151092],{"class":190},[74,174095,16714],{"class":84},[74,174097,174098],{"class":9495},"newline",[74,174100,131],{"class":80},[74,174102,11931],{"class":190},[74,174104,17993],{"class":84},[74,174106,35664],{"class":80},[74,174108,152434],{"class":9495},[74,174110,3702],{"class":84},[74,174112,174113,174116,174118,174121,174123],{"class":76,"line":1291},[74,174114,174115],{"class":84},"    writer ",[74,174117,131],{"class":80},[74,174119,174120],{"class":84}," csv.writer(",[74,174122,49635],{"class":9495},[74,174124,91],{"class":84},[74,174126,174127],{"class":76,"line":1574},[74,174128,174129],{"class":84},"    writer.writerows(students)\n",[19,174131,174132],{},"读取 CSV：",[64,174134,174136],{"className":34659,"code":174135,"language":34661,"meta":69,"style":69},"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",[71,174137,174138,174144,174148,174178,174192,174204],{"__ignoreMap":69},[74,174139,174140,174142],{"class":76,"line":77},[74,174141,34673],{"class":80},[74,174143,174000],{"class":84},[74,174145,174146],{"class":76,"line":94},[74,174147,2363],{"emptyLinePlaceholder":2362},[74,174149,174150,174152,174154,174156,174158,174160,174162,174164,174166,174168,174170,174172,174174,174176],{"class":76,"line":1141},[74,174151,112114],{"class":80},[74,174153,151072],{"class":134},[74,174155,85],{"class":84},[74,174157,174081],{"class":190},[74,174159,16714],{"class":84},[74,174161,151082],{"class":190},[74,174163,16714],{"class":84},[74,174165,151087],{"class":9495},[74,174167,131],{"class":80},[74,174169,151092],{"class":190},[74,174171,17993],{"class":84},[74,174173,35664],{"class":80},[74,174175,152434],{"class":9495},[74,174177,3702],{"class":84},[74,174179,174180,174183,174185,174188,174190],{"class":76,"line":1156},[74,174181,174182],{"class":84},"    reader ",[74,174184,131],{"class":80},[74,174186,174187],{"class":84}," csv.reader(",[74,174189,49635],{"class":9495},[74,174191,91],{"class":84},[74,174193,174194,174196,174199,174201],{"class":76,"line":1162},[74,174195,3164],{"class":80},[74,174197,174198],{"class":84}," row ",[74,174200,30324],{"class":80},[74,174202,174203],{"class":84}," reader:\n",[74,174205,174206,174208],{"class":76,"line":1176},[74,174207,36732],{"class":134},[74,174209,174210],{"class":84},"(row)\n",[19,174212,174213],{},"使用字典写入：",[64,174215,174217],{"className":34659,"code":174216,"language":34661,"meta":69,"style":69},"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",[71,174218,174219,174225,174229,174237,174265,174293,174297,174301,174339,174360,174381,174386],{"__ignoreMap":69},[74,174220,174221,174223],{"class":76,"line":77},[74,174222,34673],{"class":80},[74,174224,174000],{"class":84},[74,174226,174227],{"class":76,"line":94},[74,174228,2363],{"emptyLinePlaceholder":2362},[74,174230,174231,174233,174235],{"class":76,"line":1141},[74,174232,163997],{"class":84},[74,174234,131],{"class":80},[74,174236,59728],{"class":84},[74,174238,174239,174241,174243,174245,174247,174249,174251,174253,174255,174257,174259,174261,174263],{"class":76,"line":1156},[74,174240,152666],{"class":84},[74,174242,66960],{"class":190},[74,174244,55718],{"class":84},[74,174246,154169],{"class":190},[74,174248,16714],{"class":84},[74,174250,73405],{"class":190},[74,174252,55718],{"class":84},[74,174254,736],{"class":134},[74,174256,16714],{"class":84},[74,174258,155753],{"class":190},[74,174260,55718],{"class":84},[74,174262,1075],{"class":134},[74,174264,4893],{"class":84},[74,174266,174267,174269,174271,174273,174275,174277,174279,174281,174283,174285,174287,174289,174291],{"class":76,"line":1162},[74,174268,152666],{"class":84},[74,174270,66960],{"class":190},[74,174272,55718],{"class":84},[74,174274,155217],{"class":190},[74,174276,16714],{"class":84},[74,174278,73405],{"class":190},[74,174280,55718],{"class":84},[74,174282,711],{"class":134},[74,174284,16714],{"class":84},[74,174286,155753],{"class":190},[74,174288,55718],{"class":84},[74,174290,897],{"class":134},[74,174292,4893],{"class":84},[74,174294,174295],{"class":76,"line":1176},[74,174296,37527],{"class":84},[74,174298,174299],{"class":76,"line":1182},[74,174300,2363],{"emptyLinePlaceholder":2362},[74,174302,174303,174305,174307,174309,174311,174313,174315,174317,174319,174321,174323,174325,174327,174329,174331,174333,174335,174337],{"class":76,"line":1273},[74,174304,112114],{"class":80},[74,174306,151072],{"class":134},[74,174308,85],{"class":84},[74,174310,174081],{"class":190},[74,174312,16714],{"class":84},[74,174314,156257],{"class":190},[74,174316,16714],{"class":84},[74,174318,151087],{"class":9495},[74,174320,131],{"class":80},[74,174322,151092],{"class":190},[74,174324,16714],{"class":84},[74,174326,174098],{"class":9495},[74,174328,131],{"class":80},[74,174330,11931],{"class":190},[74,174332,17993],{"class":84},[74,174334,35664],{"class":80},[74,174336,152434],{"class":9495},[74,174338,3702],{"class":84},[74,174340,174341,174344,174346,174348,174350,174352,174354,174356,174358],{"class":76,"line":1279},[74,174342,174343],{"class":84},"    fieldnames ",[74,174345,131],{"class":80},[74,174347,56507],{"class":84},[74,174349,66960],{"class":190},[74,174351,16714],{"class":84},[74,174353,73405],{"class":190},[74,174355,16714],{"class":84},[74,174357,155753],{"class":190},[74,174359,37527],{"class":84},[74,174361,174362,174364,174366,174369,174371,174373,174376,174378],{"class":76,"line":1291},[74,174363,174115],{"class":84},[74,174365,131],{"class":80},[74,174367,174368],{"class":84}," csv.DictWriter(",[74,174370,49635],{"class":9495},[74,174372,16714],{"class":84},[74,174374,174375],{"class":9495},"fieldnames",[74,174377,131],{"class":80},[74,174379,174380],{"class":84},"fieldnames)\n",[74,174382,174383],{"class":76,"line":1574},[74,174384,174385],{"class":84},"    writer.writeheader()\n",[74,174387,174388],{"class":76,"line":1579},[74,174389,174129],{"class":84},[14,174391,174393],{"id":174392},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,174395,127573],{},[27,174397,174398,174401,174404],{},[30,174399,174400],{},"读取文本文件。",[30,174402,174403],{},"统计每个单词出现次数。",[30,174405,174406],{},"输出出现次数最多的前 10 个单词。",[19,174408,14314],{},[64,174410,174412],{"className":34659,"code":174411,"language":34661,"meta":69,"style":69},"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",[71,174413,174414,174424,174428,174441,174457,174461,174471,174480,174484,174496,174516,174525,174529,174547,174551,174581,174585,174601],{"__ignoreMap":69},[74,174415,174416,174418,174420,174422],{"class":76,"line":77},[74,174417,35018],{"class":80},[74,174419,112592],{"class":84},[74,174421,34673],{"class":80},[74,174423,112597],{"class":84},[74,174425,174426],{"class":76,"line":94},[74,174427,2363],{"emptyLinePlaceholder":2362},[74,174429,174430,174432,174434,174436,174439],{"class":76,"line":1141},[74,174431,172592],{"class":84},[74,174433,131],{"class":80},[74,174435,112826],{"class":84},[74,174437,174438],{"class":190},"\"article.txt\"",[74,174440,91],{"class":84},[74,174442,174443,174445,174447,174449,174451,174453,174455],{"class":76,"line":1156},[74,174444,172775],{"class":84},[74,174446,131],{"class":80},[74,174448,173652],{"class":84},[74,174450,151087],{"class":9495},[74,174452,131],{"class":80},[74,174454,151092],{"class":190},[74,174456,91],{"class":84},[74,174458,174459],{"class":76,"line":1162},[74,174460,2363],{"emptyLinePlaceholder":2362},[74,174462,174463,174466,174468],{"class":76,"line":1176},[74,174464,174465],{"class":84},"words ",[74,174467,131],{"class":80},[74,174469,174470],{"class":84}," content.lower().split()\n",[74,174472,174473,174476,174478],{"class":76,"line":1182},[74,174474,174475],{"class":84},"counter ",[74,174477,131],{"class":80},[74,174479,92149],{"class":84},[74,174481,174482],{"class":76,"line":1273},[74,174483,2363],{"emptyLinePlaceholder":2362},[74,174485,174486,174488,174491,174493],{"class":76,"line":1279},[74,174487,2988],{"class":80},[74,174489,174490],{"class":84}," word ",[74,174492,30324],{"class":80},[74,174494,174495],{"class":84}," words:\n",[74,174497,174498,174501,174503,174506,174509,174511,174514],{"class":76,"line":1291},[74,174499,174500],{"class":84},"    word ",[74,174502,131],{"class":80},[74,174504,174505],{"class":84}," word.strip(",[74,174507,174508],{"class":190},"\".,!?;:",[74,174510,160776],{"class":134},[74,174512,174513],{"class":190},"'()[]\"",[74,174515,91],{"class":84},[74,174517,174518,174520,174522],{"class":76,"line":1574},[74,174519,3064],{"class":80},[74,174521,43211],{"class":80},[74,174523,174524],{"class":84}," word:\n",[74,174526,174527],{"class":76,"line":1579},[74,174528,152793],{"class":80},[74,174530,174531,174534,174536,174539,174541,174543,174545],{"class":76,"line":1585},[74,174532,174533],{"class":84},"    counter[word] ",[74,174535,131],{"class":80},[74,174537,174538],{"class":84}," counter.get(word, ",[74,174540,277],{"class":134},[74,174542,17993],{"class":84},[74,174544,567],{"class":80},[74,174546,59980],{"class":134},[74,174548,174549],{"class":76,"line":1590},[74,174550,2363],{"emptyLinePlaceholder":2362},[74,174552,174553,174556,174558,174560,174563,174565,174567,174569,174571,174573,174575,174577,174579],{"class":76,"line":1604},[74,174554,174555],{"class":84},"items ",[74,174557,131],{"class":80},[74,174559,167885],{"class":134},[74,174561,174562],{"class":84},"(counter.items(), ",[74,174564,158227],{"class":9495},[74,174566,158230],{"class":80},[74,174568,158233],{"class":84},[74,174570,303],{"class":134},[74,174572,116483],{"class":84},[74,174574,167809],{"class":9495},[74,174576,131],{"class":80},[74,174578,35757],{"class":134},[74,174580,91],{"class":84},[74,174582,174583],{"class":76,"line":1609},[74,174584,2363],{"emptyLinePlaceholder":2362},[74,174586,174587,174589,174592,174594,174597,174599],{"class":76,"line":1615},[74,174588,2988],{"class":80},[74,174590,174591],{"class":84}," word, count ",[74,174593,30324],{"class":80},[74,174595,174596],{"class":84}," items[:",[74,174598,532],{"class":134},[74,174600,170036],{"class":84},[74,174602,174603,174605],{"class":76,"line":1636},[74,174604,35580],{"class":134},[74,174606,174607],{"class":84},"(word, count)\n",[14,174609,174611],{"id":174610},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[64,174613,174615],{"className":34659,"code":174614,"language":34661,"meta":69,"style":69},"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",[71,174616,174617,174623,174633,174637,174649,174653,174657,174665,174675,174681,174685,174715,174725,174729,174733,174741,174771,174795,174799,174803,174811,174840,174845],{"__ignoreMap":69},[74,174618,174619,174621],{"class":76,"line":77},[74,174620,34673],{"class":80},[74,174622,151372],{"class":84},[74,174624,174625,174627,174629,174631],{"class":76,"line":94},[74,174626,35018],{"class":80},[74,174628,112592],{"class":84},[74,174630,34673],{"class":80},[74,174632,112597],{"class":84},[74,174634,174635],{"class":76,"line":1141},[74,174636,2363],{"emptyLinePlaceholder":2362},[74,174638,174639,174641,174643,174645,174647],{"class":76,"line":1156},[74,174640,156105],{"class":134},[74,174642,17843],{"class":80},[74,174644,112826],{"class":84},[74,174646,156112],{"class":190},[74,174648,91],{"class":84},[74,174650,174651],{"class":76,"line":1162},[74,174652,2363],{"emptyLinePlaceholder":2362},[74,174654,174655],{"class":76,"line":1176},[74,174656,2363],{"emptyLinePlaceholder":2362},[74,174658,174659,174661,174663],{"class":76,"line":1182},[74,174660,36228],{"class":80},[74,174662,156129],{"class":1925},[74,174664,36234],{"class":84},[74,174666,174667,174669,174671,174673],{"class":76,"line":1273},[74,174668,3064],{"class":80},[74,174670,43211],{"class":80},[74,174672,156140],{"class":134},[74,174674,156143],{"class":84},[74,174676,174677,174679],{"class":76,"line":1279},[74,174678,19031],{"class":80},[74,174680,56119],{"class":84},[74,174682,174683],{"class":76,"line":1291},[74,174684,2363],{"emptyLinePlaceholder":2362},[74,174686,174687,174689,174691,174693,174695,174697,174699,174701,174703,174705,174707,174709,174711,174713],{"class":76,"line":1574},[74,174688,38459],{"class":80},[74,174690,151072],{"class":134},[74,174692,85],{"class":84},[74,174694,156105],{"class":134},[74,174696,16714],{"class":84},[74,174698,151082],{"class":190},[74,174700,16714],{"class":84},[74,174702,151087],{"class":9495},[74,174704,131],{"class":80},[74,174706,151092],{"class":190},[74,174708,17993],{"class":84},[74,174710,35664],{"class":80},[74,174712,152434],{"class":9495},[74,174714,3702],{"class":84},[74,174716,174717,174719,174721,174723],{"class":76,"line":1579},[74,174718,19031],{"class":80},[74,174720,152445],{"class":84},[74,174722,49635],{"class":9495},[74,174724,91],{"class":84},[74,174726,174727],{"class":76,"line":1585},[74,174728,2363],{"emptyLinePlaceholder":2362},[74,174730,174731],{"class":76,"line":1590},[74,174732,2363],{"emptyLinePlaceholder":2362},[74,174734,174735,174737,174739],{"class":76,"line":1604},[74,174736,36228],{"class":80},[74,174738,156239],{"class":1925},[74,174740,156242],{"class":84},[74,174742,174743,174745,174747,174749,174751,174753,174755,174757,174759,174761,174763,174765,174767,174769],{"class":76,"line":1609},[74,174744,38459],{"class":80},[74,174746,151072],{"class":134},[74,174748,85],{"class":84},[74,174750,156105],{"class":134},[74,174752,16714],{"class":84},[74,174754,156257],{"class":190},[74,174756,16714],{"class":84},[74,174758,151087],{"class":9495},[74,174760,131],{"class":80},[74,174762,151092],{"class":190},[74,174764,17993],{"class":84},[74,174766,35664],{"class":80},[74,174768,152434],{"class":9495},[74,174770,3702],{"class":84},[74,174772,174773,174775,174777,174779,174781,174783,174785,174787,174789,174791,174793],{"class":76,"line":1615},[74,174774,156278],{"class":84},[74,174776,49635],{"class":9495},[74,174778,16714],{"class":84},[74,174780,151418],{"class":9495},[74,174782,131],{"class":80},[74,174784,38268],{"class":134},[74,174786,16714],{"class":84},[74,174788,156293],{"class":9495},[74,174790,131],{"class":80},[74,174792,163],{"class":134},[74,174794,91],{"class":84},[74,174796,174797],{"class":76,"line":1636},[74,174798,2363],{"emptyLinePlaceholder":2362},[74,174800,174801],{"class":76,"line":1641},[74,174802,2363],{"emptyLinePlaceholder":2362},[74,174804,174805,174807,174809],{"class":76,"line":1655},[74,174806,163997],{"class":84},[74,174808,131],{"class":80},[74,174810,157323],{"class":84},[74,174812,174813,174816,174818,174820,174822,174824,174826,174828,174830,174832,174834,174836,174838],{"class":76,"line":1660},[74,174814,174815],{"class":84},"students.append({",[74,174817,66960],{"class":190},[74,174819,55718],{"class":84},[74,174821,154169],{"class":190},[74,174823,16714],{"class":84},[74,174825,73405],{"class":190},[74,174827,55718],{"class":84},[74,174829,736],{"class":134},[74,174831,16714],{"class":84},[74,174833,155753],{"class":190},[74,174835,55718],{"class":84},[74,174837,1075],{"class":134},[74,174839,169433],{"class":84},[74,174841,174842],{"class":76,"line":1689},[74,174843,174844],{"class":84},"save_students(students)\n",[74,174846,174847,174849,174851,174854],{"class":76,"line":1694},[74,174848,34696],{"class":134},[74,174850,85],{"class":84},[74,174852,174853],{"class":190},"\"保存成功\"",[74,174855,91],{"class":84},[14,174857,174859],{"id":174858},"_814-易错点","8.14 易错点",[27,174861,174862,174866,174872,174877,174884,174891],{},[30,174863,174864,173125],{},[71,174865,881],{},[30,174867,174868,174869,32666],{},"读写中文要指定 ",[71,174870,174871],{},"encoding=\"utf-8\"",[30,174873,174874,174875,32666],{},"打开文件后要关闭，推荐使用 ",[71,174876,112114],{},[30,174878,174879,174880,174883],{},"读取大文件不要直接 ",[71,174881,174882],{},"read()"," 全部内容。",[30,174885,174886,174887,174890],{},"Windows 写 CSV 时建议加 ",[71,174888,174889],{},"newline=\"\"","，避免空行。",[30,174892,174893],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,174895,174897],{"id":174896},"_815-本章练习","8.15 本章练习",[27,174899,174900,174907,174912,174915,174918],{},[30,174901,174902,174903,174906],{},"写入一个 ",[71,174904,174905],{},"students.txt","，每行保存一个学生姓名。",[30,174908,108636,174909,174911],{},[71,174910,174905],{}," 并输出所有学生。",[30,174913,174914],{},"把学生列表保存为 JSON 文件。",[30,174916,174917],{},"从 JSON 文件读取学生数据，计算平均分。",[30,174919,174920,174921,174924,174925,174928],{},"写一个日志函数 ",[71,174922,174923],{},"write_log(message)","，每次调用向 ",[71,174926,174927],{},"app.log"," 追加一行。",[5090,174930,174931],{},"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":69,"searchDepth":94,"depth":94,"links":174933},[174934,174935,174939,174940,174946,174947,174948,174949,174950,174951,174952,174953,174954,174955,174956],{"id":172445,"depth":94,"text":172446},{"id":172486,"depth":94,"text":172487,"children":174936},[174937,174938],{"id":172490,"depth":1141,"text":172491},{"id":172524,"depth":1141,"text":172525},{"id":172638,"depth":94,"text":172639},{"id":172731,"depth":94,"text":172732,"children":174941},[174942,174943,174944,174945],{"id":172735,"depth":1141,"text":172736},{"id":172822,"depth":1141,"text":172823},{"id":172892,"depth":1141,"text":172893},{"id":172986,"depth":1141,"text":172987},{"id":173056,"depth":94,"text":173057},{"id":173119,"depth":94,"text":173120},{"id":173280,"depth":94,"text":173281},{"id":173343,"depth":94,"text":173344},{"id":173459,"depth":94,"text":173460},{"id":173669,"depth":94,"text":173670},{"id":173981,"depth":94,"text":173982},{"id":174392,"depth":94,"text":174393},{"id":174610,"depth":94,"text":174611},{"id":174858,"depth":94,"text":174859},{"id":174896,"depth":94,"text":174897},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":172437,"description":27656},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":174963,"title":174964,"body":174965,"description":27656,"extension":5121,"meta":177151,"navigation":2362,"path":177152,"seo":177153,"stem":177154,"__hash__":177155},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":174966,"toc":177118},[174967,174970,174974,174977,174980,175072,175074,175093,175098,175102,175105,175108,175137,175144,175147,175151,175154,175183,175185,175237,175243,175296,175300,175398,175401,175468,175472,175529,175531,175537,175541,175546,175552,175643,175648,175652,175655,175733,175736,175774,175778,175896,175899,175903,175906,175951,175954,175958,175963,175969,176019,176022,176053,176057,176061,176091,176095,176130,176134,176169,176209,176213,176229,176232,176236,176240,176319,176323,176364,176368,176423,176427,176461,176465,176495,176504,176511,176517,176574,176577,176585,176588,176592,176599,176602,176608,176611,176628,176633,176637,176643,176656,176659,176696,176699,176710,176713,176727,176730,176744,176748,176755,176788,176791,176793,176799,176802,176806,176808,176814,176819,176992,176996,177059,177063,177087,177091,177115],[10,174968,174964],{"id":174969},"_9-异常模块与包",[14,174971,174973],{"id":174972},"_91-什么是异常","9.1 什么是异常",[19,174975,174976],{},"异常是程序运行过程中出现的错误。",[19,174978,174979],{},"常见异常：",[223,174981,174982,174991],{},[226,174983,174984],{},[229,174985,174986,174989],{},[232,174987,174988],{},"异常",[232,174990,30150],{},[270,174992,174993,175003,175013,175022,175032,175042,175052,175062],{},[229,174994,174995,175000],{},[275,174996,174997],{},[71,174998,174999],{},"NameError",[275,175001,175002],{},"使用了未定义变量",[229,175004,175005,175010],{},[275,175006,175007],{},[71,175008,175009],{},"TypeError",[275,175011,175012],{},"类型不匹配",[229,175014,175015,175019],{},[275,175016,175017],{},[71,175018,159115],{},[275,175020,175021],{},"值不合法",[229,175023,175024,175029],{},[275,175025,175026],{},[71,175027,175028],{},"IndexError",[275,175030,175031],{},"列表索引越界",[229,175033,175034,175039],{},[275,175035,175036],{},[71,175037,175038],{},"KeyError",[275,175040,175041],{},"字典 key 不存在",[229,175043,175044,175049],{},[275,175045,175046],{},[71,175047,175048],{},"FileNotFoundError",[275,175050,175051],{},"文件不存在",[229,175053,175054,175059],{},[275,175055,175056],{},[71,175057,175058],{},"ZeroDivisionError",[275,175060,175061],{},"除数为 0",[229,175063,175064,175069],{},[275,175065,175066],{},[71,175067,175068],{},"ImportError",[275,175070,175071],{},"导入失败",[19,175073,19414],{},[64,175075,175077],{"className":34659,"code":175076,"language":34661,"meta":69,"style":69},"num = int(\"abc\")\n",[71,175078,175079],{"__ignoreMap":69},[74,175080,175081,175083,175085,175087,175089,175091],{"class":76,"line":77},[74,175082,160068],{"class":84},[74,175084,131],{"class":80},[74,175086,2344],{"class":134},[74,175088,85],{"class":84},[74,175090,160161],{"class":190},[74,175092,91],{"class":84},[19,175094,175095,175096,32666],{},"会触发 ",[71,175097,159115],{},[14,175099,175101],{"id":175100},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,175103,175104],{},"如果不处理异常，程序会直接终止。",[19,175106,175107],{},"例如用户输入年龄：",[64,175109,175111],{"className":34659,"code":175110,"language":34661,"meta":69,"style":69},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[71,175112,175113,175131],{"__ignoreMap":69},[74,175114,175115,175117,175119,175121,175123,175125,175127,175129],{"class":76,"line":77},[74,175116,150827],{"class":84},[74,175118,131],{"class":80},[74,175120,2344],{"class":134},[74,175122,85],{"class":84},[74,175124,58102],{"class":134},[74,175126,85],{"class":84},[74,175128,156675],{"class":190},[74,175130,34778],{"class":84},[74,175132,175133,175135],{"class":76,"line":94},[74,175134,34696],{"class":134},[74,175136,160042],{"class":84},[19,175138,175139,175140,175143],{},"用户输入 ",[71,175141,175142],{},"abc","，程序就会报错退出。",[19,175145,175146],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,175148,175150],{"id":175149},"_93-try-except","9.3 try except",[19,175152,175153],{},"基础语法：",[64,175155,175157],{"className":34659,"code":175156,"language":34661,"meta":69,"style":69},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[71,175158,175159,175166,175171,175178],{"__ignoreMap":69},[74,175160,175161,175164],{"class":76,"line":77},[74,175162,175163],{"class":80},"try",[74,175165,3702],{"class":84},[74,175167,175168],{"class":76,"line":94},[74,175169,175170],{"class":84},"    可能出错的代码\n",[74,175172,175173,175176],{"class":76,"line":1141},[74,175174,175175],{"class":80},"except",[74,175177,3702],{"class":84},[74,175179,175180],{"class":76,"line":1156},[74,175181,175182],{"class":84},"    出错后的处理代码\n",[19,175184,19414],{},[64,175186,175188],{"className":34659,"code":175187,"language":34661,"meta":69,"style":69},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[71,175189,175190,175196,175214,175220,175226],{"__ignoreMap":69},[74,175191,175192,175194],{"class":76,"line":77},[74,175193,175163],{"class":80},[74,175195,3702],{"class":84},[74,175197,175198,175200,175202,175204,175206,175208,175210,175212],{"class":76,"line":94},[74,175199,156667],{"class":84},[74,175201,131],{"class":80},[74,175203,2344],{"class":134},[74,175205,85],{"class":84},[74,175207,58102],{"class":134},[74,175209,85],{"class":84},[74,175211,156675],{"class":190},[74,175213,34778],{"class":84},[74,175215,175216,175218],{"class":76,"line":1141},[74,175217,35580],{"class":134},[74,175219,160042],{"class":84},[74,175221,175222,175224],{"class":76,"line":1156},[74,175223,175175],{"class":80},[74,175225,3702],{"class":84},[74,175227,175228,175230,175232,175235],{"class":76,"line":1162},[74,175229,35580],{"class":134},[74,175231,85],{"class":84},[74,175233,175234],{"class":190},"\"年龄必须是数字\"",[74,175236,91],{"class":84},[19,175238,175239,175240,175242],{},"不建议裸写 ",[71,175241,175175],{},"，最好指定异常类型。",[64,175244,175246],{"className":34659,"code":175245,"language":34661,"meta":69,"style":69},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[71,175247,175248,175254,175272,175278,175286],{"__ignoreMap":69},[74,175249,175250,175252],{"class":76,"line":77},[74,175251,175163],{"class":80},[74,175253,3702],{"class":84},[74,175255,175256,175258,175260,175262,175264,175266,175268,175270],{"class":76,"line":94},[74,175257,156667],{"class":84},[74,175259,131],{"class":80},[74,175261,2344],{"class":134},[74,175263,85],{"class":84},[74,175265,58102],{"class":134},[74,175267,85],{"class":84},[74,175269,156675],{"class":190},[74,175271,34778],{"class":84},[74,175273,175274,175276],{"class":76,"line":1141},[74,175275,35580],{"class":134},[74,175277,160042],{"class":84},[74,175279,175280,175282,175284],{"class":76,"line":1156},[74,175281,175175],{"class":80},[74,175283,156507],{"class":134},[74,175285,3702],{"class":84},[74,175287,175288,175290,175292,175294],{"class":76,"line":1162},[74,175289,35580],{"class":134},[74,175291,85],{"class":84},[74,175293,175234],{"class":190},[74,175295,91],{"class":84},[14,175297,175299],{"id":175298},"_94-捕获多个异常","9.4 捕获多个异常",[64,175301,175303],{"className":34659,"code":175302,"language":34661,"meta":69,"style":69},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[71,175304,175305,175311,175332,175352,175359,175367,175378,175387],{"__ignoreMap":69},[74,175306,175307,175309],{"class":76,"line":77},[74,175308,175163],{"class":80},[74,175310,3702],{"class":84},[74,175312,175313,175316,175318,175320,175322,175324,175326,175328,175330],{"class":76,"line":94},[74,175314,175315],{"class":84},"    nums ",[74,175317,131],{"class":80},[74,175319,56507],{"class":84},[74,175321,303],{"class":134},[74,175323,16714],{"class":84},[74,175325,163],{"class":134},[74,175327,16714],{"class":84},[74,175329,157],{"class":134},[74,175331,37527],{"class":84},[74,175333,175334,175337,175339,175341,175343,175345,175347,175350],{"class":76,"line":1141},[74,175335,175336],{"class":84},"    index ",[74,175338,131],{"class":80},[74,175340,2344],{"class":134},[74,175342,85],{"class":84},[74,175344,58102],{"class":134},[74,175346,85],{"class":84},[74,175348,175349],{"class":190},"\"请输入索引:\"",[74,175351,34778],{"class":84},[74,175353,175354,175356],{"class":76,"line":1156},[74,175355,35580],{"class":134},[74,175357,175358],{"class":84},"(nums[index])\n",[74,175360,175361,175363,175365],{"class":76,"line":1162},[74,175362,175175],{"class":80},[74,175364,156507],{"class":134},[74,175366,3702],{"class":84},[74,175368,175369,175371,175373,175376],{"class":76,"line":1176},[74,175370,35580],{"class":134},[74,175372,85],{"class":84},[74,175374,175375],{"class":190},"\"索引必须是整数\"",[74,175377,91],{"class":84},[74,175379,175380,175382,175385],{"class":76,"line":1182},[74,175381,175175],{"class":80},[74,175383,175384],{"class":134}," IndexError",[74,175386,3702],{"class":84},[74,175388,175389,175391,175393,175396],{"class":76,"line":1273},[74,175390,35580],{"class":134},[74,175392,85],{"class":84},[74,175394,175395],{"class":190},"\"索引越界\"",[74,175397,91],{"class":84},[19,175399,175400],{},"多个异常使用相同处理逻辑：",[64,175402,175404],{"className":34659,"code":175403,"language":34661,"meta":69,"style":69},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[71,175405,175406,175412,175430,175443,175457],{"__ignoreMap":69},[74,175407,175408,175410],{"class":76,"line":77},[74,175409,175163],{"class":80},[74,175411,3702],{"class":84},[74,175413,175414,175416,175418,175420,175422,175424,175426,175428],{"class":76,"line":94},[74,175415,49874],{"class":84},[74,175417,131],{"class":80},[74,175419,2344],{"class":134},[74,175421,85],{"class":84},[74,175423,58102],{"class":134},[74,175425,85],{"class":84},[74,175427,160077],{"class":190},[74,175429,34778],{"class":84},[74,175431,175432,175434,175436,175438,175440],{"class":76,"line":1141},[74,175433,35580],{"class":134},[74,175435,85],{"class":84},[74,175437,532],{"class":134},[74,175439,160327],{"class":80},[74,175441,175442],{"class":84}," num)\n",[74,175444,175445,175447,175449,175451,175453,175455],{"class":76,"line":1156},[74,175446,175175],{"class":80},[74,175448,1620],{"class":84},[74,175450,159115],{"class":134},[74,175452,16714],{"class":84},[74,175454,175058],{"class":134},[74,175456,35067],{"class":84},[74,175458,175459,175461,175463,175466],{"class":76,"line":1162},[74,175460,35580],{"class":134},[74,175462,85],{"class":84},[74,175464,175465],{"class":190},"\"输入不合法\"",[74,175467,91],{"class":84},[14,175469,175471],{"id":175470},"_95-获取异常信息","9.5 获取异常信息",[64,175473,175475],{"className":34659,"code":175474,"language":34661,"meta":69,"style":69},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[71,175476,175477,175483,175497,175508],{"__ignoreMap":69},[74,175478,175479,175481],{"class":76,"line":77},[74,175480,175163],{"class":80},[74,175482,3702],{"class":84},[74,175484,175485,175487,175489,175491,175493,175495],{"class":76,"line":94},[74,175486,49874],{"class":84},[74,175488,131],{"class":80},[74,175490,2344],{"class":134},[74,175492,85],{"class":84},[74,175494,160161],{"class":190},[74,175496,91],{"class":84},[74,175498,175499,175501,175503,175505],{"class":76,"line":1141},[74,175500,175175],{"class":80},[74,175502,156507],{"class":134},[74,175504,68885],{"class":80},[74,175506,175507],{"class":84}," e:\n",[74,175509,175510,175512,175514,175516,175519,175521,175523,175525,175527],{"class":76,"line":1156},[74,175511,35580],{"class":134},[74,175513,85],{"class":84},[74,175515,138],{"class":80},[74,175517,175518],{"class":190},"\"出错了:",[74,175520,982],{"class":134},[74,175522,160],{"class":84},[74,175524,1032],{"class":134},[74,175526,337],{"class":190},[74,175528,91],{"class":84},[19,175530,150738],{},[64,175532,175535],{"className":175533,"code":175534,"language":9466,"meta":69},[9464],"出错了:invalid literal for int() with base 10: 'abc'\n",[71,175536,175534],{"__ignoreMap":69},[14,175538,175540],{"id":175539},"_96-else和finally","9.6 else和finally",[19,175542,175543,175545],{},[71,175544,1663],{},"：没有异常时执行。",[19,175547,175548,175551],{},[71,175549,175550],{},"finally","：无论是否异常都会执行。",[64,175553,175555],{"className":34659,"code":175554,"language":34661,"meta":69,"style":69},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[71,175556,175557,175563,175581,175589,175599,175605,175626,175632],{"__ignoreMap":69},[74,175558,175559,175561],{"class":76,"line":77},[74,175560,175163],{"class":80},[74,175562,3702],{"class":84},[74,175564,175565,175567,175569,175571,175573,175575,175577,175579],{"class":76,"line":94},[74,175566,49874],{"class":84},[74,175568,131],{"class":80},[74,175570,2344],{"class":134},[74,175572,85],{"class":84},[74,175574,58102],{"class":134},[74,175576,85],{"class":84},[74,175578,160077],{"class":190},[74,175580,34778],{"class":84},[74,175582,175583,175585,175587],{"class":76,"line":1141},[74,175584,175175],{"class":80},[74,175586,156507],{"class":134},[74,175588,3702],{"class":84},[74,175590,175591,175593,175595,175597],{"class":76,"line":1156},[74,175592,35580],{"class":134},[74,175594,85],{"class":84},[74,175596,157495],{"class":190},[74,175598,91],{"class":84},[74,175600,175601,175603],{"class":76,"line":1162},[74,175602,1663],{"class":80},[74,175604,3702],{"class":84},[74,175606,175607,175609,175611,175613,175616,175618,175620,175622,175624],{"class":76,"line":1176},[74,175608,35580],{"class":134},[74,175610,85],{"class":84},[74,175612,138],{"class":80},[74,175614,175615],{"class":190},"\"输入正确:",[74,175617,982],{"class":134},[74,175619,1627],{"class":84},[74,175621,1032],{"class":134},[74,175623,337],{"class":190},[74,175625,91],{"class":84},[74,175627,175628,175630],{"class":76,"line":1182},[74,175629,175550],{"class":80},[74,175631,3702],{"class":84},[74,175633,175634,175636,175638,175641],{"class":76,"line":1273},[74,175635,35580],{"class":134},[74,175637,85],{"class":84},[74,175639,175640],{"class":190},"\"程序结束\"",[74,175642,91],{"class":84},[19,175644,175645,175647],{},[71,175646,175550],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,175649,175651],{"id":175650},"_97-抛出异常","9.7 抛出异常",[19,175653,175654],{},"程序可以主动抛出异常。",[64,175656,175658],{"className":34659,"code":175657,"language":34661,"meta":69,"style":69},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[71,175659,175660,175669,175681,175694,175714,175718,175722],{"__ignoreMap":69},[74,175661,175662,175664,175667],{"class":76,"line":77},[74,175663,36228],{"class":80},[74,175665,175666],{"class":1925}," set_age",[74,175668,165696],{"class":84},[74,175670,175671,175673,175675,175677,175679],{"class":76,"line":94},[74,175672,3064],{"class":80},[74,175674,19986],{"class":84},[74,175676,996],{"class":80},[74,175678,4056],{"class":134},[74,175680,3702],{"class":84},[74,175682,175683,175685,175687,175689,175692],{"class":76,"line":1141},[74,175684,107713],{"class":80},[74,175686,156507],{"class":134},[74,175688,85],{"class":84},[74,175690,175691],{"class":190},"\"年龄不能为负数\"",[74,175693,91],{"class":84},[74,175695,175696,175698,175700,175702,175704,175706,175708,175710,175712],{"class":76,"line":1156},[74,175697,35580],{"class":134},[74,175699,85],{"class":84},[74,175701,138],{"class":80},[74,175703,166264],{"class":190},[74,175705,982],{"class":134},[74,175707,74502],{"class":84},[74,175709,1032],{"class":134},[74,175711,337],{"class":190},[74,175713,91],{"class":84},[74,175715,175716],{"class":76,"line":1162},[74,175717,2363],{"emptyLinePlaceholder":2362},[74,175719,175720],{"class":76,"line":1176},[74,175721,2363],{"emptyLinePlaceholder":2362},[74,175723,175724,175727,175729,175731],{"class":76,"line":1182},[74,175725,175726],{"class":84},"set_age(",[74,175728,618],{"class":80},[74,175730,303],{"class":134},[74,175732,91],{"class":84},[19,175734,175735],{},"调用者可以捕获：",[64,175737,175739],{"className":34659,"code":175738,"language":34661,"meta":69,"style":69},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[71,175740,175741,175747,175758,175768],{"__ignoreMap":69},[74,175742,175743,175745],{"class":76,"line":77},[74,175744,175163],{"class":80},[74,175746,3702],{"class":84},[74,175748,175749,175752,175754,175756],{"class":76,"line":94},[74,175750,175751],{"class":84},"    set_age(",[74,175753,618],{"class":80},[74,175755,303],{"class":134},[74,175757,91],{"class":84},[74,175759,175760,175762,175764,175766],{"class":76,"line":1141},[74,175761,175175],{"class":80},[74,175763,156507],{"class":134},[74,175765,68885],{"class":80},[74,175767,175507],{"class":84},[74,175769,175770,175772],{"class":76,"line":1156},[74,175771,35580],{"class":134},[74,175773,71280],{"class":84},[14,175775,175777],{"id":175776},"_98-自定义异常","9.8 自定义异常",[64,175779,175781],{"className":34659,"code":175780,"language":34661,"meta":69,"style":69},"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",[71,175782,175783,175797,175801,175805,175809,175817,175827,175838,175848,175852,175856,175862,175879,175890],{"__ignoreMap":69},[74,175784,175785,175787,175790,175792,175795],{"class":76,"line":77},[74,175786,18973],{"class":80},[74,175788,175789],{"class":1925}," BalanceNotEnoughError",[74,175791,85],{"class":84},[74,175793,175794],{"class":134},"Exception",[74,175796,35067],{"class":84},[74,175798,175799],{"class":76,"line":94},[74,175800,153818],{"class":80},[74,175802,175803],{"class":76,"line":1141},[74,175804,2363],{"emptyLinePlaceholder":2362},[74,175806,175807],{"class":76,"line":1156},[74,175808,2363],{"emptyLinePlaceholder":2362},[74,175810,175811,175813,175815],{"class":76,"line":1162},[74,175812,36228],{"class":80},[74,175814,154467],{"class":1925},[74,175816,167093],{"class":84},[74,175818,175819,175821,175823,175825],{"class":76,"line":1176},[74,175820,3064],{"class":80},[74,175822,154423],{"class":84},[74,175824,1046],{"class":80},[74,175826,166870],{"class":84},[74,175828,175829,175831,175834,175836],{"class":76,"line":1182},[74,175830,107713],{"class":80},[74,175832,175833],{"class":84}," BalanceNotEnoughError(",[74,175835,154518],{"class":190},[74,175837,91],{"class":84},[74,175839,175840,175842,175844,175846],{"class":76,"line":1273},[74,175841,4053],{"class":80},[74,175843,167100],{"class":84},[74,175845,618],{"class":80},[74,175847,154456],{"class":84},[74,175849,175850],{"class":76,"line":1279},[74,175851,2363],{"emptyLinePlaceholder":2362},[74,175853,175854],{"class":76,"line":1291},[74,175855,2363],{"emptyLinePlaceholder":2362},[74,175857,175858,175860],{"class":76,"line":1574},[74,175859,175163],{"class":80},[74,175861,3702],{"class":84},[74,175863,175864,175866,175868,175871,175873,175875,175877],{"class":76,"line":1579},[74,175865,166771],{"class":84},[74,175867,131],{"class":80},[74,175869,175870],{"class":84}," withdraw(",[74,175872,397],{"class":134},[74,175874,16714],{"class":84},[74,175876,1684],{"class":134},[74,175878,91],{"class":84},[74,175880,175881,175883,175886,175888],{"class":76,"line":1585},[74,175882,175175],{"class":80},[74,175884,175885],{"class":84}," BalanceNotEnoughError ",[74,175887,35664],{"class":80},[74,175889,175507],{"class":84},[74,175891,175892,175894],{"class":76,"line":1590},[74,175893,35580],{"class":134},[74,175895,71280],{"class":84},[19,175897,175898],{},"入门阶段大多数情况使用内置异常即可。",[14,175900,175902],{"id":175901},"_99-traceback","9.9 traceback",[19,175904,175905],{},"调试时可以输出完整异常堆栈。",[64,175907,175909],{"className":34659,"code":175908,"language":34661,"meta":69,"style":69},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[71,175910,175911,175918,175922,175928,175938,175946],{"__ignoreMap":69},[74,175912,175913,175915],{"class":76,"line":77},[74,175914,34673],{"class":80},[74,175916,175917],{"class":84}," traceback\n",[74,175919,175920],{"class":76,"line":94},[74,175921,2363],{"emptyLinePlaceholder":2362},[74,175923,175924,175926],{"class":76,"line":1141},[74,175925,175163],{"class":80},[74,175927,3702],{"class":84},[74,175929,175930,175932,175934,175936],{"class":76,"line":1156},[74,175931,1947],{"class":134},[74,175933,85],{"class":84},[74,175935,160161],{"class":190},[74,175937,91],{"class":84},[74,175939,175940,175942,175944],{"class":76,"line":1162},[74,175941,175175],{"class":80},[74,175943,156507],{"class":134},[74,175945,3702],{"class":84},[74,175947,175948],{"class":76,"line":1176},[74,175949,175950],{"class":84},"    traceback.print_exc()\n",[19,175952,175953],{},"日志系统中常把异常堆栈记录到文件。",[14,175955,175957],{"id":175956},"_910-什么是模块","9.10 什么是模块",[19,175959,175960,175961,130264],{},"模块就是一个 ",[71,175962,150633],{},[19,175964,175965,175966,28899],{},"例如创建 ",[71,175967,175968],{},"my_math.py",[64,175970,175972],{"className":34659,"code":175971,"language":34661,"meta":69,"style":69},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[71,175973,175974,175982,175992,175996,176000,176009],{"__ignoreMap":69},[74,175975,175976,175978,175980],{"class":76,"line":77},[74,175977,36228],{"class":80},[74,175979,9488],{"class":1925},[74,175981,155374],{"class":84},[74,175983,175984,175986,175988,175990],{"class":76,"line":94},[74,175985,4053],{"class":80},[74,175987,15148],{"class":84},[74,175989,567],{"class":80},[74,175991,155385],{"class":84},[74,175993,175994],{"class":76,"line":1141},[74,175995,2363],{"emptyLinePlaceholder":2362},[74,175997,175998],{"class":76,"line":1156},[74,175999,2363],{"emptyLinePlaceholder":2362},[74,176001,176002,176004,176007],{"class":76,"line":1162},[74,176003,36228],{"class":80},[74,176005,176006],{"class":1925}," sub",[74,176008,155374],{"class":84},[74,176010,176011,176013,176015,176017],{"class":76,"line":1176},[74,176012,4053],{"class":80},[74,176014,15148],{"class":84},[74,176016,618],{"class":80},[74,176018,155385],{"class":84},[19,176020,176021],{},"在另一个文件中导入：",[64,176023,176025],{"className":34659,"code":176024,"language":34661,"meta":69,"style":69},"import my_math\n\nprint(my_math.add(1, 2))\n",[71,176026,176027,176034,176038],{"__ignoreMap":69},[74,176028,176029,176031],{"class":76,"line":77},[74,176030,34673],{"class":80},[74,176032,176033],{"class":84}," my_math\n",[74,176035,176036],{"class":76,"line":94},[74,176037,2363],{"emptyLinePlaceholder":2362},[74,176039,176040,176042,176045,176047,176049,176051],{"class":76,"line":1141},[74,176041,34696],{"class":134},[74,176043,176044],{"class":84},"(my_math.add(",[74,176046,303],{"class":134},[74,176048,16714],{"class":84},[74,176050,163],{"class":134},[74,176052,34778],{"class":84},[14,176054,176056],{"id":176055},"_911-import导入","9.11 import导入",[44,176058,176060],{"id":176059},"_9111-导入模块","9.11.1 导入模块",[64,176062,176064],{"className":34659,"code":176063,"language":34661,"meta":69,"style":69},"import random\n\nprint(random.randint(1, 10))\n",[71,176065,176066,176072,176076],{"__ignoreMap":69},[74,176067,176068,176070],{"class":76,"line":77},[74,176069,34673],{"class":80},[74,176071,49609],{"class":84},[74,176073,176074],{"class":76,"line":94},[74,176075,2363],{"emptyLinePlaceholder":2362},[74,176077,176078,176080,176083,176085,176087,176089],{"class":76,"line":1141},[74,176079,34696],{"class":134},[74,176081,176082],{"class":84},"(random.randint(",[74,176084,303],{"class":134},[74,176086,16714],{"class":84},[74,176088,532],{"class":134},[74,176090,34778],{"class":84},[44,176092,176094],{"id":176093},"_9112-导入指定内容","9.11.2 导入指定内容",[64,176096,176098],{"className":34659,"code":176097,"language":34661,"meta":69,"style":69},"from random import randint\n\nprint(randint(1, 10))\n",[71,176099,176100,176111,176115],{"__ignoreMap":69},[74,176101,176102,176104,176106,176108],{"class":76,"line":77},[74,176103,35018],{"class":80},[74,176105,62077],{"class":84},[74,176107,34673],{"class":80},[74,176109,176110],{"class":84}," randint\n",[74,176112,176113],{"class":76,"line":94},[74,176114,2363],{"emptyLinePlaceholder":2362},[74,176116,176117,176119,176122,176124,176126,176128],{"class":76,"line":1141},[74,176118,34696],{"class":134},[74,176120,176121],{"class":84},"(randint(",[74,176123,303],{"class":134},[74,176125,16714],{"class":84},[74,176127,532],{"class":134},[74,176129,34778],{"class":84},[44,176131,176133],{"id":176132},"_9113-起别名","9.11.3 起别名",[64,176135,176137],{"className":34659,"code":176136,"language":34661,"meta":69,"style":69},"import random as rd\n\nprint(rd.randint(1, 10))\n",[71,176138,176139,176150,176154],{"__ignoreMap":69},[74,176140,176141,176143,176145,176147],{"class":76,"line":77},[74,176142,34673],{"class":80},[74,176144,62077],{"class":84},[74,176146,35664],{"class":80},[74,176148,176149],{"class":84}," rd\n",[74,176151,176152],{"class":76,"line":94},[74,176153,2363],{"emptyLinePlaceholder":2362},[74,176155,176156,176158,176161,176163,176165,176167],{"class":76,"line":1141},[74,176157,34696],{"class":134},[74,176159,176160],{"class":84},"(rd.randint(",[74,176162,303],{"class":134},[74,176164,16714],{"class":84},[74,176166,532],{"class":134},[74,176168,34778],{"class":84},[64,176170,176172],{"className":34659,"code":176171,"language":34661,"meta":69,"style":69},"from random import randint as rint\n\nprint(rint(1, 10))\n",[71,176173,176174,176190,176194],{"__ignoreMap":69},[74,176175,176176,176178,176180,176182,176185,176187],{"class":76,"line":77},[74,176177,35018],{"class":80},[74,176179,62077],{"class":84},[74,176181,34673],{"class":80},[74,176183,176184],{"class":84}," randint ",[74,176186,35664],{"class":80},[74,176188,176189],{"class":84}," rint\n",[74,176191,176192],{"class":76,"line":94},[74,176193,2363],{"emptyLinePlaceholder":2362},[74,176195,176196,176198,176201,176203,176205,176207],{"class":76,"line":1141},[74,176197,34696],{"class":134},[74,176199,176200],{"class":84},"(rint(",[74,176202,303],{"class":134},[74,176204,16714],{"class":84},[74,176206,532],{"class":134},[74,176208,34778],{"class":84},[44,176210,176212],{"id":176211},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[64,176214,176216],{"className":34659,"code":176215,"language":34661,"meta":69,"style":69},"from random import *\n",[71,176217,176218],{"__ignoreMap":69},[74,176219,176220,176222,176224,176226],{"class":76,"line":77},[74,176221,35018],{"class":80},[74,176223,62077],{"class":84},[74,176225,34673],{"class":80},[74,176227,176228],{"class":80}," *\n",[19,176230,176231],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,176233,176235],{"id":176234},"_912-常用内置模块","9.12 常用内置模块",[44,176237,176239],{"id":176238},"_9121-random","9.12.1 random",[64,176241,176243],{"className":34659,"code":176242,"language":34661,"meta":69,"style":69},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[71,176244,176245,176251,176255,176269,176288],{"__ignoreMap":69},[74,176246,176247,176249],{"class":76,"line":77},[74,176248,34673],{"class":80},[74,176250,49609],{"class":84},[74,176252,176253],{"class":76,"line":94},[74,176254,2363],{"emptyLinePlaceholder":2362},[74,176256,176257,176259,176261,176263,176265,176267],{"class":76,"line":1141},[74,176258,34696],{"class":134},[74,176260,176082],{"class":84},[74,176262,303],{"class":134},[74,176264,16714],{"class":84},[74,176266,532],{"class":134},[74,176268,34778],{"class":84},[74,176270,176271,176273,176276,176278,176280,176282,176284,176286],{"class":76,"line":1156},[74,176272,34696],{"class":134},[74,176274,176275],{"class":84},"(random.choice([",[74,176277,154169],{"class":190},[74,176279,16714],{"class":84},[74,176281,155217],{"class":190},[74,176283,16714],{"class":84},[74,176285,164012],{"class":190},[74,176287,37424],{"class":84},[74,176289,176290,176292,176295,176297,176299,176301,176303,176305,176307,176309,176311,176313,176315,176317],{"class":76,"line":1162},[74,176291,34696],{"class":134},[74,176293,176294],{"class":84},"(random.sample([",[74,176296,303],{"class":134},[74,176298,16714],{"class":84},[74,176300,163],{"class":134},[74,176302,16714],{"class":84},[74,176304,157],{"class":134},[74,176306,16714],{"class":84},[74,176308,379],{"class":134},[74,176310,16714],{"class":84},[74,176312,405],{"class":134},[74,176314,116483],{"class":84},[74,176316,163],{"class":134},[74,176318,34778],{"class":84},[44,176320,176322],{"id":176321},"_9122-time","9.12.2 time",[64,176324,176326],{"className":34659,"code":176325,"language":34661,"meta":69,"style":69},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[71,176327,176328,176334,176338,176345,176353],{"__ignoreMap":69},[74,176329,176330,176332],{"class":76,"line":77},[74,176331,34673],{"class":80},[74,176333,36110],{"class":84},[74,176335,176336],{"class":76,"line":94},[74,176337,2363],{"emptyLinePlaceholder":2362},[74,176339,176340,176342],{"class":76,"line":1141},[74,176341,34696],{"class":134},[74,176343,176344],{"class":84},"(time.time())\n",[74,176346,176347,176349,176351],{"class":76,"line":1156},[74,176348,99352],{"class":84},[74,176350,303],{"class":134},[74,176352,91],{"class":84},[74,176354,176355,176357,176359,176362],{"class":76,"line":1162},[74,176356,34696],{"class":134},[74,176358,85],{"class":84},[74,176360,176361],{"class":190},"\"1秒后执行\"",[74,176363,91],{"class":84},[44,176365,176367],{"id":176366},"_9123-datetime","9.12.3 datetime",[64,176369,176371],{"className":34659,"code":176370,"language":34661,"meta":69,"style":69},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[71,176372,176373,176385,176389,176399,176406],{"__ignoreMap":69},[74,176374,176375,176377,176380,176382],{"class":76,"line":77},[74,176376,35018],{"class":80},[74,176378,176379],{"class":84}," datetime ",[74,176381,34673],{"class":80},[74,176383,176384],{"class":84}," datetime\n",[74,176386,176387],{"class":76,"line":94},[74,176388,2363],{"emptyLinePlaceholder":2362},[74,176390,176391,176394,176396],{"class":76,"line":1141},[74,176392,176393],{"class":84},"now ",[74,176395,131],{"class":80},[74,176397,176398],{"class":84}," datetime.now()\n",[74,176400,176401,176403],{"class":76,"line":1156},[74,176402,34696],{"class":134},[74,176404,176405],{"class":84},"(now)\n",[74,176407,176408,176410,176413,176416,176418,176421],{"class":76,"line":1162},[74,176409,34696],{"class":134},[74,176411,176412],{"class":84},"(now.strftime(",[74,176414,176415],{"class":190},"\"%Y-%m-",[74,176417,160972],{"class":134},[74,176419,176420],{"class":190}," %H:%M:%S\"",[74,176422,34778],{"class":84},[44,176424,176426],{"id":176425},"_9124-os","9.12.4 os",[64,176428,176430],{"className":34659,"code":176429,"language":34661,"meta":69,"style":69},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[71,176431,176432,176438,176442,176449],{"__ignoreMap":69},[74,176433,176434,176436],{"class":76,"line":77},[74,176435,34673],{"class":80},[74,176437,49586],{"class":84},[74,176439,176440],{"class":76,"line":94},[74,176441,2363],{"emptyLinePlaceholder":2362},[74,176443,176444,176446],{"class":76,"line":1141},[74,176445,34696],{"class":134},[74,176447,176448],{"class":84},"(os.getcwd())\n",[74,176450,176451,176453,176456,176459],{"class":76,"line":1156},[74,176452,34696],{"class":134},[74,176454,176455],{"class":84},"(os.listdir(",[74,176457,176458],{"class":190},"\".\"",[74,176460,34778],{"class":84},[44,176462,176464],{"id":176463},"_9125-sys","9.12.5 sys",[64,176466,176468],{"className":34659,"code":176467,"language":34661,"meta":69,"style":69},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[71,176469,176470,176477,176481,176488],{"__ignoreMap":69},[74,176471,176472,176474],{"class":76,"line":77},[74,176473,34673],{"class":80},[74,176475,176476],{"class":84}," sys\n",[74,176478,176479],{"class":76,"line":94},[74,176480,2363],{"emptyLinePlaceholder":2362},[74,176482,176483,176485],{"class":76,"line":1141},[74,176484,34696],{"class":134},[74,176486,176487],{"class":84},"(sys.version)\n",[74,176489,176490,176492],{"class":76,"line":1156},[74,176491,34696],{"class":134},[74,176493,176494],{"class":84},"(sys.path)\n",[14,176496,176498,176499,176501,176502,337],{"id":176497},"_913-if-name-main","9.13 if ",[235,176500,84091],{}," == \"",[235,176503,106339],{},[19,176505,176506,176507,176510],{},"模块被直接运行和被导入时，",[71,176508,176509],{},"__name__"," 的值不同。",[19,176512,176513,176514,28899],{},"创建 ",[71,176515,176516],{},"my_module.py",[64,176518,176520],{"className":34659,"code":176519,"language":34661,"meta":69,"style":69},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[71,176521,176522,176530,176540,176544,176548,176560],{"__ignoreMap":69},[74,176523,176524,176526,176528],{"class":76,"line":77},[74,176525,36228],{"class":80},[74,176527,9488],{"class":1925},[74,176529,155374],{"class":84},[74,176531,176532,176534,176536,176538],{"class":76,"line":94},[74,176533,4053],{"class":80},[74,176535,15148],{"class":84},[74,176537,567],{"class":80},[74,176539,155385],{"class":84},[74,176541,176542],{"class":76,"line":1141},[74,176543,2363],{"emptyLinePlaceholder":2362},[74,176545,176546],{"class":76,"line":1156},[74,176547,2363],{"emptyLinePlaceholder":2362},[74,176549,176550,176552,176554,176556,176558],{"class":76,"line":1162},[74,176551,1493],{"class":80},[74,176553,35501],{"class":134},[74,176555,105840],{"class":80},[74,176557,105843],{"class":190},[74,176559,3702],{"class":84},[74,176561,176562,176564,176566,176568,176570,176572],{"class":76,"line":1176},[74,176563,35580],{"class":134},[74,176565,170881],{"class":84},[74,176567,303],{"class":134},[74,176569,16714],{"class":84},[74,176571,163],{"class":134},[74,176573,34778],{"class":84},[19,176575,176576],{},"作用：",[27,176578,176579,176582],{},[30,176580,176581],{},"直接运行该文件时，执行测试代码。",[30,176583,176584],{},"被其他文件导入时，不执行测试代码。",[19,176586,176587],{},"这是写模块时很常用的习惯。",[14,176589,176591],{"id":176590},"_914-包","9.14 包",[19,176593,176594,176595,176598],{},"包是包含 ",[71,176596,176597],{},"__init__.py"," 的目录，用于组织多个模块。",[19,176600,176601],{},"目录结构：",[64,176603,176606],{"className":176604,"code":176605,"language":9466,"meta":69},[9464],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[71,176607,176605],{"__ignoreMap":69},[19,176609,176610],{},"导入：",[64,176612,176614],{"className":34659,"code":176613,"language":34661,"meta":69,"style":69},"from utils.file_utils import read_file\n",[71,176615,176616],{"__ignoreMap":69},[74,176617,176618,176620,176623,176625],{"class":76,"line":77},[74,176619,35018],{"class":80},[74,176621,176622],{"class":84}," utils.file_utils ",[74,176624,34673],{"class":80},[74,176626,176627],{"class":84}," read_file\n",[19,176629,176630,176632],{},[71,176631,176597],{}," 可以为空，也可以写包初始化逻辑。",[14,176634,176636],{"id":176635},"_915-第三方包","9.15 第三方包",[19,176638,176639,176640,176642],{},"第三方包通过 ",[71,176641,28111],{}," 安装。",[64,176644,176646],{"className":28102,"code":176645,"language":28104,"meta":69,"style":69},"pip install requests\n",[71,176647,176648],{"__ignoreMap":69},[74,176649,176650,176652,176654],{"class":76,"line":77},[74,176651,28111],{"class":1925},[74,176653,28114],{"class":190},[74,176655,150379],{"class":190},[19,176657,176658],{},"使用：",[64,176660,176662],{"className":34659,"code":176661,"language":34661,"meta":69,"style":69},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[71,176663,176664,176670,176674,176689],{"__ignoreMap":69},[74,176665,176666,176668],{"class":76,"line":77},[74,176667,34673],{"class":80},[74,176669,150379],{"class":84},[74,176671,176672],{"class":76,"line":94},[74,176673,2363],{"emptyLinePlaceholder":2362},[74,176675,176676,176679,176681,176684,176687],{"class":76,"line":1141},[74,176677,176678],{"class":84},"response ",[74,176680,131],{"class":80},[74,176682,176683],{"class":84}," requests.get(",[74,176685,176686],{"class":190},"\"https:\u002F\u002Fwww.example.com\"",[74,176688,91],{"class":84},[74,176690,176691,176693],{"class":76,"line":1156},[74,176692,34696],{"class":134},[74,176694,176695],{"class":84},"(response.status_code)\n",[19,176697,176698],{},"查看已安装包：",[64,176700,176702],{"className":28102,"code":176701,"language":28104,"meta":69,"style":69},"pip list\n",[71,176703,176704],{"__ignoreMap":69},[74,176705,176706,176708],{"class":76,"line":77},[74,176707,28111],{"class":1925},[74,176709,123236],{"class":190},[19,176711,176712],{},"导出项目依赖：",[64,176714,176715],{"className":28102,"code":150574,"language":28104,"meta":69,"style":69},[71,176716,176717],{"__ignoreMap":69},[74,176718,176719,176721,176723,176725],{"class":76,"line":77},[74,176720,28111],{"class":1925},[74,176722,150583],{"class":190},[74,176724,30503],{"class":80},[74,176726,150588],{"class":190},[19,176728,176729],{},"安装项目依赖：",[64,176731,176732],{"className":28102,"code":150594,"language":28104,"meta":69,"style":69},[71,176733,176734],{"__ignoreMap":69},[74,176735,176736,176738,176740,176742],{"class":76,"line":77},[74,176737,28111],{"class":1925},[74,176739,28114],{"class":190},[74,176741,123920],{"class":134},[74,176743,150588],{"class":190},[14,176745,176747],{"id":176746},"_916-模块搜索路径","9.16 模块搜索路径",[19,176749,176750,176751,176754],{},"Python 导入模块时会在 ",[71,176752,176753],{},"sys.path"," 中查找。",[64,176756,176758],{"className":34659,"code":176757,"language":34661,"meta":69,"style":69},"import sys\n\nfor path in sys.path:\n    print(path)\n",[71,176759,176760,176766,176770,176782],{"__ignoreMap":69},[74,176761,176762,176764],{"class":76,"line":77},[74,176763,34673],{"class":80},[74,176765,176476],{"class":84},[74,176767,176768],{"class":76,"line":94},[74,176769,2363],{"emptyLinePlaceholder":2362},[74,176771,176772,176774,176777,176779],{"class":76,"line":1141},[74,176773,2988],{"class":80},[74,176775,176776],{"class":84}," path ",[74,176778,30324],{"class":80},[74,176780,176781],{"class":84}," sys.path:\n",[74,176783,176784,176786],{"class":76,"line":1156},[74,176785,35580],{"class":134},[74,176787,173510],{"class":84},[19,176789,176790],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,176792,161904],{},[64,176794,176797],{"className":176795,"code":176796,"language":9466,"meta":69},[9464],"random.py\njson.py\ntime.py\n",[71,176798,176796],{"__ignoreMap":69},[19,176800,176801],{},"这些文件名可能导致导入异常。",[14,176803,176805],{"id":176804},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,176807,176601],{},[64,176809,176812],{"className":176810,"code":176811,"language":9466,"meta":69},[9464],"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",[71,176813,176811],{"__ignoreMap":69},[19,176815,176816,28899],{},[71,176817,176818],{},"utils\u002Ffile_utils.py",[64,176820,176822],{"className":34659,"code":176821,"language":34661,"meta":69,"style":69},"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",[71,176823,176824,176830,176840,176844,176848,176858,176868,176876,176882,176886,176913,176923,176927,176931,176941,176967],{"__ignoreMap":69},[74,176825,176826,176828],{"class":76,"line":77},[74,176827,34673],{"class":80},[74,176829,151372],{"class":84},[74,176831,176832,176834,176836,176838],{"class":76,"line":94},[74,176833,35018],{"class":80},[74,176835,112592],{"class":84},[74,176837,34673],{"class":80},[74,176839,112597],{"class":84},[74,176841,176842],{"class":76,"line":1141},[74,176843,2363],{"emptyLinePlaceholder":2362},[74,176845,176846],{"class":76,"line":1156},[74,176847,2363],{"emptyLinePlaceholder":2362},[74,176849,176850,176852,176855],{"class":76,"line":1162},[74,176851,36228],{"class":80},[74,176853,176854],{"class":1925}," read_json",[74,176856,176857],{"class":84},"(path):\n",[74,176859,176860,176863,176865],{"class":76,"line":1176},[74,176861,176862],{"class":84},"    path ",[74,176864,131],{"class":80},[74,176866,176867],{"class":84}," Path(path)\n",[74,176869,176870,176872,176874],{"class":76,"line":1182},[74,176871,3064],{"class":80},[74,176873,43211],{"class":80},[74,176875,173591],{"class":84},[74,176877,176878,176880],{"class":76,"line":1273},[74,176879,19031],{"class":80},[74,176881,56119],{"class":84},[74,176883,176884],{"class":76,"line":1279},[74,176885,2363],{"emptyLinePlaceholder":2362},[74,176887,176888,176890,176892,176895,176897,176899,176901,176903,176905,176907,176909,176911],{"class":76,"line":1291},[74,176889,38459],{"class":80},[74,176891,151072],{"class":134},[74,176893,176894],{"class":84},"(path, ",[74,176896,151082],{"class":190},[74,176898,16714],{"class":84},[74,176900,151087],{"class":9495},[74,176902,131],{"class":80},[74,176904,151092],{"class":190},[74,176906,17993],{"class":84},[74,176908,35664],{"class":80},[74,176910,152434],{"class":9495},[74,176912,3702],{"class":84},[74,176914,176915,176917,176919,176921],{"class":76,"line":1574},[74,176916,19031],{"class":80},[74,176918,152445],{"class":84},[74,176920,49635],{"class":9495},[74,176922,91],{"class":84},[74,176924,176925],{"class":76,"line":1579},[74,176926,2363],{"emptyLinePlaceholder":2362},[74,176928,176929],{"class":76,"line":1585},[74,176930,2363],{"emptyLinePlaceholder":2362},[74,176932,176933,176935,176938],{"class":76,"line":1590},[74,176934,36228],{"class":80},[74,176936,176937],{"class":1925}," write_json",[74,176939,176940],{"class":84},"(path, data):\n",[74,176942,176943,176945,176947,176949,176951,176953,176955,176957,176959,176961,176963,176965],{"class":76,"line":1604},[74,176944,38459],{"class":80},[74,176946,151072],{"class":134},[74,176948,176894],{"class":84},[74,176950,156257],{"class":190},[74,176952,16714],{"class":84},[74,176954,151087],{"class":9495},[74,176956,131],{"class":80},[74,176958,151092],{"class":190},[74,176960,17993],{"class":84},[74,176962,35664],{"class":80},[74,176964,152434],{"class":9495},[74,176966,3702],{"class":84},[74,176968,176969,176972,176974,176976,176978,176980,176982,176984,176986,176988,176990],{"class":76,"line":1609},[74,176970,176971],{"class":84},"        json.dump(data, ",[74,176973,49635],{"class":9495},[74,176975,16714],{"class":84},[74,176977,151418],{"class":9495},[74,176979,131],{"class":80},[74,176981,38268],{"class":134},[74,176983,16714],{"class":84},[74,176985,156293],{"class":9495},[74,176987,131],{"class":80},[74,176989,163],{"class":134},[74,176991,91],{"class":84},[19,176993,176994,28899],{},[71,176995,158888],{},[64,176997,176999],{"className":34659,"code":176998,"language":34661,"meta":69,"style":69},"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",[71,177000,177001,177012,177016,177029,177049],{"__ignoreMap":69},[74,177002,177003,177005,177007,177009],{"class":76,"line":77},[74,177004,35018],{"class":80},[74,177006,176622],{"class":84},[74,177008,34673],{"class":80},[74,177010,177011],{"class":84}," read_json, write_json\n",[74,177013,177014],{"class":76,"line":94},[74,177015,2363],{"emptyLinePlaceholder":2362},[74,177017,177018,177020,177022,177025,177027],{"class":76,"line":1141},[74,177019,163997],{"class":84},[74,177021,131],{"class":80},[74,177023,177024],{"class":84}," read_json(",[74,177026,156112],{"class":190},[74,177028,91],{"class":84},[74,177030,177031,177033,177035,177037,177039,177041,177043,177045,177047],{"class":76,"line":1156},[74,177032,174815],{"class":84},[74,177034,66960],{"class":190},[74,177036,55718],{"class":84},[74,177038,154169],{"class":190},[74,177040,16714],{"class":84},[74,177042,155753],{"class":190},[74,177044,55718],{"class":84},[74,177046,1075],{"class":134},[74,177048,169433],{"class":84},[74,177050,177051,177054,177056],{"class":76,"line":1162},[74,177052,177053],{"class":84},"write_json(",[74,177055,156112],{"class":190},[74,177057,177058],{"class":84},", students)\n",[14,177060,177062],{"id":177061},"_918-易错点","9.18 易错点",[27,177064,177065,177068,177073,177078,177081,177084],{},[30,177066,177067],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[30,177069,177070,177071,32666],{},"能指定异常类型就不要裸写 ",[71,177072,175175],{},[30,177074,177075,177077],{},[71,177076,175550],{}," 无论是否出错都会执行。",[30,177079,177080],{},"模块文件名不要和标准库重名。",[30,177082,177083],{},"导入自己写的模块时，要注意运行目录。",[30,177085,177086],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,177088,177090],{"id":177089},"_919-本章练习","9.19 本章练习",[27,177092,177093,177096,177099,177105,177112],{},[30,177094,177095],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[30,177097,177098],{},"写函数读取文件，如果文件不存在则返回空字符串。",[30,177100,176513,177101,177104],{},[71,177102,177103],{},"math_utils.py","，实现加减乘除函数并导入使用。",[30,177106,177107,177108,177111],{},"创建一个 ",[71,177109,177110],{},"utils"," 包，把 JSON 读写函数放进去。",[30,177113,177114],{},"写一个程序，捕获除零异常和输入格式异常。",[5090,177116,177117],{},"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":69,"searchDepth":94,"depth":94,"links":177119},[177120,177121,177122,177123,177124,177125,177126,177127,177128,177129,177130,177136,177143,177145,177146,177147,177148,177149,177150],{"id":174972,"depth":94,"text":174973},{"id":175100,"depth":94,"text":175101},{"id":175149,"depth":94,"text":175150},{"id":175298,"depth":94,"text":175299},{"id":175470,"depth":94,"text":175471},{"id":175539,"depth":94,"text":175540},{"id":175650,"depth":94,"text":175651},{"id":175776,"depth":94,"text":175777},{"id":175901,"depth":94,"text":175902},{"id":175956,"depth":94,"text":175957},{"id":176055,"depth":94,"text":176056,"children":177131},[177132,177133,177134,177135],{"id":176059,"depth":1141,"text":176060},{"id":176093,"depth":1141,"text":176094},{"id":176132,"depth":1141,"text":176133},{"id":176211,"depth":1141,"text":176212},{"id":176234,"depth":94,"text":176235,"children":177137},[177138,177139,177140,177141,177142],{"id":176238,"depth":1141,"text":176239},{"id":176321,"depth":1141,"text":176322},{"id":176366,"depth":1141,"text":176367},{"id":176425,"depth":1141,"text":176426},{"id":176463,"depth":1141,"text":176464},{"id":176497,"depth":94,"text":177144},"9.13 if name == \"main\"",{"id":176590,"depth":94,"text":176591},{"id":176635,"depth":94,"text":176636},{"id":176746,"depth":94,"text":176747},{"id":176804,"depth":94,"text":176805},{"id":177061,"depth":94,"text":177062},{"id":177089,"depth":94,"text":177090},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":174964,"description":27656},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":177157,"title":177158,"body":177159,"description":177322,"extension":5121,"meta":177323,"navigation":2362,"path":177324,"seo":177325,"stem":177326,"__hash__":177327},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":177160,"toc":177317},[177161,177164,177167,177170,177181,177183,177257,177260,177263,177266,177269,177272,177275,177278,177281,177284,177287],[10,177162,177158],{"id":177163},"python教程",[19,177165,177166],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,177168,177169],{},"建议学习环境：",[27,177171,177172,177175,177178],{},[30,177173,177174],{},"Python 版本：Python 3.10 及以上。",[30,177176,177177],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[30,177179,177180],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,177182,121359],{"id":121359},[27,177184,177185,177191,177197,177203,177209,177215,177221,177227,177233,177239,177245,177251],{},[30,177186,177187],{},[324,177188,177190],{"href":177189},".\u002Fch1-Python","Python环境与第一个程序",[30,177192,177193],{},[324,177194,177196],{"href":177195},".\u002Fch2","基础语法、变量与字符串",[30,177198,177199],{},[324,177200,177202],{"href":177201},".\u002Fch3","判断语句",[30,177204,177205],{},[324,177206,177208],{"href":177207},".\u002Fch4","循环语句",[30,177210,177211],{},[324,177212,177214],{"href":177213},".\u002Fch5","函数基础",[30,177216,177217],{},[324,177218,177220],{"href":177219},".\u002Fch6","数据容器",[30,177222,177223],{},[324,177224,177226],{"href":177225},".\u002Fch7","函数进阶",[30,177228,177229],{},[324,177230,177232],{"href":177231},".\u002Fch8","文件操作",[30,177234,177235],{},[324,177236,177238],{"href":177237},".\u002Fch9","异常、模块与包",[30,177240,177241],{},[324,177242,177244],{"href":177243},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[30,177246,177247],{},[324,177248,177250],{"href":177249},".\u002Fch11","面向对象基础",[30,177252,177253],{},[324,177254,177256],{"href":177255},".\u002Fch12","综合案例与复习路线",[14,177258,177259],{"id":177259},"学习路线",[19,177261,177262],{},"第一阶段：能运行程序。",[19,177264,177265],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,177267,177268],{},"第二阶段：能组织数据。",[19,177270,177271],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,177273,177274],{},"第三阶段：能封装逻辑。",[19,177276,177277],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,177279,177280],{},"第四阶段：能做小项目。",[19,177282,177283],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,177285,177286],{"id":177286},"参考资料",[27,177288,177289,177296,177303,177310],{},[30,177290,177291,177292],{},"黑马程序员 Python 入门教程推荐：",[324,177293,177294],{"href":177294,"rel":177295},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[28145],[30,177297,177298,177299],{},"Python 官方中文教程：",[324,177300,177301],{"href":177301,"rel":177302},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[28145],[30,177304,177305,177306],{},"Python 标准库文档：",[324,177307,177308],{"href":177308,"rel":177309},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[28145],[30,177311,177312,177313],{},"pyecharts 文档：",[324,177314,177315],{"href":177315,"rel":177316},"https:\u002F\u002Fpyecharts.org\u002F",[28145],{"title":69,"searchDepth":94,"depth":94,"links":177318},[177319,177320,177321],{"id":121359,"depth":94,"text":121359},{"id":177259,"depth":94,"text":177259},{"id":177286,"depth":94,"text":177286},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":27658},"\u002Fwiki\u002F2024-10-10-python",{"title":177158,"description":177322},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379516]