[{"data":1,"prerenderedAt":173024},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-11-03-cnn-ji-chu\u002Fch3-yolo-mo-xing-xue-xi":3,"wiki-doc-nav":25},{"id":4,"title":5,"body":6,"description":17,"extension":18,"meta":19,"navigation":20,"path":21,"seo":22,"stem":23,"__hash__":24},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":8,"toc":13},"minimark",[9],[10,11,5],"h1",{"id":12},"_3yolo模型学习",{"title":14,"searchDepth":15,"depth":15,"links":16},"",2,[],null,"md",{},true,"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":5,"description":17},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",[26,5144,6252,7672,10661,12012,13501,14590,23353,23365,23964,23990,24114,24355,24420,24438,24451,24498,24622,24791,24990,25170,25375,25511,25606,25643,25656,25966,26707,27415,27436,28456,30087,30238,30251,30263,30564,50376,50385,50402,50435,53307,76655,92800,92821,92934,93055,93825,94488,94849,94887,94993,95093,95136,95162,95223,96877,96978,97003,97494,97994,99074,99357,100099,100601,100613,102629,104293,105796,107494,109411,111330,113352,116822,117254,117717,118466,121410,121758,121780,122136,125443,125455,125858,125881,126028,126195,126400,126701,127258,127915,129846,131444,132093,133587,135018,136253,137947,139699,142109,142225,143160,143371,144256,145491,145719,145732,146887,149299,151667,154988,157465,159109,160886,162899,165951,168131,170658,172852],{"id":27,"title":28,"body":29,"description":14,"extension":18,"meta":5139,"navigation":20,"path":5140,"seo":5141,"stem":5142,"__hash__":5143},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":30,"toc":5111},[31,34,39,43,47,60,64,69,72,75,78,81,84,119,123,126,129,132,135,188,192,211,213,227,230,238,241,1104,1111,1128,1132,1223,1227,1233,1322,1326,1364,1368,1432,1436,1440,1447,1458,1462,1467,1471,1476,1480,1485,1489,1493,1498,1768,1773,1911,1916,2173,2176,2184,2188,2193,2296,2299,2605,2614,2715,2718,2721,2724,2727,2987,2992,3132,3135,3314,3317,3445,3448,3600,3604,3609,3612,3623,3631,3634,3741,3745,3749,3754,3804,3809,3814,3838,3843,3896,3899,3904,4081,4086,4371,4376,4773,4777,4782,4839,4844,4852,4855,4995,4998,5107],[10,32,28],{"id":33},"_1基础入门",[35,36,38],"h2",{"id":37},"_11注释","1.1注释",[40,41,42],"p",{},"\u002F\u002F或者\u002F* *\u002F",[35,44,46],{"id":45},"_12命名","1.2命名",[48,49,50,54,57],"ol",{},[51,52,53],"li",{},"字母数字下划线",[51,55,56],{},"开头必须是字母或_",[51,58,59],{},"不能使用关键词",[35,61,63],{"id":62},"_13数据类型","1.3数据类型",[65,66,68],"h3",{"id":67},"_131整形","1.3.1整形",[40,70,71],{},"short 短整形 2",[40,73,74],{},"int 整形 4",[40,76,77],{},"long 长整形 win4 linux32位4 linux64位8",[40,79,80],{},"long long 长长整形 8",[40,82,83],{},"利用sizeof可以求数据类型占用的内存空间大小",[85,86,90],"pre",{"className":87,"code":88,"language":89,"meta":14,"style":14},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[91,92,93,112],"code",{"__ignoreMap":14},[94,95,98,102,106,109],"span",{"class":96,"line":97},"line",1,[94,99,101],{"class":100},"szBVR","sizeof",[94,103,105],{"class":104},"sVt8B","(",[94,107,108],{"class":100},"int",[94,110,111],{"class":104},")\n",[94,113,114,116],{"class":96,"line":15},[94,115,101],{"class":100},[94,117,118],{"class":104},"(num)\n",[65,120,122],{"id":121},"_132浮点型","1.3.2浮点型",[40,124,125],{},"float 单精度 4节 7位有效数字",[40,127,128],{},"double 双精度 8节 15-16有效数字",[40,130,131],{},"默认情况下，输出一个小数，会显示6位有效数字",[40,133,134],{},"注意点：",[85,136,138],{"className":87,"code":137,"language":89,"meta":14,"style":14},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[91,139,140,165],{"__ignoreMap":14},[94,141,142,145,148,151,155,158,161],{"class":96,"line":97},[94,143,144],{"class":100},"float",[94,146,147],{"class":104}," f1",[94,149,150],{"class":100},"=",[94,152,154],{"class":153},"sj4cs","3.14",[94,156,157],{"class":100},"f",[94,159,160],{"class":104},";",[94,162,164],{"class":163},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[94,166,167,169,172,174,177,180,183,185],{"class":96,"line":15},[94,168,144],{"class":100},[94,170,171],{"class":104}," f2",[94,173,150],{"class":100},[94,175,176],{"class":153},"3",[94,178,179],{"class":100},"e",[94,181,182],{"class":153},"2",[94,184,160],{"class":104},[94,186,187],{"class":163}," \u002F\u002F科学记数法\n",[65,189,191],{"id":190},"_133字符型","1.3.3字符型",[85,193,195],{"className":87,"code":194,"language":89,"meta":14,"style":14},"char ch='a'\n",[91,196,197],{"__ignoreMap":14},[94,198,199,202,205,207],{"class":96,"line":97},[94,200,201],{"class":100},"char",[94,203,204],{"class":104}," ch",[94,206,150],{"class":100},[94,208,210],{"class":209},"sZZnC","'a'\n",[40,212,134],{},[48,214,215,218,221,224],{},[51,216,217],{},"在显示字符型变量时，只能单引号，双引号x",[51,219,220],{},"单引号内只能一个字符，不能字符串",[51,222,223],{},"c和c++字符型变量只占用一个字符",[51,225,226],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[40,228,229],{},"ASCII码大致由以下两部分组成：",[48,231,232,235],{},[51,233,234],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[51,236,237],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[40,239,240],{},"ASCII码表格：",[242,243,244,288],"table",{},[245,246,247],"thead",{},[248,249,250,258,263,267,272,276,280,284],"tr",{},[251,252,253,257],"th",{},[254,255,256],"strong",{},"ASCII","值",[251,259,260],{},[254,261,262],{},"控制字符",[251,264,265,257],{},[254,266,256],{},[251,268,269],{},[254,270,271],{},"字符",[251,273,274,257],{},[254,275,256],{},[251,277,278],{},[254,279,271],{},[251,281,282,257],{},[254,283,256],{},[251,285,286],{},[254,287,271],{},[289,290,291,318,344,369,394,420,445,470,496,521,547,573,599,624,650,676,702,726,751,776,801,826,851,876,901,926,951,977,1002,1027,1052,1078],"tbody",{},[248,292,293,297,300,303,306,309,312,315],{},[294,295,296],"td",{},"0",[294,298,299],{},"NUT",[294,301,302],{},"32",[294,304,305],{},"(space)",[294,307,308],{},"64",[294,310,311],{},"@",[294,313,314],{},"96",[294,316,317],{},"、",[248,319,320,323,326,329,332,335,338,341],{},[294,321,322],{},"1",[294,324,325],{},"SOH",[294,327,328],{},"33",[294,330,331],{},"!",[294,333,334],{},"65",[294,336,337],{},"A",[294,339,340],{},"97",[294,342,343],{},"a",[248,345,346,348,351,354,357,360,363,366],{},[294,347,182],{},[294,349,350],{},"STX",[294,352,353],{},"34",[294,355,356],{},"\"",[294,358,359],{},"66",[294,361,362],{},"B",[294,364,365],{},"98",[294,367,368],{},"b",[248,370,371,373,376,379,382,385,388,391],{},[294,372,176],{},[294,374,375],{},"ETX",[294,377,378],{},"35",[294,380,381],{},"#",[294,383,384],{},"67",[294,386,387],{},"C",[294,389,390],{},"99",[294,392,393],{},"c",[248,395,396,399,402,405,408,411,414,417],{},[294,397,398],{},"4",[294,400,401],{},"EOT",[294,403,404],{},"36",[294,406,407],{},"$",[294,409,410],{},"68",[294,412,413],{},"D",[294,415,416],{},"100",[294,418,419],{},"d",[248,421,422,425,428,431,434,437,440,443],{},[294,423,424],{},"5",[294,426,427],{},"ENQ",[294,429,430],{},"37",[294,432,433],{},"%",[294,435,436],{},"69",[294,438,439],{},"E",[294,441,442],{},"101",[294,444,179],{},[248,446,447,450,453,456,459,462,465,468],{},[294,448,449],{},"6",[294,451,452],{},"ACK",[294,454,455],{},"38",[294,457,458],{},"&",[294,460,461],{},"70",[294,463,464],{},"F",[294,466,467],{},"102",[294,469,157],{},[248,471,472,475,478,481,484,487,490,493],{},[294,473,474],{},"7",[294,476,477],{},"BEL",[294,479,480],{},"39",[294,482,483],{},",",[294,485,486],{},"71",[294,488,489],{},"G",[294,491,492],{},"103",[294,494,495],{},"g",[248,497,498,501,504,507,509,512,515,518],{},[294,499,500],{},"8",[294,502,503],{},"BS",[294,505,506],{},"40",[294,508,105],{},[294,510,511],{},"72",[294,513,514],{},"H",[294,516,517],{},"104",[294,519,520],{},"h",[248,522,523,526,529,532,535,538,541,544],{},[294,524,525],{},"9",[294,527,528],{},"HT",[294,530,531],{},"41",[294,533,534],{},")",[294,536,537],{},"73",[294,539,540],{},"I",[294,542,543],{},"105",[294,545,546],{},"i",[248,548,549,552,555,558,561,564,567,570],{},[294,550,551],{},"10",[294,553,554],{},"LF",[294,556,557],{},"42",[294,559,560],{},"*",[294,562,563],{},"74",[294,565,566],{},"J",[294,568,569],{},"106",[294,571,572],{},"j",[248,574,575,578,581,584,587,590,593,596],{},[294,576,577],{},"11",[294,579,580],{},"VT",[294,582,583],{},"43",[294,585,586],{},"+",[294,588,589],{},"75",[294,591,592],{},"K",[294,594,595],{},"107",[294,597,598],{},"k",[248,600,601,604,607,610,612,615,618,621],{},[294,602,603],{},"12",[294,605,606],{},"FF",[294,608,609],{},"44",[294,611,483],{},[294,613,614],{},"76",[294,616,617],{},"L",[294,619,620],{},"108",[294,622,623],{},"l",[248,625,626,629,632,635,638,641,644,647],{},[294,627,628],{},"13",[294,630,631],{},"CR",[294,633,634],{},"45",[294,636,637],{},"-",[294,639,640],{},"77",[294,642,643],{},"M",[294,645,646],{},"109",[294,648,649],{},"m",[248,651,652,655,658,661,664,667,670,673],{},[294,653,654],{},"14",[294,656,657],{},"SO",[294,659,660],{},"46",[294,662,663],{},".",[294,665,666],{},"78",[294,668,669],{},"N",[294,671,672],{},"110",[294,674,675],{},"n",[248,677,678,681,684,687,690,693,696,699],{},[294,679,680],{},"15",[294,682,683],{},"SI",[294,685,686],{},"47",[294,688,689],{},"\u002F",[294,691,692],{},"79",[294,694,695],{},"O",[294,697,698],{},"111",[294,700,701],{},"o",[248,703,704,707,710,713,715,718,721,724],{},[294,705,706],{},"16",[294,708,709],{},"DLE",[294,711,712],{},"48",[294,714,296],{},[294,716,717],{},"80",[294,719,720],{},"P",[294,722,723],{},"112",[294,725,40],{},[248,727,728,731,734,737,739,742,745,748],{},[294,729,730],{},"17",[294,732,733],{},"DCI",[294,735,736],{},"49",[294,738,322],{},[294,740,741],{},"81",[294,743,744],{},"Q",[294,746,747],{},"113",[294,749,750],{},"q",[248,752,753,756,759,762,764,767,770,773],{},[294,754,755],{},"18",[294,757,758],{},"DC2",[294,760,761],{},"50",[294,763,182],{},[294,765,766],{},"82",[294,768,769],{},"R",[294,771,772],{},"114",[294,774,775],{},"r",[248,777,778,781,784,787,789,792,795,798],{},[294,779,780],{},"19",[294,782,783],{},"DC3",[294,785,786],{},"51",[294,788,176],{},[294,790,791],{},"83",[294,793,794],{},"S",[294,796,797],{},"115",[294,799,800],{},"s",[248,802,803,806,809,812,814,817,820,823],{},[294,804,805],{},"20",[294,807,808],{},"DC4",[294,810,811],{},"52",[294,813,398],{},[294,815,816],{},"84",[294,818,819],{},"T",[294,821,822],{},"116",[294,824,825],{},"t",[248,827,828,831,834,837,839,842,845,848],{},[294,829,830],{},"21",[294,832,833],{},"NAK",[294,835,836],{},"53",[294,838,424],{},[294,840,841],{},"85",[294,843,844],{},"U",[294,846,847],{},"117",[294,849,850],{},"u",[248,852,853,856,859,862,864,867,870,873],{},[294,854,855],{},"22",[294,857,858],{},"SYN",[294,860,861],{},"54",[294,863,449],{},[294,865,866],{},"86",[294,868,869],{},"V",[294,871,872],{},"118",[294,874,875],{},"v",[248,877,878,881,884,887,889,892,895,898],{},[294,879,880],{},"23",[294,882,883],{},"TB",[294,885,886],{},"55",[294,888,474],{},[294,890,891],{},"87",[294,893,894],{},"W",[294,896,897],{},"119",[294,899,900],{},"w",[248,902,903,906,909,912,914,917,920,923],{},[294,904,905],{},"24",[294,907,908],{},"CAN",[294,910,911],{},"56",[294,913,500],{},[294,915,916],{},"88",[294,918,919],{},"X",[294,921,922],{},"120",[294,924,925],{},"x",[248,927,928,931,934,937,939,942,945,948],{},[294,929,930],{},"25",[294,932,933],{},"EM",[294,935,936],{},"57",[294,938,525],{},[294,940,941],{},"89",[294,943,944],{},"Y",[294,946,947],{},"121",[294,949,950],{},"y",[248,952,953,956,959,962,965,968,971,974],{},[294,954,955],{},"26",[294,957,958],{},"SUB",[294,960,961],{},"58",[294,963,964],{},":",[294,966,967],{},"90",[294,969,970],{},"Z",[294,972,973],{},"122",[294,975,976],{},"z",[248,978,979,982,985,988,990,993,996,999],{},[294,980,981],{},"27",[294,983,984],{},"ESC",[294,986,987],{},"59",[294,989,160],{},[294,991,992],{},"91",[294,994,995],{},"[",[294,997,998],{},"123",[294,1000,1001],{},"{",[248,1003,1004,1007,1010,1013,1016,1019,1021,1024],{},[294,1005,1006],{},"28",[294,1008,1009],{},"FS",[294,1011,1012],{},"60",[294,1014,1015],{},"\u003C",[294,1017,1018],{},"92",[294,1020,689],{},[294,1022,1023],{},"124",[294,1025,1026],{},"|",[248,1028,1029,1032,1035,1038,1040,1043,1046,1049],{},[294,1030,1031],{},"29",[294,1033,1034],{},"GS",[294,1036,1037],{},"61",[294,1039,150],{},[294,1041,1042],{},"93",[294,1044,1045],{},"]",[294,1047,1048],{},"125",[294,1050,1051],{},"}",[248,1053,1054,1057,1060,1063,1066,1069,1072,1075],{},[294,1055,1056],{},"30",[294,1058,1059],{},"RS",[294,1061,1062],{},"62",[294,1064,1065],{},">",[294,1067,1068],{},"94",[294,1070,1071],{},"^",[294,1073,1074],{},"126",[294,1076,1077],{},"`",[248,1079,1080,1083,1086,1089,1092,1095,1098,1101],{},[294,1081,1082],{},"31",[294,1084,1085],{},"US",[294,1087,1088],{},"63",[294,1090,1091],{},"?",[294,1093,1094],{},"95",[294,1096,1097],{},"_",[294,1099,1100],{},"127",[294,1102,1103],{},"DEL",[40,1105,1106,1107,1110],{},"ASCII 码大致由以下",[254,1108,1109],{},"两部分组","成：",[1112,1113,1114,1121],"ul",{},[51,1115,1116,1117,1120],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[254,1118,1119],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[51,1122,1123,1124,1127],{},"ASCII 打印字符：数字 ",[254,1125,1126],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[65,1129,1131],{"id":1130},"_134转义字符","1.3.4转义字符",[85,1133,1135],{"className":87,"code":1134,"language":89,"meta":14,"style":14},"\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",[91,1136,1137,1142,1158,1173,1179,1193,1199],{"__ignoreMap":14},[94,1138,1139],{"class":96,"line":97},[94,1140,1141],{"class":163},"\u002F\u002F换行符\n",[94,1143,1144,1147,1150,1153,1155],{"class":96,"line":15},[94,1145,1146],{"class":104},"cout ",[94,1148,1149],{"class":100},"\u003C\u003C",[94,1151,1152],{"class":209},"\"hello world\u002Fn\"",[94,1154,160],{"class":104},[94,1156,1157],{"class":163}," \u002F\u002F就等同于如下：\n",[94,1159,1161,1163,1165,1168,1170],{"class":96,"line":1160},3,[94,1162,1146],{"class":104},[94,1164,1149],{"class":100},[94,1166,1167],{"class":209},"\"hello world\"",[94,1169,1149],{"class":100},[94,1171,1172],{"class":104},"endl;\n",[94,1174,1176],{"class":96,"line":1175},4,[94,1177,1178],{"class":163},"\u002F\u002F反斜杠\n",[94,1180,1182,1184,1186,1189,1191],{"class":96,"line":1181},5,[94,1183,1146],{"class":104},[94,1185,1149],{"class":100},[94,1187,1188],{"class":209},"\"\u002F\u002F\"",[94,1190,1149],{"class":100},[94,1192,1172],{"class":104},[94,1194,1196],{"class":96,"line":1195},6,[94,1197,1198],{"class":163},"\u002F\u002F水平制表符\n",[94,1200,1202,1204,1206,1209,1212,1215,1217,1220],{"class":96,"line":1201},7,[94,1203,1146],{"class":104},[94,1205,1149],{"class":100},[94,1207,1208],{"class":209},"\"aaaa",[94,1210,1211],{"class":153},"\\t",[94,1213,1214],{"class":209},"helloworld\"",[94,1216,1149],{"class":100},[94,1218,1219],{"class":104},"endl;",[94,1221,1222],{"class":163}," \u002F\u002F输出窗口时有对齐效果\n",[65,1224,1226],{"id":1225},"_135字符串型","1.3.5字符串型",[40,1228,1229,1230,1232],{},"char 变量名",[94,1231],{},"=\"字符串值\"",[85,1234,1236],{"className":87,"code":1235,"language":89,"meta":14,"style":14},"\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",[91,1237,1238,1243,1248,1253,1258,1272,1285,1290,1296,1308],{"__ignoreMap":14},[94,1239,1240],{"class":96,"line":97},[94,1241,1242],{"class":163},"\u002F\u002Fc风格字符串\n",[94,1244,1245],{"class":96,"line":15},[94,1246,1247],{"class":163},"\u002F\u002F注意事项：\n",[94,1249,1250],{"class":96,"line":1160},[94,1251,1252],{"class":163},"\u002F\u002F1.char字符串名[]\n",[94,1254,1255],{"class":96,"line":1175},[94,1256,1257],{"class":163},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[94,1259,1260,1262,1265,1267,1269],{"class":96,"line":1181},[94,1261,201],{"class":100},[94,1263,1264],{"class":104}," str[]",[94,1266,150],{"class":100},[94,1268,1167],{"class":209},[94,1270,1271],{"class":104},";\n",[94,1273,1274,1276,1278,1281,1283],{"class":96,"line":1195},[94,1275,1146],{"class":104},[94,1277,1149],{"class":100},[94,1279,1280],{"class":104},"str",[94,1282,1149],{"class":100},[94,1284,1172],{"class":104},[94,1286,1287],{"class":96,"line":1201},[94,1288,1289],{"class":163},"\u002F\u002Fc++风格字符串\n",[94,1291,1293],{"class":96,"line":1292},8,[94,1294,1295],{"class":163},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[94,1297,1299,1302,1304,1306],{"class":96,"line":1298},9,[94,1300,1301],{"class":104},"string str2",[94,1303,150],{"class":100},[94,1305,1167],{"class":209},[94,1307,1271],{"class":104},[94,1309,1311,1313,1315,1318,1320],{"class":96,"line":1310},10,[94,1312,1146],{"class":104},[94,1314,1149],{"class":100},[94,1316,1317],{"class":104},"str2",[94,1319,1149],{"class":100},[94,1321,1172],{"class":104},[65,1323,1325],{"id":1324},"_136布尔类型bool","1.3.6布尔类型bool",[85,1327,1329],{"className":87,"code":1328,"language":89,"meta":14,"style":14},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[91,1330,1331,1346],{"__ignoreMap":14},[94,1332,1333,1336,1339,1341,1344],{"class":96,"line":97},[94,1334,1335],{"class":100},"bool",[94,1337,1338],{"class":104}," flag",[94,1340,150],{"class":100},[94,1342,1343],{"class":153},"true",[94,1345,1271],{"class":104},[94,1347,1348,1351,1354,1357,1359,1361],{"class":96,"line":15},[94,1349,1350],{"class":104},"cout",[94,1352,1353],{"class":100},"\u003C\u003Csizeof",[94,1355,1356],{"class":104},"(flag)",[94,1358,1149],{"class":100},[94,1360,1219],{"class":104},[94,1362,1363],{"class":163}," \u002F\u002F查看布尔占内存空间\n",[35,1365,1367],{"id":1366},"_14键盘输入cin","1.4键盘输入cin",[85,1369,1371],{"className":87,"code":1370,"language":89,"meta":14,"style":14},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[91,1372,1373,1386,1403,1414],{"__ignoreMap":14},[94,1374,1375,1377,1380,1382,1384],{"class":96,"line":97},[94,1376,108],{"class":100},[94,1378,1379],{"class":104}," a",[94,1381,150],{"class":100},[94,1383,296],{"class":153},[94,1385,1271],{"class":104},[94,1387,1388,1390,1392,1395,1397,1399,1401],{"class":96,"line":15},[94,1389,1350],{"class":104},[94,1391,1149],{"class":100},[94,1393,1394],{"class":209},"\"请给整型变量a赋值\"",[94,1396,1149],{"class":100},[94,1398,343],{"class":104},[94,1400,1149],{"class":100},[94,1402,1172],{"class":104},[94,1404,1405,1408,1411],{"class":96,"line":1160},[94,1406,1407],{"class":104},"cin ",[94,1409,1410],{"class":100},">>",[94,1412,1413],{"class":104}," a;\n",[94,1415,1416,1418,1420,1423,1426,1428,1430],{"class":96,"line":1175},[94,1417,1146],{"class":104},[94,1419,1149],{"class":100},[94,1421,1422],{"class":209}," \"整型变量a=\"",[94,1424,1425],{"class":100}," \u003C\u003C",[94,1427,343],{"class":104},[94,1429,1149],{"class":100},[94,1431,1172],{"class":104},[35,1433,1435],{"id":1434},"_15运算符","1.5运算符",[65,1437,1439],{"id":1438},"_151算术运算符","1.5.1算术运算符",[40,1441,1442,1446],{},[1443,1444],"img",{"alt":14,"src":1445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[48,1448,1449,1452,1455],{},[51,1450,1451],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[51,1453,1454],{},"两个小数不可以做取模运算",[51,1456,1457],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[65,1459,1461],{"id":1460},"_152赋值运算符","1.5.2赋值运算符",[40,1463,1464],{},[1443,1465],{"alt":14,"src":1466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[65,1468,1470],{"id":1469},"_153比较运算符","1.5.3比较运算符",[40,1472,1473],{},[1443,1474],{"alt":14,"src":1475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[65,1477,1479],{"id":1478},"_154逻辑运算符","1.5.4逻辑运算符",[40,1481,1482],{},[1443,1483],{"alt":14,"src":1484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[35,1486,1488],{"id":1487},"_16程序流程结构","1.6程序流程结构",[65,1490,1492],{"id":1491},"_161选择结构","1.6.1选择结构",[48,1494,1495],{},[51,1496,1497],{},"if语句\n单行、多行、多条件if语句",[85,1499,1501],{"className":87,"code":1500,"language":89,"meta":14,"style":14},"\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",[91,1502,1503,1508,1523,1528,1542,1547,1552,1561,1574,1578,1591,1596,1602,1607,1621,1626,1632,1653,1658,1672,1677,1706,1711,1728,1733,1738,1743,1757,1762],{"__ignoreMap":14},[94,1504,1505],{"class":96,"line":97},[94,1506,1507],{"class":163},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[94,1509,1510,1513,1516,1518,1521],{"class":96,"line":15},[94,1511,1512],{"class":100},"if",[94,1514,1515],{"class":104},"(score",[94,1517,1065],{"class":100},[94,1519,1520],{"class":153},"600",[94,1522,111],{"class":104},[94,1524,1525],{"class":96,"line":1160},[94,1526,1527],{"class":104},"{\n",[94,1529,1530,1533,1535,1538,1540],{"class":96,"line":1175},[94,1531,1532],{"class":104},"    cout",[94,1534,1149],{"class":100},[94,1536,1537],{"class":209},"'这是单行if语句'",[94,1539,1149],{"class":100},[94,1541,1172],{"class":104},[94,1543,1544],{"class":96,"line":1181},[94,1545,1546],{"class":104},"}\n",[94,1548,1549],{"class":96,"line":1195},[94,1550,1551],{"class":163},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[94,1553,1554,1556,1558],{"class":96,"line":1201},[94,1555,1407],{"class":104},[94,1557,1410],{"class":100},[94,1559,1560],{"class":104}," score\n",[94,1562,1563,1565,1567,1570,1572],{"class":96,"line":1292},[94,1564,1512],{"class":100},[94,1566,1515],{"class":104},[94,1568,1569],{"class":100},"\u003C=",[94,1571,1520],{"class":153},[94,1573,111],{"class":104},[94,1575,1576],{"class":96,"line":1298},[94,1577,1527],{"class":104},[94,1579,1580,1582,1584,1587,1589],{"class":96,"line":1310},[94,1581,1532],{"class":104},[94,1583,1410],{"class":100},[94,1585,1586],{"class":209},"\"小于等于600\"",[94,1588,1149],{"class":100},[94,1590,1172],{"class":104},[94,1592,1594],{"class":96,"line":1593},11,[94,1595,1546],{"class":104},[94,1597,1599],{"class":96,"line":1598},12,[94,1600,1601],{"class":100},"else\n",[94,1603,1605],{"class":96,"line":1604},13,[94,1606,1527],{"class":104},[94,1608,1610,1612,1614,1617,1619],{"class":96,"line":1609},14,[94,1611,1532],{"class":104},[94,1613,1410],{"class":100},[94,1615,1616],{"class":209},"\"大于600\"",[94,1618,1410],{"class":100},[94,1620,1172],{"class":104},[94,1622,1624],{"class":96,"line":1623},15,[94,1625,1546],{"class":104},[94,1627,1629],{"class":96,"line":1628},16,[94,1630,1631],{"class":163},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[94,1633,1635,1637,1640,1642,1644,1647,1649,1651],{"class":96,"line":1634},17,[94,1636,1512],{"class":100},[94,1638,1639],{"class":104}," (",[94,1641,296],{"class":153},[94,1643,1015],{"class":100},[94,1645,1646],{"class":104},"num",[94,1648,1015],{"class":100},[94,1650,416],{"class":153},[94,1652,111],{"class":104},[94,1654,1656],{"class":96,"line":1655},18,[94,1657,1527],{"class":104},[94,1659,1661,1663,1665,1668,1670],{"class":96,"line":1660},19,[94,1662,1532],{"class":104},[94,1664,1149],{"class":100},[94,1666,1667],{"class":209},"\"小于100\"",[94,1669,1149],{"class":100},[94,1671,1172],{"class":104},[94,1673,1675],{"class":96,"line":1674},20,[94,1676,1546],{"class":104},[94,1678,1680,1683,1686,1689,1692,1694,1697,1699,1701,1704],{"class":96,"line":1679},21,[94,1681,1682],{"class":100},"else",[94,1684,1685],{"class":100}," if",[94,1687,1688],{"class":104}," (nmu",[94,1690,1691],{"class":100},">=",[94,1693,416],{"class":153},[94,1695,1696],{"class":100},"&&",[94,1698,1646],{"class":104},[94,1700,1015],{"class":100},[94,1702,1703],{"class":153},"200",[94,1705,111],{"class":104},[94,1707,1709],{"class":96,"line":1708},22,[94,1710,1527],{"class":104},[94,1712,1714,1716,1718,1721,1723,1725],{"class":96,"line":1713},23,[94,1715,1532],{"class":104},[94,1717,1149],{"class":100},[94,1719,1720],{"class":209},"\"不小于100且小于200\"",[94,1722,1149],{"class":100},[94,1724,1219],{"class":104},[94,1726,1727],{"class":163}," \u002F\u002F可以无限else if,python中是elif：\n",[94,1729,1731],{"class":96,"line":1730},24,[94,1732,1546],{"class":104},[94,1734,1736],{"class":96,"line":1735},25,[94,1737,1601],{"class":100},[94,1739,1741],{"class":96,"line":1740},26,[94,1742,1527],{"class":104},[94,1744,1746,1748,1750,1753,1755],{"class":96,"line":1745},27,[94,1747,1532],{"class":104},[94,1749,1149],{"class":100},[94,1751,1752],{"class":209},"\"不小于200\"",[94,1754,1149],{"class":100},[94,1756,1172],{"class":104},[94,1758,1760],{"class":96,"line":1759},28,[94,1761,1546],{"class":104},[94,1763,1765],{"class":96,"line":1764},29,[94,1766,1767],{"class":163},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[48,1769,1770],{"start":15},[51,1771,1772],{},"三目运算符",[85,1774,1776],{"className":87,"code":1775,"language":89,"meta":14,"style":14},"\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",[91,1777,1778,1783,1788,1814,1836,1853,1858,1881,1896],{"__ignoreMap":14},[94,1779,1780],{"class":96,"line":97},[94,1781,1782],{"class":163},"\u002F\u002F创建三个变量a,b,c\n",[94,1784,1785],{"class":96,"line":15},[94,1786,1787],{"class":163},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[94,1789,1790,1792,1794,1796,1798,1801,1803,1805,1808,1810,1812],{"class":96,"line":1160},[94,1791,108],{"class":100},[94,1793,1379],{"class":104},[94,1795,150],{"class":100},[94,1797,805],{"class":153},[94,1799,1800],{"class":104},",b",[94,1802,150],{"class":100},[94,1804,551],{"class":153},[94,1806,1807],{"class":104},",c",[94,1809,150],{"class":100},[94,1811,296],{"class":153},[94,1813,1271],{"class":104},[94,1815,1816,1818,1820,1823,1825,1827,1829,1831,1833],{"class":96,"line":1175},[94,1817,393],{"class":104},[94,1819,150],{"class":100},[94,1821,1822],{"class":104},"(a",[94,1824,1065],{"class":100},[94,1826,368],{"class":104},[94,1828,1091],{"class":100},[94,1830,343],{"class":104},[94,1832,964],{"class":100},[94,1834,1835],{"class":104},"b)\n",[94,1837,1838,1840,1842,1845,1847,1849,1851],{"class":96,"line":1181},[94,1839,1350],{"class":104},[94,1841,1149],{"class":100},[94,1843,1844],{"class":209},"\"c=\"",[94,1846,1149],{"class":100},[94,1848,393],{"class":104},[94,1850,1149],{"class":100},[94,1852,1172],{"class":104},[94,1854,1855],{"class":96,"line":1195},[94,1856,1857],{"class":163},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[94,1859,1860,1862,1864,1866,1868,1870,1872,1875,1877,1879],{"class":96,"line":1201},[94,1861,1822],{"class":104},[94,1863,1065],{"class":100},[94,1865,368],{"class":104},[94,1867,1091],{"class":100},[94,1869,343],{"class":104},[94,1871,964],{"class":100},[94,1873,1874],{"class":104},"b)",[94,1876,150],{"class":100},[94,1878,416],{"class":153},[94,1880,1271],{"class":104},[94,1882,1883,1885,1887,1889,1891,1893],{"class":96,"line":1292},[94,1884,1350],{"class":104},[94,1886,1149],{"class":100},[94,1888,343],{"class":104},[94,1890,1149],{"class":100},[94,1892,1219],{"class":104},[94,1894,1895],{"class":163}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[94,1897,1898,1900,1902,1904,1906,1908],{"class":96,"line":1298},[94,1899,1350],{"class":104},[94,1901,1149],{"class":100},[94,1903,368],{"class":104},[94,1905,1149],{"class":100},[94,1907,1219],{"class":104},[94,1909,1910],{"class":163}," \u002F\u002F10   a>b,b还是原值\n",[48,1912,1913],{"start":1160},[51,1914,1915],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[85,1917,1919],{"className":87,"code":1918,"language":89,"meta":14,"style":14},"\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",[91,1920,1921,1926,1934,1948,1958,1962,1976,1989,1999,2007,2012,2037,2058,2080,2101,2123,2144,2164,2169],{"__ignoreMap":14},[94,1922,1923],{"class":96,"line":97},[94,1924,1925],{"class":163},"\u002F\u002F案例-电影打分\n",[94,1927,1928,1931],{"class":96,"line":15},[94,1929,1930],{"class":100},"#include",[94,1932,1933],{"class":209},"\u003Ciostream>\n",[94,1935,1936,1939,1942,1946],{"class":96,"line":1160},[94,1937,1938],{"class":100},"using",[94,1940,1941],{"class":100}," namespace",[94,1943,1945],{"class":1944},"sScJk"," std",[94,1947,1271],{"class":104},[94,1949,1950,1952,1955],{"class":96,"line":1175},[94,1951,108],{"class":100},[94,1953,1954],{"class":1944}," main",[94,1956,1957],{"class":104},"()\n",[94,1959,1960],{"class":96,"line":1181},[94,1961,1527],{"class":104},[94,1963,1964,1967,1970,1972,1974],{"class":96,"line":1195},[94,1965,1966],{"class":100},"    int",[94,1968,1969],{"class":104}," score",[94,1971,150],{"class":100},[94,1973,296],{"class":153},[94,1975,1271],{"class":104},[94,1977,1978,1980,1982,1985,1987],{"class":96,"line":1201},[94,1979,1532],{"class":104},[94,1981,1149],{"class":100},[94,1983,1984],{"class":209},"\"电影打分：\"",[94,1986,1149],{"class":100},[94,1988,1172],{"class":104},[94,1990,1991,1994,1996],{"class":96,"line":1292},[94,1992,1993],{"class":104},"    cin",[94,1995,1410],{"class":100},[94,1997,1998],{"class":104},"score;\n",[94,2000,2001,2004],{"class":96,"line":1298},[94,2002,2003],{"class":100},"    switch",[94,2005,2006],{"class":104},"(score)\n",[94,2008,2009],{"class":96,"line":1310},[94,2010,2011],{"class":104},"    {\n",[94,2013,2014,2017,2020,2023,2025,2028,2030,2032,2035],{"class":96,"line":1593},[94,2015,2016],{"class":100},"        case",[94,2018,2019],{"class":153}," 10",[94,2021,2022],{"class":104},":cout",[94,2024,1149],{"class":100},[94,2026,2027],{"class":209},"\"经典\"",[94,2029,1149],{"class":100},[94,2031,1219],{"class":104},[94,2033,2034],{"class":100},"break",[94,2036,1271],{"class":104},[94,2038,2039,2041,2044,2046,2048,2050,2052,2054,2056],{"class":96,"line":1598},[94,2040,2016],{"class":100},[94,2042,2043],{"class":153}," 9",[94,2045,2022],{"class":104},[94,2047,1149],{"class":100},[94,2049,2027],{"class":209},[94,2051,1149],{"class":100},[94,2053,1219],{"class":104},[94,2055,2034],{"class":100},[94,2057,1271],{"class":104},[94,2059,2060,2062,2065,2067,2069,2072,2074,2076,2078],{"class":96,"line":1604},[94,2061,2016],{"class":100},[94,2063,2064],{"class":153}," 8",[94,2066,2022],{"class":104},[94,2068,1149],{"class":100},[94,2070,2071],{"class":209},"\"非常好\"",[94,2073,1149],{"class":100},[94,2075,1219],{"class":104},[94,2077,2034],{"class":100},[94,2079,1271],{"class":104},[94,2081,2082,2084,2087,2089,2091,2093,2095,2097,2099],{"class":96,"line":1609},[94,2083,2016],{"class":100},[94,2085,2086],{"class":153}," 7",[94,2088,2022],{"class":104},[94,2090,1149],{"class":100},[94,2092,2071],{"class":209},[94,2094,1149],{"class":100},[94,2096,1219],{"class":104},[94,2098,2034],{"class":100},[94,2100,1271],{"class":104},[94,2102,2103,2105,2108,2110,2112,2115,2117,2119,2121],{"class":96,"line":1623},[94,2104,2016],{"class":100},[94,2106,2107],{"class":153}," 6",[94,2109,2022],{"class":104},[94,2111,1149],{"class":100},[94,2113,2114],{"class":209},"\"一般\"",[94,2116,1149],{"class":100},[94,2118,1219],{"class":104},[94,2120,2034],{"class":100},[94,2122,1271],{"class":104},[94,2124,2125,2127,2130,2132,2134,2136,2138,2140,2142],{"class":96,"line":1628},[94,2126,2016],{"class":100},[94,2128,2129],{"class":153}," 5",[94,2131,2022],{"class":104},[94,2133,1149],{"class":100},[94,2135,2114],{"class":209},[94,2137,1149],{"class":100},[94,2139,1219],{"class":104},[94,2141,2034],{"class":100},[94,2143,1271],{"class":104},[94,2145,2146,2149,2151,2153,2156,2158,2160,2162],{"class":96,"line":1634},[94,2147,2148],{"class":100},"        default",[94,2150,2022],{"class":104},[94,2152,1149],{"class":100},[94,2154,2155],{"class":209},"\"烂片\"",[94,2157,1149],{"class":100},[94,2159,1219],{"class":104},[94,2161,2034],{"class":100},[94,2163,1271],{"class":104},[94,2165,2166],{"class":96,"line":1655},[94,2167,2168],{"class":104},"    }\n",[94,2170,2171],{"class":96,"line":1660},[94,2172,1546],{"class":104},[40,2174,2175],{},"if和switch区别：",[1112,2177,2178,2181],{},[51,2179,2180],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[51,2182,2183],{},"switch优点：结构清晰，执行效率高",[65,2185,2187],{"id":2186},"_162循环结构","1.6.2循环结构",[48,2189,2190],{},[51,2191,2192],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[85,2194,2196],{"className":87,"code":2195,"language":89,"meta":14,"style":14},"\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",[91,2197,2198,2203,2211,2215,2228,2242,2246,2266,2276,2280,2292],{"__ignoreMap":14},[94,2199,2200],{"class":96,"line":97},[94,2201,2202],{"class":163},"\u002F\u002F打印0-9数字\n",[94,2204,2205,2207,2209],{"class":96,"line":15},[94,2206,108],{"class":100},[94,2208,1954],{"class":1944},[94,2210,1957],{"class":104},[94,2212,2213],{"class":96,"line":1160},[94,2214,1527],{"class":104},[94,2216,2217,2219,2222,2224,2226],{"class":96,"line":1175},[94,2218,1966],{"class":100},[94,2220,2221],{"class":104}," num",[94,2223,150],{"class":100},[94,2225,296],{"class":153},[94,2227,1271],{"class":104},[94,2229,2230,2233,2236,2238,2240],{"class":96,"line":1181},[94,2231,2232],{"class":100},"    while",[94,2234,2235],{"class":104},"(num",[94,2237,1015],{"class":100},[94,2239,551],{"class":153},[94,2241,111],{"class":104},[94,2243,2244],{"class":96,"line":1195},[94,2245,2011],{"class":104},[94,2247,2248,2251,2254,2256,2258,2260,2263],{"class":96,"line":1201},[94,2249,2250],{"class":1944},"       std",[94,2252,2253],{"class":104},"::cout",[94,2255,1149],{"class":100},[94,2257,1646],{"class":104},[94,2259,1149],{"class":100},[94,2261,2262],{"class":1944},"std",[94,2264,2265],{"class":104},"::endl;\n",[94,2267,2268,2271,2274],{"class":96,"line":1292},[94,2269,2270],{"class":104},"        num",[94,2272,2273],{"class":100},"++",[94,2275,1271],{"class":104},[94,2277,2278],{"class":96,"line":1298},[94,2279,2168],{"class":104},[94,2281,2282,2285,2287,2290],{"class":96,"line":1310},[94,2283,2284],{"class":1944},"    system",[94,2286,105],{"class":104},[94,2288,2289],{"class":209},"\"pause\"",[94,2291,111],{"class":104},[94,2293,2294],{"class":96,"line":1593},[94,2295,1546],{"class":104},[40,2297,2298],{},"注意：写好循环条件，避免死循环情况",[85,2300,2302],{"className":87,"code":2301,"language":89,"meta":14,"style":14},"\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",[91,2303,2304,2309,2316,2323,2333,2341,2345,2350,2377,2382,2387,2395,2422,2427,2432,2445,2455,2459,2469,2474,2487,2492,2506,2511,2526,2530,2543,2547,2552,2556,2570,2578,2583,2589,2595,2600],{"__ignoreMap":14},[94,2305,2306],{"class":96,"line":97},[94,2307,2308],{"class":163},"\u002F\u002F循环结构-猜数字\n",[94,2310,2311,2313],{"class":96,"line":15},[94,2312,1930],{"class":100},[94,2314,2315],{"class":209}," \u003Ciostream>\n",[94,2317,2318,2320],{"class":96,"line":1160},[94,2319,1930],{"class":100},[94,2321,2322],{"class":209}," \u003Cctime>\n",[94,2324,2325,2327,2329,2331],{"class":96,"line":1175},[94,2326,1938],{"class":100},[94,2328,1941],{"class":100},[94,2330,1945],{"class":1944},[94,2332,1271],{"class":104},[94,2334,2335,2337,2339],{"class":96,"line":1181},[94,2336,108],{"class":100},[94,2338,1954],{"class":1944},[94,2340,1957],{"class":104},[94,2342,2343],{"class":96,"line":1195},[94,2344,1527],{"class":104},[94,2346,2347],{"class":96,"line":1201},[94,2348,2349],{"class":163},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[94,2351,2352,2355,2358,2361,2364,2366,2369,2371,2374],{"class":96,"line":1292},[94,2353,2354],{"class":1944},"    srand",[94,2356,2357],{"class":104},"((",[94,2359,2360],{"class":100},"unsigned",[94,2362,2363],{"class":100}," int",[94,2365,534],{"class":104},[94,2367,2368],{"class":1944},"time",[94,2370,105],{"class":104},[94,2372,2373],{"class":153},"NULL",[94,2375,2376],{"class":104},"));\n",[94,2378,2379],{"class":96,"line":1298},[94,2380,2381],{"emptyLinePlaceholder":20},"\n",[94,2383,2384],{"class":96,"line":1310},[94,2385,2386],{"class":163},"    \u002F\u002F1.系统生成随机数\n",[94,2388,2389,2392],{"class":96,"line":1593},[94,2390,2391],{"class":163},"    \u002F\u002Frand()%100",[94,2393,2394],{"class":163}," \u002F\u002F生成0-99的随机数\n",[94,2396,2397,2399,2401,2403,2406,2409,2411,2413,2415,2417,2419],{"class":96,"line":1598},[94,2398,1966],{"class":100},[94,2400,2221],{"class":104},[94,2402,150],{"class":100},[94,2404,2405],{"class":1944},"rand",[94,2407,2408],{"class":104},"()",[94,2410,433],{"class":100},[94,2412,416],{"class":153},[94,2414,586],{"class":100},[94,2416,322],{"class":153},[94,2418,160],{"class":104},[94,2420,2421],{"class":163}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[94,2423,2424],{"class":96,"line":1604},[94,2425,2426],{"class":163},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[94,2428,2429],{"class":96,"line":1609},[94,2430,2431],{"class":163},"    \u002F\u002F2.玩家猜测\n",[94,2433,2434,2436,2439,2441,2443],{"class":96,"line":1623},[94,2435,1966],{"class":100},[94,2437,2438],{"class":104}," val",[94,2440,150],{"class":100},[94,2442,296],{"class":153},[94,2444,1271],{"class":104},[94,2446,2447,2449,2451,2453],{"class":96,"line":1628},[94,2448,2232],{"class":100},[94,2450,1639],{"class":104},[94,2452,322],{"class":153},[94,2454,111],{"class":104},[94,2456,2457],{"class":96,"line":1634},[94,2458,2011],{"class":104},[94,2460,2461,2464,2466],{"class":96,"line":1655},[94,2462,2463],{"class":104},"        cin",[94,2465,1410],{"class":100},[94,2467,2468],{"class":104},"val;\n",[94,2470,2471],{"class":96,"line":1660},[94,2472,2473],{"class":163},"        \u002F\u002F3.判断玩家猜测\n",[94,2475,2476,2479,2482,2484],{"class":96,"line":1674},[94,2477,2478],{"class":100},"        if",[94,2480,2481],{"class":104},"(val",[94,2483,1015],{"class":100},[94,2485,2486],{"class":104},"num) \n",[94,2488,2489],{"class":96,"line":1679},[94,2490,2491],{"class":104},"        {\n",[94,2493,2494,2497,2499,2502,2504],{"class":96,"line":1708},[94,2495,2496],{"class":104},"            cout",[94,2498,1149],{"class":100},[94,2500,2501],{"class":209},"\"猜小了！\"",[94,2503,1149],{"class":100},[94,2505,1172],{"class":104},[94,2507,2508],{"class":96,"line":1713},[94,2509,2510],{"class":104},"        }\n",[94,2512,2513,2516,2518,2521,2523],{"class":96,"line":1730},[94,2514,2515],{"class":100},"        else",[94,2517,1685],{"class":100},[94,2519,2520],{"class":104}," (val",[94,2522,1065],{"class":100},[94,2524,2525],{"class":104},"num)\n",[94,2527,2528],{"class":96,"line":1735},[94,2529,2491],{"class":104},[94,2531,2532,2534,2536,2539,2541],{"class":96,"line":1740},[94,2533,2496],{"class":104},[94,2535,1149],{"class":100},[94,2537,2538],{"class":209},"\"猜大了！\"",[94,2540,1149],{"class":100},[94,2542,1172],{"class":104},[94,2544,2545],{"class":96,"line":1745},[94,2546,2510],{"class":104},[94,2548,2549],{"class":96,"line":1759},[94,2550,2551],{"class":100},"        else\n",[94,2553,2554],{"class":96,"line":1764},[94,2555,2491],{"class":104},[94,2557,2559,2561,2563,2566,2568],{"class":96,"line":2558},30,[94,2560,2496],{"class":104},[94,2562,1149],{"class":100},[94,2564,2565],{"class":209},"\"猜对了！\"",[94,2567,1149],{"class":100},[94,2569,1172],{"class":104},[94,2571,2573,2576],{"class":96,"line":2572},31,[94,2574,2575],{"class":100},"            break",[94,2577,1271],{"class":104},[94,2579,2581],{"class":96,"line":2580},32,[94,2582,2510],{"class":104},[94,2584,2586],{"class":96,"line":2585},33,[94,2587,2588],{"class":163},"        \u002F\u002F猜对 退出游戏\n",[94,2590,2592],{"class":96,"line":2591},34,[94,2593,2594],{"class":163},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[94,2596,2598],{"class":96,"line":2597},35,[94,2599,2168],{"class":104},[94,2601,2603],{"class":96,"line":2602},36,[94,2604,1546],{"class":104},[48,2606,2607],{"start":15},[51,2608,2609,2610,2613],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[254,2611,2612],{},"do...while会先执行一次循环语句","，在判断循环语句",[85,2615,2617],{"className":87,"code":2616,"language":89,"meta":14,"style":14},"\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",[91,2618,2619,2624,2632,2636,2648,2656,2660,2677,2684,2688,2701,2711],{"__ignoreMap":14},[94,2620,2621],{"class":96,"line":97},[94,2622,2623],{"class":163},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[94,2625,2626,2628,2630],{"class":96,"line":15},[94,2627,108],{"class":100},[94,2629,1954],{"class":1944},[94,2631,1957],{"class":104},[94,2633,2634],{"class":96,"line":1160},[94,2635,1527],{"class":104},[94,2637,2638,2640,2642,2644,2646],{"class":96,"line":1175},[94,2639,1966],{"class":100},[94,2641,2221],{"class":104},[94,2643,150],{"class":100},[94,2645,296],{"class":153},[94,2647,1271],{"class":104},[94,2649,2650,2653],{"class":96,"line":1181},[94,2651,2652],{"class":100},"    do",[94,2654,2655],{"class":104}," \n",[94,2657,2658],{"class":96,"line":1195},[94,2659,2011],{"class":104},[94,2661,2662,2665,2667,2669,2671,2673,2675],{"class":96,"line":1201},[94,2663,2664],{"class":1944},"        std",[94,2666,2253],{"class":104},[94,2668,1149],{"class":100},[94,2670,1646],{"class":104},[94,2672,1149],{"class":100},[94,2674,2262],{"class":1944},[94,2676,2265],{"class":104},[94,2678,2679,2681],{"class":96,"line":1292},[94,2680,2270],{"class":104},[94,2682,2683],{"class":100},"++\n",[94,2685,2686],{"class":96,"line":1298},[94,2687,2168],{"class":104},[94,2689,2690,2692,2694,2696,2698],{"class":96,"line":1310},[94,2691,2232],{"class":100},[94,2693,2235],{"class":104},[94,2695,1015],{"class":100},[94,2697,551],{"class":153},[94,2699,2700],{"class":104},");\n",[94,2702,2703,2705,2707,2709],{"class":96,"line":1593},[94,2704,2284],{"class":1944},[94,2706,105],{"class":104},[94,2708,2289],{"class":209},[94,2710,2700],{"class":104},[94,2712,2713],{"class":96,"line":1598},[94,2714,1546],{"class":104},[40,2716,2717],{},"案例-水仙花数",[40,2719,2720],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[40,2722,2723],{},"例如：1^3+5^3+3^3=153",[40,2725,2726],{},"请用do...while语句，求出所有3位数的水仙花数",[85,2728,2730],{"className":87,"code":2729,"language":89,"meta":14,"style":14},"#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",[91,2731,2732,2738,2748,2756,2760,2765,2777,2783,2787,2792,2808,2824,2840,2855,2874,2889,2937,2941,2953,2957,2965,2969,2983],{"__ignoreMap":14},[94,2733,2734,2736],{"class":96,"line":97},[94,2735,1930],{"class":100},[94,2737,2315],{"class":209},[94,2739,2740,2742,2744,2746],{"class":96,"line":15},[94,2741,1938],{"class":100},[94,2743,1941],{"class":100},[94,2745,1945],{"class":1944},[94,2747,1271],{"class":104},[94,2749,2750,2752,2754],{"class":96,"line":1160},[94,2751,108],{"class":100},[94,2753,1954],{"class":1944},[94,2755,1957],{"class":104},[94,2757,2758],{"class":96,"line":1175},[94,2759,1527],{"class":104},[94,2761,2762],{"class":96,"line":1181},[94,2763,2764],{"class":163},"    \u002F\u002F1.先打印所有三位数字\n",[94,2766,2767,2769,2771,2773,2775],{"class":96,"line":1195},[94,2768,1966],{"class":100},[94,2770,2221],{"class":104},[94,2772,150],{"class":100},[94,2774,416],{"class":153},[94,2776,1271],{"class":104},[94,2778,2779,2781],{"class":96,"line":1201},[94,2780,2652],{"class":100},[94,2782,2655],{"class":104},[94,2784,2785],{"class":96,"line":1292},[94,2786,2011],{"class":104},[94,2788,2789],{"class":96,"line":1298},[94,2790,2791],{"class":163},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[94,2793,2794,2797,2799,2801,2803,2805],{"class":96,"line":1310},[94,2795,2796],{"class":100},"        int",[94,2798,1379],{"class":104},[94,2800,150],{"class":100},[94,2802,296],{"class":153},[94,2804,160],{"class":104},[94,2806,2807],{"class":163}," \u002F\u002F个位\n",[94,2809,2810,2812,2815,2817,2819,2821],{"class":96,"line":1593},[94,2811,2796],{"class":100},[94,2813,2814],{"class":104}," b",[94,2816,150],{"class":100},[94,2818,296],{"class":153},[94,2820,160],{"class":104},[94,2822,2823],{"class":163}," \u002F\u002F十位\n",[94,2825,2826,2828,2831,2833,2835,2837],{"class":96,"line":1598},[94,2827,2796],{"class":100},[94,2829,2830],{"class":104}," c",[94,2832,150],{"class":100},[94,2834,296],{"class":153},[94,2836,160],{"class":104},[94,2838,2839],{"class":163}," \u002F\u002F百位\n",[94,2841,2842,2845,2847,2849,2851,2853],{"class":96,"line":1604},[94,2843,2844],{"class":104},"        a",[94,2846,150],{"class":100},[94,2848,1646],{"class":104},[94,2850,433],{"class":100},[94,2852,551],{"class":153},[94,2854,1271],{"class":104},[94,2856,2857,2860,2862,2864,2866,2868,2870,2872],{"class":96,"line":1609},[94,2858,2859],{"class":104},"        b",[94,2861,150],{"class":100},[94,2863,1646],{"class":104},[94,2865,689],{"class":100},[94,2867,551],{"class":153},[94,2869,433],{"class":100},[94,2871,551],{"class":153},[94,2873,1271],{"class":104},[94,2875,2876,2879,2881,2883,2885,2887],{"class":96,"line":1623},[94,2877,2878],{"class":104},"        c",[94,2880,150],{"class":100},[94,2882,1646],{"class":104},[94,2884,689],{"class":100},[94,2886,416],{"class":153},[94,2888,1271],{"class":104},[94,2890,2891,2893,2895,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2928,2931,2934],{"class":96,"line":1628},[94,2892,2478],{"class":100},[94,2894,1822],{"class":104},[94,2896,560],{"class":100},[94,2898,343],{"class":104},[94,2900,560],{"class":100},[94,2902,343],{"class":104},[94,2904,586],{"class":100},[94,2906,368],{"class":104},[94,2908,560],{"class":100},[94,2910,368],{"class":104},[94,2912,560],{"class":100},[94,2914,368],{"class":104},[94,2916,586],{"class":100},[94,2918,393],{"class":104},[94,2920,560],{"class":100},[94,2922,393],{"class":104},[94,2924,560],{"class":100},[94,2926,2927],{"class":104},"c ",[94,2929,2930],{"class":100},"==",[94,2932,2933],{"class":104}," num)",[94,2935,2936],{"class":163}," \u002F\u002F如果是水仙花数，才打印\n",[94,2938,2939],{"class":96,"line":1634},[94,2940,2491],{"class":104},[94,2942,2943,2945,2947,2949,2951],{"class":96,"line":1655},[94,2944,2496],{"class":104},[94,2946,1149],{"class":100},[94,2948,1646],{"class":104},[94,2950,1149],{"class":100},[94,2952,1172],{"class":104},[94,2954,2955],{"class":96,"line":1660},[94,2956,2510],{"class":104},[94,2958,2959,2961,2963],{"class":96,"line":1674},[94,2960,2270],{"class":104},[94,2962,2273],{"class":100},[94,2964,1271],{"class":104},[94,2966,2967],{"class":96,"line":1679},[94,2968,2168],{"class":104},[94,2970,2971,2973,2976,2978,2981],{"class":96,"line":1708},[94,2972,2232],{"class":100},[94,2974,2975],{"class":104}," (num ",[94,2977,1015],{"class":100},[94,2979,2980],{"class":153}," 1000",[94,2982,2700],{"class":104},[94,2984,2985],{"class":96,"line":1713},[94,2986,1546],{"class":104},[48,2988,2989],{"start":1160},[51,2990,2991],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[85,2993,2995],{"className":87,"code":2994,"language":89,"meta":14,"style":14},"\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",[91,2996,2997,3002,3031,3035,3047,3051,3056,3067,3074,3078,3092,3096,3103,3107,3119,3128],{"__ignoreMap":14},[94,2998,2999],{"class":96,"line":97},[94,3000,3001],{"class":163},"\u002F\u002F从数字0-9打印\n",[94,3003,3004,3007,3009,3011,3014,3016,3018,3021,3023,3025,3027,3029],{"class":96,"line":15},[94,3005,3006],{"class":100},"for",[94,3008,105],{"class":104},[94,3010,108],{"class":100},[94,3012,3013],{"class":104}," i",[94,3015,150],{"class":100},[94,3017,296],{"class":153},[94,3019,3020],{"class":104},";i",[94,3022,1015],{"class":100},[94,3024,551],{"class":153},[94,3026,3020],{"class":104},[94,3028,2273],{"class":100},[94,3030,111],{"class":104},[94,3032,3033],{"class":96,"line":1160},[94,3034,1527],{"class":104},[94,3036,3037,3039,3041,3043,3045],{"class":96,"line":1175},[94,3038,1532],{"class":104},[94,3040,1149],{"class":100},[94,3042,546],{"class":104},[94,3044,1149],{"class":100},[94,3046,1172],{"class":104},[94,3048,3049],{"class":96,"line":1181},[94,3050,1546],{"class":104},[94,3052,3053],{"class":96,"line":1195},[94,3054,3055],{"class":163},"\u002F\u002F上式可以进行拆分\n",[94,3057,3058,3060,3062,3064],{"class":96,"line":1201},[94,3059,108],{"class":100},[94,3061,3013],{"class":104},[94,3063,150],{"class":100},[94,3065,3066],{"class":153},"0\n",[94,3068,3069,3071],{"class":96,"line":1292},[94,3070,3006],{"class":100},[94,3072,3073],{"class":104},"(;;;)\n",[94,3075,3076],{"class":96,"line":1298},[94,3077,1527],{"class":104},[94,3079,3080,3083,3086,3088,3090],{"class":96,"line":1310},[94,3081,3082],{"class":100},"    if",[94,3084,3085],{"class":104},"(i",[94,3087,1691],{"class":100},[94,3089,551],{"class":153},[94,3091,111],{"class":104},[94,3093,3094],{"class":96,"line":1593},[94,3095,2011],{"class":104},[94,3097,3098,3101],{"class":96,"line":1598},[94,3099,3100],{"class":100},"        break",[94,3102,1271],{"class":104},[94,3104,3105],{"class":96,"line":1604},[94,3106,2168],{"class":104},[94,3108,3109,3111,3113,3115,3117],{"class":96,"line":1609},[94,3110,1532],{"class":104},[94,3112,1149],{"class":100},[94,3114,546],{"class":104},[94,3116,1149],{"class":100},[94,3118,1172],{"class":104},[94,3120,3121,3124,3126],{"class":96,"line":1623},[94,3122,3123],{"class":104},"    i",[94,3125,2273],{"class":100},[94,3127,1271],{"class":104},[94,3129,3130],{"class":96,"line":1628},[94,3131,1546],{"class":104},[40,3133,3134],{},"小练习",[85,3136,3138],{"className":87,"code":3137,"language":89,"meta":14,"style":14},"#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",[91,3139,3140,3146,3156,3164,3168,3173,3178,3206,3210,3215,3220,3261,3265,3278,3282,3286,3290,3302,3306,3310],{"__ignoreMap":14},[94,3141,3142,3144],{"class":96,"line":97},[94,3143,1930],{"class":100},[94,3145,1933],{"class":209},[94,3147,3148,3150,3152,3154],{"class":96,"line":15},[94,3149,1938],{"class":100},[94,3151,1941],{"class":100},[94,3153,1945],{"class":1944},[94,3155,1271],{"class":104},[94,3157,3158,3160,3162],{"class":96,"line":1160},[94,3159,108],{"class":100},[94,3161,1954],{"class":1944},[94,3163,1957],{"class":104},[94,3165,3166],{"class":96,"line":1175},[94,3167,1527],{"class":104},[94,3169,3170],{"class":96,"line":1181},[94,3171,3172],{"class":163},"    \u002F\u002F敲桌子案例\n",[94,3174,3175],{"class":96,"line":1195},[94,3176,3177],{"class":163},"    \u002F\u002F1.先输出1-100的数字\n",[94,3179,3180,3183,3185,3187,3189,3191,3193,3196,3198,3200,3202,3204],{"class":96,"line":1201},[94,3181,3182],{"class":100},"    for",[94,3184,105],{"class":104},[94,3186,108],{"class":100},[94,3188,3013],{"class":104},[94,3190,150],{"class":100},[94,3192,322],{"class":153},[94,3194,3195],{"class":104},"; i",[94,3197,1569],{"class":100},[94,3199,416],{"class":153},[94,3201,3195],{"class":104},[94,3203,2273],{"class":100},[94,3205,111],{"class":104},[94,3207,3208],{"class":96,"line":1292},[94,3209,2011],{"class":104},[94,3211,3212],{"class":96,"line":1298},[94,3213,3214],{"class":163},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[94,3216,3217],{"class":96,"line":1310},[94,3218,3219],{"class":163},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[94,3221,3222,3224,3226,3228,3230,3232,3234,3237,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259],{"class":96,"line":1593},[94,3223,2478],{"class":100},[94,3225,3085],{"class":104},[94,3227,433],{"class":100},[94,3229,474],{"class":153},[94,3231,2930],{"class":100},[94,3233,296],{"class":153},[94,3235,3236],{"class":100}," ||",[94,3238,3013],{"class":104},[94,3240,433],{"class":100},[94,3242,551],{"class":153},[94,3244,2930],{"class":100},[94,3246,474],{"class":153},[94,3248,3236],{"class":100},[94,3250,3013],{"class":104},[94,3252,689],{"class":100},[94,3254,551],{"class":153},[94,3256,2930],{"class":100},[94,3258,474],{"class":153},[94,3260,111],{"class":104},[94,3262,3263],{"class":96,"line":1598},[94,3264,2491],{"class":104},[94,3266,3267,3269,3271,3274,3276],{"class":96,"line":1604},[94,3268,2496],{"class":104},[94,3270,1149],{"class":100},[94,3272,3273],{"class":209},"\"敲桌子\"",[94,3275,1149],{"class":100},[94,3277,1172],{"class":104},[94,3279,3280],{"class":96,"line":1609},[94,3281,2510],{"class":104},[94,3283,3284],{"class":96,"line":1623},[94,3285,2551],{"class":100},[94,3287,3288],{"class":96,"line":1628},[94,3289,2491],{"class":104},[94,3291,3292,3294,3296,3298,3300],{"class":96,"line":1634},[94,3293,2496],{"class":104},[94,3295,1149],{"class":100},[94,3297,546],{"class":104},[94,3299,1149],{"class":100},[94,3301,1172],{"class":104},[94,3303,3304],{"class":96,"line":1655},[94,3305,2510],{"class":104},[94,3307,3308],{"class":96,"line":1660},[94,3309,2168],{"class":104},[94,3311,3312],{"class":96,"line":1674},[94,3313,1546],{"class":104},[40,3315,3316],{},"嵌套实现星图",[85,3318,3320],{"className":87,"code":3319,"language":89,"meta":14,"style":14},"#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",[91,3321,3322,3328,3338,3346,3350,3376,3380,3409,3413,3424,3428,3437,3441],{"__ignoreMap":14},[94,3323,3324,3326],{"class":96,"line":97},[94,3325,1930],{"class":100},[94,3327,1933],{"class":209},[94,3329,3330,3332,3334,3336],{"class":96,"line":15},[94,3331,1938],{"class":100},[94,3333,1941],{"class":100},[94,3335,1945],{"class":1944},[94,3337,1271],{"class":104},[94,3339,3340,3342,3344],{"class":96,"line":1160},[94,3341,108],{"class":100},[94,3343,1954],{"class":1944},[94,3345,1957],{"class":104},[94,3347,3348],{"class":96,"line":1175},[94,3349,1527],{"class":104},[94,3351,3352,3354,3356,3358,3360,3362,3364,3366,3368,3370,3372,3374],{"class":96,"line":1181},[94,3353,3182],{"class":100},[94,3355,1639],{"class":104},[94,3357,108],{"class":100},[94,3359,3013],{"class":104},[94,3361,150],{"class":100},[94,3363,296],{"class":153},[94,3365,3020],{"class":104},[94,3367,1015],{"class":100},[94,3369,551],{"class":153},[94,3371,3020],{"class":104},[94,3373,2273],{"class":100},[94,3375,111],{"class":104},[94,3377,3378],{"class":96,"line":1195},[94,3379,2011],{"class":104},[94,3381,3382,3385,3387,3389,3392,3394,3396,3399,3401,3403,3405,3407],{"class":96,"line":1201},[94,3383,3384],{"class":100},"        for",[94,3386,1639],{"class":104},[94,3388,108],{"class":100},[94,3390,3391],{"class":104}," j",[94,3393,150],{"class":100},[94,3395,296],{"class":153},[94,3397,3398],{"class":104},";j",[94,3400,1015],{"class":100},[94,3402,551],{"class":153},[94,3404,3398],{"class":104},[94,3406,2273],{"class":100},[94,3408,111],{"class":104},[94,3410,3411],{"class":96,"line":1292},[94,3412,2491],{"class":104},[94,3414,3415,3417,3419,3422],{"class":96,"line":1298},[94,3416,2496],{"class":104},[94,3418,1149],{"class":100},[94,3420,3421],{"class":209},"\"*\"",[94,3423,1271],{"class":104},[94,3425,3426],{"class":96,"line":1310},[94,3427,2510],{"class":104},[94,3429,3430,3433,3435],{"class":96,"line":1593},[94,3431,3432],{"class":104},"        cout",[94,3434,1149],{"class":100},[94,3436,1172],{"class":104},[94,3438,3439],{"class":96,"line":1598},[94,3440,2168],{"class":104},[94,3442,3443],{"class":96,"line":1604},[94,3444,1546],{"class":104},[40,3446,3447],{},"乘法口诀表",[85,3449,3451],{"className":87,"code":3450,"language":89,"meta":14,"style":14},"#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",[91,3452,3453,3459,3469,3477,3481,3507,3511,3536,3540,3580,3584,3592,3596],{"__ignoreMap":14},[94,3454,3455,3457],{"class":96,"line":97},[94,3456,1930],{"class":100},[94,3458,2315],{"class":209},[94,3460,3461,3463,3465,3467],{"class":96,"line":15},[94,3462,1938],{"class":100},[94,3464,1941],{"class":100},[94,3466,1945],{"class":1944},[94,3468,1271],{"class":104},[94,3470,3471,3473,3475],{"class":96,"line":1160},[94,3472,108],{"class":100},[94,3474,1954],{"class":1944},[94,3476,1957],{"class":104},[94,3478,3479],{"class":96,"line":1175},[94,3480,1527],{"class":104},[94,3482,3483,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503,3505],{"class":96,"line":1181},[94,3484,3182],{"class":100},[94,3486,105],{"class":104},[94,3488,108],{"class":100},[94,3490,3013],{"class":104},[94,3492,150],{"class":100},[94,3494,322],{"class":153},[94,3496,3020],{"class":104},[94,3498,1015],{"class":100},[94,3500,551],{"class":153},[94,3502,3020],{"class":104},[94,3504,2273],{"class":100},[94,3506,111],{"class":104},[94,3508,3509],{"class":96,"line":1195},[94,3510,2011],{"class":104},[94,3512,3513,3515,3517,3519,3521,3523,3525,3527,3529,3532,3534],{"class":96,"line":1201},[94,3514,3384],{"class":100},[94,3516,105],{"class":104},[94,3518,108],{"class":100},[94,3520,3391],{"class":104},[94,3522,150],{"class":100},[94,3524,322],{"class":153},[94,3526,3398],{"class":104},[94,3528,1569],{"class":100},[94,3530,3531],{"class":104},"i;j",[94,3533,2273],{"class":100},[94,3535,111],{"class":104},[94,3537,3538],{"class":96,"line":1292},[94,3539,2491],{"class":104},[94,3541,3542,3544,3546,3548,3550,3552,3554,3556,3558,3561,3563,3565,3567,3569,3571,3574,3576,3578],{"class":96,"line":1298},[94,3543,2496],{"class":104},[94,3545,1149],{"class":100},[94,3547,572],{"class":104},[94,3549,1149],{"class":100},[94,3551,3421],{"class":209},[94,3553,1149],{"class":100},[94,3555,546],{"class":104},[94,3557,1149],{"class":100},[94,3559,3560],{"class":209},"\"=\"",[94,3562,1149],{"class":100},[94,3564,546],{"class":104},[94,3566,560],{"class":100},[94,3568,572],{"class":104},[94,3570,1149],{"class":100},[94,3572,3573],{"class":209},"'",[94,3575,1211],{"class":153},[94,3577,3573],{"class":209},[94,3579,1271],{"class":104},[94,3581,3582],{"class":96,"line":1310},[94,3583,2510],{"class":104},[94,3585,3586,3588,3590],{"class":96,"line":1593},[94,3587,3432],{"class":104},[94,3589,1149],{"class":100},[94,3591,1172],{"class":104},[94,3593,3594],{"class":96,"line":1598},[94,3595,2168],{"class":104},[94,3597,3598],{"class":96,"line":1604},[94,3599,1546],{"class":104},[65,3601,3603],{"id":3602},"_163跳出语句","1.6.3跳出语句",[48,3605,3606],{},[51,3607,3608],{},"break语句\n作用：用于跳出选择结构或者循环结构",[40,3610,3611],{},"break使用时机：",[1112,3613,3614,3617,3620],{},[51,3615,3616],{},"出现在switch条件语句中，作用是终止case并跳出switch",[51,3618,3619],{},"出现在循环结构中，作用是跳出当前的循环结构",[51,3621,3622],{},"出现在嵌套循环中，跳出最近的内层循环语句",[48,3624,3625,3628],{"start":15},[51,3626,3627],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[51,3629,3630],{},"goto语句\n语法：goto 标记;",[40,3632,3633],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[85,3635,3637],{"className":87,"code":3636,"language":89,"meta":14,"style":14},"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",[91,3638,3639,3647,3651,3664,3674,3687,3700,3713,3721,3737],{"__ignoreMap":14},[94,3640,3641,3643,3645],{"class":96,"line":97},[94,3642,108],{"class":100},[94,3644,1954],{"class":1944},[94,3646,1957],{"class":104},[94,3648,3649],{"class":96,"line":15},[94,3650,1527],{"class":104},[94,3652,3653,3655,3657,3660,3662],{"class":96,"line":1160},[94,3654,1532],{"class":104},[94,3656,1149],{"class":100},[94,3658,3659],{"class":209},"\"1\"",[94,3661,1149],{"class":100},[94,3663,1172],{"class":104},[94,3665,3666,3669,3672],{"class":96,"line":1175},[94,3667,3668],{"class":100},"    goto",[94,3670,3671],{"class":1944}," FLAG",[94,3673,1271],{"class":104},[94,3675,3676,3678,3680,3683,3685],{"class":96,"line":1181},[94,3677,1532],{"class":104},[94,3679,1149],{"class":100},[94,3681,3682],{"class":209},"\"2\"",[94,3684,1149],{"class":100},[94,3686,1172],{"class":104},[94,3688,3689,3691,3693,3696,3698],{"class":96,"line":1195},[94,3690,1532],{"class":104},[94,3692,1149],{"class":100},[94,3694,3695],{"class":209},"\"3\"",[94,3697,1149],{"class":100},[94,3699,1172],{"class":104},[94,3701,3702,3704,3706,3709,3711],{"class":96,"line":1201},[94,3703,1532],{"class":104},[94,3705,1149],{"class":100},[94,3707,3708],{"class":209},"\"4\"",[94,3710,1149],{"class":100},[94,3712,1172],{"class":104},[94,3714,3715,3718],{"class":96,"line":1292},[94,3716,3717],{"class":1944},"    FLAG",[94,3719,3720],{"class":104},":\n",[94,3722,3723,3725,3727,3730,3732,3734],{"class":96,"line":1298},[94,3724,1532],{"class":104},[94,3726,1149],{"class":100},[94,3728,3729],{"class":209},"\"5\"",[94,3731,1149],{"class":100},[94,3733,1219],{"class":104},[94,3735,3736],{"class":163},"\u002F\u002F跳过了2,3,4,直接到5\n",[94,3738,3739],{"class":96,"line":1310},[94,3740,1546],{"class":104},[35,3742,3744],{"id":3743},"_17数组","1.7数组",[65,3746,3748],{"id":3747},"_171一维数组","1.7.1一维数组",[48,3750,3751],{},[51,3752,3753],{},"一维数组定义方式",[242,3755,3756,3766],{},[245,3757,3758],{},[248,3759,3760,3763],{},[251,3761,3762],{},"方式",[251,3764,3765],{},"注意事项",[289,3767,3768,3782,3792],{},[248,3769,3770,3776],{},[294,3771,3772,3773,160],{},"数据类型 数组名",[94,3774,3775],{},"数组长度",[294,3777,3778,3779,3781],{},"这种方式是先定义再arr",[94,3780,546],{},"赋值",[248,3783,3784,3789],{},[294,3785,3772,3786,3788],{},[94,3787,3775],{},"={值1,值2....};",[294,3790,3791],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[248,3793,3794,3798],{},[294,3795,3772,3796,3788],{},[94,3797],{},[294,3799,3800,3801,3803],{},"int arr",[94,3802],{},";这是不正确的，按照这样的方式定义必须有初始长度",[48,3805,3806],{"start":15},[51,3807,3808],{},"一维数组数组名\n用途：",[1112,3810,3811],{},[51,3812,3813],{},"1.可以统计整个数组在内存中的长度：",[85,3815,3817],{"className":87,"code":3816,"language":89,"meta":14,"style":14},"sizeof(arr);\nsizeof(arr[0]);\n",[91,3818,3819,3826],{"__ignoreMap":14},[94,3820,3821,3823],{"class":96,"line":97},[94,3822,101],{"class":100},[94,3824,3825],{"class":104},"(arr);\n",[94,3827,3828,3830,3833,3835],{"class":96,"line":15},[94,3829,101],{"class":100},[94,3831,3832],{"class":104},"(arr[",[94,3834,296],{"class":153},[94,3836,3837],{"class":104},"]);\n",[1112,3839,3840],{},[51,3841,3842],{},"2.可以获取数组在内存中的首地址:",[85,3844,3846],{"className":87,"code":3845,"language":89,"meta":14,"style":14},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[91,3847,3848,3853,3866,3871],{"__ignoreMap":14},[94,3849,3850],{"class":96,"line":97},[94,3851,3852],{"class":163},"\u002F\u002F查看16进制的首地址\n",[94,3854,3855,3857,3859,3862,3864],{"class":96,"line":15},[94,3856,1350],{"class":104},[94,3858,1149],{"class":100},[94,3860,3861],{"class":104},"arr",[94,3863,1149],{"class":100},[94,3865,1172],{"class":104},[94,3867,3868],{"class":96,"line":1160},[94,3869,3870],{"class":163},"\u002F\u002F看10进制数\n",[94,3872,3873,3875,3877,3879,3881,3883,3885,3888,3890,3892,3894],{"class":96,"line":1175},[94,3874,1350],{"class":104},[94,3876,1149],{"class":100},[94,3878,105],{"class":104},[94,3880,108],{"class":100},[94,3882,534],{"class":104},[94,3884,458],{"class":100},[94,3886,3887],{"class":104},"arr[",[94,3889,296],{"class":153},[94,3891,1045],{"class":104},[94,3893,1149],{"class":100},[94,3895,1172],{"class":104},[40,3897,3898],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1112,3900,3901],{},[51,3902,3903],{},"1️⃣五只小猪称体重",[85,3905,3907],{"className":87,"code":3906,"language":89,"meta":14,"style":14},"#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",[91,3908,3909,3915,3925,3933,3937,3977,3990,4016,4020,4032,4036,4046,4050,4054,4067,4077],{"__ignoreMap":14},[94,3910,3911,3913],{"class":96,"line":97},[94,3912,1930],{"class":100},[94,3914,1933],{"class":209},[94,3916,3917,3919,3921,3923],{"class":96,"line":15},[94,3918,1938],{"class":100},[94,3920,1941],{"class":100},[94,3922,1945],{"class":1944},[94,3924,1271],{"class":104},[94,3926,3927,3929,3931],{"class":96,"line":1160},[94,3928,108],{"class":100},[94,3930,1954],{"class":1944},[94,3932,1957],{"class":104},[94,3934,3935],{"class":96,"line":1175},[94,3936,1527],{"class":104},[94,3938,3939,3941,3944,3946,3948,3950,3952,3955,3957,3960,3962,3964,3966,3969,3971,3974],{"class":96,"line":1181},[94,3940,1966],{"class":100},[94,3942,3943],{"class":104}," arr[",[94,3945,424],{"class":153},[94,3947,1045],{"class":104},[94,3949,150],{"class":100},[94,3951,1001],{"class":104},[94,3953,3954],{"class":153},"300",[94,3956,483],{"class":104},[94,3958,3959],{"class":153},"350",[94,3961,483],{"class":104},[94,3963,1703],{"class":153},[94,3965,483],{"class":104},[94,3967,3968],{"class":153},"400",[94,3970,483],{"class":104},[94,3972,3973],{"class":153},"250",[94,3975,3976],{"class":104},"};\n",[94,3978,3979,3981,3984,3986,3988],{"class":96,"line":1195},[94,3980,1966],{"class":100},[94,3982,3983],{"class":104}," tmp",[94,3985,150],{"class":100},[94,3987,296],{"class":153},[94,3989,1271],{"class":104},[94,3991,3992,3994,3996,3998,4000,4002,4004,4006,4008,4010,4012,4014],{"class":96,"line":1201},[94,3993,3182],{"class":100},[94,3995,1639],{"class":104},[94,3997,108],{"class":100},[94,3999,3013],{"class":104},[94,4001,150],{"class":100},[94,4003,296],{"class":153},[94,4005,3020],{"class":104},[94,4007,1015],{"class":100},[94,4009,424],{"class":153},[94,4011,3020],{"class":104},[94,4013,2273],{"class":100},[94,4015,111],{"class":104},[94,4017,4018],{"class":96,"line":1292},[94,4019,2011],{"class":104},[94,4021,4022,4024,4027,4029],{"class":96,"line":1298},[94,4023,2478],{"class":100},[94,4025,4026],{"class":104},"(tmp",[94,4028,1015],{"class":100},[94,4030,4031],{"class":104},"arr[i])\n",[94,4033,4034],{"class":96,"line":1310},[94,4035,2491],{"class":104},[94,4037,4038,4041,4043],{"class":96,"line":1593},[94,4039,4040],{"class":104},"            tmp",[94,4042,150],{"class":100},[94,4044,4045],{"class":104},"arr[i];\n",[94,4047,4048],{"class":96,"line":1598},[94,4049,2510],{"class":104},[94,4051,4052],{"class":96,"line":1604},[94,4053,2168],{"class":104},[94,4055,4056,4058,4060,4063,4065],{"class":96,"line":1609},[94,4057,1532],{"class":104},[94,4059,1149],{"class":100},[94,4061,4062],{"class":104},"tmp",[94,4064,1149],{"class":100},[94,4066,1172],{"class":104},[94,4068,4069,4072,4075],{"class":96,"line":1623},[94,4070,4071],{"class":100},"    return",[94,4073,4074],{"class":153}," 0",[94,4076,1271],{"class":104},[94,4078,4079],{"class":96,"line":1628},[94,4080,1546],{"class":104},[1112,4082,4083],{},[51,4084,4085],{},"2️⃣数组元素逆置",[85,4087,4089],{"className":87,"code":4088,"language":89,"meta":14,"style":14},"\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",[91,4090,4091,4096,4102,4112,4120,4124,4159,4175,4207,4220,4225,4230,4242,4252,4262,4267,4276,4286,4291,4296,4323,4327,4343,4347,4358,4367],{"__ignoreMap":14},[94,4092,4093],{"class":96,"line":97},[94,4094,4095],{"class":163},"\u002F\u002F元素逆置\n",[94,4097,4098,4100],{"class":96,"line":15},[94,4099,1930],{"class":100},[94,4101,1933],{"class":209},[94,4103,4104,4106,4108,4110],{"class":96,"line":1160},[94,4105,1938],{"class":100},[94,4107,1941],{"class":100},[94,4109,1945],{"class":1944},[94,4111,1271],{"class":104},[94,4113,4114,4116,4118],{"class":96,"line":1175},[94,4115,108],{"class":100},[94,4117,1954],{"class":1944},[94,4119,1957],{"class":104},[94,4121,4122],{"class":96,"line":1181},[94,4123,1527],{"class":104},[94,4125,4126,4129,4131,4133,4135,4137,4139,4141,4143,4145,4147,4149,4151,4153,4155,4157],{"class":96,"line":1195},[94,4127,4128],{"class":100},"   int",[94,4130,3943],{"class":104},[94,4132,424],{"class":153},[94,4134,1045],{"class":104},[94,4136,150],{"class":100},[94,4138,1001],{"class":104},[94,4140,322],{"class":153},[94,4142,483],{"class":104},[94,4144,182],{"class":153},[94,4146,483],{"class":104},[94,4148,176],{"class":153},[94,4150,483],{"class":104},[94,4152,398],{"class":153},[94,4154,483],{"class":104},[94,4156,424],{"class":153},[94,4158,3976],{"class":104},[94,4160,4161,4163,4166,4168,4170,4172],{"class":96,"line":1201},[94,4162,4128],{"class":100},[94,4164,4165],{"class":104}," start",[94,4167,150],{"class":100},[94,4169,296],{"class":153},[94,4171,160],{"class":104},[94,4173,4174],{"class":163},"\u002F\u002F起始下标\n",[94,4176,4177,4179,4182,4185,4188,4191,4193,4195,4198,4200,4202,4204],{"class":96,"line":1292},[94,4178,4128],{"class":100},[94,4180,4181],{"class":104}," end",[94,4183,4184],{"class":100},"=sizeof",[94,4186,4187],{"class":104},"(arr)",[94,4189,4190],{"class":100},"\u002Fsizeof",[94,4192,3832],{"class":104},[94,4194,296],{"class":153},[94,4196,4197],{"class":104},"])",[94,4199,637],{"class":100},[94,4201,322],{"class":153},[94,4203,160],{"class":104},[94,4205,4206],{"class":163},"\u002F\u002F结束下标\n",[94,4208,4209,4212,4215,4217],{"class":96,"line":1298},[94,4210,4211],{"class":100},"   while",[94,4213,4214],{"class":104}," (start",[94,4216,1015],{"class":100},[94,4218,4219],{"class":104},"end)\n",[94,4221,4222],{"class":96,"line":1310},[94,4223,4224],{"class":104},"   {\n",[94,4226,4227],{"class":96,"line":1593},[94,4228,4229],{"class":163},"    \u002F\u002F实现元素互换代码\n",[94,4231,4232,4234,4237,4239],{"class":96,"line":1598},[94,4233,1966],{"class":100},[94,4235,4236],{"class":104}," temp",[94,4238,150],{"class":100},[94,4240,4241],{"class":104},"arr[start];\n",[94,4243,4244,4247,4249],{"class":96,"line":1604},[94,4245,4246],{"class":104},"    arr[start]",[94,4248,150],{"class":100},[94,4250,4251],{"class":104},"arr[end];\n",[94,4253,4254,4257,4259],{"class":96,"line":1609},[94,4255,4256],{"class":104},"    arr[end]",[94,4258,150],{"class":100},[94,4260,4261],{"class":104},"temp;\n",[94,4263,4264],{"class":96,"line":1623},[94,4265,4266],{"class":163},"    \u002F\u002F下标更新\n",[94,4268,4269,4272,4274],{"class":96,"line":1628},[94,4270,4271],{"class":104},"    start",[94,4273,2273],{"class":100},[94,4275,1271],{"class":104},[94,4277,4278,4281,4284],{"class":96,"line":1634},[94,4279,4280],{"class":104},"    end",[94,4282,4283],{"class":100},"--",[94,4285,1271],{"class":104},[94,4287,4288],{"class":96,"line":1655},[94,4289,4290],{"class":104},"   }\n",[94,4292,4293],{"class":96,"line":1660},[94,4294,4295],{"class":163},"   \u002F\u002F输出逆置后的数组\n",[94,4297,4298,4301,4303,4305,4307,4309,4311,4313,4315,4317,4319,4321],{"class":96,"line":1674},[94,4299,4300],{"class":100},"   for",[94,4302,1639],{"class":104},[94,4304,108],{"class":100},[94,4306,3013],{"class":104},[94,4308,150],{"class":100},[94,4310,296],{"class":153},[94,4312,3020],{"class":104},[94,4314,1015],{"class":100},[94,4316,424],{"class":153},[94,4318,3020],{"class":104},[94,4320,2273],{"class":100},[94,4322,111],{"class":104},[94,4324,4325],{"class":96,"line":1679},[94,4326,4224],{"class":104},[94,4328,4329,4331,4333,4336,4338,4341],{"class":96,"line":1708},[94,4330,1532],{"class":104},[94,4332,1149],{"class":100},[94,4334,4335],{"class":104},"arr[i]",[94,4337,1149],{"class":100},[94,4339,4340],{"class":209},"\" \"",[94,4342,1271],{"class":104},[94,4344,4345],{"class":96,"line":1713},[94,4346,4290],{"class":104},[94,4348,4349,4352,4354,4356],{"class":96,"line":1730},[94,4350,4351],{"class":1944},"   system",[94,4353,105],{"class":104},[94,4355,2289],{"class":209},[94,4357,2700],{"class":104},[94,4359,4360,4363,4365],{"class":96,"line":1735},[94,4361,4362],{"class":100},"   return",[94,4364,4074],{"class":153},[94,4366,1271],{"class":104},[94,4368,4369],{"class":96,"line":1740},[94,4370,1546],{"class":104},[1112,4372,4373],{},[51,4374,4375],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[85,4377,4379],{"className":87,"code":4378,"language":89,"meta":14,"style":14},"\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",[91,4380,4381,4386,4392,4402,4410,4414,4466,4479,4505,4509,4523,4527,4532,4537,4567,4571,4576,4610,4614,4619,4639,4644,4656,4672,4687,4692,4696,4700,4713,4739,4743,4757,4761,4769],{"__ignoreMap":14},[94,4382,4383],{"class":96,"line":97},[94,4384,4385],{"class":163},"\u002F\u002F冒泡排序,升序\n",[94,4387,4388,4390],{"class":96,"line":15},[94,4389,1930],{"class":100},[94,4391,1933],{"class":209},[94,4393,4394,4396,4398,4400],{"class":96,"line":1160},[94,4395,1938],{"class":100},[94,4397,1941],{"class":100},[94,4399,1945],{"class":1944},[94,4401,1271],{"class":104},[94,4403,4404,4406,4408],{"class":96,"line":1175},[94,4405,108],{"class":100},[94,4407,1954],{"class":1944},[94,4409,1957],{"class":104},[94,4411,4412],{"class":96,"line":1181},[94,4413,1527],{"class":104},[94,4415,4416,4418,4420,4422,4425,4427,4430,4432,4434,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4462,4464],{"class":96,"line":1195},[94,4417,1966],{"class":100},[94,4419,3943],{"class":104},[94,4421,525],{"class":153},[94,4423,4424],{"class":104},"] ",[94,4426,150],{"class":100},[94,4428,4429],{"class":104}," {",[94,4431,398],{"class":153},[94,4433,483],{"class":104},[94,4435,182],{"class":153},[94,4437,483],{"class":104},[94,4439,500],{"class":153},[94,4441,483],{"class":104},[94,4443,296],{"class":153},[94,4445,483],{"class":104},[94,4447,424],{"class":153},[94,4449,483],{"class":104},[94,4451,474],{"class":153},[94,4453,483],{"class":104},[94,4455,322],{"class":153},[94,4457,483],{"class":104},[94,4459,176],{"class":153},[94,4461,483],{"class":104},[94,4463,525],{"class":153},[94,4465,3976],{"class":104},[94,4467,4468,4470,4472,4475,4477],{"class":96,"line":1201},[94,4469,1532],{"class":104},[94,4471,1149],{"class":100},[94,4473,4474],{"class":209},"\"排序前：\"",[94,4476,1149],{"class":100},[94,4478,1172],{"class":104},[94,4480,4481,4483,4485,4487,4489,4491,4493,4495,4497,4499,4501,4503],{"class":96,"line":1292},[94,4482,3182],{"class":100},[94,4484,1639],{"class":104},[94,4486,108],{"class":100},[94,4488,3013],{"class":104},[94,4490,150],{"class":100},[94,4492,296],{"class":153},[94,4494,3020],{"class":104},[94,4496,1015],{"class":100},[94,4498,525],{"class":153},[94,4500,3020],{"class":104},[94,4502,2273],{"class":100},[94,4504,111],{"class":104},[94,4506,4507],{"class":96,"line":1298},[94,4508,2011],{"class":104},[94,4510,4511,4513,4515,4517,4519,4521],{"class":96,"line":1310},[94,4512,3432],{"class":104},[94,4514,1149],{"class":100},[94,4516,4335],{"class":104},[94,4518,1149],{"class":100},[94,4520,4340],{"class":209},[94,4522,1271],{"class":104},[94,4524,4525],{"class":96,"line":1593},[94,4526,2168],{"class":104},[94,4528,4529],{"class":96,"line":1598},[94,4530,4531],{"class":163},"    \u002F\u002F开始冒泡排序\n",[94,4533,4534],{"class":96,"line":1604},[94,4535,4536],{"class":163},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[94,4538,4539,4541,4543,4545,4547,4549,4551,4553,4555,4557,4559,4561,4563,4565],{"class":96,"line":1609},[94,4540,3182],{"class":100},[94,4542,1639],{"class":104},[94,4544,108],{"class":100},[94,4546,3013],{"class":104},[94,4548,150],{"class":100},[94,4550,296],{"class":153},[94,4552,3020],{"class":104},[94,4554,1015],{"class":100},[94,4556,525],{"class":153},[94,4558,637],{"class":100},[94,4560,322],{"class":153},[94,4562,3020],{"class":104},[94,4564,2273],{"class":100},[94,4566,111],{"class":104},[94,4568,4569],{"class":96,"line":1623},[94,4570,2011],{"class":104},[94,4572,4573],{"class":96,"line":1628},[94,4574,4575],{"class":163},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[94,4577,4578,4580,4582,4584,4586,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608],{"class":96,"line":1634},[94,4579,3384],{"class":100},[94,4581,1639],{"class":104},[94,4583,108],{"class":100},[94,4585,3391],{"class":104},[94,4587,150],{"class":100},[94,4589,296],{"class":153},[94,4591,3398],{"class":104},[94,4593,1015],{"class":100},[94,4595,525],{"class":153},[94,4597,637],{"class":100},[94,4599,546],{"class":104},[94,4601,637],{"class":100},[94,4603,322],{"class":153},[94,4605,3398],{"class":104},[94,4607,2273],{"class":100},[94,4609,111],{"class":104},[94,4611,4612],{"class":96,"line":1655},[94,4613,2491],{"class":104},[94,4615,4616],{"class":96,"line":1660},[94,4617,4618],{"class":163},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[94,4620,4621,4624,4627,4629,4632,4634,4636],{"class":96,"line":1674},[94,4622,4623],{"class":100},"            if",[94,4625,4626],{"class":104},"(arr[j]",[94,4628,1065],{"class":100},[94,4630,4631],{"class":104},"arr[j",[94,4633,586],{"class":100},[94,4635,322],{"class":153},[94,4637,4638],{"class":104},"])\n",[94,4640,4641],{"class":96,"line":1679},[94,4642,4643],{"class":104},"            {\n",[94,4645,4646,4649,4651,4653],{"class":96,"line":1708},[94,4647,4648],{"class":100},"                int",[94,4650,4236],{"class":104},[94,4652,150],{"class":100},[94,4654,4655],{"class":104},"arr[j];\n",[94,4657,4658,4661,4663,4665,4667,4669],{"class":96,"line":1713},[94,4659,4660],{"class":104},"                arr[j]",[94,4662,150],{"class":100},[94,4664,4631],{"class":104},[94,4666,586],{"class":100},[94,4668,322],{"class":153},[94,4670,4671],{"class":104},"];\n",[94,4673,4674,4677,4679,4681,4683,4685],{"class":96,"line":1730},[94,4675,4676],{"class":104},"                arr[j",[94,4678,586],{"class":100},[94,4680,322],{"class":153},[94,4682,1045],{"class":104},[94,4684,150],{"class":100},[94,4686,4261],{"class":104},[94,4688,4689],{"class":96,"line":1735},[94,4690,4691],{"class":104},"            }\n",[94,4693,4694],{"class":96,"line":1740},[94,4695,2510],{"class":104},[94,4697,4698],{"class":96,"line":1745},[94,4699,2168],{"class":104},[94,4701,4702,4704,4706,4709,4711],{"class":96,"line":1759},[94,4703,1532],{"class":104},[94,4705,1149],{"class":100},[94,4707,4708],{"class":209},"\"排序后：\"",[94,4710,1149],{"class":100},[94,4712,1172],{"class":104},[94,4714,4715,4717,4719,4721,4723,4725,4727,4729,4731,4733,4735,4737],{"class":96,"line":1764},[94,4716,3182],{"class":100},[94,4718,1639],{"class":104},[94,4720,108],{"class":100},[94,4722,3013],{"class":104},[94,4724,150],{"class":100},[94,4726,296],{"class":153},[94,4728,3020],{"class":104},[94,4730,1015],{"class":100},[94,4732,525],{"class":153},[94,4734,3020],{"class":104},[94,4736,2273],{"class":100},[94,4738,111],{"class":104},[94,4740,4741],{"class":96,"line":2558},[94,4742,2011],{"class":104},[94,4744,4745,4747,4749,4751,4753,4755],{"class":96,"line":2572},[94,4746,3432],{"class":104},[94,4748,1149],{"class":100},[94,4750,4335],{"class":104},[94,4752,1149],{"class":100},[94,4754,4340],{"class":209},[94,4756,1271],{"class":104},[94,4758,4759],{"class":96,"line":2580},[94,4760,2168],{"class":104},[94,4762,4763,4765,4767],{"class":96,"line":2585},[94,4764,4071],{"class":100},[94,4766,4074],{"class":153},[94,4768,1271],{"class":104},[94,4770,4771],{"class":96,"line":2591},[94,4772,1546],{"class":104},[65,4774,4776],{"id":4775},"_172二维数组","1.7.2二维数组",[48,4778,4779],{},[51,4780,4781],{},"二维数组的四种定义方式",[242,4783,4784,4793],{},[245,4785,4786],{},[248,4787,4788,4791],{},[251,4789,4790],{},"序号",[251,4792,3762],{},[289,4794,4795,4805,4814,4823,4832],{},[248,4796,4797,4799],{},[294,4798,322],{},[294,4800,4801,4802,160],{},"数据类型 数组名[行数]",[94,4803,4804],{},"列数",[248,4806,4807,4809],{},[294,4808,182],{},[294,4810,4801,4811,4813],{},[94,4812,4804],{},"={ {数据1,数据2}，{数据3，数据4}... }",[248,4815,4816,4818],{},[294,4817,176],{},[294,4819,4801,4820,4822],{},[94,4821,4804],{},"={数据1,数据2,数据3...}",[248,4824,4825,4827],{},[294,4826,398],{},[294,4828,4829,4830,4822],{},"数据类型 数组名[]",[94,4831,4804],{},[248,4833,4834,4837],{},[294,4835,4836],{},"注意：不能只省略列数",[294,4838],{},[48,4840,4841],{"start":15},[51,4842,4843],{},"二维数组数组名",[1112,4845,4846,4849],{},[51,4847,4848],{},"1.查看二维数组所占内存空间",[51,4850,4851],{},"2.获取二维数组首地址",[40,4853,4854],{},"已知二维数组，求二维数组的行数与列数",[85,4856,4858],{"className":87,"code":4857,"language":89,"meta":14,"style":14},"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",[91,4859,4860,4868,4872,4890,4894,4912,4928,4933,4958,4991],{"__ignoreMap":14},[94,4861,4862,4864,4866],{"class":96,"line":97},[94,4863,108],{"class":100},[94,4865,1954],{"class":1944},[94,4867,1957],{"class":104},[94,4869,4870],{"class":96,"line":15},[94,4871,1527],{"class":104},[94,4873,4874,4876,4878,4880,4883,4885,4887],{"class":96,"line":1160},[94,4875,1966],{"class":100},[94,4877,3943],{"class":104},[94,4879,182],{"class":153},[94,4881,4882],{"class":104},"][",[94,4884,176],{"class":153},[94,4886,1045],{"class":104},[94,4888,4889],{"class":100},"=\n",[94,4891,4892],{"class":96,"line":1175},[94,4893,2011],{"class":104},[94,4895,4896,4899,4901,4903,4905,4907,4909],{"class":96,"line":1181},[94,4897,4898],{"class":104},"        {",[94,4900,322],{"class":153},[94,4902,483],{"class":104},[94,4904,182],{"class":153},[94,4906,483],{"class":104},[94,4908,176],{"class":153},[94,4910,4911],{"class":104},"},\n",[94,4913,4914,4916,4918,4920,4922,4924,4926],{"class":96,"line":1195},[94,4915,4898],{"class":104},[94,4917,398],{"class":153},[94,4919,483],{"class":104},[94,4921,424],{"class":153},[94,4923,483],{"class":104},[94,4925,449],{"class":153},[94,4927,1546],{"class":104},[94,4929,4930],{"class":96,"line":1201},[94,4931,4932],{"class":104},"    };\n",[94,4934,4935,4937,4939,4942,4944,4946,4948,4950,4952,4954,4956],{"class":96,"line":1292},[94,4936,1532],{"class":104},[94,4938,1149],{"class":100},[94,4940,4941],{"class":209},"\"二维数组的行数\"",[94,4943,1353],{"class":100},[94,4945,4187],{"class":104},[94,4947,4190],{"class":100},[94,4949,3832],{"class":104},[94,4951,296],{"class":153},[94,4953,4197],{"class":104},[94,4955,1149],{"class":100},[94,4957,1172],{"class":104},[94,4959,4960,4962,4964,4967,4969,4971,4973,4975,4977,4979,4981,4983,4985,4987,4989],{"class":96,"line":1298},[94,4961,1532],{"class":104},[94,4963,1149],{"class":100},[94,4965,4966],{"class":209},"\"二维数组的列数\"",[94,4968,1353],{"class":100},[94,4970,3832],{"class":104},[94,4972,296],{"class":153},[94,4974,4197],{"class":104},[94,4976,4190],{"class":100},[94,4978,3832],{"class":104},[94,4980,296],{"class":153},[94,4982,4882],{"class":104},[94,4984,296],{"class":153},[94,4986,4197],{"class":104},[94,4988,1149],{"class":100},[94,4990,1172],{"class":104},[94,4992,4993],{"class":96,"line":1310},[94,4994,1546],{"class":104},[40,4996,4997],{},"查看二维数组首地址",[85,4999,5001],{"className":87,"code":5000,"language":89,"meta":14,"style":14},"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",[91,5002,5003,5020,5046,5071],{"__ignoreMap":14},[94,5004,5005,5007,5009,5012,5014,5016,5018],{"class":96,"line":97},[94,5006,1350],{"class":104},[94,5008,1149],{"class":100},[94,5010,5011],{"class":209},"\"二维数组首地址：\"",[94,5013,1149],{"class":100},[94,5015,3861],{"class":104},[94,5017,1149],{"class":100},[94,5019,1172],{"class":104},[94,5021,5022,5024,5026,5029,5031,5033,5035,5038,5040,5042,5044],{"class":96,"line":15},[94,5023,1350],{"class":104},[94,5025,1149],{"class":100},[94,5027,5028],{"class":209},"\"二维数组第一行的首地址：\"",[94,5030,1149],{"class":100},[94,5032,105],{"class":104},[94,5034,108],{"class":100},[94,5036,5037],{"class":104},")arr[",[94,5039,296],{"class":153},[94,5041,1045],{"class":104},[94,5043,1149],{"class":100},[94,5045,1172],{"class":104},[94,5047,5048,5050,5052,5055,5057,5059,5061,5063,5065,5067,5069],{"class":96,"line":1160},[94,5049,1350],{"class":104},[94,5051,1149],{"class":100},[94,5053,5054],{"class":209},"\"二维数组第二行的首地址：\"",[94,5056,1149],{"class":100},[94,5058,105],{"class":104},[94,5060,108],{"class":100},[94,5062,5037],{"class":104},[94,5064,322],{"class":153},[94,5066,1045],{"class":104},[94,5068,1149],{"class":100},[94,5070,1172],{"class":104},[94,5072,5073,5075,5077,5080,5082,5084,5086,5088,5090,5092,5094,5096,5098,5100,5102,5104],{"class":96,"line":1175},[94,5074,1350],{"class":104},[94,5076,1149],{"class":100},[94,5078,5079],{"class":209},"\"二维数组第一个元素的首地址:\"",[94,5081,1149],{"class":100},[94,5083,105],{"class":104},[94,5085,108],{"class":100},[94,5087,534],{"class":104},[94,5089,458],{"class":100},[94,5091,3887],{"class":104},[94,5093,296],{"class":153},[94,5095,4882],{"class":104},[94,5097,296],{"class":153},[94,5099,1045],{"class":104},[94,5101,1149],{"class":100},[94,5103,1219],{"class":104},[94,5105,5106],{"class":163},"\u002F\u002F对于数，要加取址符\n",[5108,5109,5110],"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":14,"searchDepth":15,"depth":15,"links":5112},[5113,5114,5115,5123,5124,5130,5135],{"id":37,"depth":15,"text":38},{"id":45,"depth":15,"text":46},{"id":62,"depth":15,"text":63,"children":5116},[5117,5118,5119,5120,5121,5122],{"id":67,"depth":1160,"text":68},{"id":121,"depth":1160,"text":122},{"id":190,"depth":1160,"text":191},{"id":1130,"depth":1160,"text":1131},{"id":1225,"depth":1160,"text":1226},{"id":1324,"depth":1160,"text":1325},{"id":1366,"depth":15,"text":1367},{"id":1434,"depth":15,"text":1435,"children":5125},[5126,5127,5128,5129],{"id":1438,"depth":1160,"text":1439},{"id":1460,"depth":1160,"text":1461},{"id":1469,"depth":1160,"text":1470},{"id":1478,"depth":1160,"text":1479},{"id":1487,"depth":15,"text":1488,"children":5131},[5132,5133,5134],{"id":1491,"depth":1160,"text":1492},{"id":2186,"depth":1160,"text":2187},{"id":3602,"depth":1160,"text":3603},{"id":3743,"depth":15,"text":3744,"children":5136},[5137,5138],{"id":3747,"depth":1160,"text":3748},{"id":4775,"depth":1160,"text":4776},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":28,"description":14},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5145,"title":5146,"body":5147,"description":14,"extension":18,"meta":6247,"navigation":20,"path":6248,"seo":6249,"stem":6250,"__hash__":6251},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5148,"toc":6239},[5149,5152,5156,5164,5172,5175,5241,5245,5248,5324,5328,5331,5334,5337,5550,5554,5559,5623,5628,5695,5700,5791,5794,5899,5903,5906,5912,6056,6060,6063,6077,6080,6125,6128,6236],[10,5150,5146],{"id":5151},"_2函数",[35,5153,5155],{"id":5154},"_21函数概述","2.1函数概述",[48,5157,5158,5161],{},[51,5159,5160],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[51,5162,5163],{},"语法：",[85,5165,5170],{"className":5166,"code":5168,"language":5169,"meta":14},[5167],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[91,5171,5168],{"__ignoreMap":14},[40,5173,5174],{},"小案例",[85,5176,5178],{"className":87,"code":5177,"language":89,"meta":14,"style":14},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[91,5179,5180,5185,5209,5213,5230,5237],{"__ignoreMap":14},[94,5181,5182],{"class":96,"line":97},[94,5183,5184],{"class":163},"\u002F\u002Fnum1,num2形参\n",[94,5186,5187,5189,5192,5194,5196,5200,5202,5204,5207],{"class":96,"line":15},[94,5188,108],{"class":100},[94,5190,5191],{"class":1944}," add",[94,5193,105],{"class":104},[94,5195,108],{"class":100},[94,5197,5199],{"class":5198},"s4XuR"," num1",[94,5201,483],{"class":104},[94,5203,108],{"class":100},[94,5205,5206],{"class":5198}," num2",[94,5208,111],{"class":104},[94,5210,5211],{"class":96,"line":1160},[94,5212,1527],{"class":104},[94,5214,5215,5217,5220,5222,5225,5227],{"class":96,"line":1175},[94,5216,1966],{"class":100},[94,5218,5219],{"class":104}," sum",[94,5221,150],{"class":100},[94,5223,5224],{"class":104},"num1",[94,5226,586],{"class":100},[94,5228,5229],{"class":104},"num2;\n",[94,5231,5232,5234],{"class":96,"line":1181},[94,5233,4071],{"class":100},[94,5235,5236],{"class":104}," sum;\n",[94,5238,5239],{"class":96,"line":1195},[94,5240,1546],{"class":104},[35,5242,5244],{"id":5243},"_22函数调用","2.2函数调用",[40,5246,5247],{},"调用刚刚写的求和函数",[85,5249,5251],{"className":87,"code":5250,"language":89,"meta":14,"style":14},"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",[91,5252,5253,5261,5265,5270,5282,5294,5303,5308,5320],{"__ignoreMap":14},[94,5254,5255,5257,5259],{"class":96,"line":97},[94,5256,108],{"class":100},[94,5258,1954],{"class":1944},[94,5260,1957],{"class":104},[94,5262,5263],{"class":96,"line":15},[94,5264,1527],{"class":104},[94,5266,5267],{"class":96,"line":1160},[94,5268,5269],{"class":163},"    \u002F\u002Fa,b实参\n",[94,5271,5272,5274,5276,5278,5280],{"class":96,"line":1175},[94,5273,1966],{"class":100},[94,5275,1379],{"class":104},[94,5277,150],{"class":100},[94,5279,296],{"class":153},[94,5281,1271],{"class":104},[94,5283,5284,5286,5288,5290,5292],{"class":96,"line":1181},[94,5285,1966],{"class":100},[94,5287,2814],{"class":104},[94,5289,150],{"class":100},[94,5291,296],{"class":153},[94,5293,1271],{"class":104},[94,5295,5296,5298,5300],{"class":96,"line":1195},[94,5297,1993],{"class":104},[94,5299,1410],{"class":100},[94,5301,5302],{"class":104},"a,b;\n",[94,5304,5305],{"class":96,"line":1201},[94,5306,5307],{"class":163},"    \u002F\u002F调用函数时，实参值传给了形参\n",[94,5309,5310,5312,5314,5317],{"class":96,"line":1292},[94,5311,1532],{"class":104},[94,5313,1149],{"class":100},[94,5315,5316],{"class":1944},"add",[94,5318,5319],{"class":104},"(a,b);\n",[94,5321,5322],{"class":96,"line":1298},[94,5323,1546],{"class":104},[35,5325,5327],{"id":5326},"_23值传递","2.3值传递",[40,5329,5330],{},"值传递就是函数调用时实参将数值传给形参",[40,5332,5333],{},"值传递时，如果形参发生任何改变，不会影响实参",[40,5335,5336],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[85,5338,5340],{"className":87,"code":5339,"language":89,"meta":14,"style":14},"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",[91,5341,5342,5364,5368,5381,5398,5416,5427,5436,5445,5458,5474,5490,5499,5503,5511,5515,5527,5539,5546],{"__ignoreMap":14},[94,5343,5344,5347,5350,5352,5354,5356,5358,5360,5362],{"class":96,"line":97},[94,5345,5346],{"class":100},"void",[94,5348,5349],{"class":1944}," swap",[94,5351,105],{"class":104},[94,5353,108],{"class":100},[94,5355,5199],{"class":5198},[94,5357,483],{"class":104},[94,5359,108],{"class":100},[94,5361,5206],{"class":5198},[94,5363,111],{"class":104},[94,5365,5366],{"class":96,"line":15},[94,5367,1527],{"class":104},[94,5369,5370,5372,5374,5377,5379],{"class":96,"line":1160},[94,5371,1532],{"class":104},[94,5373,1149],{"class":100},[94,5375,5376],{"class":209},"\"交换前：\"",[94,5378,1149],{"class":100},[94,5380,1172],{"class":104},[94,5382,5383,5385,5387,5390,5392,5394,5396],{"class":96,"line":1175},[94,5384,1532],{"class":104},[94,5386,1149],{"class":100},[94,5388,5389],{"class":209},"\"num1=\"",[94,5391,1149],{"class":100},[94,5393,5224],{"class":104},[94,5395,1149],{"class":100},[94,5397,1172],{"class":104},[94,5399,5400,5402,5404,5407,5409,5412,5414],{"class":96,"line":1181},[94,5401,1532],{"class":104},[94,5403,1149],{"class":100},[94,5405,5406],{"class":209},"\"num2=\"",[94,5408,1149],{"class":100},[94,5410,5411],{"class":104},"num2",[94,5413,1149],{"class":100},[94,5415,1172],{"class":104},[94,5417,5418,5420,5422,5424],{"class":96,"line":1195},[94,5419,1966],{"class":100},[94,5421,4236],{"class":104},[94,5423,150],{"class":100},[94,5425,5426],{"class":104},"num1;\n",[94,5428,5429,5432,5434],{"class":96,"line":1201},[94,5430,5431],{"class":104},"    num1",[94,5433,150],{"class":100},[94,5435,5229],{"class":104},[94,5437,5438,5441,5443],{"class":96,"line":1292},[94,5439,5440],{"class":104},"    num2",[94,5442,150],{"class":100},[94,5444,4261],{"class":104},[94,5446,5447,5449,5451,5454,5456],{"class":96,"line":1298},[94,5448,1532],{"class":104},[94,5450,1149],{"class":100},[94,5452,5453],{"class":209},"\"交换后：\"",[94,5455,1149],{"class":100},[94,5457,1172],{"class":104},[94,5459,5460,5462,5464,5466,5468,5470,5472],{"class":96,"line":1310},[94,5461,1532],{"class":104},[94,5463,1149],{"class":100},[94,5465,5389],{"class":209},[94,5467,1149],{"class":100},[94,5469,5224],{"class":104},[94,5471,1149],{"class":100},[94,5473,1172],{"class":104},[94,5475,5476,5478,5480,5482,5484,5486,5488],{"class":96,"line":1593},[94,5477,1532],{"class":104},[94,5479,1149],{"class":100},[94,5481,5406],{"class":209},[94,5483,1149],{"class":100},[94,5485,5411],{"class":104},[94,5487,1149],{"class":100},[94,5489,1172],{"class":104},[94,5491,5492,5494,5496],{"class":96,"line":1598},[94,5493,4071],{"class":100},[94,5495,160],{"class":104},[94,5497,5498],{"class":163},"\u002F\u002F或者不写\n",[94,5500,5501],{"class":96,"line":1604},[94,5502,1546],{"class":104},[94,5504,5505,5507,5509],{"class":96,"line":1609},[94,5506,108],{"class":100},[94,5508,1954],{"class":1944},[94,5510,1957],{"class":104},[94,5512,5513],{"class":96,"line":1623},[94,5514,1527],{"class":104},[94,5516,5517,5519,5521,5523,5525],{"class":96,"line":1628},[94,5518,1966],{"class":100},[94,5520,1379],{"class":104},[94,5522,150],{"class":100},[94,5524,551],{"class":153},[94,5526,1271],{"class":104},[94,5528,5529,5531,5533,5535,5537],{"class":96,"line":1634},[94,5530,1966],{"class":100},[94,5532,2814],{"class":104},[94,5534,150],{"class":100},[94,5536,805],{"class":153},[94,5538,1271],{"class":104},[94,5540,5541,5544],{"class":96,"line":1655},[94,5542,5543],{"class":1944},"    swap",[94,5545,5319],{"class":104},[94,5547,5548],{"class":96,"line":1660},[94,5549,1546],{"class":104},[35,5551,5553],{"id":5552},"_24函数的常见形式","2.4函数的常见形式",[48,5555,5556],{},[51,5557,5558],{},"无参无返",[85,5560,5562],{"className":87,"code":5561,"language":89,"meta":14,"style":14},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[91,5563,5564,5573,5577,5590,5594,5602,5606,5611,5619],{"__ignoreMap":14},[94,5565,5566,5568,5571],{"class":96,"line":97},[94,5567,5346],{"class":100},[94,5569,5570],{"class":1944}," test01",[94,5572,1957],{"class":104},[94,5574,5575],{"class":96,"line":15},[94,5576,1527],{"class":104},[94,5578,5579,5581,5583,5586,5588],{"class":96,"line":1160},[94,5580,1532],{"class":104},[94,5582,1149],{"class":100},[94,5584,5585],{"class":209},"\"你好\"",[94,5587,1149],{"class":100},[94,5589,1172],{"class":104},[94,5591,5592],{"class":96,"line":1175},[94,5593,1546],{"class":104},[94,5595,5596,5598,5600],{"class":96,"line":1181},[94,5597,108],{"class":100},[94,5599,1954],{"class":1944},[94,5601,1957],{"class":104},[94,5603,5604],{"class":96,"line":1195},[94,5605,1527],{"class":104},[94,5607,5608],{"class":96,"line":1201},[94,5609,5610],{"class":163},"    \u002F\u002F函数调用\n",[94,5612,5613,5616],{"class":96,"line":1292},[94,5614,5615],{"class":1944},"    test01",[94,5617,5618],{"class":104},"();\n",[94,5620,5621],{"class":96,"line":1298},[94,5622,1546],{"class":104},[48,5624,5625],{"start":15},[51,5626,5627],{},"有参无返",[85,5629,5631],{"className":87,"code":5630,"language":89,"meta":14,"style":14},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[91,5632,5633,5648,5652,5664,5668,5676,5680,5691],{"__ignoreMap":14},[94,5634,5635,5637,5640,5642,5644,5646],{"class":96,"line":97},[94,5636,5346],{"class":100},[94,5638,5639],{"class":1944}," test02",[94,5641,105],{"class":104},[94,5643,108],{"class":100},[94,5645,1379],{"class":5198},[94,5647,111],{"class":104},[94,5649,5650],{"class":96,"line":15},[94,5651,1527],{"class":104},[94,5653,5654,5656,5658,5660,5662],{"class":96,"line":1160},[94,5655,1532],{"class":104},[94,5657,1149],{"class":100},[94,5659,5585],{"class":209},[94,5661,1149],{"class":100},[94,5663,1172],{"class":104},[94,5665,5666],{"class":96,"line":1175},[94,5667,1546],{"class":104},[94,5669,5670,5672,5674],{"class":96,"line":1181},[94,5671,108],{"class":100},[94,5673,1954],{"class":1944},[94,5675,1957],{"class":104},[94,5677,5678],{"class":96,"line":1195},[94,5679,1527],{"class":104},[94,5681,5682,5685,5687,5689],{"class":96,"line":1201},[94,5683,5684],{"class":1944},"    test02",[94,5686,105],{"class":104},[94,5688,416],{"class":153},[94,5690,2700],{"class":104},[94,5692,5693],{"class":96,"line":1292},[94,5694,1546],{"class":104},[48,5696,5697],{"start":1160},[51,5698,5699],{},"无参有返",[85,5701,5703],{"className":87,"code":5702,"language":89,"meta":14,"style":14},"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",[91,5704,5705,5714,5718,5730,5739,5743,5751,5755,5768,5787],{"__ignoreMap":14},[94,5706,5707,5709,5712],{"class":96,"line":97},[94,5708,108],{"class":100},[94,5710,5711],{"class":1944}," test03",[94,5713,1957],{"class":104},[94,5715,5716],{"class":96,"line":15},[94,5717,1527],{"class":104},[94,5719,5720,5722,5724,5726,5728],{"class":96,"line":1160},[94,5721,1532],{"class":104},[94,5723,1149],{"class":100},[94,5725,5585],{"class":209},[94,5727,1149],{"class":100},[94,5729,1172],{"class":104},[94,5731,5732,5734,5737],{"class":96,"line":1175},[94,5733,4071],{"class":100},[94,5735,5736],{"class":153}," 100",[94,5738,1271],{"class":104},[94,5740,5741],{"class":96,"line":1181},[94,5742,1546],{"class":104},[94,5744,5745,5747,5749],{"class":96,"line":1195},[94,5746,108],{"class":100},[94,5748,1954],{"class":1944},[94,5750,1957],{"class":104},[94,5752,5753],{"class":96,"line":1201},[94,5754,1527],{"class":104},[94,5756,5757,5759,5761,5763,5766],{"class":96,"line":1292},[94,5758,1966],{"class":100},[94,5760,5199],{"class":104},[94,5762,150],{"class":100},[94,5764,5765],{"class":1944},"test03",[94,5767,5618],{"class":104},[94,5769,5770,5772,5774,5776,5778,5780,5782,5784],{"class":96,"line":1298},[94,5771,1532],{"class":104},[94,5773,1149],{"class":100},[94,5775,5389],{"class":209},[94,5777,1149],{"class":100},[94,5779,5224],{"class":104},[94,5781,1149],{"class":100},[94,5783,1219],{"class":104},[94,5785,5786],{"class":163}," \u002F\u002F100\n",[94,5788,5789],{"class":96,"line":1310},[94,5790,1546],{"class":104},[40,5792,5793],{},"4.有参有返",[85,5795,5797],{"className":87,"code":5796,"language":89,"meta":14,"style":14},"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",[91,5798,5799,5814,5818,5831,5837,5841,5850,5854,5866,5880,5895],{"__ignoreMap":14},[94,5800,5801,5803,5806,5808,5810,5812],{"class":96,"line":97},[94,5802,108],{"class":100},[94,5804,5805],{"class":1944}," test04",[94,5807,105],{"class":104},[94,5809,108],{"class":100},[94,5811,1379],{"class":5198},[94,5813,111],{"class":104},[94,5815,5816],{"class":96,"line":15},[94,5817,1527],{"class":104},[94,5819,5820,5822,5824,5827,5829],{"class":96,"line":1160},[94,5821,1532],{"class":104},[94,5823,1149],{"class":100},[94,5825,5826],{"class":209},"\"hello\"",[94,5828,1149],{"class":100},[94,5830,1172],{"class":104},[94,5832,5833,5835],{"class":96,"line":1175},[94,5834,4071],{"class":100},[94,5836,1413],{"class":104},[94,5838,5839],{"class":96,"line":1181},[94,5840,1546],{"class":104},[94,5842,5843,5845,5848],{"class":96,"line":1195},[94,5844,108],{"class":100},[94,5846,5847],{"class":1944}," mian",[94,5849,1957],{"class":104},[94,5851,5852],{"class":96,"line":1201},[94,5853,1527],{"class":104},[94,5855,5856,5858,5860,5862,5864],{"class":96,"line":1292},[94,5857,1966],{"class":100},[94,5859,2814],{"class":104},[94,5861,150],{"class":100},[94,5863,322],{"class":153},[94,5865,1271],{"class":104},[94,5867,5868,5870,5872,5874,5877],{"class":96,"line":1298},[94,5869,1966],{"class":100},[94,5871,2830],{"class":104},[94,5873,150],{"class":100},[94,5875,5876],{"class":1944},"test04",[94,5878,5879],{"class":104},"(b);\n",[94,5881,5882,5884,5886,5888,5890,5892],{"class":96,"line":1310},[94,5883,1532],{"class":104},[94,5885,1149],{"class":100},[94,5887,393],{"class":104},[94,5889,1149],{"class":100},[94,5891,1219],{"class":104},[94,5893,5894],{"class":163}," \u002F\u002F1\n",[94,5896,5897],{"class":96,"line":1593},[94,5898,1546],{"class":104},[35,5900,5902],{"id":5901},"_25函数的声明","2.5函数的声明",[40,5904,5905],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[40,5907,5908,5909],{},"函数的",[254,5910,5911],{},"声明可以多次，但是函数的定义只能有一次",[85,5913,5915],{"className":87,"code":5914,"language":89,"meta":14,"style":14},"\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",[91,5916,5917,5922,5927,5952,5961,5965,5977,5989,6005,6009,6029,6033,6052],{"__ignoreMap":14},[94,5918,5919],{"class":96,"line":97},[94,5920,5921],{"class":163},"\u002F\u002F函数声明\n",[94,5923,5924],{"class":96,"line":15},[94,5925,5926],{"class":163},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[94,5928,5929,5931,5934,5936,5938,5940,5942,5944,5946,5949],{"class":96,"line":1160},[94,5930,108],{"class":100},[94,5932,5933],{"class":1944}," max",[94,5935,105],{"class":104},[94,5937,108],{"class":100},[94,5939,1379],{"class":5198},[94,5941,483],{"class":104},[94,5943,108],{"class":100},[94,5945,2814],{"class":5198},[94,5947,5948],{"class":104},");",[94,5950,5951],{"class":163},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[94,5953,5954,5956,5958],{"class":96,"line":1175},[94,5955,108],{"class":100},[94,5957,1954],{"class":1944},[94,5959,5960],{"class":104},"() \n",[94,5962,5963],{"class":96,"line":1181},[94,5964,1527],{"class":104},[94,5966,5967,5969,5971,5973,5975],{"class":96,"line":1195},[94,5968,1966],{"class":100},[94,5970,1379],{"class":104},[94,5972,150],{"class":100},[94,5974,551],{"class":153},[94,5976,1271],{"class":104},[94,5978,5979,5981,5983,5985,5987],{"class":96,"line":1201},[94,5980,1966],{"class":100},[94,5982,2814],{"class":104},[94,5984,150],{"class":100},[94,5986,805],{"class":153},[94,5988,1271],{"class":104},[94,5990,5991,5993,5995,5998,6001,6003],{"class":96,"line":1292},[94,5992,1532],{"class":104},[94,5994,1149],{"class":100},[94,5996,5997],{"class":1944},"max",[94,5999,6000],{"class":104},"(a,b)",[94,6002,1149],{"class":100},[94,6004,1172],{"class":104},[94,6006,6007],{"class":96,"line":1298},[94,6008,1546],{"class":104},[94,6010,6011,6013,6015,6017,6019,6021,6023,6025,6027],{"class":96,"line":1310},[94,6012,108],{"class":100},[94,6014,5933],{"class":1944},[94,6016,105],{"class":104},[94,6018,108],{"class":100},[94,6020,1379],{"class":5198},[94,6022,483],{"class":104},[94,6024,108],{"class":100},[94,6026,2814],{"class":5198},[94,6028,111],{"class":104},[94,6030,6031],{"class":96,"line":1593},[94,6032,1527],{"class":104},[94,6034,6035,6037,6039,6041,6043,6045,6047,6049],{"class":96,"line":1598},[94,6036,4071],{"class":100},[94,6038,1379],{"class":104},[94,6040,1065],{"class":100},[94,6042,368],{"class":104},[94,6044,1091],{"class":100},[94,6046,343],{"class":104},[94,6048,964],{"class":100},[94,6050,6051],{"class":104},"b;\n",[94,6053,6054],{"class":96,"line":1604},[94,6055,1546],{"class":104},[35,6057,6059],{"id":6058},"_26函数的分文件编写","2.6函数的分文件编写",[40,6061,6062],{},"4个步骤：",[1112,6064,6065,6068,6071,6074],{},[51,6066,6067],{},"1.创建后缀名为.h的头文件",[51,6069,6070],{},"2.创建后缀名为.cpp的源文件",[51,6072,6073],{},"3.在头文件中写函数的定义",[51,6075,6076],{},"4.在源文件中写函数的定义\n示例：",[40,6078,6079],{},"头文件：swap.h",[85,6081,6083],{"className":87,"code":6082,"language":89,"meta":14,"style":14},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[91,6084,6085,6091,6101,6105],{"__ignoreMap":14},[94,6086,6087,6089],{"class":96,"line":97},[94,6088,1930],{"class":100},[94,6090,1933],{"class":209},[94,6092,6093,6095,6097,6099],{"class":96,"line":15},[94,6094,1938],{"class":100},[94,6096,1941],{"class":100},[94,6098,1945],{"class":1944},[94,6100,1271],{"class":104},[94,6102,6103],{"class":96,"line":1160},[94,6104,5921],{"class":163},[94,6106,6107,6109,6111,6113,6115,6117,6119,6121,6123],{"class":96,"line":1175},[94,6108,5346],{"class":100},[94,6110,5349],{"class":1944},[94,6112,105],{"class":104},[94,6114,108],{"class":100},[94,6116,1379],{"class":5198},[94,6118,483],{"class":104},[94,6120,108],{"class":100},[94,6122,2814],{"class":5198},[94,6124,2700],{"class":104},[40,6126,6127],{},"源文件：swap.cpp",[85,6129,6131],{"className":87,"code":6130,"language":89,"meta":14,"style":14},"#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",[91,6132,6133,6140,6145,6165,6169,6180,6189,6198,6215,6232],{"__ignoreMap":14},[94,6134,6135,6137],{"class":96,"line":97},[94,6136,1930],{"class":100},[94,6138,6139],{"class":209}," \"swap.h\"\n",[94,6141,6142],{"class":96,"line":15},[94,6143,6144],{"class":163},"\u002F\u002F函数的定义\n",[94,6146,6147,6149,6151,6153,6155,6157,6159,6161,6163],{"class":96,"line":1160},[94,6148,5346],{"class":100},[94,6150,5349],{"class":1944},[94,6152,105],{"class":104},[94,6154,108],{"class":100},[94,6156,1379],{"class":5198},[94,6158,483],{"class":104},[94,6160,108],{"class":100},[94,6162,2814],{"class":5198},[94,6164,111],{"class":104},[94,6166,6167],{"class":96,"line":1175},[94,6168,1527],{"class":104},[94,6170,6171,6173,6175,6177],{"class":96,"line":1181},[94,6172,1966],{"class":100},[94,6174,4236],{"class":104},[94,6176,150],{"class":100},[94,6178,6179],{"class":104},"a;\n",[94,6181,6182,6185,6187],{"class":96,"line":1195},[94,6183,6184],{"class":104},"    a",[94,6186,150],{"class":100},[94,6188,6051],{"class":104},[94,6190,6191,6194,6196],{"class":96,"line":1201},[94,6192,6193],{"class":104},"    b",[94,6195,150],{"class":100},[94,6197,4261],{"class":104},[94,6199,6200,6202,6204,6207,6209,6211,6213],{"class":96,"line":1292},[94,6201,1532],{"class":104},[94,6203,1149],{"class":100},[94,6205,6206],{"class":209},"\"a=\"",[94,6208,1149],{"class":100},[94,6210,343],{"class":104},[94,6212,1149],{"class":100},[94,6214,1172],{"class":104},[94,6216,6217,6219,6221,6224,6226,6228,6230],{"class":96,"line":1298},[94,6218,1532],{"class":104},[94,6220,1149],{"class":100},[94,6222,6223],{"class":209},"\"b=\"",[94,6225,1149],{"class":100},[94,6227,368],{"class":104},[94,6229,1149],{"class":100},[94,6231,1172],{"class":104},[94,6233,6234],{"class":96,"line":1310},[94,6235,1546],{"class":104},[5108,6237,6238],{},"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":14,"searchDepth":15,"depth":15,"links":6240},[6241,6242,6243,6244,6245,6246],{"id":5154,"depth":15,"text":5155},{"id":5243,"depth":15,"text":5244},{"id":5326,"depth":15,"text":5327},{"id":5552,"depth":15,"text":5553},{"id":5901,"depth":15,"text":5902},{"id":6058,"depth":15,"text":6059},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5146,"description":14},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6253,"title":6254,"body":6255,"description":6262,"extension":18,"meta":7667,"navigation":20,"path":7668,"seo":7669,"stem":7670,"__hash__":7671},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6256,"toc":7657},[6257,6260,6263,6267,6429,6433,6436,6439,6442,6445,6585,6589,6592,6595,6598,6663,6667,6672,6739,6742,6746,6749,6760,6765,6785,6788,6793,6812,6815,6819,6838,6841,6845,7080,7084,7087,7090,7093,7255,7258,7262,7265,7271,7654],[10,6258,6254],{"id":6259},"_3指针",[40,6261,6262],{},"通过指针保存一个地址，指针就是个地址",[35,6264,6266],{"id":6265},"_31定义指针","3.1定义指针",[85,6268,6270],{"className":87,"code":6269,"language":89,"meta":14,"style":14},"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",[91,6271,6272,6280,6284,6289,6301,6306,6314,6324,6342,6362,6366,6371,6376,6381,6395,6411,6425],{"__ignoreMap":14},[94,6273,6274,6276,6278],{"class":96,"line":97},[94,6275,108],{"class":100},[94,6277,1954],{"class":1944},[94,6279,1957],{"class":104},[94,6281,6282],{"class":96,"line":15},[94,6283,1527],{"class":104},[94,6285,6286],{"class":96,"line":1160},[94,6287,6288],{"class":163},"    \u002F\u002F1.定义指针\n",[94,6290,6291,6293,6295,6297,6299],{"class":96,"line":1175},[94,6292,1966],{"class":100},[94,6294,1379],{"class":104},[94,6296,150],{"class":100},[94,6298,551],{"class":153},[94,6300,1271],{"class":104},[94,6302,6303],{"class":96,"line":1181},[94,6304,6305],{"class":163},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[94,6307,6308,6311],{"class":96,"line":1195},[94,6309,6310],{"class":100},"    int*",[94,6312,6313],{"class":104},"p;\n",[94,6315,6316,6319,6322],{"class":96,"line":1201},[94,6317,6318],{"class":104},"    p",[94,6320,6321],{"class":100},"=&",[94,6323,6179],{"class":104},[94,6325,6326,6328,6330,6333,6336,6338,6340],{"class":96,"line":1292},[94,6327,1532],{"class":104},[94,6329,1149],{"class":100},[94,6331,6332],{"class":209},"\"a的地址为：\"",[94,6334,6335],{"class":100},"\u003C\u003C&",[94,6337,343],{"class":104},[94,6339,1149],{"class":100},[94,6341,1172],{"class":104},[94,6343,6344,6346,6348,6351,6353,6355,6357,6359],{"class":96,"line":1298},[94,6345,1532],{"class":104},[94,6347,1149],{"class":100},[94,6349,6350],{"class":209},"\"指针p为：\"",[94,6352,1149],{"class":100},[94,6354,40],{"class":104},[94,6356,1149],{"class":100},[94,6358,1219],{"class":104},[94,6360,6361],{"class":163},"\u002F\u002F指针p表示的就是a的地址\n",[94,6363,6364],{"class":96,"line":1310},[94,6365,2381],{"emptyLinePlaceholder":20},[94,6367,6368],{"class":96,"line":1593},[94,6369,6370],{"class":163},"    \u002F\u002F2.使用指针\n",[94,6372,6373],{"class":96,"line":1598},[94,6374,6375],{"class":163},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[94,6377,6378],{"class":96,"line":1604},[94,6379,6380],{"class":163},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[94,6382,6383,6386,6388,6390,6393],{"class":96,"line":1609},[94,6384,6385],{"class":100},"    *",[94,6387,40],{"class":104},[94,6389,150],{"class":100},[94,6391,6392],{"class":153},"1000",[94,6394,1271],{"class":104},[94,6396,6397,6399,6402,6404,6406,6408],{"class":96,"line":1623},[94,6398,1532],{"class":104},[94,6400,6401],{"class":100},"\u003C\u003C*",[94,6403,40],{"class":104},[94,6405,1149],{"class":100},[94,6407,1219],{"class":104},[94,6409,6410],{"class":163},"\u002F\u002F1000\n",[94,6412,6413,6415,6417,6419,6421,6423],{"class":96,"line":1628},[94,6414,1532],{"class":104},[94,6416,1149],{"class":100},[94,6418,343],{"class":104},[94,6420,1149],{"class":100},[94,6422,1219],{"class":104},[94,6424,6410],{"class":163},[94,6426,6427],{"class":96,"line":1634},[94,6428,1546],{"class":104},[35,6430,6432],{"id":6431},"_32指针所占的内存空间","3.2指针所占的内存空间",[40,6434,6435],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[40,6437,6438],{},"在32位操作系统下：占用4个字节空间",[40,6440,6441],{},"在64位操作系统下：占用8个字节空间",[40,6443,6444],{},"上方是不管啥数据类型的",[85,6446,6448],{"className":87,"code":6447,"language":89,"meta":14,"style":14},"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",[91,6449,6450,6458,6462,6467,6479,6484,6489,6494,6507,6529,6555,6581],{"__ignoreMap":14},[94,6451,6452,6454,6456],{"class":96,"line":97},[94,6453,108],{"class":100},[94,6455,1954],{"class":1944},[94,6457,1957],{"class":104},[94,6459,6460],{"class":96,"line":15},[94,6461,1527],{"class":104},[94,6463,6464],{"class":96,"line":1160},[94,6465,6466],{"class":163},"    \u002F\u002F指针所占内存空间\n",[94,6468,6469,6471,6473,6475,6477],{"class":96,"line":1175},[94,6470,1966],{"class":100},[94,6472,1379],{"class":104},[94,6474,150],{"class":100},[94,6476,551],{"class":153},[94,6478,1271],{"class":104},[94,6480,6481],{"class":96,"line":1181},[94,6482,6483],{"class":163},"    \u002F\u002Fint *p;\n",[94,6485,6486],{"class":96,"line":1195},[94,6487,6488],{"class":163},"    \u002F\u002Fp=&a;\n",[94,6490,6491],{"class":96,"line":1201},[94,6492,6493],{"class":163},"    \u002F\u002F上述可以写为以下：\n",[94,6495,6496,6498,6501,6503,6505],{"class":96,"line":1292},[94,6497,1966],{"class":100},[94,6499,6500],{"class":100}," *",[94,6502,40],{"class":104},[94,6504,6321],{"class":100},[94,6506,6179],{"class":104},[94,6508,6509,6512,6514,6517,6519,6522,6524,6526],{"class":96,"line":1298},[94,6510,6511],{"class":104},"    cout ",[94,6513,1149],{"class":100},[94,6515,6516],{"class":209},"\"sizeof(int *)\"",[94,6518,1353],{"class":100},[94,6520,6521],{"class":104},"(p)",[94,6523,1149],{"class":100},[94,6525,1219],{"class":104},[94,6527,6528],{"class":163},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[94,6530,6531,6533,6535,6537,6539,6541,6543,6545,6547,6549,6552],{"class":96,"line":1310},[94,6532,6511],{"class":104},[94,6534,1149],{"class":100},[94,6536,6516],{"class":209},[94,6538,1353],{"class":100},[94,6540,105],{"class":104},[94,6542,108],{"class":100},[94,6544,6500],{"class":100},[94,6546,534],{"class":104},[94,6548,1149],{"class":100},[94,6550,6551],{"class":104},"endl",[94,6553,6554],{"class":163},"  \u002F\u002F4字节(32位的话)\n",[94,6556,6557,6559,6561,6564,6566,6568,6570,6572,6574,6576,6578],{"class":96,"line":1593},[94,6558,6511],{"class":104},[94,6560,1149],{"class":100},[94,6562,6563],{"class":209},"\"sizeof(char *)\"",[94,6565,1353],{"class":100},[94,6567,105],{"class":104},[94,6569,201],{"class":100},[94,6571,6500],{"class":100},[94,6573,534],{"class":104},[94,6575,1149],{"class":100},[94,6577,1219],{"class":104},[94,6579,6580],{"class":163}," \u002F\u002F4字节(32位的话)\n",[94,6582,6583],{"class":96,"line":1598},[94,6584,1546],{"class":104},[35,6586,6588],{"id":6587},"_33空指针","3.3空指针",[40,6590,6591],{},"空指针：指针变量指向内存中编号为0的空间",[40,6593,6594],{},"用途：初始化指针变量",[40,6596,6597],{},"注意：空指针指向的内存是不可以访问的",[85,6599,6601],{"className":87,"code":6600,"language":89,"meta":14,"style":14},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[91,6602,6603,6611,6615,6620,6634,6639,6654,6659],{"__ignoreMap":14},[94,6604,6605,6607,6609],{"class":96,"line":97},[94,6606,108],{"class":100},[94,6608,1954],{"class":1944},[94,6610,1957],{"class":104},[94,6612,6613],{"class":96,"line":15},[94,6614,1527],{"class":104},[94,6616,6617],{"class":96,"line":1160},[94,6618,6619],{"class":163},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[94,6621,6622,6624,6626,6628,6630,6632],{"class":96,"line":1175},[94,6623,1966],{"class":100},[94,6625,6500],{"class":100},[94,6627,40],{"class":104},[94,6629,150],{"class":100},[94,6631,2373],{"class":153},[94,6633,1271],{"class":104},[94,6635,6636],{"class":96,"line":1181},[94,6637,6638],{"class":163},"    \u002F\u002F2.空指针不能进行访问\n",[94,6640,6641,6643,6645,6647,6649,6651],{"class":96,"line":1195},[94,6642,6385],{"class":100},[94,6644,40],{"class":104},[94,6646,150],{"class":100},[94,6648,416],{"class":153},[94,6650,160],{"class":104},[94,6652,6653],{"class":163},"\u002F\u002F直接报错，压根不能访问\n",[94,6655,6656],{"class":96,"line":1201},[94,6657,6658],{"class":163},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[94,6660,6661],{"class":96,"line":1292},[94,6662,1546],{"class":104},[35,6664,6666],{"id":6665},"_34野指针","3.4野指针",[40,6668,6669],{},[254,6670,6671],{},"指针变量指向非法的内存空间",[85,6673,6675],{"className":87,"code":6674,"language":89,"meta":14,"style":14},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[91,6676,6677,6685,6689,6718,6723,6735],{"__ignoreMap":14},[94,6678,6679,6681,6683],{"class":96,"line":97},[94,6680,108],{"class":100},[94,6682,1954],{"class":1944},[94,6684,1957],{"class":104},[94,6686,6687],{"class":96,"line":15},[94,6688,1527],{"class":104},[94,6690,6691,6693,6695,6697,6699,6701,6703,6705,6707,6710,6713,6715],{"class":96,"line":1160},[94,6692,1966],{"class":100},[94,6694,6500],{"class":100},[94,6696,40],{"class":104},[94,6698,150],{"class":100},[94,6700,105],{"class":104},[94,6702,108],{"class":100},[94,6704,6500],{"class":100},[94,6706,534],{"class":104},[94,6708,6709],{"class":100},"0x",[94,6711,6712],{"class":153},"1100",[94,6714,160],{"class":104},[94,6716,6717],{"class":163}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[94,6719,6720],{"class":96,"line":1175},[94,6721,6722],{"class":163},"    \u002F\u002F访问野指针报错\n",[94,6724,6725,6727,6729,6731,6733],{"class":96,"line":1181},[94,6726,1532],{"class":104},[94,6728,6401],{"class":100},[94,6730,40],{"class":104},[94,6732,1149],{"class":100},[94,6734,1172],{"class":104},[94,6736,6737],{"class":96,"line":1195},[94,6738,1546],{"class":104},[40,6740,6741],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[35,6743,6745],{"id":6744},"_35const修饰指针","3.5const修饰指针",[40,6747,6748],{},"三种情况：",[1112,6750,6751,6754,6757],{},[51,6752,6753],{},"const修饰指针 常量指针",[51,6755,6756],{},"const修饰常量 指针常量",[51,6758,6759],{},"const即修饰指针，又修饰常量",[48,6761,6762],{},[51,6763,6764],{},"常量指针",[85,6766,6768],{"className":87,"code":6767,"language":89,"meta":14,"style":14},"const int *p=&a;\n",[91,6769,6770],{"__ignoreMap":14},[94,6771,6772,6775,6777,6779,6781,6783],{"class":96,"line":97},[94,6773,6774],{"class":100},"const",[94,6776,2363],{"class":100},[94,6778,6500],{"class":100},[94,6780,40],{"class":104},[94,6782,6321],{"class":100},[94,6784,6179],{"class":104},[40,6786,6787],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[48,6789,6790],{"start":15},[51,6791,6792],{},"指针常量",[85,6794,6796],{"className":87,"code":6795,"language":89,"meta":14,"style":14},"int *const p=&a;\n",[91,6797,6798],{"__ignoreMap":14},[94,6799,6800,6802,6805,6808,6810],{"class":96,"line":97},[94,6801,108],{"class":100},[94,6803,6804],{"class":100}," *const",[94,6806,6807],{"class":104}," p",[94,6809,6321],{"class":100},[94,6811,6179],{"class":104},[40,6813,6814],{},"指针的指向不可以改，指针指向的值可以改",[48,6816,6817],{"start":1160},[51,6818,6759],{},[85,6820,6822],{"className":87,"code":6821,"language":89,"meta":14,"style":14},"const int *const p=&a;\n",[91,6823,6824],{"__ignoreMap":14},[94,6825,6826,6828,6830,6832,6834,6836],{"class":96,"line":97},[94,6827,6774],{"class":100},[94,6829,2363],{"class":100},[94,6831,6804],{"class":100},[94,6833,6807],{"class":104},[94,6835,6321],{"class":100},[94,6837,6179],{"class":104},[40,6839,6840],{},"指针的指向和指针指向的值都不可以改变",[35,6842,6844],{"id":6843},"_36指针和数组","3.6指针和数组",[85,6846,6848],{"className":87,"code":6847,"language":89,"meta":14,"style":14},"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",[91,6849,6850,6858,6862,6867,6921,6942,6958,6974,6985,7002,7007,7021,7047,7051,7063,7072,7076],{"__ignoreMap":14},[94,6851,6852,6854,6856],{"class":96,"line":97},[94,6853,108],{"class":100},[94,6855,1954],{"class":1944},[94,6857,1957],{"class":104},[94,6859,6860],{"class":96,"line":15},[94,6861,1527],{"class":104},[94,6863,6864],{"class":96,"line":1160},[94,6865,6866],{"class":163},"    \u002F\u002F利用指针访问数组中的元素\n",[94,6868,6869,6871,6873,6875,6877,6879,6881,6883,6885,6887,6889,6891,6893,6895,6897,6899,6901,6903,6905,6907,6909,6911,6913,6915,6917,6919],{"class":96,"line":1175},[94,6870,1966],{"class":100},[94,6872,3943],{"class":104},[94,6874,551],{"class":153},[94,6876,1045],{"class":104},[94,6878,150],{"class":100},[94,6880,1001],{"class":104},[94,6882,322],{"class":153},[94,6884,483],{"class":104},[94,6886,182],{"class":153},[94,6888,483],{"class":104},[94,6890,176],{"class":153},[94,6892,483],{"class":104},[94,6894,398],{"class":153},[94,6896,483],{"class":104},[94,6898,424],{"class":153},[94,6900,483],{"class":104},[94,6902,449],{"class":153},[94,6904,483],{"class":104},[94,6906,474],{"class":153},[94,6908,483],{"class":104},[94,6910,500],{"class":153},[94,6912,483],{"class":104},[94,6914,525],{"class":153},[94,6916,483],{"class":104},[94,6918,551],{"class":153},[94,6920,3976],{"class":104},[94,6922,6923,6925,6927,6930,6932,6934,6936,6938,6940],{"class":96,"line":1181},[94,6924,1532],{"class":104},[94,6926,1149],{"class":100},[94,6928,6929],{"class":209},"\"数组的第一个元素为：\"",[94,6931,1149],{"class":100},[94,6933,3887],{"class":104},[94,6935,296],{"class":153},[94,6937,1045],{"class":104},[94,6939,1149],{"class":100},[94,6941,1172],{"class":104},[94,6943,6944,6946,6948,6950,6952,6955],{"class":96,"line":1195},[94,6945,1966],{"class":100},[94,6947,6500],{"class":100},[94,6949,40],{"class":104},[94,6951,150],{"class":100},[94,6953,6954],{"class":104},"arr;",[94,6956,6957],{"class":163},"\u002F\u002F注意数才要加取地址符号&\n",[94,6959,6960,6962,6964,6966,6968,6970,6972],{"class":96,"line":1201},[94,6961,1532],{"class":104},[94,6963,1149],{"class":100},[94,6965,6929],{"class":209},[94,6967,6401],{"class":100},[94,6969,40],{"class":104},[94,6971,1149],{"class":100},[94,6973,1172],{"class":104},[94,6975,6976,6978,6980,6982],{"class":96,"line":1292},[94,6977,6318],{"class":104},[94,6979,2273],{"class":100},[94,6981,160],{"class":104},[94,6983,6984],{"class":163}," \u002F\u002F让指针向后偏移4个字节\n",[94,6986,6987,6989,6991,6994,6996,6998,7000],{"class":96,"line":1298},[94,6988,1532],{"class":104},[94,6990,1149],{"class":100},[94,6992,6993],{"class":209},"\"数组的第二个元素为：\"",[94,6995,6401],{"class":100},[94,6997,40],{"class":104},[94,6999,1149],{"class":100},[94,7001,1172],{"class":104},[94,7003,7004],{"class":96,"line":1310},[94,7005,7006],{"class":163},"    \u002F\u002F利用指针遍历数组\n",[94,7008,7009,7011,7013,7016,7018],{"class":96,"line":1593},[94,7010,1966],{"class":100},[94,7012,6500],{"class":100},[94,7014,7015],{"class":104},"p2",[94,7017,150],{"class":100},[94,7019,7020],{"class":104},"arr;\n",[94,7022,7023,7025,7027,7029,7031,7033,7035,7037,7039,7041,7043,7045],{"class":96,"line":1598},[94,7024,3182],{"class":100},[94,7026,1639],{"class":104},[94,7028,108],{"class":100},[94,7030,3013],{"class":104},[94,7032,150],{"class":100},[94,7034,296],{"class":153},[94,7036,3020],{"class":104},[94,7038,1015],{"class":100},[94,7040,551],{"class":153},[94,7042,3020],{"class":104},[94,7044,2273],{"class":100},[94,7046,111],{"class":104},[94,7048,7049],{"class":96,"line":1604},[94,7050,2011],{"class":104},[94,7052,7053,7055,7057,7059,7061],{"class":96,"line":1609},[94,7054,3432],{"class":104},[94,7056,6401],{"class":100},[94,7058,7015],{"class":104},[94,7060,1149],{"class":100},[94,7062,1172],{"class":104},[94,7064,7065,7068,7070],{"class":96,"line":1623},[94,7066,7067],{"class":104},"        p2",[94,7069,2273],{"class":100},[94,7071,1271],{"class":104},[94,7073,7074],{"class":96,"line":1628},[94,7075,2168],{"class":104},[94,7077,7078],{"class":96,"line":1634},[94,7079,1546],{"class":104},[35,7081,7083],{"id":7082},"_37指针和函数","3.7指针和函数",[40,7085,7086],{},"利用指针做函数参数，可以修改实参的值",[40,7088,7089],{},"值传递：只改变形参，不改变实参",[40,7091,7092],{},"地址传递：",[85,7094,7096],{"className":87,"code":7095,"language":89,"meta":14,"style":14},"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",[91,7097,7098,7123,7127,7139,7150,7160,7164,7172,7176,7188,7200,7205,7221,7236,7251],{"__ignoreMap":14},[94,7099,7100,7102,7104,7106,7108,7110,7113,7115,7117,7119,7121],{"class":96,"line":97},[94,7101,5346],{"class":100},[94,7103,5349],{"class":1944},[94,7105,105],{"class":104},[94,7107,108],{"class":100},[94,7109,6500],{"class":100},[94,7111,7112],{"class":5198},"p1",[94,7114,483],{"class":104},[94,7116,108],{"class":100},[94,7118,6500],{"class":100},[94,7120,7015],{"class":5198},[94,7122,111],{"class":104},[94,7124,7125],{"class":96,"line":15},[94,7126,1527],{"class":104},[94,7128,7129,7131,7133,7136],{"class":96,"line":1160},[94,7130,1966],{"class":100},[94,7132,4236],{"class":104},[94,7134,7135],{"class":100},"=*",[94,7137,7138],{"class":104},"p1;\n",[94,7140,7141,7143,7145,7147],{"class":96,"line":1175},[94,7142,6385],{"class":100},[94,7144,7112],{"class":104},[94,7146,7135],{"class":100},[94,7148,7149],{"class":104},"p2;\n",[94,7151,7152,7154,7156,7158],{"class":96,"line":1181},[94,7153,6385],{"class":100},[94,7155,7015],{"class":104},[94,7157,150],{"class":100},[94,7159,4261],{"class":104},[94,7161,7162],{"class":96,"line":1195},[94,7163,1546],{"class":104},[94,7165,7166,7168,7170],{"class":96,"line":1201},[94,7167,108],{"class":100},[94,7169,1954],{"class":1944},[94,7171,1957],{"class":104},[94,7173,7174],{"class":96,"line":1292},[94,7175,1527],{"class":104},[94,7177,7178,7180,7182,7184,7186],{"class":96,"line":1298},[94,7179,1966],{"class":100},[94,7181,1379],{"class":104},[94,7183,150],{"class":100},[94,7185,551],{"class":153},[94,7187,1271],{"class":104},[94,7189,7190,7192,7194,7196,7198],{"class":96,"line":1310},[94,7191,1966],{"class":100},[94,7193,2814],{"class":104},[94,7195,150],{"class":100},[94,7197,805],{"class":153},[94,7199,1271],{"class":104},[94,7201,7202],{"class":96,"line":1593},[94,7203,7204],{"class":163},"    \u002F\u002F地址传递\n",[94,7206,7207,7209,7211,7213,7216,7218],{"class":96,"line":1598},[94,7208,5543],{"class":1944},[94,7210,105],{"class":104},[94,7212,458],{"class":100},[94,7214,7215],{"class":104},"a,",[94,7217,458],{"class":100},[94,7219,7220],{"class":104},"b);\n",[94,7222,7223,7225,7227,7229,7231,7233],{"class":96,"line":1604},[94,7224,1532],{"class":104},[94,7226,1149],{"class":100},[94,7228,343],{"class":104},[94,7230,1149],{"class":100},[94,7232,1219],{"class":104},[94,7234,7235],{"class":163},"\u002F\u002F20\n",[94,7237,7238,7240,7242,7244,7246,7248],{"class":96,"line":1609},[94,7239,1532],{"class":104},[94,7241,1149],{"class":100},[94,7243,368],{"class":104},[94,7245,1149],{"class":100},[94,7247,1219],{"class":104},[94,7249,7250],{"class":163},"\u002F\u002F10\n",[94,7252,7253],{"class":96,"line":1623},[94,7254,1546],{"class":104},[40,7256,7257],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[35,7259,7261],{"id":7260},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[40,7263,7264],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[40,7266,7267,7268,7270],{},"例如数组：int arr",[94,7269,551],{},"={4,3,6,9,1,2,10,8,7,5}",[85,7272,7274],{"className":87,"code":7273,"language":89,"meta":14,"style":14},"#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",[91,7275,7276,7282,7292,7316,7320,7351,7355,7389,7393,7411,7415,7426,7441,7456,7460,7464,7468,7472,7476,7484,7488,7493,7547,7559,7571,7576,7584,7588,7593,7618,7622,7637,7646,7650],{"__ignoreMap":14},[94,7277,7278,7280],{"class":96,"line":97},[94,7279,1930],{"class":100},[94,7281,1933],{"class":209},[94,7283,7284,7286,7288,7290],{"class":96,"line":15},[94,7285,1938],{"class":100},[94,7287,1941],{"class":100},[94,7289,1945],{"class":1944},[94,7291,1271],{"class":104},[94,7293,7294,7296,7299,7301,7303,7305,7307,7309,7311,7314],{"class":96,"line":1160},[94,7295,5346],{"class":100},[94,7297,7298],{"class":1944}," bubbleSort",[94,7300,105],{"class":104},[94,7302,108],{"class":100},[94,7304,6500],{"class":100},[94,7306,40],{"class":5198},[94,7308,483],{"class":104},[94,7310,108],{"class":100},[94,7312,7313],{"class":5198}," len",[94,7315,111],{"class":104},[94,7317,7318],{"class":96,"line":1175},[94,7319,1527],{"class":104},[94,7321,7322,7324,7326,7328,7330,7332,7334,7336,7338,7341,7343,7345,7347,7349],{"class":96,"line":1181},[94,7323,3182],{"class":100},[94,7325,105],{"class":104},[94,7327,108],{"class":100},[94,7329,3013],{"class":104},[94,7331,150],{"class":100},[94,7333,296],{"class":153},[94,7335,3020],{"class":104},[94,7337,1015],{"class":100},[94,7339,7340],{"class":104},"len",[94,7342,637],{"class":100},[94,7344,322],{"class":153},[94,7346,3020],{"class":104},[94,7348,2273],{"class":100},[94,7350,111],{"class":104},[94,7352,7353],{"class":96,"line":1195},[94,7354,2011],{"class":104},[94,7356,7357,7359,7361,7363,7365,7367,7369,7371,7373,7375,7377,7379,7381,7383,7385,7387],{"class":96,"line":1201},[94,7358,3384],{"class":100},[94,7360,105],{"class":104},[94,7362,108],{"class":100},[94,7364,3391],{"class":104},[94,7366,150],{"class":100},[94,7368,296],{"class":153},[94,7370,3398],{"class":104},[94,7372,1015],{"class":100},[94,7374,7340],{"class":104},[94,7376,637],{"class":100},[94,7378,546],{"class":104},[94,7380,637],{"class":100},[94,7382,322],{"class":153},[94,7384,3398],{"class":104},[94,7386,2273],{"class":100},[94,7388,111],{"class":104},[94,7390,7391],{"class":96,"line":1292},[94,7392,2491],{"class":104},[94,7394,7395,7397,7400,7402,7405,7407,7409],{"class":96,"line":1298},[94,7396,4623],{"class":100},[94,7398,7399],{"class":104},"(p[j]",[94,7401,1065],{"class":100},[94,7403,7404],{"class":104},"p[j",[94,7406,586],{"class":100},[94,7408,322],{"class":153},[94,7410,4638],{"class":104},[94,7412,7413],{"class":96,"line":1310},[94,7414,4643],{"class":104},[94,7416,7417,7419,7421,7423],{"class":96,"line":1593},[94,7418,4648],{"class":100},[94,7420,4236],{"class":104},[94,7422,150],{"class":100},[94,7424,7425],{"class":104},"p[j];\n",[94,7427,7428,7431,7433,7435,7437,7439],{"class":96,"line":1598},[94,7429,7430],{"class":104},"                p[j]",[94,7432,150],{"class":100},[94,7434,7404],{"class":104},[94,7436,586],{"class":100},[94,7438,322],{"class":153},[94,7440,4671],{"class":104},[94,7442,7443,7446,7448,7450,7452,7454],{"class":96,"line":1604},[94,7444,7445],{"class":104},"                p[j",[94,7447,586],{"class":100},[94,7449,322],{"class":153},[94,7451,1045],{"class":104},[94,7453,150],{"class":100},[94,7455,4261],{"class":104},[94,7457,7458],{"class":96,"line":1609},[94,7459,4691],{"class":104},[94,7461,7462],{"class":96,"line":1623},[94,7463,2510],{"class":104},[94,7465,7466],{"class":96,"line":1628},[94,7467,2168],{"class":104},[94,7469,7470],{"class":96,"line":1634},[94,7471,1546],{"class":104},[94,7473,7474],{"class":96,"line":1655},[94,7475,2381],{"emptyLinePlaceholder":20},[94,7477,7478,7480,7482],{"class":96,"line":1660},[94,7479,108],{"class":100},[94,7481,1954],{"class":1944},[94,7483,1957],{"class":104},[94,7485,7486],{"class":96,"line":1674},[94,7487,1527],{"class":104},[94,7489,7490],{"class":96,"line":1679},[94,7491,7492],{"class":163},"    \u002F\u002F 1.创建数组\n",[94,7494,7495,7497,7499,7501,7503,7505,7507,7509,7511,7513,7515,7517,7519,7521,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543,7545],{"class":96,"line":1708},[94,7496,1966],{"class":100},[94,7498,3943],{"class":104},[94,7500,551],{"class":153},[94,7502,1045],{"class":104},[94,7504,150],{"class":100},[94,7506,1001],{"class":104},[94,7508,398],{"class":153},[94,7510,483],{"class":104},[94,7512,176],{"class":153},[94,7514,483],{"class":104},[94,7516,449],{"class":153},[94,7518,483],{"class":104},[94,7520,525],{"class":153},[94,7522,483],{"class":104},[94,7524,322],{"class":153},[94,7526,483],{"class":104},[94,7528,182],{"class":153},[94,7530,483],{"class":104},[94,7532,551],{"class":153},[94,7534,483],{"class":104},[94,7536,500],{"class":153},[94,7538,483],{"class":104},[94,7540,474],{"class":153},[94,7542,483],{"class":104},[94,7544,424],{"class":153},[94,7546,3976],{"class":104},[94,7548,7549,7551,7553,7555,7557],{"class":96,"line":1713},[94,7550,1966],{"class":100},[94,7552,7313],{"class":104},[94,7554,150],{"class":100},[94,7556,551],{"class":153},[94,7558,1271],{"class":104},[94,7560,7561,7563,7565,7567,7569],{"class":96,"line":1730},[94,7562,1966],{"class":100},[94,7564,6500],{"class":100},[94,7566,40],{"class":104},[94,7568,150],{"class":100},[94,7570,7020],{"class":104},[94,7572,7573],{"class":96,"line":1735},[94,7574,7575],{"class":163},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[94,7577,7578,7581],{"class":96,"line":1740},[94,7579,7580],{"class":1944},"    bubbleSort",[94,7582,7583],{"class":104},"(p,len);\n",[94,7585,7586],{"class":96,"line":1745},[94,7587,2381],{"emptyLinePlaceholder":20},[94,7589,7590],{"class":96,"line":1759},[94,7591,7592],{"class":163},"    \u002F\u002F 3.打印排序后的数组\n",[94,7594,7595,7597,7599,7601,7603,7605,7607,7609,7611,7614,7616],{"class":96,"line":1764},[94,7596,3182],{"class":100},[94,7598,1639],{"class":104},[94,7600,108],{"class":100},[94,7602,3013],{"class":104},[94,7604,150],{"class":100},[94,7606,296],{"class":153},[94,7608,3195],{"class":104},[94,7610,1015],{"class":100},[94,7612,7613],{"class":104},"len; i",[94,7615,2273],{"class":100},[94,7617,111],{"class":104},[94,7619,7620],{"class":96,"line":2558},[94,7621,2011],{"class":104},[94,7623,7624,7626,7628,7630,7632,7635],{"class":96,"line":2572},[94,7625,3432],{"class":104},[94,7627,6401],{"class":100},[94,7629,40],{"class":104},[94,7631,1149],{"class":100},[94,7633,7634],{"class":209},"\"\"",[94,7636,1271],{"class":104},[94,7638,7639,7642,7644],{"class":96,"line":2580},[94,7640,7641],{"class":104},"        p",[94,7643,2273],{"class":100},[94,7645,1271],{"class":104},[94,7647,7648],{"class":96,"line":2585},[94,7649,2168],{"class":104},[94,7651,7652],{"class":96,"line":2591},[94,7653,1546],{"class":104},[5108,7655,7656],{},"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":14,"searchDepth":15,"depth":15,"links":7658},[7659,7660,7661,7662,7663,7664,7665,7666],{"id":6265,"depth":15,"text":6266},{"id":6431,"depth":15,"text":6432},{"id":6587,"depth":15,"text":6588},{"id":6665,"depth":15,"text":6666},{"id":6744,"depth":15,"text":6745},{"id":6843,"depth":15,"text":6844},{"id":7082,"depth":15,"text":7083},{"id":7260,"depth":15,"text":7261},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6254,"description":6262},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7673,"title":7674,"body":7675,"description":7682,"extension":18,"meta":10656,"navigation":20,"path":10657,"seo":10658,"stem":10659,"__hash__":10660},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7676,"toc":10647},[7677,7680,7683,7687,7690,7693,7704,8042,8045,8049,8052,8059,8314,8318,8321,8324,8479,8483,8486,8489,8695,8699,8702,9005,9008,9016,9020,9023,9174,9176,9187,9244,9248,9253,9910,9918,9921,10015,10018,10638,10644],[10,7678,7674],{"id":7679},"_4结构体",[40,7681,7682],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[35,7684,7686],{"id":7685},"_41结构体定义与使用","4.1结构体定义与使用",[40,7688,7689],{},"语法：struct 结构体名 {结构体成员列表}；",[40,7691,7692],{},"通过结构体创建变量的方式：",[1112,7694,7695,7698,7701],{},[51,7696,7697],{},"struct 结构体名 变量名",[51,7699,7700],{},"struct 结构体名 变量名={成员1值，成员2值...}",[51,7702,7703],{},"定义结构体时顺便创建变量",[85,7705,7707],{"className":87,"code":7706,"language":89,"meta":14,"style":14},"#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",[91,7708,7709,7715,7725,7732,7737,7745,7749,7754,7758,7763,7768,7773,7780,7785,7792,7796,7803,7807,7811,7815,7819,7823,7827,7833,7837,7843,7851,7859,7863,7868,7873,7884,7889,7901,7912,7923,7928,7952,7957,7963,7990,7995,8001,8013,8025,8037],{"__ignoreMap":14},[94,7710,7711,7713],{"class":96,"line":97},[94,7712,1930],{"class":100},[94,7714,1933],{"class":209},[94,7716,7717,7719,7721,7723],{"class":96,"line":15},[94,7718,1938],{"class":100},[94,7720,1941],{"class":100},[94,7722,1945],{"class":1944},[94,7724,1271],{"class":104},[94,7726,7727,7729],{"class":96,"line":1160},[94,7728,1930],{"class":100},[94,7730,7731],{"class":209},"\u003Cstring>\n",[94,7733,7734],{"class":96,"line":1175},[94,7735,7736],{"class":163},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[94,7738,7739,7742],{"class":96,"line":1181},[94,7740,7741],{"class":100},"struct",[94,7743,7744],{"class":1944}," Student\n",[94,7746,7747],{"class":96,"line":1195},[94,7748,1527],{"class":104},[94,7750,7751],{"class":96,"line":1201},[94,7752,7753],{"class":163},"    \u002F\u002F成员列表\n",[94,7755,7756],{"class":96,"line":1292},[94,7757,2381],{"emptyLinePlaceholder":20},[94,7759,7760],{"class":96,"line":1298},[94,7761,7762],{"class":163},"    \u002F\u002F姓名\n",[94,7764,7765],{"class":96,"line":1310},[94,7766,7767],{"class":104},"    string name;\n",[94,7769,7770],{"class":96,"line":1593},[94,7771,7772],{"class":163},"    \u002F\u002F年龄\n",[94,7774,7775,7777],{"class":96,"line":1598},[94,7776,1966],{"class":100},[94,7778,7779],{"class":104}," age;\n",[94,7781,7782],{"class":96,"line":1604},[94,7783,7784],{"class":163},"    \u002F\u002F分数\n",[94,7786,7787,7789],{"class":96,"line":1609},[94,7788,1966],{"class":100},[94,7790,7791],{"class":104}," score;\n",[94,7793,7794],{"class":96,"line":1623},[94,7795,3976],{"class":104},[94,7797,7798,7800],{"class":96,"line":1628},[94,7799,7741],{"class":100},[94,7801,7802],{"class":1944}," School\n",[94,7804,7805],{"class":96,"line":1634},[94,7806,1527],{"class":104},[94,7808,7809],{"class":96,"line":1655},[94,7810,7753],{"class":163},[94,7812,7813],{"class":96,"line":1660},[94,7814,2381],{"emptyLinePlaceholder":20},[94,7816,7817],{"class":96,"line":1674},[94,7818,7762],{"class":163},[94,7820,7821],{"class":96,"line":1679},[94,7822,7767],{"class":104},[94,7824,7825],{"class":96,"line":1708},[94,7826,7772],{"class":163},[94,7828,7829,7831],{"class":96,"line":1713},[94,7830,1966],{"class":100},[94,7832,7779],{"class":104},[94,7834,7835],{"class":96,"line":1730},[94,7836,7784],{"class":163},[94,7838,7839,7841],{"class":96,"line":1735},[94,7840,1966],{"class":100},[94,7842,7791],{"class":104},[94,7844,7845,7848],{"class":96,"line":1740},[94,7846,7847],{"class":104},"} s3;",[94,7849,7850],{"class":163}," \u002F\u002F创建结构体时就创建了变量\n",[94,7852,7853,7855,7857],{"class":96,"line":1745},[94,7854,108],{"class":100},[94,7856,1954],{"class":1944},[94,7858,1957],{"class":104},[94,7860,7861],{"class":96,"line":1759},[94,7862,1527],{"class":104},[94,7864,7865],{"class":96,"line":1764},[94,7866,7867],{"class":163},"    \u002F\u002F2.通过学生类型创建具体学生\n",[94,7869,7870],{"class":96,"line":2558},[94,7871,7872],{"class":163},"    \u002F\u002F2.1 struct Student s1;\n",[94,7874,7875,7878,7881],{"class":96,"line":2572},[94,7876,7877],{"class":100},"    struct",[94,7879,7880],{"class":1944}," Student",[94,7882,7883],{"class":104}," s1;\n",[94,7885,7886],{"class":96,"line":2580},[94,7887,7888],{"class":163},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[94,7890,7891,7894,7896,7899],{"class":96,"line":2585},[94,7892,7893],{"class":104},"    s1.name",[94,7895,150],{"class":100},[94,7897,7898],{"class":209},"\"张三\"",[94,7900,1271],{"class":104},[94,7902,7903,7906,7908,7910],{"class":96,"line":2591},[94,7904,7905],{"class":104},"    s1.age",[94,7907,150],{"class":100},[94,7909,755],{"class":153},[94,7911,1271],{"class":104},[94,7913,7914,7917,7919,7921],{"class":96,"line":2597},[94,7915,7916],{"class":104},"    s1.score",[94,7918,150],{"class":100},[94,7920,359],{"class":153},[94,7922,1271],{"class":104},[94,7924,7925],{"class":96,"line":2602},[94,7926,7927],{"class":163},"    \u002F\u002F输出结果\n",[94,7929,7931,7933,7935,7938,7940,7943,7945,7948,7950],{"class":96,"line":7930},37,[94,7932,1532],{"class":104},[94,7934,1149],{"class":100},[94,7936,7937],{"class":104},"s1.name",[94,7939,1149],{"class":100},[94,7941,7942],{"class":104},"s1.age",[94,7944,1149],{"class":100},[94,7946,7947],{"class":104},"s1.score",[94,7949,1149],{"class":100},[94,7951,1172],{"class":104},[94,7953,7955],{"class":96,"line":7954},38,[94,7956,2381],{"emptyLinePlaceholder":20},[94,7958,7960],{"class":96,"line":7959},39,[94,7961,7962],{"class":163},"    \u002F\u002F2.2 struct Student s2={...}\n",[94,7964,7966,7968,7970,7973,7975,7977,7980,7982,7984,7986,7988],{"class":96,"line":7965},40,[94,7967,7877],{"class":100},[94,7969,7880],{"class":1944},[94,7971,7972],{"class":104}," s2",[94,7974,150],{"class":100},[94,7976,1001],{"class":104},[94,7978,7979],{"class":209},"\"王五\"",[94,7981,483],{"class":104},[94,7983,755],{"class":153},[94,7985,483],{"class":104},[94,7987,359],{"class":153},[94,7989,3976],{"class":104},[94,7991,7993],{"class":96,"line":7992},41,[94,7994,2381],{"emptyLinePlaceholder":20},[94,7996,7998],{"class":96,"line":7997},42,[94,7999,8000],{"class":163},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[94,8002,8004,8007,8009,8011],{"class":96,"line":8003},43,[94,8005,8006],{"class":104},"    s3.name",[94,8008,150],{"class":100},[94,8010,3659],{"class":209},[94,8012,1271],{"class":104},[94,8014,8016,8019,8021,8023],{"class":96,"line":8015},44,[94,8017,8018],{"class":104},"    s3.age",[94,8020,150],{"class":100},[94,8022,755],{"class":153},[94,8024,1271],{"class":104},[94,8026,8028,8031,8033,8035],{"class":96,"line":8027},45,[94,8029,8030],{"class":104},"    s3.score",[94,8032,150],{"class":100},[94,8034,805],{"class":153},[94,8036,1271],{"class":104},[94,8038,8040],{"class":96,"line":8039},46,[94,8041,1546],{"class":104},[40,8043,8044],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[35,8046,8048],{"id":8047},"_42结构体数组","4.2结构体数组",[40,8050,8051],{},"将自定义的结构体放入到数组中方便维护",[40,8053,8054,8055,8058],{},"语法：struct 结构体名 数组名",[94,8056,8057],{},"元素个数","={ {}，{},...{} };",[85,8060,8062],{"className":87,"code":8061,"language":89,"meta":14,"style":14},"#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",[91,8063,8064,8070,8080,8086,8091,8097,8101,8105,8111,8117,8121,8125,8133,8137,8142,8157,8161,8177,8193,8197,8202,8218,8233,8248,8253,8279,8283,8306,8310],{"__ignoreMap":14},[94,8065,8066,8068],{"class":96,"line":97},[94,8067,1930],{"class":100},[94,8069,1933],{"class":209},[94,8071,8072,8074,8076,8078],{"class":96,"line":15},[94,8073,1938],{"class":100},[94,8075,1941],{"class":100},[94,8077,1945],{"class":1944},[94,8079,1271],{"class":104},[94,8081,8082,8084],{"class":96,"line":1160},[94,8083,1930],{"class":100},[94,8085,7731],{"class":209},[94,8087,8088],{"class":96,"line":1175},[94,8089,8090],{"class":163},"\u002F\u002F1.定义结构体\n",[94,8092,8093,8095],{"class":96,"line":1181},[94,8094,7741],{"class":100},[94,8096,7744],{"class":1944},[94,8098,8099],{"class":96,"line":1195},[94,8100,1527],{"class":104},[94,8102,8103],{"class":96,"line":1201},[94,8104,7767],{"class":104},[94,8106,8107,8109],{"class":96,"line":1292},[94,8108,1966],{"class":100},[94,8110,7779],{"class":104},[94,8112,8113,8115],{"class":96,"line":1298},[94,8114,1966],{"class":100},[94,8116,7791],{"class":104},[94,8118,8119],{"class":96,"line":1310},[94,8120,2381],{"emptyLinePlaceholder":20},[94,8122,8123],{"class":96,"line":1593},[94,8124,3976],{"class":104},[94,8126,8127,8129,8131],{"class":96,"line":1598},[94,8128,108],{"class":100},[94,8130,1954],{"class":1944},[94,8132,1957],{"class":104},[94,8134,8135],{"class":96,"line":1604},[94,8136,1527],{"class":104},[94,8138,8139],{"class":96,"line":1609},[94,8140,8141],{"class":163},"    \u002F\u002F2.创建结构体数组\n",[94,8143,8144,8146,8148,8151,8153,8155],{"class":96,"line":1623},[94,8145,7877],{"class":100},[94,8147,7880],{"class":1944},[94,8149,8150],{"class":104}," stuArray[",[94,8152,182],{"class":153},[94,8154,1045],{"class":104},[94,8156,4889],{"class":100},[94,8158,8159],{"class":96,"line":1628},[94,8160,2011],{"class":104},[94,8162,8163,8165,8167,8169,8171,8173,8175],{"class":96,"line":1634},[94,8164,4898],{"class":104},[94,8166,7898],{"class":209},[94,8168,483],{"class":104},[94,8170,755],{"class":153},[94,8172,483],{"class":104},[94,8174,416],{"class":153},[94,8176,4911],{"class":104},[94,8178,8179,8181,8183,8185,8187,8189,8191],{"class":96,"line":1655},[94,8180,4898],{"class":104},[94,8182,3659],{"class":209},[94,8184,483],{"class":104},[94,8186,680],{"class":153},[94,8188,483],{"class":104},[94,8190,680],{"class":153},[94,8192,1546],{"class":104},[94,8194,8195],{"class":96,"line":1660},[94,8196,2168],{"class":104},[94,8198,8199],{"class":96,"line":1674},[94,8200,8201],{"class":163},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[94,8203,8204,8207,8209,8212,8214,8216],{"class":96,"line":1679},[94,8205,8206],{"class":104},"    stuArray[",[94,8208,322],{"class":153},[94,8210,8211],{"class":104},"].name",[94,8213,150],{"class":100},[94,8215,3682],{"class":209},[94,8217,1271],{"class":104},[94,8219,8220,8222,8224,8227,8229,8231],{"class":96,"line":1708},[94,8221,8206],{"class":104},[94,8223,322],{"class":153},[94,8225,8226],{"class":104},"].age",[94,8228,150],{"class":100},[94,8230,182],{"class":153},[94,8232,1271],{"class":104},[94,8234,8235,8237,8239,8242,8244,8246],{"class":96,"line":1713},[94,8236,8206],{"class":104},[94,8238,322],{"class":153},[94,8240,8241],{"class":104},"].score",[94,8243,150],{"class":100},[94,8245,182],{"class":153},[94,8247,1271],{"class":104},[94,8249,8250],{"class":96,"line":1730},[94,8251,8252],{"class":163},"    \u002F\u002F4.遍历结构体数组\n",[94,8254,8255,8257,8259,8261,8263,8265,8267,8269,8271,8273,8275,8277],{"class":96,"line":1735},[94,8256,3182],{"class":100},[94,8258,1639],{"class":104},[94,8260,108],{"class":100},[94,8262,3013],{"class":104},[94,8264,150],{"class":100},[94,8266,296],{"class":153},[94,8268,3020],{"class":104},[94,8270,1015],{"class":100},[94,8272,182],{"class":153},[94,8274,3020],{"class":104},[94,8276,2273],{"class":100},[94,8278,111],{"class":104},[94,8280,8281],{"class":96,"line":1740},[94,8282,2011],{"class":104},[94,8284,8285,8287,8289,8292,8294,8297,8299,8302,8304],{"class":96,"line":1745},[94,8286,3432],{"class":104},[94,8288,1149],{"class":100},[94,8290,8291],{"class":104},"stuArray[i].name",[94,8293,1149],{"class":100},[94,8295,8296],{"class":104},"stuArray[i].age",[94,8298,1149],{"class":100},[94,8300,8301],{"class":104},"stuArray[i].score",[94,8303,1149],{"class":100},[94,8305,1172],{"class":104},[94,8307,8308],{"class":96,"line":1759},[94,8309,2168],{"class":104},[94,8311,8312],{"class":96,"line":1764},[94,8313,1546],{"class":104},[35,8315,8317],{"id":8316},"_43结构体指针","4.3结构体指针",[40,8319,8320],{},"作用：通过指针访问结构体中的成员",[40,8322,8323],{},"利用操作符->可以通过结构体指针访问结构体属性",[85,8325,8327],{"className":87,"code":8326,"language":89,"meta":14,"style":14},"#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",[91,8328,8329,8335,8345,8351,8355,8361,8365,8369,8375,8381,8385,8393,8397,8402,8427,8432,8447,8452,8475],{"__ignoreMap":14},[94,8330,8331,8333],{"class":96,"line":97},[94,8332,1930],{"class":100},[94,8334,1933],{"class":209},[94,8336,8337,8339,8341,8343],{"class":96,"line":15},[94,8338,1938],{"class":100},[94,8340,1941],{"class":100},[94,8342,1945],{"class":1944},[94,8344,1271],{"class":104},[94,8346,8347,8349],{"class":96,"line":1160},[94,8348,1930],{"class":100},[94,8350,7731],{"class":209},[94,8352,8353],{"class":96,"line":1175},[94,8354,8090],{"class":163},[94,8356,8357,8359],{"class":96,"line":1181},[94,8358,7741],{"class":100},[94,8360,7744],{"class":1944},[94,8362,8363],{"class":96,"line":1195},[94,8364,1527],{"class":104},[94,8366,8367],{"class":96,"line":1201},[94,8368,7767],{"class":104},[94,8370,8371,8373],{"class":96,"line":1292},[94,8372,1966],{"class":100},[94,8374,7779],{"class":104},[94,8376,8377,8379],{"class":96,"line":1298},[94,8378,1966],{"class":100},[94,8380,7791],{"class":104},[94,8382,8383],{"class":96,"line":1310},[94,8384,3976],{"class":104},[94,8386,8387,8389,8391],{"class":96,"line":1593},[94,8388,108],{"class":100},[94,8390,1954],{"class":1944},[94,8392,1957],{"class":104},[94,8394,8395],{"class":96,"line":1598},[94,8396,1527],{"class":104},[94,8398,8399],{"class":96,"line":1604},[94,8400,8401],{"class":163},"    \u002F\u002F创建学生结构体变量\n",[94,8403,8404,8406,8408,8411,8413,8415,8417,8419,8421,8423,8425],{"class":96,"line":1609},[94,8405,7877],{"class":100},[94,8407,7880],{"class":1944},[94,8409,8410],{"class":104}," s",[94,8412,150],{"class":100},[94,8414,1001],{"class":104},[94,8416,7898],{"class":209},[94,8418,483],{"class":104},[94,8420,755],{"class":153},[94,8422,483],{"class":104},[94,8424,1703],{"class":153},[94,8426,3976],{"class":104},[94,8428,8429],{"class":96,"line":1623},[94,8430,8431],{"class":163},"    \u002F\u002F通过指针指向结构体变量\n",[94,8433,8434,8436,8438,8440,8442,8444],{"class":96,"line":1628},[94,8435,7877],{"class":100},[94,8437,7880],{"class":1944},[94,8439,6500],{"class":100},[94,8441,40],{"class":104},[94,8443,6321],{"class":100},[94,8445,8446],{"class":104},"s\n",[94,8448,8449],{"class":96,"line":1634},[94,8450,8451],{"class":163},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[94,8453,8454,8456,8458,8461,8463,8466,8468,8471,8473],{"class":96,"line":1655},[94,8455,1532],{"class":104},[94,8457,1149],{"class":100},[94,8459,8460],{"class":104},"p->name",[94,8462,1149],{"class":100},[94,8464,8465],{"class":104},"p->age",[94,8467,1149],{"class":100},[94,8469,8470],{"class":104},"p->score",[94,8472,1149],{"class":100},[94,8474,1172],{"class":104},[94,8476,8477],{"class":96,"line":1660},[94,8478,1546],{"class":104},[35,8480,8482],{"id":8481},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[40,8484,8485],{},"作用：结构体中的成员可以是另一个结构体",[40,8487,8488],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[85,8490,8492],{"className":87,"code":8491,"language":89,"meta":14,"style":14},"#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",[91,8493,8494,8500,8510,8516,8521,8529,8533,8537,8543,8549,8553,8558,8565,8569,8576,8580,8586,8591,8595,8603,8607,8612,8617,8622,8633,8645,8656,8669,8680,8691],{"__ignoreMap":14},[94,8495,8496,8498],{"class":96,"line":97},[94,8497,1930],{"class":100},[94,8499,1933],{"class":209},[94,8501,8502,8504,8506,8508],{"class":96,"line":15},[94,8503,1938],{"class":100},[94,8505,1941],{"class":100},[94,8507,1945],{"class":1944},[94,8509,1271],{"class":104},[94,8511,8512,8514],{"class":96,"line":1160},[94,8513,1930],{"class":100},[94,8515,7731],{"class":209},[94,8517,8518],{"class":96,"line":1175},[94,8519,8520],{"class":163},"\u002F\u002F定义学生结构体\n",[94,8522,8523,8525,8527],{"class":96,"line":1181},[94,8524,7741],{"class":100},[94,8526,7880],{"class":1944},[94,8528,2655],{"class":104},[94,8530,8531],{"class":96,"line":1195},[94,8532,1527],{"class":104},[94,8534,8535],{"class":96,"line":1201},[94,8536,7767],{"class":104},[94,8538,8539,8541],{"class":96,"line":1292},[94,8540,1966],{"class":100},[94,8542,7779],{"class":104},[94,8544,8545,8547],{"class":96,"line":1298},[94,8546,1966],{"class":100},[94,8548,7791],{"class":104},[94,8550,8551],{"class":96,"line":1310},[94,8552,1546],{"class":104},[94,8554,8555],{"class":96,"line":1593},[94,8556,8557],{"class":163},"\u002F\u002F定义老师结构体\n",[94,8559,8560,8562],{"class":96,"line":1598},[94,8561,7741],{"class":100},[94,8563,8564],{"class":1944}," Teacher\n",[94,8566,8567],{"class":96,"line":1604},[94,8568,1527],{"class":104},[94,8570,8571,8573],{"class":96,"line":1609},[94,8572,1966],{"class":100},[94,8574,8575],{"class":104}," id;\n",[94,8577,8578],{"class":96,"line":1623},[94,8579,7767],{"class":104},[94,8581,8582,8584],{"class":96,"line":1628},[94,8583,1966],{"class":100},[94,8585,7779],{"class":104},[94,8587,8588],{"class":96,"line":1634},[94,8589,8590],{"class":104},"    Student stu;\n",[94,8592,8593],{"class":96,"line":1655},[94,8594,1546],{"class":104},[94,8596,8597,8599,8601],{"class":96,"line":1660},[94,8598,108],{"class":100},[94,8600,1954],{"class":1944},[94,8602,5960],{"class":104},[94,8604,8605],{"class":96,"line":1674},[94,8606,1527],{"class":104},[94,8608,8609],{"class":96,"line":1679},[94,8610,8611],{"class":163},"    \u002F\u002F结构体嵌套结构体\n",[94,8613,8614],{"class":96,"line":1708},[94,8615,8616],{"class":163},"    \u002F\u002F创建老师\n",[94,8618,8619],{"class":96,"line":1713},[94,8620,8621],{"class":104},"    Teacher t;\n",[94,8623,8624,8627,8629,8631],{"class":96,"line":1730},[94,8625,8626],{"class":104},"    t.id",[94,8628,150],{"class":100},[94,8630,416],{"class":153},[94,8632,1271],{"class":104},[94,8634,8635,8638,8640,8643],{"class":96,"line":1735},[94,8636,8637],{"class":104},"    t.name",[94,8639,150],{"class":100},[94,8641,8642],{"class":209},"\"老王\"",[94,8644,1271],{"class":104},[94,8646,8647,8650,8652,8654],{"class":96,"line":1740},[94,8648,8649],{"class":104},"    t.age",[94,8651,150],{"class":100},[94,8653,755],{"class":153},[94,8655,1271],{"class":104},[94,8657,8658,8661,8663,8666],{"class":96,"line":1745},[94,8659,8660],{"class":104},"    t.stu.name",[94,8662,150],{"class":100},[94,8664,8665],{"class":209},"\"小王\"",[94,8667,8668],{"class":104},"；\n",[94,8670,8671,8674,8676,8678],{"class":96,"line":1759},[94,8672,8673],{"class":104},"    t.stu.age",[94,8675,150],{"class":100},[94,8677,805],{"class":153},[94,8679,1271],{"class":104},[94,8681,8682,8685,8687,8689],{"class":96,"line":1764},[94,8683,8684],{"class":104},"    t.stu.score",[94,8686,150],{"class":100},[94,8688,449],{"class":153},[94,8690,1271],{"class":104},[94,8692,8693],{"class":96,"line":2558},[94,8694,1546],{"class":104},[35,8696,8698],{"id":8697},"_45结构体做函数参数","4.5结构体做函数参数",[40,8700,8701],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[85,8703,8705],{"className":87,"code":8704,"language":89,"meta":14,"style":14},"#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",[91,8706,8707,8713,8723,8729,8735,8739,8743,8749,8755,8759,8764,8769,8786,8790,8823,8827,8832,8851,8855,8886,8890,8898,8902,8911,8923,8935,8947,8960,8968,8981,8993,9001],{"__ignoreMap":14},[94,8708,8709,8711],{"class":96,"line":97},[94,8710,1930],{"class":100},[94,8712,1933],{"class":209},[94,8714,8715,8717,8719,8721],{"class":96,"line":15},[94,8716,1938],{"class":100},[94,8718,1941],{"class":100},[94,8720,1945],{"class":1944},[94,8722,1271],{"class":104},[94,8724,8725,8727],{"class":96,"line":1160},[94,8726,1930],{"class":100},[94,8728,7731],{"class":209},[94,8730,8731,8733],{"class":96,"line":1175},[94,8732,7741],{"class":100},[94,8734,7744],{"class":1944},[94,8736,8737],{"class":96,"line":1181},[94,8738,1527],{"class":104},[94,8740,8741],{"class":96,"line":1195},[94,8742,7767],{"class":104},[94,8744,8745,8747],{"class":96,"line":1201},[94,8746,1966],{"class":100},[94,8748,7779],{"class":104},[94,8750,8751,8753],{"class":96,"line":1292},[94,8752,1966],{"class":100},[94,8754,7791],{"class":104},[94,8756,8757],{"class":96,"line":1298},[94,8758,3976],{"class":104},[94,8760,8761],{"class":96,"line":1310},[94,8762,8763],{"class":163},"\u002F\u002F打印学生信息的函数\n",[94,8765,8766],{"class":96,"line":1593},[94,8767,8768],{"class":163},"\u002F\u002F值传递\n",[94,8770,8771,8773,8776,8778,8780,8782,8784],{"class":96,"line":1598},[94,8772,5346],{"class":100},[94,8774,8775],{"class":1944}," printStudent1",[94,8777,105],{"class":104},[94,8779,7741],{"class":100},[94,8781,7880],{"class":1944},[94,8783,8410],{"class":5198},[94,8785,111],{"class":104},[94,8787,8788],{"class":96,"line":1604},[94,8789,1527],{"class":104},[94,8791,8792,8794,8796,8799,8801,8804,8806,8809,8811,8813,8815,8818,8820],{"class":96,"line":1609},[94,8793,6511],{"class":104},[94,8795,1149],{"class":100},[94,8797,8798],{"class":104}," s.name ",[94,8800,1149],{"class":100},[94,8802,8803],{"class":209}," \" \"",[94,8805,1425],{"class":100},[94,8807,8808],{"class":104}," s.age ",[94,8810,1149],{"class":100},[94,8812,8803],{"class":209},[94,8814,1425],{"class":100},[94,8816,8817],{"class":104}," s.score ",[94,8819,1149],{"class":100},[94,8821,8822],{"class":104}," endl;\n",[94,8824,8825],{"class":96,"line":1623},[94,8826,1546],{"class":104},[94,8828,8829],{"class":96,"line":1628},[94,8830,8831],{"class":163},"\u002F\u002F地址传递\n",[94,8833,8834,8836,8839,8841,8843,8845,8847,8849],{"class":96,"line":1634},[94,8835,5346],{"class":100},[94,8837,8838],{"class":1944}," printStudent2",[94,8840,105],{"class":104},[94,8842,7741],{"class":100},[94,8844,7880],{"class":1944},[94,8846,6500],{"class":100},[94,8848,800],{"class":5198},[94,8850,111],{"class":104},[94,8852,8853],{"class":96,"line":1655},[94,8854,1527],{"class":104},[94,8856,8857,8859,8861,8864,8866,8868,8870,8873,8875,8877,8879,8882,8884],{"class":96,"line":1660},[94,8858,6511],{"class":104},[94,8860,1149],{"class":100},[94,8862,8863],{"class":104}," s->name ",[94,8865,1149],{"class":100},[94,8867,8803],{"class":209},[94,8869,1425],{"class":100},[94,8871,8872],{"class":104}," s->age ",[94,8874,1149],{"class":100},[94,8876,8803],{"class":209},[94,8878,1425],{"class":100},[94,8880,8881],{"class":104}," s->score ",[94,8883,1149],{"class":100},[94,8885,8822],{"class":104},[94,8887,8888],{"class":96,"line":1674},[94,8889,1546],{"class":104},[94,8891,8892,8894,8896],{"class":96,"line":1679},[94,8893,108],{"class":100},[94,8895,1954],{"class":1944},[94,8897,1957],{"class":104},[94,8899,8900],{"class":96,"line":1708},[94,8901,1527],{"class":104},[94,8903,8904,8906,8908],{"class":96,"line":1713},[94,8905,7877],{"class":100},[94,8907,7880],{"class":1944},[94,8909,8910],{"class":104}," s;\n",[94,8912,8913,8916,8918,8921],{"class":96,"line":1730},[94,8914,8915],{"class":104},"    s.name ",[94,8917,150],{"class":100},[94,8919,8920],{"class":209}," \"张三\"",[94,8922,1271],{"class":104},[94,8924,8925,8928,8930,8933],{"class":96,"line":1735},[94,8926,8927],{"class":104},"    s.age ",[94,8929,150],{"class":100},[94,8931,8932],{"class":153}," 20",[94,8934,1271],{"class":104},[94,8936,8937,8940,8942,8945],{"class":96,"line":1740},[94,8938,8939],{"class":104},"    s.score ",[94,8941,150],{"class":100},[94,8943,8944],{"class":153}," 85",[94,8946,1271],{"class":104},[94,8948,8949,8951,8953,8956,8958],{"class":96,"line":1745},[94,8950,1532],{"class":104},[94,8952,1149],{"class":100},[94,8954,8955],{"class":209},"\"值传递:\"",[94,8957,1149],{"class":100},[94,8959,1172],{"class":104},[94,8961,8962,8965],{"class":96,"line":1759},[94,8963,8964],{"class":1944},"    printStudent1",[94,8966,8967],{"class":104},"(s);\n",[94,8969,8970,8972,8974,8977,8979],{"class":96,"line":1764},[94,8971,1532],{"class":104},[94,8973,1149],{"class":100},[94,8975,8976],{"class":209},"\"地址传递:\"",[94,8978,1149],{"class":100},[94,8980,1172],{"class":104},[94,8982,8983,8986,8988,8990],{"class":96,"line":2558},[94,8984,8985],{"class":1944},"    printStudent2",[94,8987,105],{"class":104},[94,8989,458],{"class":100},[94,8991,8992],{"class":104},"s); \n",[94,8994,8995,8997,8999],{"class":96,"line":2572},[94,8996,4071],{"class":100},[94,8998,4074],{"class":153},[94,9000,1271],{"class":104},[94,9002,9003],{"class":96,"line":2580},[94,9004,1546],{"class":104},[40,9006,9007],{},"注意：",[1112,9009,9010,9013],{},[51,9011,9012],{},"1.先定义结构体，不要在函数中写结构体的定义",[51,9014,9015],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[35,9017,9019],{"id":9018},"_46结构体中const使用场景","4.6结构体中const使用场景",[40,9021,9022],{},"用const防止误操作",[85,9024,9026],{"className":87,"code":9025,"language":89,"meta":14,"style":14},"#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",[91,9027,9028,9034,9044,9050,9055,9059,9063,9069,9075,9079,9095,9099,9122,9126,9134,9138,9159,9166,9170],{"__ignoreMap":14},[94,9029,9030,9032],{"class":96,"line":97},[94,9031,1930],{"class":100},[94,9033,1933],{"class":209},[94,9035,9036,9038,9040,9042],{"class":96,"line":15},[94,9037,1938],{"class":100},[94,9039,1941],{"class":100},[94,9041,1945],{"class":1944},[94,9043,1271],{"class":104},[94,9045,9046,9048],{"class":96,"line":1160},[94,9047,1930],{"class":100},[94,9049,7731],{"class":209},[94,9051,9052],{"class":96,"line":1175},[94,9053,9054],{"class":104},"sctuct Student\n",[94,9056,9057],{"class":96,"line":1181},[94,9058,1527],{"class":104},[94,9060,9061],{"class":96,"line":1195},[94,9062,7767],{"class":104},[94,9064,9065,9067],{"class":96,"line":1201},[94,9066,1966],{"class":100},[94,9068,7779],{"class":104},[94,9070,9071,9073],{"class":96,"line":1292},[94,9072,1966],{"class":100},[94,9074,7791],{"class":104},[94,9076,9077],{"class":96,"line":1298},[94,9078,3976],{"class":104},[94,9080,9081,9083,9086,9088,9091,9093],{"class":96,"line":1310},[94,9082,5346],{"class":100},[94,9084,9085],{"class":1944}," printStudents",[94,9087,105],{"class":104},[94,9089,9090],{"class":1944},"student",[94,9092,8410],{"class":5198},[94,9094,111],{"class":104},[94,9096,9097],{"class":96,"line":1593},[94,9098,1527],{"class":104},[94,9100,9101,9103,9105,9108,9110,9113,9115,9118,9120],{"class":96,"line":1598},[94,9102,1532],{"class":104},[94,9104,1149],{"class":100},[94,9106,9107],{"class":104},"s.name",[94,9109,1149],{"class":100},[94,9111,9112],{"class":104},"s.age",[94,9114,1149],{"class":100},[94,9116,9117],{"class":104},"s.score",[94,9119,1149],{"class":100},[94,9121,1172],{"class":104},[94,9123,9124],{"class":96,"line":1604},[94,9125,1546],{"class":104},[94,9127,9128,9130,9132],{"class":96,"line":1609},[94,9129,108],{"class":100},[94,9131,1954],{"class":1944},[94,9133,5960],{"class":104},[94,9135,9136],{"class":96,"line":1623},[94,9137,1527],{"class":104},[94,9139,9140,9143,9145,9147,9149,9151,9153,9155,9157],{"class":96,"line":1628},[94,9141,9142],{"class":104},"    Student s",[94,9144,150],{"class":100},[94,9146,1001],{"class":104},[94,9148,7898],{"class":209},[94,9150,483],{"class":104},[94,9152,755],{"class":153},[94,9154,483],{"class":104},[94,9156,755],{"class":153},[94,9158,3976],{"class":104},[94,9160,9161,9164],{"class":96,"line":1634},[94,9162,9163],{"class":1944},"    printStudent",[94,9165,8967],{"class":104},[94,9167,9168],{"class":96,"line":1655},[94,9169,2381],{"emptyLinePlaceholder":20},[94,9171,9172],{"class":96,"line":1660},[94,9173,1546],{"class":104},[40,9175,9007],{},[1112,9177,9178,9181,9184],{},[51,9179,9180],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[51,9182,9183],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[51,9185,9186],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[85,9188,9190],{"className":87,"code":9189,"language":89,"meta":14,"style":14},"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",[91,9191,9192,9211,9215,9220,9240],{"__ignoreMap":14},[94,9193,9194,9196,9198,9200,9202,9205,9207,9209],{"class":96,"line":97},[94,9195,5346],{"class":100},[94,9197,9085],{"class":1944},[94,9199,105],{"class":104},[94,9201,6774],{"class":100},[94,9203,9204],{"class":1944}," student",[94,9206,6500],{"class":100},[94,9208,800],{"class":5198},[94,9210,111],{"class":104},[94,9212,9213],{"class":96,"line":15},[94,9214,1527],{"class":104},[94,9216,9217],{"class":96,"line":1160},[94,9218,9219],{"class":163},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[94,9221,9222,9224,9226,9228,9230,9232,9234,9236,9238],{"class":96,"line":1175},[94,9223,1532],{"class":104},[94,9225,1149],{"class":100},[94,9227,9107],{"class":104},[94,9229,1149],{"class":100},[94,9231,9112],{"class":104},[94,9233,1149],{"class":100},[94,9235,9117],{"class":104},[94,9237,1149],{"class":100},[94,9239,1172],{"class":104},[94,9241,9242],{"class":96,"line":1181},[94,9243,1546],{"class":104},[35,9245,9247],{"id":9246},"_47案例","4.7案例",[48,9249,9250],{},[51,9251,9252],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[85,9254,9256],{"className":87,"code":9255,"language":89,"meta":14,"style":14},"#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",[91,9257,9258,9264,9274,9280,9287,9291,9297,9301,9306,9312,9318,9322,9326,9332,9336,9341,9346,9359,9363,9368,9394,9398,9410,9437,9441,9453,9463,9467,9472,9501,9505,9517,9526,9553,9564,9574,9578,9582,9586,9591,9615,9619,9643,9647,9666,9692,9696,9721,9744,9768,9773,9778,9783,9792,9797,9803,9824,9830,9844,9850,9877,9886,9892,9900,9905],{"__ignoreMap":14},[94,9259,9260,9262],{"class":96,"line":97},[94,9261,1930],{"class":100},[94,9263,1933],{"class":209},[94,9265,9266,9268,9270,9272],{"class":96,"line":15},[94,9267,1938],{"class":100},[94,9269,1941],{"class":100},[94,9271,1945],{"class":1944},[94,9273,1271],{"class":104},[94,9275,9276,9278],{"class":96,"line":1160},[94,9277,1930],{"class":100},[94,9279,7731],{"class":209},[94,9281,9282,9284],{"class":96,"line":1175},[94,9283,1930],{"class":100},[94,9285,9286],{"class":209},"\u003Cctime>\n",[94,9288,9289],{"class":96,"line":1181},[94,9290,8520],{"class":163},[94,9292,9293,9295],{"class":96,"line":1195},[94,9294,7741],{"class":100},[94,9296,7744],{"class":1944},[94,9298,9299],{"class":96,"line":1201},[94,9300,1527],{"class":104},[94,9302,9303],{"class":96,"line":1292},[94,9304,9305],{"class":104},"    string sName;\n",[94,9307,9308,9310],{"class":96,"line":1298},[94,9309,1966],{"class":100},[94,9311,7779],{"class":104},[94,9313,9314,9316],{"class":96,"line":1310},[94,9315,1966],{"class":100},[94,9317,7791],{"class":104},[94,9319,9320],{"class":96,"line":1593},[94,9321,3976],{"class":104},[94,9323,9324],{"class":96,"line":1598},[94,9325,8557],{"class":163},[94,9327,9328,9330],{"class":96,"line":1604},[94,9329,7741],{"class":100},[94,9331,8564],{"class":1944},[94,9333,9334],{"class":96,"line":1609},[94,9335,1527],{"class":104},[94,9337,9338],{"class":96,"line":1623},[94,9339,9340],{"class":104},"    string tName;\n",[94,9342,9343],{"class":96,"line":1628},[94,9344,9345],{"class":163},"    \u002F\u002F学生数组\n",[94,9347,9348,9350,9352,9355,9357],{"class":96,"line":1634},[94,9349,7877],{"class":100},[94,9351,7880],{"class":1944},[94,9353,9354],{"class":104}," sArray[",[94,9356,424],{"class":153},[94,9358,4671],{"class":104},[94,9360,9361],{"class":96,"line":1655},[94,9362,3976],{"class":104},[94,9364,9365],{"class":96,"line":1660},[94,9366,9367],{"class":163},"\u002F\u002F给老师和学生赋值的函数\n",[94,9369,9370,9372,9375,9377,9379,9382,9385,9388,9390,9392],{"class":96,"line":1674},[94,9371,5346],{"class":100},[94,9373,9374],{"class":1944}," allocateSpace",[94,9376,105],{"class":104},[94,9378,7741],{"class":100},[94,9380,9381],{"class":1944}," Teacher",[94,9383,9384],{"class":5198}," tArray",[94,9386,9387],{"class":104},"[],",[94,9389,108],{"class":100},[94,9391,7313],{"class":5198},[94,9393,111],{"class":104},[94,9395,9396],{"class":96,"line":1679},[94,9397,1527],{"class":104},[94,9399,9400,9403,9405,9408],{"class":96,"line":1708},[94,9401,9402],{"class":104},"    string nameSeed",[94,9404,150],{"class":100},[94,9406,9407],{"class":209},"\"ABCDE\"",[94,9409,1271],{"class":104},[94,9411,9412,9414,9416,9418,9421,9423,9425,9428,9430,9433,9435],{"class":96,"line":1713},[94,9413,3182],{"class":100},[94,9415,1639],{"class":104},[94,9417,108],{"class":100},[94,9419,9420],{"class":104}," i ",[94,9422,150],{"class":100},[94,9424,4074],{"class":153},[94,9426,9427],{"class":104},"; i ",[94,9429,1015],{"class":100},[94,9431,9432],{"class":104}," len; i",[94,9434,2273],{"class":100},[94,9436,111],{"class":104},[94,9438,9439],{"class":96,"line":1730},[94,9440,2011],{"class":104},[94,9442,9443,9446,9448,9451],{"class":96,"line":1735},[94,9444,9445],{"class":104},"        tArray[i].tName ",[94,9447,150],{"class":100},[94,9449,9450],{"class":209}," \"Teacher_\"",[94,9452,1271],{"class":104},[94,9454,9455,9457,9460],{"class":96,"line":1740},[94,9456,9445],{"class":104},[94,9458,9459],{"class":100},"+=",[94,9461,9462],{"class":104},"nameSeed[i];\n",[94,9464,9465],{"class":96,"line":1745},[94,9466,2381],{"emptyLinePlaceholder":20},[94,9468,9469],{"class":96,"line":1759},[94,9470,9471],{"class":163},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[94,9473,9474,9476,9478,9480,9483,9485,9487,9490,9492,9494,9497,9499],{"class":96,"line":1764},[94,9475,3384],{"class":100},[94,9477,1639],{"class":104},[94,9479,108],{"class":100},[94,9481,9482],{"class":104}," j ",[94,9484,150],{"class":100},[94,9486,4074],{"class":153},[94,9488,9489],{"class":104},"; j ",[94,9491,1015],{"class":100},[94,9493,2129],{"class":153},[94,9495,9496],{"class":104},"; j",[94,9498,2273],{"class":100},[94,9500,111],{"class":104},[94,9502,9503],{"class":96,"line":2558},[94,9504,2491],{"class":104},[94,9506,9507,9510,9512,9515],{"class":96,"line":2572},[94,9508,9509],{"class":104},"            tArray[i].sArray[j].sName ",[94,9511,150],{"class":100},[94,9513,9514],{"class":209}," \"Student_\"",[94,9516,1271],{"class":104},[94,9518,9519,9521,9523],{"class":96,"line":2580},[94,9520,9509],{"class":104},[94,9522,9459],{"class":100},[94,9524,9525],{"class":104}," nameSeed[j];\n",[94,9527,9528,9531,9534,9536,9538,9540,9542,9544,9546,9548,9550],{"class":96,"line":2585},[94,9529,9530],{"class":100},"            int",[94,9532,9533],{"class":104}," random",[94,9535,150],{"class":100},[94,9537,2405],{"class":1944},[94,9539,2408],{"class":104},[94,9541,433],{"class":100},[94,9543,1012],{"class":153},[94,9545,586],{"class":100},[94,9547,506],{"class":153},[94,9549,160],{"class":104},[94,9551,9552],{"class":163},"\u002F\u002F40~99\n",[94,9554,9555,9558,9560,9562],{"class":96,"line":2591},[94,9556,9557],{"class":104},"            tArray[i].sArray[j].age ",[94,9559,150],{"class":100},[94,9561,8932],{"class":153},[94,9563,1271],{"class":104},[94,9565,9566,9569,9571],{"class":96,"line":2597},[94,9567,9568],{"class":104},"            tArray[i].sArray[j].score ",[94,9570,150],{"class":100},[94,9572,9573],{"class":104}," random;\n",[94,9575,9576],{"class":96,"line":2602},[94,9577,2510],{"class":104},[94,9579,9580],{"class":96,"line":7930},[94,9581,2168],{"class":104},[94,9583,9584],{"class":96,"line":7954},[94,9585,1546],{"class":104},[94,9587,9588],{"class":96,"line":7959},[94,9589,9590],{"class":163},"\u002F\u002F打印所有信息的函数\n",[94,9592,9593,9595,9598,9600,9602,9604,9606,9609,9611,9613],{"class":96,"line":7965},[94,9594,5346],{"class":100},[94,9596,9597],{"class":1944}," printInfo",[94,9599,105],{"class":104},[94,9601,7741],{"class":100},[94,9603,9381],{"class":1944},[94,9605,9384],{"class":5198},[94,9607,9608],{"class":104},"[], ",[94,9610,108],{"class":100},[94,9612,7313],{"class":5198},[94,9614,111],{"class":104},[94,9616,9617],{"class":96,"line":7992},[94,9618,1527],{"class":104},[94,9620,9621,9623,9625,9627,9629,9631,9633,9635,9637,9639,9641],{"class":96,"line":7997},[94,9622,3182],{"class":100},[94,9624,1639],{"class":104},[94,9626,108],{"class":100},[94,9628,9420],{"class":104},[94,9630,150],{"class":100},[94,9632,4074],{"class":153},[94,9634,9427],{"class":104},[94,9636,1015],{"class":100},[94,9638,9432],{"class":104},[94,9640,2273],{"class":100},[94,9642,111],{"class":104},[94,9644,9645],{"class":96,"line":8003},[94,9646,2011],{"class":104},[94,9648,9649,9652,9654,9657,9659,9662,9664],{"class":96,"line":8015},[94,9650,9651],{"class":104},"        cout ",[94,9653,1149],{"class":100},[94,9655,9656],{"class":209}," \"Teacher: \"",[94,9658,1425],{"class":100},[94,9660,9661],{"class":104}," tArray[i].tName ",[94,9663,1149],{"class":100},[94,9665,8822],{"class":104},[94,9667,9668,9670,9672,9674,9676,9678,9680,9682,9684,9686,9688,9690],{"class":96,"line":8027},[94,9669,3384],{"class":100},[94,9671,1639],{"class":104},[94,9673,108],{"class":100},[94,9675,9482],{"class":104},[94,9677,150],{"class":100},[94,9679,4074],{"class":153},[94,9681,9489],{"class":104},[94,9683,1015],{"class":100},[94,9685,2129],{"class":153},[94,9687,9496],{"class":104},[94,9689,2273],{"class":100},[94,9691,111],{"class":104},[94,9693,9694],{"class":96,"line":8039},[94,9695,2491],{"class":104},[94,9697,9699,9702,9704,9707,9709,9712,9714,9717,9719],{"class":96,"line":9698},47,[94,9700,9701],{"class":104},"            cout ",[94,9703,1149],{"class":100},[94,9705,9706],{"class":209}," \"",[94,9708,1211],{"class":153},[94,9710,9711],{"class":209},"Student: \"",[94,9713,1425],{"class":100},[94,9715,9716],{"class":104}," tArray[i].sArray[j].sName",[94,9718,1149],{"class":100},[94,9720,1172],{"class":104},[94,9722,9724,9726,9728,9730,9732,9735,9737,9740,9742],{"class":96,"line":9723},48,[94,9725,9701],{"class":104},[94,9727,1149],{"class":100},[94,9729,9706],{"class":209},[94,9731,1211],{"class":153},[94,9733,9734],{"class":209},"Age: \"",[94,9736,1425],{"class":100},[94,9738,9739],{"class":104}," tArray[i].sArray[j].age ",[94,9741,1149],{"class":100},[94,9743,8822],{"class":104},[94,9745,9747,9749,9751,9753,9755,9758,9760,9763,9765],{"class":96,"line":9746},49,[94,9748,9701],{"class":104},[94,9750,1149],{"class":100},[94,9752,9706],{"class":209},[94,9754,1211],{"class":153},[94,9756,9757],{"class":209},"Score: \"",[94,9759,1425],{"class":100},[94,9761,9762],{"class":104}," tArray[i].sArray[j].score ",[94,9764,1149],{"class":100},[94,9766,9767],{"class":104}," endl;   \n",[94,9769,9771],{"class":96,"line":9770},50,[94,9772,2510],{"class":104},[94,9774,9776],{"class":96,"line":9775},51,[94,9777,2168],{"class":104},[94,9779,9781],{"class":96,"line":9780},52,[94,9782,1546],{"class":104},[94,9784,9786,9788,9790],{"class":96,"line":9785},53,[94,9787,108],{"class":100},[94,9789,1954],{"class":1944},[94,9791,1957],{"class":104},[94,9793,9795],{"class":96,"line":9794},54,[94,9796,1527],{"class":104},[94,9798,9800],{"class":96,"line":9799},55,[94,9801,9802],{"class":163},"    \u002F\u002F随机数种子\n",[94,9804,9806,9808,9810,9812,9814,9816,9818,9820,9822],{"class":96,"line":9805},56,[94,9807,2354],{"class":1944},[94,9809,2357],{"class":104},[94,9811,2360],{"class":100},[94,9813,2363],{"class":100},[94,9815,534],{"class":104},[94,9817,2368],{"class":1944},[94,9819,105],{"class":104},[94,9821,2373],{"class":153},[94,9823,2376],{"class":104},[94,9825,9827],{"class":96,"line":9826},57,[94,9828,9829],{"class":163},"    \u002F\u002F1.创建3名老师的数组\n",[94,9831,9833,9835,9837,9840,9842],{"class":96,"line":9832},58,[94,9834,7877],{"class":100},[94,9836,9381],{"class":1944},[94,9838,9839],{"class":104}," tArray[",[94,9841,176],{"class":153},[94,9843,4671],{"class":104},[94,9845,9847],{"class":96,"line":9846},59,[94,9848,9849],{"class":163},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[94,9851,9853,9855,9858,9860,9863,9866,9868,9870,9873,9875],{"class":96,"line":9852},60,[94,9854,1966],{"class":100},[94,9856,9857],{"class":104}," len ",[94,9859,150],{"class":100},[94,9861,9862],{"class":100}," sizeof",[94,9864,9865],{"class":104},"(tArray) ",[94,9867,689],{"class":100},[94,9869,9862],{"class":100},[94,9871,9872],{"class":104},"(tArray[",[94,9874,296],{"class":153},[94,9876,3837],{"class":104},[94,9878,9880,9883],{"class":96,"line":9879},61,[94,9881,9882],{"class":1944},"    allocateSpace",[94,9884,9885],{"class":104},"(tArray, len);\n",[94,9887,9889],{"class":96,"line":9888},62,[94,9890,9891],{"class":163},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[94,9893,9895,9898],{"class":96,"line":9894},63,[94,9896,9897],{"class":1944},"    printInfo",[94,9899,9885],{"class":104},[94,9901,9903],{"class":96,"line":9902},64,[94,9904,2381],{"emptyLinePlaceholder":20},[94,9906,9908],{"class":96,"line":9907},65,[94,9909,1546],{"class":104},[48,9911,9912],{"start":15},[51,9913,9914,9917],{},[254,9915,9916],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[40,9919,9920],{},"五名英雄信息如下：",[85,9922,9926],{"className":9923,"code":9924,"language":9925,"meta":14,"style":14},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[91,9927,9928,9946,9963,9980,9997],{"__ignoreMap":14},[94,9929,9930,9932,9935,9937,9939,9941,9944],{"class":96,"line":97},[94,9931,4898],{"class":104},[94,9933,9934],{"class":209},"\"刘备\"",[94,9936,483],{"class":104},[94,9938,880],{"class":153},[94,9940,483],{"class":104},[94,9942,9943],{"class":209},"\"男\"",[94,9945,4911],{"class":104},[94,9947,9948,9950,9953,9955,9957,9959,9961],{"class":96,"line":15},[94,9949,4898],{"class":104},[94,9951,9952],{"class":209},"\"关羽\"",[94,9954,483],{"class":104},[94,9956,855],{"class":153},[94,9958,483],{"class":104},[94,9960,9943],{"class":209},[94,9962,4911],{"class":104},[94,9964,9965,9967,9970,9972,9974,9976,9978],{"class":96,"line":1160},[94,9966,4898],{"class":104},[94,9968,9969],{"class":209},"\"张飞\"",[94,9971,483],{"class":104},[94,9973,805],{"class":153},[94,9975,483],{"class":104},[94,9977,9943],{"class":209},[94,9979,4911],{"class":104},[94,9981,9982,9984,9987,9989,9991,9993,9995],{"class":96,"line":1175},[94,9983,4898],{"class":104},[94,9985,9986],{"class":209},"\"赵云\"",[94,9988,483],{"class":104},[94,9990,830],{"class":153},[94,9992,483],{"class":104},[94,9994,9943],{"class":209},[94,9996,4911],{"class":104},[94,9998,9999,10001,10004,10006,10008,10010,10013],{"class":96,"line":1181},[94,10000,4898],{"class":104},[94,10002,10003],{"class":209},"\"貂蝉\"",[94,10005,483],{"class":104},[94,10007,780],{"class":153},[94,10009,483],{"class":104},[94,10011,10012],{"class":209},"\"女\"",[94,10014,4911],{"class":104},[40,10016,10017],{},"代码：",[85,10019,10021],{"className":87,"code":10020,"language":89,"meta":14,"style":14},"#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",[91,10022,10023,10029,10039,10045,10052,10056,10060,10066,10071,10075,10080,10103,10107,10132,10136,10169,10174,10203,10208,10223,10249,10269,10274,10279,10283,10287,10292,10314,10318,10342,10346,10408,10412,10416,10424,10428,10433,10444,10448,10464,10480,10496,10512,10528,10532,10552,10574,10579,10592,10599,10604,10610,10615,10628,10634],{"__ignoreMap":14},[94,10024,10025,10027],{"class":96,"line":97},[94,10026,1930],{"class":100},[94,10028,1933],{"class":209},[94,10030,10031,10033,10035,10037],{"class":96,"line":15},[94,10032,1938],{"class":100},[94,10034,1941],{"class":100},[94,10036,1945],{"class":1944},[94,10038,1271],{"class":104},[94,10040,10041,10043],{"class":96,"line":1160},[94,10042,1930],{"class":100},[94,10044,7731],{"class":209},[94,10046,10047,10049],{"class":96,"line":1175},[94,10048,7741],{"class":100},[94,10050,10051],{"class":1944}," Sanguo\n",[94,10053,10054],{"class":96,"line":1181},[94,10055,1527],{"class":104},[94,10057,10058],{"class":96,"line":1195},[94,10059,7767],{"class":104},[94,10061,10062,10064],{"class":96,"line":1201},[94,10063,1966],{"class":100},[94,10065,7779],{"class":104},[94,10067,10068],{"class":96,"line":1292},[94,10069,10070],{"class":104},"    string gender;\n",[94,10072,10073],{"class":96,"line":1298},[94,10074,3976],{"class":104},[94,10076,10077],{"class":96,"line":1310},[94,10078,10079],{"class":163},"\u002F\u002F定义排序函数\n",[94,10081,10082,10084,10086,10088,10091,10093,10095,10097,10099,10101],{"class":96,"line":1593},[94,10083,5346],{"class":100},[94,10085,7298],{"class":1944},[94,10087,105],{"class":104},[94,10089,10090],{"class":1944},"Sanguo",[94,10092,6500],{"class":100},[94,10094,800],{"class":5198},[94,10096,483],{"class":104},[94,10098,108],{"class":100},[94,10100,7313],{"class":5198},[94,10102,111],{"class":104},[94,10104,10105],{"class":96,"line":1598},[94,10106,1527],{"class":104},[94,10108,10109,10111,10113,10115,10117,10119,10121,10123,10125,10128,10130],{"class":96,"line":1604},[94,10110,3182],{"class":100},[94,10112,105],{"class":104},[94,10114,108],{"class":100},[94,10116,3013],{"class":104},[94,10118,150],{"class":100},[94,10120,296],{"class":153},[94,10122,3020],{"class":104},[94,10124,1015],{"class":100},[94,10126,10127],{"class":104},"len;i",[94,10129,2273],{"class":100},[94,10131,111],{"class":104},[94,10133,10134],{"class":96,"line":1609},[94,10135,2011],{"class":104},[94,10137,10138,10141,10143,10145,10147,10149,10151,10153,10155,10157,10159,10161,10163,10165,10167],{"class":96,"line":1623},[94,10139,10140],{"class":100},"     for",[94,10142,1639],{"class":104},[94,10144,108],{"class":100},[94,10146,3391],{"class":104},[94,10148,150],{"class":100},[94,10150,296],{"class":153},[94,10152,3398],{"class":104},[94,10154,1015],{"class":100},[94,10156,7340],{"class":104},[94,10158,637],{"class":100},[94,10160,322],{"class":153},[94,10162,637],{"class":100},[94,10164,3531],{"class":104},[94,10166,2273],{"class":100},[94,10168,111],{"class":104},[94,10170,10171],{"class":96,"line":1628},[94,10172,10173],{"class":104},"     {\n",[94,10175,10176,10179,10182,10184,10187,10189,10192,10194,10196,10198,10200],{"class":96,"line":1634},[94,10177,10178],{"class":100},"         if",[94,10180,10181],{"class":104}," ((s",[94,10183,586],{"class":100},[94,10185,10186],{"class":104},"j)->age ",[94,10188,1065],{"class":100},[94,10190,10191],{"class":104}," (s",[94,10193,586],{"class":100},[94,10195,572],{"class":104},[94,10197,586],{"class":100},[94,10199,322],{"class":153},[94,10201,10202],{"class":104},")->age)\n",[94,10204,10205],{"class":96,"line":1655},[94,10206,10207],{"class":104},"         {\n",[94,10209,10210,10213,10215,10218,10220],{"class":96,"line":1660},[94,10211,10212],{"class":104},"             Sanguo temp",[94,10214,7135],{"class":100},[94,10216,10217],{"class":104},"(s",[94,10219,586],{"class":100},[94,10221,10222],{"class":104},"j);\n",[94,10224,10225,10228,10230,10232,10235,10237,10239,10241,10243,10245,10247],{"class":96,"line":1674},[94,10226,10227],{"class":100},"             *",[94,10229,10217],{"class":104},[94,10231,586],{"class":100},[94,10233,10234],{"class":104},"j)",[94,10236,7135],{"class":100},[94,10238,10217],{"class":104},[94,10240,586],{"class":100},[94,10242,572],{"class":104},[94,10244,586],{"class":100},[94,10246,322],{"class":153},[94,10248,2700],{"class":104},[94,10250,10251,10253,10255,10257,10259,10261,10263,10265,10267],{"class":96,"line":1679},[94,10252,10227],{"class":100},[94,10254,10217],{"class":104},[94,10256,586],{"class":100},[94,10258,572],{"class":104},[94,10260,586],{"class":100},[94,10262,322],{"class":153},[94,10264,534],{"class":104},[94,10266,150],{"class":100},[94,10268,4261],{"class":104},[94,10270,10271],{"class":96,"line":1708},[94,10272,10273],{"class":104},"         }\n",[94,10275,10276],{"class":96,"line":1713},[94,10277,10278],{"class":104},"     }\n",[94,10280,10281],{"class":96,"line":1730},[94,10282,2168],{"class":104},[94,10284,10285],{"class":96,"line":1735},[94,10286,1546],{"class":104},[94,10288,10289],{"class":96,"line":1740},[94,10290,10291],{"class":163},"\u002F\u002F定义打印函数\n",[94,10293,10294,10296,10298,10300,10302,10304,10306,10308,10310,10312],{"class":96,"line":1745},[94,10295,5346],{"class":100},[94,10297,9597],{"class":1944},[94,10299,105],{"class":104},[94,10301,10090],{"class":1944},[94,10303,6500],{"class":100},[94,10305,800],{"class":5198},[94,10307,483],{"class":104},[94,10309,108],{"class":100},[94,10311,7313],{"class":5198},[94,10313,111],{"class":104},[94,10315,10316],{"class":96,"line":1759},[94,10317,1527],{"class":104},[94,10319,10320,10322,10324,10326,10328,10330,10332,10334,10336,10338,10340],{"class":96,"line":1764},[94,10321,3182],{"class":100},[94,10323,1639],{"class":104},[94,10325,108],{"class":100},[94,10327,3013],{"class":104},[94,10329,150],{"class":100},[94,10331,296],{"class":153},[94,10333,3020],{"class":104},[94,10335,1015],{"class":100},[94,10337,10127],{"class":104},[94,10339,2273],{"class":100},[94,10341,111],{"class":104},[94,10343,10344],{"class":96,"line":2558},[94,10345,2011],{"class":104},[94,10347,10348,10350,10352,10354,10356,10359,10361,10363,10365,10368,10370,10372,10374,10377,10379,10381,10383,10386,10388,10390,10392,10395,10397,10399,10401,10404,10406],{"class":96,"line":2572},[94,10349,3432],{"class":104},[94,10351,1149],{"class":100},[94,10353,356],{"class":209},[94,10355,1211],{"class":153},[94,10357,10358],{"class":209},"姓名：\"",[94,10360,1149],{"class":100},[94,10362,10217],{"class":104},[94,10364,586],{"class":100},[94,10366,10367],{"class":104},"i)->name",[94,10369,1149],{"class":100},[94,10371,356],{"class":209},[94,10373,1211],{"class":153},[94,10375,10376],{"class":209},"年龄：\"",[94,10378,1149],{"class":100},[94,10380,10217],{"class":104},[94,10382,586],{"class":100},[94,10384,10385],{"class":104},"i)->age",[94,10387,1149],{"class":100},[94,10389,356],{"class":209},[94,10391,1211],{"class":153},[94,10393,10394],{"class":209},"性别：\"",[94,10396,1149],{"class":100},[94,10398,10217],{"class":104},[94,10400,586],{"class":100},[94,10402,10403],{"class":104},"i)->gender",[94,10405,1149],{"class":100},[94,10407,1172],{"class":104},[94,10409,10410],{"class":96,"line":2580},[94,10411,2168],{"class":104},[94,10413,10414],{"class":96,"line":2585},[94,10415,1546],{"class":104},[94,10417,10418,10420,10422],{"class":96,"line":2591},[94,10419,108],{"class":100},[94,10421,1954],{"class":1944},[94,10423,1957],{"class":104},[94,10425,10426],{"class":96,"line":2597},[94,10427,1527],{"class":104},[94,10429,10430],{"class":96,"line":2602},[94,10431,10432],{"class":163},"    \u002F\u002F定义结构体变量\n",[94,10434,10435,10438,10440,10442],{"class":96,"line":7930},[94,10436,10437],{"class":104},"    Sanguo s1[",[94,10439,424],{"class":153},[94,10441,1045],{"class":104},[94,10443,4889],{"class":100},[94,10445,10446],{"class":96,"line":7954},[94,10447,2011],{"class":104},[94,10449,10450,10452,10454,10456,10458,10460,10462],{"class":96,"line":7959},[94,10451,4898],{"class":104},[94,10453,9934],{"class":209},[94,10455,483],{"class":104},[94,10457,880],{"class":153},[94,10459,483],{"class":104},[94,10461,9943],{"class":209},[94,10463,4911],{"class":104},[94,10465,10466,10468,10470,10472,10474,10476,10478],{"class":96,"line":7965},[94,10467,4898],{"class":104},[94,10469,9952],{"class":209},[94,10471,483],{"class":104},[94,10473,855],{"class":153},[94,10475,483],{"class":104},[94,10477,9943],{"class":209},[94,10479,4911],{"class":104},[94,10481,10482,10484,10486,10488,10490,10492,10494],{"class":96,"line":7992},[94,10483,4898],{"class":104},[94,10485,9969],{"class":209},[94,10487,483],{"class":104},[94,10489,805],{"class":153},[94,10491,483],{"class":104},[94,10493,9943],{"class":209},[94,10495,4911],{"class":104},[94,10497,10498,10500,10502,10504,10506,10508,10510],{"class":96,"line":7997},[94,10499,4898],{"class":104},[94,10501,9986],{"class":209},[94,10503,483],{"class":104},[94,10505,830],{"class":153},[94,10507,483],{"class":104},[94,10509,9943],{"class":209},[94,10511,4911],{"class":104},[94,10513,10514,10516,10518,10520,10522,10524,10526],{"class":96,"line":8003},[94,10515,4898],{"class":104},[94,10517,10003],{"class":209},[94,10519,483],{"class":104},[94,10521,780],{"class":153},[94,10523,483],{"class":104},[94,10525,10012],{"class":209},[94,10527,4911],{"class":104},[94,10529,10530],{"class":96,"line":8015},[94,10531,4932],{"class":104},[94,10533,10534,10536,10538,10540,10543,10545,10548,10550],{"class":96,"line":8027},[94,10535,1966],{"class":100},[94,10537,7313],{"class":104},[94,10539,4184],{"class":100},[94,10541,10542],{"class":104},"(s1)",[94,10544,4190],{"class":100},[94,10546,10547],{"class":104},"(s1[",[94,10549,296],{"class":153},[94,10551,3837],{"class":104},[94,10553,10554,10557,10559,10562,10564,10567,10570,10572],{"class":96,"line":8039},[94,10555,10556],{"class":104},"    Sanguo ",[94,10558,560],{"class":100},[94,10560,10561],{"class":104},"s ",[94,10563,150],{"class":100},[94,10565,10566],{"class":100}," &",[94,10568,10569],{"class":104},"s1[",[94,10571,296],{"class":153},[94,10573,4671],{"class":104},[94,10575,10576],{"class":96,"line":9698},[94,10577,10578],{"class":163},"    \u002F\u002F排序前：\n",[94,10580,10581,10583,10585,10588,10590],{"class":96,"line":9723},[94,10582,6511],{"class":104},[94,10584,1149],{"class":100},[94,10586,10587],{"class":209}," \"排序前：\"",[94,10589,1425],{"class":100},[94,10591,8822],{"class":104},[94,10593,10594,10596],{"class":96,"line":9746},[94,10595,9897],{"class":1944},[94,10597,10598],{"class":104},"(s,len);\n",[94,10600,10601],{"class":96,"line":9770},[94,10602,10603],{"class":163},"    \u002F\u002F调用排序函数\n",[94,10605,10606,10608],{"class":96,"line":9775},[94,10607,7580],{"class":1944},[94,10609,10598],{"class":104},[94,10611,10612],{"class":96,"line":9780},[94,10613,10614],{"class":163},"    \u002F\u002F排序后\n",[94,10616,10617,10619,10621,10624,10626],{"class":96,"line":9785},[94,10618,6511],{"class":104},[94,10620,1149],{"class":100},[94,10622,10623],{"class":209}," \"排序后：\"",[94,10625,1425],{"class":100},[94,10627,8822],{"class":104},[94,10629,10630,10632],{"class":96,"line":9794},[94,10631,9897],{"class":1944},[94,10633,10598],{"class":104},[94,10635,10636],{"class":96,"line":9799},[94,10637,1546],{"class":104},[40,10639,10640,10641,10643],{},"注意：使用指针时直接用传首地址**&s",[94,10642,296],{},"**",[5108,10645,10646],{},"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":14,"searchDepth":15,"depth":15,"links":10648},[10649,10650,10651,10652,10653,10654,10655],{"id":7685,"depth":15,"text":7686},{"id":8047,"depth":15,"text":8048},{"id":8316,"depth":15,"text":8317},{"id":8481,"depth":15,"text":8482},{"id":8697,"depth":15,"text":8698},{"id":9018,"depth":15,"text":9019},{"id":9246,"depth":15,"text":9247},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7674,"description":7682},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10662,"title":10663,"body":10664,"description":14,"extension":18,"meta":12007,"navigation":20,"path":12008,"seo":12009,"stem":12010,"__hash__":12011},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10665,"toc":12001},[10666,10669,10673,10679,10693,10698,10701,10705,10712,10718,10721,10728,10734,10739,10742,10745,10748,11312,11315,11329,11333,11338,11354,11494,11497,11503,11506,11511,11519,11627,11630,11635,11638,11643,11646,11652,11655,11998],[10,10667,10663],{"id":10668},"_5程序内存模型",[35,10670,10672],{"id":10671},"_51内存分区模型","5.1内存分区模型",[40,10674,10675,10676],{},"C++程序在执行时，将内存大方向划分为",[254,10677,10678],{},"4个区域",[1112,10680,10681,10684,10687,10690],{},[51,10682,10683],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[51,10685,10686],{},"全局区：存放全局变量和静态变量以及常量",[51,10688,10689],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[51,10691,10692],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[40,10694,10695],{},[254,10696,10697],{},"内存四区意义：",[40,10699,10700],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[65,10702,10704],{"id":10703},"_511程序运行前","5.1.1程序运行前",[40,10706,10707,10708,10711],{},"​\t在程序编译后，生成了exe可执行程序，",[254,10709,10710],{},"未执行该程序前","分为两个区域",[40,10713,10714,10715],{},"​\t",[254,10716,10717],{},"代码区：",[40,10719,10720],{},"​\t\t存放 CPU 执行的机器指令",[40,10722,10723,10724,10727],{},"​\t\t代码区是",[254,10725,10726],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[40,10729,10723,10730,10733],{},[254,10731,10732],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[40,10735,10714,10736],{},[254,10737,10738],{},"全局区：",[40,10740,10741],{},"​\t\t全局变量和静态变量存放在此.",[40,10743,10744],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[40,10746,10747],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[85,10749,10751],{"className":87,"code":10750,"language":89,"meta":14,"style":14},"\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",[91,10752,10753,10758,10771,10784,10788,10793,10808,10823,10827,10836,10840,10845,10858,10871,10875,10880,10906,10932,10936,10963,10989,10993,10998,11014,11029,11033,11059,11085,11089,11114,11139,11143,11169,11195,11199,11215,11230,11256,11282,11286,11296,11300,11308],{"__ignoreMap":14},[94,10754,10755],{"class":96,"line":97},[94,10756,10757],{"class":163},"\u002F\u002F全局变量\n",[94,10759,10760,10762,10765,10767,10769],{"class":96,"line":15},[94,10761,108],{"class":100},[94,10763,10764],{"class":104}," g_a ",[94,10766,150],{"class":100},[94,10768,2019],{"class":153},[94,10770,1271],{"class":104},[94,10772,10773,10775,10778,10780,10782],{"class":96,"line":1160},[94,10774,108],{"class":100},[94,10776,10777],{"class":104}," g_b ",[94,10779,150],{"class":100},[94,10781,2019],{"class":153},[94,10783,1271],{"class":104},[94,10785,10786],{"class":96,"line":1175},[94,10787,2381],{"emptyLinePlaceholder":20},[94,10789,10790],{"class":96,"line":1181},[94,10791,10792],{"class":163},"\u002F\u002F全局常量\n",[94,10794,10795,10797,10799,10802,10804,10806],{"class":96,"line":1195},[94,10796,6774],{"class":100},[94,10798,2363],{"class":100},[94,10800,10801],{"class":104}," c_g_a ",[94,10803,150],{"class":100},[94,10805,2019],{"class":153},[94,10807,1271],{"class":104},[94,10809,10810,10812,10814,10817,10819,10821],{"class":96,"line":1201},[94,10811,6774],{"class":100},[94,10813,2363],{"class":100},[94,10815,10816],{"class":104}," c_g_b ",[94,10818,150],{"class":100},[94,10820,2019],{"class":153},[94,10822,1271],{"class":104},[94,10824,10825],{"class":96,"line":1292},[94,10826,2381],{"emptyLinePlaceholder":20},[94,10828,10829,10831,10833],{"class":96,"line":1298},[94,10830,108],{"class":100},[94,10832,1954],{"class":1944},[94,10834,10835],{"class":104},"() {\n",[94,10837,10838],{"class":96,"line":1310},[94,10839,2381],{"emptyLinePlaceholder":20},[94,10841,10842],{"class":96,"line":1593},[94,10843,10844],{"class":163},"    \u002F\u002F局部变量\n",[94,10846,10847,10849,10852,10854,10856],{"class":96,"line":1598},[94,10848,1966],{"class":100},[94,10850,10851],{"class":104}," a ",[94,10853,150],{"class":100},[94,10855,2019],{"class":153},[94,10857,1271],{"class":104},[94,10859,10860,10862,10865,10867,10869],{"class":96,"line":1604},[94,10861,1966],{"class":100},[94,10863,10864],{"class":104}," b ",[94,10866,150],{"class":100},[94,10868,2019],{"class":153},[94,10870,1271],{"class":104},[94,10872,10873],{"class":96,"line":1609},[94,10874,2381],{"emptyLinePlaceholder":20},[94,10876,10877],{"class":96,"line":1623},[94,10878,10879],{"class":163},"    \u002F\u002F打印地址\n",[94,10881,10882,10884,10886,10889,10891,10893,10895,10897,10899,10902,10904],{"class":96,"line":1628},[94,10883,6511],{"class":104},[94,10885,1149],{"class":100},[94,10887,10888],{"class":209}," \"局部变量a地址为： \"",[94,10890,1425],{"class":100},[94,10892,1639],{"class":104},[94,10894,108],{"class":100},[94,10896,534],{"class":104},[94,10898,458],{"class":100},[94,10900,10901],{"class":104},"a ",[94,10903,1149],{"class":100},[94,10905,8822],{"class":104},[94,10907,10908,10910,10912,10915,10917,10919,10921,10923,10925,10928,10930],{"class":96,"line":1634},[94,10909,6511],{"class":104},[94,10911,1149],{"class":100},[94,10913,10914],{"class":209}," \"局部变量b地址为： \"",[94,10916,1425],{"class":100},[94,10918,1639],{"class":104},[94,10920,108],{"class":100},[94,10922,534],{"class":104},[94,10924,458],{"class":100},[94,10926,10927],{"class":104},"b ",[94,10929,1149],{"class":100},[94,10931,8822],{"class":104},[94,10933,10934],{"class":96,"line":1655},[94,10935,2381],{"emptyLinePlaceholder":20},[94,10937,10938,10940,10942,10945,10947,10950,10952,10954,10956,10959,10961],{"class":96,"line":1660},[94,10939,6511],{"class":104},[94,10941,1149],{"class":100},[94,10943,10944],{"class":209}," \"全局变量g_a地址为： \"",[94,10946,1425],{"class":100},[94,10948,10949],{"class":104},"  (",[94,10951,108],{"class":100},[94,10953,534],{"class":104},[94,10955,458],{"class":100},[94,10957,10958],{"class":104},"g_a ",[94,10960,1149],{"class":100},[94,10962,8822],{"class":104},[94,10964,10965,10967,10969,10972,10974,10976,10978,10980,10982,10985,10987],{"class":96,"line":1674},[94,10966,6511],{"class":104},[94,10968,1149],{"class":100},[94,10970,10971],{"class":209}," \"全局变量g_b地址为： \"",[94,10973,1425],{"class":100},[94,10975,10949],{"class":104},[94,10977,108],{"class":100},[94,10979,534],{"class":104},[94,10981,458],{"class":100},[94,10983,10984],{"class":104},"g_b ",[94,10986,1149],{"class":100},[94,10988,8822],{"class":104},[94,10990,10991],{"class":96,"line":1679},[94,10992,2381],{"emptyLinePlaceholder":20},[94,10994,10995],{"class":96,"line":1708},[94,10996,10997],{"class":163},"    \u002F\u002F静态变量\n",[94,10999,11000,11003,11005,11008,11010,11012],{"class":96,"line":1713},[94,11001,11002],{"class":100},"    static",[94,11004,2363],{"class":100},[94,11006,11007],{"class":104}," s_a ",[94,11009,150],{"class":100},[94,11011,2019],{"class":153},[94,11013,1271],{"class":104},[94,11015,11016,11018,11020,11023,11025,11027],{"class":96,"line":1730},[94,11017,11002],{"class":100},[94,11019,2363],{"class":100},[94,11021,11022],{"class":104}," s_b ",[94,11024,150],{"class":100},[94,11026,2019],{"class":153},[94,11028,1271],{"class":104},[94,11030,11031],{"class":96,"line":1735},[94,11032,2381],{"emptyLinePlaceholder":20},[94,11034,11035,11037,11039,11042,11044,11046,11048,11050,11052,11055,11057],{"class":96,"line":1740},[94,11036,6511],{"class":104},[94,11038,1149],{"class":100},[94,11040,11041],{"class":209}," \"静态变量s_a地址为： \"",[94,11043,1425],{"class":100},[94,11045,1639],{"class":104},[94,11047,108],{"class":100},[94,11049,534],{"class":104},[94,11051,458],{"class":100},[94,11053,11054],{"class":104},"s_a ",[94,11056,1149],{"class":100},[94,11058,8822],{"class":104},[94,11060,11061,11063,11065,11068,11070,11072,11074,11076,11078,11081,11083],{"class":96,"line":1745},[94,11062,6511],{"class":104},[94,11064,1149],{"class":100},[94,11066,11067],{"class":209}," \"静态变量s_b地址为： \"",[94,11069,1425],{"class":100},[94,11071,1639],{"class":104},[94,11073,108],{"class":100},[94,11075,534],{"class":104},[94,11077,458],{"class":100},[94,11079,11080],{"class":104},"s_b ",[94,11082,1149],{"class":100},[94,11084,8822],{"class":104},[94,11086,11087],{"class":96,"line":1759},[94,11088,2381],{"emptyLinePlaceholder":20},[94,11090,11091,11093,11095,11098,11100,11102,11104,11106,11108,11110,11112],{"class":96,"line":1764},[94,11092,6511],{"class":104},[94,11094,1149],{"class":100},[94,11096,11097],{"class":209}," \"字符串常量地址为： \"",[94,11099,1425],{"class":100},[94,11101,1639],{"class":104},[94,11103,108],{"class":100},[94,11105,534],{"class":104},[94,11107,458],{"class":100},[94,11109,1167],{"class":209},[94,11111,1425],{"class":100},[94,11113,8822],{"class":104},[94,11115,11116,11118,11120,11122,11124,11126,11128,11130,11132,11135,11137],{"class":96,"line":2558},[94,11117,6511],{"class":104},[94,11119,1149],{"class":100},[94,11121,11097],{"class":209},[94,11123,1425],{"class":100},[94,11125,1639],{"class":104},[94,11127,108],{"class":100},[94,11129,534],{"class":104},[94,11131,458],{"class":100},[94,11133,11134],{"class":209},"\"hello world1\"",[94,11136,1425],{"class":100},[94,11138,8822],{"class":104},[94,11140,11141],{"class":96,"line":2572},[94,11142,2381],{"emptyLinePlaceholder":20},[94,11144,11145,11147,11149,11152,11154,11156,11158,11160,11162,11165,11167],{"class":96,"line":2580},[94,11146,6511],{"class":104},[94,11148,1149],{"class":100},[94,11150,11151],{"class":209}," \"全局常量c_g_a地址为： \"",[94,11153,1425],{"class":100},[94,11155,1639],{"class":104},[94,11157,108],{"class":100},[94,11159,534],{"class":104},[94,11161,458],{"class":100},[94,11163,11164],{"class":104},"c_g_a ",[94,11166,1149],{"class":100},[94,11168,8822],{"class":104},[94,11170,11171,11173,11175,11178,11180,11182,11184,11186,11188,11191,11193],{"class":96,"line":2585},[94,11172,6511],{"class":104},[94,11174,1149],{"class":100},[94,11176,11177],{"class":209}," \"全局常量c_g_b地址为： \"",[94,11179,1425],{"class":100},[94,11181,1639],{"class":104},[94,11183,108],{"class":100},[94,11185,534],{"class":104},[94,11187,458],{"class":100},[94,11189,11190],{"class":104},"c_g_b ",[94,11192,1149],{"class":100},[94,11194,8822],{"class":104},[94,11196,11197],{"class":96,"line":2591},[94,11198,2381],{"emptyLinePlaceholder":20},[94,11200,11201,11204,11206,11209,11211,11213],{"class":96,"line":2597},[94,11202,11203],{"class":100},"    const",[94,11205,2363],{"class":100},[94,11207,11208],{"class":104}," c_l_a ",[94,11210,150],{"class":100},[94,11212,2019],{"class":153},[94,11214,1271],{"class":104},[94,11216,11217,11219,11221,11224,11226,11228],{"class":96,"line":2602},[94,11218,11203],{"class":100},[94,11220,2363],{"class":100},[94,11222,11223],{"class":104}," c_l_b ",[94,11225,150],{"class":100},[94,11227,2019],{"class":153},[94,11229,1271],{"class":104},[94,11231,11232,11234,11236,11239,11241,11243,11245,11247,11249,11252,11254],{"class":96,"line":7930},[94,11233,6511],{"class":104},[94,11235,1149],{"class":100},[94,11237,11238],{"class":209}," \"局部常量c_l_a地址为： \"",[94,11240,1425],{"class":100},[94,11242,1639],{"class":104},[94,11244,108],{"class":100},[94,11246,534],{"class":104},[94,11248,458],{"class":100},[94,11250,11251],{"class":104},"c_l_a ",[94,11253,1149],{"class":100},[94,11255,8822],{"class":104},[94,11257,11258,11260,11262,11265,11267,11269,11271,11273,11275,11278,11280],{"class":96,"line":7954},[94,11259,6511],{"class":104},[94,11261,1149],{"class":100},[94,11263,11264],{"class":209}," \"局部常量c_l_b地址为： \"",[94,11266,1425],{"class":100},[94,11268,1639],{"class":104},[94,11270,108],{"class":100},[94,11272,534],{"class":104},[94,11274,458],{"class":100},[94,11276,11277],{"class":104},"c_l_b ",[94,11279,1149],{"class":100},[94,11281,8822],{"class":104},[94,11283,11284],{"class":96,"line":7959},[94,11285,2381],{"emptyLinePlaceholder":20},[94,11287,11288,11290,11292,11294],{"class":96,"line":7965},[94,11289,2284],{"class":1944},[94,11291,105],{"class":104},[94,11293,2289],{"class":209},[94,11295,2700],{"class":104},[94,11297,11298],{"class":96,"line":7992},[94,11299,2381],{"emptyLinePlaceholder":20},[94,11301,11302,11304,11306],{"class":96,"line":7997},[94,11303,4071],{"class":100},[94,11305,4074],{"class":153},[94,11307,1271],{"class":104},[94,11309,11310],{"class":96,"line":8003},[94,11311,1546],{"class":104},[40,11313,11314],{},"总结：",[1112,11316,11317,11320,11323,11326],{},[51,11318,11319],{},"c++中程序运行前分为全局区和代码区",[51,11321,11322],{},"代码区特点是共享和只读",[51,11324,11325],{},"全局区中存放全局变量、静态变量、常量",[51,11327,11328],{},"常量区中存放const修饰的全局常量和字符串常量",[65,11330,11332],{"id":11331},"_512程序运行后","5.1.2程序运行后",[48,11334,11335],{},[51,11336,11337],{},"栈区：",[1112,11339,11340,11347],{},[51,11341,11342,11343,11346],{},"由编译器自动分配释放, 存放",[254,11344,11345],{},"函数的参数值,局部变量","等",[51,11348,11349,11350,11353],{},"注意事项：",[254,11351,11352],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[85,11355,11357],{"className":87,"code":11356,"language":89,"meta":14,"style":14},"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",[91,11358,11359,11370,11374,11389,11401,11405,11409,11417,11422,11437,11455,11472,11482,11490],{"__ignoreMap":14},[94,11360,11361,11363,11365,11368],{"class":96,"line":97},[94,11362,108],{"class":100},[94,11364,6500],{"class":100},[94,11366,11367],{"class":1944}," func",[94,11369,1957],{"class":104},[94,11371,11372],{"class":96,"line":15},[94,11373,1527],{"class":104},[94,11375,11376,11378,11380,11382,11384,11386],{"class":96,"line":1160},[94,11377,1966],{"class":100},[94,11379,10851],{"class":104},[94,11381,150],{"class":100},[94,11383,2019],{"class":153},[94,11385,160],{"class":104},[94,11387,11388],{"class":163}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[94,11390,11391,11393,11395,11398],{"class":96,"line":1175},[94,11392,4071],{"class":100},[94,11394,10566],{"class":100},[94,11396,11397],{"class":104},"a;",[94,11399,11400],{"class":163}," \u002F\u002F放回局部变量的地址\n",[94,11402,11403],{"class":96,"line":1181},[94,11404,1546],{"class":104},[94,11406,11407],{"class":96,"line":1195},[94,11408,2381],{"emptyLinePlaceholder":20},[94,11410,11411,11413,11415],{"class":96,"line":1201},[94,11412,108],{"class":100},[94,11414,1954],{"class":1944},[94,11416,10835],{"class":104},[94,11418,11419],{"class":96,"line":1292},[94,11420,11421],{"class":163},"    \u002F\u002F接受func的返回值\n",[94,11423,11424,11426,11428,11431,11433,11435],{"class":96,"line":1298},[94,11425,1966],{"class":100},[94,11427,6500],{"class":100},[94,11429,11430],{"class":104},"p ",[94,11432,150],{"class":100},[94,11434,11367],{"class":1944},[94,11436,5618],{"class":104},[94,11438,11439,11441,11443,11445,11447,11449,11452],{"class":96,"line":1310},[94,11440,6511],{"class":104},[94,11442,1149],{"class":100},[94,11444,6500],{"class":100},[94,11446,11430],{"class":104},[94,11448,1149],{"class":100},[94,11450,11451],{"class":104}," endl;",[94,11453,11454],{"class":163}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[94,11456,11457,11459,11461,11463,11465,11467,11469],{"class":96,"line":1593},[94,11458,6511],{"class":104},[94,11460,1149],{"class":100},[94,11462,6500],{"class":100},[94,11464,11430],{"class":104},[94,11466,1149],{"class":100},[94,11468,11451],{"class":104},[94,11470,11471],{"class":163}," \u002F\u002F第二次这个数据不再保留\n",[94,11473,11474,11476,11478,11480],{"class":96,"line":1598},[94,11475,2284],{"class":1944},[94,11477,105],{"class":104},[94,11479,2289],{"class":209},[94,11481,2700],{"class":104},[94,11483,11484,11486,11488],{"class":96,"line":1604},[94,11485,4071],{"class":100},[94,11487,4074],{"class":153},[94,11489,1271],{"class":104},[94,11491,11492],{"class":96,"line":1609},[94,11493,1546],{"class":104},[40,11495,11496],{},"输出结果：",[40,11498,11499],{},[1443,11500],{"alt":11501,"src":11502},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[40,11504,11505],{},"总结：不要返回局部变量的地址",[48,11507,11508],{"start":15},[51,11509,11510],{},"堆区",[1112,11512,11513,11516],{},[51,11514,11515],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[51,11517,11518],{},"在c++中主要利用new在堆区开辟内存",[85,11520,11522],{"className":87,"code":11521,"language":89,"meta":14,"style":14},"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",[91,11523,11524,11539,11543,11548,11569,11576,11580,11588,11592,11597,11611,11623],{"__ignoreMap":14},[94,11525,11526,11528,11531,11534,11536],{"class":96,"line":97},[94,11527,108],{"class":100},[94,11529,11530],{"class":100},"  *",[94,11532,11533],{"class":1944},"func",[94,11535,2408],{"class":104},[94,11537,11538],{"class":163},"  \u002F\u002F函数返回指针\n",[94,11540,11541],{"class":96,"line":15},[94,11542,1527],{"class":104},[94,11544,11545],{"class":96,"line":1160},[94,11546,11547],{"class":163},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[94,11549,11550,11552,11554,11556,11558,11561,11563,11565,11567],{"class":96,"line":1175},[94,11551,4128],{"class":100},[94,11553,6500],{"class":100},[94,11555,40],{"class":104},[94,11557,150],{"class":100},[94,11559,11560],{"class":100}," new",[94,11562,2363],{"class":100},[94,11564,105],{"class":104},[94,11566,551],{"class":153},[94,11568,2700],{"class":104},[94,11570,11571,11573],{"class":96,"line":1181},[94,11572,4362],{"class":100},[94,11574,11575],{"class":104}," p;\n",[94,11577,11578],{"class":96,"line":1195},[94,11579,1546],{"class":104},[94,11581,11582,11584,11586],{"class":96,"line":1201},[94,11583,108],{"class":100},[94,11585,1954],{"class":1944},[94,11587,1957],{"class":104},[94,11589,11590],{"class":96,"line":1292},[94,11591,1527],{"class":104},[94,11593,11594],{"class":96,"line":1298},[94,11595,11596],{"class":163},"    \u002F\u002F在堆区开辟数据\n",[94,11598,11599,11601,11603,11605,11607,11609],{"class":96,"line":1310},[94,11600,1966],{"class":100},[94,11602,6500],{"class":100},[94,11604,40],{"class":104},[94,11606,150],{"class":100},[94,11608,11533],{"class":1944},[94,11610,5618],{"class":104},[94,11612,11613,11615,11617,11619,11621],{"class":96,"line":1593},[94,11614,1532],{"class":104},[94,11616,6401],{"class":100},[94,11618,40],{"class":104},[94,11620,1149],{"class":100},[94,11622,1172],{"class":104},[94,11624,11625],{"class":96,"line":1598},[94,11626,1546],{"class":104},[40,11628,11629],{},"图片展示：",[40,11631,11632],{},[1443,11633],{"alt":11501,"src":11634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[40,11636,11637],{},"堆区内存由程序员管生死！！！",[48,11639,11640],{"start":1160},[51,11641,11642],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[40,11644,11645],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[40,11647,11648,11649],{},"​语法：",[91,11650,11651],{}," new 数据类型",[40,11653,11654],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[85,11656,11658],{"className":87,"code":11657,"language":89,"meta":14,"style":14},"\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",[91,11659,11660,11665,11675,11679,11684,11689,11711,11715,11723,11727,11741,11753,11765,11777,11782,11787,11798,11802,11807,11815,11819,11824,11846,11872,11876,11894,11898,11924,11928,11940,11944,11949,11954,11962,11966,11970,11978,11982,11988,11994],{"__ignoreMap":14},[94,11661,11662],{"class":96,"line":97},[94,11663,11664],{"class":163},"\u002F\u002F1.new的基本语法\n",[94,11666,11667,11669,11671,11673],{"class":96,"line":15},[94,11668,108],{"class":100},[94,11670,6500],{"class":100},[94,11672,11533],{"class":1944},[94,11674,1957],{"class":104},[94,11676,11677],{"class":96,"line":1160},[94,11678,1527],{"class":104},[94,11680,11681],{"class":96,"line":1175},[94,11682,11683],{"class":163},"    \u002F\u002F在堆区创建整型数据\n",[94,11685,11686],{"class":96,"line":1181},[94,11687,11688],{"class":163},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[94,11690,11691,11693,11695,11697,11700,11702,11704,11706,11708],{"class":96,"line":1195},[94,11692,1966],{"class":100},[94,11694,6500],{"class":100},[94,11696,40],{"class":104},[94,11698,11699],{"class":100},"=new",[94,11701,2363],{"class":100},[94,11703,105],{"class":104},[94,11705,551],{"class":153},[94,11707,5948],{"class":104},[94,11709,11710],{"class":163},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[94,11712,11713],{"class":96,"line":1201},[94,11714,1546],{"class":104},[94,11716,11717,11719,11721],{"class":96,"line":1292},[94,11718,5346],{"class":100},[94,11720,5570],{"class":1944},[94,11722,1957],{"class":104},[94,11724,11725],{"class":96,"line":1298},[94,11726,1527],{"class":104},[94,11728,11729,11731,11733,11735,11737,11739],{"class":96,"line":1310},[94,11730,1966],{"class":100},[94,11732,6500],{"class":100},[94,11734,40],{"class":104},[94,11736,150],{"class":100},[94,11738,11533],{"class":1944},[94,11740,5618],{"class":104},[94,11742,11743,11745,11747,11749,11751],{"class":96,"line":1593},[94,11744,1532],{"class":104},[94,11746,6401],{"class":100},[94,11748,40],{"class":104},[94,11750,1149],{"class":100},[94,11752,1172],{"class":104},[94,11754,11755,11757,11759,11761,11763],{"class":96,"line":1598},[94,11756,1532],{"class":104},[94,11758,6401],{"class":100},[94,11760,40],{"class":104},[94,11762,1149],{"class":100},[94,11764,1172],{"class":104},[94,11766,11767,11769,11771,11773,11775],{"class":96,"line":1604},[94,11768,1532],{"class":104},[94,11770,6401],{"class":100},[94,11772,40],{"class":104},[94,11774,1149],{"class":100},[94,11776,1172],{"class":104},[94,11778,11779],{"class":96,"line":1609},[94,11780,11781],{"class":163},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[94,11783,11784],{"class":96,"line":1623},[94,11785,11786],{"class":163},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[94,11788,11789,11792,11795],{"class":96,"line":1628},[94,11790,11791],{"class":100},"    delete",[94,11793,11794],{"class":104}," p;",[94,11796,11797],{"class":163},"\u002F\u002F删除这块地址\n",[94,11799,11800],{"class":96,"line":1634},[94,11801,1546],{"class":104},[94,11803,11804],{"class":96,"line":1655},[94,11805,11806],{"class":163},"\u002F\u002F2.在堆区利用new开辟数组\n",[94,11808,11809,11811,11813],{"class":96,"line":1660},[94,11810,5346],{"class":100},[94,11812,5639],{"class":1944},[94,11814,1957],{"class":104},[94,11816,11817],{"class":96,"line":1674},[94,11818,1527],{"class":104},[94,11820,11821],{"class":96,"line":1679},[94,11822,11823],{"class":163},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[94,11825,11826,11828,11830,11832,11834,11836,11838,11840,11843],{"class":96,"line":1708},[94,11827,1966],{"class":100},[94,11829,6500],{"class":100},[94,11831,3861],{"class":104},[94,11833,11699],{"class":100},[94,11835,2363],{"class":100},[94,11837,995],{"class":104},[94,11839,551],{"class":153},[94,11841,11842],{"class":104},"];",[94,11844,11845],{"class":163},"\u002F\u002F10代表数组有10个元素\n",[94,11847,11848,11850,11852,11854,11856,11858,11860,11862,11864,11866,11868,11870],{"class":96,"line":1713},[94,11849,3182],{"class":100},[94,11851,1639],{"class":104},[94,11853,108],{"class":100},[94,11855,3013],{"class":104},[94,11857,150],{"class":100},[94,11859,296],{"class":153},[94,11861,3020],{"class":104},[94,11863,1015],{"class":100},[94,11865,551],{"class":153},[94,11867,3020],{"class":104},[94,11869,2273],{"class":100},[94,11871,111],{"class":104},[94,11873,11874],{"class":96,"line":1730},[94,11875,2011],{"class":104},[94,11877,11878,11881,11883,11885,11887,11889,11891],{"class":96,"line":1735},[94,11879,11880],{"class":104},"        arr[i]",[94,11882,150],{"class":100},[94,11884,546],{"class":104},[94,11886,586],{"class":100},[94,11888,416],{"class":153},[94,11890,160],{"class":104},[94,11892,11893],{"class":163},"\u002F\u002F给10个元素赋值100～109\n",[94,11895,11896],{"class":96,"line":1740},[94,11897,2168],{"class":104},[94,11899,11900,11902,11904,11906,11908,11910,11912,11914,11916,11918,11920,11922],{"class":96,"line":1745},[94,11901,3182],{"class":100},[94,11903,1639],{"class":104},[94,11905,108],{"class":100},[94,11907,3013],{"class":104},[94,11909,150],{"class":100},[94,11911,296],{"class":153},[94,11913,3020],{"class":104},[94,11915,1015],{"class":100},[94,11917,551],{"class":153},[94,11919,3020],{"class":104},[94,11921,2273],{"class":100},[94,11923,111],{"class":104},[94,11925,11926],{"class":96,"line":1759},[94,11927,2011],{"class":104},[94,11929,11930,11932,11934,11936,11938],{"class":96,"line":1764},[94,11931,3432],{"class":104},[94,11933,1149],{"class":100},[94,11935,4335],{"class":104},[94,11937,1149],{"class":100},[94,11939,1172],{"class":104},[94,11941,11942],{"class":96,"line":2558},[94,11943,2168],{"class":104},[94,11945,11946],{"class":96,"line":2572},[94,11947,11948],{"class":163},"    \u002F\u002F释放堆区数组\n",[94,11950,11951],{"class":96,"line":2580},[94,11952,11953],{"class":163},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[94,11955,11956,11959],{"class":96,"line":2585},[94,11957,11958],{"class":100},"    delete[]",[94,11960,11961],{"class":104}," arr;\n",[94,11963,11964],{"class":96,"line":2591},[94,11965,1546],{"class":104},[94,11967,11968],{"class":96,"line":2597},[94,11969,2381],{"emptyLinePlaceholder":20},[94,11971,11972,11974,11976],{"class":96,"line":2602},[94,11973,108],{"class":100},[94,11975,1954],{"class":1944},[94,11977,1957],{"class":104},[94,11979,11980],{"class":96,"line":7930},[94,11981,1527],{"class":104},[94,11983,11984,11986],{"class":96,"line":7954},[94,11985,5615],{"class":1944},[94,11987,5618],{"class":104},[94,11989,11990,11992],{"class":96,"line":7959},[94,11991,5684],{"class":1944},[94,11993,5618],{"class":104},[94,11995,11996],{"class":96,"line":7965},[94,11997,1546],{"class":104},[5108,11999,12000],{},"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":14,"searchDepth":15,"depth":15,"links":12002},[12003],{"id":10671,"depth":15,"text":10672,"children":12004},[12005,12006],{"id":10703,"depth":1160,"text":10704},{"id":11331,"depth":1160,"text":11332},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10663,"description":14},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12013,"title":12014,"body":12015,"description":14,"extension":18,"meta":13496,"navigation":20,"path":13497,"seo":13498,"stem":13499,"__hash__":13500},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12016,"toc":13488},[12017,12020,12024,12027,12030,12199,12203,12208,12225,12230,12382,12386,12389,12392,12786,12790,12793,12798,12801,13113,13117,13123,13283,13285,13293,13297,13300,13307,13485],[10,12018,12014],{"id":12019},"_6引用",[35,12021,12023],{"id":12022},"_61引用基本用法","6.1引用基本用法",[40,12025,12026],{},"引用的本质：给变量起别名",[40,12028,12029],{},"语法：数据类型 &别名=原名",[85,12031,12033],{"className":87,"code":12032,"language":89,"meta":14,"style":14},"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",[91,12034,12035,12043,12047,12059,12071,12075,12094,12113,12117,12128,12132,12151,12169,12173,12183,12187,12195],{"__ignoreMap":14},[94,12036,12037,12039,12041],{"class":96,"line":97},[94,12038,108],{"class":100},[94,12040,1954],{"class":1944},[94,12042,10835],{"class":104},[94,12044,12045],{"class":96,"line":15},[94,12046,2381],{"emptyLinePlaceholder":20},[94,12048,12049,12051,12053,12055,12057],{"class":96,"line":1160},[94,12050,1966],{"class":100},[94,12052,10851],{"class":104},[94,12054,150],{"class":100},[94,12056,2019],{"class":153},[94,12058,1271],{"class":104},[94,12060,12061,12063,12065,12067,12069],{"class":96,"line":1175},[94,12062,1966],{"class":100},[94,12064,10566],{"class":100},[94,12066,10927],{"class":104},[94,12068,150],{"class":100},[94,12070,1413],{"class":104},[94,12072,12073],{"class":96,"line":1181},[94,12074,2381],{"emptyLinePlaceholder":20},[94,12076,12077,12079,12081,12084,12086,12088,12090,12092],{"class":96,"line":1195},[94,12078,6511],{"class":104},[94,12080,1149],{"class":100},[94,12082,12083],{"class":209}," \"a = \"",[94,12085,1425],{"class":100},[94,12087,10851],{"class":104},[94,12089,1149],{"class":100},[94,12091,11451],{"class":104},[94,12093,7250],{"class":163},[94,12095,12096,12098,12100,12103,12105,12107,12109,12111],{"class":96,"line":1201},[94,12097,6511],{"class":104},[94,12099,1149],{"class":100},[94,12101,12102],{"class":209}," \"b = \"",[94,12104,1425],{"class":100},[94,12106,10864],{"class":104},[94,12108,1149],{"class":100},[94,12110,11451],{"class":104},[94,12112,7250],{"class":163},[94,12114,12115],{"class":96,"line":1292},[94,12116,2381],{"emptyLinePlaceholder":20},[94,12118,12119,12122,12124,12126],{"class":96,"line":1298},[94,12120,12121],{"class":104},"    b ",[94,12123,150],{"class":100},[94,12125,5736],{"class":153},[94,12127,1271],{"class":104},[94,12129,12130],{"class":96,"line":1310},[94,12131,2381],{"emptyLinePlaceholder":20},[94,12133,12134,12136,12138,12140,12142,12144,12146,12148],{"class":96,"line":1593},[94,12135,6511],{"class":104},[94,12137,1149],{"class":100},[94,12139,12083],{"class":209},[94,12141,1425],{"class":100},[94,12143,10851],{"class":104},[94,12145,1149],{"class":100},[94,12147,11451],{"class":104},[94,12149,12150],{"class":163},"\u002F\u002F100\n",[94,12152,12153,12155,12157,12159,12161,12163,12165,12167],{"class":96,"line":1598},[94,12154,6511],{"class":104},[94,12156,1149],{"class":100},[94,12158,12102],{"class":209},[94,12160,1425],{"class":100},[94,12162,10864],{"class":104},[94,12164,1149],{"class":100},[94,12166,11451],{"class":104},[94,12168,12150],{"class":163},[94,12170,12171],{"class":96,"line":1604},[94,12172,2381],{"emptyLinePlaceholder":20},[94,12174,12175,12177,12179,12181],{"class":96,"line":1609},[94,12176,2284],{"class":1944},[94,12178,105],{"class":104},[94,12180,2289],{"class":209},[94,12182,2700],{"class":104},[94,12184,12185],{"class":96,"line":1623},[94,12186,2381],{"emptyLinePlaceholder":20},[94,12188,12189,12191,12193],{"class":96,"line":1628},[94,12190,4071],{"class":100},[94,12192,4074],{"class":153},[94,12194,1271],{"class":104},[94,12196,12197],{"class":96,"line":1634},[94,12198,1546],{"class":104},[35,12200,12202],{"id":12201},"_62引用的注意事项","6.2引用的注意事项",[48,12204,12205],{},[51,12206,12207],{},"引用必须要初始化",[85,12209,12211],{"className":87,"code":12210,"language":89,"meta":14,"style":14},"int &b;\u002F\u002F非常错误！\n",[91,12212,12213],{"__ignoreMap":14},[94,12214,12215,12217,12219,12222],{"class":96,"line":97},[94,12216,108],{"class":100},[94,12218,10566],{"class":100},[94,12220,12221],{"class":104},"b;",[94,12223,12224],{"class":163},"\u002F\u002F非常错误！\n",[48,12226,12227],{"start":15},[51,12228,12229],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[85,12231,12233],{"className":87,"code":12232,"language":89,"meta":14,"style":14},"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",[91,12234,12235,12243,12255,12267,12275,12291,12304,12322,12340,12360,12370,12378],{"__ignoreMap":14},[94,12236,12237,12239,12241],{"class":96,"line":97},[94,12238,108],{"class":100},[94,12240,1954],{"class":1944},[94,12242,10835],{"class":104},[94,12244,12245,12247,12249,12251,12253],{"class":96,"line":15},[94,12246,1966],{"class":100},[94,12248,10851],{"class":104},[94,12250,150],{"class":100},[94,12252,2019],{"class":153},[94,12254,1271],{"class":104},[94,12256,12257,12259,12261,12263,12265],{"class":96,"line":1160},[94,12258,1966],{"class":100},[94,12260,10864],{"class":104},[94,12262,150],{"class":100},[94,12264,8932],{"class":153},[94,12266,1271],{"class":104},[94,12268,12269,12272],{"class":96,"line":1175},[94,12270,12271],{"class":163},"    \u002F\u002Fint &c;",[94,12273,12274],{"class":163}," \u002F\u002F错误，引用必须初始化\n",[94,12276,12277,12279,12281,12283,12285,12288],{"class":96,"line":1181},[94,12278,1966],{"class":100},[94,12280,10566],{"class":100},[94,12282,2927],{"class":104},[94,12284,150],{"class":100},[94,12286,12287],{"class":104}," a;",[94,12289,12290],{"class":163}," \u002F\u002F一旦初始化后，就不可以更改\n",[94,12292,12293,12296,12298,12301],{"class":96,"line":1195},[94,12294,12295],{"class":104},"    c ",[94,12297,150],{"class":100},[94,12299,12300],{"class":104}," b;",[94,12302,12303],{"class":163}," \u002F\u002F这是赋值操作，不是更改引用\n",[94,12305,12306,12308,12310,12312,12314,12316,12318,12320],{"class":96,"line":1201},[94,12307,6511],{"class":104},[94,12309,1149],{"class":100},[94,12311,12083],{"class":209},[94,12313,1425],{"class":100},[94,12315,10851],{"class":104},[94,12317,1149],{"class":100},[94,12319,11451],{"class":104},[94,12321,7235],{"class":163},[94,12323,12324,12326,12328,12330,12332,12334,12336,12338],{"class":96,"line":1292},[94,12325,6511],{"class":104},[94,12327,1149],{"class":100},[94,12329,12102],{"class":209},[94,12331,1425],{"class":100},[94,12333,10864],{"class":104},[94,12335,1149],{"class":100},[94,12337,11451],{"class":104},[94,12339,7235],{"class":163},[94,12341,12342,12344,12346,12349,12351,12354,12356,12358],{"class":96,"line":1298},[94,12343,6511],{"class":104},[94,12345,1149],{"class":100},[94,12347,12348],{"class":209}," \"c = \"",[94,12350,1425],{"class":100},[94,12352,12353],{"class":104}," c ",[94,12355,1149],{"class":100},[94,12357,11451],{"class":104},[94,12359,7235],{"class":163},[94,12361,12362,12364,12366,12368],{"class":96,"line":1310},[94,12363,2284],{"class":1944},[94,12365,105],{"class":104},[94,12367,2289],{"class":209},[94,12369,2700],{"class":104},[94,12371,12372,12374,12376],{"class":96,"line":1593},[94,12373,4071],{"class":100},[94,12375,4074],{"class":153},[94,12377,1271],{"class":104},[94,12379,12380],{"class":96,"line":1598},[94,12381,1546],{"class":104},[35,12383,12385],{"id":12384},"_63引用做函数参数","6.3引用做函数参数",[40,12387,12388],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[40,12390,12391],{},"优点：可以简化指针修改实参",[85,12393,12395],{"className":87,"code":12394,"language":89,"meta":14,"style":14},"\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",[91,12396,12397,12402,12425,12436,12446,12455,12459,12463,12468,12490,12502,12514,12524,12528,12532,12537,12559,12569,12577,12585,12589,12593,12601,12605,12617,12629,12633,12644,12670,12674,12694,12718,12722,12732,12756,12760,12770,12774,12782],{"__ignoreMap":14},[94,12398,12399],{"class":96,"line":97},[94,12400,12401],{"class":163},"\u002F\u002F1. 值传递\n",[94,12403,12404,12406,12409,12411,12413,12415,12418,12420,12422],{"class":96,"line":15},[94,12405,5346],{"class":100},[94,12407,12408],{"class":1944}," mySwap01",[94,12410,105],{"class":104},[94,12412,108],{"class":100},[94,12414,1379],{"class":5198},[94,12416,12417],{"class":104},", ",[94,12419,108],{"class":100},[94,12421,2814],{"class":5198},[94,12423,12424],{"class":104},") {\n",[94,12426,12427,12429,12432,12434],{"class":96,"line":1160},[94,12428,1966],{"class":100},[94,12430,12431],{"class":104}," temp ",[94,12433,150],{"class":100},[94,12435,1413],{"class":104},[94,12437,12438,12441,12443],{"class":96,"line":1175},[94,12439,12440],{"class":104},"    a ",[94,12442,150],{"class":100},[94,12444,12445],{"class":104}," b;\n",[94,12447,12448,12450,12452],{"class":96,"line":1181},[94,12449,12121],{"class":104},[94,12451,150],{"class":100},[94,12453,12454],{"class":104}," temp;\n",[94,12456,12457],{"class":96,"line":1195},[94,12458,1546],{"class":104},[94,12460,12461],{"class":96,"line":1201},[94,12462,2381],{"emptyLinePlaceholder":20},[94,12464,12465],{"class":96,"line":1292},[94,12466,12467],{"class":163},"\u002F\u002F2. 地址传递\n",[94,12469,12470,12472,12475,12477,12480,12482,12484,12486,12488],{"class":96,"line":1298},[94,12471,5346],{"class":100},[94,12473,12474],{"class":1944}," mySwap02",[94,12476,105],{"class":104},[94,12478,12479],{"class":100},"int*",[94,12481,1379],{"class":5198},[94,12483,12417],{"class":104},[94,12485,12479],{"class":100},[94,12487,2814],{"class":5198},[94,12489,12424],{"class":104},[94,12491,12492,12494,12496,12498,12500],{"class":96,"line":1310},[94,12493,1966],{"class":100},[94,12495,12431],{"class":104},[94,12497,150],{"class":100},[94,12499,6500],{"class":100},[94,12501,6179],{"class":104},[94,12503,12504,12506,12508,12510,12512],{"class":96,"line":1593},[94,12505,6385],{"class":100},[94,12507,10901],{"class":104},[94,12509,150],{"class":100},[94,12511,6500],{"class":100},[94,12513,6051],{"class":104},[94,12515,12516,12518,12520,12522],{"class":96,"line":1598},[94,12517,6385],{"class":100},[94,12519,10927],{"class":104},[94,12521,150],{"class":100},[94,12523,12454],{"class":104},[94,12525,12526],{"class":96,"line":1604},[94,12527,1546],{"class":104},[94,12529,12530],{"class":96,"line":1609},[94,12531,2381],{"emptyLinePlaceholder":20},[94,12533,12534],{"class":96,"line":1623},[94,12535,12536],{"class":163},"\u002F\u002F3. 引用传递\n",[94,12538,12539,12541,12544,12546,12549,12551,12553,12555,12557],{"class":96,"line":1628},[94,12540,5346],{"class":100},[94,12542,12543],{"class":1944}," mySwap03",[94,12545,105],{"class":104},[94,12547,12548],{"class":100},"int&",[94,12550,1379],{"class":5198},[94,12552,12417],{"class":104},[94,12554,12548],{"class":100},[94,12556,2814],{"class":5198},[94,12558,12424],{"class":104},[94,12560,12561,12563,12565,12567],{"class":96,"line":1634},[94,12562,1966],{"class":100},[94,12564,12431],{"class":104},[94,12566,150],{"class":100},[94,12568,1413],{"class":104},[94,12570,12571,12573,12575],{"class":96,"line":1655},[94,12572,12440],{"class":104},[94,12574,150],{"class":100},[94,12576,12445],{"class":104},[94,12578,12579,12581,12583],{"class":96,"line":1660},[94,12580,12121],{"class":104},[94,12582,150],{"class":100},[94,12584,12454],{"class":104},[94,12586,12587],{"class":96,"line":1674},[94,12588,1546],{"class":104},[94,12590,12591],{"class":96,"line":1679},[94,12592,2381],{"emptyLinePlaceholder":20},[94,12594,12595,12597,12599],{"class":96,"line":1708},[94,12596,108],{"class":100},[94,12598,1954],{"class":1944},[94,12600,10835],{"class":104},[94,12602,12603],{"class":96,"line":1713},[94,12604,2381],{"emptyLinePlaceholder":20},[94,12606,12607,12609,12611,12613,12615],{"class":96,"line":1730},[94,12608,1966],{"class":100},[94,12610,10851],{"class":104},[94,12612,150],{"class":100},[94,12614,2019],{"class":153},[94,12616,1271],{"class":104},[94,12618,12619,12621,12623,12625,12627],{"class":96,"line":1735},[94,12620,1966],{"class":100},[94,12622,10864],{"class":104},[94,12624,150],{"class":100},[94,12626,8932],{"class":153},[94,12628,1271],{"class":104},[94,12630,12631],{"class":96,"line":1740},[94,12632,2381],{"emptyLinePlaceholder":20},[94,12634,12635,12638,12641],{"class":96,"line":1745},[94,12636,12637],{"class":1944},"    mySwap01",[94,12639,12640],{"class":104},"(a, b);",[94,12642,12643],{"class":163},"\u002F\u002F值传递，形参不会修饰实参\n",[94,12645,12646,12648,12650,12653,12655,12657,12659,12662,12664,12666,12668],{"class":96,"line":1759},[94,12647,6511],{"class":104},[94,12649,1149],{"class":100},[94,12651,12652],{"class":209}," \"a:\"",[94,12654,1425],{"class":100},[94,12656,10851],{"class":104},[94,12658,1149],{"class":100},[94,12660,12661],{"class":209}," \" b:\"",[94,12663,1425],{"class":100},[94,12665,10864],{"class":104},[94,12667,1149],{"class":100},[94,12669,8822],{"class":104},[94,12671,12672],{"class":96,"line":1764},[94,12673,2381],{"emptyLinePlaceholder":20},[94,12675,12676,12679,12681,12683,12686,12688,12691],{"class":96,"line":2558},[94,12677,12678],{"class":1944},"    mySwap02",[94,12680,105],{"class":104},[94,12682,458],{"class":100},[94,12684,12685],{"class":104},"a, ",[94,12687,458],{"class":100},[94,12689,12690],{"class":104},"b);",[94,12692,12693],{"class":163},"\u002F\u002F地址传递，形参会修饰实参\n",[94,12695,12696,12698,12700,12702,12704,12706,12708,12710,12712,12714,12716],{"class":96,"line":2572},[94,12697,6511],{"class":104},[94,12699,1149],{"class":100},[94,12701,12652],{"class":209},[94,12703,1425],{"class":100},[94,12705,10851],{"class":104},[94,12707,1149],{"class":100},[94,12709,12661],{"class":209},[94,12711,1425],{"class":100},[94,12713,10864],{"class":104},[94,12715,1149],{"class":100},[94,12717,8822],{"class":104},[94,12719,12720],{"class":96,"line":2580},[94,12721,2381],{"emptyLinePlaceholder":20},[94,12723,12724,12727,12729],{"class":96,"line":2585},[94,12725,12726],{"class":1944},"    mySwap03",[94,12728,12640],{"class":104},[94,12730,12731],{"class":163},"\u002F\u002F引用传递，形参会修饰实参\n",[94,12733,12734,12736,12738,12740,12742,12744,12746,12748,12750,12752,12754],{"class":96,"line":2591},[94,12735,6511],{"class":104},[94,12737,1149],{"class":100},[94,12739,12652],{"class":209},[94,12741,1425],{"class":100},[94,12743,10851],{"class":104},[94,12745,1149],{"class":100},[94,12747,12661],{"class":209},[94,12749,1425],{"class":100},[94,12751,10864],{"class":104},[94,12753,1149],{"class":100},[94,12755,8822],{"class":104},[94,12757,12758],{"class":96,"line":2597},[94,12759,2381],{"emptyLinePlaceholder":20},[94,12761,12762,12764,12766,12768],{"class":96,"line":2602},[94,12763,2284],{"class":1944},[94,12765,105],{"class":104},[94,12767,2289],{"class":209},[94,12769,2700],{"class":104},[94,12771,12772],{"class":96,"line":7930},[94,12773,2381],{"emptyLinePlaceholder":20},[94,12775,12776,12778,12780],{"class":96,"line":7954},[94,12777,4071],{"class":100},[94,12779,4074],{"class":153},[94,12781,1271],{"class":104},[94,12783,12784],{"class":96,"line":7959},[94,12785,1546],{"class":104},[35,12787,12789],{"id":12788},"_64引用做函数的返回值","6.4引用做函数的返回值",[40,12791,12792],{},"作用：引用是可以作为函数的返回值存在的",[40,12794,9007,12795],{},[254,12796,12797],{},"不要返回局部变量引用",[40,12799,12800],{},"用法：函数调用作为左值",[85,12802,12804],{"className":9923,"code":12803,"language":9925,"meta":14,"style":14},"\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",[91,12805,12806,12811,12819,12834,12840,12844,12848,12853,12861,12878,12884,12888,12892,12900,12904,12909,12923,12943,12962,12966,12971,12984,13004,13022,13026,13042,13046,13065,13083,13087,13097,13101,13109],{"__ignoreMap":14},[94,12807,12808],{"class":96,"line":97},[94,12809,12810],{"class":163},"\u002F\u002F返回局部变量引用\n",[94,12812,12813,12815,12817],{"class":96,"line":15},[94,12814,12548],{"class":100},[94,12816,5570],{"class":1944},[94,12818,10835],{"class":104},[94,12820,12821,12823,12825,12827,12829,12831],{"class":96,"line":1160},[94,12822,1966],{"class":100},[94,12824,10851],{"class":104},[94,12826,150],{"class":100},[94,12828,2019],{"class":153},[94,12830,160],{"class":104},[94,12832,12833],{"class":163}," \u002F\u002F局部变量\n",[94,12835,12836,12838],{"class":96,"line":1175},[94,12837,4071],{"class":100},[94,12839,1413],{"class":104},[94,12841,12842],{"class":96,"line":1181},[94,12843,1546],{"class":104},[94,12845,12846],{"class":96,"line":1195},[94,12847,2381],{"emptyLinePlaceholder":20},[94,12849,12850],{"class":96,"line":1201},[94,12851,12852],{"class":163},"\u002F\u002F返回静态变量引用\n",[94,12854,12855,12857,12859],{"class":96,"line":1292},[94,12856,12548],{"class":100},[94,12858,5639],{"class":1944},[94,12860,10835],{"class":104},[94,12862,12863,12865,12867,12869,12871,12873,12875],{"class":96,"line":1298},[94,12864,11002],{"class":100},[94,12866,2363],{"class":100},[94,12868,10851],{"class":104},[94,12870,150],{"class":100},[94,12872,8932],{"class":153},[94,12874,160],{"class":104},[94,12876,12877],{"class":163},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[94,12879,12880,12882],{"class":96,"line":1310},[94,12881,4071],{"class":100},[94,12883,1413],{"class":104},[94,12885,12886],{"class":96,"line":1593},[94,12887,1546],{"class":104},[94,12889,12890],{"class":96,"line":1598},[94,12891,2381],{"emptyLinePlaceholder":20},[94,12893,12894,12896,12898],{"class":96,"line":1604},[94,12895,108],{"class":100},[94,12897,1954],{"class":1944},[94,12899,10835],{"class":104},[94,12901,12902],{"class":96,"line":1609},[94,12903,2381],{"emptyLinePlaceholder":20},[94,12905,12906],{"class":96,"line":1623},[94,12907,12908],{"class":163},"    \u002F\u002F不能返回局部变量的引用\n",[94,12910,12911,12914,12917,12919,12921],{"class":96,"line":1628},[94,12912,12913],{"class":100},"    int&",[94,12915,12916],{"class":104}," ref ",[94,12918,150],{"class":100},[94,12920,5570],{"class":1944},[94,12922,5618],{"class":104},[94,12924,12925,12927,12929,12932,12934,12936,12938,12940],{"class":96,"line":1634},[94,12926,6511],{"class":104},[94,12928,1149],{"class":100},[94,12930,12931],{"class":209}," \"ref = \"",[94,12933,1425],{"class":100},[94,12935,12916],{"class":104},[94,12937,1149],{"class":100},[94,12939,11451],{"class":104},[94,12941,12942],{"class":163},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[94,12944,12945,12947,12949,12951,12953,12955,12957,12959],{"class":96,"line":1655},[94,12946,6511],{"class":104},[94,12948,1149],{"class":100},[94,12950,12931],{"class":209},[94,12952,1425],{"class":100},[94,12954,12916],{"class":104},[94,12956,1149],{"class":100},[94,12958,11451],{"class":104},[94,12960,12961],{"class":163},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[94,12963,12964],{"class":96,"line":1660},[94,12965,2381],{"emptyLinePlaceholder":20},[94,12967,12968],{"class":96,"line":1674},[94,12969,12970],{"class":163},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[94,12972,12973,12975,12978,12980,12982],{"class":96,"line":1679},[94,12974,12913],{"class":100},[94,12976,12977],{"class":104}," ref2 ",[94,12979,150],{"class":100},[94,12981,5639],{"class":1944},[94,12983,5618],{"class":104},[94,12985,12986,12988,12990,12993,12995,12997,12999,13001],{"class":96,"line":1708},[94,12987,6511],{"class":104},[94,12989,1149],{"class":100},[94,12991,12992],{"class":209}," \"ref2 = \"",[94,12994,1425],{"class":100},[94,12996,12977],{"class":104},[94,12998,1149],{"class":100},[94,13000,11451],{"class":104},[94,13002,13003],{"class":163}," \u002F\u002F20\n",[94,13005,13006,13008,13010,13012,13014,13016,13018,13020],{"class":96,"line":1713},[94,13007,6511],{"class":104},[94,13009,1149],{"class":100},[94,13011,12992],{"class":209},[94,13013,1425],{"class":100},[94,13015,12977],{"class":104},[94,13017,1149],{"class":100},[94,13019,11451],{"class":104},[94,13021,13003],{"class":163},[94,13023,13024],{"class":96,"line":1730},[94,13025,2381],{"emptyLinePlaceholder":20},[94,13027,13028,13030,13033,13035,13037,13039],{"class":96,"line":1735},[94,13029,5684],{"class":1944},[94,13031,13032],{"class":104},"() ",[94,13034,150],{"class":100},[94,13036,2980],{"class":153},[94,13038,160],{"class":104},[94,13040,13041],{"class":163},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[94,13043,13044],{"class":96,"line":1740},[94,13045,2381],{"emptyLinePlaceholder":20},[94,13047,13048,13050,13052,13054,13056,13058,13060,13062],{"class":96,"line":1745},[94,13049,6511],{"class":104},[94,13051,1149],{"class":100},[94,13053,12992],{"class":209},[94,13055,1425],{"class":100},[94,13057,12977],{"class":104},[94,13059,1149],{"class":100},[94,13061,11451],{"class":104},[94,13063,13064],{"class":163}," \u002F\u002F1000\n",[94,13066,13067,13069,13071,13073,13075,13077,13079,13081],{"class":96,"line":1759},[94,13068,6511],{"class":104},[94,13070,1149],{"class":100},[94,13072,12992],{"class":209},[94,13074,1425],{"class":100},[94,13076,12977],{"class":104},[94,13078,1149],{"class":100},[94,13080,11451],{"class":104},[94,13082,13064],{"class":163},[94,13084,13085],{"class":96,"line":1764},[94,13086,2381],{"emptyLinePlaceholder":20},[94,13088,13089,13091,13093,13095],{"class":96,"line":2558},[94,13090,2284],{"class":1944},[94,13092,105],{"class":104},[94,13094,2289],{"class":209},[94,13096,2700],{"class":104},[94,13098,13099],{"class":96,"line":2572},[94,13100,2381],{"emptyLinePlaceholder":20},[94,13102,13103,13105,13107],{"class":96,"line":2580},[94,13104,4071],{"class":100},[94,13106,4074],{"class":153},[94,13108,1271],{"class":104},[94,13110,13111],{"class":96,"line":2585},[94,13112,1546],{"class":104},[35,13114,13116],{"id":13115},"_65引用的本质","6.5引用的本质",[40,13118,13119,13120],{},"本质：",[254,13121,13122],{},"引用的本质在c++内部实现是一个指针常量.",[85,13124,13126],{"className":87,"code":13125,"language":89,"meta":14,"style":14},"\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",[91,13127,13128,13133,13149,13163,13167,13176,13188,13193,13198,13209,13222,13226,13242,13259,13263,13271,13279],{"__ignoreMap":14},[94,13129,13130],{"class":96,"line":97},[94,13131,13132],{"class":163},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[94,13134,13135,13137,13139,13141,13143,13146],{"class":96,"line":15},[94,13136,5346],{"class":100},[94,13138,11367],{"class":1944},[94,13140,105],{"class":104},[94,13142,12548],{"class":100},[94,13144,13145],{"class":5198}," ref",[94,13147,13148],{"class":104},"){\n",[94,13150,13151,13154,13156,13158,13160],{"class":96,"line":1160},[94,13152,13153],{"class":104},"    ref ",[94,13155,150],{"class":100},[94,13157,5736],{"class":153},[94,13159,160],{"class":104},[94,13161,13162],{"class":163}," \u002F\u002F ref是引用，转换为*ref = 100\n",[94,13164,13165],{"class":96,"line":1175},[94,13166,1546],{"class":104},[94,13168,13169,13171,13173],{"class":96,"line":1181},[94,13170,108],{"class":100},[94,13172,1954],{"class":1944},[94,13174,13175],{"class":104},"(){\n",[94,13177,13178,13180,13182,13184,13186],{"class":96,"line":1195},[94,13179,1966],{"class":100},[94,13181,10851],{"class":104},[94,13183,150],{"class":100},[94,13185,2019],{"class":153},[94,13187,1271],{"class":104},[94,13189,13190],{"class":96,"line":1201},[94,13191,13192],{"class":104},"    \n",[94,13194,13195],{"class":96,"line":1292},[94,13196,13197],{"class":163},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[94,13199,13200,13202,13204,13206],{"class":96,"line":1298},[94,13201,12913],{"class":100},[94,13203,12916],{"class":104},[94,13205,150],{"class":100},[94,13207,13208],{"class":104}," a; \n",[94,13210,13211,13213,13215,13217,13219],{"class":96,"line":1310},[94,13212,13153],{"class":104},[94,13214,150],{"class":100},[94,13216,8932],{"class":153},[94,13218,160],{"class":104},[94,13220,13221],{"class":163}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[94,13223,13224],{"class":96,"line":1593},[94,13225,13192],{"class":104},[94,13227,13228,13230,13232,13234,13236,13238,13240],{"class":96,"line":1598},[94,13229,6511],{"class":104},[94,13231,1149],{"class":100},[94,13233,12652],{"class":209},[94,13235,1425],{"class":100},[94,13237,10851],{"class":104},[94,13239,1149],{"class":100},[94,13241,8822],{"class":104},[94,13243,13244,13246,13248,13251,13253,13255,13257],{"class":96,"line":1604},[94,13245,6511],{"class":104},[94,13247,1149],{"class":100},[94,13249,13250],{"class":209}," \"ref:\"",[94,13252,1425],{"class":100},[94,13254,12916],{"class":104},[94,13256,1149],{"class":100},[94,13258,8822],{"class":104},[94,13260,13261],{"class":96,"line":1609},[94,13262,13192],{"class":104},[94,13264,13265,13268],{"class":96,"line":1623},[94,13266,13267],{"class":1944},"    func",[94,13269,13270],{"class":104},"(a);\n",[94,13272,13273,13275,13277],{"class":96,"line":1628},[94,13274,4071],{"class":100},[94,13276,4074],{"class":153},[94,13278,1271],{"class":104},[94,13280,13281],{"class":96,"line":1634},[94,13282,1546],{"class":104},[40,13284,11314],{},[48,13286,13287,13290],{},[51,13288,13289],{},"引用的本质，就是一个指针常量",[51,13291,13292],{},"引用一旦初始化，就不可以发生改变",[35,13294,13296],{"id":13295},"_66常量引用","6.6常量引用",[40,13298,13299],{},"作用：常量引用主要用来修饰形参",[40,13301,13302,13303,13306],{},"在函数形参列表中，可以加",[254,13304,13305],{},"const修饰形参","，防止形参改变实参",[85,13308,13310],{"className":87,"code":13309,"language":89,"meta":14,"style":14},"\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",[91,13311,13312,13317,13322,13341,13346,13359,13363,13367,13375,13379,13384,13389,13403,13407,13415,13427,13431,13436,13448,13455,13459,13469,13473,13481],{"__ignoreMap":14},[94,13313,13314],{"class":96,"line":97},[94,13315,13316],{"class":163},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[94,13318,13319],{"class":96,"line":15},[94,13320,13321],{"class":163},"\u002F\u002F加上const就不能修改实参的\n",[94,13323,13324,13326,13329,13331,13333,13336,13339],{"class":96,"line":1160},[94,13325,5346],{"class":100},[94,13327,13328],{"class":1944}," showValue",[94,13330,105],{"class":104},[94,13332,6774],{"class":100},[94,13334,13335],{"class":100}," int&",[94,13337,13338],{"class":5198}," v",[94,13340,12424],{"class":104},[94,13342,13343],{"class":96,"line":1175},[94,13344,13345],{"class":163},"    \u002F\u002Fv += 100;\n",[94,13347,13348,13350,13352,13355,13357],{"class":96,"line":1181},[94,13349,6511],{"class":104},[94,13351,1149],{"class":100},[94,13353,13354],{"class":104}," v ",[94,13356,1149],{"class":100},[94,13358,8822],{"class":104},[94,13360,13361],{"class":96,"line":1195},[94,13362,1546],{"class":104},[94,13364,13365],{"class":96,"line":1201},[94,13366,2381],{"emptyLinePlaceholder":20},[94,13368,13369,13371,13373],{"class":96,"line":1292},[94,13370,108],{"class":100},[94,13372,1954],{"class":1944},[94,13374,10835],{"class":104},[94,13376,13377],{"class":96,"line":1298},[94,13378,2381],{"emptyLinePlaceholder":20},[94,13380,13381],{"class":96,"line":1310},[94,13382,13383],{"class":163},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[94,13385,13386],{"class":96,"line":1593},[94,13387,13388],{"class":163},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[94,13390,13391,13393,13395,13397,13399,13401],{"class":96,"line":1598},[94,13392,11203],{"class":100},[94,13394,13335],{"class":100},[94,13396,12916],{"class":104},[94,13398,150],{"class":100},[94,13400,2019],{"class":153},[94,13402,1271],{"class":104},[94,13404,13405],{"class":96,"line":1604},[94,13406,2381],{"emptyLinePlaceholder":20},[94,13408,13409,13412],{"class":96,"line":1609},[94,13410,13411],{"class":163},"    \u002F\u002Fref = 100;",[94,13413,13414],{"class":163},"  \u002F\u002F加入const后不可以修改变量\n",[94,13416,13417,13419,13421,13423,13425],{"class":96,"line":1623},[94,13418,6511],{"class":104},[94,13420,1149],{"class":100},[94,13422,12916],{"class":104},[94,13424,1149],{"class":100},[94,13426,8822],{"class":104},[94,13428,13429],{"class":96,"line":1628},[94,13430,2381],{"emptyLinePlaceholder":20},[94,13432,13433],{"class":96,"line":1634},[94,13434,13435],{"class":163},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[94,13437,13438,13440,13442,13444,13446],{"class":96,"line":1655},[94,13439,1966],{"class":100},[94,13441,10851],{"class":104},[94,13443,150],{"class":100},[94,13445,2019],{"class":153},[94,13447,1271],{"class":104},[94,13449,13450,13453],{"class":96,"line":1660},[94,13451,13452],{"class":1944},"    showValue",[94,13454,13270],{"class":104},[94,13456,13457],{"class":96,"line":1674},[94,13458,2381],{"emptyLinePlaceholder":20},[94,13460,13461,13463,13465,13467],{"class":96,"line":1679},[94,13462,2284],{"class":1944},[94,13464,105],{"class":104},[94,13466,2289],{"class":209},[94,13468,2700],{"class":104},[94,13470,13471],{"class":96,"line":1708},[94,13472,2381],{"emptyLinePlaceholder":20},[94,13474,13475,13477,13479],{"class":96,"line":1713},[94,13476,4071],{"class":100},[94,13478,4074],{"class":153},[94,13480,1271],{"class":104},[94,13482,13483],{"class":96,"line":1730},[94,13484,1546],{"class":104},[5108,13486,13487],{},"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":14,"searchDepth":15,"depth":15,"links":13489},[13490,13491,13492,13493,13494,13495],{"id":12022,"depth":15,"text":12023},{"id":12201,"depth":15,"text":12202},{"id":12384,"depth":15,"text":12385},{"id":12788,"depth":15,"text":12789},{"id":13115,"depth":15,"text":13116},{"id":13295,"depth":15,"text":13296},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12014,"description":14},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13502,"title":13503,"body":13504,"description":14,"extension":18,"meta":14585,"navigation":20,"path":14586,"seo":14587,"stem":14588,"__hash__":14589},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13505,"toc":14577},[13506,13509,13513,13516,13521,13753,13755,13766,13770,13773,13781,13885,13888,13892,13895,13899,13902,13907,13929,13935,14262,14265,14269,14277,14574],[10,13507,13503],{"id":13508},"_7函数高级部分",[35,13510,13512],{"id":13511},"_71函数默认参数","7.1函数默认参数",[40,13514,13515],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[40,13517,5163,13518],{},[91,13519,13520],{}," 返回值类型  函数名 （参数= 默认值）{}",[85,13522,13524],{"className":87,"code":13523,"language":89,"meta":14,"style":14},"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",[91,13525,13526,13561,13576,13580,13584,13589,13594,13623,13643,13653,13657,13661,13669,13673,13701,13723,13727,13737,13741,13749],{"__ignoreMap":14},[94,13527,13528,13530,13532,13534,13536,13538,13540,13542,13544,13547,13549,13551,13553,13555,13557,13559],{"class":96,"line":97},[94,13529,108],{"class":100},[94,13531,11367],{"class":1944},[94,13533,105],{"class":104},[94,13535,108],{"class":100},[94,13537,1379],{"class":5198},[94,13539,12417],{"class":104},[94,13541,108],{"class":100},[94,13543,2814],{"class":5198},[94,13545,13546],{"class":100}," =",[94,13548,2019],{"class":153},[94,13550,12417],{"class":104},[94,13552,108],{"class":100},[94,13554,2830],{"class":5198},[94,13556,13546],{"class":100},[94,13558,2019],{"class":153},[94,13560,12424],{"class":104},[94,13562,13563,13565,13567,13569,13571,13573],{"class":96,"line":15},[94,13564,4071],{"class":100},[94,13566,10851],{"class":104},[94,13568,586],{"class":100},[94,13570,10864],{"class":104},[94,13572,586],{"class":100},[94,13574,13575],{"class":104}," c;\n",[94,13577,13578],{"class":96,"line":1160},[94,13579,1546],{"class":104},[94,13581,13582],{"class":96,"line":1175},[94,13583,2381],{"emptyLinePlaceholder":20},[94,13585,13586],{"class":96,"line":1181},[94,13587,13588],{"class":163},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[94,13590,13591],{"class":96,"line":1195},[94,13592,13593],{"class":163},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[94,13595,13596,13598,13601,13603,13605,13607,13609,13611,13613,13615,13617,13619,13621],{"class":96,"line":1201},[94,13597,108],{"class":100},[94,13599,13600],{"class":1944}," func2",[94,13602,105],{"class":104},[94,13604,108],{"class":100},[94,13606,1379],{"class":5198},[94,13608,13546],{"class":100},[94,13610,2019],{"class":153},[94,13612,12417],{"class":104},[94,13614,108],{"class":100},[94,13616,2814],{"class":5198},[94,13618,13546],{"class":100},[94,13620,2019],{"class":153},[94,13622,2700],{"class":104},[94,13624,13625,13627,13629,13631,13633,13635,13637,13639,13641],{"class":96,"line":1292},[94,13626,108],{"class":100},[94,13628,13600],{"class":1944},[94,13630,105],{"class":104},[94,13632,108],{"class":100},[94,13634,1379],{"class":5198},[94,13636,12417],{"class":104},[94,13638,108],{"class":100},[94,13640,2814],{"class":5198},[94,13642,12424],{"class":104},[94,13644,13645,13647,13649,13651],{"class":96,"line":1298},[94,13646,4071],{"class":100},[94,13648,10851],{"class":104},[94,13650,586],{"class":100},[94,13652,12445],{"class":104},[94,13654,13655],{"class":96,"line":1310},[94,13656,1546],{"class":104},[94,13658,13659],{"class":96,"line":1593},[94,13660,2381],{"emptyLinePlaceholder":20},[94,13662,13663,13665,13667],{"class":96,"line":1598},[94,13664,108],{"class":100},[94,13666,1954],{"class":1944},[94,13668,10835],{"class":104},[94,13670,13671],{"class":96,"line":1604},[94,13672,2381],{"emptyLinePlaceholder":20},[94,13674,13675,13677,13679,13682,13684,13686,13688,13690,13692,13694,13697,13699],{"class":96,"line":1609},[94,13676,6511],{"class":104},[94,13678,1149],{"class":100},[94,13680,13681],{"class":209}," \"ret = \"",[94,13683,1425],{"class":100},[94,13685,11367],{"class":1944},[94,13687,105],{"class":104},[94,13689,805],{"class":153},[94,13691,12417],{"class":104},[94,13693,805],{"class":153},[94,13695,13696],{"class":104},") ",[94,13698,1149],{"class":100},[94,13700,8822],{"class":104},[94,13702,13703,13705,13707,13709,13711,13713,13715,13717,13719,13721],{"class":96,"line":1623},[94,13704,6511],{"class":104},[94,13706,1149],{"class":100},[94,13708,13681],{"class":209},[94,13710,1425],{"class":100},[94,13712,11367],{"class":1944},[94,13714,105],{"class":104},[94,13716,416],{"class":153},[94,13718,13696],{"class":104},[94,13720,1149],{"class":100},[94,13722,8822],{"class":104},[94,13724,13725],{"class":96,"line":1628},[94,13726,2381],{"emptyLinePlaceholder":20},[94,13728,13729,13731,13733,13735],{"class":96,"line":1634},[94,13730,2284],{"class":1944},[94,13732,105],{"class":104},[94,13734,2289],{"class":209},[94,13736,2700],{"class":104},[94,13738,13739],{"class":96,"line":1655},[94,13740,2381],{"emptyLinePlaceholder":20},[94,13742,13743,13745,13747],{"class":96,"line":1660},[94,13744,4071],{"class":100},[94,13746,4074],{"class":153},[94,13748,1271],{"class":104},[94,13750,13751],{"class":96,"line":1674},[94,13752,1546],{"class":104},[40,13754,11314],{},[48,13756,13757,13760,13763],{},[51,13758,13759],{},"我传就用我；没传就用你",[51,13761,13762],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[51,13764,13765],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[35,13767,13769],{"id":13768},"_72函数的占位参数","7.2函数的占位参数",[40,13771,13772],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[40,13774,13775,13777,13778],{},[254,13776,5163],{}," ",[91,13779,13780],{},"返回值类型 函数名 (数据类型){}",[85,13782,13784],{"className":87,"code":13783,"language":89,"meta":14,"style":14},"\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",[91,13785,13786,13791,13809,13822,13826,13834,13838,13855,13859,13869,13873,13881],{"__ignoreMap":14},[94,13787,13788],{"class":96,"line":97},[94,13789,13790],{"class":163},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[94,13792,13793,13795,13797,13799,13801,13803,13805,13807],{"class":96,"line":15},[94,13794,5346],{"class":100},[94,13796,11367],{"class":1944},[94,13798,105],{"class":104},[94,13800,108],{"class":100},[94,13802,1379],{"class":5198},[94,13804,12417],{"class":104},[94,13806,108],{"class":100},[94,13808,12424],{"class":104},[94,13810,13811,13813,13815,13818,13820],{"class":96,"line":1160},[94,13812,6511],{"class":104},[94,13814,1149],{"class":100},[94,13816,13817],{"class":209}," \"this is func\"",[94,13819,1425],{"class":100},[94,13821,8822],{"class":104},[94,13823,13824],{"class":96,"line":1175},[94,13825,1546],{"class":104},[94,13827,13828,13830,13832],{"class":96,"line":1181},[94,13829,108],{"class":100},[94,13831,1954],{"class":1944},[94,13833,10835],{"class":104},[94,13835,13836],{"class":96,"line":1195},[94,13837,2381],{"emptyLinePlaceholder":20},[94,13839,13840,13842,13844,13846,13848,13850,13852],{"class":96,"line":1201},[94,13841,13267],{"class":1944},[94,13843,105],{"class":104},[94,13845,551],{"class":153},[94,13847,483],{"class":104},[94,13849,551],{"class":153},[94,13851,5948],{"class":104},[94,13853,13854],{"class":163}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[94,13856,13857],{"class":96,"line":1292},[94,13858,2381],{"emptyLinePlaceholder":20},[94,13860,13861,13863,13865,13867],{"class":96,"line":1298},[94,13862,2284],{"class":1944},[94,13864,105],{"class":104},[94,13866,2289],{"class":209},[94,13868,2700],{"class":104},[94,13870,13871],{"class":96,"line":1310},[94,13872,2381],{"emptyLinePlaceholder":20},[94,13874,13875,13877,13879],{"class":96,"line":1593},[94,13876,4071],{"class":100},[94,13878,4074],{"class":153},[94,13880,1271],{"class":104},[94,13882,13883],{"class":96,"line":1598},[94,13884,1546],{"class":104},[40,13886,13887],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[35,13889,13891],{"id":13890},"_73函数重载","7.3函数重载",[40,13893,13894],{},"意思是函数名是可以相同的",[65,13896,13898],{"id":13897},"_731基本语法","7.3.1基本语法",[40,13900,13901],{},"作用：函数名可以相同，提高复用性",[40,13903,13904],{},[254,13905,13906],{},"函数重载满足条件：",[1112,13908,13909,13912,13915],{},[51,13910,13911],{},"同一个作用域下",[51,13913,13914],{},"函数名称相同",[51,13916,13917,13918,13921,13922,13925,13926],{},"函数参数",[254,13919,13920],{},"类型不同","  或者 ",[254,13923,13924],{},"个数不同"," 或者 ",[254,13927,13928],{},"顺序不同",[40,13930,13931,13934],{},[254,13932,13933],{},"注意:","  函数的返回值不可以作为函数重载的条件",[85,13936,13938],{"className":9923,"code":13937,"language":9925,"meta":14,"style":14},"\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",[91,13939,13940,13945,13953,13957,13970,13974,13988,13992,14005,14009,14024,14028,14041,14045,14066,14070,14083,14087,14107,14111,14124,14128,14132,14137,14142,14147,14152,14157,14161,14165,14173,14177,14183,14193,14203,14217,14232,14236,14246,14250,14258],{"__ignoreMap":14},[94,13941,13942],{"class":96,"line":97},[94,13943,13944],{"class":163},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[94,13946,13947,13949,13951],{"class":96,"line":15},[94,13948,5346],{"class":100},[94,13950,11367],{"class":1944},[94,13952,1957],{"class":104},[94,13954,13955],{"class":96,"line":1160},[94,13956,1527],{"class":104},[94,13958,13959,13961,13963,13966,13968],{"class":96,"line":1175},[94,13960,6511],{"class":104},[94,13962,1149],{"class":100},[94,13964,13965],{"class":209}," \"func 的调用！\"",[94,13967,1425],{"class":100},[94,13969,8822],{"class":104},[94,13971,13972],{"class":96,"line":1181},[94,13973,1546],{"class":104},[94,13975,13976,13978,13980,13982,13984,13986],{"class":96,"line":1195},[94,13977,5346],{"class":100},[94,13979,11367],{"class":1944},[94,13981,105],{"class":104},[94,13983,108],{"class":100},[94,13985,1379],{"class":5198},[94,13987,111],{"class":104},[94,13989,13990],{"class":96,"line":1201},[94,13991,1527],{"class":104},[94,13993,13994,13996,13998,14001,14003],{"class":96,"line":1292},[94,13995,6511],{"class":104},[94,13997,1149],{"class":100},[94,13999,14000],{"class":209}," \"func (int a) 的调用！\"",[94,14002,1425],{"class":100},[94,14004,8822],{"class":104},[94,14006,14007],{"class":96,"line":1298},[94,14008,1546],{"class":104},[94,14010,14011,14013,14015,14017,14020,14022],{"class":96,"line":1310},[94,14012,5346],{"class":100},[94,14014,11367],{"class":1944},[94,14016,105],{"class":104},[94,14018,14019],{"class":100},"double",[94,14021,1379],{"class":5198},[94,14023,111],{"class":104},[94,14025,14026],{"class":96,"line":1593},[94,14027,1527],{"class":104},[94,14029,14030,14032,14034,14037,14039],{"class":96,"line":1598},[94,14031,6511],{"class":104},[94,14033,1149],{"class":100},[94,14035,14036],{"class":209}," \"func (double a)的调用！\"",[94,14038,1425],{"class":100},[94,14040,8822],{"class":104},[94,14042,14043],{"class":96,"line":1604},[94,14044,1546],{"class":104},[94,14046,14047,14049,14051,14053,14055,14057,14060,14062,14064],{"class":96,"line":1609},[94,14048,5346],{"class":100},[94,14050,11367],{"class":1944},[94,14052,105],{"class":104},[94,14054,108],{"class":100},[94,14056,1379],{"class":5198},[94,14058,14059],{"class":104}," ,",[94,14061,14019],{"class":100},[94,14063,2814],{"class":5198},[94,14065,111],{"class":104},[94,14067,14068],{"class":96,"line":1623},[94,14069,1527],{"class":104},[94,14071,14072,14074,14076,14079,14081],{"class":96,"line":1628},[94,14073,6511],{"class":104},[94,14075,1149],{"class":100},[94,14077,14078],{"class":209}," \"func (int a ,double b) 的调用！\"",[94,14080,1425],{"class":100},[94,14082,8822],{"class":104},[94,14084,14085],{"class":96,"line":1634},[94,14086,1546],{"class":104},[94,14088,14089,14091,14093,14095,14097,14099,14101,14103,14105],{"class":96,"line":1655},[94,14090,5346],{"class":100},[94,14092,11367],{"class":1944},[94,14094,105],{"class":104},[94,14096,14019],{"class":100},[94,14098,1379],{"class":5198},[94,14100,14059],{"class":104},[94,14102,108],{"class":100},[94,14104,2814],{"class":5198},[94,14106,111],{"class":104},[94,14108,14109],{"class":96,"line":1660},[94,14110,1527],{"class":104},[94,14112,14113,14115,14117,14120,14122],{"class":96,"line":1674},[94,14114,6511],{"class":104},[94,14116,1149],{"class":100},[94,14118,14119],{"class":209}," \"func (double a ,int b)的调用！\"",[94,14121,1425],{"class":100},[94,14123,8822],{"class":104},[94,14125,14126],{"class":96,"line":1679},[94,14127,1546],{"class":104},[94,14129,14130],{"class":96,"line":1708},[94,14131,2381],{"emptyLinePlaceholder":20},[94,14133,14134],{"class":96,"line":1713},[94,14135,14136],{"class":163},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[94,14138,14139],{"class":96,"line":1730},[94,14140,14141],{"class":163},"\u002F\u002Fint func(double a, int b)\n",[94,14143,14144],{"class":96,"line":1735},[94,14145,14146],{"class":163},"\u002F\u002F{\n",[94,14148,14149],{"class":96,"line":1740},[94,14150,14151],{"class":163},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[94,14153,14154],{"class":96,"line":1745},[94,14155,14156],{"class":163},"\u002F\u002F}\n",[94,14158,14159],{"class":96,"line":1759},[94,14160,2381],{"emptyLinePlaceholder":20},[94,14162,14163],{"class":96,"line":1764},[94,14164,2381],{"emptyLinePlaceholder":20},[94,14166,14167,14169,14171],{"class":96,"line":2558},[94,14168,108],{"class":100},[94,14170,1954],{"class":1944},[94,14172,10835],{"class":104},[94,14174,14175],{"class":96,"line":2572},[94,14176,2381],{"emptyLinePlaceholder":20},[94,14178,14179,14181],{"class":96,"line":2580},[94,14180,13267],{"class":1944},[94,14182,5618],{"class":104},[94,14184,14185,14187,14189,14191],{"class":96,"line":2585},[94,14186,13267],{"class":1944},[94,14188,105],{"class":104},[94,14190,551],{"class":153},[94,14192,2700],{"class":104},[94,14194,14195,14197,14199,14201],{"class":96,"line":2591},[94,14196,13267],{"class":1944},[94,14198,105],{"class":104},[94,14200,154],{"class":153},[94,14202,2700],{"class":104},[94,14204,14205,14207,14209,14211,14213,14215],{"class":96,"line":2597},[94,14206,13267],{"class":1944},[94,14208,105],{"class":104},[94,14210,551],{"class":153},[94,14212,483],{"class":104},[94,14214,154],{"class":153},[94,14216,2700],{"class":104},[94,14218,14219,14221,14223,14225,14228,14230],{"class":96,"line":2602},[94,14220,13267],{"class":1944},[94,14222,105],{"class":104},[94,14224,154],{"class":153},[94,14226,14227],{"class":104}," , ",[94,14229,551],{"class":153},[94,14231,2700],{"class":104},[94,14233,14234],{"class":96,"line":7930},[94,14235,13192],{"class":104},[94,14237,14238,14240,14242,14244],{"class":96,"line":7954},[94,14239,2284],{"class":1944},[94,14241,105],{"class":104},[94,14243,2289],{"class":209},[94,14245,2700],{"class":104},[94,14247,14248],{"class":96,"line":7959},[94,14249,2381],{"emptyLinePlaceholder":20},[94,14251,14252,14254,14256],{"class":96,"line":7965},[94,14253,4071],{"class":100},[94,14255,4074],{"class":153},[94,14257,1271],{"class":104},[94,14259,14260],{"class":96,"line":7992},[94,14261,1546],{"class":104},[40,14263,14264],{},"重点：函数返回值不可以作为函数重载条件！",[65,14266,14268],{"id":14267},"_732注意事项","7.3.2注意事项",[1112,14270,14271,14274],{},[51,14272,14273],{},"引用作为重载条件!!!",[51,14275,14276],{},"函数重载碰到函数默认参数",[85,14278,14280],{"className":87,"code":14279,"language":89,"meta":14,"style":14},"\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",[91,14281,14282,14287,14292,14296,14312,14316,14329,14333,14337,14355,14359,14372,14376,14380,14384,14389,14393,14417,14421,14434,14438,14442,14456,14460,14473,14477,14481,14489,14493,14505,14515,14528,14532,14536,14544,14548,14558,14562,14570],{"__ignoreMap":14},[94,14283,14284],{"class":96,"line":97},[94,14285,14286],{"class":163},"\u002F\u002F函数重载注意事项\n",[94,14288,14289],{"class":96,"line":15},[94,14290,14291],{"class":163},"\u002F\u002F1、引用作为重载条件\n",[94,14293,14294],{"class":96,"line":1160},[94,14295,2381],{"emptyLinePlaceholder":20},[94,14297,14298,14300,14302,14304,14306,14308,14310],{"class":96,"line":1175},[94,14299,5346],{"class":100},[94,14301,11367],{"class":1944},[94,14303,105],{"class":104},[94,14305,108],{"class":100},[94,14307,10566],{"class":100},[94,14309,343],{"class":5198},[94,14311,111],{"class":104},[94,14313,14314],{"class":96,"line":1181},[94,14315,1527],{"class":104},[94,14317,14318,14320,14322,14325,14327],{"class":96,"line":1195},[94,14319,6511],{"class":104},[94,14321,1149],{"class":100},[94,14323,14324],{"class":209}," \"func (int &a) 调用 \"",[94,14326,1425],{"class":100},[94,14328,8822],{"class":104},[94,14330,14331],{"class":96,"line":1201},[94,14332,1546],{"class":104},[94,14334,14335],{"class":96,"line":1292},[94,14336,2381],{"emptyLinePlaceholder":20},[94,14338,14339,14341,14343,14345,14347,14349,14351,14353],{"class":96,"line":1298},[94,14340,5346],{"class":100},[94,14342,11367],{"class":1944},[94,14344,105],{"class":104},[94,14346,6774],{"class":100},[94,14348,2363],{"class":100},[94,14350,10566],{"class":100},[94,14352,343],{"class":5198},[94,14354,111],{"class":104},[94,14356,14357],{"class":96,"line":1310},[94,14358,1527],{"class":104},[94,14360,14361,14363,14365,14368,14370],{"class":96,"line":1593},[94,14362,6511],{"class":104},[94,14364,1149],{"class":100},[94,14366,14367],{"class":209}," \"func (const int &a) 调用 \"",[94,14369,1425],{"class":100},[94,14371,8822],{"class":104},[94,14373,14374],{"class":96,"line":1598},[94,14375,1546],{"class":104},[94,14377,14378],{"class":96,"line":1604},[94,14379,2381],{"emptyLinePlaceholder":20},[94,14381,14382],{"class":96,"line":1609},[94,14383,2381],{"emptyLinePlaceholder":20},[94,14385,14386],{"class":96,"line":1623},[94,14387,14388],{"class":163},"\u002F\u002F2、函数重载碰到函数默认参数\n",[94,14390,14391],{"class":96,"line":1628},[94,14392,2381],{"emptyLinePlaceholder":20},[94,14394,14395,14397,14399,14401,14403,14405,14407,14409,14411,14413,14415],{"class":96,"line":1634},[94,14396,5346],{"class":100},[94,14398,13600],{"class":1944},[94,14400,105],{"class":104},[94,14402,108],{"class":100},[94,14404,1379],{"class":5198},[94,14406,12417],{"class":104},[94,14408,108],{"class":100},[94,14410,2814],{"class":5198},[94,14412,13546],{"class":100},[94,14414,2019],{"class":153},[94,14416,111],{"class":104},[94,14418,14419],{"class":96,"line":1655},[94,14420,1527],{"class":104},[94,14422,14423,14425,14427,14430,14432],{"class":96,"line":1660},[94,14424,6511],{"class":104},[94,14426,1149],{"class":100},[94,14428,14429],{"class":209}," \"func2(int a, int b = 10) 调用\"",[94,14431,1425],{"class":100},[94,14433,8822],{"class":104},[94,14435,14436],{"class":96,"line":1674},[94,14437,1546],{"class":104},[94,14439,14440],{"class":96,"line":1679},[94,14441,2381],{"emptyLinePlaceholder":20},[94,14443,14444,14446,14448,14450,14452,14454],{"class":96,"line":1708},[94,14445,5346],{"class":100},[94,14447,13600],{"class":1944},[94,14449,105],{"class":104},[94,14451,108],{"class":100},[94,14453,1379],{"class":5198},[94,14455,111],{"class":104},[94,14457,14458],{"class":96,"line":1713},[94,14459,1527],{"class":104},[94,14461,14462,14464,14466,14469,14471],{"class":96,"line":1730},[94,14463,6511],{"class":104},[94,14465,1149],{"class":100},[94,14467,14468],{"class":209}," \"func2(int a) 调用\"",[94,14470,1425],{"class":100},[94,14472,8822],{"class":104},[94,14474,14475],{"class":96,"line":1735},[94,14476,1546],{"class":104},[94,14478,14479],{"class":96,"line":1740},[94,14480,2381],{"emptyLinePlaceholder":20},[94,14482,14483,14485,14487],{"class":96,"line":1745},[94,14484,108],{"class":100},[94,14486,1954],{"class":1944},[94,14488,10835],{"class":104},[94,14490,14491],{"class":96,"line":1759},[94,14492,13192],{"class":104},[94,14494,14495,14497,14499,14501,14503],{"class":96,"line":1764},[94,14496,1966],{"class":100},[94,14498,10851],{"class":104},[94,14500,150],{"class":100},[94,14502,2019],{"class":153},[94,14504,1271],{"class":104},[94,14506,14507,14509,14512],{"class":96,"line":2558},[94,14508,13267],{"class":1944},[94,14510,14511],{"class":104},"(a);",[94,14513,14514],{"class":163}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[94,14516,14517,14519,14521,14523,14525],{"class":96,"line":2572},[94,14518,13267],{"class":1944},[94,14520,105],{"class":104},[94,14522,551],{"class":153},[94,14524,5948],{"class":104},[94,14526,14527],{"class":163},"\u002F\u002F调用有const   10是个常量\n",[94,14529,14530],{"class":96,"line":2580},[94,14531,2381],{"emptyLinePlaceholder":20},[94,14533,14534],{"class":96,"line":2585},[94,14535,2381],{"emptyLinePlaceholder":20},[94,14537,14538,14541],{"class":96,"line":2591},[94,14539,14540],{"class":163},"    \u002F\u002Ffunc2(10);",[94,14542,14543],{"class":163}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[94,14545,14546],{"class":96,"line":2597},[94,14547,2381],{"emptyLinePlaceholder":20},[94,14549,14550,14552,14554,14556],{"class":96,"line":2602},[94,14551,2284],{"class":1944},[94,14553,105],{"class":104},[94,14555,2289],{"class":209},[94,14557,2700],{"class":104},[94,14559,14560],{"class":96,"line":7930},[94,14561,2381],{"emptyLinePlaceholder":20},[94,14563,14564,14566,14568],{"class":96,"line":7954},[94,14565,4071],{"class":100},[94,14567,4074],{"class":153},[94,14569,1271],{"class":104},[94,14571,14572],{"class":96,"line":7959},[94,14573,1546],{"class":104},[5108,14575,14576],{},"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":14,"searchDepth":15,"depth":15,"links":14578},[14579,14580,14581],{"id":13511,"depth":15,"text":13512},{"id":13768,"depth":15,"text":13769},{"id":13890,"depth":15,"text":13891,"children":14582},[14583,14584],{"id":13897,"depth":1160,"text":13898},{"id":14267,"depth":1160,"text":14268},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13503,"description":14},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14591,"title":14592,"body":14593,"description":23347,"extension":18,"meta":23348,"navigation":20,"path":23349,"seo":23350,"stem":23351,"__hash__":23352},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14594,"toc":23328},[14595,14598,14604,14611,14616,14619,14622,14625,14629,14633,14636,14639,14647,14652,14655,14662,14667,14826,14829,15082,15085,15088,15091,15096,15099,15102,15113,15118,15354,15358,15368,15371,15379,15526,15530,15533,15536,15540,15985,15989,15997,16005,16917,16924,16929,17557,17560,17563,17566,17685,17688,17775,17778,17904,17907,18001,18004,18357,18361,18369,18373,18380,18383,18386,18397,18403,18408,18420,18428,18448,18456,18473,18659,18662,18666,18669,18672,18675,18678,18681,18684,18687,19147,19153,19157,19160,19171,19758,19761,20250,20254,20257,20260,20263,20266,20269,20277,20673,20677,20680,20683,21130,21133,21136,21141,21144,21149,21152,21156,21159,21161,21167,21170,21476,21486,21527,21531,21534,21536,21569,21572,21879,21881,21896,21899,21922,21931,21937,21940,21944,21947,21950,21955,21966,21971,21979,21984,22114,22117,22120,22295,22300,22512,22516,22519,22633,22638,22877,22881,22885,22888,22891,22896,23001,23004,23007,23010,23014,23125,23128,23131,23136,23188,23191,23194,23199,23245,23248,23253,23321,23323,23326],[10,14596,14592],{"id":14597},"_8类和对象",[40,14599,14600,14601],{},"C++面向对象的三大特性为",[254,14602,14603],{},"封装、继承、多态",[40,14605,14606,14607,14610],{},"C++认为",[254,14608,14609],{},"万事万物都皆为对象","，对象上有其属性和行为",[40,14612,14613],{},[254,14614,14615],{},"例如：",[40,14617,14618],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[40,14620,14621],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[40,14623,14624],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[35,14626,14628],{"id":14627},"_81封装","8.1封装",[65,14630,14632],{"id":14631},"_811封装的意义","8.1.1封装的意义",[40,14634,14635],{},"封装是C++面向对象三大特性之一",[40,14637,14638],{},"封装的意义：",[1112,14640,14641,14644],{},[51,14642,14643],{},"将属性和行为作为一个整体，表现生活中的事物",[51,14645,14646],{},"将属性和行为加以权限控制",[40,14648,14649],{},[254,14650,14651],{},"封装意义一：",[40,14653,14654],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[40,14656,14657,13777,14659],{},[254,14658,5163],{},[91,14660,14661],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[48,14663,14664],{},[51,14665,14666],{},"**示例1：**设计一个圆类，求圆的周长",[85,14668,14670],{"className":87,"code":14669,"language":89,"meta":14,"style":14},"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",[91,14671,14672,14680,14684,14689,14694,14699,14704,14711,14716,14726,14730,14748,14752,14756,14764,14768,14773,14778,14783,14788,14799,14822],{"__ignoreMap":14},[94,14673,14674,14677],{"class":96,"line":97},[94,14675,14676],{"class":100},"class",[94,14678,14679],{"class":1944}," Circle\n",[94,14681,14682],{"class":96,"line":15},[94,14683,1527],{"class":104},[94,14685,14686],{"class":96,"line":1160},[94,14687,14688],{"class":163},"    \u002F\u002F访问权限\n",[94,14690,14691],{"class":96,"line":1175},[94,14692,14693],{"class":163},"    \u002F\u002F公共权限\n",[94,14695,14696],{"class":96,"line":1181},[94,14697,14698],{"class":100},"public:\n",[94,14700,14701],{"class":96,"line":1195},[94,14702,14703],{"class":163},"    \u002F\u002F属性\n",[94,14705,14706,14708],{"class":96,"line":1201},[94,14707,1966],{"class":100},[94,14709,14710],{"class":104}," m_r;\n",[94,14712,14713],{"class":96,"line":1292},[94,14714,14715],{"class":163},"    \u002F\u002F行为\n",[94,14717,14718,14721,14724],{"class":96,"line":1298},[94,14719,14720],{"class":100},"    double",[94,14722,14723],{"class":1944}," calculateZC",[94,14725,1957],{"class":104},[94,14727,14728],{"class":96,"line":1310},[94,14729,2011],{"class":104},[94,14731,14732,14735,14738,14740,14743,14745],{"class":96,"line":1593},[94,14733,14734],{"class":100},"        return",[94,14736,14737],{"class":153}," 2",[94,14739,560],{"class":100},[94,14741,14742],{"class":104},"PI",[94,14744,560],{"class":100},[94,14746,14747],{"class":104},"m_r;\n",[94,14749,14750],{"class":96,"line":1598},[94,14751,2168],{"class":104},[94,14753,14754],{"class":96,"line":1604},[94,14755,3976],{"class":104},[94,14757,14758,14760,14762],{"class":96,"line":1609},[94,14759,108],{"class":100},[94,14761,1954],{"class":1944},[94,14763,1957],{"class":104},[94,14765,14766],{"class":96,"line":1623},[94,14767,1527],{"class":104},[94,14769,14770],{"class":96,"line":1628},[94,14771,14772],{"class":163},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[94,14774,14775],{"class":96,"line":1634},[94,14776,14777],{"class":163},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[94,14779,14780],{"class":96,"line":1655},[94,14781,14782],{"class":104},"    Circle c1;\n",[94,14784,14785],{"class":96,"line":1660},[94,14786,14787],{"class":163},"    \u002F\u002F给圆对象 的属性进行赋值\n",[94,14789,14790,14793,14795,14797],{"class":96,"line":1674},[94,14791,14792],{"class":104},"    c1.m_r",[94,14794,150],{"class":100},[94,14796,551],{"class":153},[94,14798,1271],{"class":104},[94,14800,14801,14803,14805,14808,14810,14813,14816,14818,14820],{"class":96,"line":1679},[94,14802,1532],{"class":104},[94,14804,1149],{"class":100},[94,14806,14807],{"class":209},"\"圆的周长\"",[94,14809,1149],{"class":100},[94,14811,14812],{"class":104},"c1.",[94,14814,14815],{"class":1944},"calculateZC",[94,14817,2408],{"class":104},[94,14819,1149],{"class":100},[94,14821,1172],{"class":104},[94,14823,14824],{"class":96,"line":1708},[94,14825,1546],{"class":104},[40,14827,14828],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[85,14830,14832],{"className":87,"code":14831,"language":89,"meta":14,"style":14},"#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",[91,14833,14834,14840,14850,14856,14862,14866,14870,14875,14882,14887,14905,14909,14919,14923,14928,14944,14948,14958,14962,14967,14975,14979,15011,15015,15019,15027,15031,15036,15041,15055,15069,15078],{"__ignoreMap":14},[94,14835,14836,14838],{"class":96,"line":97},[94,14837,1930],{"class":100},[94,14839,1933],{"class":209},[94,14841,14842,14844,14846,14848],{"class":96,"line":15},[94,14843,1938],{"class":100},[94,14845,1941],{"class":100},[94,14847,1945],{"class":1944},[94,14849,1271],{"class":104},[94,14851,14852,14854],{"class":96,"line":1160},[94,14853,1930],{"class":100},[94,14855,7731],{"class":209},[94,14857,14858,14860],{"class":96,"line":1175},[94,14859,14676],{"class":100},[94,14861,7744],{"class":1944},[94,14863,14864],{"class":96,"line":1181},[94,14865,1527],{"class":104},[94,14867,14868],{"class":96,"line":1195},[94,14869,14698],{"class":100},[94,14871,14872],{"class":96,"line":1201},[94,14873,14874],{"class":104},"    string m_name;\n",[94,14876,14877,14879],{"class":96,"line":1292},[94,14878,1966],{"class":100},[94,14880,14881],{"class":104}," m_id;\n",[94,14883,14884],{"class":96,"line":1298},[94,14885,14886],{"class":163},"    \u002F\u002F赋值姓名\n",[94,14888,14889,14892,14895,14897,14900,14903],{"class":96,"line":1310},[94,14890,14891],{"class":100},"    void",[94,14893,14894],{"class":1944}," setName",[94,14896,105],{"class":104},[94,14898,14899],{"class":1944},"string",[94,14901,14902],{"class":5198}," name",[94,14904,111],{"class":104},[94,14906,14907],{"class":96,"line":1593},[94,14908,2011],{"class":104},[94,14910,14911,14914,14916],{"class":96,"line":1598},[94,14912,14913],{"class":104},"        m_name",[94,14915,150],{"class":100},[94,14917,14918],{"class":104},"name;\n",[94,14920,14921],{"class":96,"line":1604},[94,14922,2168],{"class":104},[94,14924,14925],{"class":96,"line":1609},[94,14926,14927],{"class":163},"    \u002F\u002F赋值学号\n",[94,14929,14930,14932,14935,14937,14939,14942],{"class":96,"line":1623},[94,14931,14891],{"class":100},[94,14933,14934],{"class":1944}," setId",[94,14936,105],{"class":104},[94,14938,108],{"class":100},[94,14940,14941],{"class":5198}," id",[94,14943,111],{"class":104},[94,14945,14946],{"class":96,"line":1628},[94,14947,2011],{"class":104},[94,14949,14950,14953,14955],{"class":96,"line":1634},[94,14951,14952],{"class":104},"        m_id",[94,14954,150],{"class":100},[94,14956,14957],{"class":104},"id;\n",[94,14959,14960],{"class":96,"line":1655},[94,14961,2168],{"class":104},[94,14963,14964],{"class":96,"line":1660},[94,14965,14966],{"class":163},"    \u002F\u002F打印学生信息\n",[94,14968,14969,14971,14973],{"class":96,"line":1674},[94,14970,14891],{"class":100},[94,14972,9597],{"class":1944},[94,14974,1957],{"class":104},[94,14976,14977],{"class":96,"line":1679},[94,14978,2011],{"class":104},[94,14980,14981,14983,14985,14988,14990,14993,14995,14997,14999,15002,15004,15007,15009],{"class":96,"line":1708},[94,14982,3432],{"class":104},[94,14984,1149],{"class":100},[94,14986,14987],{"class":209},"\"姓名：\"",[94,14989,1149],{"class":100},[94,14991,14992],{"class":104},"m_name",[94,14994,1149],{"class":100},[94,14996,4340],{"class":209},[94,14998,1149],{"class":100},[94,15000,15001],{"class":209},"\"学号：\"",[94,15003,1149],{"class":100},[94,15005,15006],{"class":104},"m_id",[94,15008,1149],{"class":100},[94,15010,1172],{"class":104},[94,15012,15013],{"class":96,"line":1713},[94,15014,2168],{"class":104},[94,15016,15017],{"class":96,"line":1730},[94,15018,3976],{"class":104},[94,15020,15021,15023,15025],{"class":96,"line":1735},[94,15022,108],{"class":100},[94,15024,1954],{"class":1944},[94,15026,1957],{"class":104},[94,15028,15029],{"class":96,"line":1740},[94,15030,1527],{"class":104},[94,15032,15033],{"class":96,"line":1745},[94,15034,15035],{"class":163},"    \u002F\u002F实例化\n",[94,15037,15038],{"class":96,"line":1759},[94,15039,15040],{"class":104},"    Student s1;\n",[94,15042,15043,15046,15049,15051,15053],{"class":96,"line":1764},[94,15044,15045],{"class":104},"    s1.",[94,15047,15048],{"class":1944},"setName",[94,15050,105],{"class":104},[94,15052,7898],{"class":209},[94,15054,2700],{"class":104},[94,15056,15057,15059,15062,15064,15067],{"class":96,"line":2558},[94,15058,15045],{"class":104},[94,15060,15061],{"class":1944},"setId",[94,15063,105],{"class":104},[94,15065,15066],{"class":153},"123456",[94,15068,2700],{"class":104},[94,15070,15071,15073,15076],{"class":96,"line":2572},[94,15072,15045],{"class":104},[94,15074,15075],{"class":1944},"printInfo",[94,15077,5618],{"class":104},[94,15079,15080],{"class":96,"line":2580},[94,15081,1546],{"class":104},[40,15083,15084],{},"类中的属性和行为统称为成员",[40,15086,15087],{},"属性：成员属性(成员变量)",[40,15089,15090],{},"方法：成员函数(成员方法)",[40,15092,15093],{},[254,15094,15095],{},"封装意义二：",[40,15097,15098],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[40,15100,15101],{},"访问权限有三种：",[48,15103,15104,15107,15110],{},[51,15105,15106],{},"public        公共权限",[51,15108,15109],{},"protected 保护权限",[51,15111,15112],{},"private      私有权限",[40,15114,15115],{},[254,15116,15117],{},"示例：",[85,15119,15121],{"className":9923,"code":15120,"language":9925,"meta":14,"style":14},"\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",[91,15122,15123,15128,15133,15138,15143,15147,15154,15158,15163,15167,15172,15176,15181,15186,15191,15195,15200,15205,15212,15216,15220,15228,15232,15243,15255,15267,15271,15275,15279,15287,15291,15296,15308,15316,15324,15328,15338,15342,15350],{"__ignoreMap":14},[94,15124,15125],{"class":96,"line":97},[94,15126,15127],{"class":163},"\u002F\u002F三种权限\n",[94,15129,15130],{"class":96,"line":15},[94,15131,15132],{"class":163},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[94,15134,15135],{"class":96,"line":1160},[94,15136,15137],{"class":163},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[94,15139,15140],{"class":96,"line":1175},[94,15141,15142],{"class":163},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[94,15144,15145],{"class":96,"line":1181},[94,15146,2381],{"emptyLinePlaceholder":20},[94,15148,15149,15151],{"class":96,"line":1195},[94,15150,14676],{"class":100},[94,15152,15153],{"class":1944}," Person\n",[94,15155,15156],{"class":96,"line":1201},[94,15157,1527],{"class":104},[94,15159,15160],{"class":96,"line":1292},[94,15161,15162],{"class":163},"    \u002F\u002F姓名  公共权限\n",[94,15164,15165],{"class":96,"line":1298},[94,15166,14698],{"class":100},[94,15168,15169],{"class":96,"line":1310},[94,15170,15171],{"class":104},"    string m_Name;\n",[94,15173,15174],{"class":96,"line":1593},[94,15175,2381],{"emptyLinePlaceholder":20},[94,15177,15178],{"class":96,"line":1598},[94,15179,15180],{"class":163},"    \u002F\u002F汽车  保护权限\n",[94,15182,15183],{"class":96,"line":1604},[94,15184,15185],{"class":100},"protected:\n",[94,15187,15188],{"class":96,"line":1609},[94,15189,15190],{"class":104},"    string m_Car;\n",[94,15192,15193],{"class":96,"line":1623},[94,15194,2381],{"emptyLinePlaceholder":20},[94,15196,15197],{"class":96,"line":1628},[94,15198,15199],{"class":163},"    \u002F\u002F银行卡密码  私有权限\n",[94,15201,15202],{"class":96,"line":1634},[94,15203,15204],{"class":100},"private:\n",[94,15206,15207,15209],{"class":96,"line":1655},[94,15208,1966],{"class":100},[94,15210,15211],{"class":104}," m_Password;\n",[94,15213,15214],{"class":96,"line":1660},[94,15215,2381],{"emptyLinePlaceholder":20},[94,15217,15218],{"class":96,"line":1674},[94,15219,14698],{"class":100},[94,15221,15222,15224,15226],{"class":96,"line":1679},[94,15223,14891],{"class":100},[94,15225,11367],{"class":1944},[94,15227,1957],{"class":104},[94,15229,15230],{"class":96,"line":1708},[94,15231,2011],{"class":104},[94,15233,15234,15237,15239,15241],{"class":96,"line":1713},[94,15235,15236],{"class":104},"        m_Name ",[94,15238,150],{"class":100},[94,15240,8920],{"class":209},[94,15242,1271],{"class":104},[94,15244,15245,15248,15250,15253],{"class":96,"line":1730},[94,15246,15247],{"class":104},"        m_Car ",[94,15249,150],{"class":100},[94,15251,15252],{"class":209}," \"拖拉机\"",[94,15254,1271],{"class":104},[94,15256,15257,15260,15262,15265],{"class":96,"line":1735},[94,15258,15259],{"class":104},"        m_Password ",[94,15261,150],{"class":100},[94,15263,15264],{"class":153}," 123456",[94,15266,1271],{"class":104},[94,15268,15269],{"class":96,"line":1740},[94,15270,2168],{"class":104},[94,15272,15273],{"class":96,"line":1745},[94,15274,3976],{"class":104},[94,15276,15277],{"class":96,"line":1759},[94,15278,2381],{"emptyLinePlaceholder":20},[94,15280,15281,15283,15285],{"class":96,"line":1764},[94,15282,108],{"class":100},[94,15284,1954],{"class":1944},[94,15286,10835],{"class":104},[94,15288,15289],{"class":96,"line":2558},[94,15290,2381],{"emptyLinePlaceholder":20},[94,15292,15293],{"class":96,"line":2572},[94,15294,15295],{"class":104},"    Person p;\n",[94,15297,15298,15301,15303,15306],{"class":96,"line":2580},[94,15299,15300],{"class":104},"    p.m_Name ",[94,15302,150],{"class":100},[94,15304,15305],{"class":209}," \"李四\"",[94,15307,1271],{"class":104},[94,15309,15310,15313],{"class":96,"line":2585},[94,15311,15312],{"class":163},"    \u002F\u002Fp.m_Car = \"奔驰\";",[94,15314,15315],{"class":163},"  \u002F\u002F保护权限类外访问不到\n",[94,15317,15318,15321],{"class":96,"line":2591},[94,15319,15320],{"class":163},"    \u002F\u002Fp.m_Password = 123;",[94,15322,15323],{"class":163}," \u002F\u002F私有权限类外访问不到\n",[94,15325,15326],{"class":96,"line":2597},[94,15327,2381],{"emptyLinePlaceholder":20},[94,15329,15330,15332,15334,15336],{"class":96,"line":2602},[94,15331,2284],{"class":1944},[94,15333,105],{"class":104},[94,15335,2289],{"class":209},[94,15337,2700],{"class":104},[94,15339,15340],{"class":96,"line":7930},[94,15341,2381],{"emptyLinePlaceholder":20},[94,15343,15344,15346,15348],{"class":96,"line":7954},[94,15345,4071],{"class":100},[94,15347,4074],{"class":153},[94,15349,1271],{"class":104},[94,15351,15352],{"class":96,"line":7959},[94,15353,1546],{"class":104},[65,15355,15357],{"id":15356},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[40,15359,15360,15361,15364,15365],{},"在C++中 struct和class唯一的",[254,15362,15363],{},"区别","就在于 ",[254,15366,15367],{},"默认的访问权限不同",[40,15369,15370],{},"区别：",[1112,15372,15373,15376],{},[51,15374,15375],{},"struct 默认权限为公共",[51,15377,15378],{},"class   默认权限为私有",[85,15380,15382],{"className":9923,"code":15381,"language":9925,"meta":14,"style":14},"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",[91,15383,15384,15391,15395,15405,15409,15413,15420,15424,15434,15438,15442,15450,15454,15459,15473,15477,15482,15496,15500,15510,15514,15522],{"__ignoreMap":14},[94,15385,15386,15388],{"class":96,"line":97},[94,15387,14676],{"class":100},[94,15389,15390],{"class":1944}," C1\n",[94,15392,15393],{"class":96,"line":15},[94,15394,1527],{"class":104},[94,15396,15397,15399,15402],{"class":96,"line":1160},[94,15398,1966],{"class":100},[94,15400,15401],{"class":104},"  m_A;",[94,15403,15404],{"class":163}," \u002F\u002F默认是私有权限\n",[94,15406,15407],{"class":96,"line":1175},[94,15408,3976],{"class":104},[94,15410,15411],{"class":96,"line":1181},[94,15412,2381],{"emptyLinePlaceholder":20},[94,15414,15415,15417],{"class":96,"line":1195},[94,15416,7741],{"class":100},[94,15418,15419],{"class":1944}," C2\n",[94,15421,15422],{"class":96,"line":1201},[94,15423,1527],{"class":104},[94,15425,15426,15428,15431],{"class":96,"line":1292},[94,15427,1966],{"class":100},[94,15429,15430],{"class":104}," m_A;",[94,15432,15433],{"class":163},"  \u002F\u002F默认是公共权限\n",[94,15435,15436],{"class":96,"line":1298},[94,15437,3976],{"class":104},[94,15439,15440],{"class":96,"line":1310},[94,15441,2381],{"emptyLinePlaceholder":20},[94,15443,15444,15446,15448],{"class":96,"line":1593},[94,15445,108],{"class":100},[94,15447,1954],{"class":1944},[94,15449,10835],{"class":104},[94,15451,15452],{"class":96,"line":1598},[94,15453,2381],{"emptyLinePlaceholder":20},[94,15455,15456],{"class":96,"line":1604},[94,15457,15458],{"class":104},"    C1 c1;\n",[94,15460,15461,15464,15466,15468,15470],{"class":96,"line":1609},[94,15462,15463],{"class":104},"    c1.m_A ",[94,15465,150],{"class":100},[94,15467,2019],{"class":153},[94,15469,160],{"class":104},[94,15471,15472],{"class":163}," \u002F\u002F错误，访问权限是私有\n",[94,15474,15475],{"class":96,"line":1623},[94,15476,2381],{"emptyLinePlaceholder":20},[94,15478,15479],{"class":96,"line":1628},[94,15480,15481],{"class":104},"    C2 c2;\n",[94,15483,15484,15487,15489,15491,15493],{"class":96,"line":1634},[94,15485,15486],{"class":104},"    c2.m_A ",[94,15488,150],{"class":100},[94,15490,2019],{"class":153},[94,15492,160],{"class":104},[94,15494,15495],{"class":163}," \u002F\u002F正确，访问权限是公共\n",[94,15497,15498],{"class":96,"line":1655},[94,15499,2381],{"emptyLinePlaceholder":20},[94,15501,15502,15504,15506,15508],{"class":96,"line":1660},[94,15503,2284],{"class":1944},[94,15505,105],{"class":104},[94,15507,2289],{"class":209},[94,15509,2700],{"class":104},[94,15511,15512],{"class":96,"line":1674},[94,15513,2381],{"emptyLinePlaceholder":20},[94,15515,15516,15518,15520],{"class":96,"line":1679},[94,15517,4071],{"class":100},[94,15519,4074],{"class":153},[94,15521,1271],{"class":104},[94,15523,15524],{"class":96,"line":1708},[94,15525,1546],{"class":104},[65,15527,15529],{"id":15528},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[40,15531,15532],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[40,15534,15535],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[40,15537,15538],{},[254,15539,15117],{},[85,15541,15543],{"className":9923,"code":15542,"language":9925,"meta":14,"style":14},"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",[91,15544,15545,15555,15559,15563,15568,15582,15591,15595,15605,15609,15616,15620,15624,15628,15633,15642,15649,15653,15658,15674,15697,15710,15717,15721,15730,15734,15738,15743,15759,15769,15773,15777,15781,15789,15793,15803,15807,15815,15819,15823,15831,15835,15839,15844,15857,15880,15884,15889,15902,15924,15928,15933,15947,15955,15959,15969,15973,15981],{"__ignoreMap":14},[94,15546,15547,15549,15552],{"class":96,"line":97},[94,15548,14676],{"class":100},[94,15550,15551],{"class":1944}," Person",[94,15553,15554],{"class":104}," {\n",[94,15556,15557],{"class":96,"line":15},[94,15558,14698],{"class":100},[94,15560,15561],{"class":96,"line":1160},[94,15562,2381],{"emptyLinePlaceholder":20},[94,15564,15565],{"class":96,"line":1175},[94,15566,15567],{"class":163},"    \u002F\u002F姓名设置可读可写\n",[94,15569,15570,15572,15574,15576,15578,15580],{"class":96,"line":1181},[94,15571,14891],{"class":100},[94,15573,14894],{"class":1944},[94,15575,105],{"class":104},[94,15577,14899],{"class":1944},[94,15579,14902],{"class":5198},[94,15581,12424],{"class":104},[94,15583,15584,15586,15588],{"class":96,"line":1195},[94,15585,15236],{"class":104},[94,15587,150],{"class":100},[94,15589,15590],{"class":104}," name;\n",[94,15592,15593],{"class":96,"line":1201},[94,15594,2168],{"class":104},[94,15596,15597,15600,15603],{"class":96,"line":1292},[94,15598,15599],{"class":1944},"    string",[94,15601,15602],{"class":1944}," getName",[94,15604,1957],{"class":104},[94,15606,15607],{"class":96,"line":1298},[94,15608,2011],{"class":104},[94,15610,15611,15613],{"class":96,"line":1310},[94,15612,14734],{"class":100},[94,15614,15615],{"class":104}," m_Name;\n",[94,15617,15618],{"class":96,"line":1593},[94,15619,2168],{"class":104},[94,15621,15622],{"class":96,"line":1598},[94,15623,2381],{"emptyLinePlaceholder":20},[94,15625,15626],{"class":96,"line":1604},[94,15627,2381],{"emptyLinePlaceholder":20},[94,15629,15630],{"class":96,"line":1609},[94,15631,15632],{"class":163},"    \u002F\u002F获取年龄 \n",[94,15634,15635,15637,15640],{"class":96,"line":1623},[94,15636,1966],{"class":100},[94,15638,15639],{"class":1944}," getAge",[94,15641,10835],{"class":104},[94,15643,15644,15646],{"class":96,"line":1628},[94,15645,14734],{"class":100},[94,15647,15648],{"class":104}," m_Age;\n",[94,15650,15651],{"class":96,"line":1634},[94,15652,2168],{"class":104},[94,15654,15655],{"class":96,"line":1655},[94,15656,15657],{"class":163},"    \u002F\u002F设置年龄\n",[94,15659,15660,15662,15665,15667,15669,15672],{"class":96,"line":1660},[94,15661,14891],{"class":100},[94,15663,15664],{"class":1944}," setAge",[94,15666,105],{"class":104},[94,15668,108],{"class":100},[94,15670,15671],{"class":5198}," age",[94,15673,12424],{"class":104},[94,15675,15676,15678,15681,15683,15685,15687,15690,15692,15695],{"class":96,"line":1674},[94,15677,2478],{"class":100},[94,15679,15680],{"class":104}," (age ",[94,15682,1015],{"class":100},[94,15684,4074],{"class":153},[94,15686,3236],{"class":100},[94,15688,15689],{"class":104}," age ",[94,15691,1065],{"class":100},[94,15693,15694],{"class":153}," 150",[94,15696,12424],{"class":104},[94,15698,15699,15701,15703,15706,15708],{"class":96,"line":1679},[94,15700,9701],{"class":104},[94,15702,1149],{"class":100},[94,15704,15705],{"class":209}," \"你个老妖精!\"",[94,15707,1425],{"class":100},[94,15709,8822],{"class":104},[94,15711,15712,15715],{"class":96,"line":1708},[94,15713,15714],{"class":100},"            return",[94,15716,1271],{"class":104},[94,15718,15719],{"class":96,"line":1713},[94,15720,2510],{"class":104},[94,15722,15723,15726,15728],{"class":96,"line":1730},[94,15724,15725],{"class":104},"        m_Age ",[94,15727,150],{"class":100},[94,15729,7779],{"class":104},[94,15731,15732],{"class":96,"line":1735},[94,15733,2168],{"class":104},[94,15735,15736],{"class":96,"line":1740},[94,15737,2381],{"emptyLinePlaceholder":20},[94,15739,15740],{"class":96,"line":1745},[94,15741,15742],{"class":163},"    \u002F\u002F情人设置为只写\n",[94,15744,15745,15747,15750,15752,15754,15757],{"class":96,"line":1759},[94,15746,14891],{"class":100},[94,15748,15749],{"class":1944}," setLover",[94,15751,105],{"class":104},[94,15753,14899],{"class":1944},[94,15755,15756],{"class":5198}," lover",[94,15758,12424],{"class":104},[94,15760,15761,15764,15766],{"class":96,"line":1764},[94,15762,15763],{"class":104},"        m_Lover ",[94,15765,150],{"class":100},[94,15767,15768],{"class":104}," lover;\n",[94,15770,15771],{"class":96,"line":2558},[94,15772,2168],{"class":104},[94,15774,15775],{"class":96,"line":2572},[94,15776,2381],{"emptyLinePlaceholder":20},[94,15778,15779],{"class":96,"line":2580},[94,15780,15204],{"class":100},[94,15782,15783,15786],{"class":96,"line":2585},[94,15784,15785],{"class":104},"    string m_Name;",[94,15787,15788],{"class":163}," \u002F\u002F可读可写  姓名\n",[94,15790,15791],{"class":96,"line":2591},[94,15792,13192],{"class":104},[94,15794,15795,15797,15800],{"class":96,"line":2597},[94,15796,1966],{"class":100},[94,15798,15799],{"class":104}," m_Age;",[94,15801,15802],{"class":163}," \u002F\u002F只读  年龄\n",[94,15804,15805],{"class":96,"line":2602},[94,15806,2381],{"emptyLinePlaceholder":20},[94,15808,15809,15812],{"class":96,"line":7930},[94,15810,15811],{"class":104},"    string m_Lover;",[94,15813,15814],{"class":163}," \u002F\u002F只写  情人\n",[94,15816,15817],{"class":96,"line":7954},[94,15818,3976],{"class":104},[94,15820,15821],{"class":96,"line":7959},[94,15822,2381],{"emptyLinePlaceholder":20},[94,15824,15825,15827,15829],{"class":96,"line":7965},[94,15826,108],{"class":100},[94,15828,1954],{"class":1944},[94,15830,10835],{"class":104},[94,15832,15833],{"class":96,"line":7992},[94,15834,2381],{"emptyLinePlaceholder":20},[94,15836,15837],{"class":96,"line":7997},[94,15838,15295],{"class":104},[94,15840,15841],{"class":96,"line":8003},[94,15842,15843],{"class":163},"    \u002F\u002F姓名设置\n",[94,15845,15846,15849,15851,15853,15855],{"class":96,"line":8015},[94,15847,15848],{"class":104},"    p.",[94,15850,15048],{"class":1944},[94,15852,105],{"class":104},[94,15854,7898],{"class":209},[94,15856,2700],{"class":104},[94,15858,15859,15861,15863,15866,15868,15871,15874,15876,15878],{"class":96,"line":8027},[94,15860,6511],{"class":104},[94,15862,1149],{"class":100},[94,15864,15865],{"class":209}," \"姓名： \"",[94,15867,1425],{"class":100},[94,15869,15870],{"class":104}," p.",[94,15872,15873],{"class":1944},"getName",[94,15875,13032],{"class":104},[94,15877,1149],{"class":100},[94,15879,8822],{"class":104},[94,15881,15882],{"class":96,"line":8039},[94,15883,2381],{"emptyLinePlaceholder":20},[94,15885,15886],{"class":96,"line":9698},[94,15887,15888],{"class":163},"    \u002F\u002F年龄设置\n",[94,15890,15891,15893,15896,15898,15900],{"class":96,"line":9723},[94,15892,15848],{"class":104},[94,15894,15895],{"class":1944},"setAge",[94,15897,105],{"class":104},[94,15899,761],{"class":153},[94,15901,2700],{"class":104},[94,15903,15904,15906,15908,15911,15913,15915,15918,15920,15922],{"class":96,"line":9746},[94,15905,6511],{"class":104},[94,15907,1149],{"class":100},[94,15909,15910],{"class":209}," \"年龄： \"",[94,15912,1425],{"class":100},[94,15914,15870],{"class":104},[94,15916,15917],{"class":1944},"getAge",[94,15919,13032],{"class":104},[94,15921,1149],{"class":100},[94,15923,8822],{"class":104},[94,15925,15926],{"class":96,"line":9770},[94,15927,2381],{"emptyLinePlaceholder":20},[94,15929,15930],{"class":96,"line":9775},[94,15931,15932],{"class":163},"    \u002F\u002F情人设置\n",[94,15934,15935,15937,15940,15942,15945],{"class":96,"line":9780},[94,15936,15848],{"class":104},[94,15938,15939],{"class":1944},"setLover",[94,15941,105],{"class":104},[94,15943,15944],{"class":209},"\"苍井\"",[94,15946,2700],{"class":104},[94,15948,15949,15952],{"class":96,"line":9785},[94,15950,15951],{"class":163},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[94,15953,15954],{"class":163},"  \u002F\u002F只写属性，不可以读取\n",[94,15956,15957],{"class":96,"line":9794},[94,15958,2381],{"emptyLinePlaceholder":20},[94,15960,15961,15963,15965,15967],{"class":96,"line":9799},[94,15962,2284],{"class":1944},[94,15964,105],{"class":104},[94,15966,2289],{"class":209},[94,15968,2700],{"class":104},[94,15970,15971],{"class":96,"line":9805},[94,15972,2381],{"emptyLinePlaceholder":20},[94,15974,15975,15977,15979],{"class":96,"line":9826},[94,15976,4071],{"class":100},[94,15978,4074],{"class":153},[94,15980,1271],{"class":104},[94,15982,15983],{"class":96,"line":9832},[94,15984,1546],{"class":104},[65,15986,15988],{"id":15987},"_814封装案例","8.1.4封装案例",[48,15990,15991],{},[51,15992,15993,15996],{},[254,15994,15995],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1112,15998,15999,16002],{},[51,16000,16001],{},"求出立方体的面积和体积",[51,16003,16004],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[85,16006,16008],{"className":87,"code":16007,"language":89,"meta":14,"style":14},"#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",[91,16009,16010,16016,16026,16033,16037,16041,16046,16076,16080,16090,16100,16110,16114,16123,16127,16163,16167,16176,16180,16196,16200,16205,16214,16218,16225,16229,16238,16242,16249,16253,16262,16266,16273,16277,16282,16299,16303,16349,16353,16362,16366,16370,16374,16383,16387,16391,16396,16400,16406,16412,16418,16422,16426,16431,16453,16457,16511,16515,16523,16527,16532,16537,16550,16557,16573,16584,16590,16613,16619,16642,16656,16676,16682,16693,16716,16738,16743,16749,16763,16776,16781,16795,16800,16806,16811,16825,16830,16835,16849,16861,16866,16879,16884,16889,16894,16907,16912],{"__ignoreMap":14},[94,16011,16012,16014],{"class":96,"line":97},[94,16013,1930],{"class":100},[94,16015,1933],{"class":209},[94,16017,16018,16020,16022,16024],{"class":96,"line":15},[94,16019,1938],{"class":100},[94,16021,1941],{"class":100},[94,16023,1945],{"class":1944},[94,16025,1271],{"class":104},[94,16027,16028,16030],{"class":96,"line":1160},[94,16029,14676],{"class":100},[94,16031,16032],{"class":1944}," Cube\n",[94,16034,16035],{"class":96,"line":1175},[94,16036,1527],{"class":104},[94,16038,16039],{"class":96,"line":1181},[94,16040,14698],{"class":100},[94,16042,16043],{"class":96,"line":1195},[94,16044,16045],{"class":163},"    \u002F\u002F输入长宽高\n",[94,16047,16048,16050,16053,16055,16057,16060,16062,16064,16067,16069,16071,16074],{"class":96,"line":1201},[94,16049,14891],{"class":100},[94,16051,16052],{"class":1944}," setLwh",[94,16054,105],{"class":104},[94,16056,108],{"class":100},[94,16058,16059],{"class":5198}," l",[94,16061,483],{"class":104},[94,16063,108],{"class":100},[94,16065,16066],{"class":5198}," w",[94,16068,483],{"class":104},[94,16070,108],{"class":100},[94,16072,16073],{"class":5198}," h",[94,16075,111],{"class":104},[94,16077,16078],{"class":96,"line":1292},[94,16079,2011],{"class":104},[94,16081,16082,16085,16087],{"class":96,"line":1298},[94,16083,16084],{"class":104},"        m_L",[94,16086,150],{"class":100},[94,16088,16089],{"class":104},"l;\n",[94,16091,16092,16095,16097],{"class":96,"line":1310},[94,16093,16094],{"class":104},"        m_W",[94,16096,150],{"class":100},[94,16098,16099],{"class":104},"w;\n",[94,16101,16102,16105,16107],{"class":96,"line":1593},[94,16103,16104],{"class":104},"        m_H",[94,16106,150],{"class":100},[94,16108,16109],{"class":104},"h;\n",[94,16111,16112],{"class":96,"line":1598},[94,16113,2168],{"class":104},[94,16115,16116,16118,16121],{"class":96,"line":1604},[94,16117,1966],{"class":100},[94,16119,16120],{"class":1944}," mianji",[94,16122,1957],{"class":104},[94,16124,16125],{"class":96,"line":1609},[94,16126,2011],{"class":104},[94,16128,16129,16131,16133,16135,16138,16140,16143,16145,16148,16150,16153,16155,16158,16160],{"class":96,"line":1623},[94,16130,14734],{"class":100},[94,16132,14737],{"class":153},[94,16134,560],{"class":100},[94,16136,16137],{"class":104},"(m_L",[94,16139,560],{"class":100},[94,16141,16142],{"class":104},"m_W ",[94,16144,586],{"class":100},[94,16146,16147],{"class":104}," m_L",[94,16149,560],{"class":100},[94,16151,16152],{"class":104},"m_H ",[94,16154,586],{"class":100},[94,16156,16157],{"class":104}," m_W",[94,16159,560],{"class":100},[94,16161,16162],{"class":104},"m_H);\n",[94,16164,16165],{"class":96,"line":1628},[94,16166,2168],{"class":104},[94,16168,16169,16171,16174],{"class":96,"line":1634},[94,16170,1966],{"class":100},[94,16172,16173],{"class":1944}," tiji",[94,16175,1957],{"class":104},[94,16177,16178],{"class":96,"line":1655},[94,16179,2011],{"class":104},[94,16181,16182,16184,16186,16188,16191,16193],{"class":96,"line":1660},[94,16183,14734],{"class":100},[94,16185,16147],{"class":104},[94,16187,560],{"class":100},[94,16189,16190],{"class":104},"m_W",[94,16192,560],{"class":100},[94,16194,16195],{"class":104},"m_H;\n",[94,16197,16198],{"class":96,"line":1674},[94,16199,2168],{"class":104},[94,16201,16202],{"class":96,"line":1679},[94,16203,16204],{"class":163},"    \u002F\u002F获取长宽高\n",[94,16206,16207,16209,16212],{"class":96,"line":1708},[94,16208,1966],{"class":100},[94,16210,16211],{"class":1944}," getLength",[94,16213,1957],{"class":104},[94,16215,16216],{"class":96,"line":1713},[94,16217,2011],{"class":104},[94,16219,16220,16222],{"class":96,"line":1730},[94,16221,14734],{"class":100},[94,16223,16224],{"class":104}," m_L;\n",[94,16226,16227],{"class":96,"line":1735},[94,16228,2168],{"class":104},[94,16230,16231,16233,16236],{"class":96,"line":1740},[94,16232,1966],{"class":100},[94,16234,16235],{"class":1944}," getWidth",[94,16237,1957],{"class":104},[94,16239,16240],{"class":96,"line":1745},[94,16241,2011],{"class":104},[94,16243,16244,16246],{"class":96,"line":1759},[94,16245,14734],{"class":100},[94,16247,16248],{"class":104}," m_W;\n",[94,16250,16251],{"class":96,"line":1764},[94,16252,2168],{"class":104},[94,16254,16255,16257,16260],{"class":96,"line":2558},[94,16256,1966],{"class":100},[94,16258,16259],{"class":1944}," getHeight",[94,16261,1957],{"class":104},[94,16263,16264],{"class":96,"line":2572},[94,16265,2011],{"class":104},[94,16267,16268,16270],{"class":96,"line":2580},[94,16269,14734],{"class":100},[94,16271,16272],{"class":104}," m_H;\n",[94,16274,16275],{"class":96,"line":2585},[94,16276,2168],{"class":104},[94,16278,16279],{"class":96,"line":2591},[94,16280,16281],{"class":163},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[94,16283,16284,16287,16290,16292,16295,16297],{"class":96,"line":2597},[94,16285,16286],{"class":100},"    bool",[94,16288,16289],{"class":1944}," isEqual",[94,16291,105],{"class":104},[94,16293,16294],{"class":1944},"Cube",[94,16296,2830],{"class":5198},[94,16298,111],{"class":104},[94,16300,16301],{"class":96,"line":2602},[94,16302,2011],{"class":104},[94,16304,16305,16307,16310,16313,16315,16317,16320,16322,16325,16328,16330,16332,16335,16337,16339,16342,16344,16346],{"class":96,"line":7930},[94,16306,2478],{"class":100},[94,16308,16309],{"class":104}," (c.",[94,16311,16312],{"class":1944},"getLength",[94,16314,13032],{"class":104},[94,16316,2930],{"class":100},[94,16318,16319],{"class":104}," m_L ",[94,16321,1696],{"class":100},[94,16323,16324],{"class":104}," c.",[94,16326,16327],{"class":1944},"getWidth",[94,16329,13032],{"class":104},[94,16331,2930],{"class":100},[94,16333,16334],{"class":104}," m_W ",[94,16336,1696],{"class":100},[94,16338,16324],{"class":104},[94,16340,16341],{"class":1944},"getHeight",[94,16343,13032],{"class":104},[94,16345,2930],{"class":100},[94,16347,16348],{"class":104}," m_H)\n",[94,16350,16351],{"class":96,"line":7954},[94,16352,2491],{"class":104},[94,16354,16355,16357,16360],{"class":96,"line":7959},[94,16356,15714],{"class":100},[94,16358,16359],{"class":153}," true",[94,16361,1271],{"class":104},[94,16363,16364],{"class":96,"line":7965},[94,16365,2510],{"class":104},[94,16367,16368],{"class":96,"line":7992},[94,16369,2551],{"class":100},[94,16371,16372],{"class":96,"line":7997},[94,16373,2491],{"class":104},[94,16375,16376,16378,16381],{"class":96,"line":8003},[94,16377,15714],{"class":100},[94,16379,16380],{"class":153}," false",[94,16382,1271],{"class":104},[94,16384,16385],{"class":96,"line":8015},[94,16386,2510],{"class":104},[94,16388,16389],{"class":96,"line":8027},[94,16390,2168],{"class":104},[94,16392,16393],{"class":96,"line":8039},[94,16394,16395],{"class":163},"    \u002F\u002F私有属性\n",[94,16397,16398],{"class":96,"line":9698},[94,16399,15204],{"class":100},[94,16401,16402,16404],{"class":96,"line":9723},[94,16403,1966],{"class":100},[94,16405,16224],{"class":104},[94,16407,16408,16410],{"class":96,"line":9746},[94,16409,1966],{"class":100},[94,16411,16248],{"class":104},[94,16413,16414,16416],{"class":96,"line":9770},[94,16415,1966],{"class":100},[94,16417,16272],{"class":104},[94,16419,16420],{"class":96,"line":9775},[94,16421,2381],{"emptyLinePlaceholder":20},[94,16423,16424],{"class":96,"line":9780},[94,16425,3976],{"class":104},[94,16427,16428],{"class":96,"line":9785},[94,16429,16430],{"class":163},"\u002F\u002F全局函数判断两个立方体是否相等\n",[94,16432,16433,16435,16437,16439,16441,16444,16446,16448,16451],{"class":96,"line":9794},[94,16434,1335],{"class":100},[94,16436,16289],{"class":1944},[94,16438,105],{"class":104},[94,16440,16294],{"class":1944},[94,16442,16443],{"class":5198}," c1",[94,16445,483],{"class":104},[94,16447,16294],{"class":1944},[94,16449,16450],{"class":5198}," c2",[94,16452,111],{"class":104},[94,16454,16455],{"class":96,"line":9799},[94,16456,1527],{"class":104},[94,16458,16459,16461,16464,16466,16468,16470,16473,16475,16478,16480,16482,16484,16486,16488,16490,16492,16494,16496,16498,16500,16502,16504,16506,16508],{"class":96,"line":9805},[94,16460,4071],{"class":100},[94,16462,16463],{"class":104}," (c1.",[94,16465,16312],{"class":1944},[94,16467,13032],{"class":104},[94,16469,2930],{"class":100},[94,16471,16472],{"class":104}," c2.",[94,16474,16312],{"class":1944},[94,16476,16477],{"class":104},"()) ",[94,16479,1696],{"class":100},[94,16481,16463],{"class":104},[94,16483,16327],{"class":1944},[94,16485,13032],{"class":104},[94,16487,2930],{"class":100},[94,16489,16472],{"class":104},[94,16491,16327],{"class":1944},[94,16493,16477],{"class":104},[94,16495,1696],{"class":100},[94,16497,16463],{"class":104},[94,16499,16341],{"class":1944},[94,16501,13032],{"class":104},[94,16503,2930],{"class":100},[94,16505,16472],{"class":104},[94,16507,16341],{"class":1944},[94,16509,16510],{"class":104},"());\n",[94,16512,16513],{"class":96,"line":9826},[94,16514,1546],{"class":104},[94,16516,16517,16519,16521],{"class":96,"line":9832},[94,16518,108],{"class":100},[94,16520,1954],{"class":1944},[94,16522,1957],{"class":104},[94,16524,16525],{"class":96,"line":9846},[94,16526,1527],{"class":104},[94,16528,16529],{"class":96,"line":9852},[94,16530,16531],{"class":104},"    Cube c1;\n",[94,16533,16534],{"class":96,"line":9879},[94,16535,16536],{"class":163},"    \u002F\u002F输入立方体的长宽高\n",[94,16538,16539,16541,16543,16546,16548],{"class":96,"line":9888},[94,16540,1532],{"class":104},[94,16542,1149],{"class":100},[94,16544,16545],{"class":209},"\"请输入第一个立方体的长、宽、高：\"",[94,16547,1149],{"class":100},[94,16549,1172],{"class":104},[94,16551,16552,16554],{"class":96,"line":9894},[94,16553,1966],{"class":100},[94,16555,16556],{"class":104}," l,w,h,l1,w1,h1;\n",[94,16558,16559,16561,16563,16565,16567,16569,16571],{"class":96,"line":9902},[94,16560,1993],{"class":104},[94,16562,1410],{"class":100},[94,16564,623],{"class":104},[94,16566,1410],{"class":100},[94,16568,900],{"class":104},[94,16570,1410],{"class":100},[94,16572,16109],{"class":104},[94,16574,16575,16578,16581],{"class":96,"line":9907},[94,16576,16577],{"class":104},"    c1.",[94,16579,16580],{"class":1944},"setLwh",[94,16582,16583],{"class":104},"(l,w,h);\n",[94,16585,16587],{"class":96,"line":16586},66,[94,16588,16589],{"class":163},"    \u002F\u002F面积\n",[94,16591,16593,16595,16597,16600,16602,16604,16607,16609,16611],{"class":96,"line":16592},67,[94,16594,1532],{"class":104},[94,16596,1149],{"class":100},[94,16598,16599],{"class":209},"\"立方体的表面积为：\"",[94,16601,1149],{"class":100},[94,16603,14812],{"class":104},[94,16605,16606],{"class":1944},"mianji",[94,16608,2408],{"class":104},[94,16610,1149],{"class":100},[94,16612,1172],{"class":104},[94,16614,16616],{"class":96,"line":16615},68,[94,16617,16618],{"class":163},"    \u002F\u002F体积\n",[94,16620,16622,16624,16626,16629,16631,16633,16636,16638,16640],{"class":96,"line":16621},69,[94,16623,1532],{"class":104},[94,16625,1149],{"class":100},[94,16627,16628],{"class":209},"\"立方体的体积为：\"",[94,16630,1149],{"class":100},[94,16632,14812],{"class":104},[94,16634,16635],{"class":1944},"tiji",[94,16637,2408],{"class":104},[94,16639,1149],{"class":100},[94,16641,1172],{"class":104},[94,16643,16645,16647,16649,16652,16654],{"class":96,"line":16644},70,[94,16646,1532],{"class":104},[94,16648,1149],{"class":100},[94,16650,16651],{"class":209},"\"请输入第二个立方体的长、宽、高：\"",[94,16653,1149],{"class":100},[94,16655,1172],{"class":104},[94,16657,16659,16661,16663,16666,16668,16671,16673],{"class":96,"line":16658},71,[94,16660,1993],{"class":104},[94,16662,1410],{"class":100},[94,16664,16665],{"class":104},"l1",[94,16667,1410],{"class":100},[94,16669,16670],{"class":104},"w1",[94,16672,1410],{"class":100},[94,16674,16675],{"class":104},"h1;\n",[94,16677,16679],{"class":96,"line":16678},72,[94,16680,16681],{"class":104},"    Cube c2;\n",[94,16683,16685,16688,16690],{"class":96,"line":16684},73,[94,16686,16687],{"class":104},"    c2.",[94,16689,16580],{"class":1944},[94,16691,16692],{"class":104},"(l1,w1,h1);\n",[94,16694,16696,16698,16700,16703,16705,16708,16710,16712,16714],{"class":96,"line":16695},74,[94,16697,1532],{"class":104},[94,16699,1149],{"class":100},[94,16701,16702],{"class":209},"\"第二个立方体的表面积为：\"",[94,16704,1149],{"class":100},[94,16706,16707],{"class":104},"c2.",[94,16709,16606],{"class":1944},[94,16711,2408],{"class":104},[94,16713,1149],{"class":100},[94,16715,1172],{"class":104},[94,16717,16719,16721,16723,16726,16728,16730,16732,16734,16736],{"class":96,"line":16718},75,[94,16720,1532],{"class":104},[94,16722,1149],{"class":100},[94,16724,16725],{"class":209},"\"第二个立方体的体积为：\"",[94,16727,1149],{"class":100},[94,16729,16707],{"class":104},[94,16731,16635],{"class":1944},[94,16733,2408],{"class":104},[94,16735,1149],{"class":100},[94,16737,1172],{"class":104},[94,16739,16741],{"class":96,"line":16740},76,[94,16742,2381],{"emptyLinePlaceholder":20},[94,16744,16746],{"class":96,"line":16745},77,[94,16747,16748],{"class":163},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[94,16750,16752,16754,16756,16759,16761],{"class":96,"line":16751},78,[94,16753,1532],{"class":104},[94,16755,1149],{"class":100},[94,16757,16758],{"class":209},"\"内部函数判断结果：\"",[94,16760,1149],{"class":100},[94,16762,1172],{"class":104},[94,16764,16766,16768,16770,16773],{"class":96,"line":16765},79,[94,16767,3082],{"class":100},[94,16769,16463],{"class":104},[94,16771,16772],{"class":1944},"isEqual",[94,16774,16775],{"class":104},"(c2))\n",[94,16777,16779],{"class":96,"line":16778},80,[94,16780,2011],{"class":104},[94,16782,16784,16786,16788,16791,16793],{"class":96,"line":16783},81,[94,16785,3432],{"class":104},[94,16787,1149],{"class":100},[94,16789,16790],{"class":209},"\"两个立方体相等\"",[94,16792,1149],{"class":100},[94,16794,1172],{"class":104},[94,16796,16798],{"class":96,"line":16797},82,[94,16799,2168],{"class":104},[94,16801,16803],{"class":96,"line":16802},83,[94,16804,16805],{"class":100},"    else\n",[94,16807,16809],{"class":96,"line":16808},84,[94,16810,2011],{"class":104},[94,16812,16814,16816,16818,16821,16823],{"class":96,"line":16813},85,[94,16815,3432],{"class":104},[94,16817,1149],{"class":100},[94,16819,16820],{"class":209},"\"两个立方体不相等\"",[94,16822,1149],{"class":100},[94,16824,1172],{"class":104},[94,16826,16828],{"class":96,"line":16827},86,[94,16829,2168],{"class":104},[94,16831,16833],{"class":96,"line":16832},87,[94,16834,2381],{"emptyLinePlaceholder":20},[94,16836,16838,16840,16842,16845,16847],{"class":96,"line":16837},88,[94,16839,1532],{"class":104},[94,16841,1149],{"class":100},[94,16843,16844],{"class":209},"\"全局函数判断结果：\"",[94,16846,1149],{"class":100},[94,16848,1172],{"class":104},[94,16850,16852,16854,16856,16858],{"class":96,"line":16851},89,[94,16853,3082],{"class":100},[94,16855,1639],{"class":104},[94,16857,16772],{"class":1944},[94,16859,16860],{"class":104},"(c1, c2))\n",[94,16862,16864],{"class":96,"line":16863},90,[94,16865,2011],{"class":104},[94,16867,16869,16871,16873,16875,16877],{"class":96,"line":16868},91,[94,16870,3432],{"class":104},[94,16872,1149],{"class":100},[94,16874,16790],{"class":209},[94,16876,1149],{"class":100},[94,16878,1172],{"class":104},[94,16880,16882],{"class":96,"line":16881},92,[94,16883,2168],{"class":104},[94,16885,16887],{"class":96,"line":16886},93,[94,16888,16805],{"class":100},[94,16890,16892],{"class":96,"line":16891},94,[94,16893,2011],{"class":104},[94,16895,16897,16899,16901,16903,16905],{"class":96,"line":16896},95,[94,16898,3432],{"class":104},[94,16900,1149],{"class":100},[94,16902,16820],{"class":209},[94,16904,1149],{"class":100},[94,16906,1172],{"class":104},[94,16908,16910],{"class":96,"line":16909},96,[94,16911,2168],{"class":104},[94,16913,16915],{"class":96,"line":16914},97,[94,16916,1546],{"class":104},[48,16918,16919],{"start":15},[51,16920,16921],{},[254,16922,16923],{},"练习案例2：点和圆的关系",[1112,16925,16926],{},[51,16927,16928],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[85,16930,16932],{"className":87,"code":16931,"language":89,"meta":14,"style":14},"#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",[91,16933,16934,16940,16950,16957,16964,16968,16972,16977,17011,17016,17032,17046,17050,17054,17061,17068,17072,17078,17082,17086,17090,17112,17135,17140,17154,17169,17173,17177,17183,17188,17193,17197,17223,17227,17257,17285,17313,17330,17334,17347,17351,17355,17359,17372,17376,17380,17388,17392,17396,17400,17405,17409,17420,17427,17436,17446,17457,17464,17477,17488,17498,17509,17516,17530,17535,17545,17553],{"__ignoreMap":14},[94,16935,16936,16938],{"class":96,"line":97},[94,16937,1930],{"class":100},[94,16939,1933],{"class":209},[94,16941,16942,16944,16946,16948],{"class":96,"line":15},[94,16943,1938],{"class":100},[94,16945,1941],{"class":100},[94,16947,1945],{"class":1944},[94,16949,1271],{"class":104},[94,16951,16952,16954],{"class":96,"line":1160},[94,16953,1930],{"class":100},[94,16955,16956],{"class":209},"\u003Ccmath>\n",[94,16958,16959,16961],{"class":96,"line":1175},[94,16960,14676],{"class":100},[94,16962,16963],{"class":1944}," Point\n",[94,16965,16966],{"class":96,"line":1181},[94,16967,1527],{"class":104},[94,16969,16970],{"class":96,"line":1195},[94,16971,14698],{"class":100},[94,16973,16974],{"class":96,"line":1201},[94,16975,16976],{"class":163},"    \u002F\u002F赋值\n",[94,16978,16979,16981,16984,16986,16988,16991,16993,16995,16998,17001,17003,17006,17008],{"class":96,"line":1292},[94,16980,14891],{"class":100},[94,16982,16983],{"class":1944}," setPoint",[94,16985,105],{"class":104},[94,16987,14019],{"class":100},[94,16989,16990],{"class":5198}," x",[94,16992,12417],{"class":104},[94,16994,14019],{"class":100},[94,16996,16997],{"class":5198}," y",[94,16999,17000],{"class":104},") { m_x ",[94,17002,150],{"class":100},[94,17004,17005],{"class":104}," x; m_y ",[94,17007,150],{"class":100},[94,17009,17010],{"class":104}," y; }\n",[94,17012,17013],{"class":96,"line":1298},[94,17014,17015],{"class":163},"    \u002F\u002F获取坐标\n",[94,17017,17018,17020,17023,17026,17029],{"class":96,"line":1310},[94,17019,14720],{"class":100},[94,17021,17022],{"class":1944}," getX",[94,17024,17025],{"class":104},"() { ",[94,17027,17028],{"class":100},"return",[94,17030,17031],{"class":104}," m_x; }\n",[94,17033,17034,17036,17039,17041,17043],{"class":96,"line":1593},[94,17035,14720],{"class":100},[94,17037,17038],{"class":1944}," getY",[94,17040,17025],{"class":104},[94,17042,17028],{"class":100},[94,17044,17045],{"class":104}," m_y; }\n",[94,17047,17048],{"class":96,"line":1598},[94,17049,2381],{"emptyLinePlaceholder":20},[94,17051,17052],{"class":96,"line":1604},[94,17053,15204],{"class":100},[94,17055,17056,17058],{"class":96,"line":1609},[94,17057,14720],{"class":100},[94,17059,17060],{"class":104}," m_x;\n",[94,17062,17063,17065],{"class":96,"line":1623},[94,17064,14720],{"class":100},[94,17066,17067],{"class":104}," m_y;\n",[94,17069,17070],{"class":96,"line":1628},[94,17071,3976],{"class":104},[94,17073,17074,17076],{"class":96,"line":1634},[94,17075,14676],{"class":100},[94,17077,14679],{"class":1944},[94,17079,17080],{"class":96,"line":1655},[94,17081,1527],{"class":104},[94,17083,17084],{"class":96,"line":1660},[94,17085,14698],{"class":100},[94,17087,17088],{"class":96,"line":1674},[94,17089,16976],{"class":163},[94,17091,17092,17094,17097,17099,17101,17104,17107,17109],{"class":96,"line":1679},[94,17093,14891],{"class":100},[94,17095,17096],{"class":1944}," setRadius",[94,17098,105],{"class":104},[94,17100,14019],{"class":100},[94,17102,17103],{"class":5198}," r",[94,17105,17106],{"class":104},") { m_r ",[94,17108,150],{"class":100},[94,17110,17111],{"class":104}," r; }\n",[94,17113,17114,17116,17119,17121,17124,17127,17130,17132],{"class":96,"line":1708},[94,17115,14891],{"class":100},[94,17117,17118],{"class":1944}," setCenter",[94,17120,105],{"class":104},[94,17122,17123],{"class":1944},"Point",[94,17125,17126],{"class":5198}," center",[94,17128,17129],{"class":104},") { m_center ",[94,17131,150],{"class":100},[94,17133,17134],{"class":104}," center; }\n",[94,17136,17137],{"class":96,"line":1713},[94,17138,17139],{"class":163},"    \u002F\u002F获取属性\n",[94,17141,17142,17144,17147,17149,17151],{"class":96,"line":1730},[94,17143,14720],{"class":100},[94,17145,17146],{"class":1944}," getRadius",[94,17148,17025],{"class":104},[94,17150,17028],{"class":100},[94,17152,17153],{"class":104}," m_r; }\n",[94,17155,17156,17159,17162,17164,17166],{"class":96,"line":1735},[94,17157,17158],{"class":1944},"    Point",[94,17160,17161],{"class":1944}," getCenter",[94,17163,17025],{"class":104},[94,17165,17028],{"class":100},[94,17167,17168],{"class":104}," m_center; }\n",[94,17170,17171],{"class":96,"line":1740},[94,17172,2381],{"emptyLinePlaceholder":20},[94,17174,17175],{"class":96,"line":1745},[94,17176,15204],{"class":100},[94,17178,17179,17181],{"class":96,"line":1759},[94,17180,14720],{"class":100},[94,17182,14710],{"class":104},[94,17184,17185],{"class":96,"line":1764},[94,17186,17187],{"class":163},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[94,17189,17190],{"class":96,"line":2558},[94,17191,17192],{"class":104},"    Point m_center;\n",[94,17194,17195],{"class":96,"line":2572},[94,17196,3976],{"class":104},[94,17198,17199,17201,17204,17206,17209,17211,17213,17215,17217,17219,17221],{"class":96,"line":2580},[94,17200,5346],{"class":100},[94,17202,17203],{"class":1944}," isInCircle",[94,17205,105],{"class":104},[94,17207,17208],{"class":1944},"Circle",[94,17210,10566],{"class":100},[94,17212,393],{"class":5198},[94,17214,483],{"class":104},[94,17216,17123],{"class":1944},[94,17218,10566],{"class":100},[94,17220,40],{"class":5198},[94,17222,111],{"class":104},[94,17224,17225],{"class":96,"line":2585},[94,17226,1527],{"class":104},[94,17228,17229,17231,17234,17236,17238,17241,17244,17247,17249,17251,17253,17255],{"class":96,"line":2591},[94,17230,14720],{"class":100},[94,17232,17233],{"class":104}," dx ",[94,17235,150],{"class":100},[94,17237,16324],{"class":104},[94,17239,17240],{"class":1944},"getCenter",[94,17242,17243],{"class":104},"().",[94,17245,17246],{"class":1944},"getX",[94,17248,13032],{"class":104},[94,17250,637],{"class":100},[94,17252,15870],{"class":104},[94,17254,17246],{"class":1944},[94,17256,5618],{"class":104},[94,17258,17259,17261,17264,17266,17268,17270,17272,17275,17277,17279,17281,17283],{"class":96,"line":2597},[94,17260,14720],{"class":100},[94,17262,17263],{"class":104}," dy ",[94,17265,150],{"class":100},[94,17267,16324],{"class":104},[94,17269,17240],{"class":1944},[94,17271,17243],{"class":104},[94,17273,17274],{"class":1944},"getY",[94,17276,13032],{"class":104},[94,17278,637],{"class":100},[94,17280,15870],{"class":104},[94,17282,17274],{"class":1944},[94,17284,5618],{"class":104},[94,17286,17287,17289,17292,17294,17297,17300,17302,17304,17306,17308,17310],{"class":96,"line":2602},[94,17288,14720],{"class":100},[94,17290,17291],{"class":104}," distance ",[94,17293,150],{"class":100},[94,17295,17296],{"class":1944}," sqrt",[94,17298,17299],{"class":104},"(dx ",[94,17301,560],{"class":100},[94,17303,17233],{"class":104},[94,17305,586],{"class":100},[94,17307,17263],{"class":104},[94,17309,560],{"class":100},[94,17311,17312],{"class":104}," dy);\n",[94,17314,17315,17317,17320,17322,17324,17327],{"class":96,"line":7930},[94,17316,3082],{"class":100},[94,17318,17319],{"class":104}," (distance ",[94,17321,1015],{"class":100},[94,17323,16324],{"class":104},[94,17325,17326],{"class":1944},"getRadius",[94,17328,17329],{"class":104},"())\n",[94,17331,17332],{"class":96,"line":7954},[94,17333,2011],{"class":104},[94,17335,17336,17338,17340,17343,17345],{"class":96,"line":7959},[94,17337,9651],{"class":104},[94,17339,1149],{"class":100},[94,17341,17342],{"class":209}," \"点在圆内\"",[94,17344,1425],{"class":100},[94,17346,8822],{"class":104},[94,17348,17349],{"class":96,"line":7965},[94,17350,2168],{"class":104},[94,17352,17353],{"class":96,"line":7992},[94,17354,16805],{"class":100},[94,17356,17357],{"class":96,"line":7997},[94,17358,2011],{"class":104},[94,17360,17361,17363,17365,17368,17370],{"class":96,"line":8003},[94,17362,9651],{"class":104},[94,17364,1149],{"class":100},[94,17366,17367],{"class":209}," \"点在圆外\"",[94,17369,1425],{"class":100},[94,17371,8822],{"class":104},[94,17373,17374],{"class":96,"line":8015},[94,17375,2168],{"class":104},[94,17377,17378],{"class":96,"line":8027},[94,17379,1546],{"class":104},[94,17381,17382,17384,17386],{"class":96,"line":8039},[94,17383,108],{"class":100},[94,17385,1954],{"class":1944},[94,17387,1957],{"class":104},[94,17389,17390],{"class":96,"line":9698},[94,17391,1527],{"class":104},[94,17393,17394],{"class":96,"line":9723},[94,17395,15035],{"class":163},[94,17397,17398],{"class":96,"line":9746},[94,17399,14782],{"class":104},[94,17401,17402],{"class":96,"line":9770},[94,17403,17404],{"class":104},"    Point p1;\n",[94,17406,17407],{"class":96,"line":9775},[94,17408,16976],{"class":163},[94,17410,17411,17413,17415,17418],{"class":96,"line":9780},[94,17412,1532],{"class":104},[94,17414,1149],{"class":100},[94,17416,17417],{"class":209},"\"请输入圆的半径：\"",[94,17419,1271],{"class":104},[94,17421,17422,17424],{"class":96,"line":9785},[94,17423,14720],{"class":100},[94,17425,17426],{"class":104}," r;\n",[94,17428,17429,17431,17433],{"class":96,"line":9794},[94,17430,1993],{"class":104},[94,17432,1410],{"class":100},[94,17434,17435],{"class":104},"r;\n",[94,17437,17438,17440,17443],{"class":96,"line":9799},[94,17439,16577],{"class":104},[94,17441,17442],{"class":1944},"setRadius",[94,17444,17445],{"class":104},"(r);\n",[94,17447,17448,17450,17452,17455],{"class":96,"line":9805},[94,17449,1532],{"class":104},[94,17451,1149],{"class":100},[94,17453,17454],{"class":209},"\"请输入圆心坐标：\"",[94,17456,1271],{"class":104},[94,17458,17459,17461],{"class":96,"line":9826},[94,17460,14720],{"class":100},[94,17462,17463],{"class":104}," x, y;\n",[94,17465,17466,17468,17470,17472,17474],{"class":96,"line":9832},[94,17467,1993],{"class":104},[94,17469,1410],{"class":100},[94,17471,925],{"class":104},[94,17473,1410],{"class":100},[94,17475,17476],{"class":104},"y;\n",[94,17478,17479,17482,17485],{"class":96,"line":9846},[94,17480,17481],{"class":104},"    p1.",[94,17483,17484],{"class":1944},"setPoint",[94,17486,17487],{"class":104},"(x, y);\n",[94,17489,17490,17492,17495],{"class":96,"line":9852},[94,17491,16577],{"class":104},[94,17493,17494],{"class":1944},"setCenter",[94,17496,17497],{"class":104},"(p1);\n",[94,17499,17500,17502,17504,17507],{"class":96,"line":9879},[94,17501,1532],{"class":104},[94,17503,1149],{"class":100},[94,17505,17506],{"class":209},"\"请输入测试点坐标：\"",[94,17508,1271],{"class":104},[94,17510,17511,17513],{"class":96,"line":9888},[94,17512,14720],{"class":100},[94,17514,17515],{"class":104}," x1, y1;\n",[94,17517,17518,17520,17522,17525,17527],{"class":96,"line":9894},[94,17519,1993],{"class":104},[94,17521,1410],{"class":100},[94,17523,17524],{"class":104},"x1",[94,17526,1410],{"class":100},[94,17528,17529],{"class":104},"y1;\n",[94,17531,17532],{"class":96,"line":9902},[94,17533,17534],{"class":104},"    Point p2;\n",[94,17536,17537,17540,17542],{"class":96,"line":9907},[94,17538,17539],{"class":104},"    p2.",[94,17541,17484],{"class":1944},[94,17543,17544],{"class":104},"(x1, y1);\n",[94,17546,17547,17550],{"class":96,"line":16586},[94,17548,17549],{"class":1944},"    isInCircle",[94,17551,17552],{"class":104},"(c1, p2);\n",[94,17554,17555],{"class":96,"line":16592},[94,17556,1546],{"class":104},[40,17558,17559],{},"在类中可以让另一个类作为本来的成员",[40,17561,17562],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[40,17564,17565],{},"创建point.h",[85,17567,17569],{"className":87,"code":17568,"language":89,"meta":14,"style":14},"#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",[91,17570,17571,17582,17588,17598,17604,17608,17613,17617,17621,17641,17645,17653,17661,17665,17669,17675,17681],{"__ignoreMap":14},[94,17572,17573,17576,17579],{"class":96,"line":97},[94,17574,17575],{"class":100},"#pragma",[94,17577,17578],{"class":1944}," once",[94,17580,17581],{"class":163}," \u002F\u002F防止头文件重复包含\n",[94,17583,17584,17586],{"class":96,"line":15},[94,17585,1930],{"class":100},[94,17587,1933],{"class":209},[94,17589,17590,17592,17594,17596],{"class":96,"line":1160},[94,17591,1938],{"class":100},[94,17593,1941],{"class":100},[94,17595,1945],{"class":1944},[94,17597,1271],{"class":104},[94,17599,17600,17602],{"class":96,"line":1175},[94,17601,14676],{"class":100},[94,17603,16963],{"class":1944},[94,17605,17606],{"class":96,"line":1181},[94,17607,1527],{"class":104},[94,17609,17610],{"class":96,"line":1195},[94,17611,17612],{"class":163},"\u002F\u002F做好声明与变量定义就可以\n",[94,17614,17615],{"class":96,"line":1201},[94,17616,14698],{"class":100},[94,17618,17619],{"class":96,"line":1292},[94,17620,16976],{"class":163},[94,17622,17623,17625,17627,17629,17631,17633,17635,17637,17639],{"class":96,"line":1298},[94,17624,14891],{"class":100},[94,17626,16983],{"class":1944},[94,17628,105],{"class":104},[94,17630,14019],{"class":100},[94,17632,16990],{"class":5198},[94,17634,12417],{"class":104},[94,17636,14019],{"class":100},[94,17638,16997],{"class":5198},[94,17640,2700],{"class":104},[94,17642,17643],{"class":96,"line":1310},[94,17644,17015],{"class":163},[94,17646,17647,17649,17651],{"class":96,"line":1593},[94,17648,14720],{"class":100},[94,17650,17022],{"class":1944},[94,17652,5618],{"class":104},[94,17654,17655,17657,17659],{"class":96,"line":1598},[94,17656,14720],{"class":100},[94,17658,17038],{"class":1944},[94,17660,5618],{"class":104},[94,17662,17663],{"class":96,"line":1604},[94,17664,2381],{"emptyLinePlaceholder":20},[94,17666,17667],{"class":96,"line":1609},[94,17668,15204],{"class":100},[94,17670,17671,17673],{"class":96,"line":1623},[94,17672,14720],{"class":100},[94,17674,17060],{"class":104},[94,17676,17677,17679],{"class":96,"line":1628},[94,17678,14720],{"class":100},[94,17680,17067],{"class":104},[94,17682,17683],{"class":96,"line":1634},[94,17684,3976],{"class":104},[40,17686,17687],{},"创建point.cpp",[85,17689,17691],{"className":87,"code":17690,"language":89,"meta":14,"style":14},"#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",[91,17692,17693,17700,17705,17739,17743,17759],{"__ignoreMap":14},[94,17694,17695,17697],{"class":96,"line":97},[94,17696,1930],{"class":100},[94,17698,17699],{"class":209},"\u003Cpoint.h>\n",[94,17701,17702],{"class":96,"line":15},[94,17703,17704],{"class":163},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[94,17706,17707,17709,17712,17715,17717,17719,17721,17723,17725,17727,17729,17731,17733,17735,17737],{"class":96,"line":1160},[94,17708,14891],{"class":100},[94,17710,17711],{"class":1944}," Point",[94,17713,17714],{"class":104},"::",[94,17716,17484],{"class":1944},[94,17718,105],{"class":104},[94,17720,14019],{"class":100},[94,17722,16990],{"class":5198},[94,17724,12417],{"class":104},[94,17726,14019],{"class":100},[94,17728,16997],{"class":5198},[94,17730,17000],{"class":104},[94,17732,150],{"class":100},[94,17734,17005],{"class":104},[94,17736,150],{"class":100},[94,17738,17010],{"class":104},[94,17740,17741],{"class":96,"line":1175},[94,17742,17015],{"class":163},[94,17744,17745,17747,17749,17751,17753,17755,17757],{"class":96,"line":1181},[94,17746,14720],{"class":100},[94,17748,17711],{"class":1944},[94,17750,17714],{"class":104},[94,17752,17246],{"class":1944},[94,17754,17025],{"class":104},[94,17756,17028],{"class":100},[94,17758,17031],{"class":104},[94,17760,17761,17763,17765,17767,17769,17771,17773],{"class":96,"line":1195},[94,17762,14720],{"class":100},[94,17764,17711],{"class":1944},[94,17766,17714],{"class":104},[94,17768,17274],{"class":1944},[94,17770,17025],{"class":104},[94,17772,17028],{"class":100},[94,17774,17045],{"class":104},[40,17776,17777],{},"创建circle.h",[85,17779,17781],{"className":87,"code":17780,"language":89,"meta":14,"style":14},"#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",[91,17782,17783,17790,17796,17806,17812,17818,17822,17826,17830,17844,17858,17862,17870,17878,17882,17886,17892,17896,17900],{"__ignoreMap":14},[94,17784,17785,17787],{"class":96,"line":97},[94,17786,17575],{"class":100},[94,17788,17789],{"class":1944}," once\n",[94,17791,17792,17794],{"class":96,"line":15},[94,17793,1930],{"class":100},[94,17795,1933],{"class":209},[94,17797,17798,17800,17802,17804],{"class":96,"line":1160},[94,17799,1938],{"class":100},[94,17801,1941],{"class":100},[94,17803,1945],{"class":1944},[94,17805,1271],{"class":104},[94,17807,17808,17810],{"class":96,"line":1175},[94,17809,1930],{"class":100},[94,17811,17699],{"class":209},[94,17813,17814,17816],{"class":96,"line":1181},[94,17815,14676],{"class":100},[94,17817,14679],{"class":1944},[94,17819,17820],{"class":96,"line":1195},[94,17821,1527],{"class":104},[94,17823,17824],{"class":96,"line":1201},[94,17825,14698],{"class":100},[94,17827,17828],{"class":96,"line":1292},[94,17829,16976],{"class":163},[94,17831,17832,17834,17836,17838,17840,17842],{"class":96,"line":1298},[94,17833,14891],{"class":100},[94,17835,17096],{"class":1944},[94,17837,105],{"class":104},[94,17839,14019],{"class":100},[94,17841,17103],{"class":5198},[94,17843,2700],{"class":104},[94,17845,17846,17848,17850,17852,17854,17856],{"class":96,"line":1310},[94,17847,14891],{"class":100},[94,17849,17118],{"class":1944},[94,17851,105],{"class":104},[94,17853,17123],{"class":1944},[94,17855,17126],{"class":5198},[94,17857,2700],{"class":104},[94,17859,17860],{"class":96,"line":1593},[94,17861,17139],{"class":163},[94,17863,17864,17866,17868],{"class":96,"line":1598},[94,17865,14720],{"class":100},[94,17867,17146],{"class":1944},[94,17869,5618],{"class":104},[94,17871,17872,17874,17876],{"class":96,"line":1604},[94,17873,17158],{"class":1944},[94,17875,17161],{"class":1944},[94,17877,5618],{"class":104},[94,17879,17880],{"class":96,"line":1609},[94,17881,2381],{"emptyLinePlaceholder":20},[94,17883,17884],{"class":96,"line":1623},[94,17885,15204],{"class":100},[94,17887,17888,17890],{"class":96,"line":1628},[94,17889,14720],{"class":100},[94,17891,14710],{"class":104},[94,17893,17894],{"class":96,"line":1634},[94,17895,17187],{"class":163},[94,17897,17898],{"class":96,"line":1655},[94,17899,17192],{"class":104},[94,17901,17902],{"class":96,"line":1660},[94,17903,3976],{"class":104},[40,17905,17906],{},"创建circle.cpp",[85,17908,17910],{"className":87,"code":17909,"language":89,"meta":14,"style":14},"#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",[91,17911,17912,17919,17942,17964,17969,17985],{"__ignoreMap":14},[94,17913,17914,17916],{"class":96,"line":97},[94,17915,1930],{"class":100},[94,17917,17918],{"class":209},"\u003Ccircle.h>\n",[94,17920,17921,17923,17926,17928,17930,17932,17934,17936,17938,17940],{"class":96,"line":15},[94,17922,5346],{"class":100},[94,17924,17925],{"class":1944}," Circle",[94,17927,17714],{"class":104},[94,17929,17442],{"class":1944},[94,17931,105],{"class":104},[94,17933,14019],{"class":100},[94,17935,17103],{"class":5198},[94,17937,17106],{"class":104},[94,17939,150],{"class":100},[94,17941,17111],{"class":104},[94,17943,17944,17946,17948,17950,17952,17954,17956,17958,17960,17962],{"class":96,"line":1160},[94,17945,5346],{"class":100},[94,17947,17925],{"class":1944},[94,17949,17714],{"class":104},[94,17951,17494],{"class":1944},[94,17953,105],{"class":104},[94,17955,17123],{"class":1944},[94,17957,17126],{"class":5198},[94,17959,17129],{"class":104},[94,17961,150],{"class":100},[94,17963,17134],{"class":104},[94,17965,17966],{"class":96,"line":1175},[94,17967,17968],{"class":163},"\u002F\u002F获取属性\n",[94,17970,17971,17973,17975,17977,17979,17981,17983],{"class":96,"line":1181},[94,17972,14019],{"class":100},[94,17974,17925],{"class":1944},[94,17976,17714],{"class":104},[94,17978,17326],{"class":1944},[94,17980,17025],{"class":104},[94,17982,17028],{"class":100},[94,17984,17153],{"class":104},[94,17986,17987,17989,17991,17993,17995,17997,17999],{"class":96,"line":1195},[94,17988,17123],{"class":1944},[94,17990,17925],{"class":1944},[94,17992,17714],{"class":104},[94,17994,17240],{"class":1944},[94,17996,17025],{"class":104},[94,17998,17028],{"class":100},[94,18000,17168],{"class":104},[40,18002,18003],{},"使用封装的类",[85,18005,18007],{"className":87,"code":18006,"language":89,"meta":14,"style":14},"#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",[91,18008,18009,18015,18025,18031,18037,18061,18065,18091,18117,18141,18155,18159,18171,18175,18179,18183,18195,18199,18203,18211,18215,18219,18223,18227,18231,18241,18247,18255,18263,18273,18279,18291,18299,18307,18317,18323,18335,18339,18347,18353],{"__ignoreMap":14},[94,18010,18011,18013],{"class":96,"line":97},[94,18012,1930],{"class":100},[94,18014,1933],{"class":209},[94,18016,18017,18019,18021,18023],{"class":96,"line":15},[94,18018,1938],{"class":100},[94,18020,1941],{"class":100},[94,18022,1945],{"class":1944},[94,18024,1271],{"class":104},[94,18026,18027,18029],{"class":96,"line":1160},[94,18028,1930],{"class":100},[94,18030,17918],{"class":209},[94,18032,18033,18035],{"class":96,"line":1175},[94,18034,1930],{"class":100},[94,18036,17699],{"class":209},[94,18038,18039,18041,18043,18045,18047,18049,18051,18053,18055,18057,18059],{"class":96,"line":1181},[94,18040,5346],{"class":100},[94,18042,17203],{"class":1944},[94,18044,105],{"class":104},[94,18046,17208],{"class":1944},[94,18048,10566],{"class":100},[94,18050,393],{"class":5198},[94,18052,483],{"class":104},[94,18054,17123],{"class":1944},[94,18056,10566],{"class":100},[94,18058,40],{"class":5198},[94,18060,111],{"class":104},[94,18062,18063],{"class":96,"line":1195},[94,18064,1527],{"class":104},[94,18066,18067,18069,18071,18073,18075,18077,18079,18081,18083,18085,18087,18089],{"class":96,"line":1201},[94,18068,14720],{"class":100},[94,18070,17233],{"class":104},[94,18072,150],{"class":100},[94,18074,16324],{"class":104},[94,18076,17240],{"class":1944},[94,18078,17243],{"class":104},[94,18080,17246],{"class":1944},[94,18082,13032],{"class":104},[94,18084,637],{"class":100},[94,18086,15870],{"class":104},[94,18088,17246],{"class":1944},[94,18090,5618],{"class":104},[94,18092,18093,18095,18097,18099,18101,18103,18105,18107,18109,18111,18113,18115],{"class":96,"line":1292},[94,18094,14720],{"class":100},[94,18096,17263],{"class":104},[94,18098,150],{"class":100},[94,18100,16324],{"class":104},[94,18102,17240],{"class":1944},[94,18104,17243],{"class":104},[94,18106,17274],{"class":1944},[94,18108,13032],{"class":104},[94,18110,637],{"class":100},[94,18112,15870],{"class":104},[94,18114,17274],{"class":1944},[94,18116,5618],{"class":104},[94,18118,18119,18121,18123,18125,18127,18129,18131,18133,18135,18137,18139],{"class":96,"line":1298},[94,18120,14720],{"class":100},[94,18122,17291],{"class":104},[94,18124,150],{"class":100},[94,18126,17296],{"class":1944},[94,18128,17299],{"class":104},[94,18130,560],{"class":100},[94,18132,17233],{"class":104},[94,18134,586],{"class":100},[94,18136,17263],{"class":104},[94,18138,560],{"class":100},[94,18140,17312],{"class":104},[94,18142,18143,18145,18147,18149,18151,18153],{"class":96,"line":1310},[94,18144,3082],{"class":100},[94,18146,17319],{"class":104},[94,18148,1015],{"class":100},[94,18150,16324],{"class":104},[94,18152,17326],{"class":1944},[94,18154,17329],{"class":104},[94,18156,18157],{"class":96,"line":1593},[94,18158,2011],{"class":104},[94,18160,18161,18163,18165,18167,18169],{"class":96,"line":1598},[94,18162,9651],{"class":104},[94,18164,1149],{"class":100},[94,18166,17342],{"class":209},[94,18168,1425],{"class":100},[94,18170,8822],{"class":104},[94,18172,18173],{"class":96,"line":1604},[94,18174,2168],{"class":104},[94,18176,18177],{"class":96,"line":1609},[94,18178,16805],{"class":100},[94,18180,18181],{"class":96,"line":1623},[94,18182,2011],{"class":104},[94,18184,18185,18187,18189,18191,18193],{"class":96,"line":1628},[94,18186,9651],{"class":104},[94,18188,1149],{"class":100},[94,18190,17367],{"class":209},[94,18192,1425],{"class":100},[94,18194,8822],{"class":104},[94,18196,18197],{"class":96,"line":1634},[94,18198,2168],{"class":104},[94,18200,18201],{"class":96,"line":1655},[94,18202,1546],{"class":104},[94,18204,18205,18207,18209],{"class":96,"line":1660},[94,18206,108],{"class":100},[94,18208,1954],{"class":1944},[94,18210,1957],{"class":104},[94,18212,18213],{"class":96,"line":1674},[94,18214,1527],{"class":104},[94,18216,18217],{"class":96,"line":1679},[94,18218,15035],{"class":163},[94,18220,18221],{"class":96,"line":1708},[94,18222,14782],{"class":104},[94,18224,18225],{"class":96,"line":1713},[94,18226,17404],{"class":104},[94,18228,18229],{"class":96,"line":1730},[94,18230,16976],{"class":163},[94,18232,18233,18235,18237,18239],{"class":96,"line":1735},[94,18234,1532],{"class":104},[94,18236,1149],{"class":100},[94,18238,17417],{"class":209},[94,18240,1271],{"class":104},[94,18242,18243,18245],{"class":96,"line":1740},[94,18244,14720],{"class":100},[94,18246,17426],{"class":104},[94,18248,18249,18251,18253],{"class":96,"line":1745},[94,18250,1993],{"class":104},[94,18252,1410],{"class":100},[94,18254,17435],{"class":104},[94,18256,18257,18259,18261],{"class":96,"line":1759},[94,18258,16577],{"class":104},[94,18260,17442],{"class":1944},[94,18262,17445],{"class":104},[94,18264,18265,18267,18269,18271],{"class":96,"line":1764},[94,18266,1532],{"class":104},[94,18268,1149],{"class":100},[94,18270,17454],{"class":209},[94,18272,1271],{"class":104},[94,18274,18275,18277],{"class":96,"line":2558},[94,18276,14720],{"class":100},[94,18278,17463],{"class":104},[94,18280,18281,18283,18285,18287,18289],{"class":96,"line":2572},[94,18282,1993],{"class":104},[94,18284,1410],{"class":100},[94,18286,925],{"class":104},[94,18288,1410],{"class":100},[94,18290,17476],{"class":104},[94,18292,18293,18295,18297],{"class":96,"line":2580},[94,18294,17481],{"class":104},[94,18296,17484],{"class":1944},[94,18298,17487],{"class":104},[94,18300,18301,18303,18305],{"class":96,"line":2585},[94,18302,16577],{"class":104},[94,18304,17494],{"class":1944},[94,18306,17497],{"class":104},[94,18308,18309,18311,18313,18315],{"class":96,"line":2591},[94,18310,1532],{"class":104},[94,18312,1149],{"class":100},[94,18314,17506],{"class":209},[94,18316,1271],{"class":104},[94,18318,18319,18321],{"class":96,"line":2597},[94,18320,14720],{"class":100},[94,18322,17515],{"class":104},[94,18324,18325,18327,18329,18331,18333],{"class":96,"line":2602},[94,18326,1993],{"class":104},[94,18328,1410],{"class":100},[94,18330,17524],{"class":104},[94,18332,1410],{"class":100},[94,18334,17529],{"class":104},[94,18336,18337],{"class":96,"line":7930},[94,18338,17534],{"class":104},[94,18340,18341,18343,18345],{"class":96,"line":7954},[94,18342,17539],{"class":104},[94,18344,17484],{"class":1944},[94,18346,17544],{"class":104},[94,18348,18349,18351],{"class":96,"line":7959},[94,18350,17549],{"class":1944},[94,18352,17552],{"class":104},[94,18354,18355],{"class":96,"line":7965},[94,18356,1546],{"class":104},[35,18358,18360],{"id":18359},"_82对象的初始化清理","8.2对象的初始化清理",[1112,18362,18363,18366],{},[51,18364,18365],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[51,18367,18368],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[65,18370,18372],{"id":18371},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[40,18374,18375,18376,18379],{},"对象的",[254,18377,18378],{},"初始化和清理","也是两个非常重要的安全问题",[40,18381,18382],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[40,18384,18385],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[40,18387,18388,18389,18392,18393,18396],{},"c++利用了",[254,18390,18391],{},"构造函数","和",[254,18394,18395],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[40,18398,18399,18400],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[254,18401,18402],{},"我们不提供构造和析构，编译器会提供",[40,18404,18405],{},[254,18406,18407],{},"编译器提供的构造函数和析构函数是空实现。",[1112,18409,18410,18413],{},[51,18411,18412],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[51,18414,18415,18416,18419],{},"析构函数：主要作用在于对象",[254,18417,18418],{},"销毁前","系统自动调用，执行一些清理工作。",[40,18421,18422,18425],{},[254,18423,18424],{},"构造函数语法：",[91,18426,18427],{},"类名(){}",[48,18429,18430,18433,18436,18439,18442],{},[51,18431,18432],{},"构造函数，没有返回值也不写void",[51,18434,18435],{},"函数名称与类名相同",[51,18437,18438],{},"构造函数可以有参数，因此可以发生重载",[51,18440,18441],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[51,18443,18444,18445,534],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[91,18446,18447],{},"Person(){}",[40,18449,18450,13777,18453],{},[254,18451,18452],{},"析构函数语法：",[91,18454,18455],{},"~类名(){}",[48,18457,18458,18461,18464,18470],{},[51,18459,18460],{},"析构函数，没有返回值也不写void",[51,18462,18463],{},"函数名称与类名相同,在名称前加上符号  ~",[51,18465,18466,18467],{},"析构函数不可以有参数，因此",[254,18468,18469],{},"不可以发生重载",[51,18471,18472],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[85,18474,18476],{"className":87,"code":18475,"language":89,"meta":14,"style":14},"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",[91,18477,18478,18484,18488,18492,18497,18504,18508,18521,18525,18530,18537,18541,18554,18558,18562,18566,18570,18578,18582,18590,18594,18598,18606,18610,18615,18619,18626,18630,18643,18647,18655],{"__ignoreMap":14},[94,18479,18480,18482],{"class":96,"line":97},[94,18481,14676],{"class":100},[94,18483,15153],{"class":1944},[94,18485,18486],{"class":96,"line":15},[94,18487,1527],{"class":104},[94,18489,18490],{"class":96,"line":1160},[94,18491,14698],{"class":100},[94,18493,18494],{"class":96,"line":1175},[94,18495,18496],{"class":163},"    \u002F\u002F构造函数\n",[94,18498,18499,18502],{"class":96,"line":1181},[94,18500,18501],{"class":1944},"    Person",[94,18503,1957],{"class":104},[94,18505,18506],{"class":96,"line":1195},[94,18507,2011],{"class":104},[94,18509,18510,18512,18514,18517,18519],{"class":96,"line":1201},[94,18511,9651],{"class":104},[94,18513,1149],{"class":100},[94,18515,18516],{"class":209}," \"Person的构造函数调用\"",[94,18518,1425],{"class":100},[94,18520,8822],{"class":104},[94,18522,18523],{"class":96,"line":1292},[94,18524,2168],{"class":104},[94,18526,18527],{"class":96,"line":1298},[94,18528,18529],{"class":163},"    \u002F\u002F析构函数\n",[94,18531,18532,18535],{"class":96,"line":1310},[94,18533,18534],{"class":1944},"    ~Person",[94,18536,1957],{"class":104},[94,18538,18539],{"class":96,"line":1593},[94,18540,2011],{"class":104},[94,18542,18543,18545,18547,18550,18552],{"class":96,"line":1598},[94,18544,9651],{"class":104},[94,18546,1149],{"class":100},[94,18548,18549],{"class":209}," \"Person的析构函数调用\"",[94,18551,1425],{"class":100},[94,18553,8822],{"class":104},[94,18555,18556],{"class":96,"line":1604},[94,18557,2168],{"class":104},[94,18559,18560],{"class":96,"line":1609},[94,18561,2381],{"emptyLinePlaceholder":20},[94,18563,18564],{"class":96,"line":1623},[94,18565,3976],{"class":104},[94,18567,18568],{"class":96,"line":1628},[94,18569,2381],{"emptyLinePlaceholder":20},[94,18571,18572,18574,18576],{"class":96,"line":1634},[94,18573,5346],{"class":100},[94,18575,5570],{"class":1944},[94,18577,1957],{"class":104},[94,18579,18580],{"class":96,"line":1655},[94,18581,1527],{"class":104},[94,18583,18584,18587],{"class":96,"line":1660},[94,18585,18586],{"class":104},"    Person p;",[94,18588,18589],{"class":163},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[94,18591,18592],{"class":96,"line":1674},[94,18593,1546],{"class":104},[94,18595,18596],{"class":96,"line":1679},[94,18597,2381],{"emptyLinePlaceholder":20},[94,18599,18600,18602,18604],{"class":96,"line":1708},[94,18601,108],{"class":100},[94,18603,1954],{"class":1944},[94,18605,10835],{"class":104},[94,18607,18608],{"class":96,"line":1713},[94,18609,13192],{"class":104},[94,18611,18612],{"class":96,"line":1730},[94,18613,18614],{"class":163},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[94,18616,18617],{"class":96,"line":1735},[94,18618,2381],{"emptyLinePlaceholder":20},[94,18620,18621,18623],{"class":96,"line":1740},[94,18622,18586],{"class":104},[94,18624,18625],{"class":163},"\u002F\u002F只有构造函数\n",[94,18627,18628],{"class":96,"line":1745},[94,18629,2381],{"emptyLinePlaceholder":20},[94,18631,18632,18634,18636,18638,18640],{"class":96,"line":1759},[94,18633,2284],{"class":1944},[94,18635,105],{"class":104},[94,18637,2289],{"class":209},[94,18639,5948],{"class":104},[94,18641,18642],{"class":163},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[94,18644,18645],{"class":96,"line":1764},[94,18646,2381],{"emptyLinePlaceholder":20},[94,18648,18649,18651,18653],{"class":96,"line":2558},[94,18650,4071],{"class":100},[94,18652,4074],{"class":153},[94,18654,1271],{"class":104},[94,18656,18657],{"class":96,"line":2572},[94,18658,1546],{"class":104},[40,18660,18661],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[65,18663,18665],{"id":18664},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[40,18667,18668],{},"两种分类方式：",[40,18670,18671],{},"​\t按参数分为： 有参构造和无参构造",[40,18673,18674],{},"​\t按类型分为： 普通构造和拷贝构造",[40,18676,18677],{},"三种调用方式：",[40,18679,18680],{},"​\t括号法",[40,18682,18683],{},"​\t显示法",[40,18685,18686],{},"​\t隐式转换法",[85,18688,18690],{"className":87,"code":18689,"language":89,"meta":14,"style":14},"#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",[91,18691,18692,18698,18708,18713,18718,18723,18728,18732,18740,18744,18748,18752,18758,18762,18775,18779,18791,18795,18804,18817,18821,18825,18831,18835,18848,18852,18857,18873,18877,18882,18891,18904,18908,18914,18918,18923,18931,18935,18940,18944,18952,18956,18961,18966,18971,18976,18981,18985,18990,18995,19000,19005,19009,19014,19019,19035,19047,19052,19056,19061,19066,19071,19075,19080,19094,19107,19111,19119,19123,19129,19135,19143],{"__ignoreMap":14},[94,18693,18694,18696],{"class":96,"line":97},[94,18695,1930],{"class":100},[94,18697,1933],{"class":209},[94,18699,18700,18702,18704,18706],{"class":96,"line":15},[94,18701,1938],{"class":100},[94,18703,1941],{"class":100},[94,18705,1945],{"class":1944},[94,18707,1271],{"class":104},[94,18709,18710],{"class":96,"line":1160},[94,18711,18712],{"class":163},"\u002F\u002F1.构造函数的分类及调用\n",[94,18714,18715],{"class":96,"line":1175},[94,18716,18717],{"class":163},"\u002F\u002F分类\n",[94,18719,18720],{"class":96,"line":1181},[94,18721,18722],{"class":163},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[94,18724,18725],{"class":96,"line":1195},[94,18726,18727],{"class":163},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[94,18729,18730],{"class":96,"line":1201},[94,18731,2381],{"emptyLinePlaceholder":20},[94,18733,18734,18736,18738],{"class":96,"line":1292},[94,18735,14676],{"class":100},[94,18737,15551],{"class":1944},[94,18739,2655],{"class":104},[94,18741,18742],{"class":96,"line":1298},[94,18743,1527],{"class":104},[94,18745,18746],{"class":96,"line":1310},[94,18747,14698],{"class":100},[94,18749,18750],{"class":96,"line":1593},[94,18751,18496],{"class":163},[94,18753,18754,18756],{"class":96,"line":1598},[94,18755,18501],{"class":1944},[94,18757,1957],{"class":104},[94,18759,18760],{"class":96,"line":1604},[94,18761,2011],{"class":104},[94,18763,18764,18766,18768,18771,18773],{"class":96,"line":1609},[94,18765,3432],{"class":104},[94,18767,1149],{"class":100},[94,18769,18770],{"class":209},"\"Person构造函数无参构造\"",[94,18772,1149],{"class":100},[94,18774,1172],{"class":104},[94,18776,18777],{"class":96,"line":1623},[94,18778,2168],{"class":104},[94,18780,18781,18783,18785,18787,18789],{"class":96,"line":1628},[94,18782,18501],{"class":1944},[94,18784,105],{"class":104},[94,18786,108],{"class":100},[94,18788,1379],{"class":5198},[94,18790,111],{"class":104},[94,18792,18793],{"class":96,"line":1634},[94,18794,2011],{"class":104},[94,18796,18797,18800,18802],{"class":96,"line":1655},[94,18798,18799],{"class":104},"        age",[94,18801,150],{"class":100},[94,18803,6179],{"class":104},[94,18805,18806,18808,18810,18813,18815],{"class":96,"line":1660},[94,18807,3432],{"class":104},[94,18809,1149],{"class":100},[94,18811,18812],{"class":209},"\"Person构造函数有参构造\"",[94,18814,1149],{"class":100},[94,18816,1172],{"class":104},[94,18818,18819],{"class":96,"line":1674},[94,18820,2168],{"class":104},[94,18822,18823],{"class":96,"line":1679},[94,18824,18529],{"class":163},[94,18826,18827,18829],{"class":96,"line":1708},[94,18828,18534],{"class":1944},[94,18830,1957],{"class":104},[94,18832,18833],{"class":96,"line":1713},[94,18834,2011],{"class":104},[94,18836,18837,18839,18841,18844,18846],{"class":96,"line":1730},[94,18838,3432],{"class":104},[94,18840,1149],{"class":100},[94,18842,18843],{"class":209},"\"Person析构函数被调用\"",[94,18845,1149],{"class":100},[94,18847,1172],{"class":104},[94,18849,18850],{"class":96,"line":1735},[94,18851,2168],{"class":104},[94,18853,18854],{"class":96,"line":1740},[94,18855,18856],{"class":163},"    \u002F\u002F拷贝构造函数\n",[94,18858,18859,18861,18863,18865,18867,18869,18871],{"class":96,"line":1745},[94,18860,18501],{"class":1944},[94,18862,105],{"class":104},[94,18864,6774],{"class":100},[94,18866,15551],{"class":1944},[94,18868,10566],{"class":100},[94,18870,40],{"class":5198},[94,18872,111],{"class":104},[94,18874,18875],{"class":96,"line":1759},[94,18876,2011],{"class":104},[94,18878,18879],{"class":96,"line":1764},[94,18880,18881],{"class":163},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[94,18883,18884,18886,18888],{"class":96,"line":2558},[94,18885,18799],{"class":104},[94,18887,150],{"class":100},[94,18889,18890],{"class":104},"p.age;\n",[94,18892,18893,18895,18897,18900,18902],{"class":96,"line":2572},[94,18894,3432],{"class":104},[94,18896,1149],{"class":100},[94,18898,18899],{"class":209},"\"Person拷贝构造函数被调用\"",[94,18901,1149],{"class":100},[94,18903,1172],{"class":104},[94,18905,18906],{"class":96,"line":2580},[94,18907,2168],{"class":104},[94,18909,18910,18912],{"class":96,"line":2585},[94,18911,1966],{"class":100},[94,18913,7779],{"class":104},[94,18915,18916],{"class":96,"line":2591},[94,18917,3976],{"class":104},[94,18919,18920],{"class":96,"line":2597},[94,18921,18922],{"class":163},"\u002F\u002F调用\n",[94,18924,18925,18927,18929],{"class":96,"line":2602},[94,18926,5346],{"class":100},[94,18928,5570],{"class":1944},[94,18930,1957],{"class":104},[94,18932,18933],{"class":96,"line":7930},[94,18934,1527],{"class":104},[94,18936,18937],{"class":96,"line":7954},[94,18938,18939],{"class":163},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[94,18941,18942],{"class":96,"line":7959},[94,18943,1546],{"class":104},[94,18945,18946,18948,18950],{"class":96,"line":7965},[94,18947,5346],{"class":100},[94,18949,5639],{"class":1944},[94,18951,1957],{"class":104},[94,18953,18954],{"class":96,"line":7992},[94,18955,1527],{"class":104},[94,18957,18958],{"class":96,"line":7997},[94,18959,18960],{"class":163},"    \u002F\u002F1.括号法\n",[94,18962,18963],{"class":96,"line":8003},[94,18964,18965],{"class":163},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[94,18967,18968],{"class":96,"line":8015},[94,18969,18970],{"class":163},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[94,18972,18973],{"class":96,"line":8027},[94,18974,18975],{"class":163},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[94,18977,18978],{"class":96,"line":8039},[94,18979,18980],{"class":163},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[94,18982,18983],{"class":96,"line":9698},[94,18984,2381],{"emptyLinePlaceholder":20},[94,18986,18987],{"class":96,"line":9723},[94,18988,18989],{"class":163},"    \u002F\u002F注意事项\n",[94,18991,18992],{"class":96,"line":9746},[94,18993,18994],{"class":163},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[94,18996,18997],{"class":96,"line":9770},[94,18998,18999],{"class":163},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[94,19001,19002],{"class":96,"line":9775},[94,19003,19004],{"class":163},"    \u002F\u002F Person p4();\n",[94,19006,19007],{"class":96,"line":9780},[94,19008,2381],{"emptyLinePlaceholder":20},[94,19010,19011],{"class":96,"line":9785},[94,19012,19013],{"class":163},"    \u002F\u002F2.显示法\n",[94,19015,19016],{"class":96,"line":9794},[94,19017,19018],{"class":104},"    Person p1;\n",[94,19020,19021,19024,19026,19029,19031,19033],{"class":96,"line":9799},[94,19022,19023],{"class":104},"    Person p2",[94,19025,150],{"class":100},[94,19027,19028],{"class":1944},"Person",[94,19030,105],{"class":104},[94,19032,551],{"class":153},[94,19034,2700],{"class":104},[94,19036,19037,19040,19042,19044],{"class":96,"line":9805},[94,19038,19039],{"class":104},"    Person p3",[94,19041,150],{"class":100},[94,19043,19028],{"class":1944},[94,19045,19046],{"class":104},"(p2);\n",[94,19048,19049],{"class":96,"line":9826},[94,19050,19051],{"class":163},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[94,19053,19054],{"class":96,"line":9832},[94,19055,2381],{"emptyLinePlaceholder":20},[94,19057,19058],{"class":96,"line":9846},[94,19059,19060],{"class":163},"    \u002F\u002F 注意事项2\n",[94,19062,19063],{"class":96,"line":9852},[94,19064,19065],{"class":163},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[94,19067,19068],{"class":96,"line":9879},[94,19069,19070],{"class":163},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[94,19072,19073],{"class":96,"line":9888},[94,19074,2381],{"emptyLinePlaceholder":20},[94,19076,19077],{"class":96,"line":9894},[94,19078,19079],{"class":163},"    \u002F\u002F3.隐士转换法\n",[94,19081,19082,19085,19087,19089,19091],{"class":96,"line":9902},[94,19083,19084],{"class":104},"    Person p4",[94,19086,150],{"class":100},[94,19088,551],{"class":153},[94,19090,160],{"class":104},[94,19092,19093],{"class":163},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[94,19095,19096,19099,19101,19104],{"class":96,"line":9907},[94,19097,19098],{"class":104},"    Person p5",[94,19100,150],{"class":100},[94,19102,19103],{"class":104},"p4;",[94,19105,19106],{"class":163}," \u002F\u002F 这里会调用拷贝构造函数\n",[94,19108,19109],{"class":96,"line":16586},[94,19110,1546],{"class":104},[94,19112,19113,19115,19117],{"class":96,"line":16592},[94,19114,108],{"class":100},[94,19116,1954],{"class":1944},[94,19118,1957],{"class":104},[94,19120,19121],{"class":96,"line":16615},[94,19122,1527],{"class":104},[94,19124,19125,19127],{"class":96,"line":16621},[94,19126,5615],{"class":1944},[94,19128,5618],{"class":104},[94,19130,19131,19133],{"class":96,"line":16644},[94,19132,5684],{"class":1944},[94,19134,5618],{"class":104},[94,19136,19137,19139,19141],{"class":96,"line":16658},[94,19138,4071],{"class":100},[94,19140,4074],{"class":153},[94,19142,1271],{"class":104},[94,19144,19145],{"class":96,"line":16678},[94,19146,1546],{"class":104},[40,19148,19149,19152],{},[254,19150,19151],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[65,19154,19156],{"id":19155},"_823拷贝构造函数","8.2.3拷贝构造函数",[40,19158,19159],{},"C++中拷贝构造函数调用时机通常有三种情况",[1112,19161,19162,19165,19168],{},[51,19163,19164],{},"使用一个已经创建完毕的对象来初始化一个新对象",[51,19166,19167],{},"值传递的方式给函数参数传值",[51,19169,19170],{},"以值方式返回局部对象",[85,19172,19174],{"className":87,"code":19173,"language":89,"meta":14,"style":14},"#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",[91,19175,19176,19182,19192,19196,19201,19205,19210,19215,19220,19226,19230,19234,19240,19244,19257,19261,19266,19278,19282,19290,19303,19307,19311,19327,19331,19340,19353,19357,19363,19367,19379,19383,19389,19393,19397,19405,19409,19422,19430,19448,19452,19457,19462,19477,19481,19494,19498,19506,19510,19514,19522,19526,19531,19540,19544,19548,19573,19583,19587,19595,19599,19610,19635,19639,19643,19647,19655,19659,19664,19669,19676,19681,19686,19691,19696,19700,19705,19709,19714,19718,19723,19728,19732,19736,19741,19746,19754],{"__ignoreMap":14},[94,19177,19178,19180],{"class":96,"line":97},[94,19179,1930],{"class":100},[94,19181,1933],{"class":209},[94,19183,19184,19186,19188,19190],{"class":96,"line":15},[94,19185,1938],{"class":100},[94,19187,1941],{"class":100},[94,19189,1945],{"class":1944},[94,19191,1271],{"class":104},[94,19193,19194],{"class":96,"line":1160},[94,19195,2381],{"emptyLinePlaceholder":20},[94,19197,19198],{"class":96,"line":1175},[94,19199,19200],{"class":163},"\u002F\u002F拷贝构造函数调用时机\n",[94,19202,19203],{"class":96,"line":1181},[94,19204,2381],{"emptyLinePlaceholder":20},[94,19206,19207],{"class":96,"line":1195},[94,19208,19209],{"class":163},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[94,19211,19212],{"class":96,"line":1201},[94,19213,19214],{"class":163},"\u002F\u002F2.值传递的方式给函数参数传值\n",[94,19216,19217],{"class":96,"line":1292},[94,19218,19219],{"class":163},"\u002F\u002F3.以值方式返回局部对象\n",[94,19221,19222,19224],{"class":96,"line":1298},[94,19223,14676],{"class":100},[94,19225,15153],{"class":1944},[94,19227,19228],{"class":96,"line":1310},[94,19229,1527],{"class":104},[94,19231,19232],{"class":96,"line":1593},[94,19233,14698],{"class":100},[94,19235,19236,19238],{"class":96,"line":1598},[94,19237,18501],{"class":1944},[94,19239,1957],{"class":104},[94,19241,19242],{"class":96,"line":1604},[94,19243,2011],{"class":104},[94,19245,19246,19248,19250,19253,19255],{"class":96,"line":1609},[94,19247,9651],{"class":104},[94,19249,1149],{"class":100},[94,19251,19252],{"class":209}," \"Person的默认构造函数调用\"",[94,19254,1425],{"class":100},[94,19256,8822],{"class":104},[94,19258,19259],{"class":96,"line":1623},[94,19260,2168],{"class":104},[94,19262,19263],{"class":96,"line":1628},[94,19264,19265],{"class":163},"    \u002F\u002F有参构造\n",[94,19267,19268,19270,19272,19274,19276],{"class":96,"line":1634},[94,19269,18501],{"class":1944},[94,19271,105],{"class":104},[94,19273,108],{"class":100},[94,19275,15671],{"class":5198},[94,19277,111],{"class":104},[94,19279,19280],{"class":96,"line":1655},[94,19281,2011],{"class":104},[94,19283,19284,19286,19288],{"class":96,"line":1660},[94,19285,15725],{"class":104},[94,19287,150],{"class":100},[94,19289,7779],{"class":104},[94,19291,19292,19294,19296,19299,19301],{"class":96,"line":1674},[94,19293,9651],{"class":104},[94,19295,1149],{"class":100},[94,19297,19298],{"class":209}," \"Person的有参构造函数调用\"",[94,19300,1425],{"class":100},[94,19302,8822],{"class":104},[94,19304,19305],{"class":96,"line":1679},[94,19306,2168],{"class":104},[94,19308,19309],{"class":96,"line":1708},[94,19310,18856],{"class":163},[94,19312,19313,19315,19317,19319,19321,19323,19325],{"class":96,"line":1713},[94,19314,18501],{"class":1944},[94,19316,105],{"class":104},[94,19318,6774],{"class":100},[94,19320,15551],{"class":1944},[94,19322,10566],{"class":100},[94,19324,40],{"class":5198},[94,19326,111],{"class":104},[94,19328,19329],{"class":96,"line":1730},[94,19330,2011],{"class":104},[94,19332,19333,19335,19337],{"class":96,"line":1735},[94,19334,15725],{"class":104},[94,19336,150],{"class":100},[94,19338,19339],{"class":104}," p.m_Age;\n",[94,19341,19342,19344,19346,19349,19351],{"class":96,"line":1740},[94,19343,9651],{"class":104},[94,19345,1149],{"class":100},[94,19347,19348],{"class":209}," \"Person的拷贝构造函数调用\"",[94,19350,1425],{"class":100},[94,19352,8822],{"class":104},[94,19354,19355],{"class":96,"line":1745},[94,19356,2168],{"class":104},[94,19358,19359,19361],{"class":96,"line":1759},[94,19360,18534],{"class":1944},[94,19362,1957],{"class":104},[94,19364,19365],{"class":96,"line":1764},[94,19366,2011],{"class":104},[94,19368,19369,19371,19373,19375,19377],{"class":96,"line":2558},[94,19370,9651],{"class":104},[94,19372,1149],{"class":100},[94,19374,18549],{"class":209},[94,19376,1425],{"class":100},[94,19378,8822],{"class":104},[94,19380,19381],{"class":96,"line":2572},[94,19382,2168],{"class":104},[94,19384,19385,19387],{"class":96,"line":2580},[94,19386,1966],{"class":100},[94,19388,15648],{"class":104},[94,19390,19391],{"class":96,"line":2585},[94,19392,3976],{"class":104},[94,19394,19395],{"class":96,"line":2591},[94,19396,19209],{"class":163},[94,19398,19399,19401,19403],{"class":96,"line":2597},[94,19400,5346],{"class":100},[94,19402,5570],{"class":1944},[94,19404,1957],{"class":104},[94,19406,19407],{"class":96,"line":2602},[94,19408,1527],{"class":104},[94,19410,19411,19414,19416,19418,19420],{"class":96,"line":7930},[94,19412,19413],{"class":104},"    Person ",[94,19415,7112],{"class":1944},[94,19417,105],{"class":104},[94,19419,805],{"class":153},[94,19421,2700],{"class":104},[94,19423,19424,19426,19428],{"class":96,"line":7954},[94,19425,19413],{"class":104},[94,19427,7015],{"class":1944},[94,19429,17497],{"class":104},[94,19431,19432,19434,19436,19439,19441,19444,19446],{"class":96,"line":7959},[94,19433,1532],{"class":104},[94,19435,1149],{"class":100},[94,19437,19438],{"class":209},"\"P2的年龄为：\"",[94,19440,1149],{"class":100},[94,19442,19443],{"class":104},"p2.m_Age",[94,19445,1149],{"class":100},[94,19447,1172],{"class":104},[94,19449,19450],{"class":96,"line":7965},[94,19451,1546],{"class":104},[94,19453,19454],{"class":96,"line":7992},[94,19455,19456],{"class":163},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[94,19458,19459],{"class":96,"line":7997},[94,19460,19461],{"class":163},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[94,19463,19464,19466,19469,19471,19473,19475],{"class":96,"line":8003},[94,19465,5346],{"class":100},[94,19467,19468],{"class":1944}," doWork",[94,19470,105],{"class":104},[94,19472,19028],{"class":1944},[94,19474,6807],{"class":5198},[94,19476,111],{"class":104},[94,19478,19479],{"class":96,"line":8015},[94,19480,1527],{"class":104},[94,19482,19483,19485,19487,19490,19492],{"class":96,"line":8027},[94,19484,6511],{"class":104},[94,19486,1149],{"class":100},[94,19488,19489],{"class":209}," \"doWork函数调用\"",[94,19491,1425],{"class":100},[94,19493,8822],{"class":104},[94,19495,19496],{"class":96,"line":8039},[94,19497,1546],{"class":104},[94,19499,19500,19502,19504],{"class":96,"line":9698},[94,19501,5346],{"class":100},[94,19503,5639],{"class":1944},[94,19505,1957],{"class":104},[94,19507,19508],{"class":96,"line":9723},[94,19509,1527],{"class":104},[94,19511,19512],{"class":96,"line":9746},[94,19513,15295],{"class":104},[94,19515,19516,19519],{"class":96,"line":9770},[94,19517,19518],{"class":1944},"    doWork",[94,19520,19521],{"class":104},"(p);\n",[94,19523,19524],{"class":96,"line":9775},[94,19525,1546],{"class":104},[94,19527,19528],{"class":96,"line":9780},[94,19529,19530],{"class":163},"\u002F\u002F 3.以值方式返回局部对象\n",[94,19532,19533,19535,19538],{"class":96,"line":9785},[94,19534,19028],{"class":1944},[94,19536,19537],{"class":1944}," doWork2",[94,19539,1957],{"class":104},[94,19541,19542],{"class":96,"line":9794},[94,19543,1527],{"class":104},[94,19545,19546],{"class":96,"line":9799},[94,19547,19018],{"class":104},[94,19549,19550,19552,19554,19556,19558,19560,19562,19564,19566,19568,19570],{"class":96,"line":9805},[94,19551,1532],{"class":104},[94,19553,1149],{"class":100},[94,19555,105],{"class":104},[94,19557,108],{"class":100},[94,19559,6500],{"class":100},[94,19561,534],{"class":104},[94,19563,458],{"class":100},[94,19565,7112],{"class":104},[94,19567,1149],{"class":100},[94,19569,1219],{"class":104},[94,19571,19572],{"class":163},"\u002F\u002F打印p1的地址\n",[94,19574,19575,19577,19580],{"class":96,"line":9826},[94,19576,4071],{"class":100},[94,19578,19579],{"class":104}," p1;",[94,19581,19582],{"class":163},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[94,19584,19585],{"class":96,"line":9832},[94,19586,1546],{"class":104},[94,19588,19589,19591,19593],{"class":96,"line":9846},[94,19590,5346],{"class":100},[94,19592,5711],{"class":1944},[94,19594,1957],{"class":104},[94,19596,19597],{"class":96,"line":9852},[94,19598,1527],{"class":104},[94,19600,19601,19604,19606,19608],{"class":96,"line":9879},[94,19602,19603],{"class":104},"    Person p ",[94,19605,150],{"class":100},[94,19607,19537],{"class":1944},[94,19609,5618],{"class":104},[94,19611,19612,19614,19616,19618,19620,19622,19624,19626,19628,19630,19632],{"class":96,"line":9888},[94,19613,1532],{"class":104},[94,19615,1149],{"class":100},[94,19617,105],{"class":104},[94,19619,108],{"class":100},[94,19621,6500],{"class":100},[94,19623,534],{"class":104},[94,19625,458],{"class":100},[94,19627,40],{"class":104},[94,19629,1149],{"class":100},[94,19631,1219],{"class":104},[94,19633,19634],{"class":163},"\u002F\u002F打印p的地址\n",[94,19636,19637],{"class":96,"line":9894},[94,19638,1546],{"class":104},[94,19640,19641],{"class":96,"line":9902},[94,19642,2381],{"emptyLinePlaceholder":20},[94,19644,19645],{"class":96,"line":9907},[94,19646,2381],{"emptyLinePlaceholder":20},[94,19648,19649,19651,19653],{"class":96,"line":16586},[94,19650,108],{"class":100},[94,19652,1954],{"class":1944},[94,19654,1957],{"class":104},[94,19656,19657],{"class":96,"line":16592},[94,19658,1527],{"class":104},[94,19660,19661],{"class":96,"line":16615},[94,19662,19663],{"class":163},"    \u002F\u002F test01();\n",[94,19665,19666],{"class":96,"line":16621},[94,19667,19668],{"class":163},"    \u002F\u002F test02();\n",[94,19670,19671,19674],{"class":96,"line":16644},[94,19672,19673],{"class":1944},"    test03",[94,19675,5618],{"class":104},[94,19677,19678],{"class":96,"line":16658},[94,19679,19680],{"class":163},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[94,19682,19683],{"class":96,"line":16678},[94,19684,19685],{"class":163},"\u002F\u002F 输出结果如下：\n",[94,19687,19688],{"class":96,"line":16684},[94,19689,19690],{"class":163},"\u002F\u002F Person的默认构造函数调用\n",[94,19692,19693],{"class":96,"line":16695},[94,19694,19695],{"class":163},"\u002F\u002F 0x7fffffffceec\n",[94,19697,19698],{"class":96,"line":16718},[94,19699,19695],{"class":163},[94,19701,19702],{"class":96,"line":16740},[94,19703,19704],{"class":163},"\u002F\u002F Person的析构函数调用\n",[94,19706,19707],{"class":96,"line":16745},[94,19708,2381],{"emptyLinePlaceholder":20},[94,19710,19711],{"class":96,"line":16751},[94,19712,19713],{"class":163},"\u002F\u002F 之前的输出结果如下：\n",[94,19715,19716],{"class":96,"line":16765},[94,19717,19690],{"class":163},[94,19719,19720],{"class":96,"line":16778},[94,19721,19722],{"class":163},"\u002F\u002F 地址\n",[94,19724,19725],{"class":96,"line":16783},[94,19726,19727],{"class":163},"\u002F\u002F Person的拷贝构造函数调用\n",[94,19729,19730],{"class":96,"line":16797},[94,19731,19704],{"class":163},[94,19733,19734],{"class":96,"line":16802},[94,19735,19722],{"class":163},[94,19737,19738],{"class":96,"line":16808},[94,19739,19740],{"class":163},"\u002F\u002F (这两次输出的地址也是不同的) \n",[94,19742,19743],{"class":96,"line":16813},[94,19744,19745],{"class":163},"\u002F\u002F Person的析构函数调用     \n",[94,19747,19748,19750,19752],{"class":96,"line":16827},[94,19749,4071],{"class":100},[94,19751,4074],{"class":153},[94,19753,1271],{"class":104},[94,19755,19756],{"class":96,"line":16832},[94,19757,1546],{"class":104},[40,19759,19760],{},"简化版理解",[85,19762,19764],{"className":87,"code":19763,"language":89,"meta":14,"style":14},"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",[91,19765,19766,19774,19778,19784,19797,19808,19812,19824,19837,19845,19849,19865,19878,19887,19891,19896,19902,19915,19919,19923,19930,19934,19938,19943,19951,19955,19971,19984,19997,20001,20006,20014,20018,20022,20027,20032,20048,20056,20063,20069,20073,20077,20082,20090,20094,20098,20121,20128,20132,20136,20144,20148,20158,20180,20184,20188,20192,20200,20204,20209,20214,20220,20224,20234,20238,20246],{"__ignoreMap":14},[94,19767,19768,19770,19772],{"class":96,"line":97},[94,19769,14676],{"class":100},[94,19771,15551],{"class":1944},[94,19773,15554],{"class":104},[94,19775,19776],{"class":96,"line":15},[94,19777,14698],{"class":100},[94,19779,19780,19782],{"class":96,"line":1160},[94,19781,18501],{"class":1944},[94,19783,10835],{"class":104},[94,19785,19786,19788,19790,19793,19795],{"class":96,"line":1175},[94,19787,9651],{"class":104},[94,19789,1149],{"class":100},[94,19791,19792],{"class":209}," \"无参构造函数!\"",[94,19794,1425],{"class":100},[94,19796,8822],{"class":104},[94,19798,19799,19802,19804,19806],{"class":96,"line":1181},[94,19800,19801],{"class":104},"        mAge ",[94,19803,150],{"class":100},[94,19805,4074],{"class":153},[94,19807,1271],{"class":104},[94,19809,19810],{"class":96,"line":1195},[94,19811,2168],{"class":104},[94,19813,19814,19816,19818,19820,19822],{"class":96,"line":1201},[94,19815,18501],{"class":1944},[94,19817,105],{"class":104},[94,19819,108],{"class":100},[94,19821,15671],{"class":5198},[94,19823,12424],{"class":104},[94,19825,19826,19828,19830,19833,19835],{"class":96,"line":1292},[94,19827,9651],{"class":104},[94,19829,1149],{"class":100},[94,19831,19832],{"class":209}," \"有参构造函数!\"",[94,19834,1425],{"class":100},[94,19836,8822],{"class":104},[94,19838,19839,19841,19843],{"class":96,"line":1298},[94,19840,19801],{"class":104},[94,19842,150],{"class":100},[94,19844,7779],{"class":104},[94,19846,19847],{"class":96,"line":1310},[94,19848,2168],{"class":104},[94,19850,19851,19853,19855,19857,19859,19861,19863],{"class":96,"line":1593},[94,19852,18501],{"class":1944},[94,19854,105],{"class":104},[94,19856,6774],{"class":100},[94,19858,15551],{"class":1944},[94,19860,458],{"class":100},[94,19862,6807],{"class":5198},[94,19864,12424],{"class":104},[94,19866,19867,19869,19871,19874,19876],{"class":96,"line":1598},[94,19868,9651],{"class":104},[94,19870,1149],{"class":100},[94,19872,19873],{"class":209}," \"拷贝构造函数!\"",[94,19875,1425],{"class":100},[94,19877,8822],{"class":104},[94,19879,19880,19882,19884],{"class":96,"line":1604},[94,19881,19801],{"class":104},[94,19883,150],{"class":100},[94,19885,19886],{"class":104}," p.mAge;\n",[94,19888,19889],{"class":96,"line":1609},[94,19890,2168],{"class":104},[94,19892,19893],{"class":96,"line":1623},[94,19894,19895],{"class":163},"    \u002F\u002F析构函数在释放内存之前调用\n",[94,19897,19898,19900],{"class":96,"line":1628},[94,19899,18534],{"class":1944},[94,19901,10835],{"class":104},[94,19903,19904,19906,19908,19911,19913],{"class":96,"line":1634},[94,19905,9651],{"class":104},[94,19907,1149],{"class":100},[94,19909,19910],{"class":209}," \"析构函数!\"",[94,19912,1425],{"class":100},[94,19914,8822],{"class":104},[94,19916,19917],{"class":96,"line":1655},[94,19918,2168],{"class":104},[94,19920,19921],{"class":96,"line":1660},[94,19922,14698],{"class":100},[94,19924,19925,19927],{"class":96,"line":1674},[94,19926,1966],{"class":100},[94,19928,19929],{"class":104}," mAge;\n",[94,19931,19932],{"class":96,"line":1679},[94,19933,3976],{"class":104},[94,19935,19936],{"class":96,"line":1708},[94,19937,2381],{"emptyLinePlaceholder":20},[94,19939,19940],{"class":96,"line":1713},[94,19941,19942],{"class":163},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[94,19944,19945,19947,19949],{"class":96,"line":1730},[94,19946,5346],{"class":100},[94,19948,5570],{"class":1944},[94,19950,10835],{"class":104},[94,19952,19953],{"class":96,"line":1735},[94,19954,2381],{"emptyLinePlaceholder":20},[94,19956,19957,19959,19962,19964,19966,19968],{"class":96,"line":1740},[94,19958,19413],{"class":104},[94,19960,19961],{"class":1944},"man",[94,19963,105],{"class":104},[94,19965,416],{"class":153},[94,19967,5948],{"class":104},[94,19969,19970],{"class":163}," \u002F\u002Fp对象已经创建完毕\n",[94,19972,19973,19975,19978,19981],{"class":96,"line":1745},[94,19974,19413],{"class":104},[94,19976,19977],{"class":1944},"newman",[94,19979,19980],{"class":104},"(man);",[94,19982,19983],{"class":163}," \u002F\u002F调用拷贝构造函数\n",[94,19985,19986,19989,19991,19994],{"class":96,"line":1759},[94,19987,19988],{"class":104},"    Person newman2 ",[94,19990,150],{"class":100},[94,19992,19993],{"class":104}," man;",[94,19995,19996],{"class":163}," \u002F\u002F拷贝构造\n",[94,19998,19999],{"class":96,"line":1764},[94,20000,2381],{"emptyLinePlaceholder":20},[94,20002,20003],{"class":96,"line":2558},[94,20004,20005],{"class":163},"    \u002F\u002FPerson newman3;\n",[94,20007,20008,20011],{"class":96,"line":2572},[94,20009,20010],{"class":163},"    \u002F\u002Fnewman3 = man;",[94,20012,20013],{"class":163}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[94,20015,20016],{"class":96,"line":2580},[94,20017,1546],{"class":104},[94,20019,20020],{"class":96,"line":2585},[94,20021,2381],{"emptyLinePlaceholder":20},[94,20023,20024],{"class":96,"line":2591},[94,20025,20026],{"class":163},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[94,20028,20029],{"class":96,"line":2597},[94,20030,20031],{"class":163},"\u002F\u002F相当于Person p1 = p;\n",[94,20033,20034,20036,20038,20040,20042,20045],{"class":96,"line":2602},[94,20035,5346],{"class":100},[94,20037,19468],{"class":1944},[94,20039,105],{"class":104},[94,20041,19028],{"class":1944},[94,20043,20044],{"class":5198}," p1",[94,20046,20047],{"class":104},") {}\n",[94,20049,20050,20052,20054],{"class":96,"line":7930},[94,20051,5346],{"class":100},[94,20053,5639],{"class":1944},[94,20055,10835],{"class":104},[94,20057,20058,20060],{"class":96,"line":7954},[94,20059,18586],{"class":104},[94,20061,20062],{"class":163}," \u002F\u002F无参构造函数\n",[94,20064,20065,20067],{"class":96,"line":7959},[94,20066,19518],{"class":1944},[94,20068,19521],{"class":104},[94,20070,20071],{"class":96,"line":7965},[94,20072,1546],{"class":104},[94,20074,20075],{"class":96,"line":7992},[94,20076,2381],{"emptyLinePlaceholder":20},[94,20078,20079],{"class":96,"line":7997},[94,20080,20081],{"class":163},"\u002F\u002F3. 以值方式返回局部对象\n",[94,20083,20084,20086,20088],{"class":96,"line":8003},[94,20085,19028],{"class":1944},[94,20087,19537],{"class":1944},[94,20089,1957],{"class":104},[94,20091,20092],{"class":96,"line":8015},[94,20093,1527],{"class":104},[94,20095,20096],{"class":96,"line":8027},[94,20097,19018],{"class":104},[94,20099,20100,20102,20104,20106,20108,20110,20112,20114,20117,20119],{"class":96,"line":8039},[94,20101,6511],{"class":104},[94,20103,1149],{"class":100},[94,20105,1639],{"class":104},[94,20107,108],{"class":100},[94,20109,6500],{"class":100},[94,20111,534],{"class":104},[94,20113,458],{"class":100},[94,20115,20116],{"class":104},"p1 ",[94,20118,1149],{"class":100},[94,20120,8822],{"class":104},[94,20122,20123,20125],{"class":96,"line":9698},[94,20124,4071],{"class":100},[94,20126,20127],{"class":104}," p1;\n",[94,20129,20130],{"class":96,"line":9723},[94,20131,1546],{"class":104},[94,20133,20134],{"class":96,"line":9746},[94,20135,2381],{"emptyLinePlaceholder":20},[94,20137,20138,20140,20142],{"class":96,"line":9770},[94,20139,5346],{"class":100},[94,20141,5711],{"class":1944},[94,20143,1957],{"class":104},[94,20145,20146],{"class":96,"line":9775},[94,20147,1527],{"class":104},[94,20149,20150,20152,20154,20156],{"class":96,"line":9780},[94,20151,19603],{"class":104},[94,20153,150],{"class":100},[94,20155,19537],{"class":1944},[94,20157,5618],{"class":104},[94,20159,20160,20162,20164,20166,20168,20170,20172,20174,20176,20178],{"class":96,"line":9785},[94,20161,6511],{"class":104},[94,20163,1149],{"class":100},[94,20165,1639],{"class":104},[94,20167,108],{"class":100},[94,20169,6500],{"class":100},[94,20171,534],{"class":104},[94,20173,458],{"class":100},[94,20175,11430],{"class":104},[94,20177,1149],{"class":100},[94,20179,8822],{"class":104},[94,20181,20182],{"class":96,"line":9794},[94,20183,1546],{"class":104},[94,20185,20186],{"class":96,"line":9799},[94,20187,2381],{"emptyLinePlaceholder":20},[94,20189,20190],{"class":96,"line":9805},[94,20191,2381],{"emptyLinePlaceholder":20},[94,20193,20194,20196,20198],{"class":96,"line":9826},[94,20195,108],{"class":100},[94,20197,1954],{"class":1944},[94,20199,10835],{"class":104},[94,20201,20202],{"class":96,"line":9832},[94,20203,2381],{"emptyLinePlaceholder":20},[94,20205,20206],{"class":96,"line":9846},[94,20207,20208],{"class":163},"    \u002F\u002Ftest01();\n",[94,20210,20211],{"class":96,"line":9852},[94,20212,20213],{"class":163},"    \u002F\u002Ftest02();\n",[94,20215,20216,20218],{"class":96,"line":9879},[94,20217,19673],{"class":1944},[94,20219,5618],{"class":104},[94,20221,20222],{"class":96,"line":9888},[94,20223,2381],{"emptyLinePlaceholder":20},[94,20225,20226,20228,20230,20232],{"class":96,"line":9894},[94,20227,2284],{"class":1944},[94,20229,105],{"class":104},[94,20231,2289],{"class":209},[94,20233,2700],{"class":104},[94,20235,20236],{"class":96,"line":9902},[94,20237,2381],{"emptyLinePlaceholder":20},[94,20239,20240,20242,20244],{"class":96,"line":9907},[94,20241,4071],{"class":100},[94,20243,4074],{"class":153},[94,20245,1271],{"class":104},[94,20247,20248],{"class":96,"line":16586},[94,20249,1546],{"class":104},[65,20251,20253],{"id":20252},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[40,20255,20256],{},"默认情况下，c++编译器至少给一个类添加3个函数",[40,20258,20259],{},"1．默认构造函数(无参，函数体为空)",[40,20261,20262],{},"2．默认析构函数(无参，函数体为空)",[40,20264,20265],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[40,20267,20268],{},"构造函数调用规则如下：",[1112,20270,20271,20274],{},[51,20272,20273],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[51,20275,20276],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[85,20278,20280],{"className":87,"code":20279,"language":89,"meta":14,"style":14},"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",[91,20281,20282,20290,20294,20299,20305,20317,20321,20326,20338,20347,20359,20363,20367,20383,20392,20404,20408,20412,20418,20430,20434,20438,20444,20448,20452,20460,20464,20476,20481,20489,20493,20511,20515,20519,20527,20531,20536,20544,20559,20572,20576,20581,20588,20604,20617,20621,20625,20633,20637,20643,20647,20657,20661,20669],{"__ignoreMap":14},[94,20283,20284,20286,20288],{"class":96,"line":97},[94,20285,14676],{"class":100},[94,20287,15551],{"class":1944},[94,20289,15554],{"class":104},[94,20291,20292],{"class":96,"line":15},[94,20293,14698],{"class":100},[94,20295,20296],{"class":96,"line":1160},[94,20297,20298],{"class":163},"    \u002F\u002F无参（默认）构造函数\n",[94,20300,20301,20303],{"class":96,"line":1175},[94,20302,18501],{"class":1944},[94,20304,10835],{"class":104},[94,20306,20307,20309,20311,20313,20315],{"class":96,"line":1181},[94,20308,9651],{"class":104},[94,20310,1149],{"class":100},[94,20312,19792],{"class":209},[94,20314,1425],{"class":100},[94,20316,8822],{"class":104},[94,20318,20319],{"class":96,"line":1195},[94,20320,2168],{"class":104},[94,20322,20323],{"class":96,"line":1201},[94,20324,20325],{"class":163},"    \u002F\u002F有参构造函数\n",[94,20327,20328,20330,20332,20334,20336],{"class":96,"line":1292},[94,20329,18501],{"class":1944},[94,20331,105],{"class":104},[94,20333,108],{"class":100},[94,20335,1379],{"class":5198},[94,20337,12424],{"class":104},[94,20339,20340,20343,20345],{"class":96,"line":1298},[94,20341,20342],{"class":104},"        age ",[94,20344,150],{"class":100},[94,20346,1413],{"class":104},[94,20348,20349,20351,20353,20355,20357],{"class":96,"line":1310},[94,20350,9651],{"class":104},[94,20352,1149],{"class":100},[94,20354,19832],{"class":209},[94,20356,1425],{"class":100},[94,20358,8822],{"class":104},[94,20360,20361],{"class":96,"line":1593},[94,20362,2168],{"class":104},[94,20364,20365],{"class":96,"line":1598},[94,20366,18856],{"class":163},[94,20368,20369,20371,20373,20375,20377,20379,20381],{"class":96,"line":1604},[94,20370,18501],{"class":1944},[94,20372,105],{"class":104},[94,20374,6774],{"class":100},[94,20376,15551],{"class":1944},[94,20378,458],{"class":100},[94,20380,6807],{"class":5198},[94,20382,12424],{"class":104},[94,20384,20385,20387,20389],{"class":96,"line":1609},[94,20386,20342],{"class":104},[94,20388,150],{"class":100},[94,20390,20391],{"class":104}," p.age;\n",[94,20393,20394,20396,20398,20400,20402],{"class":96,"line":1623},[94,20395,9651],{"class":104},[94,20397,1149],{"class":100},[94,20399,19873],{"class":209},[94,20401,1425],{"class":100},[94,20403,8822],{"class":104},[94,20405,20406],{"class":96,"line":1628},[94,20407,2168],{"class":104},[94,20409,20410],{"class":96,"line":1634},[94,20411,18529],{"class":163},[94,20413,20414,20416],{"class":96,"line":1655},[94,20415,18534],{"class":1944},[94,20417,10835],{"class":104},[94,20419,20420,20422,20424,20426,20428],{"class":96,"line":1660},[94,20421,9651],{"class":104},[94,20423,1149],{"class":100},[94,20425,19910],{"class":209},[94,20427,1425],{"class":100},[94,20429,8822],{"class":104},[94,20431,20432],{"class":96,"line":1674},[94,20433,2168],{"class":104},[94,20435,20436],{"class":96,"line":1679},[94,20437,14698],{"class":100},[94,20439,20440,20442],{"class":96,"line":1708},[94,20441,1966],{"class":100},[94,20443,7779],{"class":104},[94,20445,20446],{"class":96,"line":1713},[94,20447,3976],{"class":104},[94,20449,20450],{"class":96,"line":1730},[94,20451,2381],{"emptyLinePlaceholder":20},[94,20453,20454,20456,20458],{"class":96,"line":1735},[94,20455,5346],{"class":100},[94,20457,5570],{"class":1944},[94,20459,1957],{"class":104},[94,20461,20462],{"class":96,"line":1740},[94,20463,1527],{"class":104},[94,20465,20466,20468,20470,20472,20474],{"class":96,"line":1745},[94,20467,19413],{"class":104},[94,20469,7112],{"class":1944},[94,20471,105],{"class":104},[94,20473,755],{"class":153},[94,20475,2700],{"class":104},[94,20477,20478],{"class":96,"line":1759},[94,20479,20480],{"class":163},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[94,20482,20483,20485,20487],{"class":96,"line":1764},[94,20484,19413],{"class":104},[94,20486,7015],{"class":1944},[94,20488,17497],{"class":104},[94,20490,20491],{"class":96,"line":2558},[94,20492,2381],{"emptyLinePlaceholder":20},[94,20494,20495,20497,20499,20502,20504,20507,20509],{"class":96,"line":2572},[94,20496,6511],{"class":104},[94,20498,1149],{"class":100},[94,20500,20501],{"class":209}," \"p2的年龄为： \"",[94,20503,1425],{"class":100},[94,20505,20506],{"class":104}," p2.age ",[94,20508,1149],{"class":100},[94,20510,8822],{"class":104},[94,20512,20513],{"class":96,"line":2580},[94,20514,1546],{"class":104},[94,20516,20517],{"class":96,"line":2585},[94,20518,2381],{"emptyLinePlaceholder":20},[94,20520,20521,20523,20525],{"class":96,"line":2591},[94,20522,5346],{"class":100},[94,20524,5639],{"class":1944},[94,20526,1957],{"class":104},[94,20528,20529],{"class":96,"line":2597},[94,20530,1527],{"class":104},[94,20532,20533],{"class":96,"line":2602},[94,20534,20535],{"class":163},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[94,20537,20538,20541],{"class":96,"line":7930},[94,20539,20540],{"class":104},"    Person p1;",[94,20542,20543],{"class":163}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[94,20545,20546,20548,20550,20552,20554,20556],{"class":96,"line":7954},[94,20547,19413],{"class":104},[94,20549,7015],{"class":1944},[94,20551,105],{"class":104},[94,20553,551],{"class":153},[94,20555,5948],{"class":104},[94,20557,20558],{"class":163}," \u002F\u002F用户提供的有参\n",[94,20560,20561,20563,20566,20569],{"class":96,"line":7959},[94,20562,19413],{"class":104},[94,20564,20565],{"class":1944},"p3",[94,20567,20568],{"class":104},"(p2);",[94,20570,20571],{"class":163}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[94,20573,20574],{"class":96,"line":7965},[94,20575,2381],{"emptyLinePlaceholder":20},[94,20577,20578],{"class":96,"line":7992},[94,20579,20580],{"class":163},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[94,20582,20583,20586],{"class":96,"line":7997},[94,20584,20585],{"class":104},"    Person p4;",[94,20587,20543],{"class":163},[94,20589,20590,20592,20595,20597,20599,20601],{"class":96,"line":8003},[94,20591,19413],{"class":104},[94,20593,20594],{"class":1944},"p5",[94,20596,105],{"class":104},[94,20598,551],{"class":153},[94,20600,5948],{"class":104},[94,20602,20603],{"class":163}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[94,20605,20606,20608,20611,20614],{"class":96,"line":8015},[94,20607,19413],{"class":104},[94,20609,20610],{"class":1944},"p6",[94,20612,20613],{"class":104},"(p5);",[94,20615,20616],{"class":163}," \u002F\u002F用户自己提供拷贝构造\n",[94,20618,20619],{"class":96,"line":8027},[94,20620,1546],{"class":104},[94,20622,20623],{"class":96,"line":8039},[94,20624,2381],{"emptyLinePlaceholder":20},[94,20626,20627,20629,20631],{"class":96,"line":9698},[94,20628,108],{"class":100},[94,20630,1954],{"class":1944},[94,20632,10835],{"class":104},[94,20634,20635],{"class":96,"line":9723},[94,20636,2381],{"emptyLinePlaceholder":20},[94,20638,20639,20641],{"class":96,"line":9746},[94,20640,5615],{"class":1944},[94,20642,5618],{"class":104},[94,20644,20645],{"class":96,"line":9770},[94,20646,2381],{"emptyLinePlaceholder":20},[94,20648,20649,20651,20653,20655],{"class":96,"line":9775},[94,20650,2284],{"class":1944},[94,20652,105],{"class":104},[94,20654,2289],{"class":209},[94,20656,2700],{"class":104},[94,20658,20659],{"class":96,"line":9780},[94,20660,2381],{"emptyLinePlaceholder":20},[94,20662,20663,20665,20667],{"class":96,"line":9785},[94,20664,4071],{"class":100},[94,20666,4074],{"class":153},[94,20668,1271],{"class":104},[94,20670,20671],{"class":96,"line":9794},[94,20672,1546],{"class":104},[65,20674,20676],{"id":20675},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[40,20678,20679],{},"浅拷贝：简单的赋值拷贝操作",[40,20681,20682],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[85,20684,20686],{"className":87,"code":20685,"language":89,"meta":14,"style":14},"#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",[91,20687,20688,20694,20704,20710,20714,20718,20723,20729,20733,20746,20750,20754,20761,20765,20775,20790,20803,20807,20812,20817,20833,20837,20850,20855,20860,20865,20874,20879,20894,20898,20902,20906,20912,20916,20921,20936,20940,20951,20965,20969,20978,20982,20988,21000,21004,21012,21016,21033,21064,21072,21100,21104,21108,21116,21120,21126],{"__ignoreMap":14},[94,20689,20690,20692],{"class":96,"line":97},[94,20691,1930],{"class":100},[94,20693,1933],{"class":209},[94,20695,20696,20698,20700,20702],{"class":96,"line":15},[94,20697,1938],{"class":100},[94,20699,1941],{"class":100},[94,20701,1945],{"class":1944},[94,20703,1271],{"class":104},[94,20705,20706,20708],{"class":96,"line":1160},[94,20707,14676],{"class":100},[94,20709,15153],{"class":1944},[94,20711,20712],{"class":96,"line":1175},[94,20713,1527],{"class":104},[94,20715,20716],{"class":96,"line":1181},[94,20717,14698],{"class":100},[94,20719,20720],{"class":96,"line":1195},[94,20721,20722],{"class":163},"    \u002F\u002F默认构造函数\n",[94,20724,20725,20727],{"class":96,"line":1201},[94,20726,18501],{"class":1944},[94,20728,1957],{"class":104},[94,20730,20731],{"class":96,"line":1292},[94,20732,2011],{"class":104},[94,20734,20735,20737,20739,20742,20744],{"class":96,"line":1298},[94,20736,3432],{"class":104},[94,20738,1149],{"class":100},[94,20740,20741],{"class":209},"\"默认构造函数\"",[94,20743,1149],{"class":100},[94,20745,1172],{"class":104},[94,20747,20748],{"class":96,"line":1310},[94,20749,2168],{"class":104},[94,20751,20752],{"class":96,"line":1593},[94,20753,20325],{"class":163},[94,20755,20756,20758],{"class":96,"line":1598},[94,20757,18534],{"class":1944},[94,20759,20760],{"class":104},"(int age,int height)\n",[94,20762,20763],{"class":96,"line":1604},[94,20764,2011],{"class":104},[94,20766,20767,20770,20772],{"class":96,"line":1609},[94,20768,20769],{"class":104},"        m_Age",[94,20771,150],{"class":100},[94,20773,20774],{"class":104},"age;\n",[94,20776,20777,20780,20782,20784,20787],{"class":96,"line":1623},[94,20778,20779],{"class":104},"        m_Height",[94,20781,11699],{"class":100},[94,20783,2363],{"class":100},[94,20785,20786],{"class":104},"(height);",[94,20788,20789],{"class":163},"\u002F\u002F放到堆区\n",[94,20791,20792,20794,20796,20799,20801],{"class":96,"line":1628},[94,20793,3432],{"class":104},[94,20795,1149],{"class":100},[94,20797,20798],{"class":209},"\"有参构造函数\"",[94,20800,1149],{"class":100},[94,20802,1172],{"class":104},[94,20804,20805],{"class":96,"line":1634},[94,20806,2168],{"class":104},[94,20808,20809],{"class":96,"line":1655},[94,20810,20811],{"class":163},"    \u002F\u002F深拷贝解决上述问题\n",[94,20813,20814],{"class":96,"line":1660},[94,20815,20816],{"class":163},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[94,20818,20819,20821,20823,20825,20827,20829,20831],{"class":96,"line":1674},[94,20820,18501],{"class":1944},[94,20822,105],{"class":104},[94,20824,6774],{"class":100},[94,20826,15551],{"class":1944},[94,20828,10566],{"class":100},[94,20830,40],{"class":5198},[94,20832,111],{"class":104},[94,20834,20835],{"class":96,"line":1679},[94,20836,2011],{"class":104},[94,20838,20839,20841,20843,20846,20848],{"class":96,"line":1708},[94,20840,3432],{"class":104},[94,20842,1149],{"class":100},[94,20844,20845],{"class":209},"\"拷贝构造函数\"",[94,20847,1149],{"class":100},[94,20849,1172],{"class":104},[94,20851,20852],{"class":96,"line":1713},[94,20853,20854],{"class":163},"        \u002F\u002F编译器默认的写如下注释部分\n",[94,20856,20857],{"class":96,"line":1730},[94,20858,20859],{"class":163},"        \u002F\u002Fm_Age=p.m_Age;\n",[94,20861,20862],{"class":96,"line":1735},[94,20863,20864],{"class":163},"        \u002F\u002Fm_Height=p.m_Height;\n",[94,20866,20867,20869,20871],{"class":96,"line":1740},[94,20868,20769],{"class":104},[94,20870,150],{"class":100},[94,20872,20873],{"class":104},"p.m_Age;\n",[94,20875,20876],{"class":96,"line":1745},[94,20877,20878],{"class":163},"        \u002F\u002F深拷贝操作\n",[94,20880,20881,20883,20885,20887,20889,20891],{"class":96,"line":1759},[94,20882,20779],{"class":104},[94,20884,11699],{"class":100},[94,20886,2363],{"class":100},[94,20888,105],{"class":104},[94,20890,560],{"class":100},[94,20892,20893],{"class":104},"p.m_Height);\n",[94,20895,20896],{"class":96,"line":1764},[94,20897,2168],{"class":104},[94,20899,20900],{"class":96,"line":2558},[94,20901,2381],{"emptyLinePlaceholder":20},[94,20903,20904],{"class":96,"line":2572},[94,20905,18529],{"class":163},[94,20907,20908,20910],{"class":96,"line":2580},[94,20909,18534],{"class":1944},[94,20911,1957],{"class":104},[94,20913,20914],{"class":96,"line":2585},[94,20915,2011],{"class":104},[94,20917,20918],{"class":96,"line":2591},[94,20919,20920],{"class":163},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[94,20922,20923,20925,20928,20931,20934],{"class":96,"line":2597},[94,20924,2478],{"class":100},[94,20926,20927],{"class":104},"(m_Height ",[94,20929,20930],{"class":100},"!=",[94,20932,20933],{"class":153}," NULL",[94,20935,111],{"class":104},[94,20937,20938],{"class":96,"line":2602},[94,20939,2491],{"class":104},[94,20941,20942,20945,20948],{"class":96,"line":7930},[94,20943,20944],{"class":100},"            delete",[94,20946,20947],{"class":104}," m_Height;",[94,20949,20950],{"class":163}," \u002F\u002F释放堆区内存\n",[94,20952,20953,20956,20958,20960,20962],{"class":96,"line":7954},[94,20954,20955],{"class":104},"            m_Height",[94,20957,150],{"class":100},[94,20959,2373],{"class":153},[94,20961,160],{"class":104},[94,20963,20964],{"class":163}," \u002F\u002F防止野指针\n",[94,20966,20967],{"class":96,"line":7959},[94,20968,2510],{"class":104},[94,20970,20971,20973,20975],{"class":96,"line":7965},[94,20972,3432],{"class":104},[94,20974,1149],{"class":100},[94,20976,20977],{"class":209},"\"Person的析构函数调用\"\n",[94,20979,20980],{"class":96,"line":7992},[94,20981,2168],{"class":104},[94,20983,20984,20986],{"class":96,"line":7997},[94,20985,1966],{"class":100},[94,20987,15648],{"class":104},[94,20989,20990,20992,20994,20997],{"class":96,"line":8003},[94,20991,1966],{"class":100},[94,20993,6500],{"class":100},[94,20995,20996],{"class":104},"m_Height;",[94,20998,20999],{"class":163}," \u002F\u002F定义一个指针，指向身高\n",[94,21001,21002],{"class":96,"line":8015},[94,21003,3976],{"class":104},[94,21005,21006,21008,21010],{"class":96,"line":8027},[94,21007,5346],{"class":100},[94,21009,5570],{"class":1944},[94,21011,1957],{"class":104},[94,21013,21014],{"class":96,"line":8039},[94,21015,1527],{"class":104},[94,21017,21018,21020,21022,21024,21026,21028,21031],{"class":96,"line":9698},[94,21019,19413],{"class":104},[94,21021,7112],{"class":1944},[94,21023,105],{"class":104},[94,21025,755],{"class":153},[94,21027,483],{"class":104},[94,21029,21030],{"class":153},"160",[94,21032,2700],{"class":104},[94,21034,21035,21037,21039,21042,21044,21047,21049,21052,21054,21057,21059,21061],{"class":96,"line":9723},[94,21036,1532],{"class":104},[94,21038,1149],{"class":100},[94,21040,21041],{"class":209},"\"p1的年龄为:\"",[94,21043,1149],{"class":100},[94,21045,21046],{"class":104},"p1.m_Age",[94,21048,1149],{"class":100},[94,21050,21051],{"class":209},"\"身高为：\"",[94,21053,6401],{"class":100},[94,21055,21056],{"class":104},"p1.m_Height",[94,21058,1149],{"class":100},[94,21060,1219],{"class":104},[94,21062,21063],{"class":163},"  \u002F\u002F18\n",[94,21065,21066,21068,21070],{"class":96,"line":9746},[94,21067,19413],{"class":104},[94,21069,7015],{"class":1944},[94,21071,17497],{"class":104},[94,21073,21074,21076,21078,21081,21083,21085,21087,21089,21091,21094,21096,21098],{"class":96,"line":9770},[94,21075,1532],{"class":104},[94,21077,1149],{"class":100},[94,21079,21080],{"class":209},"\"p2的年龄为：\"",[94,21082,1149],{"class":100},[94,21084,19443],{"class":104},[94,21086,1149],{"class":100},[94,21088,21051],{"class":209},[94,21090,6401],{"class":100},[94,21092,21093],{"class":104},"p2.m_Height",[94,21095,1149],{"class":100},[94,21097,1219],{"class":104},[94,21099,21063],{"class":163},[94,21101,21102],{"class":96,"line":9775},[94,21103,13192],{"class":104},[94,21105,21106],{"class":96,"line":9780},[94,21107,1546],{"class":104},[94,21109,21110,21112,21114],{"class":96,"line":9785},[94,21111,108],{"class":100},[94,21113,1954],{"class":1944},[94,21115,1957],{"class":104},[94,21117,21118],{"class":96,"line":9794},[94,21119,1527],{"class":104},[94,21121,21122,21124],{"class":96,"line":9799},[94,21123,5615],{"class":1944},[94,21125,5618],{"class":104},[94,21127,21128],{"class":96,"line":9805},[94,21129,1546],{"class":104},[40,21131,21132],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[40,21134,21135],{},"浅拷贝带来的问题是堆区的内存重复释放",[40,21137,21138],{},[1443,21139],{"alt":14,"src":21140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[40,21142,21143],{},"浅拷贝问题要使用深拷贝来解决",[40,21145,21146],{},[1443,21147],{"alt":14,"src":21148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[40,21150,21151],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[65,21153,21155],{"id":21154},"_826初始化列表","8.2.6初始化列表",[40,21157,21158],{},"作用：初始化属性",[40,21160,5163],{},[85,21162,21165],{"className":21163,"code":21164,"language":5169},[5167],"构造函数():属性1(值1),属性2(值2).....{}\n",[91,21166,21164],{"__ignoreMap":14},[40,21168,21169],{},"例子",[85,21171,21173],{"className":87,"code":21172,"language":89,"meta":14,"style":14},"#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",[91,21174,21175,21181,21191,21197,21201,21206,21210,21215,21220,21225,21230,21235,21240,21244,21249,21254,21297,21306,21324,21342,21360,21364,21368,21375,21382,21389,21393,21397,21405,21409,21413,21433,21442,21446,21450,21460,21464,21472],{"__ignoreMap":14},[94,21176,21177,21179],{"class":96,"line":97},[94,21178,1930],{"class":100},[94,21180,1933],{"class":209},[94,21182,21183,21185,21187,21189],{"class":96,"line":15},[94,21184,1938],{"class":100},[94,21186,1941],{"class":100},[94,21188,1945],{"class":1944},[94,21190,1271],{"class":104},[94,21192,21193,21195],{"class":96,"line":1160},[94,21194,14676],{"class":100},[94,21196,15153],{"class":1944},[94,21198,21199],{"class":96,"line":1175},[94,21200,1527],{"class":104},[94,21202,21203],{"class":96,"line":1181},[94,21204,21205],{"class":100},"    public:\n",[94,21207,21208],{"class":96,"line":1195},[94,21209,2381],{"emptyLinePlaceholder":20},[94,21211,21212],{"class":96,"line":1201},[94,21213,21214],{"class":163},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[94,21216,21217],{"class":96,"line":1292},[94,21218,21219],{"class":163},"    \u002F\u002FPerson(int a, int b, int c) {\n",[94,21221,21222],{"class":96,"line":1298},[94,21223,21224],{"class":163},"    \u002F\u002F  m_A = a;\n",[94,21226,21227],{"class":96,"line":1310},[94,21228,21229],{"class":163},"    \u002F\u002F  m_B = b;\n",[94,21231,21232],{"class":96,"line":1593},[94,21233,21234],{"class":163},"    \u002F\u002F  m_C = c;\n",[94,21236,21237],{"class":96,"line":1598},[94,21238,21239],{"class":163},"    \u002F\u002F}\n",[94,21241,21242],{"class":96,"line":1604},[94,21243,2381],{"emptyLinePlaceholder":20},[94,21245,21246],{"class":96,"line":1609},[94,21247,21248],{"class":163},"    \u002F\u002F初始化列表方式初始化\n",[94,21250,21251],{"class":96,"line":1623},[94,21252,21253],{"class":163},"    \u002F\u002F使用有参构造函数\n",[94,21255,21256,21258,21260,21262,21264,21266,21268,21270,21272,21274,21276,21279,21282,21285,21288,21291,21294],{"class":96,"line":1628},[94,21257,18501],{"class":1944},[94,21259,105],{"class":104},[94,21261,108],{"class":100},[94,21263,1379],{"class":5198},[94,21265,12417],{"class":104},[94,21267,108],{"class":100},[94,21269,2814],{"class":5198},[94,21271,12417],{"class":104},[94,21273,108],{"class":100},[94,21275,2830],{"class":5198},[94,21277,21278],{"class":104},") :",[94,21280,21281],{"class":1944},"m_A",[94,21283,21284],{"class":104},"(a), ",[94,21286,21287],{"class":1944},"m_B",[94,21289,21290],{"class":104},"(b), ",[94,21292,21293],{"class":1944},"m_C",[94,21295,21296],{"class":104},"(c) {}\n",[94,21298,21299,21301,21304],{"class":96,"line":1634},[94,21300,14891],{"class":100},[94,21302,21303],{"class":1944}," PrintPerson",[94,21305,10835],{"class":104},[94,21307,21308,21310,21312,21315,21317,21320,21322],{"class":96,"line":1655},[94,21309,9651],{"class":104},[94,21311,1149],{"class":100},[94,21313,21314],{"class":209}," \"mA:\"",[94,21316,1425],{"class":100},[94,21318,21319],{"class":104}," m_A ",[94,21321,1149],{"class":100},[94,21323,8822],{"class":104},[94,21325,21326,21328,21330,21333,21335,21338,21340],{"class":96,"line":1660},[94,21327,9651],{"class":104},[94,21329,1149],{"class":100},[94,21331,21332],{"class":209}," \"mB:\"",[94,21334,1425],{"class":100},[94,21336,21337],{"class":104}," m_B ",[94,21339,1149],{"class":100},[94,21341,8822],{"class":104},[94,21343,21344,21346,21348,21351,21353,21356,21358],{"class":96,"line":1674},[94,21345,9651],{"class":104},[94,21347,1149],{"class":100},[94,21349,21350],{"class":209}," \"mC:\"",[94,21352,1425],{"class":100},[94,21354,21355],{"class":104}," m_C ",[94,21357,1149],{"class":100},[94,21359,8822],{"class":104},[94,21361,21362],{"class":96,"line":1679},[94,21363,2168],{"class":104},[94,21365,21366],{"class":96,"line":1708},[94,21367,15204],{"class":100},[94,21369,21370,21372],{"class":96,"line":1713},[94,21371,1966],{"class":100},[94,21373,21374],{"class":104}," m_A;\n",[94,21376,21377,21379],{"class":96,"line":1730},[94,21378,1966],{"class":100},[94,21380,21381],{"class":104}," m_B;\n",[94,21383,21384,21386],{"class":96,"line":1735},[94,21385,1966],{"class":100},[94,21387,21388],{"class":104}," m_C;\n",[94,21390,21391],{"class":96,"line":1740},[94,21392,3976],{"class":104},[94,21394,21395],{"class":96,"line":1745},[94,21396,2381],{"emptyLinePlaceholder":20},[94,21398,21399,21401,21403],{"class":96,"line":1759},[94,21400,108],{"class":100},[94,21402,1954],{"class":1944},[94,21404,5960],{"class":104},[94,21406,21407],{"class":96,"line":1764},[94,21408,1527],{"class":104},[94,21410,21411],{"class":96,"line":2558},[94,21412,2381],{"emptyLinePlaceholder":20},[94,21414,21415,21417,21419,21421,21423,21425,21427,21429,21431],{"class":96,"line":2572},[94,21416,19413],{"class":104},[94,21418,40],{"class":1944},[94,21420,105],{"class":104},[94,21422,322],{"class":153},[94,21424,12417],{"class":104},[94,21426,182],{"class":153},[94,21428,12417],{"class":104},[94,21430,176],{"class":153},[94,21432,2700],{"class":104},[94,21434,21435,21437,21440],{"class":96,"line":2580},[94,21436,15848],{"class":104},[94,21438,21439],{"class":1944},"PrintPerson",[94,21441,5618],{"class":104},[94,21443,21444],{"class":96,"line":2585},[94,21445,2381],{"emptyLinePlaceholder":20},[94,21447,21448],{"class":96,"line":2591},[94,21449,2381],{"emptyLinePlaceholder":20},[94,21451,21452,21454,21456,21458],{"class":96,"line":2597},[94,21453,2284],{"class":1944},[94,21455,105],{"class":104},[94,21457,2289],{"class":209},[94,21459,2700],{"class":104},[94,21461,21462],{"class":96,"line":2602},[94,21463,2381],{"emptyLinePlaceholder":20},[94,21465,21466,21468,21470],{"class":96,"line":7930},[94,21467,4071],{"class":100},[94,21469,4074],{"class":153},[94,21471,1271],{"class":104},[94,21473,21474],{"class":96,"line":7954},[94,21475,1546],{"class":104},[40,21477,21478,21479,21482,21483],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[254,21480,21481],{},"参数名就是定义的对象属性","，",[254,21484,21485],{},"属性后面的值为有参构造函数的形参",[85,21487,21489],{"className":87,"code":21488,"language":89,"meta":14,"style":14},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[91,21490,21491],{"__ignoreMap":14},[94,21492,21493,21495,21497,21499,21502,21504,21507,21509,21512,21514,21517,21519,21522,21524],{"class":96,"line":97},[94,21494,19028],{"class":1944},[94,21496,105],{"class":104},[94,21498,108],{"class":100},[94,21500,21501],{"class":104}," a.",[94,21503,108],{"class":100},[94,21505,21506],{"class":104}," b,",[94,21508,108],{"class":100},[94,21510,21511],{"class":104}," b):",[94,21513,21281],{"class":1944},[94,21515,21516],{"class":104},"(a),",[94,21518,21287],{"class":1944},[94,21520,21521],{"class":104},"(c),",[94,21523,21293],{"class":1944},[94,21525,21526],{"class":104},"(b) {}\n",[65,21528,21530],{"id":21529},"_827类对象作为类成员","8.2.7类对象作为类成员",[40,21532,21533],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[40,21535,14615],{},[85,21537,21539],{"className":87,"code":21538,"language":89,"meta":14,"style":14},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[91,21540,21541,21546,21551,21555,21560,21564],{"__ignoreMap":14},[94,21542,21543],{"class":96,"line":97},[94,21544,21545],{"class":104},"A{};\n",[94,21547,21548],{"class":96,"line":15},[94,21549,21550],{"class":104},"B\n",[94,21552,21553],{"class":96,"line":1160},[94,21554,1527],{"class":104},[94,21556,21557],{"class":96,"line":1175},[94,21558,21559],{"class":104},"    A a;\n",[94,21561,21562],{"class":96,"line":1181},[94,21563,1546],{"class":104},[94,21565,21566],{"class":96,"line":1195},[94,21567,21568],{"class":163},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[40,21570,21571],{},"案例",[85,21573,21575],{"className":87,"code":21574,"language":89,"meta":14,"style":14},"\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",[91,21576,21577,21582,21589,21593,21598,21603,21617,21621,21631,21642,21646,21653,21657,21670,21674,21679,21684,21688,21694,21698,21702,21706,21737,21741,21752,21756,21762,21766,21779,21783,21787,21791,21796,21801,21805,21813,21817,21834,21853,21857,21865,21869,21875],{"__ignoreMap":14},[94,21578,21579],{"class":96,"line":97},[94,21580,21581],{"class":163},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[94,21583,21584,21586],{"class":96,"line":15},[94,21585,14676],{"class":100},[94,21587,21588],{"class":1944}," Phone\n",[94,21590,21591],{"class":96,"line":1160},[94,21592,1527],{"class":104},[94,21594,21595],{"class":96,"line":1175},[94,21596,21597],{"class":104},"public：\n",[94,21599,21600],{"class":96,"line":1181},[94,21601,21602],{"class":163},"    \u002F\u002F 赋值(构造函数)\n",[94,21604,21605,21608,21610,21612,21615],{"class":96,"line":1195},[94,21606,21607],{"class":1944},"    Phone",[94,21609,105],{"class":104},[94,21611,14899],{"class":1944},[94,21613,21614],{"class":5198}," pName",[94,21616,111],{"class":104},[94,21618,21619],{"class":96,"line":1201},[94,21620,2011],{"class":104},[94,21622,21623,21626,21628],{"class":96,"line":1292},[94,21624,21625],{"class":104},"        m_pName",[94,21627,150],{"class":100},[94,21629,21630],{"class":104},"pName;\n",[94,21632,21633,21635,21637,21640],{"class":96,"line":1298},[94,21634,3432],{"class":104},[94,21636,1149],{"class":100},[94,21638,21639],{"class":209},"\"Phone的构造函数调用\"",[94,21641,1271],{"class":104},[94,21643,21644],{"class":96,"line":1310},[94,21645,2168],{"class":104},[94,21647,21648,21651],{"class":96,"line":1593},[94,21649,21650],{"class":1944},"    ~Phone",[94,21652,1957],{"class":104},[94,21654,21655],{"class":96,"line":1598},[94,21656,2011],{"class":104},[94,21658,21659,21661,21663,21666,21668],{"class":96,"line":1604},[94,21660,3432],{"class":104},[94,21662,1149],{"class":100},[94,21664,21665],{"class":209},"\"Phone析构函数调用\"",[94,21667,1149],{"class":100},[94,21669,1172],{"class":104},[94,21671,21672],{"class":96,"line":1609},[94,21673,2168],{"class":104},[94,21675,21676],{"class":96,"line":1623},[94,21677,21678],{"class":163},"    \u002F\u002F\n",[94,21680,21681],{"class":96,"line":1628},[94,21682,21683],{"class":104},"    string m_PName;\n",[94,21685,21686],{"class":96,"line":1634},[94,21687,3976],{"class":104},[94,21689,21690,21692],{"class":96,"line":1655},[94,21691,14676],{"class":100},[94,21693,15153],{"class":1944},[94,21695,21696],{"class":96,"line":1660},[94,21697,1527],{"class":104},[94,21699,21700],{"class":96,"line":1674},[94,21701,14698],{"class":100},[94,21703,21704],{"class":96,"line":1679},[94,21705,16976],{"class":163},[94,21707,21708,21710,21712,21714,21716,21718,21720,21723,21726,21728,21731,21734],{"class":96,"line":1708},[94,21709,18501],{"class":1944},[94,21711,105],{"class":104},[94,21713,14899],{"class":1944},[94,21715,14902],{"class":5198},[94,21717,483],{"class":104},[94,21719,14899],{"class":1944},[94,21721,21722],{"class":5198}," pname",[94,21724,21725],{"class":104},"):",[94,21727,14992],{"class":1944},[94,21729,21730],{"class":104},"(name),m_phone.",[94,21732,21733],{"class":1944},"m_PName",[94,21735,21736],{"class":104},"(pname) \n",[94,21738,21739],{"class":96,"line":1713},[94,21740,2011],{"class":104},[94,21742,21743,21745,21747,21750],{"class":96,"line":1730},[94,21744,3432],{"class":104},[94,21746,1149],{"class":100},[94,21748,21749],{"class":209},"\"Person的构造函数调用\"",[94,21751,1271],{"class":104},[94,21753,21754],{"class":96,"line":1735},[94,21755,2168],{"class":104},[94,21757,21758,21760],{"class":96,"line":1740},[94,21759,18534],{"class":1944},[94,21761,1957],{"class":104},[94,21763,21764],{"class":96,"line":1745},[94,21765,2011],{"class":104},[94,21767,21768,21770,21772,21775,21777],{"class":96,"line":1759},[94,21769,3432],{"class":104},[94,21771,1149],{"class":100},[94,21773,21774],{"class":209},"\"Person析构函数调用\"",[94,21776,1149],{"class":100},[94,21778,1172],{"class":104},[94,21780,21781],{"class":96,"line":1764},[94,21782,2168],{"class":104},[94,21784,21785],{"class":96,"line":2558},[94,21786,7762],{"class":163},[94,21788,21789],{"class":96,"line":2572},[94,21790,14874],{"class":104},[94,21792,21793],{"class":96,"line":2580},[94,21794,21795],{"class":163},"    \u002F\u002F手机\n",[94,21797,21798],{"class":96,"line":2585},[94,21799,21800],{"class":104},"    Phone m_Phone;\n",[94,21802,21803],{"class":96,"line":2591},[94,21804,3976],{"class":104},[94,21806,21807,21809,21811],{"class":96,"line":2597},[94,21808,5346],{"class":100},[94,21810,5570],{"class":1944},[94,21812,1957],{"class":104},[94,21814,21815],{"class":96,"line":2602},[94,21816,1527],{"class":104},[94,21818,21819,21821,21823,21825,21827,21829,21832],{"class":96,"line":7930},[94,21820,19413],{"class":104},[94,21822,40],{"class":1944},[94,21824,105],{"class":104},[94,21826,7898],{"class":209},[94,21828,483],{"class":104},[94,21830,21831],{"class":209},"\"安卓\"",[94,21833,2700],{"class":104},[94,21835,21836,21838,21840,21843,21845,21848,21850],{"class":96,"line":7954},[94,21837,1532],{"class":104},[94,21839,1149],{"class":100},[94,21841,21842],{"class":104},"p.Name",[94,21844,1149],{"class":100},[94,21846,21847],{"class":209},"\"拿着：\"",[94,21849,1149],{"class":100},[94,21851,21852],{"class":104},"p.m_phone.m_PName;\n",[94,21854,21855],{"class":96,"line":7959},[94,21856,1546],{"class":104},[94,21858,21859,21861,21863],{"class":96,"line":7965},[94,21860,108],{"class":100},[94,21862,1954],{"class":1944},[94,21864,1957],{"class":104},[94,21866,21867],{"class":96,"line":7992},[94,21868,1527],{"class":104},[94,21870,21871,21873],{"class":96,"line":7997},[94,21872,5615],{"class":1944},[94,21874,5618],{"class":104},[94,21876,21877],{"class":96,"line":8003},[94,21878,1546],{"class":104},[40,21880,9007],{},[85,21882,21884],{"className":87,"code":21883,"language":89,"meta":14,"style":14},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[91,21885,21886,21891],{"__ignoreMap":14},[94,21887,21888],{"class":96,"line":97},[94,21889,21890],{"class":163},"    \u002F\u002F不需要写这个：\n",[94,21892,21893],{"class":96,"line":15},[94,21894,21895],{"class":163},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[40,21897,21898],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[85,21900,21902],{"className":87,"code":21901,"language":89,"meta":14,"style":14},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[91,21903,21904],{"__ignoreMap":14},[94,21905,21906,21908,21911,21913,21916,21919],{"class":96,"line":97},[94,21907,19028],{"class":1944},[94,21909,21910],{"class":104},"(string name.string pname):",[94,21912,14992],{"class":1944},[94,21914,21915],{"class":104},"(name),",[94,21917,21918],{"class":1944},"m_phone",[94,21920,21921],{"class":104},"(pname) {}\n",[40,21923,21924,21925,150,21928],{},"采用的是隐式转换法，实际为如下：\n",[91,21926,21927],{},"m_phone(pname)",[91,21929,21930],{},"Phone m_phone=pname",[40,21932,21933,21936],{},[254,21934,21935],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[40,21938,21939],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[65,21941,21943],{"id":21942},"_828静态对象","8.2.8静态对象",[40,21945,21946],{},"静态对象在成员对象前static，称为静态对象",[40,21948,21949],{},"静态对象分为两类：",[48,21951,21952],{},[51,21953,21954],{},"静态成员变量",[1112,21956,21957,21960,21963],{},[51,21958,21959],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[51,21961,21962],{},"②在编译阶段分配内存",[51,21964,21965],{},"③类内声明，类外初始化",[48,21967,21968],{"start":15},[51,21969,21970],{},"静态成员函数",[1112,21972,21973,21976],{},[51,21974,21975],{},"①所有对象共享同一个函数",[51,21977,21978],{},"②静态成员函数只能访问静态成员变量",[21980,21981,21983],"h4",{"id":21982},"_8281静态成员变量","8.2.8.1静态成员变量",[85,21985,21987],{"className":87,"code":21986,"language":89,"meta":14,"style":14},"#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",[91,21988,21989,21995,22005,22011,22015,22019,22024,22029,22034,22042,22046,22050,22054,22062,22066,22070,22075,22088,22092,22100,22104,22110],{"__ignoreMap":14},[94,21990,21991,21993],{"class":96,"line":97},[94,21992,1930],{"class":100},[94,21994,1933],{"class":209},[94,21996,21997,21999,22001,22003],{"class":96,"line":15},[94,21998,1938],{"class":100},[94,22000,1941],{"class":100},[94,22002,1945],{"class":1944},[94,22004,1271],{"class":104},[94,22006,22007,22009],{"class":96,"line":1160},[94,22008,14676],{"class":100},[94,22010,15153],{"class":1944},[94,22012,22013],{"class":96,"line":1175},[94,22014,1527],{"class":104},[94,22016,22017],{"class":96,"line":1181},[94,22018,14698],{"class":100},[94,22020,22021],{"class":96,"line":1195},[94,22022,22023],{"class":163},"    \u002F\u002F非静态成员变量\n",[94,22025,22026],{"class":96,"line":1201},[94,22027,22028],{"class":163},"    \u002F\u002F int m_A;\n",[94,22030,22031],{"class":96,"line":1292},[94,22032,22033],{"class":163},"    \u002F\u002F定义静态成员变量\n",[94,22035,22036,22038,22040],{"class":96,"line":1298},[94,22037,11002],{"class":100},[94,22039,2363],{"class":100},[94,22041,21374],{"class":104},[94,22043,22044],{"class":96,"line":1310},[94,22045,2381],{"emptyLinePlaceholder":20},[94,22047,22048],{"class":96,"line":1593},[94,22049,2381],{"emptyLinePlaceholder":20},[94,22051,22052],{"class":96,"line":1598},[94,22053,3976],{"class":104},[94,22055,22056,22058,22060],{"class":96,"line":1604},[94,22057,5346],{"class":100},[94,22059,5570],{"class":1944},[94,22061,1957],{"class":104},[94,22063,22064],{"class":96,"line":1609},[94,22065,1527],{"class":104},[94,22067,22068],{"class":96,"line":1623},[94,22069,15295],{"class":104},[94,22071,22072],{"class":96,"line":1628},[94,22073,22074],{"class":163},"    \u002F\u002F输出类成员变量这块内存\n",[94,22076,22077,22079,22081,22084,22086],{"class":96,"line":1634},[94,22078,1532],{"class":104},[94,22080,1149],{"class":100},[94,22082,22083],{"class":104},"p.m_A",[94,22085,1149],{"class":100},[94,22087,1172],{"class":104},[94,22089,22090],{"class":96,"line":1655},[94,22091,1546],{"class":104},[94,22093,22094,22096,22098],{"class":96,"line":1660},[94,22095,108],{"class":100},[94,22097,1954],{"class":1944},[94,22099,1957],{"class":104},[94,22101,22102],{"class":96,"line":1674},[94,22103,1527],{"class":104},[94,22105,22106,22108],{"class":96,"line":1679},[94,22107,5615],{"class":1944},[94,22109,1957],{"class":104},[94,22111,22112],{"class":96,"line":1708},[94,22113,1546],{"class":104},[40,22115,22116],{},"此时输出是报错的：无法解析外部命令",[40,22118,22119],{},"解决这一问题：必须用到类内声明，类外初始化操作",[85,22121,22123],{"className":87,"code":22122,"language":89,"meta":14,"style":14},"#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",[91,22124,22125,22131,22141,22147,22151,22155,22160,22168,22172,22177,22192,22200,22204,22208,22213,22218,22230,22235,22246,22251,22256,22269,22273,22281,22285,22291],{"__ignoreMap":14},[94,22126,22127,22129],{"class":96,"line":97},[94,22128,1930],{"class":100},[94,22130,1933],{"class":209},[94,22132,22133,22135,22137,22139],{"class":96,"line":15},[94,22134,1938],{"class":100},[94,22136,1941],{"class":100},[94,22138,1945],{"class":1944},[94,22140,1271],{"class":104},[94,22142,22143,22145],{"class":96,"line":1160},[94,22144,14676],{"class":100},[94,22146,15153],{"class":1944},[94,22148,22149],{"class":96,"line":1175},[94,22150,1527],{"class":104},[94,22152,22153],{"class":96,"line":1181},[94,22154,14698],{"class":100},[94,22156,22157],{"class":96,"line":1195},[94,22158,22159],{"class":163},"    \u002F\u002F类内声明\n",[94,22161,22162,22164,22166],{"class":96,"line":1201},[94,22163,11002],{"class":100},[94,22165,2363],{"class":100},[94,22167,21374],{"class":104},[94,22169,22170],{"class":96,"line":1292},[94,22171,3976],{"class":104},[94,22173,22174],{"class":96,"line":1298},[94,22175,22176],{"class":163},"\u002F\u002F类外初始化\n",[94,22178,22179,22181,22183,22186,22188,22190],{"class":96,"line":1310},[94,22180,108],{"class":100},[94,22182,15551],{"class":1944},[94,22184,22185],{"class":104},"::m_A",[94,22187,150],{"class":100},[94,22189,551],{"class":153},[94,22191,1271],{"class":104},[94,22193,22194,22196,22198],{"class":96,"line":1593},[94,22195,5346],{"class":100},[94,22197,5570],{"class":1944},[94,22199,1957],{"class":104},[94,22201,22202],{"class":96,"line":1598},[94,22203,1527],{"class":104},[94,22205,22206],{"class":96,"line":1604},[94,22207,15295],{"class":104},[94,22209,22210],{"class":96,"line":1609},[94,22211,22212],{"class":163},"    \u002F\u002F访问变量的原内存空间\n",[94,22214,22215],{"class":96,"line":1623},[94,22216,22217],{"class":163},"    \u002F\u002F100\n",[94,22219,22220,22222,22224,22226,22228],{"class":96,"line":1628},[94,22221,1532],{"class":104},[94,22223,1149],{"class":100},[94,22225,22083],{"class":104},[94,22227,1149],{"class":100},[94,22229,1172],{"class":104},[94,22231,22232],{"class":96,"line":1634},[94,22233,22234],{"class":104},"    Person p2;\n",[94,22236,22237,22240,22242,22244],{"class":96,"line":1655},[94,22238,22239],{"class":104},"    p2.m_A",[94,22241,150],{"class":100},[94,22243,1703],{"class":153},[94,22245,1271],{"class":104},[94,22247,22248],{"class":96,"line":1660},[94,22249,22250],{"class":163},"    \u002F\u002F继续访问这片空间\n",[94,22252,22253],{"class":96,"line":1674},[94,22254,22255],{"class":163},"    \u002F\u002F200\n",[94,22257,22258,22260,22262,22265,22267],{"class":96,"line":1679},[94,22259,1532],{"class":104},[94,22261,1149],{"class":100},[94,22263,22264],{"class":104},"p2.m_A",[94,22266,1149],{"class":100},[94,22268,1172],{"class":104},[94,22270,22271],{"class":96,"line":1708},[94,22272,1546],{"class":104},[94,22274,22275,22277,22279],{"class":96,"line":1713},[94,22276,108],{"class":100},[94,22278,1954],{"class":1944},[94,22280,1957],{"class":104},[94,22282,22283],{"class":96,"line":1730},[94,22284,1527],{"class":104},[94,22286,22287,22289],{"class":96,"line":1735},[94,22288,5615],{"class":1944},[94,22290,5618],{"class":104},[94,22292,22293],{"class":96,"line":1740},[94,22294,1546],{"class":104},[40,22296,22297],{},[254,22298,22299],{},"静态变量的访问",[85,22301,22303],{"className":87,"code":22302,"language":89,"meta":14,"style":14},"#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",[91,22304,22305,22311,22321,22327,22331,22335,22339,22347,22351,22356,22364,22368,22372,22386,22401,22409,22413,22418,22423,22428,22433,22445,22450,22455,22469,22486,22490,22498,22502,22508],{"__ignoreMap":14},[94,22306,22307,22309],{"class":96,"line":97},[94,22308,1930],{"class":100},[94,22310,1933],{"class":209},[94,22312,22313,22315,22317,22319],{"class":96,"line":15},[94,22314,1938],{"class":100},[94,22316,1941],{"class":100},[94,22318,1945],{"class":1944},[94,22320,1271],{"class":104},[94,22322,22323,22325],{"class":96,"line":1160},[94,22324,14676],{"class":100},[94,22326,15153],{"class":1944},[94,22328,22329],{"class":96,"line":1175},[94,22330,1527],{"class":104},[94,22332,22333],{"class":96,"line":1181},[94,22334,14698],{"class":100},[94,22336,22337],{"class":96,"line":1195},[94,22338,22159],{"class":163},[94,22340,22341,22343,22345],{"class":96,"line":1201},[94,22342,11002],{"class":100},[94,22344,2363],{"class":100},[94,22346,21374],{"class":104},[94,22348,22349],{"class":96,"line":1292},[94,22350,15204],{"class":100},[94,22352,22353],{"class":96,"line":1298},[94,22354,22355],{"class":163},"    \u002F\u002F静态成员变量也是有访问权限的\n",[94,22357,22358,22360,22362],{"class":96,"line":1310},[94,22359,11002],{"class":100},[94,22361,2363],{"class":100},[94,22363,21381],{"class":104},[94,22365,22366],{"class":96,"line":1593},[94,22367,3976],{"class":104},[94,22369,22370],{"class":96,"line":1598},[94,22371,22176],{"class":163},[94,22373,22374,22376,22378,22380,22382,22384],{"class":96,"line":1604},[94,22375,108],{"class":100},[94,22377,15551],{"class":1944},[94,22379,22185],{"class":104},[94,22381,150],{"class":100},[94,22383,551],{"class":153},[94,22385,1271],{"class":104},[94,22387,22388,22390,22392,22395,22397,22399],{"class":96,"line":1609},[94,22389,108],{"class":100},[94,22391,15551],{"class":1944},[94,22393,22394],{"class":104},"::m_B",[94,22396,150],{"class":100},[94,22398,805],{"class":153},[94,22400,1271],{"class":104},[94,22402,22403,22405,22407],{"class":96,"line":1623},[94,22404,5346],{"class":100},[94,22406,5639],{"class":1944},[94,22408,1957],{"class":104},[94,22410,22411],{"class":96,"line":1628},[94,22412,1527],{"class":104},[94,22414,22415],{"class":96,"line":1634},[94,22416,22417],{"class":163},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[94,22419,22420],{"class":96,"line":1655},[94,22421,22422],{"class":163},"    \u002F\u002F静态成员变量有两种访问方式：\n",[94,22424,22425],{"class":96,"line":1660},[94,22426,22427],{"class":163},"    \u002F\u002F1.通过对象进行访问\n",[94,22429,22430],{"class":96,"line":1674},[94,22431,22432],{"class":104},"    Person p;  \n",[94,22434,22435,22437,22439,22441,22443],{"class":96,"line":1679},[94,22436,1532],{"class":104},[94,22438,1149],{"class":100},[94,22440,22083],{"class":104},[94,22442,1149],{"class":100},[94,22444,1172],{"class":104},[94,22446,22447],{"class":96,"line":1708},[94,22448,22449],{"class":163},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[94,22451,22452],{"class":96,"line":1713},[94,22453,22454],{"class":163},"    \u002F\u002F2.通过类名进行访问\n",[94,22456,22457,22459,22461,22463,22465,22467],{"class":96,"line":1730},[94,22458,1532],{"class":104},[94,22460,1149],{"class":100},[94,22462,19028],{"class":1944},[94,22464,22185],{"class":104},[94,22466,1149],{"class":100},[94,22468,1172],{"class":104},[94,22470,22471,22473,22475,22477,22479,22481,22483],{"class":96,"line":1735},[94,22472,1532],{"class":104},[94,22474,1149],{"class":100},[94,22476,19028],{"class":1944},[94,22478,22394],{"class":104},[94,22480,1149],{"class":100},[94,22482,1219],{"class":104},[94,22484,22485],{"class":163}," \u002F\u002F没有访问权限，报错\n",[94,22487,22488],{"class":96,"line":1740},[94,22489,1546],{"class":104},[94,22491,22492,22494,22496],{"class":96,"line":1745},[94,22493,108],{"class":100},[94,22495,1954],{"class":1944},[94,22497,1957],{"class":104},[94,22499,22500],{"class":96,"line":1759},[94,22501,1527],{"class":104},[94,22503,22504,22506],{"class":96,"line":1764},[94,22505,5684],{"class":1944},[94,22507,5618],{"class":104},[94,22509,22510],{"class":96,"line":2558},[94,22511,1546],{"class":104},[21980,22513,22515],{"id":22514},"_8282静态成员函数","8.2.8.2静态成员函数",[40,22517,22518],{},"1.静态成员函数定义与访问",[85,22520,22522],{"className":87,"code":22521,"language":89,"meta":14,"style":14},"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",[91,22523,22524,22530,22534,22538,22543,22554,22558,22572,22576,22580,22588,22592,22597,22602,22606,22614,22619,22629],{"__ignoreMap":14},[94,22525,22526,22528],{"class":96,"line":97},[94,22527,14676],{"class":100},[94,22529,15153],{"class":1944},[94,22531,22532],{"class":96,"line":15},[94,22533,1527],{"class":104},[94,22535,22536],{"class":96,"line":1160},[94,22537,14698],{"class":100},[94,22539,22540],{"class":96,"line":1175},[94,22541,22542],{"class":163},"    \u002F\u002F在公共权限下定义静态成员函数\n",[94,22544,22545,22547,22550,22552],{"class":96,"line":1181},[94,22546,11002],{"class":100},[94,22548,22549],{"class":100}," void",[94,22551,11367],{"class":1944},[94,22553,1957],{"class":104},[94,22555,22556],{"class":96,"line":1195},[94,22557,2011],{"class":104},[94,22559,22560,22563,22565,22568,22570],{"class":96,"line":1201},[94,22561,22562],{"class":104},"        coout",[94,22564,1149],{"class":100},[94,22566,22567],{"class":209},"\"静态成员函数的调用\"",[94,22569,1149],{"class":100},[94,22571,1172],{"class":104},[94,22573,22574],{"class":96,"line":1292},[94,22575,2168],{"class":104},[94,22577,22578],{"class":96,"line":1298},[94,22579,3976],{"class":104},[94,22581,22582,22584,22586],{"class":96,"line":1310},[94,22583,5346],{"class":100},[94,22585,5570],{"class":1944},[94,22587,1957],{"class":104},[94,22589,22590],{"class":96,"line":1593},[94,22591,1527],{"class":104},[94,22593,22594],{"class":96,"line":1598},[94,22595,22596],{"class":163},"    \u002F\u002F静态成员函数的调用方式:\n",[94,22598,22599],{"class":96,"line":1604},[94,22600,22601],{"class":163},"    \u002F\u002F1.通过对象访问\n",[94,22603,22604],{"class":96,"line":1609},[94,22605,15295],{"class":104},[94,22607,22608,22610,22612],{"class":96,"line":1623},[94,22609,15848],{"class":104},[94,22611,11533],{"class":1944},[94,22613,5618],{"class":104},[94,22615,22616],{"class":96,"line":1628},[94,22617,22618],{"class":163},"    \u002F\u002F2.通过类名访问\n",[94,22620,22621,22623,22625,22627],{"class":96,"line":1634},[94,22622,18501],{"class":1944},[94,22624,17714],{"class":104},[94,22626,11533],{"class":1944},[94,22628,5618],{"class":104},[94,22630,22631],{"class":96,"line":1655},[94,22632,1546],{"class":104},[48,22634,22635],{"start":15},[51,22636,22637],{},"静态成员函数只能访问静态成员变量",[85,22639,22641],{"className":87,"code":22640,"language":89,"meta":14,"style":14},"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",[91,22642,22643,22649,22653,22657,22661,22671,22675,22689,22694,22706,22710,22721,22731,22735,22739,22743,22753,22757,22770,22774,22778,22782,22786,22800,22808,22812,22816,22820,22824,22832,22836,22846,22851,22855,22863,22867,22873],{"__ignoreMap":14},[94,22644,22645,22647],{"class":96,"line":97},[94,22646,14676],{"class":100},[94,22648,15153],{"class":1944},[94,22650,22651],{"class":96,"line":15},[94,22652,1527],{"class":104},[94,22654,22655],{"class":96,"line":1160},[94,22656,14698],{"class":100},[94,22658,22659],{"class":96,"line":1175},[94,22660,22542],{"class":163},[94,22662,22663,22665,22667,22669],{"class":96,"line":1181},[94,22664,11002],{"class":100},[94,22666,22549],{"class":100},[94,22668,11367],{"class":1944},[94,22670,1957],{"class":104},[94,22672,22673],{"class":96,"line":1195},[94,22674,2011],{"class":104},[94,22676,22677,22680,22682,22684,22686],{"class":96,"line":1201},[94,22678,22679],{"class":104},"        m_A",[94,22681,150],{"class":100},[94,22683,416],{"class":153},[94,22685,160],{"class":104},[94,22687,22688],{"class":163}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[94,22690,22691],{"class":96,"line":1292},[94,22692,22693],{"class":163},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[94,22695,22696,22698,22700,22702,22704],{"class":96,"line":1298},[94,22697,22562],{"class":104},[94,22699,1149],{"class":100},[94,22701,22567],{"class":209},[94,22703,1149],{"class":100},[94,22705,1172],{"class":104},[94,22707,22708],{"class":96,"line":1310},[94,22709,2168],{"class":104},[94,22711,22712,22714,22716,22718],{"class":96,"line":1593},[94,22713,11002],{"class":100},[94,22715,2363],{"class":100},[94,22717,15430],{"class":104},[94,22719,22720],{"class":163}," \u002F\u002F静态成员变量\n",[94,22722,22723,22725,22728],{"class":96,"line":1598},[94,22724,1966],{"class":100},[94,22726,22727],{"class":104}," m_B;",[94,22729,22730],{"class":163}," \u002F\u002F非静态成员变量\n",[94,22732,22733],{"class":96,"line":1604},[94,22734,2381],{"emptyLinePlaceholder":20},[94,22736,22737],{"class":96,"line":1609},[94,22738,15204],{"class":100},[94,22740,22741],{"class":96,"line":1623},[94,22742,22355],{"class":163},[94,22744,22745,22747,22749,22751],{"class":96,"line":1628},[94,22746,11002],{"class":100},[94,22748,22549],{"class":100},[94,22750,13600],{"class":1944},[94,22752,1957],{"class":104},[94,22754,22755],{"class":96,"line":1634},[94,22756,2011],{"class":104},[94,22758,22759,22761,22763,22766,22768],{"class":96,"line":1655},[94,22760,3432],{"class":104},[94,22762,1149],{"class":100},[94,22764,22765],{"class":209},"\"这是私有权限下的静态函数调用\"",[94,22767,1149],{"class":100},[94,22769,1172],{"class":104},[94,22771,22772],{"class":96,"line":1660},[94,22773,2168],{"class":104},[94,22775,22776],{"class":96,"line":1674},[94,22777,2381],{"emptyLinePlaceholder":20},[94,22779,22780],{"class":96,"line":1679},[94,22781,2381],{"emptyLinePlaceholder":20},[94,22783,22784],{"class":96,"line":1708},[94,22785,3976],{"class":104},[94,22787,22788,22790,22792,22794,22796,22798],{"class":96,"line":1713},[94,22789,108],{"class":100},[94,22791,15551],{"class":1944},[94,22793,22185],{"class":104},[94,22795,150],{"class":100},[94,22797,296],{"class":153},[94,22799,1271],{"class":104},[94,22801,22802,22804,22806],{"class":96,"line":1730},[94,22803,5346],{"class":100},[94,22805,5570],{"class":1944},[94,22807,1957],{"class":104},[94,22809,22810],{"class":96,"line":1735},[94,22811,1527],{"class":104},[94,22813,22814],{"class":96,"line":1740},[94,22815,22596],{"class":163},[94,22817,22818],{"class":96,"line":1745},[94,22819,22601],{"class":163},[94,22821,22822],{"class":96,"line":1759},[94,22823,15295],{"class":104},[94,22825,22826,22828,22830],{"class":96,"line":1764},[94,22827,15848],{"class":104},[94,22829,11533],{"class":1944},[94,22831,5618],{"class":104},[94,22833,22834],{"class":96,"line":2558},[94,22835,22618],{"class":163},[94,22837,22838,22840,22842,22844],{"class":96,"line":2572},[94,22839,18501],{"class":1944},[94,22841,17714],{"class":104},[94,22843,11533],{"class":1944},[94,22845,5618],{"class":104},[94,22847,22848],{"class":96,"line":2580},[94,22849,22850],{"class":163},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[94,22852,22853],{"class":96,"line":2585},[94,22854,1546],{"class":104},[94,22856,22857,22859,22861],{"class":96,"line":2591},[94,22858,108],{"class":100},[94,22860,1954],{"class":1944},[94,22862,1957],{"class":104},[94,22864,22865],{"class":96,"line":2597},[94,22866,1527],{"class":104},[94,22868,22869,22871],{"class":96,"line":2602},[94,22870,5615],{"class":1944},[94,22872,5618],{"class":104},[94,22874,22875],{"class":96,"line":7930},[94,22876,1546],{"class":104},[65,22878,22880],{"id":22879},"_83c对象模型和this指针","8.3C++对象模型和this指针",[21980,22882,22884],{"id":22883},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[40,22886,22887],{},"在c++中，类内的成员变量和成员函数分开存储",[40,22889,22890],{},"只有非静态成员变量才属于类的对象上",[22892,22893,22895],"h5",{"id":22894},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[85,22897,22899],{"className":87,"code":22898,"language":89,"meta":14,"style":14},"#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",[91,22900,22901,22908,22918,22924,22928,22932,22936,22944,22948,22952,22975,22979,22987,22991,22997],{"__ignoreMap":14},[94,22902,22903,22905],{"class":96,"line":97},[94,22904,1930],{"class":100},[94,22906,22907],{"class":209},"\u003Ciostraem>\n",[94,22909,22910,22912,22914,22916],{"class":96,"line":15},[94,22911,1938],{"class":100},[94,22913,1941],{"class":100},[94,22915,1945],{"class":1944},[94,22917,1271],{"class":104},[94,22919,22920,22922],{"class":96,"line":1160},[94,22921,14676],{"class":100},[94,22923,15153],{"class":1944},[94,22925,22926],{"class":96,"line":1175},[94,22927,1527],{"class":104},[94,22929,22930],{"class":96,"line":1181},[94,22931,2381],{"emptyLinePlaceholder":20},[94,22933,22934],{"class":96,"line":1195},[94,22935,3976],{"class":104},[94,22937,22938,22940,22942],{"class":96,"line":1201},[94,22939,5346],{"class":100},[94,22941,5570],{"class":1944},[94,22943,1957],{"class":104},[94,22945,22946],{"class":96,"line":1292},[94,22947,1527],{"class":104},[94,22949,22950],{"class":96,"line":1298},[94,22951,15295],{"class":104},[94,22953,22954,22956,22958,22961,22963,22966,22968,22970,22972],{"class":96,"line":1310},[94,22955,1532],{"class":104},[94,22957,1149],{"class":100},[94,22959,22960],{"class":209},"\"size of p=\"",[94,22962,1149],{"class":100},[94,22964,22965],{"class":1944},"sizeoif",[94,22967,6521],{"class":104},[94,22969,1149],{"class":100},[94,22971,1219],{"class":104},[94,22973,22974],{"class":163}," \u002F\u002F查看这个空类的占用的内存空间\n",[94,22976,22977],{"class":96,"line":1593},[94,22978,1546],{"class":104},[94,22980,22981,22983,22985],{"class":96,"line":1598},[94,22982,108],{"class":100},[94,22984,1954],{"class":1944},[94,22986,1957],{"class":104},[94,22988,22989],{"class":96,"line":1604},[94,22990,1527],{"class":104},[94,22992,22993,22995],{"class":96,"line":1609},[94,22994,5615],{"class":1944},[94,22996,5618],{"class":104},[94,22998,22999],{"class":96,"line":1623},[94,23000,1546],{"class":104},[40,23002,23003],{},"输出结果为：size of p=1",[40,23005,23006],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[40,23008,23009],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22892,23011,23013],{"id":23012},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[85,23015,23017],{"className":87,"code":23016,"language":89,"meta":14,"style":14},"#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",[91,23018,23019,23025,23035,23043,23047,23056,23060,23068,23072,23076,23095,23099,23103,23111,23115,23121],{"__ignoreMap":14},[94,23020,23021,23023],{"class":96,"line":97},[94,23022,1930],{"class":100},[94,23024,1933],{"class":209},[94,23026,23027,23029,23031,23033],{"class":96,"line":15},[94,23028,1938],{"class":100},[94,23030,1941],{"class":100},[94,23032,1945],{"class":1944},[94,23034,1271],{"class":104},[94,23036,23037,23039,23041],{"class":96,"line":1160},[94,23038,14676],{"class":100},[94,23040,15551],{"class":1944},[94,23042,2655],{"class":104},[94,23044,23045],{"class":96,"line":1175},[94,23046,1527],{"class":104},[94,23048,23049,23051,23053],{"class":96,"line":1181},[94,23050,1966],{"class":100},[94,23052,15430],{"class":104},[94,23054,23055],{"class":163},"\u002F\u002F非静态成员变量\n",[94,23057,23058],{"class":96,"line":1195},[94,23059,3976],{"class":104},[94,23061,23062,23064,23066],{"class":96,"line":1201},[94,23063,5346],{"class":100},[94,23065,5570],{"class":1944},[94,23067,1957],{"class":104},[94,23069,23070],{"class":96,"line":1292},[94,23071,1527],{"class":104},[94,23073,23074],{"class":96,"line":1298},[94,23075,15295],{"class":104},[94,23077,23078,23080,23082,23084,23086,23088,23090,23092],{"class":96,"line":1310},[94,23079,1532],{"class":104},[94,23081,1149],{"class":100},[94,23083,22960],{"class":209},[94,23085,1353],{"class":100},[94,23087,6521],{"class":104},[94,23089,1149],{"class":100},[94,23091,1219],{"class":104},[94,23093,23094],{"class":163}," \u002F\u002F查看不是空对象时占用多少内存\n",[94,23096,23097],{"class":96,"line":1593},[94,23098,2381],{"emptyLinePlaceholder":20},[94,23100,23101],{"class":96,"line":1598},[94,23102,1546],{"class":104},[94,23104,23105,23107,23109],{"class":96,"line":1604},[94,23106,108],{"class":100},[94,23108,1954],{"class":1944},[94,23110,1957],{"class":104},[94,23112,23113],{"class":96,"line":1609},[94,23114,1527],{"class":104},[94,23116,23117,23119],{"class":96,"line":1623},[94,23118,5615],{"class":1944},[94,23120,5618],{"class":104},[94,23122,23123],{"class":96,"line":1628},[94,23124,1546],{"class":104},[40,23126,23127],{},"输出结果：size of p=4",[40,23129,23130],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[48,23132,23133],{},[51,23134,23135],{},"如果加上非静态成员变量，Person类修改如下",[85,23137,23139],{"className":87,"code":23138,"language":89,"meta":14,"style":14},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[91,23140,23141,23147,23151,23157,23165,23169,23174],{"__ignoreMap":14},[94,23142,23143,23145],{"class":96,"line":97},[94,23144,14676],{"class":100},[94,23146,15153],{"class":1944},[94,23148,23149],{"class":96,"line":15},[94,23150,1527],{"class":104},[94,23152,23153,23155],{"class":96,"line":1160},[94,23154,1966],{"class":100},[94,23156,21374],{"class":104},[94,23158,23159,23161,23163],{"class":96,"line":1175},[94,23160,11002],{"class":100},[94,23162,2363],{"class":100},[94,23164,21381],{"class":104},[94,23166,23167],{"class":96,"line":1181},[94,23168,3976],{"class":104},[94,23170,23171],{"class":96,"line":1195},[94,23172,23173],{"class":163},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[94,23175,23176,23178,23180,23182,23184,23186],{"class":96,"line":1201},[94,23177,108],{"class":100},[94,23179,15551],{"class":1944},[94,23181,22394],{"class":104},[94,23183,150],{"class":100},[94,23185,296],{"class":153},[94,23187,1271],{"class":104},[40,23189,23190],{},"输出结果：4",[40,23192,23193],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[48,23195,23196],{"start":15},[51,23197,23198],{},"加上非静态成员函数",[85,23200,23202],{"className":87,"code":23201,"language":89,"meta":14,"style":14},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[91,23203,23204,23211,23215,23221,23229,23233,23237,23241],{"__ignoreMap":14},[94,23205,23206,23208],{"class":96,"line":97},[94,23207,14676],{"class":100},[94,23209,23210],{"class":1944},"  Person\n",[94,23212,23213],{"class":96,"line":15},[94,23214,1527],{"class":104},[94,23216,23217,23219],{"class":96,"line":1160},[94,23218,1966],{"class":100},[94,23220,21374],{"class":104},[94,23222,23223,23225,23227],{"class":96,"line":1175},[94,23224,14891],{"class":100},[94,23226,11367],{"class":1944},[94,23228,1957],{"class":104},[94,23230,23231],{"class":96,"line":1181},[94,23232,2011],{"class":104},[94,23234,23235],{"class":96,"line":1195},[94,23236,2381],{"emptyLinePlaceholder":20},[94,23238,23239],{"class":96,"line":1201},[94,23240,2168],{"class":104},[94,23242,23243],{"class":96,"line":1292},[94,23244,3976],{"class":104},[40,23246,23247],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[48,23249,23250],{"start":1160},[51,23251,23252],{},"加上静态成员函数",[85,23254,23256],{"className":87,"code":23255,"language":89,"meta":14,"style":14},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[91,23257,23258,23264,23268,23274,23282,23286,23290,23294,23305,23309,23313,23317],{"__ignoreMap":14},[94,23259,23260,23262],{"class":96,"line":97},[94,23261,14676],{"class":100},[94,23263,23210],{"class":1944},[94,23265,23266],{"class":96,"line":15},[94,23267,1527],{"class":104},[94,23269,23270,23272],{"class":96,"line":1160},[94,23271,1966],{"class":100},[94,23273,21374],{"class":104},[94,23275,23276,23278,23280],{"class":96,"line":1175},[94,23277,14891],{"class":100},[94,23279,11367],{"class":1944},[94,23281,1957],{"class":104},[94,23283,23284],{"class":96,"line":1181},[94,23285,2011],{"class":104},[94,23287,23288],{"class":96,"line":1195},[94,23289,2381],{"emptyLinePlaceholder":20},[94,23291,23292],{"class":96,"line":1201},[94,23293,2168],{"class":104},[94,23295,23296,23298,23300,23303],{"class":96,"line":1292},[94,23297,11002],{"class":100},[94,23299,22549],{"class":100},[94,23301,23302],{"class":1944}," func1",[94,23304,1957],{"class":104},[94,23306,23307],{"class":96,"line":1298},[94,23308,2011],{"class":104},[94,23310,23311],{"class":96,"line":1310},[94,23312,2381],{"emptyLinePlaceholder":20},[94,23314,23315],{"class":96,"line":1593},[94,23316,2168],{"class":104},[94,23318,23319],{"class":96,"line":1598},[94,23320,3976],{"class":104},[40,23322,23190],{},[40,23324,23325],{},"解释：静态成员函数也不属于类上",[5108,23327,7656],{},{"title":14,"searchDepth":15,"depth":15,"links":23329},[23330,23336],{"id":14627,"depth":15,"text":14628,"children":23331},[23332,23333,23334,23335],{"id":14631,"depth":1160,"text":14632},{"id":15356,"depth":1160,"text":15357},{"id":15528,"depth":1160,"text":15529},{"id":15987,"depth":1160,"text":15988},{"id":18359,"depth":15,"text":18360,"children":23337},[23338,23339,23340,23341,23342,23343,23344,23345,23346],{"id":18371,"depth":1160,"text":18372},{"id":18664,"depth":1160,"text":18665},{"id":19155,"depth":1160,"text":19156},{"id":20252,"depth":1160,"text":20253},{"id":20675,"depth":1160,"text":20676},{"id":21154,"depth":1160,"text":21155},{"id":21529,"depth":1160,"text":21530},{"id":21942,"depth":1160,"text":21943},{"id":22879,"depth":1160,"text":22880},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14592,"description":23347},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23354,"title":89,"body":23355,"description":17,"extension":18,"meta":23359,"navigation":20,"path":23361,"seo":23362,"stem":23363,"__hash__":23364},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23356,"toc":23357},[],{"title":14,"searchDepth":15,"depth":15,"links":23358},[],{"category":23360},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":89,"description":17},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23366,"title":23367,"body":23368,"description":14,"extension":18,"meta":23959,"navigation":20,"path":23960,"seo":23961,"stem":23962,"__hash__":23963},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23369,"toc":23941},[23370,23373,23377,23380,23383,23386,23404,23409,23412,23415,23418,23421,23426,23429,23434,23437,23440,23444,23447,23450,23456,23459,23477,23481,23485,23488,23493,23496,23500,23503,23516,23519,23523,23526,23529,23532,23557,23560,23569,23580,23595,23627,23631,23638,23646,23650,23653,23656,23661,23665,23668,23671,23676,23679,23683,23686,23689,23694,23697,23701,23706,23710,23777,23781,23784,23787,23790,23793,23796,23802,23823,23826,23840,23849,23853,23856,23859,23864,23867,23872,23877,23880,23883,23888,23893,23896,23901,23906,23909,23914,23919,23922,23925,23930,23933,23938],[10,23371,23367],{"id":23372},"_1强化学习基本认识",[35,23374,23376],{"id":23375},"_11什么是强化学习","1.1.什么是强化学习",[40,23378,23379],{},"强化学习有两部分组成：智能体和环境；",[40,23381,23382],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[40,23384,23385],{},"强化学习与监督学习的区别:",[48,23387,23388,23391,23394,23397],{},[51,23389,23390],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[51,23392,23393],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[51,23395,23396],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[51,23398,23399,23400,23403],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[254,23401,23402],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[40,23405,23406],{},[1443,23407],{"alt":14,"src":23408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[40,23410,23411],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[40,23413,23414],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[40,23416,23417],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[40,23419,23420],{},"获取奖励",[40,23422,23423],{},[1443,23424],{"alt":14,"src":23425},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[40,23427,23428],{},"强化学习可以分成标准强化学习和深度强化学习",[40,23430,23431],{},[1443,23432],{"alt":14,"src":23433},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[40,23435,23436],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[40,23438,23439],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[35,23441,23443],{"id":23442},"_12强化学习应用场景","1.2.强化学习应用场景",[40,23445,23446],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[40,23448,23449],{},"具身智能中的应用",[40,23451,23452,23455],{},[254,23453,23454],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[40,23457,23458],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[40,23460,23461,23462,23465,23466,23469,23470,23473,23474],{},"机器人是",[254,23463,23464],{},"躯体","，深度学习是",[254,23467,23468],{},"神经元****网络","，VLA是",[254,23471,23472],{},"通用的行为逻辑","，而强化学习是",[254,23475,23476],{},"教练",[35,23478,23480],{"id":23479},"_13序列决策","1.3.序列决策",[65,23482,23484],{"id":23483},"_131智能体与环境","1.3.1.智能体与环境",[40,23486,23487],{},"强化学习研究的问题是智能体agent与环境交互的问题",[40,23489,23490],{},[1443,23491],{"alt":14,"src":23492},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[40,23494,23495],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[65,23497,23499],{"id":23498},"_132奖励","1.3.2.奖励",[40,23501,23502],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[40,23504,23505,23506,23515],{},"取某个策略的表现如何。强化学习的目的就是",[254,23507,23508,23509,23514],{},"最大化",[254,23510,23511],{},[254,23512,23513],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[40,23517,23518],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[65,23520,23522],{"id":23521},"_133序列决策","1.3.3.序列决策",[40,23524,23525],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[40,23527,23528],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[40,23530,23531],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[40,23533,23534,23538,23539,23541,23542,23544,23545,23547,23548,13777,23551,13777,23554],{},[23535,23536,23537],"em",{},"Ht"," = ",[23535,23540,701],{},"1*, a",[23535,23543,322],{},", r",[23535,23546,322],{},", . . . ,* ",[23535,23549,23550],{},"ot",[23535,23552,23553],{},", at ,",[23535,23555,23556],{},"rt",[40,23558,23559],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[40,23561,23562,23538,23565,1639,23567,534],{},[23535,23563,23564],{},"st",[23535,23566,157],{},[23535,23568,23537],{},[40,23570,23571,23572,23575,23576,23579],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[254,23573,23574],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[254,23577,23578],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[40,23581,23582,23583,23586,23587,23590,23591,23594],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[254,23584,23585],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[254,23588,23589],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23535,23592,23593],{},"S, A, T, R, Ω, O, γ",")。",[40,23596,23597,23598,23600,23601,23603,23604,105,23606,23609,23610,23612,23613,105,23616,23619,23620,23622,23623,23626],{},"其中 ",[23535,23599,794],{}," 表示状态空间，为隐变量，",[23535,23602,337],{}," 为动作空间，",[23535,23605,819],{},[23535,23607,23608],{},"s ′ |s, a",") 为状态转移概率，",[23535,23611,769],{}," 为奖励函数，",[23535,23614,23615],{},"Ω",[23535,23617,23618],{},"o|s, a",") 为观测概率，",[23535,23621,695],{}," 为观测空间，",[23535,23624,23625],{},"γ"," 为折扣因子。",[35,23628,23630],{"id":23629},"_14动作空间","1.4.动作空间",[40,23632,23633,23634,23637],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[254,23635,23636],{},"动作空间"," ，动作空间分为:",[48,23639,23640,23643],{},[51,23641,23642],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[51,23644,23645],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[35,23647,23649],{"id":23648},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[40,23651,23652],{},"由策略、价值函数、模型三部分组成",[40,23654,23655],{},"这三者组成马尔可夫决策过程",[40,23657,23658],{},[1443,23659],{"alt":14,"src":23660},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[65,23662,23664],{"id":23663},"_151策略","1.5.1.策略",[40,23666,23667],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[40,23669,23670],{},"策略可分为两种：",[40,23672,23673],{},[1443,23674],{"alt":14,"src":23675},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[40,23677,23678],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[65,23680,23682],{"id":23681},"_152价值函数","1.5.2.价值函数",[40,23684,23685],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[40,23687,23688],{},"价值函数中有一个折扣因子，类似于存款利息",[40,23690,23691],{},[1443,23692],{"alt":14,"src":23693},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[40,23695,23696],{},"进入某个状态采取的最优动作可以通过Q函数得到",[65,23698,23700],{"id":23699},"_153模型","1.5.3.模型",[40,23702,23703],{},[1443,23704],{"alt":14,"src":23705},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[35,23707,23709],{"id":23708},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[242,23711,23712,23723],{},[245,23713,23714],{},[248,23715,23716,23720],{},[251,23717,23719],{"align":23718},"left","类型",[251,23721,23722],{"align":23718},"特点",[289,23724,23725,23735,23745,23755,23767],{},[248,23726,23727,23732],{},[294,23728,23729],{"align":23718},[254,23730,23731],{},"基于价值的智能体",[294,23733,23734],{"align":23718},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[248,23736,23737,23742],{},[294,23738,23739],{"align":23718},[254,23740,23741],{},"基于策略的智能体",[294,23743,23744],{"align":23718},"直接学习策略，没有学习价值函数",[248,23746,23747,23752],{},[294,23748,23749],{"align":23718},[254,23750,23751],{},"演员-评论员智能体",[294,23753,23754],{"align":23718},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[248,23756,23757,23762],{},[294,23758,23759],{"align":23718},[254,23760,23761],{},"有模型强化学习智能体",[294,23763,23764],{"align":23718},[1443,23765],{"alt":14,"src":23766},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[248,23768,23769,23774],{},[294,23770,23771],{"align":23718},[254,23772,23773],{},"免模型强化学习智能体",[294,23775,23776],{"align":23718},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[35,23778,23780],{"id":23779},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[40,23782,23783],{},"学习和规划是序列决策的两个基本问题",[40,23785,23786],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[40,23788,23789],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[40,23791,23792],{},"强化学习用到的库：Gym",[40,23794,23795],{},"Gym可以检验强化学习算法的优劣",[40,23797,23798,23801],{},[254,23799,23800],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[85,23803,23807],{"className":23804,"code":23805,"language":23806,"meta":14,"style":14},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[91,23808,23809],{"__ignoreMap":14},[94,23810,23811,23814,23817,23820],{"class":96,"line":97},[94,23812,23813],{"class":1944},"pip",[94,23815,23816],{"class":209}," install",[94,23818,23819],{"class":209}," gym==",[94,23821,23822],{"class":153},"0.25.2\n",[40,23824,23825],{},"显示图形界面需要",[85,23827,23829],{"className":23804,"code":23828,"language":23806,"meta":14,"style":14},"pip install pygame\n",[91,23830,23831],{"__ignoreMap":14},[94,23832,23833,23835,23837],{"class":96,"line":97},[94,23834,23813],{"class":1944},[94,23836,23816],{"class":209},[94,23838,23839],{"class":209}," pygame\n",[40,23841,23842,23843],{},"有关Gym库的相关文档介绍：",[343,23844,23848],{"href":23845,"rel":23846},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23847],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[35,23850,23852],{"id":23851},"_18一些补充基础概念","1.8.一些补充基础概念",[40,23854,23855],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[40,23857,23858],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[40,23860,23861],{},[1443,23862],{"alt":14,"src":23863},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[40,23865,23866],{},"折扣率需要自己来设定",[40,23868,23869],{},[1443,23870],{"alt":14,"src":23871},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[48,23873,23874],{},[51,23875,23876],{},"状态转移函数：",[40,23878,23879],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[40,23881,23882],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[40,23884,23885],{},[1443,23886],{"alt":14,"src":23887},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[48,23889,23890],{"start":15},[51,23891,23892],{},"动作价值函数：",[40,23894,23895],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[40,23897,23898],{},[1443,23899],{"alt":14,"src":23900},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[48,23902,23903],{"start":1160},[51,23904,23905],{},"最优动作价值函数：",[40,23907,23908],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[40,23910,23911],{},[1443,23912],{"alt":14,"src":23913},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[48,23915,23916],{"start":1175},[51,23917,23918],{},"状态价值函数:",[40,23920,23921],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[40,23923,23924],{},"它衡量的是“一个具体动作”的长期价值",[40,23926,23927],{},[1443,23928],{"alt":14,"src":23929},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[40,23931,23932],{},"几个价值函数之间的比较：",[40,23934,23935],{},[1443,23936],{"alt":14,"src":23937},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5108,23939,23940],{},"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":14,"searchDepth":15,"depth":15,"links":23942},[23943,23944,23945,23950,23951,23956,23957,23958],{"id":23375,"depth":15,"text":23376},{"id":23442,"depth":15,"text":23443},{"id":23479,"depth":15,"text":23480,"children":23946},[23947,23948,23949],{"id":23483,"depth":1160,"text":23484},{"id":23498,"depth":1160,"text":23499},{"id":23521,"depth":1160,"text":23522},{"id":23629,"depth":15,"text":23630},{"id":23648,"depth":15,"text":23649,"children":23952},[23953,23954,23955],{"id":23663,"depth":1160,"text":23664},{"id":23681,"depth":1160,"text":23682},{"id":23699,"depth":1160,"text":23700},{"id":23708,"depth":15,"text":23709},{"id":23779,"depth":15,"text":23780},{"id":23851,"depth":15,"text":23852},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23367,"description":14},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23965,"title":23966,"body":23967,"description":23974,"extension":18,"meta":23985,"navigation":20,"path":23986,"seo":23987,"stem":23988,"__hash__":23989},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":23968,"toc":23983},[23969,23972,23975,23980],[10,23970,23966],{"id":23971},"_2马尔可夫决策过程",[40,23973,23974],{},"这是强化学习的基本框架",[40,23976,23977],{},[1443,23978],{"alt":14,"src":23979},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[40,23981,23982],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":14,"searchDepth":15,"depth":15,"links":23984},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23966,"description":23974},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":23991,"title":23992,"body":23993,"description":14,"extension":18,"meta":24109,"navigation":20,"path":24110,"seo":24111,"stem":24112,"__hash__":24113},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":23994,"toc":24104},[23995,23998,24002,24005,24010,24015,24018,24023,24026,24031,24034,24038,24043,24046,24051,24056,24061,24064,24068,24073,24076,24081,24086,24091,24096,24099],[10,23996,23992],{"id":23997},"_3动作价值函数",[35,23999,24001],{"id":24000},"_31dqn","3.1.DQN",[40,24003,24004],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[40,24006,24007],{},[1443,24008],{"alt":14,"src":24009},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[40,24011,24012],{},[1443,24013],{"alt":14,"src":24014},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[40,24016,24017],{},"DQN算法的描述：",[40,24019,24020],{},[1443,24021],{"alt":14,"src":24022},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[40,24024,24025],{},"这里的Dense指的是全连接层",[40,24027,24028],{},[1443,24029],{"alt":14,"src":24030},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[40,24032,24033],{},"当前观测的状态为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算法",[35,24035,24037],{"id":24036},"_32dqn的举例","3.2.DQN的举例",[40,24039,24040],{},[1443,24041],{"alt":14,"src":24042},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[40,24044,24045],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[40,24047,24048],{},[1443,24049],{"alt":14,"src":24050},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[40,24052,24053],{},[1443,24054],{"alt":14,"src":24055},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[40,24057,24058],{},[1443,24059],{"alt":14,"src":24060},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[40,24062,24063],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[35,24065,24067],{"id":24066},"_33td算法","3.3.TD算法",[40,24069,24070],{},[1443,24071],{"alt":14,"src":24072},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[40,24074,24075],{},"强化学习TD算法公式的粗略解释：",[40,24077,24078],{},[1443,24079],{"alt":14,"src":24080},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[40,24082,24083],{},[1443,24084],{"alt":14,"src":24085},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[40,24087,24088],{},[1443,24089],{"alt":14,"src":24090},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[40,24092,24093],{},[1443,24094],{"alt":14,"src":24095},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[40,24097,24098],{},"TD算法总结：",[40,24100,24101],{},[1443,24102],{"alt":14,"src":24103},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":14,"searchDepth":15,"depth":15,"links":24105},[24106,24107,24108],{"id":24000,"depth":15,"text":24001},{"id":24036,"depth":15,"text":24037},{"id":24066,"depth":15,"text":24067},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":23992,"description":14},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24115,"title":24116,"body":24117,"description":14,"extension":18,"meta":24350,"navigation":20,"path":24351,"seo":24352,"stem":24353,"__hash__":24354},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24118,"toc":24346},[24119,24122,24126,24129,24132,24137,24142,24145,24150,24155,24158,24163,24166,24171,24174,24179,24182,24187,24190,24195,24200,24203,24208,24211,24214,24219,24222,24227,24232,24236,24239,24242,24247,24252,24255,24260,24265,24268,24273,24276,24279,24284,24287,24292,24295,24300,24305,24308,24313,24318,24321,24326,24329,24334,24337],[10,24120,24116],{"id":24121},"_4策略学习",[35,24123,24125],{"id":24124},"_41概念描述","4.1.概念描述",[40,24127,24128],{},"用神经网络（策略网络）近似策略函数",[40,24130,24131],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[40,24133,24134],{},[1443,24135],{"alt":14,"src":24136},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[40,24138,24139],{},[1443,24140],{"alt":14,"src":24141},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[40,24143,24144],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[40,24146,24147],{},[1443,24148],{"alt":14,"src":24149},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[40,24151,24152],{},[1443,24153],{"alt":14,"src":24154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[40,24156,24157],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[40,24159,24160],{},[1443,24161],{"alt":14,"src":24162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[40,24164,24165],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[40,24167,24168],{},[1443,24169],{"alt":14,"src":24170},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[40,24172,24173],{},"改进theta要用到策略梯度算法",[40,24175,24176],{},[1443,24177],{"alt":14,"src":24178},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[40,24180,24181],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[40,24183,24184],{},[1443,24185],{"alt":14,"src":24186},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[40,24188,24189],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[40,24191,24192],{},[1443,24193],{"alt":14,"src":24194},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[40,24196,24197],{},[1443,24198],{"alt":14,"src":24199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[40,24201,24202],{},"梯度公式总结：",[40,24204,24205],{},[1443,24206],{"alt":14,"src":24207},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[40,24209,24210],{},"两个公式的分别应用场景：",[40,24212,24213],{},"对于离散的动作：",[40,24215,24216],{},[1443,24217],{"alt":14,"src":24218},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[40,24220,24221],{},"对于连续的动作：",[40,24223,24224],{},[1443,24225],{"alt":14,"src":24226},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[40,24228,24229],{},[1443,24230],{"alt":14,"src":24231},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[35,24233,24235],{"id":24234},"_42概率梯度算法总结","4.2.概率梯度算法总结",[40,24237,24238],{},"使用蒙特卡洛来近似计算策略梯度",[40,24240,24241],{},"蒙特卡洛法的解释如下：",[40,24243,24244],{},[1443,24245],{"alt":14,"src":24246},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[40,24248,24249],{},[1443,24250],{"alt":14,"src":24251},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[40,24253,24254],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[48,24256,24257],{},[51,24258,24259],{},"方法一：reinforce算法",[40,24261,24262],{},[1443,24263],{"alt":14,"src":24264},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[40,24266,24267],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[48,24269,24270],{"start":15},[51,24271,24272],{},"方法二：actor-critic算法",[40,24274,24275],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[40,24277,24278],{},"两个网络的构建：",[40,24280,24281],{},[1443,24282],{"alt":14,"src":24283},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[40,24285,24286],{},"actor网路：",[40,24288,24289],{},[1443,24290],{"alt":14,"src":24291},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[40,24293,24294],{},"critic网络",[40,24296,24297],{},[1443,24298],{"alt":14,"src":24299},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[48,24301,24302],{"start":1160},[51,24303,24304],{},"网络的训练",[40,24306,24307],{},"网络描述",[40,24309,24310],{},[1443,24311],{"alt":14,"src":24312},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[40,24314,24315],{},[1443,24316],{"alt":14,"src":24317},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[40,24319,24320],{},"TD算法更新梯度：",[40,24322,24323],{},[1443,24324],{"alt":14,"src":24325},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[40,24327,24328],{},"策略网络更新梯度：",[40,24330,24331],{},[1443,24332],{"alt":14,"src":24333},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[40,24335,24336],{},"训练整个流程的具体描述：",[40,24338,24339,24342,24343],{},[1443,24340],{"alt":14,"src":24341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1443,24344],{"alt":14,"src":24345},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":14,"searchDepth":15,"depth":15,"links":24347},[24348,24349],{"id":24124,"depth":15,"text":24125},{"id":24234,"depth":15,"text":24235},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24116,"description":14},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24356,"title":24357,"body":24358,"description":24365,"extension":18,"meta":24415,"navigation":20,"path":24416,"seo":24417,"stem":24418,"__hash__":24419},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24359,"toc":24411},[24360,24363,24366,24370,24373,24378,24382,24385,24390,24393,24398,24403,24406],[10,24361,24357],{"id":24362},"_5alphago算法",[40,24364,24365],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[35,24367,24369],{"id":24368},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[40,24371,24372],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[40,24374,24375],{},[1443,24376],{"alt":14,"src":24377},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[35,24379,24381],{"id":24380},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[40,24383,24384],{},"采用强化学习的方式训练策略网络",[40,24386,24387],{},[1443,24388],{"alt":14,"src":24389},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[40,24391,24392],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[40,24394,24395],{},[1443,24396],{"alt":14,"src":24397},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[40,24399,24400],{},[1443,24401],{"alt":14,"src":24402},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[40,24404,24405],{},"强化学习训练策略网络的总结：",[40,24407,24408],{},[1443,24409],{"alt":14,"src":24410},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":14,"searchDepth":15,"depth":15,"links":24412},[24413,24414],{"id":24368,"depth":15,"text":24369},{"id":24380,"depth":15,"text":24381},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24357,"description":24365},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24421,"title":24422,"body":24423,"description":24430,"extension":18,"meta":24433,"navigation":20,"path":24434,"seo":24435,"stem":24436,"__hash__":24437},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24424,"toc":24431},[24425,24428],[10,24426,24422],{"id":24427},"_6价值网络",[40,24429,24430],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":14,"searchDepth":15,"depth":15,"links":24432},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24422,"description":24430},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24439,"title":24440,"body":24441,"description":24445,"extension":18,"meta":24446,"navigation":20,"path":24447,"seo":24448,"stem":24449,"__hash__":24450},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24442,"toc":24443},[],{"title":14,"searchDepth":15,"depth":15,"links":24444},[],"记录自己的强化学习笔记。",{"category":23360},"\u002Fwiki\u002F2025-12-04",{"title":24440,"description":24445},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24452,"title":24453,"body":24454,"description":17,"extension":18,"meta":24493,"navigation":20,"path":24494,"seo":24495,"stem":24496,"__hash__":24497},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24455,"toc":24491},[24456,24459,24462,24468,24471,24477,24480,24485,24488],[10,24457,24453],{"id":24458},"_1-项目概览与官方资源",[40,24460,24461],{},"官方文档：",[40,24463,24464],{},[343,24465,24466],{"href":24466,"rel":24467},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23847],[40,24469,24470],{},"官方代码仓库：",[40,24472,24473],{},[343,24474,24475],{"href":24475,"rel":24476},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23847],[40,24478,24479],{},"复现大体流程：",[40,24481,24482],{},[1443,24483],{"alt":14,"src":24484},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[40,24486,24487],{},"本教程的目标是打通这条链路：",[40,24489,24490],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":14,"searchDepth":15,"depth":15,"links":24492},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24453,"description":17},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24499,"title":24500,"body":24501,"description":17,"extension":18,"meta":24617,"navigation":20,"path":24618,"seo":24619,"stem":24620,"__hash__":24621},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24502,"toc":24612},[24503,24506,24510,24513,24520,24524,24527,24536,24546,24550,24580,24583,24609],[10,24504,24500],{"id":24505},"_2-环境准备与设备连接",[35,24507,24509],{"id":24508},"_21-系统与环境","2.1 系统与环境",[40,24511,24512],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[40,24514,24515,24516,24519],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[91,24517,24518],{},"lerobot"," 依赖。",[35,24521,24523],{"id":24522},"_22-机械臂串口识别","2.2 机械臂串口识别",[40,24525,24526],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[85,24528,24530],{"className":23804,"code":24529,"language":23806,"meta":14,"style":14},"lerobot-find-out\n",[91,24531,24532],{"__ignoreMap":14},[94,24533,24534],{"class":96,"line":97},[94,24535,24529],{"class":1944},[40,24537,24538,24539,317,24542,24545],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[91,24540,24541],{},"\u002Fdev\u002FttyACM0",[91,24543,24544],{},"\u002Fdev\u002FttyACM1","）。",[35,24547,24549],{"id":24548},"_23-串口授权","2.3 串口授权",[85,24551,24553],{"className":23804,"code":24552,"language":23806,"meta":14,"style":14},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[91,24554,24555,24569],{"__ignoreMap":14},[94,24556,24557,24560,24563,24566],{"class":96,"line":97},[94,24558,24559],{"class":1944},"sudo",[94,24561,24562],{"class":209}," chmod",[94,24564,24565],{"class":153}," 666",[94,24567,24568],{"class":209}," \u002Fdev\u002FttyACM0\n",[94,24570,24571,24573,24575,24577],{"class":96,"line":15},[94,24572,24559],{"class":1944},[94,24574,24562],{"class":209},[94,24576,24565],{"class":153},[94,24578,24579],{"class":209}," \u002Fdev\u002FttyACM1\n",[40,24581,24582],{},"说明：",[1112,24584,24585,24590,24596,24606],{},[51,24586,24587,24589],{},[91,24588,24559],{},"：以 root 权限执行命令。",[51,24591,24592,24595],{},[91,24593,24594],{},"chmod","：修改设备节点权限。",[51,24597,24598,24601,24602,24605],{},[91,24599,24600],{},"666","：",[91,24603,24604],{},"rw-rw-rw-","，所有用户可读写。",[51,24607,24608],{},"串口号必须替换为你机器上的真实端口。",[5108,24610,24611],{},"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":14,"searchDepth":15,"depth":15,"links":24613},[24614,24615,24616],{"id":24508,"depth":15,"text":24509},{"id":24522,"depth":15,"text":24523},{"id":24548,"depth":15,"text":24549},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24500,"description":17},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24623,"title":24624,"body":24625,"description":17,"extension":18,"meta":24786,"navigation":20,"path":24787,"seo":24788,"stem":24789,"__hash__":24790},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24626,"toc":24782},[24627,24631,24635,24641,24644,24701,24704,24708,24711,24779],[10,24628,24630],{"id":24629},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[35,24632,24634],{"id":24633},"_31-配置电机-id","3.1 配置电机 ID",[40,24636,24637,24638,24640],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[91,24639,322],{},"，需要改成机械臂链路里不冲突的编号。",[40,24642,24643],{},"方式一：用 LeRobot 命令逐步写入。",[85,24645,24647],{"className":23804,"code":24646,"language":23806,"meta":14,"style":14},"# 主臂舵机配置 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",[91,24648,24649,24654,24662,24669,24674,24678,24683,24689,24696],{"__ignoreMap":14},[94,24650,24651],{"class":96,"line":97},[94,24652,24653],{"class":163},"# 主臂舵机配置 ID\n",[94,24655,24656,24659],{"class":96,"line":15},[94,24657,24658],{"class":1944},"lerobot-setup-motors",[94,24660,24661],{"class":153}," \\\n",[94,24663,24664,24667],{"class":96,"line":1160},[94,24665,24666],{"class":153},"  --teleop.type=so101_leader",[94,24668,24661],{"class":153},[94,24670,24671],{"class":96,"line":1175},[94,24672,24673],{"class":153},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[94,24675,24676],{"class":96,"line":1181},[94,24677,2381],{"emptyLinePlaceholder":20},[94,24679,24680],{"class":96,"line":1195},[94,24681,24682],{"class":163},"# 从臂舵机配置 ID\n",[94,24684,24685,24687],{"class":96,"line":1201},[94,24686,24658],{"class":1944},[94,24688,24661],{"class":153},[94,24690,24691,24694],{"class":96,"line":1292},[94,24692,24693],{"class":153},"  --robot.type=so101_follower",[94,24695,24661],{"class":153},[94,24697,24698],{"class":96,"line":1298},[94,24699,24700],{"class":153},"  --robot.port=\u002Fdev\u002FttyACM1\n",[40,24702,24703],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[35,24705,24707],{"id":24706},"_32-机械臂校准","3.2 机械臂校准",[40,24709,24710],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[85,24712,24714],{"className":23804,"code":24713,"language":23806,"meta":14,"style":14},"# 主臂校准\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",[91,24715,24716,24721,24728,24734,24741,24746,24750,24755,24761,24767,24774],{"__ignoreMap":14},[94,24717,24718],{"class":96,"line":97},[94,24719,24720],{"class":163},"# 主臂校准\n",[94,24722,24723,24726],{"class":96,"line":15},[94,24724,24725],{"class":1944},"lerobot-calibrate",[94,24727,24661],{"class":153},[94,24729,24730,24732],{"class":96,"line":1160},[94,24731,24666],{"class":153},[94,24733,24661],{"class":153},[94,24735,24736,24739],{"class":96,"line":1175},[94,24737,24738],{"class":153},"  --teleop.port=\u002Fdev\u002FttyACM0",[94,24740,24661],{"class":153},[94,24742,24743],{"class":96,"line":1181},[94,24744,24745],{"class":153},"  --teleop.id=my_awesome_leader_arm\n",[94,24747,24748],{"class":96,"line":1195},[94,24749,2381],{"emptyLinePlaceholder":20},[94,24751,24752],{"class":96,"line":1201},[94,24753,24754],{"class":163},"# 从臂校准\n",[94,24756,24757,24759],{"class":96,"line":1292},[94,24758,24725],{"class":1944},[94,24760,24661],{"class":153},[94,24762,24763,24765],{"class":96,"line":1298},[94,24764,24693],{"class":153},[94,24766,24661],{"class":153},[94,24768,24769,24772],{"class":96,"line":1310},[94,24770,24771],{"class":153},"  --robot.port=\u002Fdev\u002FttyACM1",[94,24773,24661],{"class":153},[94,24775,24776],{"class":96,"line":1593},[94,24777,24778],{"class":153},"  --robot.id=my_awesome_follower_arm\n",[5108,24780,24781],{},"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":14,"searchDepth":15,"depth":15,"links":24783},[24784,24785],{"id":24633,"depth":15,"text":24634},{"id":24706,"depth":15,"text":24707},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24624,"description":17},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24792,"title":24793,"body":24794,"description":17,"extension":18,"meta":24985,"navigation":20,"path":24986,"seo":24987,"stem":24988,"__hash__":24989},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24795,"toc":24981},[24796,24799,24803,24850,24854,24867,24930,24933,24978],[10,24797,24793],{"id":24798},"_4-遥操与相机接入",[35,24800,24802],{"id":24801},"_41-不带相机遥操","4.1 不带相机遥操",[85,24804,24806],{"className":23804,"code":24805,"language":23806,"meta":14,"style":14},"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",[91,24807,24808,24815,24821,24827,24834,24840,24846],{"__ignoreMap":14},[94,24809,24810,24813],{"class":96,"line":97},[94,24811,24812],{"class":1944},"lerobot-teleoperate",[94,24814,24661],{"class":153},[94,24816,24817,24819],{"class":96,"line":15},[94,24818,24693],{"class":153},[94,24820,24661],{"class":153},[94,24822,24823,24825],{"class":96,"line":1160},[94,24824,24771],{"class":153},[94,24826,24661],{"class":153},[94,24828,24829,24832],{"class":96,"line":1175},[94,24830,24831],{"class":153},"  --robot.id=my_awesome_follower_arm",[94,24833,24661],{"class":153},[94,24835,24836,24838],{"class":96,"line":1181},[94,24837,24666],{"class":153},[94,24839,24661],{"class":153},[94,24841,24842,24844],{"class":96,"line":1195},[94,24843,24738],{"class":153},[94,24845,24661],{"class":153},[94,24847,24848],{"class":96,"line":1201},[94,24849,24745],{"class":153},[35,24851,24853],{"id":24852},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[85,24855,24857],{"className":23804,"code":24856,"language":23806,"meta":14,"style":14},"lerobot-find-cameras opencv\n",[91,24858,24859],{"__ignoreMap":14},[94,24860,24861,24864],{"class":96,"line":97},[94,24862,24863],{"class":1944},"lerobot-find-cameras",[94,24865,24866],{"class":209}," opencv\n",[85,24868,24870],{"className":23804,"code":24869,"language":23806,"meta":14,"style":14},"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",[91,24871,24872,24878,24884,24890,24896,24906,24912,24918,24925],{"__ignoreMap":14},[94,24873,24874,24876],{"class":96,"line":97},[94,24875,24812],{"class":1944},[94,24877,24661],{"class":153},[94,24879,24880,24882],{"class":96,"line":15},[94,24881,24693],{"class":153},[94,24883,24661],{"class":153},[94,24885,24886,24888],{"class":96,"line":1160},[94,24887,24771],{"class":153},[94,24889,24661],{"class":153},[94,24891,24892,24894],{"class":96,"line":1175},[94,24893,24831],{"class":153},[94,24895,24661],{"class":153},[94,24897,24898,24901,24904],{"class":96,"line":1181},[94,24899,24900],{"class":153},"  --robot.cameras=",[94,24902,24903],{"class":209},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[94,24905,24661],{"class":153},[94,24907,24908,24910],{"class":96,"line":1195},[94,24909,24666],{"class":153},[94,24911,24661],{"class":153},[94,24913,24914,24916],{"class":96,"line":1201},[94,24915,24738],{"class":153},[94,24917,24661],{"class":153},[94,24919,24920,24923],{"class":96,"line":1292},[94,24921,24922],{"class":153},"  --teleop.id=my_awesome_leader_arm",[94,24924,24661],{"class":153},[94,24926,24927],{"class":96,"line":1298},[94,24928,24929],{"class":153},"  --display_data=true\n",[40,24931,24932],{},"相机参数说明：",[1112,24934,24935,24941,24947,24956,24966,24972],{},[51,24936,24937,24940],{},[91,24938,24939],{},"front","：相机名称。",[51,24942,24943,24946],{},[91,24944,24945],{},"type: opencv","：相机驱动类型。",[51,24948,24949,24952,24953,24545],{},[91,24950,24951],{},"index_or_path","：设备编号或设备路径（如 ",[91,24954,24955],{},"\u002Fdev\u002Fvideo4",[51,24957,24958,24961,24962,24965],{},[91,24959,24960],{},"width"," \u002F ",[91,24963,24964],{},"height","：图像分辨率。",[51,24967,24968,24971],{},[91,24969,24970],{},"fps","：采样帧率。",[51,24973,24974,24977],{},[91,24975,24976],{},"--display_data=true","：启用实时可视化。",[5108,24979,24980],{},"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":14,"searchDepth":15,"depth":15,"links":24982},[24983,24984],{"id":24801,"depth":15,"text":24802},{"id":24852,"depth":15,"text":24853},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24793,"description":17},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":24991,"title":24992,"body":24993,"description":17,"extension":18,"meta":25165,"navigation":20,"path":25166,"seo":25167,"stem":25168,"__hash__":25169},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":24994,"toc":25160},[24995,24999,25003,25008,25013,25016,25058,25064,25068,25117,25122,25126,25129,25137,25142,25147,25152,25157],[10,24996,24998],{"id":24997},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[35,25000,25002],{"id":25001},"_51-生成访问令牌","5.1 生成访问令牌",[40,25004,25005],{},[1443,25006],{"alt":14,"src":25007},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[40,25009,25010],{},[1443,25011],{"alt":14,"src":25012},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[40,25014,25015],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[85,25017,25019],{"className":23804,"code":25018,"language":23806,"meta":14,"style":14},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[91,25020,25021,25034],{"__ignoreMap":14},[94,25022,25023,25026,25029,25031],{"class":96,"line":97},[94,25024,25025],{"class":100},"export",[94,25027,25028],{"class":104}," HF_TOKEN",[94,25030,150],{"class":100},[94,25032,25033],{"class":209},"\"your_huggingface_token\"\n",[94,25035,25036,25039,25042,25045,25048,25050,25053,25055],{"class":96,"line":15},[94,25037,25038],{"class":1944},"hf",[94,25040,25041],{"class":209}," auth",[94,25043,25044],{"class":209}," login",[94,25046,25047],{"class":153}," --token",[94,25049,9706],{"class":209},[94,25051,25052],{"class":104},"$HF_TOKEN",[94,25054,356],{"class":209},[94,25056,25057],{"class":153}," --add-to-git-credential\n",[40,25059,25060,25063],{},[91,25061,25062],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[35,25065,25067],{"id":25066},"_52-验证登录","5.2 验证登录",[85,25069,25071],{"className":23804,"code":25070,"language":23806,"meta":14,"style":14},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[91,25072,25073,25104],{"__ignoreMap":14},[94,25074,25075,25078,25080,25083,25085,25087,25090,25093,25096,25099,25102],{"class":96,"line":97},[94,25076,25077],{"class":104},"HF_USER",[94,25079,150],{"class":100},[94,25081,25082],{"class":104},"$(",[94,25084,25038],{"class":1944},[94,25086,25041],{"class":209},[94,25088,25089],{"class":209}," whoami",[94,25091,25092],{"class":100}," |",[94,25094,25095],{"class":1944}," head",[94,25097,25098],{"class":153}," -n",[94,25100,25101],{"class":153}," 1",[94,25103,111],{"class":104},[94,25105,25106,25109,25111,25114],{"class":96,"line":15},[94,25107,25108],{"class":153},"echo",[94,25110,9706],{"class":209},[94,25112,25113],{"class":104},"$HF_USER",[94,25115,25116],{"class":209},"\"\n",[40,25118,25119],{},[1443,25120],{"alt":14,"src":25121},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[35,25123,25125],{"id":25124},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[40,25127,25128],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1112,25130,25131,25134],{},[51,25132,25133],{},"Dataset Repo（用于上传演示数据）",[51,25135,25136],{},"Model Repo（用于上传训练后的 ACT 权重）",[40,25138,25139],{},[1443,25140],{"alt":14,"src":25141},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[40,25143,25144],{},[1443,25145],{"alt":14,"src":25146},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[40,25148,25149],{},[1443,25150],{"alt":14,"src":25151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[40,25153,25154],{},[1443,25155],{"alt":14,"src":25156},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5108,25158,25159],{},"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":14,"searchDepth":15,"depth":15,"links":25161},[25162,25163,25164],{"id":25001,"depth":15,"text":25002},{"id":25066,"depth":15,"text":25067},{"id":25124,"depth":15,"text":25125},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":24992,"description":17},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25171,"title":25172,"body":25173,"description":17,"extension":18,"meta":25370,"navigation":20,"path":25371,"seo":25372,"stem":25373,"__hash__":25374},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25174,"toc":25365},[25175,25179,25183,25279,25287,25292,25296,25312,25315,25319,25362],[10,25176,25178],{"id":25177},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[35,25180,25182],{"id":25181},"_61-录制示教数据","6.1 录制示教数据",[85,25184,25186],{"className":23804,"code":25185,"language":23806,"meta":14,"style":14},"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",[91,25187,25188,25195,25201,25207,25213,25222,25228,25234,25240,25247,25257,25264,25274],{"__ignoreMap":14},[94,25189,25190,25193],{"class":96,"line":97},[94,25191,25192],{"class":1944},"lerobot-record",[94,25194,24661],{"class":153},[94,25196,25197,25199],{"class":96,"line":15},[94,25198,24693],{"class":153},[94,25200,24661],{"class":153},[94,25202,25203,25205],{"class":96,"line":1160},[94,25204,24771],{"class":153},[94,25206,24661],{"class":153},[94,25208,25209,25211],{"class":96,"line":1175},[94,25210,24831],{"class":153},[94,25212,24661],{"class":153},[94,25214,25215,25217,25220],{"class":96,"line":1181},[94,25216,24900],{"class":153},[94,25218,25219],{"class":209},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[94,25221,24661],{"class":153},[94,25223,25224,25226],{"class":96,"line":1195},[94,25225,24666],{"class":153},[94,25227,24661],{"class":153},[94,25229,25230,25232],{"class":96,"line":1201},[94,25231,24738],{"class":153},[94,25233,24661],{"class":153},[94,25235,25236,25238],{"class":96,"line":1292},[94,25237,24922],{"class":153},[94,25239,24661],{"class":153},[94,25241,25242,25245],{"class":96,"line":1298},[94,25243,25244],{"class":153},"  --display_data=true",[94,25246,24661],{"class":153},[94,25248,25249,25252,25255],{"class":96,"line":1310},[94,25250,25251],{"class":153},"  --dataset.repo_id=",[94,25253,25254],{"class":209},"\"Embodied-AI-6\u002Fso101_test\"",[94,25256,24661],{"class":153},[94,25258,25259,25262],{"class":96,"line":1593},[94,25260,25261],{"class":153},"  --dataset.num_episodes=10",[94,25263,24661],{"class":153},[94,25265,25266,25269,25272],{"class":96,"line":1598},[94,25267,25268],{"class":153},"  --dataset.single_task=",[94,25270,25271],{"class":209},"\"Grab the green cube\"",[94,25273,24661],{"class":153},[94,25275,25276],{"class":96,"line":1604},[94,25277,25278],{"class":153},"  --resume=true\n",[1112,25280,25281],{},[51,25282,25283,25286],{},[91,25284,25285],{},"--resume=true","：已有同一数据集时继续追加 episode。",[40,25288,25289],{},[1443,25290],{"alt":14,"src":25291},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[35,25293,25295],{"id":25294},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[85,25297,25299],{"className":23804,"code":25298,"language":23806,"meta":14,"style":14},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[91,25300,25301],{"__ignoreMap":14},[94,25302,25303,25306,25309],{"class":96,"line":97},[94,25304,25305],{"class":1944},"rm",[94,25307,25308],{"class":153}," -rf",[94,25310,25311],{"class":209}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[40,25313,25314],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[35,25316,25318],{"id":25317},"_63-回放指定-episode","6.3 回放指定 episode",[85,25320,25322],{"className":23804,"code":25321,"language":23806,"meta":14,"style":14},"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",[91,25323,25324,25331,25337,25343,25349,25357],{"__ignoreMap":14},[94,25325,25326,25329],{"class":96,"line":97},[94,25327,25328],{"class":1944},"lerobot-replay",[94,25330,24661],{"class":153},[94,25332,25333,25335],{"class":96,"line":15},[94,25334,24693],{"class":153},[94,25336,24661],{"class":153},[94,25338,25339,25341],{"class":96,"line":1160},[94,25340,24771],{"class":153},[94,25342,24661],{"class":153},[94,25344,25345,25347],{"class":96,"line":1175},[94,25346,24831],{"class":153},[94,25348,24661],{"class":153},[94,25350,25351,25353,25355],{"class":96,"line":1181},[94,25352,25251],{"class":153},[94,25354,25254],{"class":209},[94,25356,24661],{"class":153},[94,25358,25359],{"class":96,"line":1195},[94,25360,25361],{"class":153},"  --dataset.episode=0\n",[5108,25363,25364],{},"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":14,"searchDepth":15,"depth":15,"links":25366},[25367,25368,25369],{"id":25181,"depth":15,"text":25182},{"id":25294,"depth":15,"text":25295},{"id":25317,"depth":15,"text":25318},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25172,"description":17},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25376,"title":25377,"body":25378,"description":17,"extension":18,"meta":25506,"navigation":20,"path":25507,"seo":25508,"stem":25509,"__hash__":25510},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25379,"toc":25504},[25380,25384,25447,25450,25497,25502],[10,25381,25383],{"id":25382},"_7-act-模型训练","7. ACT 模型训练",[85,25385,25387],{"className":23804,"code":25386,"language":23806,"meta":14,"style":14},"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",[91,25388,25389,25396,25404,25411,25418,25425,25432,25439],{"__ignoreMap":14},[94,25390,25391,25394],{"class":96,"line":97},[94,25392,25393],{"class":1944},"lerobot-train",[94,25395,24661],{"class":153},[94,25397,25398,25400,25402],{"class":96,"line":15},[94,25399,25251],{"class":153},[94,25401,25254],{"class":209},[94,25403,24661],{"class":153},[94,25405,25406,25409],{"class":96,"line":1160},[94,25407,25408],{"class":153},"  --policy.type=act",[94,25410,24661],{"class":153},[94,25412,25413,25416],{"class":96,"line":1175},[94,25414,25415],{"class":153},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[94,25417,24661],{"class":153},[94,25419,25420,25423],{"class":96,"line":1181},[94,25421,25422],{"class":153},"  --job_name=act_so101_test",[94,25424,24661],{"class":153},[94,25426,25427,25430],{"class":96,"line":1195},[94,25428,25429],{"class":153},"  --policy.device=cuda",[94,25431,24661],{"class":153},[94,25433,25434,25437],{"class":96,"line":1201},[94,25435,25436],{"class":153},"  --wandb.enable=false",[94,25438,24661],{"class":153},[94,25440,25441,25444],{"class":96,"line":1292},[94,25442,25443],{"class":153},"  --policy.repo_id=",[94,25445,25446],{"class":209},"\"Embodied-AI-6\u002Flerobot_new\"\n",[40,25448,25449],{},"参数说明：",[1112,25451,25452,25458,25464,25470,25476,25485,25491],{},[51,25453,25454,25457],{},[91,25455,25456],{},"--dataset.repo_id","：训练数据集仓库。",[51,25459,25460,25463],{},[91,25461,25462],{},"--policy.type=act","：策略模型类型为 ACT。",[51,25465,25466,25469],{},[91,25467,25468],{},"--output_dir","：本地训练输出目录。",[51,25471,25472,25475],{},[91,25473,25474],{},"--job_name","：训练任务名称。",[51,25477,25478,25481,25482,24545],{},[91,25479,25480],{},"--policy.device","：训练设备（如 ",[91,25483,25484],{},"cuda",[51,25486,25487,25490],{},[91,25488,25489],{},"--wandb.enable","：是否启用 WandB 可视化。",[51,25492,25493,25496],{},[91,25494,25495],{},"--policy.repo_id","：训练后模型推送目标仓库。",[40,25498,25499],{},[1443,25500],{"alt":14,"src":25501},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5108,25503,25364],{},{"title":14,"searchDepth":15,"depth":15,"links":25505},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25377,"description":17},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25512,"title":25513,"body":25514,"description":17,"extension":18,"meta":25601,"navigation":20,"path":25602,"seo":25603,"stem":25604,"__hash__":25605},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25515,"toc":25599},[25516,25519,25522,25589,25597],[10,25517,25513],{"id":25518},"_8-策略部署与自动采集",[40,25520,25521],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[85,25523,25525],{"className":23804,"code":25524,"language":23806,"meta":14,"style":14},"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",[91,25526,25527,25533,25539,25545,25553,25559,25566,25574,25582],{"__ignoreMap":14},[94,25528,25529,25531],{"class":96,"line":97},[94,25530,25192],{"class":1944},[94,25532,24661],{"class":153},[94,25534,25535,25537],{"class":96,"line":15},[94,25536,24693],{"class":153},[94,25538,24661],{"class":153},[94,25540,25541,25543],{"class":96,"line":1160},[94,25542,24771],{"class":153},[94,25544,24661],{"class":153},[94,25546,25547,25549,25551],{"class":96,"line":1175},[94,25548,24900],{"class":153},[94,25550,25219],{"class":209},[94,25552,24661],{"class":153},[94,25554,25555,25557],{"class":96,"line":1181},[94,25556,24831],{"class":153},[94,25558,24661],{"class":153},[94,25560,25561,25564],{"class":96,"line":1195},[94,25562,25563],{"class":153},"  --display_data=false",[94,25565,24661],{"class":153},[94,25567,25568,25570,25572],{"class":96,"line":1201},[94,25569,25251],{"class":153},[94,25571,25254],{"class":209},[94,25573,24661],{"class":153},[94,25575,25576,25578,25580],{"class":96,"line":1292},[94,25577,25268],{"class":153},[94,25579,25271],{"class":209},[94,25581,24661],{"class":153},[94,25583,25584,25587],{"class":96,"line":1298},[94,25585,25586],{"class":153},"  --policy.path=",[94,25588,25446],{"class":209},[1112,25590,25591],{},[51,25592,25593,25596],{},[91,25594,25595],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5108,25598,25364],{},{"title":14,"searchDepth":15,"depth":15,"links":25600},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25513,"description":17},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25607,"title":25608,"body":25609,"description":17,"extension":18,"meta":25638,"navigation":20,"path":25639,"seo":25640,"stem":25641,"__hash__":25642},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25610,"toc":25636},[25611,25615,25618,25624,25627,25633],[10,25612,25614],{"id":25613},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[40,25616,25617],{},"项目地址：",[40,25619,25620],{},[343,25621,25622],{"href":25622,"rel":25623},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23847],[40,25625,25626],{},"参考教程：",[40,25628,25629],{},[343,25630,25631],{"href":25631,"rel":25632},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23847],[40,25634,25635],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":14,"searchDepth":15,"depth":15,"links":25637},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25608,"description":17},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25644,"title":25645,"body":25646,"description":25650,"extension":18,"meta":25651,"navigation":20,"path":25652,"seo":25653,"stem":25654,"__hash__":25655},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25647,"toc":25648},[],{"title":14,"searchDepth":15,"depth":15,"links":25649},[],"act复现",{"category":23360},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25645,"description":25650},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25657,"title":25658,"body":25659,"description":14,"extension":18,"meta":25961,"navigation":20,"path":25962,"seo":25963,"stem":25964,"__hash__":25965},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25660,"toc":25953},[25661,25664,25668,25678,25685,25692,25695,25702,25705,25708,25712,25724,25728,25774,25777,25780,25783,25786,25789,25793,25831,25837,25841,25895,25900,25903,25906,25911,25914,25919,25922,25925,25929,25932,25935,25939],[10,25662,25658],{"id":25663},"_1简介",[65,25665,25667],{"id":25666},"_11什么是-docker","1.1什么是 Docker？",[40,25669,25670,25671,25674,25675],{},"Docker 是一个开源的 ",[254,25672,25673],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[254,25676,25677],{},"一次构建，到处运行。",[40,25679,25680,25681,25684],{},"“ ",[254,25682,25683],{},"一次构建，到处运行"," ”也就是说：",[48,25686,25687],{},[51,25688,25689],{},[254,25690,25691],{},"之前：",[40,25693,25694],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[48,25696,25697],{},[51,25698,25699],{},[254,25700,25701],{},"使用docker后：",[40,25703,25704],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[40,25706,25707],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[65,25709,25711],{"id":25710},"_12它是怎么工作的","1.2.它是怎么工作的？",[1112,25713,25714,25717],{},[51,25715,25716],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[51,25718,25719,25720,25723],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[254,25721,25722],{},"无论在哪运行都一样稳定"," 。",[65,25725,25727],{"id":25726},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[242,25729,25730,25740],{},[245,25731,25732],{},[248,25733,25734,25737],{},[251,25735,25736],{"align":23718},"概念",[251,25738,25739],{"align":23718},"解释",[289,25741,25742,25750,25758,25766],{},[248,25743,25744,25747],{},[294,25745,25746],{"align":23718},"镜像",[294,25748,25749],{"align":23718},"Image，运行容器的模板，像是一个应用快照",[248,25751,25752,25755],{},[294,25753,25754],{"align":23718},"容器",[294,25756,25757],{"align":23718},"Container，运行中的镜像实例，有自己的文件系统、网络等",[248,25759,25760,25763],{},[294,25761,25762],{"align":23718},"Dockerfile",[294,25764,25765],{"align":23718},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[248,25767,25768,25771],{},[294,25769,25770],{"align":23718},"仓库",[294,25772,25773],{"align":23718},"Registry，存放镜像的地方，比如 Docker Hub",[40,25775,25776],{},"抽象化理解:",[40,25778,25779],{},"Docker镜像≈C++类",[40,25781,25782],{},"Docker容器≈C++类实例(即对象)",[40,25784,25785],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[40,25787,25788],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[65,25790,25792],{"id":25791},"_14类比理解","1.4.类比理解",[242,25794,25795,25805],{},[245,25796,25797],{},[248,25798,25799,25802],{},[251,25800,25801],{"align":23718},"传统部署",[251,25803,25804],{"align":23718},"Docker部署",[289,25806,25807,25815,25823],{},[248,25808,25809,25812],{},[294,25810,25811],{"align":23718},"手动安装依赖、调试版本不一致问题",[294,25813,25814],{"align":23718},"一次打包环境和代码",[248,25816,25817,25820],{},[294,25818,25819],{"align":23718},"程序“裸奔”跑在系统上",[294,25821,25822],{"align":23718},"程序“穿着容器”隔离运行",[248,25824,25825,25828],{},[294,25826,25827],{"align":23718},"容易“在我电脑上能跑”",[294,25829,25830],{"align":23718},"保证“无论在哪都能跑”",[40,25832,25833,25834],{},"就像快递包裹： ",[254,25835,25836],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[65,25838,25840],{"id":25839},"_15docker-的核心优势","1.5.Docker 的核心优势",[242,25842,25843,25853],{},[245,25844,25845],{},[248,25846,25847,25850],{},[251,25848,25849],{"align":23718},"优势",[251,25851,25852],{"align":23718},"说明",[289,25854,25855,25863,25871,25879,25887],{},[248,25856,25857,25860],{},[294,25858,25859],{"align":23718},"轻量级",[294,25861,25862],{"align":23718},"基于系统内核共享，启动速度快，占资源少",[248,25864,25865,25868],{},[294,25866,25867],{"align":23718},"跨平台",[294,25869,25870],{"align":23718},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[248,25872,25873,25876],{},[294,25874,25875],{"align":23718},"易于迁移部署",[294,25877,25878],{"align":23718},"应用和环境一起封装，不怕依赖不一致",[248,25880,25881,25884],{},[294,25882,25883],{"align":23718},"易于版本控制",[294,25885,25886],{"align":23718},"镜像版本可控，支持回滚",[248,25888,25889,25892],{},[294,25890,25891],{"align":23718},"生态丰富",[294,25893,25894],{"align":23718},"Docker Hub 上有成千上万的现成镜像可用",[48,25896,25897],{},[51,25898,25899],{},"在Linux上可以几乎实现无性能损失。",[40,25901,25902],{},"docker里的发行版和本机共用Linux内核。",[40,25904,25905],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[48,25907,25908],{},[51,25909,25910],{},"可以快速部署在绝大多数Linux发行版",[40,25912,25913],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[48,25915,25916],{},[51,25917,25918],{},"配置环境简单",[40,25920,25921],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[40,25923,25924],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[48,25926,25927],{},[51,25928,25891],{},[40,25930,25931],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[40,25933,25934],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[65,25936,25938],{"id":25937},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1112,25940,25941,25944,25947,25950],{},[51,25942,25943],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[51,25945,25946],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[51,25948,25949],{},"微服务架构：每个服务一个容器，灵活组合",[51,25951,25952],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":14,"searchDepth":15,"depth":15,"links":25954},[25955,25956,25957,25958,25959,25960],{"id":25666,"depth":1160,"text":25667},{"id":25710,"depth":1160,"text":25711},{"id":25726,"depth":1160,"text":25727},{"id":25791,"depth":1160,"text":25792},{"id":25839,"depth":1160,"text":25840},{"id":25937,"depth":1160,"text":25938},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25658,"description":14},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25967,"title":25968,"body":25969,"description":14,"extension":18,"meta":26702,"navigation":20,"path":26703,"seo":26704,"stem":26705,"__hash__":26706},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25970,"toc":26697},[25971,25974,25978,25981,25984,25990,25996,26000,26009,26012,26069,26072,26123,26126,26209,26212,26249,26253,26264,26277,26284,26287,26367,26370,26420,26423,26446,26450,26457,26460,26476,26482,26485,26501,26507,26510,26526,26540,26546,26566,26572,26575,26587,26593,26596,26610,26616,26619,26639,26644,26647,26650,26654,26657,26660,26663,26670,26673,26676,26679,26684,26689,26694],[10,25972,25968],{"id":25973},"_2安装docker",[65,25975,25977],{"id":25976},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[40,25979,25980],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[40,25982,25983],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[40,25985,25986],{},[343,25987,25988],{"href":25988,"rel":25989},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23847],[40,25991,25992],{},[343,25993,25994],{"href":25994,"rel":25995},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23847],[21980,25997,25999],{"id":25998},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[40,26001,26002,26003,26008],{},"以下内容根据 ",[343,26004,26007],{"href":26005,"rel":26006},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23847],"官方文档"," 修改而来。",[40,26010,26011],{},"如果你过去安装过 docker，先删掉：",[85,26013,26015],{"className":23804,"code":26014,"language":23806,"meta":14,"style":14},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[91,26016,26017],{"__ignoreMap":14},[94,26018,26019,26021,26024,26027,26030,26033,26036,26039,26042,26045,26048,26051,26054,26057,26060,26063,26066],{"class":96,"line":97},[94,26020,3006],{"class":100},[94,26022,26023],{"class":104}," pkg ",[94,26025,26026],{"class":100},"in",[94,26028,26029],{"class":209}," docker.io",[94,26031,26032],{"class":209}," docker-doc",[94,26034,26035],{"class":209}," docker-compose",[94,26037,26038],{"class":209}," docker-compose-v2",[94,26040,26041],{"class":209}," podman-docker",[94,26043,26044],{"class":209}," containerd",[94,26046,26047],{"class":209}," runc",[94,26049,26050],{"class":104},"; ",[94,26052,26053],{"class":100},"do",[94,26055,26056],{"class":1944}," sudo",[94,26058,26059],{"class":209}," apt-get",[94,26061,26062],{"class":209}," remove",[94,26064,26065],{"class":104}," $pkg; ",[94,26067,26068],{"class":100},"done\n",[40,26070,26071],{},"首先安装依赖和GPG：",[85,26073,26077],{"className":26074,"code":26075,"language":26076,"meta":14,"style":14},"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",[91,26078,26079,26084,26089,26094,26099,26104,26109,26113,26118],{"__ignoreMap":14},[94,26080,26081],{"class":96,"line":97},[94,26082,26083],{},"# Add Docker's official GPG key:\n",[94,26085,26086],{"class":96,"line":15},[94,26087,26088],{},"sudo apt-get update\n",[94,26090,26091],{"class":96,"line":1160},[94,26092,26093],{},"sudo apt-get install ca-certificates curl\n",[94,26095,26096],{"class":96,"line":1175},[94,26097,26098],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[94,26100,26101],{"class":96,"line":1181},[94,26102,26103],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[94,26105,26106],{"class":96,"line":1195},[94,26107,26108],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[94,26110,26111],{"class":96,"line":1201},[94,26112,2381],{"emptyLinePlaceholder":20},[94,26114,26115],{"class":96,"line":1292},[94,26116,26117],{},"# 如果上面这行报错就弄下面这行\n",[94,26119,26120],{"class":96,"line":1298},[94,26121,26122],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[40,26124,26125],{},"信任 Docker 的 GPG 公钥并添加仓库：",[85,26127,26129],{"className":23804,"code":26128,"language":23806,"meta":14,"style":14},"# 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",[91,26130,26131,26136,26142,26159,26192],{"__ignoreMap":14},[94,26132,26133],{"class":96,"line":97},[94,26134,26135],{"class":163},"# Add the repository to Apt sources:\n",[94,26137,26138,26140],{"class":96,"line":15},[94,26139,25108],{"class":153},[94,26141,24661],{"class":153},[94,26143,26144,26147,26150,26153,26156],{"class":96,"line":1160},[94,26145,26146],{"class":209},"  \"deb [arch=$(",[94,26148,26149],{"class":1944},"dpkg",[94,26151,26152],{"class":153}," --print-architecture",[94,26154,26155],{"class":209},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[94,26157,26158],{"class":153},"\\\n",[94,26160,26161,26164,26166,26168,26171,26174,26176,26178,26181,26183,26185,26188,26190],{"class":96,"line":1175},[94,26162,26163],{"class":209},"  \"",[94,26165,25082],{"class":104},[94,26167,663],{"class":153},[94,26169,26170],{"class":209}," \u002Fetc\u002Fos-release",[94,26172,26173],{"class":104}," && ",[94,26175,25108],{"class":153},[94,26177,9706],{"class":209},[94,26179,26180],{"class":104},"$VERSION_CODENAME",[94,26182,356],{"class":209},[94,26184,534],{"class":104},[94,26186,26187],{"class":209},"\" stable\"",[94,26189,25092],{"class":100},[94,26191,24661],{"class":153},[94,26193,26194,26197,26200,26203,26206],{"class":96,"line":1181},[94,26195,26196],{"class":1944},"  sudo",[94,26198,26199],{"class":209}," tee",[94,26201,26202],{"class":209}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[94,26204,26205],{"class":100}," >",[94,26207,26208],{"class":209}," \u002Fdev\u002Fnull\n",[40,26210,26211],{},"最后安装",[85,26213,26215],{"className":23804,"code":26214,"language":23806,"meta":14,"style":14},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[91,26216,26217,26226],{"__ignoreMap":14},[94,26218,26219,26221,26223],{"class":96,"line":97},[94,26220,24559],{"class":1944},[94,26222,26059],{"class":209},[94,26224,26225],{"class":209}," update\n",[94,26227,26228,26230,26232,26234,26237,26240,26243,26246],{"class":96,"line":15},[94,26229,24559],{"class":1944},[94,26231,26059],{"class":209},[94,26233,23816],{"class":209},[94,26235,26236],{"class":209}," docker-ce",[94,26238,26239],{"class":209}," docker-ce-cli",[94,26241,26242],{"class":209}," containerd.io",[94,26244,26245],{"class":209}," docker-buildx-plugin",[94,26247,26248],{"class":209}," docker-compose-plugin\n",[21980,26250,26252],{"id":26251},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[40,26254,26255,26256,26259,26260,26263],{},"查看自己自己包管理工具版本（dnf是 ",[254,26257,26258],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[254,26261,26262],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[85,26265,26267],{"className":23804,"code":26266,"language":23806,"meta":14,"style":14},"dnf --version\n",[91,26268,26269],{"__ignoreMap":14},[94,26270,26271,26274],{"class":96,"line":97},[94,26272,26273],{"class":1944},"dnf",[94,26275,26276],{"class":153}," --version\n",[40,26278,26002,26279,26283],{},[343,26280,26007],{"href":26281,"rel":26282},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23847]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[40,26285,26286],{},"如果你之前安装过 docker，请先删掉",[85,26288,26290],{"className":23804,"code":26289,"language":23806,"meta":14,"style":14},"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",[91,26291,26292,26306,26313,26320,26327,26334,26341,26348,26355,26362],{"__ignoreMap":14},[94,26293,26294,26296,26299,26301,26304],{"class":96,"line":97},[94,26295,24559],{"class":1944},[94,26297,26298],{"class":209}," dnf",[94,26300,26062],{"class":209},[94,26302,26303],{"class":209}," docker",[94,26305,24661],{"class":153},[94,26307,26308,26311],{"class":96,"line":15},[94,26309,26310],{"class":209},"                  docker-client",[94,26312,24661],{"class":153},[94,26314,26315,26318],{"class":96,"line":1160},[94,26316,26317],{"class":209},"                  docker-client-latest",[94,26319,24661],{"class":153},[94,26321,26322,26325],{"class":96,"line":1175},[94,26323,26324],{"class":209},"                  docker-common",[94,26326,24661],{"class":153},[94,26328,26329,26332],{"class":96,"line":1181},[94,26330,26331],{"class":209},"                  docker-latest",[94,26333,24661],{"class":153},[94,26335,26336,26339],{"class":96,"line":1195},[94,26337,26338],{"class":209},"                  docker-latest-logrotate",[94,26340,24661],{"class":153},[94,26342,26343,26346],{"class":96,"line":1201},[94,26344,26345],{"class":209},"                  docker-logrotate",[94,26347,24661],{"class":153},[94,26349,26350,26353],{"class":96,"line":1292},[94,26351,26352],{"class":209},"                  docker-selinux",[94,26354,24661],{"class":153},[94,26356,26357,26360],{"class":96,"line":1298},[94,26358,26359],{"class":209},"                  docker-engine-selinux",[94,26361,24661],{"class":153},[94,26363,26364],{"class":96,"line":1310},[94,26365,26366],{"class":209},"                  docker-engine\n",[40,26368,26369],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[85,26371,26373],{"className":23804,"code":26372,"language":23806,"meta":14,"style":14},"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",[91,26374,26375,26389,26404],{"__ignoreMap":14},[94,26376,26377,26379,26381,26384,26386],{"class":96,"line":97},[94,26378,24559],{"class":1944},[94,26380,26298],{"class":209},[94,26382,26383],{"class":153}," -y",[94,26385,23816],{"class":209},[94,26387,26388],{"class":209}," dnf-plugins-core\n",[94,26390,26391,26393,26395,26398,26401],{"class":96,"line":15},[94,26392,24559],{"class":1944},[94,26394,26298],{"class":209},[94,26396,26397],{"class":209}," config-manager",[94,26399,26400],{"class":209}," addrepo",[94,26402,26403],{"class":153}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[94,26405,26406,26408,26411,26414,26417],{"class":96,"line":1160},[94,26407,24559],{"class":1944},[94,26409,26410],{"class":209}," sed",[94,26412,26413],{"class":153}," -i",[94,26415,26416],{"class":209}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[94,26418,26419],{"class":209}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[40,26421,26422],{},"最后安装：",[85,26424,26426],{"className":23804,"code":26425,"language":23806,"meta":14,"style":14},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[91,26427,26428],{"__ignoreMap":14},[94,26429,26430,26432,26434,26436,26438,26440,26442,26444],{"class":96,"line":97},[94,26431,24559],{"class":1944},[94,26433,26298],{"class":209},[94,26435,23816],{"class":209},[94,26437,26236],{"class":209},[94,26439,26239],{"class":209},[94,26441,26242],{"class":209},[94,26443,26245],{"class":209},[94,26445,26248],{"class":209},[65,26447,26449],{"id":26448},"_22配置环境","2.2.配置环境",[21980,26451,26453,26456],{"id":26452},"_221检查-docker-服务状态",[254,26454,26455],{},"2.2.1.检查 Docker 服务状态"," ：",[40,26458,26459],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[85,26461,26463],{"className":23804,"code":26462,"language":23806,"meta":14,"style":14},"systemctl status docker\n",[91,26464,26465],{"__ignoreMap":14},[94,26466,26467,26470,26473],{"class":96,"line":97},[94,26468,26469],{"class":1944},"systemctl",[94,26471,26472],{"class":209}," status",[94,26474,26475],{"class":209}," docker\n",[21980,26477,26479,26456],{"id":26478},"_222启动-docker-服务",[254,26480,26481],{},"2.2.2.启动 Docker 服务",[40,26483,26484],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[85,26486,26488],{"className":23804,"code":26487,"language":23806,"meta":14,"style":14},"sudo systemctl start docker\n",[91,26489,26490],{"__ignoreMap":14},[94,26491,26492,26494,26497,26499],{"class":96,"line":97},[94,26493,24559],{"class":1944},[94,26495,26496],{"class":209}," systemctl",[94,26498,4165],{"class":209},[94,26500,26475],{"class":209},[21980,26502,26504,26456],{"id":26503},"_223设置-docker-开机自启",[254,26505,26506],{},"2.2.3.设置 Docker 开机自启",[40,26508,26509],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[85,26511,26513],{"className":23804,"code":26512,"language":23806,"meta":14,"style":14},"sudo systemctl enable docker\n",[91,26514,26515],{"__ignoreMap":14},[94,26516,26517,26519,26521,26524],{"class":96,"line":97},[94,26518,24559],{"class":1944},[94,26520,26496],{"class":209},[94,26522,26523],{"class":209}," enable",[94,26525,26475],{"class":209},[21980,26527,26529,13777,26532,13777,26537,26456],{"id":26528},"_224将用户添加到-docker-组",[254,26530,26531],{},"2.2.4.将用户添加到",[254,26533,26534],{},[91,26535,26536],{},"docker",[254,26538,26539],{},"组",[40,26541,26542,26543,26545],{},"使用以下命令将当前用户添加到 ",[91,26544,26536],{}," 组：",[85,26547,26549],{"className":23804,"code":26548,"language":23806,"meta":14,"style":14},"sudo usermod -aG docker $USER\n",[91,26550,26551],{"__ignoreMap":14},[94,26552,26553,26555,26558,26561,26563],{"class":96,"line":97},[94,26554,24559],{"class":1944},[94,26556,26557],{"class":209}," usermod",[94,26559,26560],{"class":153}," -aG",[94,26562,26303],{"class":209},[94,26564,26565],{"class":104}," $USER\n",[21980,26567,26569,26456],{"id":26568},"_225退出并重新登录",[254,26570,26571],{},"2.2.5.退出并重新登录",[40,26573,26574],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[85,26576,26578],{"className":23804,"code":26577,"language":23806,"meta":14,"style":14},"newgrp docker\n",[91,26579,26580],{"__ignoreMap":14},[94,26581,26582,26585],{"class":96,"line":97},[94,26583,26584],{"class":1944},"newgrp",[94,26586,26475],{"class":209},[21980,26588,26590,26456],{"id":26589},"_226重新启动-docker-服务如果需要",[254,26591,26592],{},"2.2.6.重新启动 Docker 服务（如果需要）",[40,26594,26595],{},"确保 Docker 服务正在运行，可以使用以下命令：",[85,26597,26598],{"className":23804,"code":26487,"language":23806,"meta":14,"style":14},[91,26599,26600],{"__ignoreMap":14},[94,26601,26602,26604,26606,26608],{"class":96,"line":97},[94,26603,24559],{"class":1944},[94,26605,26496],{"class":209},[94,26607,4165],{"class":209},[94,26609,26475],{"class":209},[21980,26611,26613,26456],{"id":26612},"_227重启电脑后检查-docker-服务状态",[254,26614,26615],{},"2.2.7.重启电脑后检查 Docker 服务状态",[40,26617,26618],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[85,26620,26622],{"className":23804,"code":26621,"language":23806,"meta":14,"style":14},"sudo reboot\nsystemctl status docker\n",[91,26623,26624,26631],{"__ignoreMap":14},[94,26625,26626,26628],{"class":96,"line":97},[94,26627,24559],{"class":1944},[94,26629,26630],{"class":209}," reboot\n",[94,26632,26633,26635,26637],{"class":96,"line":15},[94,26634,26469],{"class":1944},[94,26636,26472],{"class":209},[94,26638,26475],{"class":209},[40,26640,26641],{},[1443,26642],{"alt":14,"src":26643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[40,26645,26646],{},"第三行显示enabled说明开机自启动成功",[40,26648,26649],{},"按q退出",[65,26651,26653],{"id":26652},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[40,26655,26656],{},"优先使用linux来使用docker是比较好的",[40,26658,26659],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[40,26661,26662],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[40,26664,26665,26666],{},"官方下载安装:",[343,26667,26668],{"href":26668,"rel":26669},"https:\u002F\u002Fwww.docker.com\u002F",[23847],[40,26671,26672],{},"Windows的Docker显卡直通与USB直通:",[40,26674,26675],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[40,26677,26678],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[40,26680,26681],{},[1443,26682],{"alt":14,"src":26683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[40,26685,26686],{},[1443,26687],{"alt":14,"src":26688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[40,26690,26691],{},[1443,26692],{"alt":14,"src":26693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5108,26695,26696],{},"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":14,"searchDepth":15,"depth":15,"links":26698},[26699,26700,26701],{"id":25976,"depth":1160,"text":25977},{"id":26448,"depth":1160,"text":26449},{"id":26652,"depth":1160,"text":26653},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25968,"description":14},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26708,"title":26709,"body":26710,"description":26717,"extension":18,"meta":27410,"navigation":20,"path":27411,"seo":27412,"stem":27413,"__hash__":27414},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26711,"toc":27404},[26712,26715,26718,26722,26727,26732,26735,26763,26768,26777,26780,26785,26789,26796,26801,26807,26811,26814,26818,26823,26915,26920,26938,26943,26964,26969,26985,26989,26994,27023,27028,27074,27079,27123,27131,27148,27153,27169,27174,27188,27191,27194,27197,27200,27229,27232,27237,27241,27244,27247,27253,27256,27259,27262,27324,27331,27336,27339,27357,27361,27364,27381,27384,27387,27401],[10,26713,26709],{"id":26714},"_3docker直通",[40,26716,26717],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[65,26719,26721],{"id":26720},"_31usb直通","3.1.USB直通",[40,26723,26724],{},[1443,26725],{"alt":14,"src":26726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[48,26728,26729],{},[51,26730,26731],{},"方法一(不是很推荐新手)：",[40,26733,26734],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[85,26736,26738],{"className":23804,"code":26737,"language":23806,"meta":14,"style":14},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[91,26739,26740,26748,26753],{"__ignoreMap":14},[94,26741,26742,26745],{"class":96,"line":97},[94,26743,26744],{"class":1944},"ls",[94,26746,26747],{"class":209}," \u002Fdev\n",[94,26749,26750],{"class":96,"line":15},[94,26751,26752],{"class":163},"#例如\n",[94,26754,26755,26758,26760],{"class":96,"line":1160},[94,26756,26757],{"class":104},"--device",[94,26759,150],{"class":100},[94,26761,26762],{"class":209},"\u002Fdev\u002Ftty_USB0\n",[48,26764,26765],{"start":15},[51,26766,26767],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[85,26769,26771],{"className":23804,"code":26770,"language":23806,"meta":14,"style":14},"--privileged\n",[91,26772,26773],{"__ignoreMap":14},[94,26774,26775],{"class":96,"line":97},[94,26776,26770],{"class":1944},[40,26778,26779],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[40,26781,26782],{},[1443,26783],{"alt":14,"src":26784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[65,26786,26788],{"id":26787},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[40,26790,26791,26792,26795],{},"NVIDIA Container Toolkit使用户 ",[254,26793,26794],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[40,26797,26798],{},[1443,26799],{"alt":14,"src":26800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[40,26802,26803],{},[343,26804,26805],{"href":26805,"rel":26806},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23847],[21980,26808,26810],{"id":26809},"_321安装","3.2.1.安装",[40,26812,26813],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22892,26815,26817],{"id":26816},"_3211ubuntu","3.2.1.1.Ubuntu",[48,26819,26820],{},[51,26821,26822],{},"配置存储库 并更新",[85,26824,26826],{"className":23804,"code":26825,"language":23806,"meta":14,"style":14},"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",[91,26827,26828,26857,26877,26889,26901,26907],{"__ignoreMap":14},[94,26829,26830,26833,26836,26839,26841,26843,26846,26849,26852,26855],{"class":96,"line":97},[94,26831,26832],{"class":1944},"curl",[94,26834,26835],{"class":153}," -fsSL",[94,26837,26838],{"class":209}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[94,26840,25092],{"class":100},[94,26842,26056],{"class":1944},[94,26844,26845],{"class":209}," gpg",[94,26847,26848],{"class":153}," --dearmor",[94,26850,26851],{"class":153}," -o",[94,26853,26854],{"class":209}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[94,26856,24661],{"class":153},[94,26858,26859,26862,26864,26867,26870,26873,26875],{"class":96,"line":15},[94,26860,26861],{"class":104},"  && ",[94,26863,26832],{"class":1944},[94,26865,26866],{"class":153}," -s",[94,26868,26869],{"class":153}," -L",[94,26871,26872],{"class":209}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[94,26874,25092],{"class":100},[94,26876,24661],{"class":153},[94,26878,26879,26882,26885,26887],{"class":96,"line":1160},[94,26880,26881],{"class":1944},"    sed",[94,26883,26884],{"class":209}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[94,26886,25092],{"class":100},[94,26888,24661],{"class":153},[94,26890,26891,26894,26896,26899],{"class":96,"line":1175},[94,26892,26893],{"class":1944},"    sudo",[94,26895,26199],{"class":209},[94,26897,26898],{"class":209}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[94,26900,24661],{"class":153},[94,26902,26903,26905],{"class":96,"line":1181},[94,26904,26861],{"class":104},[94,26906,26158],{"class":153},[94,26908,26909,26911,26913],{"class":96,"line":1195},[94,26910,26893],{"class":1944},[94,26912,26059],{"class":209},[94,26914,26225],{"class":209},[48,26916,26917],{"start":15},[51,26918,26919],{},"安装nvidia-docker2",[85,26921,26923],{"className":23804,"code":26922,"language":23806,"meta":14,"style":14},"sudo apt-get install -y nvidia-docker2\n",[91,26924,26925],{"__ignoreMap":14},[94,26926,26927,26929,26931,26933,26935],{"class":96,"line":97},[94,26928,24559],{"class":1944},[94,26930,26059],{"class":209},[94,26932,23816],{"class":209},[94,26934,26383],{"class":153},[94,26936,26937],{"class":209}," nvidia-docker2\n",[48,26939,26940],{"start":1160},[51,26941,26942],{},"使用nvidia-ctk命令配置container runtime",[85,26944,26946],{"className":23804,"code":26945,"language":23806,"meta":14,"style":14},"sudo nvidia-ctk runtime configure --runtime=docker\n",[91,26947,26948],{"__ignoreMap":14},[94,26949,26950,26952,26955,26958,26961],{"class":96,"line":97},[94,26951,24559],{"class":1944},[94,26953,26954],{"class":209}," nvidia-ctk",[94,26956,26957],{"class":209}," runtime",[94,26959,26960],{"class":209}," configure",[94,26962,26963],{"class":153}," --runtime=docker\n",[48,26965,26966],{"start":1175},[51,26967,26968],{},"重启docker服务:",[85,26970,26972],{"className":23804,"code":26971,"language":23806,"meta":14,"style":14},"sudo systemctl restart docker\n",[91,26973,26974],{"__ignoreMap":14},[94,26975,26976,26978,26980,26983],{"class":96,"line":97},[94,26977,24559],{"class":1944},[94,26979,26496],{"class":209},[94,26981,26982],{"class":209}," restart",[94,26984,26475],{"class":209},[22892,26986,26988],{"id":26987},"_3212fedora","3.2.1.2.Fedora",[48,26990,26991],{},[51,26992,26993],{},"配置存储库",[85,26995,26997],{"className":23804,"code":26996,"language":23806,"meta":14,"style":14},"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",[91,26998,26999,27014],{"__ignoreMap":14},[94,27000,27001,27003,27005,27007,27010,27012],{"class":96,"line":97},[94,27002,26832],{"class":1944},[94,27004,26866],{"class":153},[94,27006,26869],{"class":153},[94,27008,27009],{"class":209}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[94,27011,25092],{"class":100},[94,27013,24661],{"class":153},[94,27015,27016,27018,27020],{"class":96,"line":15},[94,27017,24559],{"class":1944},[94,27019,26199],{"class":209},[94,27021,27022],{"class":209}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[48,27024,27025],{"start":15},[51,27026,27027],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[85,27029,27031],{"className":23804,"code":27030,"language":23806,"meta":14,"style":14},"# 如果是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",[91,27032,27033,27038,27052,27056,27061],{"__ignoreMap":14},[94,27034,27035],{"class":96,"line":97},[94,27036,27037],{"class":163},"# 如果是RHEL或者Rocky（DNF4）\n",[94,27039,27040,27042,27044,27046,27049],{"class":96,"line":15},[94,27041,24559],{"class":1944},[94,27043,26298],{"class":209},[94,27045,26397],{"class":209},[94,27047,27048],{"class":153}," --add-repo",[94,27050,27051],{"class":209}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[94,27053,27054],{"class":96,"line":1160},[94,27055,2381],{"emptyLinePlaceholder":20},[94,27057,27058],{"class":96,"line":1175},[94,27059,27060],{"class":163},"# 如果是Feodra41+（DNF5）\n",[94,27062,27063,27065,27067,27069,27071],{"class":96,"line":1181},[94,27064,24559],{"class":1944},[94,27066,26298],{"class":209},[94,27068,26397],{"class":209},[94,27070,26400],{"class":209},[94,27072,27073],{"class":153}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[48,27075,27076],{"start":1160},[51,27077,27078],{},"安装NVIDIA Container Toolki包",[85,27080,27082],{"className":23804,"code":27081,"language":23806,"meta":14,"style":14},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[91,27083,27084,27089,27102,27106,27111],{"__ignoreMap":14},[94,27085,27086],{"class":96,"line":97},[94,27087,27088],{"class":163},"# 如果是RHEL或者Rocky\n",[94,27090,27091,27093,27095,27097,27099],{"class":96,"line":15},[94,27092,24559],{"class":1944},[94,27094,26298],{"class":209},[94,27096,23816],{"class":209},[94,27098,26383],{"class":153},[94,27100,27101],{"class":209}," nvidia-container-toolkit\n",[94,27103,27104],{"class":96,"line":1160},[94,27105,2381],{"emptyLinePlaceholder":20},[94,27107,27108],{"class":96,"line":1175},[94,27109,27110],{"class":163},"# 如果是Fedora\n",[94,27112,27113,27115,27117,27119,27121],{"class":96,"line":1181},[94,27114,24559],{"class":1944},[94,27116,26298],{"class":209},[94,27118,23816],{"class":209},[94,27120,26383],{"class":153},[94,27122,27101],{"class":209},[48,27124,27125],{"start":1175},[51,27126,27127,27128,27130],{},"安装nvidia-docker2 ： 在Fedora上使用",[91,27129,26273],{},"进行安装",[85,27132,27134],{"className":23804,"code":27133,"language":23806,"meta":14,"style":14},"sudo dnf install -y nvidia-docker2\n",[91,27135,27136],{"__ignoreMap":14},[94,27137,27138,27140,27142,27144,27146],{"class":96,"line":97},[94,27139,24559],{"class":1944},[94,27141,26298],{"class":209},[94,27143,23816],{"class":209},[94,27145,26383],{"class":153},[94,27147,26937],{"class":209},[48,27149,27150],{"start":1181},[51,27151,27152],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[85,27154,27155],{"className":23804,"code":26945,"language":23806,"meta":14,"style":14},[91,27156,27157],{"__ignoreMap":14},[94,27158,27159,27161,27163,27165,27167],{"class":96,"line":97},[94,27160,24559],{"class":1944},[94,27162,26954],{"class":209},[94,27164,26957],{"class":209},[94,27166,26960],{"class":209},[94,27168,26963],{"class":153},[48,27170,27171],{"start":1195},[51,27172,27173],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[85,27175,27176],{"className":23804,"code":26971,"language":23806,"meta":14,"style":14},[91,27177,27178],{"__ignoreMap":14},[94,27179,27180,27182,27184,27186],{"class":96,"line":97},[94,27181,24559],{"class":1944},[94,27183,26496],{"class":209},[94,27185,26982],{"class":209},[94,27187,26475],{"class":209},[40,27189,27190],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[40,27192,27193],{},"方法：",[40,27195,27196],{},"1️⃣nvidia-smi",[40,27198,27199],{},"2️⃣运行nvidia cuda 容器进行测试",[85,27201,27203],{"className":23804,"code":27202,"language":23806,"meta":14,"style":14},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[91,27204,27205],{"__ignoreMap":14},[94,27206,27207,27209,27211,27214,27217,27220,27223,27226],{"class":96,"line":97},[94,27208,24559],{"class":1944},[94,27210,26303],{"class":209},[94,27212,27213],{"class":209}," run",[94,27215,27216],{"class":153}," --rm",[94,27218,27219],{"class":153}," --gpus",[94,27221,27222],{"class":209}," all",[94,27224,27225],{"class":209}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[94,27227,27228],{"class":209}," nvidia-smi\n",[40,27230,27231],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[40,27233,27234],{},[1443,27235],{"alt":14,"src":27236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[65,27238,27240],{"id":27239},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[40,27242,27243],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[40,27245,27246],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[40,27248,27249],{},[343,27250,27251],{"href":27251,"rel":27252},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23847],[40,27254,27255],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[40,27257,27258],{},"我们只需要找到对应的Docker镜像当底包即可。",[40,27260,27261],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[242,27263,27264,27280],{},[245,27265,27266],{},[248,27267,27268,27271,27274,27277],{},[251,27269,27270],{"align":23718},"镜像类型",[251,27272,27273],{"align":23718},"适用场景",[251,27275,27276],{"align":23718},"示例标签",[251,27278,27279],{"align":23718},"大小",[289,27281,27282,27296,27310],{},[248,27283,27284,27287,27290,27293],{},[294,27285,27286],{"align":23718},"base",[294,27288,27289],{"align":23718},"仅需 CUDA 运行时库",[294,27291,27292],{"align":23718},"12.4.0-base-ubuntu22.04",[294,27294,27295],{"align":23718},"~240MB",[248,27297,27298,27301,27304,27307],{},[294,27299,27300],{"align":23718},"runtime",[294,27302,27303],{"align":23718},"部署编译后的应用（含数学库）",[294,27305,27306],{"align":23718},"12.4.0-runtime-ubuntu22.04",[294,27308,27309],{"align":23718},"~2GB",[248,27311,27312,27315,27318,27321],{},[294,27313,27314],{"align":23718},"devel",[294,27316,27317],{"align":23718},"开发环境（含编译工具）",[294,27319,27320],{"align":23718},"12.4.0-devel-ubuntu22.04",[294,27322,27323],{"align":23718},"~3GB",[40,27325,27326,27327,27330],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[91,27328,27329],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[40,27332,27333],{},[1443,27334],{"alt":14,"src":27335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[40,27337,27338],{},"在dockerfile里就可以开头这么写：",[85,27340,27342],{"className":23804,"code":27341,"language":23806,"meta":14,"style":14},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[91,27343,27344,27349],{"__ignoreMap":14},[94,27345,27346],{"class":96,"line":97},[94,27347,27348],{"class":163},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[94,27350,27351,27354],{"class":96,"line":15},[94,27352,27353],{"class":1944},"FROM",[94,27355,27356],{"class":209}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[65,27358,27360],{"id":27359},"_34配置以太网","3.4.配置以太网",[40,27362,27363],{},"指定网络模式",[85,27365,27367],{"className":23804,"code":27366,"language":23806,"meta":14,"style":14},"--net=host \\\n",[91,27368,27369],{"__ignoreMap":14},[94,27370,27371,27374,27376,27379],{"class":96,"line":97},[94,27372,27373],{"class":104},"--net",[94,27375,150],{"class":100},[94,27377,27378],{"class":209},"host",[94,27380,24661],{"class":1944},[40,27382,27383],{},"启动参数里加上这行即可。具体在下方",[40,27385,27386],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1112,27388,27389,27392,27395,27398],{},[51,27390,27391],{},"--net=bridge:默认选项，表示连接到默认的网桥",[51,27393,27394],{},"--net=host:容器使用宿主机的网络",[51,27396,27397],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[51,27399,27400],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5108,27402,27403],{},"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":14,"searchDepth":15,"depth":15,"links":27405},[27406,27407,27408,27409],{"id":26720,"depth":1160,"text":26721},{"id":26787,"depth":1160,"text":26788},{"id":27239,"depth":1160,"text":27240},{"id":27359,"depth":1160,"text":27360},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26709,"description":26717},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27416,"title":27417,"body":27418,"description":27425,"extension":18,"meta":27431,"navigation":20,"path":27432,"seo":27433,"stem":27434,"__hash__":27435},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27419,"toc":27429},[27420,27423,27426],[10,27421,27417],{"id":27422},"_4dockerhub换源",[40,27424,27425],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[40,27427,27428],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":14,"searchDepth":15,"depth":15,"links":27430},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27417,"description":27425},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27437,"title":27438,"body":27439,"description":14,"extension":18,"meta":28451,"navigation":20,"path":28452,"seo":28453,"stem":28454,"__hash__":28455},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27440,"toc":28446},[27441,27444,27448,27454,27458,27461,27801,27804,27807,27810,27815,27820,27823,27826,27829,27832,27851,27854,27865,27871,28053,28063,28079,28342,28344,28369,28384,28393,28443],[10,27442,27438],{"id":27443},"_5docker命令学习",[65,27445,27447],{"id":27446},"_51参考文档","5.1.参考文档",[40,27449,27450],{},[343,27451,27452],{"href":27452,"rel":27453},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23847],[65,27455,27457],{"id":27456},"_52常用命令","5.2.常用命令",[40,27459,27460],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[242,27462,27463,27476],{},[245,27464,27465],{},[248,27466,27467,27470,27473],{},[251,27468,27469],{"align":23718},"命令",[251,27471,27472],{"align":23718},"描述",[251,27474,27475],{"align":23718},"示例",[289,27477,27478,27489,27500,27511,27522,27533,27544,27555,27565,27576,27587,27598,27608,27619,27630,27641,27651,27661,27671,27681,27692,27703,27714,27725,27736,27747,27757,27768,27779,27790],{},[248,27479,27480,27483,27486],{},[294,27481,27482],{"align":23718},"docker run",[294,27484,27485],{"align":23718},"创建并启动一个新的容器。",[294,27487,27488],{"align":23718},"docker run -it ubuntu bash",[248,27490,27491,27494,27497],{},[294,27492,27493],{"align":23718},"docker build",[294,27495,27496],{"align":23718},"通过指定的 Dockerfile 创建一个新的镜像。",[294,27498,27499],{"align":23718},"docker build -t myimage .",[248,27501,27502,27505,27508],{},[294,27503,27504],{"align":23718},"docker pull",[294,27506,27507],{"align":23718},"从 Docker 仓库拉取镜像。",[294,27509,27510],{"align":23718},"docker pull ubuntu",[248,27512,27513,27516,27519],{},[294,27514,27515],{"align":23718},"docker push",[294,27517,27518],{"align":23718},"将本地镜像推送到 Docker 仓库。",[294,27520,27521],{"align":23718},"docker push myimage",[248,27523,27524,27527,27530],{},[294,27525,27526],{"align":23718},"docker stop",[294,27528,27529],{"align":23718},"停止一个正在运行的容器。",[294,27531,27532],{"align":23718},"docker stop container_id",[248,27534,27535,27538,27541],{},[294,27536,27537],{"align":23718},"docker start",[294,27539,27540],{"align":23718},"启动一个已经存在的容器。",[294,27542,27543],{"align":23718},"docker start container_id",[248,27545,27546,27549,27552],{},[294,27547,27548],{"align":23718},"docker restart",[294,27550,27551],{"align":23718},"重新启动容器。",[294,27553,27554],{"align":23718},"docker restart container_id",[248,27556,27557,27560,27563],{},[294,27558,27559],{"align":23718},"docker ps",[294,27561,27562],{"align":23718},"列出当前正在运行的容器。",[294,27564,27559],{"align":23718},[248,27566,27567,27570,27573],{},[294,27568,27569],{"align":23718},"docker rm",[294,27571,27572],{"align":23718},"删除一个或多个停止的容器。",[294,27574,27575],{"align":23718},"docker rm container_id",[248,27577,27578,27581,27584],{},[294,27579,27580],{"align":23718},"docker exec",[294,27582,27583],{"align":23718},"在一个正在运行的容器中执行命令。",[294,27585,27586],{"align":23718},"docker exec -it container_id bash",[248,27588,27589,27592,27595],{},[294,27590,27591],{"align":23718},"docker logs",[294,27593,27594],{"align":23718},"查看容器的日志输出。",[294,27596,27597],{"align":23718},"docker logs container_id",[248,27599,27600,27603,27606],{},[294,27601,27602],{"align":23718},"docker images",[294,27604,27605],{"align":23718},"列出本地所有镜像。",[294,27607,27602],{"align":23718},[248,27609,27610,27613,27616],{},[294,27611,27612],{"align":23718},"docker rmi",[294,27614,27615],{"align":23718},"删除一个或多个镜像。",[294,27617,27618],{"align":23718},"docker rmi myimage",[248,27620,27621,27624,27627],{},[294,27622,27623],{"align":23718},"docker network",[294,27625,27626],{"align":23718},"管理 Docker 网络。",[294,27628,27629],{"align":23718},"docker network ls",[248,27631,27632,27635,27638],{},[294,27633,27634],{"align":23718},"docker volume",[294,27636,27637],{"align":23718},"管理 Docker 数据卷。",[294,27639,27640],{"align":23718},"docker volume ls",[248,27642,27643,27646,27649],{},[294,27644,27645],{"align":23718},"docker-compose up",[294,27647,27648],{"align":23718},"启动 docker-compose.yml 中定义的所有服务。",[294,27650,27645],{"align":23718},[248,27652,27653,27656,27659],{},[294,27654,27655],{"align":23718},"docker-compose down",[294,27657,27658],{"align":23718},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[294,27660,27655],{"align":23718},[248,27662,27663,27666,27669],{},[294,27664,27665],{"align":23718},"docker info",[294,27667,27668],{"align":23718},"显示 Docker 系统的详细信息。",[294,27670,27665],{"align":23718},[248,27672,27673,27676,27679],{},[294,27674,27675],{"align":23718},"docker stats",[294,27677,27678],{"align":23718},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[294,27680,27675],{"align":23718},[248,27682,27683,27686,27689],{},[294,27684,27685],{"align":23718},"docker inspect",[294,27687,27688],{"align":23718},"查看容器或镜像的详细信息（JSON 格式）。",[294,27690,27691],{"align":23718},"docker inspect container_id",[248,27693,27694,27697,27700],{},[294,27695,27696],{"align":23718},"docker save",[294,27698,27699],{"align":23718},"将一个镜像保存为 tar 文件。",[294,27701,27702],{"align":23718},"docker save -o myimage.tar myimage",[248,27704,27705,27708,27711],{},[294,27706,27707],{"align":23718},"docker load",[294,27709,27710],{"align":23718},"从 tar 文件中加载镜像。",[294,27712,27713],{"align":23718},"docker load -i myimage.tar",[248,27715,27716,27719,27722],{},[294,27717,27718],{"align":23718},"docker tag",[294,27720,27721],{"align":23718},"为镜像添加标签（tag）。",[294,27723,27724],{"align":23718},"docker tag myimage myimage:v1",[248,27726,27727,27730,27733],{},[294,27728,27729],{"align":23718},"docker buildx build",[294,27731,27732],{"align":23718},"使用 Buildx 构建多架构镜像。",[294,27734,27735],{"align":23718},"docker buildx build -t myimage .",[248,27737,27738,27741,27744],{},[294,27739,27740],{"align":23718},"docker buildx create",[294,27742,27743],{"align":23718},"创建一个新的 Buildx 构建实例。",[294,27745,27746],{"align":23718},"docker buildx create –use",[248,27748,27749,27752,27755],{},[294,27750,27751],{"align":23718},"docker buildx ls",[294,27753,27754],{"align":23718},"列出所有可用的 Buildx 构建实例。",[294,27756,27751],{"align":23718},[248,27758,27759,27762,27765],{},[294,27760,27761],{"align":23718},"docker buildx use",[294,27763,27764],{"align":23718},"设置当前的 Buildx 构建实例。",[294,27766,27767],{"align":23718},"docker buildx use mybuilder",[248,27769,27770,27773,27776],{},[294,27771,27772],{"align":23718},"docker buildx bake",[294,27774,27775],{"align":23718},"使用 Bake 文件批量构建镜像。",[294,27777,27778],{"align":23718},"docker buildx bake -f bake.hcl",[248,27780,27781,27784,27787],{},[294,27782,27783],{"align":23718},"docker buildx build –push",[294,27785,27786],{"align":23718},"构建镜像并推送到镜像仓库。",[294,27788,27789],{"align":23718},"docker buildx build –push -t myimage .",[248,27791,27792,27795,27798],{},[294,27793,27794],{"align":23718},"docker buildx build –platform",[294,27796,27797],{"align":23718},"构建镜像并为多个平台生成支持。",[294,27799,27800],{"align":23718},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[40,27802,27803],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[40,27805,27806],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[40,27808,27809],{},"docker images 可以查看已经下载的镜像",[40,27811,27812],{},[1443,27813],{"alt":14,"src":27814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[40,27816,27817],{},[254,27818,27819],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[40,27821,27822],{},"docker rmi $(docker images -q) 删除所有的镜像",[40,27824,27825],{},"docker container logs 查看容器日志",[40,27827,27828],{},"docker top 查看容器里的进程",[40,27830,27831],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[85,27833,27835],{"className":23804,"code":27834,"language":23806,"meta":14,"style":14},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[91,27836,27837],{"__ignoreMap":14},[94,27838,27839,27842,27845,27848],{"class":96,"line":97},[94,27840,27841],{"class":1944},"如：docker",[94,27843,27844],{"class":209}," cp",[94,27846,27847],{"class":209}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[94,27849,27850],{"class":209}," \u002Fmydata\u002Fnginx\n",[40,27852,27853],{},"docker run时在启动容器的时候会有几个常用的选项：",[1112,27855,27856,27859,27862],{},[51,27857,27858],{},"-d选项：表示后台运行",[51,27860,27861],{},"-P选项：随机端口映射",[51,27863,27864],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[65,27866,27868],{"id":27867},"_53run命令的参数非常重要",[254,27869,27870],{},"5.3.run命令的参数（非常重要）",[242,27872,27873,27886],{},[245,27874,27875],{},[248,27876,27877,27880,27883],{},[251,27878,27879],{"align":23718},"参数\u002F配置",[251,27881,27882],{"align":23718},"功能说明",[251,27884,27885],{"align":23718},"重要性与参考依据",[289,27887,27888,27899,27910,27921,27932,27943,27954,27965,27976,27987,27998,28009,28020,28031,28042],{},[248,27889,27890,27893,27896],{},[294,27891,27892],{"align":23718},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[294,27894,27895],{"align":23718},"指定容器名称，便于后续管理",[294,27897,27898],{"align":23718},"替代随机生成的容器名。",[248,27900,27901,27904,27907],{},[294,27902,27903],{"align":23718},"–gpus all",[294,27905,27906],{"align":23718},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[294,27908,27909],{"align":23718},"用于CUDA加速等GPU依赖任务。",[248,27911,27912,27915,27918],{},[294,27913,27914],{"align":23718},"-e NVIDIA_DRIVER_CAPABILITIES=all",[294,27916,27917],{"align":23718},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[294,27919,27920],{"align":23718},"确保容器内GPU功能完整67。",[248,27922,27923,27926,27929],{},[294,27924,27925],{"align":23718},"-dit",[294,27927,27928],{"align":23718},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[294,27930,27931],{"align":23718},"允许容器在后台运行并支持交互操作。",[248,27933,27934,27937,27940],{},[294,27935,27936],{"align":23718},"–privileged",[294,27938,27939],{"align":23718},"赋予容器完全主机权限（可访问设备、内核模块等）",[294,27941,27942],{"align":23718},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[248,27944,27945,27948,27951],{},[294,27946,27947],{"align":23718},"–net=host",[294,27949,27950],{"align":23718},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[294,27952,27953],{"align":23718},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[248,27955,27956,27959,27962],{},[294,27957,27958],{"align":23718},"–group-add audio–group-add video–group-add dialout",[294,27960,27961],{"align":23718},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[294,27963,27964],{"align":23718},"避免权限问题（如避免无法调用摄像头、麦克风）。",[248,27966,27967,27970,27973],{},[294,27968,27969],{"align":23718},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[294,27971,27972],{"align":23718},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[294,27974,27975],{"align":23718},"支持容器内运行图形界面应用（如OpenCV可视化）。",[248,27977,27978,27981,27984],{},[294,27979,27980],{"align":23718},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[294,27982,27983],{"align":23718},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[294,27985,27986],{"align":23718},"实现容器内图形显示。",[248,27988,27989,27992,27995],{},[294,27990,27991],{"align":23718},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[294,27993,27994],{"align":23718},"挂载X11认证文件（只读）",[294,27996,27997],{"align":23718},"确保容器有权连接宿主机显示服务。",[248,27999,28000,28003,28006],{},[294,28001,28002],{"align":23718},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[294,28004,28005],{"align":23718},"挂载Wayland显示协议相关目录",[294,28007,28008],{"align":23718},"支持Wayland协议的图形显示。",[248,28010,28011,28014,28017],{},[294,28012,28013],{"align":23718},"–ulimit nofile=1024:524288",[294,28015,28016],{"align":23718},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[294,28018,28019],{"align":23718},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[248,28021,28022,28025,28028],{},[294,28023,28024],{"align":23718},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[294,28026,28027],{"align":23718},"挂载宿主机用户目录到容器内同名路径",[294,28029,28030],{"align":23718},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[248,28032,28033,28036,28039],{},[294,28034,28035],{"align":23718},"-w \u002Fhome\u002Ftungchiahui",[294,28037,28038],{"align":23718},"设置容器启动后的默认工作目录",[294,28040,28041],{"align":23718},"直接进入项目路径，方便执行命令2324。",[248,28043,28044,28047,28050],{},[294,28045,28046],{"align":23718},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[294,28048,28049],{"align":23718},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[294,28051,28052],{"align":23718},"提供预配置的深度学习与机器人开发环境。",[40,28054,28055,28056,28058,28059,28062],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[91,28057,24559],{},"加不加",[91,28060,28061],{},"sudo -E","都无所谓。",[40,28064,28065,28066,28068,28069,28071,28072,28075,28076,28078],{},"用户已经被加到docker组了，不用",[91,28067,24559],{},"也行跑，其次，",[91,28070,24559],{},"运行的话，你的",[91,28073,28074],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[91,28077,28074],{},"更不可能变了。",[85,28080,28082],{"className":23804,"code":28081,"language":23806,"meta":14,"style":14},"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",[91,28083,28084,28097,28107,28117,28129,28136,28143,28150,28160,28169,28178,28192,28204,28216,28225,28235,28244,28259,28292,28319,28330,28337],{"__ignoreMap":14},[94,28085,28086,28088,28090,28092,28095],{"class":96,"line":97},[94,28087,24559],{"class":1944},[94,28089,26303],{"class":209},[94,28091,27213],{"class":209},[94,28093,28094],{"class":153}," --name=ros_opencv_cuda",[94,28096,24661],{"class":153},[94,28098,28099,28102,28105],{"class":96,"line":15},[94,28100,28101],{"class":104},"--gpus ",[94,28103,28104],{"class":209},"all",[94,28106,24661],{"class":153},[94,28108,28109,28112,28115],{"class":96,"line":1160},[94,28110,28111],{"class":104},"-e ",[94,28113,28114],{"class":209},"NVIDIA_DRIVER_CAPABILITIES=all",[94,28116,24661],{"class":153},[94,28118,28119,28121,28124,28127],{"class":96,"line":1175},[94,28120,28111],{"class":104},[94,28122,28123],{"class":209},"DISPLAY=",[94,28125,28126],{"class":104},"$DISPLAY ",[94,28128,26158],{"class":153},[94,28130,28131,28134],{"class":96,"line":1181},[94,28132,28133],{"class":104},"-dit ",[94,28135,26158],{"class":153},[94,28137,28138,28141],{"class":96,"line":1195},[94,28139,28140],{"class":104},"--privileged ",[94,28142,26158],{"class":153},[94,28144,28145,28148],{"class":96,"line":1201},[94,28146,28147],{"class":104},"--net=host ",[94,28149,26158],{"class":153},[94,28151,28152,28155,28158],{"class":96,"line":1292},[94,28153,28154],{"class":104},"--group-add ",[94,28156,28157],{"class":209},"audio",[94,28159,24661],{"class":153},[94,28161,28162,28164,28167],{"class":96,"line":1298},[94,28163,28154],{"class":104},[94,28165,28166],{"class":209},"video",[94,28168,24661],{"class":153},[94,28170,28171,28173,28176],{"class":96,"line":1310},[94,28172,28154],{"class":104},[94,28174,28175],{"class":209},"dialout",[94,28177,24661],{"class":153},[94,28179,28180,28182,28185,28187,28190],{"class":96,"line":1593},[94,28181,28111],{"class":104},[94,28183,28184],{"class":209},"XAUTHORITY=",[94,28186,28074],{"class":104},[94,28188,28189],{"class":209},"\u002F.Xauthority",[94,28191,24661],{"class":153},[94,28193,28194,28196,28199,28202],{"class":96,"line":1598},[94,28195,28111],{"class":104},[94,28197,28198],{"class":209},"WAYLAND_DISPLAY=",[94,28200,28201],{"class":104},"$WAYLAND_DISPLAY ",[94,28203,26158],{"class":153},[94,28205,28206,28208,28211,28214],{"class":96,"line":1604},[94,28207,28111],{"class":104},[94,28209,28210],{"class":209},"XDG_RUNTIME_DIR=",[94,28212,28213],{"class":104},"$XDG_RUNTIME_DIR ",[94,28215,26158],{"class":153},[94,28217,28218,28220,28223],{"class":96,"line":1609},[94,28219,28111],{"class":104},[94,28221,28222],{"class":209},"QT_QPA_PLATFORM=xcb",[94,28224,24661],{"class":153},[94,28226,28227,28230,28233],{"class":96,"line":1623},[94,28228,28229],{"class":104},"-v ",[94,28231,28232],{"class":209},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[94,28234,24661],{"class":153},[94,28236,28237,28239,28242],{"class":96,"line":1628},[94,28238,28229],{"class":104},[94,28240,28241],{"class":209},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[94,28243,24661],{"class":153},[94,28245,28246,28249,28252,28254,28257],{"class":96,"line":1634},[94,28247,28248],{"class":104},"-v $HOME",[94,28250,28251],{"class":209},"\u002F.Xauthority:",[94,28253,28074],{"class":104},[94,28255,28256],{"class":209},"\u002F.Xauthority:ro",[94,28258,24661],{"class":153},[94,28260,28261,28263,28266,28268,28271,28274,28276,28279,28281,28283,28285,28287,28290],{"class":96,"line":1655},[94,28262,28229],{"class":104},[94,28264,28265],{"class":209},"\u002Frun\u002Fuser\u002F",[94,28267,25082],{"class":104},[94,28269,28270],{"class":1944},"id",[94,28272,28273],{"class":153}," -u",[94,28275,534],{"class":104},[94,28277,28278],{"class":209},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[94,28280,25082],{"class":104},[94,28282,28270],{"class":1944},[94,28284,28273],{"class":153},[94,28286,534],{"class":104},[94,28288,28289],{"class":209},"\u002Fwayland-0",[94,28291,24661],{"class":153},[94,28293,28294,28296,28298,28300,28302,28304,28306,28309,28311,28313,28315,28317],{"class":96,"line":1660},[94,28295,28229],{"class":104},[94,28297,28265],{"class":209},[94,28299,25082],{"class":104},[94,28301,28270],{"class":1944},[94,28303,28273],{"class":153},[94,28305,534],{"class":104},[94,28307,28308],{"class":209},":\u002Frun\u002Fuser\u002F",[94,28310,25082],{"class":104},[94,28312,28270],{"class":1944},[94,28314,28273],{"class":153},[94,28316,13696],{"class":104},[94,28318,26158],{"class":153},[94,28320,28321,28323,28325,28328],{"class":96,"line":1674},[94,28322,28248],{"class":104},[94,28324,964],{"class":209},[94,28326,28327],{"class":104},"$HOME ",[94,28329,26158],{"class":153},[94,28331,28332,28335],{"class":96,"line":1679},[94,28333,28334],{"class":104},"-w $HOME ",[94,28336,26158],{"class":153},[94,28338,28339],{"class":96,"line":1708},[94,28340,28341],{"class":104},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[40,28343,9007],{},[48,28345,28346,28354,28357,28360],{},[51,28347,28348,13777,28350,28353],{},[91,28349,28114],{},[91,28351,28352],{},"--gpus all","没有英伟达显卡请注释。",[51,28355,28356],{},"--name后面请自己为容器起名。",[51,28358,28359],{},"最后一行仓库名称请你自己找对应的镜像填上。",[51,28361,28362,28363,28368],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23535,28364,28365],{},[254,28366,28367],{},"请不要加","。",[85,28370,28372],{"className":23804,"code":28371,"language":23806,"meta":14,"style":14},"--ulimit nofile=1024:524288 \\\n",[91,28373,28374],{"__ignoreMap":14},[94,28375,28376,28379,28382],{"class":96,"line":97},[94,28377,28378],{"class":1944},"--ulimit",[94,28380,28381],{"class":209}," nofile=1024:524288",[94,28383,24661],{"class":153},[40,28385,28386,28387,28392],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23535,28388,28389],{},[254,28390,28391],{},"不建议","**.**",[85,28394,28396],{"className":23804,"code":28395,"language":23806,"meta":14,"style":14},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[91,28397,28398,28425,28434],{"__ignoreMap":14},[94,28399,28400,28403,28406,28408,28410,28412,28414,28416,28418,28421,28423],{"class":96,"line":97},[94,28401,28402],{"class":1944},"--user",[94,28404,28405],{"class":104}," $(",[94,28407,28270],{"class":1944},[94,28409,28273],{"class":153},[94,28411,534],{"class":104},[94,28413,964],{"class":209},[94,28415,25082],{"class":104},[94,28417,28270],{"class":1944},[94,28419,28420],{"class":153}," -g",[94,28422,13696],{"class":104},[94,28424,26158],{"class":153},[94,28426,28427,28429,28432],{"class":96,"line":15},[94,28428,28229],{"class":104},[94,28430,28431],{"class":209},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[94,28433,24661],{"class":153},[94,28435,28436,28438,28441],{"class":96,"line":1160},[94,28437,28229],{"class":104},[94,28439,28440],{"class":209},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[94,28442,24661],{"class":153},[5108,28444,28445],{},"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":14,"searchDepth":15,"depth":15,"links":28447},[28448,28449,28450],{"id":27446,"depth":1160,"text":27447},{"id":27456,"depth":1160,"text":27457},{"id":27867,"depth":1160,"text":27870},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27438,"description":14},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28457,"title":28458,"body":28459,"description":14,"extension":18,"meta":30082,"navigation":20,"path":30083,"seo":30084,"stem":30085,"__hash__":30086},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28460,"toc":30077},[28461,28464,28468,28471,28693,28697,28701,28704,28810,28815,28818,28823,28826,28831,28834,28839,28842,28854,28857,28862,28869,28897,28904,28980,28985,28988,29011,29013,29088,29093,29096,29100,29108,29113,29118,29122,29133,29139,29142,29145,29169,29172,29175,29203,29206,29209,29674,29677,29682,29687,29691,29714,29719,29723,29727,29730,29733,29736,29763,29766,29769,29787,29790,29793,29815,29823,29828,29833,29837,29840,29843,29846,29849,29894,29897,29915,29918,29923,29926,29947,29950,30006,30009,30014,30018,30021,30028,30031,30034,30039,30042,30058,30061,30074],[10,28462,28458],{"id":28463},"_6手动创建docker镜像",[65,28465,28467],{"id":28466},"_61dockerfile","6.1.DockerFile",[40,28469,28470],{},"常用命令：",[242,28472,28473,28484],{},[245,28474,28475],{},[248,28476,28477,28480,28482],{},[251,28478,28479],{"align":23718},"指令",[251,28481,25852],{"align":23718},[251,28483,27475],{"align":23718},[289,28485,28486,28496,28512,28523,28534,28545,28556,28567,28578,28592,28606,28617,28631,28642,28653,28667,28682],{},[248,28487,28488,28490,28493],{},[294,28489,27353],{"align":23718},[294,28491,28492],{"align":23718},"指定基础镜像，是 Dockerfile 的起点",[294,28494,28495],{"align":23718},"FROM ubuntu:22.04",[248,28497,28498,28501,28504],{},[294,28499,28500],{"align":23718},"LABEL",[294,28502,28503],{"align":23718},"添加元数据（如作者、版本等）",[294,28505,28506,28507,28511],{"align":23718},"LABEL maintainer=”",[343,28508,28510],{"href":28509},"mailto:you@example.com","you@example.com","”",[248,28513,28514,28517,28520],{},[294,28515,28516],{"align":23718},"ENV",[294,28518,28519],{"align":23718},"设置环境变量",[294,28521,28522],{"align":23718},"ENV PORT=8080",[248,28524,28525,28528,28531],{},[294,28526,28527],{"align":23718},"ARG",[294,28529,28530],{"align":23718},"构建参数，只在构建期间可用",[294,28532,28533],{"align":23718},"ARG VERSION=1.0",[248,28535,28536,28539,28542],{},[294,28537,28538],{"align":23718},"RUN",[294,28540,28541],{"align":23718},"构建镜像时运行命令",[294,28543,28544],{"align":23718},"RUN apt-get update && apt-get install -y curl",[248,28546,28547,28550,28553],{},[294,28548,28549],{"align":23718},"COPY",[294,28551,28552],{"align":23718},"复制文件到镜像中",[294,28554,28555],{"align":23718},"COPY . \u002Fapp",[248,28557,28558,28561,28564],{},[294,28559,28560],{"align":23718},"ADD",[294,28562,28563],{"align":23718},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[294,28565,28566],{"align":23718},"ADD archive.tar.gz \u002Fdata\u002F",[248,28568,28569,28572,28575],{},[294,28570,28571],{"align":23718},"WORKDIR",[294,28573,28574],{"align":23718},"设置工作目录",[294,28576,28577],{"align":23718},"WORKDIR \u002Fopt",[248,28579,28580,28583,28586],{},[294,28581,28582],{"align":23718},"CMD",[294,28584,28585],{"align":23718},"设置容器启动时默认命令（可被 docker run 覆盖）",[294,28587,28588,28589],{"align":23718},"CMD ",[94,28590,28591],{},"“node”, “index.js”",[248,28593,28594,28597,28600],{},[294,28595,28596],{"align":23718},"ENTRYPOINT",[294,28598,28599],{"align":23718},"设置容器启动时固定命令（通常用于 CLI 工具等）",[294,28601,28602,28603],{"align":23718},"ENTRYPOINT ",[94,28604,28605],{},"“python3”",[248,28607,28608,28611,28614],{},[294,28609,28610],{"align":23718},"EXPOSE",[294,28612,28613],{"align":23718},"声明镜像内服务监听的端口（不会自动映射）",[294,28615,28616],{"align":23718},"EXPOSE 80",[248,28618,28619,28622,28625],{},[294,28620,28621],{"align":23718},"VOLUME",[294,28623,28624],{"align":23718},"声明数据卷挂载点",[294,28626,28627,28628],{"align":23718},"VOLUME ",[94,28629,28630],{},"“\u002Fdata”",[248,28632,28633,28636,28639],{},[294,28634,28635],{"align":23718},"USER",[294,28637,28638],{"align":23718},"设置后续命令执行的用户",[294,28640,28641],{"align":23718},"USER appuser",[248,28643,28644,28647,28650],{},[294,28645,28646],{"align":23718},"ONBUILD",[294,28648,28649],{"align":23718},"当镜像作为其他镜像基础镜像时触发的构建指令",[294,28651,28652],{"align":23718},"ONBUILD COPY . \u002Fsrc",[248,28654,28655,28658,28661],{},[294,28656,28657],{"align":23718},"SHELL",[294,28659,28660],{"align":23718},"更改默认 shell，比如将 sh -c 改为 bash -c",[294,28662,28663,28664],{"align":23718},"SHELL ",[94,28665,28666],{},"“\u002Fbin\u002Fbash”, “-c”",[248,28668,28669,28672,28675],{},[294,28670,28671],{"align":23718},"HEALTHCHECK",[294,28673,28674],{"align":23718},"定义容器运行时的健康检查命令",[294,28676,28677,28678],{"align":23718},"`HEALTHCHECK CMD curl –fail ",[343,28679,28680],{"href":28680,"rel":28681},"http:\u002F\u002Flocalhost:8080",[23847],[248,28683,28684,28687,28690],{},[294,28685,28686],{"align":23718},"STOPSIGNAL",[294,28688,28689],{"align":23718},"容器停止时发送的信号",[294,28691,28692],{"align":23718},"STOPSIGNAL SIGKILL",[65,28694,28696],{"id":28695},"_62自己创建容器","6.2.自己创建容器",[21980,28698,28700],{"id":28699},"_621手动创建","6.2.1.手动创建",[40,28702,28703],{},"在x86电脑上编译x86的：",[85,28705,28707],{"className":23804,"code":28706,"language":23806,"meta":14,"style":14},"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",[91,28708,28709,28725,28729,28742,28746,28759,28763,28776,28780,28793,28797],{"__ignoreMap":14},[94,28710,28711,28713,28716,28719,28722],{"class":96,"line":97},[94,28712,26536],{"class":1944},[94,28714,28715],{"class":209}," build",[94,28717,28718],{"class":153}," -t",[94,28720,28721],{"class":209}," ros-melodic-cuda118-cudnn8-bionic:latest",[94,28723,28724],{"class":209}," .\n",[94,28726,28727],{"class":96,"line":15},[94,28728,2381],{"emptyLinePlaceholder":20},[94,28730,28731,28733,28735,28737,28740],{"class":96,"line":1160},[94,28732,26536],{"class":1944},[94,28734,28715],{"class":209},[94,28736,28718],{"class":153},[94,28738,28739],{"class":209}," ros-noetic-focal:latest",[94,28741,28724],{"class":209},[94,28743,28744],{"class":96,"line":1175},[94,28745,2381],{"emptyLinePlaceholder":20},[94,28747,28748,28750,28752,28754,28757],{"class":96,"line":1181},[94,28749,26536],{"class":1944},[94,28751,28715],{"class":209},[94,28753,28718],{"class":153},[94,28755,28756],{"class":209}," ros-humble-jammy:latest",[94,28758,28724],{"class":209},[94,28760,28761],{"class":96,"line":1195},[94,28762,2381],{"emptyLinePlaceholder":20},[94,28764,28765,28767,28769,28771,28774],{"class":96,"line":1201},[94,28766,26536],{"class":1944},[94,28768,28715],{"class":209},[94,28770,28718],{"class":153},[94,28772,28773],{"class":209}," ros-jazzy-noble:latest",[94,28775,28724],{"class":209},[94,28777,28778],{"class":96,"line":1292},[94,28779,2381],{"emptyLinePlaceholder":20},[94,28781,28782,28784,28786,28788,28791],{"class":96,"line":1298},[94,28783,26536],{"class":1944},[94,28785,28715],{"class":209},[94,28787,28718],{"class":153},[94,28789,28790],{"class":209}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[94,28792,28724],{"class":209},[94,28794,28795],{"class":96,"line":1310},[94,28796,2381],{"emptyLinePlaceholder":20},[94,28798,28799,28801,28803,28805,28808],{"class":96,"line":1593},[94,28800,26536],{"class":1944},[94,28802,28715],{"class":209},[94,28804,28718],{"class":153},[94,28806,28807],{"class":209}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[94,28809,28724],{"class":209},[40,28811,28812],{},[1443,28813],{"alt":14,"src":28814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[40,28816,28817],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[40,28819,28820],{},[1443,28821],{"alt":14,"src":28822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[40,28824,28825],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[48,28827,28828],{},[51,28829,28830],{},"创建 Docker Hub 账户",[40,28832,28833],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[48,28835,28836],{"start":15},[51,28837,28838],{},"登录 Docker Hub",[40,28840,28841],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[85,28843,28845],{"className":23804,"code":28844,"language":23806,"meta":14,"style":14},"docker login\n",[91,28846,28847],{"__ignoreMap":14},[94,28848,28849,28851],{"class":96,"line":97},[94,28850,26536],{"class":1944},[94,28852,28853],{"class":209}," login\n",[40,28855,28856],{},"输入你的 Docker Hub 用户名和密码进行验证。",[48,28858,28859],{},[51,28860,28861],{},"为你的镜像打标签",[40,28863,28864,28865,28868],{},"Docker Hub 使用 ",[91,28866,28867],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[85,28870,28872],{"className":23804,"code":28871,"language":23806,"meta":14,"style":14},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[91,28873,28874],{"__ignoreMap":14},[94,28875,28876,28878,28881,28883,28886,28889,28892,28894],{"class":96,"line":97},[94,28877,26536],{"class":1944},[94,28879,28880],{"class":209}," tag",[94,28882,28773],{"class":209},[94,28884,28885],{"class":100}," \u003C",[94,28887,28888],{"class":209},"你的用户",[94,28890,28891],{"class":104},"名",[94,28893,1065],{"class":100},[94,28895,28896],{"class":209},"\u002Fros-jazzy-noble:latest\n",[40,28898,28899,28900,28903],{},"例如，如果你的 Docker Hub 用户名是 ",[91,28901,28902],{},"tungchiahui","，你应该执行：",[85,28905,28907],{"className":23804,"code":28906,"language":23806,"meta":14,"style":14},"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",[91,28908,28909,28920,28924,28935,28939,28950,28954,28965,28969],{"__ignoreMap":14},[94,28910,28911,28913,28915,28917],{"class":96,"line":97},[94,28912,26536],{"class":1944},[94,28914,28880],{"class":209},[94,28916,28739],{"class":209},[94,28918,28919],{"class":209}," tungchiahui\u002Fros-noetic-focal:latest\n",[94,28921,28922],{"class":96,"line":15},[94,28923,2381],{"emptyLinePlaceholder":20},[94,28925,28926,28928,28930,28932],{"class":96,"line":1160},[94,28927,26536],{"class":1944},[94,28929,28880],{"class":209},[94,28931,28756],{"class":209},[94,28933,28934],{"class":209}," tungchiahui\u002Fros-humble-jammy:latest\n",[94,28936,28937],{"class":96,"line":1175},[94,28938,2381],{"emptyLinePlaceholder":20},[94,28940,28941,28943,28945,28947],{"class":96,"line":1181},[94,28942,26536],{"class":1944},[94,28944,28880],{"class":209},[94,28946,28773],{"class":209},[94,28948,28949],{"class":209}," tungchiahui\u002Fros-jazzy-noble:latest\n",[94,28951,28952],{"class":96,"line":1195},[94,28953,2381],{"emptyLinePlaceholder":20},[94,28955,28956,28958,28960,28962],{"class":96,"line":1201},[94,28957,26536],{"class":1944},[94,28959,28880],{"class":209},[94,28961,28790],{"class":209},[94,28963,28964],{"class":209}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[94,28966,28967],{"class":96,"line":1292},[94,28968,2381],{"emptyLinePlaceholder":20},[94,28970,28971,28973,28975,28977],{"class":96,"line":1298},[94,28972,26536],{"class":1944},[94,28974,28880],{"class":209},[94,28976,28807],{"class":209},[94,28978,28979],{"class":209}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[48,28981,28982],{"start":15},[51,28983,28984],{},"推送镜像到 Docker Hub",[40,28986,28987],{},"使用以下命令将镜像推送到 Docker Hub：",[85,28989,28991],{"className":23804,"code":28990,"language":23806,"meta":14,"style":14},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[91,28992,28993],{"__ignoreMap":14},[94,28994,28995,28997,29000,29002,29004,29006,29008],{"class":96,"line":97},[94,28996,26536],{"class":1944},[94,28998,28999],{"class":209}," push",[94,29001,28885],{"class":100},[94,29003,28888],{"class":209},[94,29005,28891],{"class":104},[94,29007,1065],{"class":100},[94,29009,29010],{"class":209},"\u002Fros-noetic-jazzy-noble:latest\n",[40,29012,14615],{},[85,29014,29016],{"className":23804,"code":29015,"language":23806,"meta":14,"style":14},"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",[91,29017,29018,29026,29030,29038,29042,29050,29054,29063,29067,29075,29079],{"__ignoreMap":14},[94,29019,29020,29022,29024],{"class":96,"line":97},[94,29021,26536],{"class":1944},[94,29023,28999],{"class":209},[94,29025,28919],{"class":209},[94,29027,29028],{"class":96,"line":15},[94,29029,2381],{"emptyLinePlaceholder":20},[94,29031,29032,29034,29036],{"class":96,"line":1160},[94,29033,26536],{"class":1944},[94,29035,28999],{"class":209},[94,29037,28934],{"class":209},[94,29039,29040],{"class":96,"line":1175},[94,29041,2381],{"emptyLinePlaceholder":20},[94,29043,29044,29046,29048],{"class":96,"line":1181},[94,29045,26536],{"class":1944},[94,29047,28999],{"class":209},[94,29049,28949],{"class":209},[94,29051,29052],{"class":96,"line":1195},[94,29053,2381],{"emptyLinePlaceholder":20},[94,29055,29056,29058,29060],{"class":96,"line":1201},[94,29057,26536],{"class":1944},[94,29059,28999],{"class":209},[94,29061,29062],{"class":209}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[94,29064,29065],{"class":96,"line":1292},[94,29066,2381],{"emptyLinePlaceholder":20},[94,29068,29069,29071,29073],{"class":96,"line":1298},[94,29070,26536],{"class":1944},[94,29072,28999],{"class":209},[94,29074,28979],{"class":209},[94,29076,29077],{"class":96,"line":1310},[94,29078,2381],{"emptyLinePlaceholder":20},[94,29080,29081,29083,29085],{"class":96,"line":1593},[94,29082,26536],{"class":1944},[94,29084,28999],{"class":209},[94,29086,29087],{"class":209}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[48,29089,29090],{"start":1160},[51,29091,29092],{},"验证推送成功",[40,29094,29095],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[40,29097,29098],{},[254,29099,3765],{},[1112,29101,29102,29105],{},[51,29103,29104],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[51,29106,29107],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[40,29109,29110],{},[1443,29111],{"alt":14,"src":29112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[40,29114,29115],{},[1443,29116],{"alt":14,"src":29117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[21980,29119,29121],{"id":29120},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[40,29123,29124,29125,29128,29129,29132],{},"如果您想在 ",[254,29126,29127],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[254,29130,29131],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[40,29134,29135,29136],{},"1. ",[254,29137,29138],{},"启用 Docker 跨平台构建",[40,29140,29141],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[40,29143,29144],{},"第一步：启用 buildx（只需执行一次）",[85,29146,29148],{"className":23804,"code":29147,"language":23806,"meta":14,"style":14},"docker buildx create --name multiarch_builder --use\n",[91,29149,29150],{"__ignoreMap":14},[94,29151,29152,29154,29157,29160,29163,29166],{"class":96,"line":97},[94,29153,26536],{"class":1944},[94,29155,29156],{"class":209}," buildx",[94,29158,29159],{"class":209}," create",[94,29161,29162],{"class":153}," --name",[94,29164,29165],{"class":209}," multiarch_builder",[94,29167,29168],{"class":153}," --use\n",[40,29170,29171],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[40,29173,29174],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[85,29176,29178],{"className":23804,"code":29177,"language":23806,"meta":14,"style":14},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[91,29179,29180],{"__ignoreMap":14},[94,29181,29182,29184,29186,29188,29191,29194,29197,29200],{"class":96,"line":97},[94,29183,26536],{"class":1944},[94,29185,27213],{"class":209},[94,29187,27216],{"class":153},[94,29189,29190],{"class":153}," --privileged",[94,29192,29193],{"class":209}," multiarch\u002Fqemu-user-static",[94,29195,29196],{"class":153}," --reset",[94,29198,29199],{"class":153}," -p",[94,29201,29202],{"class":209}," yes\n",[40,29204,29205],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[40,29207,29208],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[85,29210,29212],{"className":23804,"code":29211,"language":23806,"meta":14,"style":14},"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",[91,29213,29214,29256,29260,29265,29275,29285,29294,29300,29304,29308,29318,29326,29335,29341,29345,29349,29359,29367,29376,29382,29386,29390,29400,29408,29417,29423,29427,29431,29441,29449,29458,29464,29468,29472,29482,29490,29499,29505,29509,29513,29523,29531,29540,29546,29550,29554,29564,29572,29581,29587,29591,29595,29605,29613,29622,29628,29632,29636,29647,29655,29664,29670],{"__ignoreMap":14},[94,29215,29216,29218,29220,29222,29225,29228,29230,29232,29235,29237,29239,29241,29243,29246,29249,29251,29254],{"class":96,"line":97},[94,29217,26536],{"class":1944},[94,29219,29156],{"class":209},[94,29221,28715],{"class":209},[94,29223,29224],{"class":153}," --platform",[94,29226,29227],{"class":209}," linux\u002Famd64,linux\u002Farm64",[94,29229,28718],{"class":153},[94,29231,28885],{"class":100},[94,29233,29234],{"class":209},"你的镜像",[94,29236,28891],{"class":104},[94,29238,1065],{"class":100},[94,29240,964],{"class":209},[94,29242,1015],{"class":100},[94,29244,29245],{"class":209},"标",[94,29247,29248],{"class":104},"签",[94,29250,1065],{"class":100},[94,29252,29253],{"class":153}," --push",[94,29255,28724],{"class":209},[94,29257,29258],{"class":96,"line":15},[94,29259,2381],{"emptyLinePlaceholder":20},[94,29261,29262],{"class":96,"line":1160},[94,29263,29264],{"class":163},"# 例子：\n",[94,29266,29267,29269,29271,29273],{"class":96,"line":1175},[94,29268,26536],{"class":1944},[94,29270,29156],{"class":209},[94,29272,28715],{"class":209},[94,29274,24661],{"class":153},[94,29276,29277,29280,29283],{"class":96,"line":1181},[94,29278,29279],{"class":104},"--platform ",[94,29281,29282],{"class":209},"linux\u002Famd64,linux\u002Farm64",[94,29284,24661],{"class":153},[94,29286,29287,29289,29292],{"class":96,"line":1195},[94,29288,28718],{"class":153},[94,29290,29291],{"class":209}," tungchiahui\u002Fros:noetic-focal",[94,29293,24661],{"class":153},[94,29295,29296,29298],{"class":96,"line":1201},[94,29297,29253],{"class":153},[94,29299,24661],{"class":153},[94,29301,29302],{"class":96,"line":1292},[94,29303,28724],{"class":209},[94,29305,29306],{"class":96,"line":1298},[94,29307,2381],{"emptyLinePlaceholder":20},[94,29309,29310,29312,29314,29316],{"class":96,"line":1310},[94,29311,26536],{"class":1944},[94,29313,29156],{"class":209},[94,29315,28715],{"class":209},[94,29317,24661],{"class":153},[94,29319,29320,29322,29324],{"class":96,"line":1593},[94,29321,29279],{"class":104},[94,29323,29282],{"class":209},[94,29325,24661],{"class":153},[94,29327,29328,29330,29333],{"class":96,"line":1598},[94,29329,28718],{"class":153},[94,29331,29332],{"class":209}," tungchiahui\u002Fros:humble-jammy",[94,29334,24661],{"class":153},[94,29336,29337,29339],{"class":96,"line":1604},[94,29338,29253],{"class":153},[94,29340,24661],{"class":153},[94,29342,29343],{"class":96,"line":1609},[94,29344,28724],{"class":209},[94,29346,29347],{"class":96,"line":1623},[94,29348,2381],{"emptyLinePlaceholder":20},[94,29350,29351,29353,29355,29357],{"class":96,"line":1628},[94,29352,26536],{"class":1944},[94,29354,29156],{"class":209},[94,29356,28715],{"class":209},[94,29358,24661],{"class":153},[94,29360,29361,29363,29365],{"class":96,"line":1634},[94,29362,29279],{"class":104},[94,29364,29282],{"class":209},[94,29366,24661],{"class":153},[94,29368,29369,29371,29374],{"class":96,"line":1655},[94,29370,28718],{"class":153},[94,29372,29373],{"class":209}," tungchiahui\u002Fros:jazzy-noble",[94,29375,24661],{"class":153},[94,29377,29378,29380],{"class":96,"line":1660},[94,29379,29253],{"class":153},[94,29381,24661],{"class":153},[94,29383,29384],{"class":96,"line":1674},[94,29385,28724],{"class":209},[94,29387,29388],{"class":96,"line":1679},[94,29389,2381],{"emptyLinePlaceholder":20},[94,29391,29392,29394,29396,29398],{"class":96,"line":1708},[94,29393,26303],{"class":1944},[94,29395,29156],{"class":209},[94,29397,28715],{"class":209},[94,29399,24661],{"class":153},[94,29401,29402,29404,29406],{"class":96,"line":1713},[94,29403,29279],{"class":104},[94,29405,29282],{"class":209},[94,29407,24661],{"class":153},[94,29409,29410,29412,29415],{"class":96,"line":1730},[94,29411,28718],{"class":153},[94,29413,29414],{"class":209}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[94,29416,24661],{"class":153},[94,29418,29419,29421],{"class":96,"line":1735},[94,29420,29253],{"class":153},[94,29422,24661],{"class":153},[94,29424,29425],{"class":96,"line":1740},[94,29426,28724],{"class":209},[94,29428,29429],{"class":96,"line":1745},[94,29430,2381],{"emptyLinePlaceholder":20},[94,29432,29433,29435,29437,29439],{"class":96,"line":1759},[94,29434,26536],{"class":1944},[94,29436,29156],{"class":209},[94,29438,28715],{"class":209},[94,29440,24661],{"class":153},[94,29442,29443,29445,29447],{"class":96,"line":1764},[94,29444,29279],{"class":104},[94,29446,29282],{"class":209},[94,29448,24661],{"class":153},[94,29450,29451,29453,29456],{"class":96,"line":2558},[94,29452,28718],{"class":153},[94,29454,29455],{"class":209}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[94,29457,24661],{"class":153},[94,29459,29460,29462],{"class":96,"line":2572},[94,29461,29253],{"class":153},[94,29463,24661],{"class":153},[94,29465,29466],{"class":96,"line":2580},[94,29467,28724],{"class":209},[94,29469,29470],{"class":96,"line":2585},[94,29471,2381],{"emptyLinePlaceholder":20},[94,29473,29474,29476,29478,29480],{"class":96,"line":2591},[94,29475,26303],{"class":1944},[94,29477,29156],{"class":209},[94,29479,28715],{"class":209},[94,29481,24661],{"class":153},[94,29483,29484,29486,29488],{"class":96,"line":2597},[94,29485,29279],{"class":104},[94,29487,29282],{"class":209},[94,29489,24661],{"class":153},[94,29491,29492,29494,29497],{"class":96,"line":2602},[94,29493,28718],{"class":153},[94,29495,29496],{"class":209}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[94,29498,24661],{"class":153},[94,29500,29501,29503],{"class":96,"line":7930},[94,29502,29253],{"class":153},[94,29504,24661],{"class":153},[94,29506,29507],{"class":96,"line":7954},[94,29508,28724],{"class":209},[94,29510,29511],{"class":96,"line":7959},[94,29512,2381],{"emptyLinePlaceholder":20},[94,29514,29515,29517,29519,29521],{"class":96,"line":7965},[94,29516,26536],{"class":1944},[94,29518,29156],{"class":209},[94,29520,28715],{"class":209},[94,29522,24661],{"class":153},[94,29524,29525,29527,29529],{"class":96,"line":7992},[94,29526,29279],{"class":104},[94,29528,29282],{"class":209},[94,29530,24661],{"class":153},[94,29532,29533,29535,29538],{"class":96,"line":7997},[94,29534,28718],{"class":153},[94,29536,29537],{"class":209}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[94,29539,24661],{"class":153},[94,29541,29542,29544],{"class":96,"line":8003},[94,29543,29253],{"class":153},[94,29545,24661],{"class":153},[94,29547,29548],{"class":96,"line":8015},[94,29549,28724],{"class":209},[94,29551,29552],{"class":96,"line":8027},[94,29553,2381],{"emptyLinePlaceholder":20},[94,29555,29556,29558,29560,29562],{"class":96,"line":8039},[94,29557,26536],{"class":1944},[94,29559,29156],{"class":209},[94,29561,28715],{"class":209},[94,29563,24661],{"class":153},[94,29565,29566,29568,29570],{"class":96,"line":9698},[94,29567,29279],{"class":104},[94,29569,29282],{"class":209},[94,29571,24661],{"class":153},[94,29573,29574,29576,29579],{"class":96,"line":9723},[94,29575,28718],{"class":153},[94,29577,29578],{"class":209}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[94,29580,24661],{"class":153},[94,29582,29583,29585],{"class":96,"line":9746},[94,29584,29253],{"class":153},[94,29586,24661],{"class":153},[94,29588,29589],{"class":96,"line":9770},[94,29590,28724],{"class":209},[94,29592,29593],{"class":96,"line":9775},[94,29594,2381],{"emptyLinePlaceholder":20},[94,29596,29597,29599,29601,29603],{"class":96,"line":9780},[94,29598,26303],{"class":1944},[94,29600,29156],{"class":209},[94,29602,28715],{"class":209},[94,29604,24661],{"class":153},[94,29606,29607,29609,29611],{"class":96,"line":9785},[94,29608,29279],{"class":104},[94,29610,29282],{"class":209},[94,29612,24661],{"class":153},[94,29614,29615,29617,29620],{"class":96,"line":9794},[94,29616,28718],{"class":153},[94,29618,29619],{"class":209}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[94,29621,24661],{"class":153},[94,29623,29624,29626],{"class":96,"line":9799},[94,29625,29253],{"class":153},[94,29627,24661],{"class":153},[94,29629,29630],{"class":96,"line":9805},[94,29631,28724],{"class":209},[94,29633,29634],{"class":96,"line":9826},[94,29635,2381],{"emptyLinePlaceholder":20},[94,29637,29638,29641,29643,29645],{"class":96,"line":9832},[94,29639,29640],{"class":1944},"  docker",[94,29642,29156],{"class":209},[94,29644,28715],{"class":209},[94,29646,24661],{"class":153},[94,29648,29649,29651,29653],{"class":96,"line":9846},[94,29650,29279],{"class":104},[94,29652,29282],{"class":209},[94,29654,24661],{"class":153},[94,29656,29657,29659,29662],{"class":96,"line":9852},[94,29658,28718],{"class":153},[94,29660,29661],{"class":209}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[94,29663,24661],{"class":153},[94,29665,29666,29668],{"class":96,"line":9879},[94,29667,29253],{"class":153},[94,29669,24661],{"class":153},[94,29671,29672],{"class":96,"line":9888},[94,29673,28724],{"class":209},[40,29675,29676],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[40,29678,29679],{},[1443,29680],{"alt":14,"src":29681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[40,29683,29684],{},[1443,29685],{"alt":14,"src":29686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[21980,29688,29690],{"id":29689},"_623清除构建缓存","6.2.3.清除构建缓存",[85,29692,29694],{"className":23804,"code":29693,"language":23806,"meta":14,"style":14},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[91,29695,29696,29701],{"__ignoreMap":14},[94,29697,29698],{"class":96,"line":97},[94,29699,29700],{"class":163},"# 清理BuildKit构建缓存\n",[94,29702,29703,29705,29708,29711],{"class":96,"line":15},[94,29704,26536],{"class":1944},[94,29706,29707],{"class":209}," builder",[94,29709,29710],{"class":209}," prune",[94,29712,29713],{"class":153}," -f\n",[40,29715,29716],{},[1443,29717],{"alt":14,"src":29718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[65,29720,29722],{"id":29721},"_63补充","6.3.补充",[21980,29724,29726],{"id":29725},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[40,29728,29729],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[40,29731,29732],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[40,29734,29735],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[85,29737,29739],{"className":23804,"code":29738,"language":23806,"meta":14,"style":14},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[91,29740,29741,29748],{"__ignoreMap":14},[94,29742,29743,29745],{"class":96,"line":97},[94,29744,27353],{"class":1944},[94,29746,29747],{"class":209}," nginx\n",[94,29749,29750,29752,29755,29758,29760],{"class":96,"line":15},[94,29751,28538],{"class":1944},[94,29753,29754],{"class":209}," echo",[94,29756,29757],{"class":209}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[94,29759,26205],{"class":100},[94,29761,29762],{"class":209}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[40,29764,29765],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[40,29767,29768],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[85,29770,29772],{"className":23804,"code":29771,"language":23806,"meta":14,"style":14},"docker build -t nginx:tuling .\n",[91,29773,29774],{"__ignoreMap":14},[94,29775,29776,29778,29780,29782,29785],{"class":96,"line":97},[94,29777,26536],{"class":1944},[94,29779,28715],{"class":209},[94,29781,28718],{"class":153},[94,29783,29784],{"class":209}," nginx:tuling",[94,29786,28724],{"class":209},[40,29788,29789],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[40,29791,29792],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[85,29794,29796],{"className":23804,"code":29795,"language":23806,"meta":14,"style":14},"docker run -d -p 92:80 nginx:tuling\n",[91,29797,29798],{"__ignoreMap":14},[94,29799,29800,29802,29804,29807,29809,29812],{"class":96,"line":97},[94,29801,26536],{"class":1944},[94,29803,27213],{"class":209},[94,29805,29806],{"class":153}," -d",[94,29808,29199],{"class":153},[94,29810,29811],{"class":209}," 92:80",[94,29813,29814],{"class":209}," nginx:tuling\n",[40,29816,29817,29818],{},"4、访问 ",[343,29819,29822],{"href":29820,"rel":29821},"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",[23847],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[40,29824,29825],{},[1443,29826],{"alt":14,"src":29827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[40,29829,29830],{},[1443,29831],{"alt":14,"src":29832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[21980,29834,29836],{"id":29835},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[40,29838,29839],{},"只需要知道大体流程即可",[40,29841,29842],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[40,29844,29845],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[40,29847,29848],{},"2、在Dockerfile中添加以下内容",[85,29850,29852],{"className":26074,"code":29851,"language":26076,"meta":14,"style":14},"# 基于哪个镜像\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",[91,29853,29854,29859,29864,29869,29874,29879,29884,29889],{"__ignoreMap":14},[94,29855,29856],{"class":96,"line":97},[94,29857,29858],{},"# 基于哪个镜像\n",[94,29860,29861],{"class":96,"line":15},[94,29862,29863],{},"From java:8\n",[94,29865,29866],{"class":96,"line":1160},[94,29867,29868],{},"# 复制文件到容器\n",[94,29870,29871],{"class":96,"line":1175},[94,29872,29873],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[94,29875,29876],{"class":96,"line":1181},[94,29877,29878],{},"# 声明需要暴露的端口\n",[94,29880,29881],{"class":96,"line":1195},[94,29882,29883],{},"EXPOSE 8877\n",[94,29885,29886],{"class":96,"line":1201},[94,29887,29888],{},"# 配置容器启动后执行的命令\n",[94,29890,29891],{"class":96,"line":1292},[94,29892,29893],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[40,29895,29896],{},"3、使用docker build命令构建镜像",[85,29898,29900],{"className":23804,"code":29899,"language":23806,"meta":14,"style":14},"docker build -t tulingmall-member:0.0.5 .\n",[91,29901,29902],{"__ignoreMap":14},[94,29903,29904,29906,29908,29910,29913],{"class":96,"line":97},[94,29905,26536],{"class":1944},[94,29907,28715],{"class":209},[94,29909,28718],{"class":153},[94,29911,29912],{"class":209}," tulingmall-member:0.0.5",[94,29914,28724],{"class":209},[40,29916,29917],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[40,29919,29920],{},[1443,29921],{"alt":14,"src":29922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[40,29924,29925],{},"4、启动镜像，加-d可在后台启动",[85,29927,29929],{"className":23804,"code":29928,"language":23806,"meta":14,"style":14},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[91,29930,29931],{"__ignoreMap":14},[94,29932,29933,29935,29937,29939,29941,29944],{"class":96,"line":97},[94,29934,26536],{"class":1944},[94,29936,27213],{"class":209},[94,29938,29806],{"class":153},[94,29940,29199],{"class":153},[94,29942,29943],{"class":209}," 8877:8877",[94,29945,29946],{"class":209}," tulingmall-member:0.0.5\n",[40,29948,29949],{},"加上JVM参数：",[85,29951,29953],{"className":23804,"code":29952,"language":23806,"meta":14,"style":14},"# --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",[91,29954,29955,29960,29975,29985,29994,30001],{"__ignoreMap":14},[94,29956,29957],{"class":96,"line":97},[94,29958,29959],{"class":163},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[94,29961,29962,29964,29966,29969,29971,29973],{"class":96,"line":15},[94,29963,26536],{"class":1944},[94,29965,27213],{"class":209},[94,29967,29968],{"class":153},"  -d",[94,29970,29199],{"class":153},[94,29972,29943],{"class":209},[94,29974,24661],{"class":153},[94,29976,29977,29979,29982],{"class":96,"line":1160},[94,29978,28111],{"class":104},[94,29980,29981],{"class":209},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[94,29983,29984],{"class":153},"  \\\n",[94,29986,29987,29989,29992],{"class":96,"line":1175},[94,29988,28111],{"class":104},[94,29990,29991],{"class":209},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[94,29993,29984],{"class":153},[94,29995,29996,29999],{"class":96,"line":1181},[94,29997,29998],{"class":104},"--cap-add=SYS_PTRACE  ",[94,30000,26158],{"class":153},[94,30002,30003],{"class":96,"line":1195},[94,30004,30005],{"class":104},"tulingmall-member:0.0.5\n",[40,30007,30008],{},"5、访问会员服务接口",[40,30010,30011],{},[1443,30012],{"alt":14,"src":30013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[21980,30015,30017],{"id":30016},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[40,30019,30020],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[40,30022,30023,30024],{},"阿里云docker镜像仓库：",[343,30025,30026],{"href":30026,"rel":30027},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23847],[40,30029,30030],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[40,30032,30033],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[40,30035,30036],{},[1443,30037],{"alt":14,"src":30038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[40,30040,30041],{},"要把镜像推送到镜像仓库",[85,30043,30045],{"className":23804,"code":30044,"language":23806,"meta":14,"style":14},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[91,30046,30047],{"__ignoreMap":14},[94,30048,30049,30051,30053,30055],{"class":96,"line":97},[94,30050,26536],{"class":1944},[94,30052,28880],{"class":209},[94,30054,29912],{"class":209},[94,30056,30057],{"class":209}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[40,30059,30060],{},"最后将镜像推送到远程仓库",[85,30062,30064],{"className":23804,"code":30063,"language":23806,"meta":14,"style":14},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[91,30065,30066],{"__ignoreMap":14},[94,30067,30068,30070,30072],{"class":96,"line":97},[94,30069,26536],{"class":1944},[94,30071,28999],{"class":209},[94,30073,30057],{"class":209},[5108,30075,30076],{},"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":14,"searchDepth":15,"depth":15,"links":30078},[30079,30080,30081],{"id":28466,"depth":1160,"text":28467},{"id":28695,"depth":1160,"text":28696},{"id":29721,"depth":1160,"text":29722},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28458,"description":14},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30088,"title":30089,"body":30090,"description":14,"extension":18,"meta":30233,"navigation":20,"path":30234,"seo":30235,"stem":30236,"__hash__":30237},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30091,"toc":30231},[30092,30095,30100,30105,30108,30113,30118,30121,30126,30131,30134,30139,30142,30145,30148,30151,30154,30157,30177,30199,30202,30205,30225,30228],[10,30093,30089],{"id":30094},"_7vscode远程开发",[48,30096,30097],{},[51,30098,30099],{},"插件1：微软Docker工具",[40,30101,30102],{},[1443,30103],{"alt":14,"src":30104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[40,30106,30107],{},"docker扩展插件已经进化为container tools了，请安装container tools",[40,30109,30110],{},[1443,30111],{"alt":14,"src":30112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[48,30114,30115],{"start":15},[51,30116,30117],{},"插件2：微软Docker远程开发工具",[40,30119,30120],{},"下面这是远程开发的插件。",[40,30122,30123],{},[1443,30124],{"alt":14,"src":30125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[40,30127,30128],{},[1443,30129],{"alt":14,"src":30130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[40,30132,30133],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[40,30135,30136],{},[1443,30137],{"alt":14,"src":30138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[40,30140,30141],{},"安装完拓展之后，vscode进行链接：",[40,30143,30144],{},"1.按ctrl+shift+p",[40,30146,30147],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[40,30149,30150],{},"3.选择目前运行的容器",[40,30152,30153],{},"4.VS Code 会在新窗口中打开并连接到容器",[40,30155,30156],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[85,30158,30160],{"className":23804,"code":30159,"language":23806,"meta":14,"style":14},"docker run -v 主机目录:容器目录 image-name\n",[91,30161,30162],{"__ignoreMap":14},[94,30163,30164,30166,30168,30171,30174],{"class":96,"line":97},[94,30165,26536],{"class":1944},[94,30167,27213],{"class":209},[94,30169,30170],{"class":153}," -v",[94,30172,30173],{"class":209}," 主机目录:容器目录",[94,30175,30176],{"class":209}," image-name\n",[85,30178,30180],{"className":23804,"code":30179,"language":23806,"meta":14,"style":14},"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",[91,30181,30182],{"__ignoreMap":14},[94,30183,30184,30186,30188,30191,30193,30196],{"class":96,"line":97},[94,30185,26536],{"class":1944},[94,30187,27213],{"class":209},[94,30189,30190],{"class":153}," -it",[94,30192,30170],{"class":153},[94,30194,30195],{"class":209}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[94,30197,30198],{"class":209}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[40,30200,30201],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[40,30203,30204],{},"查看挂载情况：",[85,30206,30208],{"className":23804,"code":30207,"language":23806,"meta":14,"style":14},"mount | grep -i project\n",[91,30209,30210],{"__ignoreMap":14},[94,30211,30212,30215,30217,30220,30222],{"class":96,"line":97},[94,30213,30214],{"class":1944},"mount",[94,30216,25092],{"class":100},[94,30218,30219],{"class":1944}," grep",[94,30221,26413],{"class":153},[94,30223,30224],{"class":209}," project\n",[40,30226,30227],{},"也可以通过ls来进行查看",[5108,30229,30230],{},"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":14,"searchDepth":15,"depth":15,"links":30232},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30089,"description":14},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30239,"title":30240,"body":30241,"description":17,"extension":18,"meta":30245,"navigation":20,"path":30247,"seo":30248,"stem":30249,"__hash__":30250},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30242,"toc":30243},[],{"title":14,"searchDepth":15,"depth":15,"links":30244},[],{"category":30246},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30240,"description":17},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30252,"title":30253,"body":30254,"description":17,"extension":18,"meta":30258,"navigation":20,"path":30259,"seo":30260,"stem":30261,"__hash__":30262},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30255,"toc":30256},[],{"title":14,"searchDepth":15,"depth":15,"links":30257},[],{"category":30246},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30253,"description":17},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30264,"title":30265,"body":30266,"description":17,"extension":18,"meta":30559,"navigation":20,"path":30560,"seo":30561,"stem":30562,"__hash__":30563},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30267,"toc":30557},[30268,30271,30279,30294,30299,30350,30353,30359,30546,30551,30554],[10,30269,30265],{"id":30270},"_1验证深度学习环境",[40,30272,30273,30274],{},"关于环境的安装，看",[343,30275,30278],{"href":30276,"rel":30277},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23847],"Pytorch-->深度学习",[40,30280,30281,30282,30285,30286,30289,30290,30293],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[91,30283,30284],{},"pytorch-cuda=12.4"," 是一个“ ",[254,30287,30288],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[254,30291,30292],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[40,30295,30296],{},[1443,30297],{"alt":14,"src":30298},"\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",[85,30300,30302],{"className":23804,"code":30301,"language":23806,"meta":14,"style":14},"# 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",[91,30303,30304,30309],{"__ignoreMap":14},[94,30305,30306],{"class":96,"line":97},[94,30307,30308],{"class":163},"# CUDA 12.4\n",[94,30310,30311,30314,30316,30319,30322,30325,30328,30331,30333,30336,30339,30342,30345,30347],{"class":96,"line":15},[94,30312,30313],{"class":1944},"conda",[94,30315,23816],{"class":209},[94,30317,30318],{"class":209}," pytorch==",[94,30320,30321],{"class":153},"2.5.1",[94,30323,30324],{"class":209}," torchvision==",[94,30326,30327],{"class":153},"0.20.1",[94,30329,30330],{"class":209}," torchaudio==",[94,30332,30321],{"class":153},[94,30334,30335],{"class":209}," pytorch-cuda=",[94,30337,30338],{"class":153},"12.4",[94,30340,30341],{"class":153}," -c",[94,30343,30344],{"class":209}," pytorch",[94,30346,30341],{"class":153},[94,30348,30349],{"class":209}," nvidia\n",[40,30351,30352],{},"）：",[40,30354,30355],{},[343,30356,30357],{"href":30357,"rel":30358},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23847],[85,30360,30364],{"className":30361,"code":30362,"language":30363,"meta":14,"style":14},"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",[91,30365,30366,30371,30379,30384,30394,30410,30415,30425,30462,30469,30481,30497,30502,30512,30524,30534],{"__ignoreMap":14},[94,30367,30368],{"class":96,"line":97},[94,30369,30370],{"class":163},"# 对深度学习环境进行测试\n",[94,30372,30373,30376],{"class":96,"line":15},[94,30374,30375],{"class":100},"import",[94,30377,30378],{"class":104}," torch\n",[94,30380,30381],{"class":96,"line":1160},[94,30382,30383],{"class":163},"# 查看cuda是否被激活\n",[94,30385,30386,30389,30391],{"class":96,"line":1175},[94,30387,30388],{"class":104},"flag",[94,30390,150],{"class":100},[94,30392,30393],{"class":104},"torch.cuda.is_available()\n",[94,30395,30396,30399,30401,30404,30407],{"class":96,"line":1181},[94,30397,30398],{"class":153},"print",[94,30400,105],{"class":104},[94,30402,30403],{"class":209},"\"cuda:\"",[94,30405,30406],{"class":104},", flag)   ",[94,30408,30409],{"class":163},"#返回true的话说明被激活\n",[94,30411,30412],{"class":96,"line":1195},[94,30413,30414],{"class":163},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[94,30416,30417,30420,30422],{"class":96,"line":1201},[94,30418,30419],{"class":104},"ngpu",[94,30421,150],{"class":100},[94,30423,30424],{"class":153},"1\n",[94,30426,30427,30430,30432,30435,30438,30440,30443,30446,30449,30451,30453,30455,30457,30460],{"class":96,"line":1292},[94,30428,30429],{"class":104},"device",[94,30431,150],{"class":100},[94,30433,30434],{"class":104},"torch.device(",[94,30436,30437],{"class":209},"\"cuda:0\"",[94,30439,1685],{"class":100},[94,30441,30442],{"class":104},"(torch.cuda.is_available() ",[94,30444,30445],{"class":100},"and",[94,30447,30448],{"class":104}," ngpu",[94,30450,1065],{"class":100},[94,30452,296],{"class":153},[94,30454,13696],{"class":104},[94,30456,1682],{"class":100},[94,30458,30459],{"class":209}," \"cpu\"",[94,30461,111],{"class":104},[94,30463,30464,30466],{"class":96,"line":1298},[94,30465,30398],{"class":153},[94,30467,30468],{"class":104},"(device)\n",[94,30470,30471,30473,30476,30478],{"class":96,"line":1310},[94,30472,30398],{"class":153},[94,30474,30475],{"class":104},"(torch.cuda.get_device_name(",[94,30477,296],{"class":153},[94,30479,30480],{"class":104},"))\n",[94,30482,30483,30485,30488,30490,30492,30494],{"class":96,"line":1593},[94,30484,30398],{"class":153},[94,30486,30487],{"class":104},"(torch.rand(",[94,30489,176],{"class":153},[94,30491,483],{"class":104},[94,30493,176],{"class":153},[94,30495,30496],{"class":104},").cuda())\n",[94,30498,30499],{"class":96,"line":1598},[94,30500,30501],{"class":163},"# 查看cuda和cudnn的版本\n",[94,30503,30504,30507,30509],{"class":96,"line":1604},[94,30505,30506],{"class":104},"cuda_version",[94,30508,150],{"class":100},[94,30510,30511],{"class":104},"torch.version.cuda\n",[94,30513,30514,30516,30518,30521],{"class":96,"line":1609},[94,30515,30398],{"class":153},[94,30517,105],{"class":104},[94,30519,30520],{"class":209},"\"cuda version\"",[94,30522,30523],{"class":104},",cuda_version)\n",[94,30525,30526,30529,30531],{"class":96,"line":1623},[94,30527,30528],{"class":104},"cudnn_version",[94,30530,150],{"class":100},[94,30532,30533],{"class":104},"torch.backends.cudnn.version()\n",[94,30535,30536,30538,30540,30543],{"class":96,"line":1628},[94,30537,30398],{"class":153},[94,30539,105],{"class":104},[94,30541,30542],{"class":209},"\"cudnn version\"",[94,30544,30545],{"class":104},",cudnn_version)\n",[40,30547,30548],{},[1443,30549],{"alt":14,"src":30550},"\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",[40,30552,30553],{},"cuda:0 指的是一块显卡",[5108,30555,30556],{},"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":14,"searchDepth":15,"depth":15,"links":30558},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30265,"description":17},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30565,"title":30566,"body":30567,"description":17,"extension":18,"meta":50371,"navigation":20,"path":50372,"seo":50373,"stem":50374,"__hash__":50375},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30568,"toc":50365},[30569,30572,30576,30580,30583,30588,30593,30596,30601,30606,30611,30614,30618,30623,30627,30632,30635,30640,30643,30646,30649,30652,30657,30660,30665,30670,30675,30680,30683,30687,30690,30695,31299,31304,31307,31312,31315,31318,31782,31785,31788,31791,31794,33845,33848,33853,33858,34653,34656,34661,35439,35443,37102,37106,37820,37824,37828,37833,37838,37843,37846,37851,37856,37861,37866,37871,37875,37880,39162,39167,39170,39173,39176,39331,39334,39337,40553,40558,41253,41257,41261,41266,41271,41274,41279,41284,41289,41294,41299,41304,41309,41314,41319,41324,41329,41334,41339,41344,41349,41354,41359,41364,41369,41374,41379,41384,41389,41394,41399,41404,41409,41414,41419,41424,41428,41432,41435,42913,42917,44564,44568,45262,45266,45269,45272,45816,45819,45823,45826,47223,47227,47230,47808,49595,49599,49602,50362],[10,30570,30566],{"id":30571},"_2经典神经网络",[65,30573,30575],{"id":30574},"_21lenet与alexnet","2.1.LeNet与AlexNet",[21980,30577,30579],{"id":30578},"_211原理介绍","2.1.1.原理介绍",[40,30581,30582],{},"LeNet-5",[48,30584,30585],{},[51,30586,30587],{},"原理",[40,30589,30590],{},[1443,30591],{"alt":14,"src":30592},"\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",[40,30594,30595],{},"B是batch批次；C是channel通道",[48,30597,30598],{"start":15},[51,30599,30600],{},"网络参数详细",[40,30602,30603],{},[1443,30604],{"alt":14,"src":30605},"\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",[40,30607,30608],{},[1443,30609],{"alt":14,"src":30610},"\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",[40,30612,30613],{},"AlexNet",[48,30615,30616],{},[51,30617,30587],{},[40,30619,30620],{},[1443,30621],{"alt":14,"src":30622},"\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",[48,30624,30625],{"start":15},[51,30626,30600],{},[40,30628,30629],{},[1443,30630],{"alt":14,"src":30631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[40,30633,30634],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[40,30636,30637],{},[1443,30638],{"alt":14,"src":30639},"\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",[40,30641,30642],{},"数据处理中的图像增强操作:",[40,30644,30645],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[40,30647,30648],{},"①增加数据量，保证训练数据充足；②防止过拟合",[40,30650,30651],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[40,30653,30654],{},[1443,30655],{"alt":14,"src":30656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[40,30658,30659],{},"提升网络精确度的方法：LRN正则化",[40,30661,30662],{},[1443,30663],{"alt":14,"src":30664},"\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",[40,30666,30667],{},[1443,30668],{"alt":14,"src":30669},"\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",[48,30671,30672],{"start":1160},[51,30673,30674],{},"AlexNet的总结",[40,30676,30677],{},[1443,30678],{"alt":14,"src":30679},"\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",[40,30681,30682],{},"比LeNet模型要深一丢丢",[21980,30684,30686],{"id":30685},"_212代码实现","2.1.2.代码实现",[40,30688,30689],{},"（1）LeNet",[48,30691,30692],{},[51,30693,30694],{},"模型搭建",[85,30696,30698],{"className":30361,"code":30697,"language":30363,"meta":14,"style":14},"# 导入库\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",[91,30699,30700,30705,30711,30716,30729,30734,30746,30750,30770,30775,30780,30791,30796,30815,30819,30824,30873,30885,30890,30919,30954,30981,30986,30998,31003,31023,31042,31061,31065,31070,31080,31097,31108,31123,31134,31145,31160,31175,31186,31193,31197,31211,31216,31239,31244,31249,31254,31258,31263,31268,31278],{"__ignoreMap":14},[94,30701,30702],{"class":96,"line":97},[94,30703,30704],{"class":163},"# 导入库\n",[94,30706,30707,30709],{"class":96,"line":15},[94,30708,30375],{"class":100},[94,30710,30378],{"class":104},[94,30712,30713],{"class":96,"line":1160},[94,30714,30715],{"class":163},"# 导入神经网络层\n",[94,30717,30718,30721,30724,30726],{"class":96,"line":1175},[94,30719,30720],{"class":100},"from",[94,30722,30723],{"class":104}," torch ",[94,30725,30375],{"class":100},[94,30727,30728],{"class":104}," nn\n",[94,30730,30731],{"class":96,"line":1181},[94,30732,30733],{"class":163},"# 导入展示神经网络参数的包\n",[94,30735,30736,30738,30741,30743],{"class":96,"line":1195},[94,30737,30720],{"class":100},[94,30739,30740],{"class":104}," torchsummary ",[94,30742,30375],{"class":100},[94,30744,30745],{"class":104}," summary\n",[94,30747,30748],{"class":96,"line":1201},[94,30749,2381],{"emptyLinePlaceholder":20},[94,30751,30752,30754,30757,30759,30762,30764,30767],{"class":96,"line":1292},[94,30753,14676],{"class":100},[94,30755,30756],{"class":1944}," LeNet",[94,30758,105],{"class":104},[94,30760,30761],{"class":1944},"nn",[94,30763,663],{"class":104},[94,30765,30766],{"class":1944},"Module",[94,30768,30769],{"class":104},"):\n",[94,30771,30772],{"class":96,"line":1298},[94,30773,30774],{"class":163},"    # 模型初始化:\n",[94,30776,30777],{"class":96,"line":1310},[94,30778,30779],{"class":163},"    # 定义一些网络层和激活函数\n",[94,30781,30782,30785,30788],{"class":96,"line":1593},[94,30783,30784],{"class":100},"    def",[94,30786,30787],{"class":153}," __init__",[94,30789,30790],{"class":104},"(self):\n",[94,30792,30793],{"class":96,"line":1598},[94,30794,30795],{"class":163},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[94,30797,30798,30801,30804,30807,30810,30813],{"class":96,"line":1604},[94,30799,30800],{"class":153},"        super",[94,30802,30803],{"class":104},"(LeNet,",[94,30805,30806],{"class":153},"self",[94,30808,30809],{"class":104},").",[94,30811,30812],{"class":153},"__init__",[94,30814,1957],{"class":104},[94,30816,30817],{"class":96,"line":1609},[94,30818,2381],{"emptyLinePlaceholder":20},[94,30820,30821],{"class":96,"line":1623},[94,30822,30823],{"class":163},"        # 定义网络层\n",[94,30825,30826,30829,30832,30834,30837,30840,30842,30844,30846,30849,30851,30853,30855,30858,30860,30862,30864,30867,30869,30871],{"class":96,"line":1628},[94,30827,30828],{"class":153},"        self",[94,30830,30831],{"class":104},".c1",[94,30833,150],{"class":100},[94,30835,30836],{"class":104},"nn.Conv2d(",[94,30838,30839],{"class":5198},"in_channels",[94,30841,150],{"class":100},[94,30843,322],{"class":153},[94,30845,483],{"class":104},[94,30847,30848],{"class":5198},"out_channels",[94,30850,150],{"class":100},[94,30852,449],{"class":153},[94,30854,483],{"class":104},[94,30856,30857],{"class":5198},"kernel_size",[94,30859,150],{"class":100},[94,30861,424],{"class":153},[94,30863,483],{"class":104},[94,30865,30866],{"class":5198},"padding",[94,30868,150],{"class":100},[94,30870,182],{"class":153},[94,30872,111],{"class":104},[94,30874,30875,30877,30880,30882],{"class":96,"line":1634},[94,30876,30828],{"class":153},[94,30878,30879],{"class":104},".sig",[94,30881,150],{"class":100},[94,30883,30884],{"class":104},"nn.Sigmoid()\n",[94,30886,30887],{"class":96,"line":1655},[94,30888,30889],{"class":163},"        # 定义池化\n",[94,30891,30892,30894,30897,30899,30902,30904,30906,30908,30910,30913,30915,30917],{"class":96,"line":1660},[94,30893,30828],{"class":153},[94,30895,30896],{"class":104},".s2",[94,30898,150],{"class":100},[94,30900,30901],{"class":104},"nn.AvgPool2d(",[94,30903,30857],{"class":5198},[94,30905,150],{"class":100},[94,30907,182],{"class":153},[94,30909,483],{"class":104},[94,30911,30912],{"class":5198},"stride",[94,30914,150],{"class":100},[94,30916,182],{"class":153},[94,30918,111],{"class":104},[94,30920,30921,30923,30926,30928,30930,30932,30934,30936,30938,30940,30942,30944,30946,30948,30950,30952],{"class":96,"line":1674},[94,30922,30828],{"class":153},[94,30924,30925],{"class":104},".c3",[94,30927,150],{"class":100},[94,30929,30836],{"class":104},[94,30931,30839],{"class":5198},[94,30933,150],{"class":100},[94,30935,449],{"class":153},[94,30937,483],{"class":104},[94,30939,30848],{"class":5198},[94,30941,150],{"class":100},[94,30943,706],{"class":153},[94,30945,483],{"class":104},[94,30947,30857],{"class":5198},[94,30949,150],{"class":100},[94,30951,424],{"class":153},[94,30953,111],{"class":104},[94,30955,30956,30958,30961,30963,30965,30967,30969,30971,30973,30975,30977,30979],{"class":96,"line":1679},[94,30957,30828],{"class":153},[94,30959,30960],{"class":104},".s4",[94,30962,150],{"class":100},[94,30964,30901],{"class":104},[94,30966,30857],{"class":5198},[94,30968,150],{"class":100},[94,30970,182],{"class":153},[94,30972,483],{"class":104},[94,30974,30912],{"class":5198},[94,30976,150],{"class":100},[94,30978,182],{"class":153},[94,30980,111],{"class":104},[94,30982,30983],{"class":96,"line":1708},[94,30984,30985],{"class":163},"        # 定义平展层\n",[94,30987,30988,30990,30993,30995],{"class":96,"line":1713},[94,30989,30828],{"class":153},[94,30991,30992],{"class":104},".flatten",[94,30994,150],{"class":100},[94,30996,30997],{"class":104},"nn.Flatten()\n",[94,30999,31000],{"class":96,"line":1730},[94,31001,31002],{"class":163},"        # 定义全连接层\n",[94,31004,31005,31007,31010,31012,31015,31017,31019,31021],{"class":96,"line":1735},[94,31006,30828],{"class":153},[94,31008,31009],{"class":104},".f5",[94,31011,150],{"class":100},[94,31013,31014],{"class":104},"nn.Linear(",[94,31016,3968],{"class":153},[94,31018,483],{"class":104},[94,31020,922],{"class":153},[94,31022,111],{"class":104},[94,31024,31025,31027,31030,31032,31034,31036,31038,31040],{"class":96,"line":1740},[94,31026,30828],{"class":153},[94,31028,31029],{"class":104},".f6",[94,31031,150],{"class":100},[94,31033,31014],{"class":104},[94,31035,922],{"class":153},[94,31037,483],{"class":104},[94,31039,816],{"class":153},[94,31041,111],{"class":104},[94,31043,31044,31046,31049,31051,31053,31055,31057,31059],{"class":96,"line":1745},[94,31045,30828],{"class":153},[94,31047,31048],{"class":104},".f7",[94,31050,150],{"class":100},[94,31052,31014],{"class":104},[94,31054,816],{"class":153},[94,31056,483],{"class":104},[94,31058,551],{"class":153},[94,31060,111],{"class":104},[94,31062,31063],{"class":96,"line":1759},[94,31064,2381],{"emptyLinePlaceholder":20},[94,31066,31067],{"class":96,"line":1764},[94,31068,31069],{"class":163},"    # 写工具->写前向传播\n",[94,31071,31072,31074,31077],{"class":96,"line":2558},[94,31073,30784],{"class":100},[94,31075,31076],{"class":1944}," forward",[94,31078,31079],{"class":104},"(self,x):\n",[94,31081,31082,31085,31087,31089,31092,31094],{"class":96,"line":2572},[94,31083,31084],{"class":104},"        x",[94,31086,150],{"class":100},[94,31088,30806],{"class":153},[94,31090,31091],{"class":104},".sig(",[94,31093,30806],{"class":153},[94,31095,31096],{"class":104},".c1(x))\n",[94,31098,31099,31101,31103,31105],{"class":96,"line":2580},[94,31100,31084],{"class":104},[94,31102,150],{"class":100},[94,31104,30806],{"class":153},[94,31106,31107],{"class":104},".s2(x)\n",[94,31109,31110,31112,31114,31116,31118,31120],{"class":96,"line":2585},[94,31111,31084],{"class":104},[94,31113,150],{"class":100},[94,31115,30806],{"class":153},[94,31117,31091],{"class":104},[94,31119,30806],{"class":153},[94,31121,31122],{"class":104},".c3(x))\n",[94,31124,31125,31127,31129,31131],{"class":96,"line":2591},[94,31126,31084],{"class":104},[94,31128,150],{"class":100},[94,31130,30806],{"class":153},[94,31132,31133],{"class":104},".s4(x)\n",[94,31135,31136,31138,31140,31142],{"class":96,"line":2597},[94,31137,31084],{"class":104},[94,31139,150],{"class":100},[94,31141,30806],{"class":153},[94,31143,31144],{"class":104},".flatten(x)\n",[94,31146,31147,31149,31151,31153,31155,31157],{"class":96,"line":2602},[94,31148,31084],{"class":104},[94,31150,150],{"class":100},[94,31152,30806],{"class":153},[94,31154,31091],{"class":104},[94,31156,30806],{"class":153},[94,31158,31159],{"class":104},".f5(x))\n",[94,31161,31162,31164,31166,31168,31170,31172],{"class":96,"line":7930},[94,31163,31084],{"class":104},[94,31165,150],{"class":100},[94,31167,30806],{"class":153},[94,31169,31091],{"class":104},[94,31171,30806],{"class":153},[94,31173,31174],{"class":104},".f6(x))\n",[94,31176,31177,31179,31181,31183],{"class":96,"line":7954},[94,31178,31084],{"class":104},[94,31180,150],{"class":100},[94,31182,30806],{"class":153},[94,31184,31185],{"class":104},".f7(x)\n",[94,31187,31188,31190],{"class":96,"line":7959},[94,31189,14734],{"class":100},[94,31191,31192],{"class":104}," x\n",[94,31194,31195],{"class":96,"line":7965},[94,31196,2381],{"emptyLinePlaceholder":20},[94,31198,31199,31201,31204,31206,31209],{"class":96,"line":7992},[94,31200,1512],{"class":100},[94,31202,31203],{"class":153}," __name__",[94,31205,2930],{"class":100},[94,31207,31208],{"class":209},"\"__main__\"",[94,31210,3720],{"class":104},[94,31212,31213],{"class":96,"line":7997},[94,31214,31215],{"class":163},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[94,31217,31218,31221,31223,31225,31228,31230,31233,31235,31237],{"class":96,"line":8003},[94,31219,31220],{"class":104},"    device",[94,31222,150],{"class":100},[94,31224,30434],{"class":104},[94,31226,31227],{"class":209},"\"cuda\"",[94,31229,1685],{"class":100},[94,31231,31232],{"class":104}," torch.cuda.is_available() ",[94,31234,1682],{"class":100},[94,31236,30459],{"class":209},[94,31238,111],{"class":104},[94,31240,31241],{"class":96,"line":8015},[94,31242,31243],{"class":163},"    # 如果就是想指定用cpu用下方代码:\n",[94,31245,31246],{"class":96,"line":8027},[94,31247,31248],{"class":163},"    # device=\"cpu\"\n",[94,31250,31251],{"class":96,"line":8039},[94,31252,31253],{"class":163},"    # print(device)\n",[94,31255,31256],{"class":96,"line":9698},[94,31257,2381],{"emptyLinePlaceholder":20},[94,31259,31260],{"class":96,"line":9723},[94,31261,31262],{"class":163},"    # 实例化模型\n",[94,31264,31265],{"class":96,"line":9746},[94,31266,31267],{"class":163},"    # 将模型放到设备中去运行\n",[94,31269,31270,31273,31275],{"class":96,"line":9770},[94,31271,31272],{"class":104},"    model",[94,31274,150],{"class":100},[94,31276,31277],{"class":104},"LeNet().to(device)\n",[94,31279,31280,31283,31286,31288,31290,31292,31294,31296],{"class":96,"line":9775},[94,31281,31282],{"class":153},"    print",[94,31284,31285],{"class":104},"(summary(model,(",[94,31287,322],{"class":153},[94,31289,483],{"class":104},[94,31291,1006],{"class":153},[94,31293,483],{"class":104},[94,31295,1006],{"class":153},[94,31297,31298],{"class":104},")))\n",[40,31300,31301],{},[1443,31302],{"alt":14,"src":31303},"\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",[40,31305,31306],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[48,31308,31309],{"start":15},[51,31310,31311],{},"训练",[40,31313,31314],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[40,31316,31317],{},"在训练之前可以将数据展示看一下",[85,31319,31321],{"className":30361,"code":31320,"language":30363,"meta":14,"style":14},"# 建立画图的函数，用于展示数据\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",[91,31322,31323,31328,31333,31345,31357,31370,31375,31387,31392,31404,31409,31421,31425,31429,31450,31462,31467,31488,31499,31503,31508,31526,31537,31542,31553,31558,31569,31573,31578,31593,31606,31611,31616,31629,31642,31655,31660,31664,31669,31689,31706,31726,31739,31752,31762,31777],{"__ignoreMap":14},[94,31324,31325],{"class":96,"line":97},[94,31326,31327],{"class":163},"# 建立画图的函数，用于展示数据\n",[94,31329,31330],{"class":96,"line":15},[94,31331,31332],{"class":163},"# torchvision中包含很多内置的数据集\n",[94,31334,31335,31337,31340,31342],{"class":96,"line":1160},[94,31336,30720],{"class":100},[94,31338,31339],{"class":104}," sklearn.externals.array_api_compat.torch ",[94,31341,30375],{"class":100},[94,31343,31344],{"class":104}," squeeze\n",[94,31346,31347,31349,31352,31354],{"class":96,"line":1175},[94,31348,30720],{"class":100},[94,31350,31351],{"class":104}," torchvision.datasets ",[94,31353,30375],{"class":100},[94,31355,31356],{"class":104}," FashionMNIST\n",[94,31358,31359,31361,31364,31367],{"class":96,"line":1181},[94,31360,30375],{"class":100},[94,31362,31363],{"class":104}," numpy ",[94,31365,31366],{"class":100},"as",[94,31368,31369],{"class":104}," np\n",[94,31371,31372],{"class":96,"line":1195},[94,31373,31374],{"class":163},"# 引入处理数据集的包\n",[94,31376,31377,31379,31382,31384],{"class":96,"line":1201},[94,31378,30720],{"class":100},[94,31380,31381],{"class":104}," torchvision ",[94,31383,30375],{"class":100},[94,31385,31386],{"class":104}," transforms\n",[94,31388,31389],{"class":96,"line":1292},[94,31390,31391],{"class":163},"# 从torch库中引入数据处理的包\n",[94,31393,31394,31396,31399,31401],{"class":96,"line":1298},[94,31395,30375],{"class":100},[94,31397,31398],{"class":104}," torch.utils.data ",[94,31400,31366],{"class":100},[94,31402,31403],{"class":104}," Data\n",[94,31405,31406],{"class":96,"line":1310},[94,31407,31408],{"class":163},"# 导入画图的库\n",[94,31410,31411,31413,31416,31418],{"class":96,"line":1593},[94,31412,30375],{"class":100},[94,31414,31415],{"class":104}," matplotlib.pyplot ",[94,31417,31366],{"class":100},[94,31419,31420],{"class":104}," plt\n",[94,31422,31423],{"class":96,"line":1598},[94,31424,2381],{"emptyLinePlaceholder":20},[94,31426,31427],{"class":96,"line":1604},[94,31428,2381],{"emptyLinePlaceholder":20},[94,31430,31431,31434,31436,31439,31442,31444,31447],{"class":96,"line":1609},[94,31432,31433],{"class":104},"train_data",[94,31435,150],{"class":100},[94,31437,31438],{"class":104},"FashionMNIST(",[94,31440,31441],{"class":5198},"root",[94,31443,150],{"class":100},[94,31445,31446],{"class":209},"'.\u002Fdata'",[94,31448,31449],{"class":104},",\n",[94,31451,31452,31455,31457,31460],{"class":96,"line":1623},[94,31453,31454],{"class":5198},"                        train",[94,31456,150],{"class":100},[94,31458,31459],{"class":153},"True",[94,31461,31449],{"class":104},[94,31463,31464],{"class":96,"line":1628},[94,31465,31466],{"class":163},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[94,31468,31469,31472,31474,31477,31480,31482,31485],{"class":96,"line":1634},[94,31470,31471],{"class":5198},"                        transform",[94,31473,150],{"class":100},[94,31475,31476],{"class":104},"transforms.Compose([transforms.Resize(",[94,31478,31479],{"class":5198},"size",[94,31481,150],{"class":100},[94,31483,31484],{"class":153},"224",[94,31486,31487],{"class":104},"),transforms.ToTensor()]),\n",[94,31489,31490,31493,31495,31497],{"class":96,"line":1655},[94,31491,31492],{"class":5198},"                        download",[94,31494,150],{"class":100},[94,31496,31459],{"class":153},[94,31498,111],{"class":104},[94,31500,31501],{"class":96,"line":1660},[94,31502,2381],{"emptyLinePlaceholder":20},[94,31504,31505],{"class":96,"line":1674},[94,31506,31507],{"class":163},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[94,31509,31510,31513,31515,31518,31521,31523],{"class":96,"line":1679},[94,31511,31512],{"class":104},"train_loader",[94,31514,150],{"class":100},[94,31516,31517],{"class":104},"Data.DataLoader(",[94,31519,31520],{"class":5198},"dataset",[94,31522,150],{"class":100},[94,31524,31525],{"class":104},"train_data,\n",[94,31527,31528,31531,31533,31535],{"class":96,"line":1708},[94,31529,31530],{"class":5198},"                             batch_size",[94,31532,150],{"class":100},[94,31534,308],{"class":153},[94,31536,31449],{"class":104},[94,31538,31539],{"class":96,"line":1713},[94,31540,31541],{"class":163},"                             # 数据是否打乱\n",[94,31543,31544,31547,31549,31551],{"class":96,"line":1730},[94,31545,31546],{"class":5198},"                             shuffle",[94,31548,150],{"class":100},[94,31550,31459],{"class":153},[94,31552,31449],{"class":104},[94,31554,31555],{"class":96,"line":1735},[94,31556,31557],{"class":163},"                             # 规定加载数据的进程\n",[94,31559,31560,31563,31565,31567],{"class":96,"line":1740},[94,31561,31562],{"class":5198},"                             num_workers",[94,31564,150],{"class":100},[94,31566,296],{"class":153},[94,31568,111],{"class":104},[94,31570,31571],{"class":96,"line":1745},[94,31572,2381],{"emptyLinePlaceholder":20},[94,31574,31575],{"class":96,"line":1759},[94,31576,31577],{"class":163},"# 获得一个batch的数据\n",[94,31579,31580,31582,31585,31587,31590],{"class":96,"line":1764},[94,31581,3006],{"class":100},[94,31583,31584],{"class":104}," step,(b_x,b_y) ",[94,31586,26026],{"class":100},[94,31588,31589],{"class":153}," enumerate",[94,31591,31592],{"class":104},"(train_loader):\n",[94,31594,31595,31597,31600,31602,31604],{"class":96,"line":2558},[94,31596,3082],{"class":100},[94,31598,31599],{"class":104}," step ",[94,31601,1065],{"class":100},[94,31603,4074],{"class":153},[94,31605,3720],{"class":104},[94,31607,31608],{"class":96,"line":2572},[94,31609,31610],{"class":100},"        break\n",[94,31612,31613],{"class":96,"line":2580},[94,31614,31615],{"class":163},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[94,31617,31618,31621,31623,31626],{"class":96,"line":2585},[94,31619,31620],{"class":104},"batch_x",[94,31622,150],{"class":100},[94,31624,31625],{"class":104},"b_x.squeeze().numpy()  ",[94,31627,31628],{"class":163},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[94,31630,31631,31634,31636,31639],{"class":96,"line":2591},[94,31632,31633],{"class":104},"batch_y",[94,31635,150],{"class":100},[94,31637,31638],{"class":104},"b_y.numpy()   ",[94,31640,31641],{"class":163},"#将张量转换成功numpy数组\n",[94,31643,31644,31647,31649,31652],{"class":96,"line":2597},[94,31645,31646],{"class":104},"class_label",[94,31648,150],{"class":100},[94,31650,31651],{"class":104},"train_data.classes  ",[94,31653,31654],{"class":163},"#训练集标签\n",[94,31656,31657],{"class":96,"line":2602},[94,31658,31659],{"class":163},"# print(class_label)\n",[94,31661,31662],{"class":96,"line":7930},[94,31663,2381],{"emptyLinePlaceholder":20},[94,31665,31666],{"class":96,"line":7954},[94,31667,31668],{"class":163},"# 可视化一个batch的图像\n",[94,31670,31671,31674,31677,31679,31681,31683,31685,31687],{"class":96,"line":7959},[94,31672,31673],{"class":104},"plt.figure(",[94,31675,31676],{"class":5198},"figsize",[94,31678,150],{"class":100},[94,31680,105],{"class":104},[94,31682,603],{"class":153},[94,31684,483],{"class":104},[94,31686,424],{"class":153},[94,31688,30480],{"class":104},[94,31690,31691,31693,31696,31698,31701,31703],{"class":96,"line":7965},[94,31692,3006],{"class":100},[94,31694,31695],{"class":104}," ii ",[94,31697,26026],{"class":100},[94,31699,31700],{"class":104}," np.arange(",[94,31702,7340],{"class":153},[94,31704,31705],{"class":104},"(batch_y)):\n",[94,31707,31708,31711,31713,31715,31717,31720,31722,31724],{"class":96,"line":7992},[94,31709,31710],{"class":104},"    plt.subplot(",[94,31712,398],{"class":153},[94,31714,483],{"class":104},[94,31716,706],{"class":153},[94,31718,31719],{"class":104},",ii ",[94,31721,586],{"class":100},[94,31723,25101],{"class":153},[94,31725,111],{"class":104},[94,31727,31728,31731,31734,31736],{"class":96,"line":7997},[94,31729,31730],{"class":104},"    plt.imshow(batch_x[ii,:,:],",[94,31732,31733],{"class":5198},"cmap",[94,31735,150],{"class":100},[94,31737,31738],{"class":104},"plt.cm.gray)\n",[94,31740,31741,31744,31746,31748,31750],{"class":96,"line":8003},[94,31742,31743],{"class":104},"    plt.title(class_label[batch_y[ii]],",[94,31745,31479],{"class":5198},[94,31747,150],{"class":100},[94,31749,551],{"class":153},[94,31751,111],{"class":104},[94,31753,31754,31757,31760],{"class":96,"line":8015},[94,31755,31756],{"class":104},"    plt.axis(",[94,31758,31759],{"class":209},"\"off\"",[94,31761,111],{"class":104},[94,31763,31764,31767,31770,31772,31775],{"class":96,"line":8027},[94,31765,31766],{"class":104},"    plt.subplots_adjust(",[94,31768,31769],{"class":5198},"wspace",[94,31771,150],{"class":100},[94,31773,31774],{"class":153},"0.05",[94,31776,111],{"class":104},[94,31778,31779],{"class":96,"line":8039},[94,31780,31781],{"class":104},"plt.show()\n",[40,31783,31784],{},"用matplotlib进行展示的过程可以后续再补",[40,31786,31787],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[40,31789,31790],{},"训练次数就是按照批次过整个训练集数据的次数",[40,31792,31793],{},"模型训练：",[85,31795,31797],{"className":30361,"code":31796,"language":30363,"meta":14,"style":14},"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",[91,31798,31799,31806,31813,31817,31829,31835,31846,31856,31866,31876,31886,31891,31903,31913,31917,31921,31926,31937,31950,31961,31978,31989,32028,32044,32056,32067,32072,32083,32099,32110,32121,32132,32139,32143,32148,32153,32157,32162,32172,32193,32197,32201,32206,32211,32216,32236,32240,32245,32255,32259,32264,32273,32278,32283,32288,32298,32302,32306,32311,32316,32326,32331,32341,32346,32355,32360,32369,32374,32383,32387,32392,32402,32406,32410,32415,32430,32458,32473,32477,32482,32487,32496,32501,32510,32515,32524,32529,32538,32543,32552,32557,32566,32571,32584,32589,32599,32604,32614,32620,32626,32632,32638,32649,32655,32675,32681,32692,32698,32704,32710,32716,32722,32728,32734,32754,32760,32776,32782,32796,32802,32817,32823,32832,32838,32847,32853,32859,32868,32874,32885,32891,32910,32916,32927,32933,32953,32969,32975,32989,32995,33001,33012,33018,33024,33034,33040,33051,33057,33067,33072,33078,33127,33174,33179,33185,33204,33210,33230,33236,33242,33252,33257,33263,33279,33324,33330,33336,33342,33353,33359,33365,33371,33389,33403,33412,33421,33430,33439,33445,33451,33459,33464,33470,33481,33487,33507,33513,33519,33525,33542,33548,33554,33560,33566,33572,33599,33623,33629,33635,33641,33652,33663,33669,33686,33709,33732,33738,33743,33752,33762,33768,33773,33779,33792,33798,33809,33820,33839],{"__ignoreMap":14},[94,31800,31801,31803],{"class":96,"line":97},[94,31802,30375],{"class":100},[94,31804,31805],{"class":104}," copy\n",[94,31807,31808,31810],{"class":96,"line":15},[94,31809,30375],{"class":100},[94,31811,31812],{"class":104}," time\n",[94,31814,31815],{"class":96,"line":1160},[94,31816,2381],{"emptyLinePlaceholder":20},[94,31818,31819,31821,31824,31826],{"class":96,"line":1175},[94,31820,30375],{"class":100},[94,31822,31823],{"class":104}," pandas ",[94,31825,31366],{"class":100},[94,31827,31828],{"class":104}," pd\n",[94,31830,31831,31833],{"class":96,"line":1181},[94,31832,30375],{"class":100},[94,31834,30378],{"class":104},[94,31836,31837,31839,31841,31843],{"class":96,"line":1195},[94,31838,30720],{"class":100},[94,31840,31398],{"class":104},[94,31842,30375],{"class":100},[94,31844,31845],{"class":104}," Dataset\n",[94,31847,31848,31850,31852,31854],{"class":96,"line":1201},[94,31849,30720],{"class":100},[94,31851,31351],{"class":104},[94,31853,30375],{"class":100},[94,31855,31356],{"class":104},[94,31857,31858,31860,31862,31864],{"class":96,"line":1292},[94,31859,30720],{"class":100},[94,31861,31381],{"class":104},[94,31863,30375],{"class":100},[94,31865,31386],{"class":104},[94,31867,31868,31870,31872,31874],{"class":96,"line":1298},[94,31869,30375],{"class":100},[94,31871,31398],{"class":104},[94,31873,31366],{"class":100},[94,31875,31403],{"class":104},[94,31877,31878,31880,31882,31884],{"class":96,"line":1310},[94,31879,30375],{"class":100},[94,31881,31415],{"class":104},[94,31883,31366],{"class":100},[94,31885,31420],{"class":104},[94,31887,31888],{"class":96,"line":1593},[94,31889,31890],{"class":163},"# 导入模型\n",[94,31892,31893,31895,31898,31900],{"class":96,"line":1598},[94,31894,30720],{"class":100},[94,31896,31897],{"class":104}," model ",[94,31899,30375],{"class":100},[94,31901,31902],{"class":104}," LeNet\n",[94,31904,31905,31907,31909,31911],{"class":96,"line":1604},[94,31906,30720],{"class":100},[94,31908,30723],{"class":104},[94,31910,30375],{"class":100},[94,31912,30728],{"class":104},[94,31914,31915],{"class":96,"line":1609},[94,31916,2381],{"emptyLinePlaceholder":20},[94,31918,31919],{"class":96,"line":1623},[94,31920,2381],{"emptyLinePlaceholder":20},[94,31922,31923],{"class":96,"line":1628},[94,31924,31925],{"class":163},"# 处理训练集与验证集函数--->划分数据集\n",[94,31927,31928,31931,31934],{"class":96,"line":1634},[94,31929,31930],{"class":100},"def",[94,31932,31933],{"class":1944}," train_val_data_process",[94,31935,31936],{"class":104},"():\n",[94,31938,31939,31942,31944,31946,31948],{"class":96,"line":1655},[94,31940,31941],{"class":104},"    train_data",[94,31943,150],{"class":100},[94,31945,31438],{"class":104},[94,31947,31446],{"class":209},[94,31949,31449],{"class":104},[94,31951,31952,31955,31957,31959],{"class":96,"line":1660},[94,31953,31954],{"class":5198},"                            train",[94,31956,150],{"class":100},[94,31958,31459],{"class":153},[94,31960,31449],{"class":104},[94,31962,31963,31966,31968,31970,31972,31974,31976],{"class":96,"line":1674},[94,31964,31965],{"class":5198},"                            transform",[94,31967,150],{"class":100},[94,31969,31476],{"class":104},[94,31971,31479],{"class":5198},[94,31973,150],{"class":100},[94,31975,1006],{"class":153},[94,31977,31487],{"class":104},[94,31979,31980,31983,31985,31987],{"class":96,"line":1679},[94,31981,31982],{"class":5198},"                            download",[94,31984,150],{"class":100},[94,31986,31459],{"class":153},[94,31988,111],{"class":104},[94,31990,31991,31994,31996,31999,32002,32004,32007,32009,32011,32014,32016,32018,32021,32023,32025],{"class":96,"line":1708},[94,31992,31993],{"class":104},"    train_data,val_data",[94,31995,150],{"class":100},[94,31997,31998],{"class":104},"Data.random_split(train_data,[",[94,32000,32001],{"class":153},"round",[94,32003,105],{"class":104},[94,32005,32006],{"class":153},"0.8",[94,32008,560],{"class":100},[94,32010,7340],{"class":153},[94,32012,32013],{"class":104},"(train_data)),",[94,32015,32001],{"class":153},[94,32017,105],{"class":104},[94,32019,32020],{"class":153},"0.2",[94,32022,560],{"class":100},[94,32024,7340],{"class":153},[94,32026,32027],{"class":104},"(train_data))])\n",[94,32029,32030,32033,32035,32038,32040,32042],{"class":96,"line":1713},[94,32031,32032],{"class":104},"    train_dataloader ",[94,32034,150],{"class":100},[94,32036,32037],{"class":104}," Data.DataLoader(",[94,32039,31520],{"class":5198},[94,32041,150],{"class":100},[94,32043,31525],{"class":104},[94,32045,32046,32049,32051,32054],{"class":96,"line":1730},[94,32047,32048],{"class":5198},"                                       batch_size",[94,32050,150],{"class":100},[94,32052,32053],{"class":153},"128",[94,32055,31449],{"class":104},[94,32057,32058,32061,32063,32065],{"class":96,"line":1735},[94,32059,32060],{"class":5198},"                                       shuffle",[94,32062,150],{"class":100},[94,32064,31459],{"class":153},[94,32066,31449],{"class":104},[94,32068,32069],{"class":96,"line":1740},[94,32070,32071],{"class":163},"                                       # 规定8个进程\n",[94,32073,32074,32077,32079,32081],{"class":96,"line":1745},[94,32075,32076],{"class":5198},"                                       num_workers",[94,32078,150],{"class":100},[94,32080,500],{"class":153},[94,32082,111],{"class":104},[94,32084,32085,32088,32090,32092,32094,32096],{"class":96,"line":1759},[94,32086,32087],{"class":104},"    val_dataloader",[94,32089,150],{"class":100},[94,32091,31517],{"class":104},[94,32093,31520],{"class":5198},[94,32095,150],{"class":100},[94,32097,32098],{"class":104},"val_data,\n",[94,32100,32101,32104,32106,32108],{"class":96,"line":1764},[94,32102,32103],{"class":5198},"                                   batch_size",[94,32105,150],{"class":100},[94,32107,32053],{"class":153},[94,32109,31449],{"class":104},[94,32111,32112,32115,32117,32119],{"class":96,"line":2558},[94,32113,32114],{"class":5198},"                                   shuffle",[94,32116,150],{"class":100},[94,32118,31459],{"class":153},[94,32120,31449],{"class":104},[94,32122,32123,32126,32128,32130],{"class":96,"line":2572},[94,32124,32125],{"class":5198},"                                   num_workers",[94,32127,150],{"class":100},[94,32129,500],{"class":153},[94,32131,111],{"class":104},[94,32133,32134,32136],{"class":96,"line":2580},[94,32135,4071],{"class":100},[94,32137,32138],{"class":104}," train_dataloader,val_dataloader\n",[94,32140,32141],{"class":96,"line":2585},[94,32142,2381],{"emptyLinePlaceholder":20},[94,32144,32145],{"class":96,"line":2591},[94,32146,32147],{"class":163},"# 验证是否出错\n",[94,32149,32150],{"class":96,"line":2597},[94,32151,32152],{"class":163},"# train_val_data_process()\n",[94,32154,32155],{"class":96,"line":2602},[94,32156,2381],{"emptyLinePlaceholder":20},[94,32158,32159],{"class":96,"line":7930},[94,32160,32161],{"class":163},"# 定义模型训练函数\n",[94,32163,32164,32166,32169],{"class":96,"line":7954},[94,32165,31930],{"class":100},[94,32167,32168],{"class":1944}," train_model_process",[94,32170,32171],{"class":104},"(model,train_dataloader,val_dataloader,num_epochs):\n",[94,32173,32174,32176,32178,32180,32182,32184,32186,32188,32191],{"class":96,"line":7959},[94,32175,31220],{"class":104},[94,32177,150],{"class":100},[94,32179,30434],{"class":104},[94,32181,31227],{"class":209},[94,32183,1685],{"class":100},[94,32185,31232],{"class":104},[94,32187,1682],{"class":100},[94,32189,32190],{"class":209}," 'cpu'",[94,32192,111],{"class":104},[94,32194,32195],{"class":96,"line":7965},[94,32196,2381],{"emptyLinePlaceholder":20},[94,32198,32199],{"class":96,"line":7992},[94,32200,2381],{"emptyLinePlaceholder":20},[94,32202,32203],{"class":96,"line":7997},[94,32204,32205],{"class":163},"    # 定义优化器\n",[94,32207,32208],{"class":96,"line":8003},[94,32209,32210],{"class":163},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[94,32212,32213],{"class":96,"line":8015},[94,32214,32215],{"class":163},"    # lr为学习率\n",[94,32217,32218,32221,32223,32226,32229,32231,32234],{"class":96,"line":8027},[94,32219,32220],{"class":104},"    optimizer",[94,32222,150],{"class":100},[94,32224,32225],{"class":104},"torch.optim.Adam(model.parameters(),",[94,32227,32228],{"class":5198},"lr",[94,32230,150],{"class":100},[94,32232,32233],{"class":153},"0.001",[94,32235,111],{"class":104},[94,32237,32238],{"class":96,"line":8039},[94,32239,2381],{"emptyLinePlaceholder":20},[94,32241,32242],{"class":96,"line":9698},[94,32243,32244],{"class":163},"    # 定义损失函数使用交叉熵损失函数\n",[94,32246,32247,32250,32252],{"class":96,"line":9723},[94,32248,32249],{"class":104},"    criterion",[94,32251,150],{"class":100},[94,32253,32254],{"class":104},"nn.CrossEntropyLoss()\n",[94,32256,32257],{"class":96,"line":9746},[94,32258,2381],{"emptyLinePlaceholder":20},[94,32260,32261],{"class":96,"line":9770},[94,32262,32263],{"class":163},"    # 将模型放到GPU中进行训练\n",[94,32265,32266,32268,32270],{"class":96,"line":9775},[94,32267,31272],{"class":104},[94,32269,150],{"class":100},[94,32271,32272],{"class":104},"model.to(device)\n",[94,32274,32275],{"class":96,"line":9780},[94,32276,32277],{"class":163},"    # 复制当前模型的参数\n",[94,32279,32280],{"class":96,"line":9785},[94,32281,32282],{"class":163},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[94,32284,32285],{"class":96,"line":9794},[94,32286,32287],{"class":163},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[94,32289,32290,32293,32295],{"class":96,"line":9799},[94,32291,32292],{"class":104},"    best_model_wts",[94,32294,150],{"class":100},[94,32296,32297],{"class":104},"copy.deepcopy(model.state_dict())\n",[94,32299,32300],{"class":96,"line":9805},[94,32301,2381],{"emptyLinePlaceholder":20},[94,32303,32304],{"class":96,"line":9826},[94,32305,2381],{"emptyLinePlaceholder":20},[94,32307,32308],{"class":96,"line":9832},[94,32309,32310],{"class":163},"    # 初始化参数\n",[94,32312,32313],{"class":96,"line":9846},[94,32314,32315],{"class":163},"    # 最高准确度\n",[94,32317,32318,32321,32323],{"class":96,"line":9852},[94,32319,32320],{"class":104},"    best_acc",[94,32322,150],{"class":100},[94,32324,32325],{"class":153},"0.0\n",[94,32327,32328],{"class":96,"line":9879},[94,32329,32330],{"class":163},"    # 训练集损失列表\n",[94,32332,32333,32336,32338],{"class":96,"line":9888},[94,32334,32335],{"class":104},"    train_loss_all",[94,32337,150],{"class":100},[94,32339,32340],{"class":104},"[]\n",[94,32342,32343],{"class":96,"line":9894},[94,32344,32345],{"class":163},"    # 验证集函数列表\n",[94,32347,32348,32351,32353],{"class":96,"line":9902},[94,32349,32350],{"class":104},"    val_loss_all",[94,32352,150],{"class":100},[94,32354,32340],{"class":104},[94,32356,32357],{"class":96,"line":9907},[94,32358,32359],{"class":163},"    # 训练集准确度列表\n",[94,32361,32362,32365,32367],{"class":96,"line":16586},[94,32363,32364],{"class":104},"    train_acc_all",[94,32366,150],{"class":100},[94,32368,32340],{"class":104},[94,32370,32371],{"class":96,"line":16592},[94,32372,32373],{"class":163},"    # 验证集准确度列表\n",[94,32375,32376,32379,32381],{"class":96,"line":16615},[94,32377,32378],{"class":104},"    val_acc_all",[94,32380,150],{"class":100},[94,32382,32340],{"class":104},[94,32384,32385],{"class":96,"line":16621},[94,32386,2381],{"emptyLinePlaceholder":20},[94,32388,32389],{"class":96,"line":16644},[94,32390,32391],{"class":163},"    # 保存当前时间--->方便看每轮训练的时间\n",[94,32393,32394,32397,32399],{"class":96,"line":16658},[94,32395,32396],{"class":104},"    since",[94,32398,150],{"class":100},[94,32400,32401],{"class":104},"time.time()\n",[94,32403,32404],{"class":96,"line":16678},[94,32405,2381],{"emptyLinePlaceholder":20},[94,32407,32408],{"class":96,"line":16684},[94,32409,2381],{"emptyLinePlaceholder":20},[94,32411,32412],{"class":96,"line":16695},[94,32413,32414],{"class":163},"    # 准备工作完成--->开始训练模型\n",[94,32416,32417,32419,32422,32424,32427],{"class":96,"line":16718},[94,32418,3182],{"class":100},[94,32420,32421],{"class":104}," epoch ",[94,32423,26026],{"class":100},[94,32425,32426],{"class":153}," range",[94,32428,32429],{"class":104},"(num_epochs):\n",[94,32431,32432,32435,32437,32440,32443,32445,32447,32449,32452,32454,32456],{"class":96,"line":16740},[94,32433,32434],{"class":153},"        print",[94,32436,105],{"class":104},[94,32438,32439],{"class":209},"\"Epoch ",[94,32441,32442],{"class":153},"{}",[94,32444,689],{"class":209},[94,32446,32442],{"class":153},[94,32448,356],{"class":209},[94,32450,32451],{"class":104},".format(epoch,num_epochs",[94,32453,637],{"class":100},[94,32455,322],{"class":153},[94,32457,30480],{"class":104},[94,32459,32460,32462,32464,32467,32469,32471],{"class":96,"line":16745},[94,32461,32434],{"class":153},[94,32463,105],{"class":104},[94,32465,32466],{"class":209},"\"-\"",[94,32468,560],{"class":100},[94,32470,551],{"class":153},[94,32472,111],{"class":104},[94,32474,32475],{"class":96,"line":16751},[94,32476,2381],{"emptyLinePlaceholder":20},[94,32478,32479],{"class":96,"line":16765},[94,32480,32481],{"class":163},"        # 初始化参数\n",[94,32483,32484],{"class":96,"line":16778},[94,32485,32486],{"class":163},"        # 训练集损失函数\n",[94,32488,32489,32492,32494],{"class":96,"line":16783},[94,32490,32491],{"class":104},"        train_loss",[94,32493,150],{"class":100},[94,32495,32325],{"class":153},[94,32497,32498],{"class":96,"line":16797},[94,32499,32500],{"class":163},"        # 训练集准确度\n",[94,32502,32503,32506,32508],{"class":96,"line":16802},[94,32504,32505],{"class":104},"        train_corrects",[94,32507,150],{"class":100},[94,32509,3066],{"class":153},[94,32511,32512],{"class":96,"line":16808},[94,32513,32514],{"class":163},"        # 验证集损失函数\n",[94,32516,32517,32520,32522],{"class":96,"line":16813},[94,32518,32519],{"class":104},"        val_loss",[94,32521,150],{"class":100},[94,32523,32325],{"class":153},[94,32525,32526],{"class":96,"line":16827},[94,32527,32528],{"class":163},"        # 验证集准确度\n",[94,32530,32531,32534,32536],{"class":96,"line":16832},[94,32532,32533],{"class":104},"        val_corrects",[94,32535,150],{"class":100},[94,32537,3066],{"class":153},[94,32539,32540],{"class":96,"line":16837},[94,32541,32542],{"class":163},"        # 训练集样本数量\n",[94,32544,32545,32548,32550],{"class":96,"line":16851},[94,32546,32547],{"class":104},"        train_num",[94,32549,150],{"class":100},[94,32551,3066],{"class":153},[94,32553,32554],{"class":96,"line":16863},[94,32555,32556],{"class":163},"        # 验证集样本数量\n",[94,32558,32559,32562,32564],{"class":96,"line":16868},[94,32560,32561],{"class":104},"        val_num",[94,32563,150],{"class":100},[94,32565,3066],{"class":153},[94,32567,32568],{"class":96,"line":16881},[94,32569,32570],{"class":163},"        # 将数据放到设备,并开始训练\n",[94,32572,32573,32575,32577,32579,32581],{"class":96,"line":16886},[94,32574,3384],{"class":100},[94,32576,31584],{"class":104},[94,32578,26026],{"class":100},[94,32580,31589],{"class":153},[94,32582,32583],{"class":104},"(train_dataloader):\n",[94,32585,32586],{"class":96,"line":16891},[94,32587,32588],{"class":163},"            # 将特征放入到训练设备\n",[94,32590,32591,32594,32596],{"class":96,"line":16896},[94,32592,32593],{"class":104},"            b_x",[94,32595,150],{"class":100},[94,32597,32598],{"class":104},"b_x.to(device)\n",[94,32600,32601],{"class":96,"line":16909},[94,32602,32603],{"class":163},"            # 将标签放入到训练设备当中\n",[94,32605,32606,32609,32611],{"class":96,"line":16914},[94,32607,32608],{"class":104},"            b_y",[94,32610,150],{"class":100},[94,32612,32613],{"class":104},"b_y.to(device)\n",[94,32615,32617],{"class":96,"line":32616},98,[94,32618,32619],{"class":163},"            # 设置模型为训练模式\n",[94,32621,32623],{"class":96,"line":32622},99,[94,32624,32625],{"class":104},"            model.train()\n",[94,32627,32629],{"class":96,"line":32628},100,[94,32630,32631],{"class":163},"            # 将数据放到模型当中,开始前向传播\n",[94,32633,32635],{"class":96,"line":32634},101,[94,32636,32637],{"class":163},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[94,32639,32641,32644,32646],{"class":96,"line":32640},102,[94,32642,32643],{"class":104},"            output",[94,32645,150],{"class":100},[94,32647,32648],{"class":104},"model(b_x)\n",[94,32650,32652],{"class":96,"line":32651},103,[94,32653,32654],{"class":163},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[94,32656,32658,32661,32663,32666,32669,32671,32673],{"class":96,"line":32657},104,[94,32659,32660],{"class":104},"            pre_lab",[94,32662,150],{"class":100},[94,32664,32665],{"class":104},"torch.argmax(output,",[94,32667,32668],{"class":5198},"dim",[94,32670,150],{"class":100},[94,32672,322],{"class":153},[94,32674,111],{"class":104},[94,32676,32678],{"class":96,"line":32677},105,[94,32679,32680],{"class":163},"            # 计算每一个batch的损失函数\n",[94,32682,32684,32687,32689],{"class":96,"line":32683},106,[94,32685,32686],{"class":104},"            loss",[94,32688,150],{"class":100},[94,32690,32691],{"class":104},"criterion(output,b_y)\n",[94,32693,32695],{"class":96,"line":32694},107,[94,32696,32697],{"class":163},"            # 将梯度初始化为0\n",[94,32699,32701],{"class":96,"line":32700},108,[94,32702,32703],{"class":104},"            optimizer.zero_grad()\n",[94,32705,32707],{"class":96,"line":32706},109,[94,32708,32709],{"class":163},"            # 梯度置为0后再进行反向传播\n",[94,32711,32713],{"class":96,"line":32712},110,[94,32714,32715],{"class":104},"            loss.backward()\n",[94,32717,32719],{"class":96,"line":32718},111,[94,32720,32721],{"class":163},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[94,32723,32725],{"class":96,"line":32724},112,[94,32726,32727],{"class":104},"            optimizer.step()\n",[94,32729,32731],{"class":96,"line":32730},113,[94,32732,32733],{"class":163},"            # loss.item()指的是batch的平均损失\n",[94,32735,32737,32740,32742,32745,32747,32750,32752],{"class":96,"line":32736},114,[94,32738,32739],{"class":104},"            train_loss",[94,32741,9459],{"class":100},[94,32743,32744],{"class":104},"loss.item()",[94,32746,560],{"class":100},[94,32748,32749],{"class":104},"b_x.size(",[94,32751,296],{"class":153},[94,32753,111],{"class":104},[94,32755,32757],{"class":96,"line":32756},115,[94,32758,32759],{"class":163},"            # 计算每个批次中正确预测的数量\n",[94,32761,32763,32766,32768,32771,32773],{"class":96,"line":32762},116,[94,32764,32765],{"class":104},"            train_corrects",[94,32767,9459],{"class":100},[94,32769,32770],{"class":104},"torch.sum(pre_lab",[94,32772,2930],{"class":100},[94,32774,32775],{"class":104},"b_y.data)\n",[94,32777,32779],{"class":96,"line":32778},117,[94,32780,32781],{"class":163},"            # 计算目前为止一共处理了多少样本\n",[94,32783,32785,32788,32790,32792,32794],{"class":96,"line":32784},118,[94,32786,32787],{"class":104},"            train_num",[94,32789,9459],{"class":100},[94,32791,32749],{"class":104},[94,32793,296],{"class":153},[94,32795,111],{"class":104},[94,32797,32799],{"class":96,"line":32798},119,[94,32800,32801],{"class":163},"        # 验证数据\n",[94,32803,32805,32807,32810,32812,32814],{"class":96,"line":32804},120,[94,32806,3384],{"class":100},[94,32808,32809],{"class":104}," step ,(b_x,b_y) ",[94,32811,26026],{"class":100},[94,32813,31589],{"class":153},[94,32815,32816],{"class":104},"(val_dataloader):\n",[94,32818,32820],{"class":96,"line":32819},121,[94,32821,32822],{"class":163},"            # 将特征放到验证设备当中\n",[94,32824,32826,32828,32830],{"class":96,"line":32825},122,[94,32827,32593],{"class":104},[94,32829,150],{"class":100},[94,32831,32598],{"class":104},[94,32833,32835],{"class":96,"line":32834},123,[94,32836,32837],{"class":163},"            # 将标签放到放到训练设备当中\n",[94,32839,32841,32843,32845],{"class":96,"line":32840},124,[94,32842,32608],{"class":104},[94,32844,150],{"class":100},[94,32846,32613],{"class":104},[94,32848,32850],{"class":96,"line":32849},125,[94,32851,32852],{"class":163},"            # 开启验证模式，设置模型为评估模式\n",[94,32854,32856],{"class":96,"line":32855},126,[94,32857,32858],{"class":104},"            model.eval()\n",[94,32860,32862,32865],{"class":96,"line":32861},127,[94,32863,32864],{"class":100},"            with",[94,32866,32867],{"class":104}," torch.no_grad():\n",[94,32869,32871],{"class":96,"line":32870},128,[94,32872,32873],{"class":163},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[94,32875,32877,32880,32882],{"class":96,"line":32876},129,[94,32878,32879],{"class":104},"                output ",[94,32881,150],{"class":100},[94,32883,32884],{"class":104}," model(b_x)\n",[94,32886,32888],{"class":96,"line":32887},130,[94,32889,32890],{"class":163},"                # 查找每一行中最大值对应的下标\n",[94,32892,32894,32897,32899,32902,32904,32906,32908],{"class":96,"line":32893},131,[94,32895,32896],{"class":104},"                pre_lab ",[94,32898,150],{"class":100},[94,32900,32901],{"class":104}," torch.argmax(output, ",[94,32903,32668],{"class":5198},[94,32905,150],{"class":100},[94,32907,322],{"class":153},[94,32909,111],{"class":104},[94,32911,32913],{"class":96,"line":32912},132,[94,32914,32915],{"class":163},"                # 计算验证集上的当前 batch 损失\n",[94,32917,32919,32922,32924],{"class":96,"line":32918},133,[94,32920,32921],{"class":104},"                val_batch_loss ",[94,32923,150],{"class":100},[94,32925,32926],{"class":104}," criterion(output, b_y)\n",[94,32928,32930],{"class":96,"line":32929},134,[94,32931,32932],{"class":163},"                # 对损失函数进行累加（按样本数加权）\n",[94,32934,32936,32939,32941,32944,32946,32949,32951],{"class":96,"line":32935},135,[94,32937,32938],{"class":104},"                val_loss ",[94,32940,9459],{"class":100},[94,32942,32943],{"class":104}," val_batch_loss.item() ",[94,32945,560],{"class":100},[94,32947,32948],{"class":104}," b_x.size(",[94,32950,296],{"class":153},[94,32952,111],{"class":104},[94,32954,32956,32959,32961,32964,32966],{"class":96,"line":32955},136,[94,32957,32958],{"class":104},"                val_corrects ",[94,32960,9459],{"class":100},[94,32962,32963],{"class":104}," torch.sum(pre_lab ",[94,32965,2930],{"class":100},[94,32967,32968],{"class":104}," b_y.data)\n",[94,32970,32972],{"class":96,"line":32971},137,[94,32973,32974],{"class":163},"                # 当前用于验证的样本数量\n",[94,32976,32978,32981,32983,32985,32987],{"class":96,"line":32977},138,[94,32979,32980],{"class":104},"            val_num ",[94,32982,9459],{"class":100},[94,32984,32948],{"class":104},[94,32986,296],{"class":153},[94,32988,111],{"class":104},[94,32990,32992],{"class":96,"line":32991},139,[94,32993,32994],{"class":163},"        # 计算并保存每一次迭代的loss值和准确率\n",[94,32996,32998],{"class":96,"line":32997},140,[94,32999,33000],{"class":163},"        # 计算并保存训练集的loss值\n",[94,33002,33004,33007,33009],{"class":96,"line":33003},141,[94,33005,33006],{"class":104},"        train_loss_all.append(train_loss",[94,33008,689],{"class":100},[94,33010,33011],{"class":104},"train_num)\n",[94,33013,33015],{"class":96,"line":33014},142,[94,33016,33017],{"class":163},"        # 取双精度\n",[94,33019,33021],{"class":96,"line":33020},143,[94,33022,33023],{"class":163},"        # 计算并保存训练集的准确率\n",[94,33025,33027,33030,33032],{"class":96,"line":33026},144,[94,33028,33029],{"class":104},"        train_acc_all.append(train_corrects.double().item()",[94,33031,689],{"class":100},[94,33033,33011],{"class":104},[94,33035,33037],{"class":96,"line":33036},145,[94,33038,33039],{"class":163},"        # 计算并保存验证集的loss值\n",[94,33041,33043,33046,33048],{"class":96,"line":33042},146,[94,33044,33045],{"class":104},"        val_loss_all.append(val_loss",[94,33047,689],{"class":100},[94,33049,33050],{"class":104},"val_num)\n",[94,33052,33054],{"class":96,"line":33053},147,[94,33055,33056],{"class":163},"        # 计算并保存验证集的准确率\n",[94,33058,33060,33063,33065],{"class":96,"line":33059},148,[94,33061,33062],{"class":104},"        val_acc_all.append(val_corrects.double().item()",[94,33064,689],{"class":100},[94,33066,33050],{"class":104},[94,33068,33070],{"class":96,"line":33069},149,[94,33071,2381],{"emptyLinePlaceholder":20},[94,33073,33075],{"class":96,"line":33074},150,[94,33076,33077],{"class":163},"        # 打印训练一轮的loss值和准确率\n",[94,33079,33081,33083,33085,33087,33089,33092,33094,33097,33099,33102,33104,33106,33108,33110,33113,33115,33117,33120,33122,33124],{"class":96,"line":33080},151,[94,33082,32434],{"class":153},[94,33084,105],{"class":104},[94,33086,3573],{"class":209},[94,33088,32442],{"class":153},[94,33090,33091],{"class":209},"train loss:",[94,33093,1001],{"class":153},[94,33095,33096],{"class":100},":.4f",[94,33098,1051],{"class":153},[94,33100,33101],{"class":209}," train acc:",[94,33103,1001],{"class":153},[94,33105,33096],{"class":100},[94,33107,1051],{"class":153},[94,33109,3573],{"class":209},[94,33111,33112],{"class":104},".format(epoch,train_loss_all[",[94,33114,637],{"class":100},[94,33116,322],{"class":153},[94,33118,33119],{"class":104},"],train_acc_all[",[94,33121,637],{"class":100},[94,33123,322],{"class":153},[94,33125,33126],{"class":104},"]))\n",[94,33128,33130,33132,33134,33136,33138,33141,33143,33145,33147,33150,33152,33154,33156,33158,33161,33163,33165,33168,33170,33172],{"class":96,"line":33129},152,[94,33131,32434],{"class":153},[94,33133,105],{"class":104},[94,33135,3573],{"class":209},[94,33137,32442],{"class":153},[94,33139,33140],{"class":209},"val loss:",[94,33142,1001],{"class":153},[94,33144,33096],{"class":100},[94,33146,1051],{"class":153},[94,33148,33149],{"class":209}," val acc:",[94,33151,1001],{"class":153},[94,33153,33096],{"class":100},[94,33155,1051],{"class":153},[94,33157,3573],{"class":209},[94,33159,33160],{"class":104},".format(epoch,val_loss_all[",[94,33162,637],{"class":100},[94,33164,322],{"class":153},[94,33166,33167],{"class":104},"],val_acc_all[",[94,33169,637],{"class":100},[94,33171,322],{"class":153},[94,33173,33126],{"class":104},[94,33175,33177],{"class":96,"line":33176},153,[94,33178,2381],{"emptyLinePlaceholder":20},[94,33180,33182],{"class":96,"line":33181},154,[94,33183,33184],{"class":163},"        # 判断准确度--->保存最优模型\n",[94,33186,33188,33190,33193,33195,33197,33199,33201],{"class":96,"line":33187},155,[94,33189,2478],{"class":100},[94,33191,33192],{"class":104}," val_acc_all[",[94,33194,637],{"class":100},[94,33196,322],{"class":153},[94,33198,1045],{"class":104},[94,33200,1065],{"class":100},[94,33202,33203],{"class":104},"best_acc:\n",[94,33205,33207],{"class":96,"line":33206},156,[94,33208,33209],{"class":163},"            # 保存当前模型准确度\n",[94,33211,33213,33216,33218,33220,33223,33225,33227],{"class":96,"line":33212},157,[94,33214,33215],{"class":104},"            best_acc:",[94,33217,144],{"class":153},[94,33219,150],{"class":100},[94,33221,33222],{"class":104},"val_acc_all[",[94,33224,637],{"class":100},[94,33226,322],{"class":153},[94,33228,33229],{"class":104},"]\n",[94,33231,33233],{"class":96,"line":33232},158,[94,33234,33235],{"class":163},"            # 保存当前的准确度\n",[94,33237,33239],{"class":96,"line":33238},159,[94,33240,33241],{"class":163},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[94,33243,33245,33248,33250],{"class":96,"line":33244},160,[94,33246,33247],{"class":104},"            best_model_wts",[94,33249,150],{"class":100},[94,33251,32297],{"class":104},[94,33253,33255],{"class":96,"line":33254},161,[94,33256,2381],{"emptyLinePlaceholder":20},[94,33258,33260],{"class":96,"line":33259},162,[94,33261,33262],{"class":163},"        # 计算耗时\n",[94,33264,33266,33269,33271,33274,33276],{"class":96,"line":33265},163,[94,33267,33268],{"class":104},"        time_use",[94,33270,150],{"class":100},[94,33272,33273],{"class":104},"time.time()",[94,33275,637],{"class":100},[94,33277,33278],{"class":104},"since\n",[94,33280,33282,33284,33286,33289,33291,33294,33296,33298,33300,33302,33304,33307,33310,33313,33315,33318,33320,33322],{"class":96,"line":33281},164,[94,33283,32434],{"class":153},[94,33285,105],{"class":104},[94,33287,33288],{"class":209},"'训练和验证耗费的时间",[94,33290,1001],{"class":153},[94,33292,33293],{"class":100},":.0f",[94,33295,1051],{"class":153},[94,33297,649],{"class":209},[94,33299,1001],{"class":153},[94,33301,33293],{"class":100},[94,33303,1051],{"class":153},[94,33305,33306],{"class":209},"s'",[94,33308,33309],{"class":104},".format(time_use",[94,33311,33312],{"class":100},"\u002F\u002F",[94,33314,1012],{"class":153},[94,33316,33317],{"class":104},",time_use",[94,33319,433],{"class":100},[94,33321,1012],{"class":153},[94,33323,30480],{"class":104},[94,33325,33327],{"class":96,"line":33326},165,[94,33328,33329],{"class":163},"    # 选择最优参数\n",[94,33331,33333],{"class":96,"line":33332},166,[94,33334,33335],{"class":163},"    # 加载最高准确率下的模型参数\n",[94,33337,33339],{"class":96,"line":33338},167,[94,33340,33341],{"class":163},"    # model.load_state_dict(best_model_wts)\n",[94,33343,33345,33348,33351],{"class":96,"line":33344},168,[94,33346,33347],{"class":104},"    torch.save(model.state_dict(best_model_wts), ",[94,33349,33350],{"class":209},"'.\u002Fbest_model.pth'",[94,33352,111],{"class":104},[94,33354,33356],{"class":96,"line":33355},169,[94,33357,33358],{"class":163},"    # 或者写成\n",[94,33360,33362],{"class":96,"line":33361},170,[94,33363,33364],{"class":163},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[94,33366,33368],{"class":96,"line":33367},171,[94,33369,33370],{"class":163},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[94,33372,33374,33377,33379,33382,33385,33387],{"class":96,"line":33373},172,[94,33375,33376],{"class":104},"    train_process",[94,33378,150],{"class":100},[94,33380,33381],{"class":104},"pd.DataFrame(",[94,33383,33384],{"class":5198},"data",[94,33386,150],{"class":100},[94,33388,1527],{"class":104},[94,33390,33392,33395,33397,33400],{"class":96,"line":33391},173,[94,33393,33394],{"class":209},"        \"epoch\"",[94,33396,964],{"class":104},[94,33398,33399],{"class":153},"range",[94,33401,33402],{"class":104},"(num_epochs),\n",[94,33404,33406,33409],{"class":96,"line":33405},174,[94,33407,33408],{"class":209},"        \"train_loss_all\"",[94,33410,33411],{"class":104},":train_loss_all,\n",[94,33413,33415,33418],{"class":96,"line":33414},175,[94,33416,33417],{"class":209},"        \"val_loss_all\"",[94,33419,33420],{"class":104},":val_loss_all,\n",[94,33422,33424,33427],{"class":96,"line":33423},176,[94,33425,33426],{"class":209},"        \"train_acc_all\"",[94,33428,33429],{"class":104},":train_acc_all,\n",[94,33431,33433,33436],{"class":96,"line":33432},177,[94,33434,33435],{"class":209},"        \"val_acc_all\"",[94,33437,33438],{"class":104},":val_acc_all\n",[94,33440,33442],{"class":96,"line":33441},178,[94,33443,33444],{"class":104},"    })\n",[94,33446,33448],{"class":96,"line":33447},179,[94,33449,33450],{"class":163},"    # 返回训练保存的过程\n",[94,33452,33454,33456],{"class":96,"line":33453},180,[94,33455,4071],{"class":100},[94,33457,33458],{"class":104}," train_process\n",[94,33460,33462],{"class":96,"line":33461},181,[94,33463,2381],{"emptyLinePlaceholder":20},[94,33465,33467],{"class":96,"line":33466},182,[94,33468,33469],{"class":163},"# 将loss值和精度按照图片的形式展示出来\n",[94,33471,33473,33475,33478],{"class":96,"line":33472},183,[94,33474,31930],{"class":100},[94,33476,33477],{"class":1944}," matplot_acc_loss",[94,33479,33480],{"class":104},"(train_process):\n",[94,33482,33484],{"class":96,"line":33483},184,[94,33485,33486],{"class":163},"    # 设置图的大小\n",[94,33488,33490,33493,33495,33497,33499,33501,33503,33505],{"class":96,"line":33489},185,[94,33491,33492],{"class":104},"    plt.figure(",[94,33494,31676],{"class":5198},[94,33496,150],{"class":100},[94,33498,105],{"class":104},[94,33500,603],{"class":153},[94,33502,483],{"class":104},[94,33504,398],{"class":153},[94,33506,30480],{"class":104},[94,33508,33510],{"class":96,"line":33509},186,[94,33511,33512],{"class":163},"    # 设置图中有几张图\n",[94,33514,33516],{"class":96,"line":33515},187,[94,33517,33518],{"class":163},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[94,33520,33522],{"class":96,"line":33521},188,[94,33523,33524],{"class":163},"    # ①loss图\n",[94,33526,33528,33530,33532,33534,33536,33538,33540],{"class":96,"line":33527},189,[94,33529,31710],{"class":104},[94,33531,322],{"class":153},[94,33533,483],{"class":104},[94,33535,182],{"class":153},[94,33537,483],{"class":104},[94,33539,322],{"class":153},[94,33541,111],{"class":104},[94,33543,33545],{"class":96,"line":33544},190,[94,33546,33547],{"class":163},"    # 补充:\n",[94,33549,33551],{"class":96,"line":33550},191,[94,33552,33553],{"class":163},"    # plt.subplot(nrows, ncols, index)\n",[94,33555,33557],{"class":96,"line":33556},192,[94,33558,33559],{"class":163},"    # nrows：行数\n",[94,33561,33563],{"class":96,"line":33562},193,[94,33564,33565],{"class":163},"    # ncols：列数\n",[94,33567,33569],{"class":96,"line":33568},194,[94,33570,33571],{"class":163},"    # index：目前选中第几个子图（从1开始）\n",[94,33573,33575,33578,33581,33584,33587,33589,33592,33594,33597],{"class":96,"line":33574},195,[94,33576,33577],{"class":104},"    plt.plot(train_process[",[94,33579,33580],{"class":209},"\"epoch\"",[94,33582,33583],{"class":104},"],train_process.train_loss_all,",[94,33585,33586],{"class":209},"'ro-'",[94,33588,483],{"class":104},[94,33590,33591],{"class":5198},"label",[94,33593,150],{"class":100},[94,33595,33596],{"class":209},"'train loss'",[94,33598,111],{"class":104},[94,33600,33602,33604,33606,33609,33612,33614,33616,33618,33621],{"class":96,"line":33601},196,[94,33603,33577],{"class":104},[94,33605,33580],{"class":209},[94,33607,33608],{"class":104},"],train_process.val_loss_all,",[94,33610,33611],{"class":209},"'bs--'",[94,33613,483],{"class":104},[94,33615,33591],{"class":5198},[94,33617,150],{"class":100},[94,33619,33620],{"class":209},"'val loss'",[94,33622,111],{"class":104},[94,33624,33626],{"class":96,"line":33625},197,[94,33627,33628],{"class":163},"    # 添加一个图例\n",[94,33630,33632],{"class":96,"line":33631},198,[94,33633,33634],{"class":104},"    plt.legend()\n",[94,33636,33638],{"class":96,"line":33637},199,[94,33639,33640],{"class":163},"    # 给轴添加标签\n",[94,33642,33644,33647,33650],{"class":96,"line":33643},200,[94,33645,33646],{"class":104},"    plt.xlabel(",[94,33648,33649],{"class":209},"'epoch'",[94,33651,111],{"class":104},[94,33653,33655,33658,33661],{"class":96,"line":33654},201,[94,33656,33657],{"class":104},"    plt.ylabel(",[94,33659,33660],{"class":209},"'loss'",[94,33662,111],{"class":104},[94,33664,33666],{"class":96,"line":33665},202,[94,33667,33668],{"class":163},"    # ②准确度图\n",[94,33670,33672,33674,33676,33678,33680,33682,33684],{"class":96,"line":33671},203,[94,33673,31710],{"class":104},[94,33675,322],{"class":153},[94,33677,483],{"class":104},[94,33679,182],{"class":153},[94,33681,483],{"class":104},[94,33683,182],{"class":153},[94,33685,111],{"class":104},[94,33687,33689,33691,33693,33696,33698,33700,33702,33704,33707],{"class":96,"line":33688},204,[94,33690,33577],{"class":104},[94,33692,33580],{"class":209},[94,33694,33695],{"class":104},"],train_process.train_acc_all,",[94,33697,33586],{"class":209},[94,33699,483],{"class":104},[94,33701,33591],{"class":5198},[94,33703,150],{"class":100},[94,33705,33706],{"class":209},"'train acc'",[94,33708,111],{"class":104},[94,33710,33712,33714,33716,33719,33721,33723,33725,33727,33730],{"class":96,"line":33711},205,[94,33713,33577],{"class":104},[94,33715,33580],{"class":209},[94,33717,33718],{"class":104},"],train_process.val_acc_all,",[94,33720,33611],{"class":209},[94,33722,483],{"class":104},[94,33724,33591],{"class":5198},[94,33726,150],{"class":100},[94,33728,33729],{"class":209},"'val acc'",[94,33731,111],{"class":104},[94,33733,33735],{"class":96,"line":33734},206,[94,33736,33737],{"class":163},"    # 添加图例\n",[94,33739,33741],{"class":96,"line":33740},207,[94,33742,33634],{"class":104},[94,33744,33746,33748,33750],{"class":96,"line":33745},208,[94,33747,33646],{"class":104},[94,33749,33580],{"class":209},[94,33751,111],{"class":104},[94,33753,33755,33757,33760],{"class":96,"line":33754},209,[94,33756,33657],{"class":104},[94,33758,33759],{"class":209},"\"acc\"",[94,33761,111],{"class":104},[94,33763,33765],{"class":96,"line":33764},210,[94,33766,33767],{"class":104},"    plt.show()\n",[94,33769,33771],{"class":96,"line":33770},211,[94,33772,2381],{"emptyLinePlaceholder":20},[94,33774,33776],{"class":96,"line":33775},212,[94,33777,33778],{"class":163},"# 正式开始训练:\n",[94,33780,33782,33784,33786,33788,33790],{"class":96,"line":33781},213,[94,33783,1512],{"class":100},[94,33785,31203],{"class":153},[94,33787,2930],{"class":100},[94,33789,31208],{"class":209},[94,33791,3720],{"class":104},[94,33793,33795],{"class":96,"line":33794},214,[94,33796,33797],{"class":163},"    # 将模型实例化\n",[94,33799,33801,33804,33806],{"class":96,"line":33800},215,[94,33802,33803],{"class":104},"    LeNet",[94,33805,150],{"class":100},[94,33807,33808],{"class":104},"LeNet()\n",[94,33810,33812,33815,33817],{"class":96,"line":33811},216,[94,33813,33814],{"class":104},"    train_dataloader,val_dataloader",[94,33816,150],{"class":100},[94,33818,33819],{"class":104},"train_val_data_process()\n",[94,33821,33823,33825,33827,33830,33833,33835,33837],{"class":96,"line":33822},217,[94,33824,33376],{"class":104},[94,33826,150],{"class":100},[94,33828,33829],{"class":104},"train_model_process(LeNet,train_dataloader,val_dataloader,",[94,33831,33832],{"class":5198},"num_epochs",[94,33834,150],{"class":100},[94,33836,805],{"class":153},[94,33838,111],{"class":104},[94,33840,33842],{"class":96,"line":33841},218,[94,33843,33844],{"class":104},"    matplot_acc_loss(train_process)\n",[40,33846,33847],{},"画图的补充点学习：",[40,33849,33850],{},[1443,33851],{"alt":14,"src":33852},"\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",[48,33854,33855],{"start":1160},[51,33856,33857],{},"测试",[85,33859,33861],{"className":30361,"code":33860,"language":30363,"meta":14,"style":14},"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",[91,33862,33863,33869,33879,33891,33901,33906,33916,33926,33930,33935,33944,33961,33973,33990,34001,34017,34022,34033,34044,34055,34062,34066,34071,34081,34086,34103,34111,34115,34120,34129,34138,34142,34147,34152,34157,34164,34169,34181,34191,34201,34206,34210,34215,34224,34229,34245,34250,34255,34260,34274,34279,34293,34297,34302,34317,34322,34334,34338,34343,34355,34360,34368,34373,34378,34388,34393,34402,34407,34412,34416,34421,34426,34442,34450,34455,34460,34519,34525,34530,34541,34549,34557,34561,34566,34570,34575,34583,34588,34604,34609,34619,34629],{"__ignoreMap":14},[94,33864,33865,33867],{"class":96,"line":97},[94,33866,30375],{"class":100},[94,33868,30378],{"class":104},[94,33870,33871,33873,33875,33877],{"class":96,"line":15},[94,33872,30375],{"class":100},[94,33874,31398],{"class":104},[94,33876,31366],{"class":100},[94,33878,31403],{"class":104},[94,33880,33881,33883,33886,33888],{"class":96,"line":1160},[94,33882,30720],{"class":100},[94,33884,33885],{"class":104}," jupyter_client.consoleapp ",[94,33887,30375],{"class":100},[94,33889,33890],{"class":104}," classes\n",[94,33892,33893,33895,33897,33899],{"class":96,"line":1175},[94,33894,30720],{"class":100},[94,33896,31381],{"class":104},[94,33898,30375],{"class":100},[94,33900,31386],{"class":104},[94,33902,33903],{"class":96,"line":1181},[94,33904,33905],{"class":163},"# 导入数据集\n",[94,33907,33908,33910,33912,33914],{"class":96,"line":1195},[94,33909,30720],{"class":100},[94,33911,31351],{"class":104},[94,33913,30375],{"class":100},[94,33915,31356],{"class":104},[94,33917,33918,33920,33922,33924],{"class":96,"line":1201},[94,33919,30720],{"class":100},[94,33921,31897],{"class":104},[94,33923,30375],{"class":100},[94,33925,31902],{"class":104},[94,33927,33928],{"class":96,"line":1292},[94,33929,2381],{"emptyLinePlaceholder":20},[94,33931,33932],{"class":96,"line":1298},[94,33933,33934],{"class":163},"# 测试数据处理\n",[94,33936,33937,33939,33942],{"class":96,"line":1310},[94,33938,31930],{"class":100},[94,33940,33941],{"class":1944}," test_data_process",[94,33943,31936],{"class":104},[94,33945,33946,33949,33951,33953,33955,33957,33959],{"class":96,"line":1593},[94,33947,33948],{"class":104},"    test_data",[94,33950,150],{"class":100},[94,33952,31438],{"class":104},[94,33954,31441],{"class":5198},[94,33956,150],{"class":100},[94,33958,31446],{"class":209},[94,33960,31449],{"class":104},[94,33962,33963,33966,33968,33971],{"class":96,"line":1598},[94,33964,33965],{"class":5198},"                           train",[94,33967,150],{"class":100},[94,33969,33970],{"class":153},"False",[94,33972,31449],{"class":104},[94,33974,33975,33978,33980,33982,33984,33986,33988],{"class":96,"line":1604},[94,33976,33977],{"class":5198},"                           transform",[94,33979,150],{"class":100},[94,33981,31476],{"class":104},[94,33983,31479],{"class":5198},[94,33985,150],{"class":100},[94,33987,1006],{"class":153},[94,33989,31487],{"class":104},[94,33991,33992,33995,33997,33999],{"class":96,"line":1609},[94,33993,33994],{"class":5198},"                           download",[94,33996,150],{"class":100},[94,33998,31459],{"class":153},[94,34000,111],{"class":104},[94,34002,34003,34006,34008,34010,34012,34014],{"class":96,"line":1623},[94,34004,34005],{"class":104},"    test_dataloader",[94,34007,150],{"class":100},[94,34009,31517],{"class":104},[94,34011,31520],{"class":5198},[94,34013,150],{"class":100},[94,34015,34016],{"class":104},"test_data,\n",[94,34018,34019],{"class":96,"line":1628},[94,34020,34021],{"class":163},"                                    # 这里是一张一张进行测试\n",[94,34023,34024,34027,34029,34031],{"class":96,"line":1634},[94,34025,34026],{"class":5198},"                                    batch_size",[94,34028,150],{"class":100},[94,34030,322],{"class":153},[94,34032,31449],{"class":104},[94,34034,34035,34038,34040,34042],{"class":96,"line":1655},[94,34036,34037],{"class":5198},"                                    shuffle",[94,34039,150],{"class":100},[94,34041,31459],{"class":153},[94,34043,31449],{"class":104},[94,34045,34046,34049,34051,34053],{"class":96,"line":1660},[94,34047,34048],{"class":5198},"                                    num_workers",[94,34050,150],{"class":100},[94,34052,296],{"class":153},[94,34054,111],{"class":104},[94,34056,34057,34059],{"class":96,"line":1674},[94,34058,4071],{"class":100},[94,34060,34061],{"class":104}," test_dataloader\n",[94,34063,34064],{"class":96,"line":1679},[94,34065,2381],{"emptyLinePlaceholder":20},[94,34067,34068],{"class":96,"line":1708},[94,34069,34070],{"class":163},"# 定义模型测试函数\n",[94,34072,34073,34075,34078],{"class":96,"line":1713},[94,34074,31930],{"class":100},[94,34076,34077],{"class":1944}," test_model_process",[94,34079,34080],{"class":104},"(model,test_dataloader):\n",[94,34082,34083],{"class":96,"line":1730},[94,34084,34085],{"class":163},"    # 将模型放到设备当中，先进行判断\n",[94,34087,34088,34090,34092,34094,34096,34098,34100],{"class":96,"line":1735},[94,34089,31220],{"class":104},[94,34091,150],{"class":100},[94,34093,31227],{"class":209},[94,34095,1685],{"class":100},[94,34097,31232],{"class":104},[94,34099,1682],{"class":100},[94,34101,34102],{"class":209}," \"cpu\"\n",[94,34104,34105,34107,34109],{"class":96,"line":1740},[94,34106,31272],{"class":104},[94,34108,150],{"class":100},[94,34110,32272],{"class":104},[94,34112,34113],{"class":96,"line":1745},[94,34114,2381],{"emptyLinePlaceholder":20},[94,34116,34117],{"class":96,"line":1759},[94,34118,34119],{"class":163},"    # 设置初始化参数\n",[94,34121,34122,34125,34127],{"class":96,"line":1764},[94,34123,34124],{"class":104},"    test_corrects",[94,34126,150],{"class":100},[94,34128,32325],{"class":153},[94,34130,34131,34134,34136],{"class":96,"line":2558},[94,34132,34133],{"class":104},"    test_num",[94,34135,150],{"class":100},[94,34137,3066],{"class":153},[94,34139,34140],{"class":96,"line":2572},[94,34141,2381],{"emptyLinePlaceholder":20},[94,34143,34144],{"class":96,"line":2580},[94,34145,34146],{"class":163},"    # 进行模型测试\n",[94,34148,34149],{"class":96,"line":2585},[94,34150,34151],{"class":163},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[94,34153,34154],{"class":96,"line":2591},[94,34155,34156],{"class":163},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[94,34158,34159,34162],{"class":96,"line":2597},[94,34160,34161],{"class":100},"    with",[94,34163,32867],{"class":104},[94,34165,34166],{"class":96,"line":2602},[94,34167,34168],{"class":163},"        # 从数据中进行\n",[94,34170,34171,34173,34176,34178],{"class":96,"line":7930},[94,34172,3384],{"class":100},[94,34174,34175],{"class":104}," test_data_x,test_data_y ",[94,34177,26026],{"class":100},[94,34179,34180],{"class":104}," test_dataloader:\n",[94,34182,34183,34186,34188],{"class":96,"line":7954},[94,34184,34185],{"class":104},"            test_data_x",[94,34187,150],{"class":100},[94,34189,34190],{"class":104},"test_data_x.to(device)\n",[94,34192,34193,34196,34198],{"class":96,"line":7959},[94,34194,34195],{"class":104},"            test_data_y",[94,34197,150],{"class":100},[94,34199,34200],{"class":104},"test_data_y.to(device)\n",[94,34202,34203],{"class":96,"line":7965},[94,34204,34205],{"class":163},"            # 设置为验证模式\n",[94,34207,34208],{"class":96,"line":7992},[94,34209,32858],{"class":104},[94,34211,34212],{"class":96,"line":7997},[94,34213,34214],{"class":163},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[94,34216,34217,34219,34221],{"class":96,"line":8003},[94,34218,32643],{"class":104},[94,34220,150],{"class":100},[94,34222,34223],{"class":104},"model(test_data_x)\n",[94,34225,34226],{"class":96,"line":8015},[94,34227,34228],{"class":163},"            # 查找每一行中最大值对应的下标\n",[94,34230,34231,34233,34235,34237,34239,34241,34243],{"class":96,"line":8027},[94,34232,32660],{"class":104},[94,34234,150],{"class":100},[94,34236,32665],{"class":104},[94,34238,32668],{"class":5198},[94,34240,150],{"class":100},[94,34242,322],{"class":153},[94,34244,111],{"class":104},[94,34246,34247],{"class":96,"line":8039},[94,34248,34249],{"class":163},"            # 计算正确率\n",[94,34251,34252],{"class":96,"line":9698},[94,34253,34254],{"class":163},"            # .data表示是一个不带梯度信息的tensor\n",[94,34256,34257],{"class":96,"line":9723},[94,34258,34259],{"class":163},"            # 如果预测正确，则准确度test_corrects加1\n",[94,34261,34262,34265,34267,34269,34271],{"class":96,"line":9746},[94,34263,34264],{"class":104},"            test_corrects",[94,34266,9459],{"class":100},[94,34268,32770],{"class":104},[94,34270,2930],{"class":100},[94,34272,34273],{"class":104},"test_data_y.data)\n",[94,34275,34276],{"class":96,"line":9770},[94,34277,34278],{"class":163},"            # 将所有的测试样本进行累计\n",[94,34280,34281,34284,34286,34289,34291],{"class":96,"line":9775},[94,34282,34283],{"class":104},"            test_num",[94,34285,9459],{"class":100},[94,34287,34288],{"class":104},"test_data_x.size(",[94,34290,296],{"class":153},[94,34292,111],{"class":104},[94,34294,34295],{"class":96,"line":9780},[94,34296,2381],{"emptyLinePlaceholder":20},[94,34298,34299],{"class":96,"line":9785},[94,34300,34301],{"class":163},"        # 计算准确度\n",[94,34303,34304,34307,34309,34312,34314],{"class":96,"line":9794},[94,34305,34306],{"class":104},"        test_acc",[94,34308,150],{"class":100},[94,34310,34311],{"class":104},"test_corrects.double().item()",[94,34313,689],{"class":100},[94,34315,34316],{"class":104},"test_num\n",[94,34318,34319],{"class":96,"line":9799},[94,34320,34321],{"class":163},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[94,34323,34324,34326,34328,34331],{"class":96,"line":9805},[94,34325,32434],{"class":153},[94,34327,105],{"class":104},[94,34329,34330],{"class":209},"\"测试的准确率：\"",[94,34332,34333],{"class":104},",test_acc)\n",[94,34335,34336],{"class":96,"line":9826},[94,34337,2381],{"emptyLinePlaceholder":20},[94,34339,34340],{"class":96,"line":9832},[94,34341,34342],{"class":163},"# 实现模型的测试功能\n",[94,34344,34345,34347,34349,34351,34353],{"class":96,"line":9846},[94,34346,1512],{"class":100},[94,34348,31203],{"class":153},[94,34350,2930],{"class":100},[94,34352,31208],{"class":209},[94,34354,3720],{"class":104},[94,34356,34357],{"class":96,"line":9852},[94,34358,34359],{"class":163},"    # 加载模型\n",[94,34361,34362,34364,34366],{"class":96,"line":9879},[94,34363,31272],{"class":104},[94,34365,150],{"class":100},[94,34367,33808],{"class":104},[94,34369,34370],{"class":96,"line":9888},[94,34371,34372],{"class":163},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[94,34374,34375],{"class":96,"line":9894},[94,34376,34377],{"class":163},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[94,34379,34380,34383,34386],{"class":96,"line":9902},[94,34381,34382],{"class":104},"    model.load_state_dict(torch.load(",[94,34384,34385],{"class":209},"'best_model.pth'",[94,34387,30480],{"class":104},[94,34389,34390],{"class":96,"line":9907},[94,34391,34392],{"class":163},"    # 数据加载\n",[94,34394,34395,34397,34399],{"class":96,"line":16586},[94,34396,34005],{"class":104},[94,34398,150],{"class":100},[94,34400,34401],{"class":104},"test_data_process()\n",[94,34403,34404],{"class":96,"line":16592},[94,34405,34406],{"class":163},"    # 加载模型测试的函数\n",[94,34408,34409],{"class":96,"line":16615},[94,34410,34411],{"class":104},"    test_model_process(model,test_dataloader)\n",[94,34413,34414],{"class":96,"line":16621},[94,34415,2381],{"emptyLinePlaceholder":20},[94,34417,34418],{"class":96,"line":16644},[94,34419,34420],{"class":163},"    # 验证集推理实现：\n",[94,34422,34423],{"class":96,"line":16658},[94,34424,34425],{"class":163},"    # 加载数据加载的更详细一些\n",[94,34427,34428,34430,34432,34434,34436,34438,34440],{"class":96,"line":16678},[94,34429,31220],{"class":104},[94,34431,150],{"class":100},[94,34433,31227],{"class":209},[94,34435,1685],{"class":100},[94,34437,31232],{"class":104},[94,34439,1682],{"class":100},[94,34441,34102],{"class":209},[94,34443,34444,34446,34448],{"class":96,"line":16684},[94,34445,31272],{"class":104},[94,34447,150],{"class":100},[94,34449,32272],{"class":104},[94,34451,34452],{"class":96,"line":16695},[94,34453,34454],{"class":163},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[94,34456,34457],{"class":96,"line":16718},[94,34458,34459],{"class":163},"    # 顺序不可改变\n",[94,34461,34462,34465,34467,34469,34472,34474,34477,34479,34482,34484,34487,34489,34492,34494,34497,34499,34502,34504,34507,34509,34512,34514,34517],{"class":96,"line":16740},[94,34463,34464],{"class":104},"    classes",[94,34466,150],{"class":100},[94,34468,995],{"class":104},[94,34470,34471],{"class":209},"'T-shirt\u002Ftop'",[94,34473,483],{"class":104},[94,34475,34476],{"class":209},"'Trouser'",[94,34478,483],{"class":104},[94,34480,34481],{"class":209},"'Pullover'",[94,34483,483],{"class":104},[94,34485,34486],{"class":209},"'Dress'",[94,34488,483],{"class":104},[94,34490,34491],{"class":209},"'Coat'",[94,34493,483],{"class":104},[94,34495,34496],{"class":209},"'Sandal'",[94,34498,483],{"class":104},[94,34500,34501],{"class":209},"'Shirt'",[94,34503,483],{"class":104},[94,34505,34506],{"class":209},"'Sneaker'",[94,34508,483],{"class":104},[94,34510,34511],{"class":209},"'Bag'",[94,34513,483],{"class":104},[94,34515,34516],{"class":209},"'Ankle boot'",[94,34518,33229],{"class":104},[94,34520,34521,34523],{"class":96,"line":16745},[94,34522,34161],{"class":100},[94,34524,32867],{"class":104},[94,34526,34527],{"class":96,"line":16751},[94,34528,34529],{"class":163},"        # 将数据和标签都放到设备当中\n",[94,34531,34532,34534,34537,34539],{"class":96,"line":16765},[94,34533,3384],{"class":100},[94,34535,34536],{"class":104}," b_x,b_y ",[94,34538,26026],{"class":100},[94,34540,34180],{"class":104},[94,34542,34543,34545,34547],{"class":96,"line":16778},[94,34544,32593],{"class":104},[94,34546,150],{"class":100},[94,34548,32598],{"class":104},[94,34550,34551,34553,34555],{"class":96,"line":16783},[94,34552,32608],{"class":104},[94,34554,150],{"class":100},[94,34556,32613],{"class":104},[94,34558,34559],{"class":96,"line":16797},[94,34560,2381],{"emptyLinePlaceholder":20},[94,34562,34563],{"class":96,"line":16802},[94,34564,34565],{"class":163},"            # 设置模型为验证模式\n",[94,34567,34568],{"class":96,"line":16808},[94,34569,32858],{"class":104},[94,34571,34572],{"class":96,"line":16813},[94,34573,34574],{"class":163},"            # 模型推理结果\n",[94,34576,34577,34579,34581],{"class":96,"line":16827},[94,34578,32643],{"class":104},[94,34580,150],{"class":100},[94,34582,32648],{"class":104},[94,34584,34585],{"class":96,"line":16832},[94,34586,34587],{"class":163},"            # 获取最大下标，最大下标就是类别号\n",[94,34589,34590,34592,34594,34596,34598,34600,34602],{"class":96,"line":16837},[94,34591,32660],{"class":104},[94,34593,150],{"class":100},[94,34595,32665],{"class":104},[94,34597,32668],{"class":5198},[94,34599,150],{"class":100},[94,34601,322],{"class":153},[94,34603,111],{"class":104},[94,34605,34606],{"class":96,"line":16851},[94,34607,34608],{"class":163},"            # 取出张量中的数值\n",[94,34610,34611,34614,34616],{"class":96,"line":16863},[94,34612,34613],{"class":104},"            result",[94,34615,150],{"class":100},[94,34617,34618],{"class":104},"pre_lab.item()\n",[94,34620,34621,34624,34626],{"class":96,"line":16868},[94,34622,34623],{"class":104},"            label",[94,34625,150],{"class":100},[94,34627,34628],{"class":104},"b_y.item()\n",[94,34630,34631,34634,34636,34639,34642,34645,34647,34650],{"class":96,"line":16881},[94,34632,34633],{"class":153},"            print",[94,34635,105],{"class":104},[94,34637,34638],{"class":209},"\"预测值：\"",[94,34640,34641],{"class":104},",classes[result],",[94,34643,34644],{"class":209},"\"------\"",[94,34646,483],{"class":104},[94,34648,34649],{"class":209},"\"真实值：\"",[94,34651,34652],{"class":104},",classes[label])\n",[40,34654,34655],{},"（2）AlexNet",[48,34657,34658],{},[51,34659,34660],{},"神经网络构建",[85,34662,34664],{"className":30361,"code":34663,"language":30363,"meta":14,"style":14},"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",[91,34665,34666,34672,34682,34692,34704,34708,34725,34733,34748,34760,34802,34829,34872,34898,34942,34985,35028,35055,35059,35069,35074,35102,35121,35140,35144,35149,35157,35172,35182,35196,35206,35221,35236,35251,35262,35266,35271,35281,35296,35301,35315,35330,35342,35347,35358,35363,35369,35374,35386,35406,35411,35420],{"__ignoreMap":14},[94,34667,34668,34670],{"class":96,"line":97},[94,34669,30375],{"class":100},[94,34671,30378],{"class":104},[94,34673,34674,34676,34678,34680],{"class":96,"line":15},[94,34675,30720],{"class":100},[94,34677,30723],{"class":104},[94,34679,30375],{"class":100},[94,34681,30728],{"class":104},[94,34683,34684,34686,34688,34690],{"class":96,"line":1160},[94,34685,30720],{"class":100},[94,34687,30740],{"class":104},[94,34689,30375],{"class":100},[94,34691,30745],{"class":104},[94,34693,34694,34696,34699,34701],{"class":96,"line":1175},[94,34695,30375],{"class":100},[94,34697,34698],{"class":104}," torch.nn.functional ",[94,34700,31366],{"class":100},[94,34702,34703],{"class":104}," F\n",[94,34705,34706],{"class":96,"line":1181},[94,34707,2381],{"emptyLinePlaceholder":20},[94,34709,34710,34712,34715,34717,34719,34721,34723],{"class":96,"line":1195},[94,34711,14676],{"class":100},[94,34713,34714],{"class":1944}," AlexNet",[94,34716,105],{"class":104},[94,34718,30761],{"class":1944},[94,34720,663],{"class":104},[94,34722,30766],{"class":1944},[94,34724,30769],{"class":104},[94,34726,34727,34729,34731],{"class":96,"line":1201},[94,34728,30784],{"class":100},[94,34730,30787],{"class":153},[94,34732,30790],{"class":104},[94,34734,34735,34737,34740,34742,34744,34746],{"class":96,"line":1292},[94,34736,30800],{"class":153},[94,34738,34739],{"class":104},"(AlexNet,",[94,34741,30806],{"class":153},[94,34743,30809],{"class":104},[94,34745,30812],{"class":153},[94,34747,1957],{"class":104},[94,34749,34750,34752,34755,34757],{"class":96,"line":1298},[94,34751,30828],{"class":153},[94,34753,34754],{"class":104},".ReLu",[94,34756,150],{"class":100},[94,34758,34759],{"class":104},"nn.ReLU()\n",[94,34761,34762,34764,34766,34768,34770,34772,34774,34776,34778,34780,34782,34784,34786,34788,34790,34792,34794,34796,34798,34800],{"class":96,"line":1310},[94,34763,30828],{"class":153},[94,34765,30831],{"class":104},[94,34767,150],{"class":100},[94,34769,30836],{"class":104},[94,34771,30839],{"class":5198},[94,34773,150],{"class":100},[94,34775,322],{"class":153},[94,34777,483],{"class":104},[94,34779,30848],{"class":5198},[94,34781,150],{"class":100},[94,34783,314],{"class":153},[94,34785,483],{"class":104},[94,34787,30857],{"class":5198},[94,34789,150],{"class":100},[94,34791,577],{"class":153},[94,34793,483],{"class":104},[94,34795,30912],{"class":5198},[94,34797,150],{"class":100},[94,34799,398],{"class":153},[94,34801,111],{"class":104},[94,34803,34804,34806,34808,34810,34813,34815,34817,34819,34821,34823,34825,34827],{"class":96,"line":1593},[94,34805,30828],{"class":153},[94,34807,30896],{"class":104},[94,34809,150],{"class":100},[94,34811,34812],{"class":104},"nn.MaxPool2d(",[94,34814,30857],{"class":5198},[94,34816,150],{"class":100},[94,34818,176],{"class":153},[94,34820,483],{"class":104},[94,34822,30912],{"class":5198},[94,34824,150],{"class":100},[94,34826,182],{"class":153},[94,34828,111],{"class":104},[94,34830,34831,34833,34835,34837,34839,34841,34843,34845,34847,34849,34851,34854,34856,34858,34860,34862,34864,34866,34868,34870],{"class":96,"line":1598},[94,34832,30828],{"class":153},[94,34834,30925],{"class":104},[94,34836,150],{"class":100},[94,34838,30836],{"class":104},[94,34840,30839],{"class":5198},[94,34842,150],{"class":100},[94,34844,314],{"class":153},[94,34846,483],{"class":104},[94,34848,30848],{"class":5198},[94,34850,150],{"class":100},[94,34852,34853],{"class":153},"256",[94,34855,483],{"class":104},[94,34857,30857],{"class":5198},[94,34859,150],{"class":100},[94,34861,424],{"class":153},[94,34863,483],{"class":104},[94,34865,30866],{"class":5198},[94,34867,150],{"class":100},[94,34869,182],{"class":153},[94,34871,111],{"class":104},[94,34873,34874,34876,34878,34880,34882,34884,34886,34888,34890,34892,34894,34896],{"class":96,"line":1604},[94,34875,30828],{"class":153},[94,34877,30960],{"class":104},[94,34879,150],{"class":100},[94,34881,34812],{"class":104},[94,34883,30857],{"class":5198},[94,34885,150],{"class":100},[94,34887,176],{"class":153},[94,34889,483],{"class":104},[94,34891,30912],{"class":5198},[94,34893,150],{"class":100},[94,34895,182],{"class":153},[94,34897,111],{"class":104},[94,34899,34900,34902,34905,34907,34909,34911,34913,34915,34917,34919,34921,34924,34926,34928,34930,34932,34934,34936,34938,34940],{"class":96,"line":1609},[94,34901,30828],{"class":153},[94,34903,34904],{"class":104},".c5",[94,34906,150],{"class":100},[94,34908,30836],{"class":104},[94,34910,30839],{"class":5198},[94,34912,150],{"class":100},[94,34914,34853],{"class":153},[94,34916,483],{"class":104},[94,34918,30848],{"class":5198},[94,34920,150],{"class":100},[94,34922,34923],{"class":153},"384",[94,34925,483],{"class":104},[94,34927,30857],{"class":5198},[94,34929,150],{"class":100},[94,34931,176],{"class":153},[94,34933,483],{"class":104},[94,34935,30866],{"class":5198},[94,34937,150],{"class":100},[94,34939,322],{"class":153},[94,34941,111],{"class":104},[94,34943,34944,34946,34949,34951,34953,34955,34957,34959,34961,34963,34965,34967,34969,34971,34973,34975,34977,34979,34981,34983],{"class":96,"line":1623},[94,34945,30828],{"class":153},[94,34947,34948],{"class":104},".c6",[94,34950,150],{"class":100},[94,34952,30836],{"class":104},[94,34954,30839],{"class":5198},[94,34956,150],{"class":100},[94,34958,34923],{"class":153},[94,34960,483],{"class":104},[94,34962,30848],{"class":5198},[94,34964,150],{"class":100},[94,34966,34923],{"class":153},[94,34968,483],{"class":104},[94,34970,30857],{"class":5198},[94,34972,150],{"class":100},[94,34974,176],{"class":153},[94,34976,483],{"class":104},[94,34978,30866],{"class":5198},[94,34980,150],{"class":100},[94,34982,322],{"class":153},[94,34984,111],{"class":104},[94,34986,34987,34989,34992,34994,34996,34998,35000,35002,35004,35006,35008,35010,35012,35014,35016,35018,35020,35022,35024,35026],{"class":96,"line":1628},[94,34988,30828],{"class":153},[94,34990,34991],{"class":104},".c7",[94,34993,150],{"class":100},[94,34995,30836],{"class":104},[94,34997,30839],{"class":5198},[94,34999,150],{"class":100},[94,35001,34923],{"class":153},[94,35003,483],{"class":104},[94,35005,30848],{"class":5198},[94,35007,150],{"class":100},[94,35009,34853],{"class":153},[94,35011,483],{"class":104},[94,35013,30857],{"class":5198},[94,35015,150],{"class":100},[94,35017,176],{"class":153},[94,35019,483],{"class":104},[94,35021,30866],{"class":5198},[94,35023,150],{"class":100},[94,35025,322],{"class":153},[94,35027,111],{"class":104},[94,35029,35030,35032,35035,35037,35039,35041,35043,35045,35047,35049,35051,35053],{"class":96,"line":1634},[94,35031,30828],{"class":153},[94,35033,35034],{"class":104},".s8",[94,35036,150],{"class":100},[94,35038,34812],{"class":104},[94,35040,30857],{"class":5198},[94,35042,150],{"class":100},[94,35044,176],{"class":153},[94,35046,483],{"class":104},[94,35048,30912],{"class":5198},[94,35050,150],{"class":100},[94,35052,182],{"class":153},[94,35054,111],{"class":104},[94,35056,35057],{"class":96,"line":1655},[94,35058,30985],{"class":163},[94,35060,35061,35063,35065,35067],{"class":96,"line":1660},[94,35062,30828],{"class":153},[94,35064,30992],{"class":104},[94,35066,150],{"class":100},[94,35068,30997],{"class":104},[94,35070,35071],{"class":96,"line":1674},[94,35072,35073],{"class":163},"       # 定义全连接层\n",[94,35075,35076,35078,35081,35083,35085,35087,35089,35091,35093,35095,35097,35100],{"class":96,"line":1679},[94,35077,30828],{"class":153},[94,35079,35080],{"class":104},".f1",[94,35082,150],{"class":100},[94,35084,31014],{"class":104},[94,35086,449],{"class":153},[94,35088,560],{"class":100},[94,35090,449],{"class":153},[94,35092,560],{"class":100},[94,35094,34853],{"class":153},[94,35096,483],{"class":104},[94,35098,35099],{"class":153},"4096",[94,35101,111],{"class":104},[94,35103,35104,35106,35109,35111,35113,35115,35117,35119],{"class":96,"line":1708},[94,35105,30828],{"class":153},[94,35107,35108],{"class":104},".f2",[94,35110,150],{"class":100},[94,35112,31014],{"class":104},[94,35114,35099],{"class":153},[94,35116,483],{"class":104},[94,35118,35099],{"class":153},[94,35120,111],{"class":104},[94,35122,35123,35125,35128,35130,35132,35134,35136,35138],{"class":96,"line":1713},[94,35124,30828],{"class":153},[94,35126,35127],{"class":104},".f3",[94,35129,150],{"class":100},[94,35131,31014],{"class":104},[94,35133,35099],{"class":153},[94,35135,483],{"class":104},[94,35137,551],{"class":153},[94,35139,111],{"class":104},[94,35141,35142],{"class":96,"line":1730},[94,35143,2381],{"emptyLinePlaceholder":20},[94,35145,35146],{"class":96,"line":1735},[94,35147,35148],{"class":163},"    # 定义前向传播\n",[94,35150,35151,35153,35155],{"class":96,"line":1740},[94,35152,30784],{"class":100},[94,35154,31076],{"class":1944},[94,35156,31079],{"class":104},[94,35158,35159,35161,35163,35165,35168,35170],{"class":96,"line":1745},[94,35160,31084],{"class":104},[94,35162,150],{"class":100},[94,35164,30806],{"class":153},[94,35166,35167],{"class":104},".ReLu(",[94,35169,30806],{"class":153},[94,35171,31096],{"class":104},[94,35173,35174,35176,35178,35180],{"class":96,"line":1759},[94,35175,31084],{"class":104},[94,35177,150],{"class":100},[94,35179,30806],{"class":153},[94,35181,31107],{"class":104},[94,35183,35184,35186,35188,35190,35192,35194],{"class":96,"line":1764},[94,35185,31084],{"class":104},[94,35187,150],{"class":100},[94,35189,30806],{"class":153},[94,35191,35167],{"class":104},[94,35193,30806],{"class":153},[94,35195,31122],{"class":104},[94,35197,35198,35200,35202,35204],{"class":96,"line":2558},[94,35199,31084],{"class":104},[94,35201,150],{"class":100},[94,35203,30806],{"class":153},[94,35205,31133],{"class":104},[94,35207,35208,35210,35212,35214,35216,35218],{"class":96,"line":2572},[94,35209,31084],{"class":104},[94,35211,150],{"class":100},[94,35213,30806],{"class":153},[94,35215,35167],{"class":104},[94,35217,30806],{"class":153},[94,35219,35220],{"class":104},".c5(x))\n",[94,35222,35223,35225,35227,35229,35231,35233],{"class":96,"line":2580},[94,35224,31084],{"class":104},[94,35226,150],{"class":100},[94,35228,30806],{"class":153},[94,35230,35167],{"class":104},[94,35232,30806],{"class":153},[94,35234,35235],{"class":104},".c6(x))\n",[94,35237,35238,35240,35242,35244,35246,35248],{"class":96,"line":2585},[94,35239,31084],{"class":104},[94,35241,150],{"class":100},[94,35243,30806],{"class":153},[94,35245,35167],{"class":104},[94,35247,30806],{"class":153},[94,35249,35250],{"class":104},".c7(x))\n",[94,35252,35253,35255,35257,35259],{"class":96,"line":2591},[94,35254,31084],{"class":104},[94,35256,150],{"class":100},[94,35258,30806],{"class":153},[94,35260,35261],{"class":104},".s8(x)\n",[94,35263,35264],{"class":96,"line":2597},[94,35265,2381],{"emptyLinePlaceholder":20},[94,35267,35268],{"class":96,"line":2602},[94,35269,35270],{"class":163},"        # 展平加线性全连接层\n",[94,35272,35273,35275,35277,35279],{"class":96,"line":7930},[94,35274,31084],{"class":104},[94,35276,150],{"class":100},[94,35278,30806],{"class":153},[94,35280,31144],{"class":104},[94,35282,35283,35285,35287,35289,35291,35293],{"class":96,"line":7954},[94,35284,31084],{"class":104},[94,35286,150],{"class":100},[94,35288,30806],{"class":153},[94,35290,35167],{"class":104},[94,35292,30806],{"class":153},[94,35294,35295],{"class":104},".f1(x))\n",[94,35297,35298],{"class":96,"line":7959},[94,35299,35300],{"class":163},"        # 还需要dropout对神经元随机进行失活\n",[94,35302,35303,35305,35307,35310,35313],{"class":96,"line":7965},[94,35304,31084],{"class":104},[94,35306,150],{"class":100},[94,35308,35309],{"class":104},"F.dropout(x,",[94,35311,35312],{"class":153},"0.5",[94,35314,111],{"class":104},[94,35316,35317,35319,35321,35323,35325,35327],{"class":96,"line":7992},[94,35318,31084],{"class":104},[94,35320,150],{"class":100},[94,35322,30806],{"class":153},[94,35324,35167],{"class":104},[94,35326,30806],{"class":153},[94,35328,35329],{"class":104},".f2(x))\n",[94,35331,35332,35334,35336,35338,35340],{"class":96,"line":7997},[94,35333,31084],{"class":104},[94,35335,150],{"class":100},[94,35337,35309],{"class":104},[94,35339,35312],{"class":153},[94,35341,111],{"class":104},[94,35343,35344],{"class":96,"line":8003},[94,35345,35346],{"class":163},"        # 直接输出\n",[94,35348,35349,35351,35353,35355],{"class":96,"line":8015},[94,35350,31084],{"class":104},[94,35352,150],{"class":100},[94,35354,30806],{"class":153},[94,35356,35357],{"class":104},".f3(x)\n",[94,35359,35360],{"class":96,"line":8027},[94,35361,35362],{"class":163},"        # 前向传播输出\n",[94,35364,35365,35367],{"class":96,"line":8039},[94,35366,14734],{"class":100},[94,35368,31192],{"class":104},[94,35370,35371],{"class":96,"line":9698},[94,35372,35373],{"class":163},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[94,35375,35376,35378,35380,35382,35384],{"class":96,"line":9723},[94,35377,1512],{"class":100},[94,35379,31203],{"class":153},[94,35381,2930],{"class":100},[94,35383,31208],{"class":209},[94,35385,3720],{"class":104},[94,35387,35388,35390,35392,35394,35396,35398,35400,35402,35404],{"class":96,"line":9746},[94,35389,31220],{"class":104},[94,35391,150],{"class":100},[94,35393,30434],{"class":104},[94,35395,31227],{"class":209},[94,35397,1685],{"class":100},[94,35399,31232],{"class":104},[94,35401,1682],{"class":100},[94,35403,30459],{"class":209},[94,35405,111],{"class":104},[94,35407,35408],{"class":96,"line":9770},[94,35409,35410],{"class":163},"    # 模型实例化，然后将实例化的模型放到设备中\n",[94,35412,35413,35415,35417],{"class":96,"line":9775},[94,35414,31272],{"class":104},[94,35416,150],{"class":100},[94,35418,35419],{"class":104},"AlexNet().to(device)\n",[94,35421,35422,35424,35426,35428,35430,35433,35435,35437],{"class":96,"line":9780},[94,35423,31282],{"class":153},[94,35425,31285],{"class":104},[94,35427,322],{"class":153},[94,35429,483],{"class":104},[94,35431,35432],{"class":153},"227",[94,35434,483],{"class":104},[94,35436,35432],{"class":153},[94,35438,31298],{"class":104},[48,35440,35441],{"start":15},[51,35442,31311],{},[85,35444,35446],{"className":30361,"code":35445,"language":30363,"meta":14,"style":14},"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",[91,35447,35448,35454,35460,35470,35476,35486,35496,35506,35516,35526,35530,35541,35551,35555,35559,35563,35571,35583,35593,35609,35619,35651,35665,35675,35685,35689,35699,35713,35723,35733,35743,35749,35753,35757,35761,35765,35769,35777,35797,35801,35805,35809,35813,35817,35833,35837,35841,35849,35853,35857,35865,35869,35873,35877,35885,35889,35893,35897,35901,35909,35913,35921,35925,35933,35937,35945,35949,35957,35961,35965,35973,35977,35981,35985,35997,36021,36035,36039,36043,36047,36055,36059,36067,36071,36079,36083,36091,36095,36103,36107,36115,36119,36131,36135,36143,36147,36155,36159,36163,36167,36171,36179,36183,36199,36203,36211,36215,36219,36223,36227,36231,36235,36239,36255,36259,36271,36275,36287,36291,36303,36307,36315,36319,36327,36331,36335,36340,36346,36350,36359,36363,36380,36384,36393,36397,36415,36428,36433,36446,36450,36454,36462,36466,36470,36478,36482,36490,36494,36502,36506,36510,36552,36594,36598,36602,36618,36622,36638,36642,36646,36654,36658,36662,36674,36712,36717,36722,36731,36735,36749,36759,36765,36771,36777,36783,36787,36791,36797,36801,36805,36813,36817,36835,36839,36843,36847,36863,36867,36871,36875,36879,36883,36903,36923,36927,36931,36935,36943,36951,36955,36971,36991,37011,37015,37019,37027,37035,37039,37043,37047,37059,37063,37073,37081,37098],{"__ignoreMap":14},[94,35449,35450,35452],{"class":96,"line":97},[94,35451,30375],{"class":100},[94,35453,31805],{"class":104},[94,35455,35456,35458],{"class":96,"line":15},[94,35457,30375],{"class":100},[94,35459,31812],{"class":104},[94,35461,35462,35464,35466,35468],{"class":96,"line":1160},[94,35463,30375],{"class":100},[94,35465,31823],{"class":104},[94,35467,31366],{"class":100},[94,35469,31828],{"class":104},[94,35471,35472,35474],{"class":96,"line":1175},[94,35473,30375],{"class":100},[94,35475,30378],{"class":104},[94,35477,35478,35480,35482,35484],{"class":96,"line":1181},[94,35479,30720],{"class":100},[94,35481,31398],{"class":104},[94,35483,30375],{"class":100},[94,35485,31845],{"class":104},[94,35487,35488,35490,35492,35494],{"class":96,"line":1195},[94,35489,30720],{"class":100},[94,35491,31351],{"class":104},[94,35493,30375],{"class":100},[94,35495,31356],{"class":104},[94,35497,35498,35500,35502,35504],{"class":96,"line":1201},[94,35499,30720],{"class":100},[94,35501,31381],{"class":104},[94,35503,30375],{"class":100},[94,35505,31386],{"class":104},[94,35507,35508,35510,35512,35514],{"class":96,"line":1292},[94,35509,30375],{"class":100},[94,35511,31398],{"class":104},[94,35513,31366],{"class":100},[94,35515,31403],{"class":104},[94,35517,35518,35520,35522,35524],{"class":96,"line":1298},[94,35519,30375],{"class":100},[94,35521,31415],{"class":104},[94,35523,31366],{"class":100},[94,35525,31420],{"class":104},[94,35527,35528],{"class":96,"line":1310},[94,35529,31890],{"class":163},[94,35531,35532,35534,35536,35538],{"class":96,"line":1593},[94,35533,30720],{"class":100},[94,35535,31897],{"class":104},[94,35537,30375],{"class":100},[94,35539,35540],{"class":104}," AlexNet\n",[94,35542,35543,35545,35547,35549],{"class":96,"line":1598},[94,35544,30720],{"class":100},[94,35546,30723],{"class":104},[94,35548,30375],{"class":100},[94,35550,30728],{"class":104},[94,35552,35553],{"class":96,"line":1604},[94,35554,2381],{"emptyLinePlaceholder":20},[94,35556,35557],{"class":96,"line":1609},[94,35558,2381],{"emptyLinePlaceholder":20},[94,35560,35561],{"class":96,"line":1623},[94,35562,31925],{"class":163},[94,35564,35565,35567,35569],{"class":96,"line":1628},[94,35566,31930],{"class":100},[94,35568,31933],{"class":1944},[94,35570,31936],{"class":104},[94,35572,35573,35575,35577,35579,35581],{"class":96,"line":1634},[94,35574,31941],{"class":104},[94,35576,150],{"class":100},[94,35578,31438],{"class":104},[94,35580,31446],{"class":209},[94,35582,31449],{"class":104},[94,35584,35585,35587,35589,35591],{"class":96,"line":1655},[94,35586,31954],{"class":5198},[94,35588,150],{"class":100},[94,35590,31459],{"class":153},[94,35592,31449],{"class":104},[94,35594,35595,35597,35599,35601,35603,35605,35607],{"class":96,"line":1660},[94,35596,31965],{"class":5198},[94,35598,150],{"class":100},[94,35600,31476],{"class":104},[94,35602,31479],{"class":5198},[94,35604,150],{"class":100},[94,35606,35432],{"class":153},[94,35608,31487],{"class":104},[94,35610,35611,35613,35615,35617],{"class":96,"line":1674},[94,35612,31982],{"class":5198},[94,35614,150],{"class":100},[94,35616,31459],{"class":153},[94,35618,111],{"class":104},[94,35620,35621,35623,35625,35627,35629,35631,35633,35635,35637,35639,35641,35643,35645,35647,35649],{"class":96,"line":1679},[94,35622,31993],{"class":104},[94,35624,150],{"class":100},[94,35626,31998],{"class":104},[94,35628,32001],{"class":153},[94,35630,105],{"class":104},[94,35632,32006],{"class":153},[94,35634,560],{"class":100},[94,35636,7340],{"class":153},[94,35638,32013],{"class":104},[94,35640,32001],{"class":153},[94,35642,105],{"class":104},[94,35644,32020],{"class":153},[94,35646,560],{"class":100},[94,35648,7340],{"class":153},[94,35650,32027],{"class":104},[94,35652,35653,35655,35657,35659,35661,35663],{"class":96,"line":1708},[94,35654,32032],{"class":104},[94,35656,150],{"class":100},[94,35658,32037],{"class":104},[94,35660,31520],{"class":5198},[94,35662,150],{"class":100},[94,35664,31525],{"class":104},[94,35666,35667,35669,35671,35673],{"class":96,"line":1713},[94,35668,32048],{"class":5198},[94,35670,150],{"class":100},[94,35672,32053],{"class":153},[94,35674,31449],{"class":104},[94,35676,35677,35679,35681,35683],{"class":96,"line":1730},[94,35678,32060],{"class":5198},[94,35680,150],{"class":100},[94,35682,31459],{"class":153},[94,35684,31449],{"class":104},[94,35686,35687],{"class":96,"line":1735},[94,35688,32071],{"class":163},[94,35690,35691,35693,35695,35697],{"class":96,"line":1740},[94,35692,32076],{"class":5198},[94,35694,150],{"class":100},[94,35696,500],{"class":153},[94,35698,111],{"class":104},[94,35700,35701,35703,35705,35707,35709,35711],{"class":96,"line":1745},[94,35702,32087],{"class":104},[94,35704,150],{"class":100},[94,35706,31517],{"class":104},[94,35708,31520],{"class":5198},[94,35710,150],{"class":100},[94,35712,32098],{"class":104},[94,35714,35715,35717,35719,35721],{"class":96,"line":1759},[94,35716,32103],{"class":5198},[94,35718,150],{"class":100},[94,35720,32053],{"class":153},[94,35722,31449],{"class":104},[94,35724,35725,35727,35729,35731],{"class":96,"line":1764},[94,35726,32114],{"class":5198},[94,35728,150],{"class":100},[94,35730,31459],{"class":153},[94,35732,31449],{"class":104},[94,35734,35735,35737,35739,35741],{"class":96,"line":2558},[94,35736,32125],{"class":5198},[94,35738,150],{"class":100},[94,35740,500],{"class":153},[94,35742,111],{"class":104},[94,35744,35745,35747],{"class":96,"line":2572},[94,35746,4071],{"class":100},[94,35748,32138],{"class":104},[94,35750,35751],{"class":96,"line":2580},[94,35752,2381],{"emptyLinePlaceholder":20},[94,35754,35755],{"class":96,"line":2585},[94,35756,32147],{"class":163},[94,35758,35759],{"class":96,"line":2591},[94,35760,32152],{"class":163},[94,35762,35763],{"class":96,"line":2597},[94,35764,2381],{"emptyLinePlaceholder":20},[94,35766,35767],{"class":96,"line":2602},[94,35768,32161],{"class":163},[94,35770,35771,35773,35775],{"class":96,"line":7930},[94,35772,31930],{"class":100},[94,35774,32168],{"class":1944},[94,35776,32171],{"class":104},[94,35778,35779,35781,35783,35785,35787,35789,35791,35793,35795],{"class":96,"line":7954},[94,35780,31220],{"class":104},[94,35782,150],{"class":100},[94,35784,30434],{"class":104},[94,35786,31227],{"class":209},[94,35788,1685],{"class":100},[94,35790,31232],{"class":104},[94,35792,1682],{"class":100},[94,35794,32190],{"class":209},[94,35796,111],{"class":104},[94,35798,35799],{"class":96,"line":7959},[94,35800,2381],{"emptyLinePlaceholder":20},[94,35802,35803],{"class":96,"line":7965},[94,35804,2381],{"emptyLinePlaceholder":20},[94,35806,35807],{"class":96,"line":7992},[94,35808,32205],{"class":163},[94,35810,35811],{"class":96,"line":7997},[94,35812,32210],{"class":163},[94,35814,35815],{"class":96,"line":8003},[94,35816,32215],{"class":163},[94,35818,35819,35821,35823,35825,35827,35829,35831],{"class":96,"line":8015},[94,35820,32220],{"class":104},[94,35822,150],{"class":100},[94,35824,32225],{"class":104},[94,35826,32228],{"class":5198},[94,35828,150],{"class":100},[94,35830,32233],{"class":153},[94,35832,111],{"class":104},[94,35834,35835],{"class":96,"line":8027},[94,35836,2381],{"emptyLinePlaceholder":20},[94,35838,35839],{"class":96,"line":8039},[94,35840,32244],{"class":163},[94,35842,35843,35845,35847],{"class":96,"line":9698},[94,35844,32249],{"class":104},[94,35846,150],{"class":100},[94,35848,32254],{"class":104},[94,35850,35851],{"class":96,"line":9723},[94,35852,2381],{"emptyLinePlaceholder":20},[94,35854,35855],{"class":96,"line":9746},[94,35856,32263],{"class":163},[94,35858,35859,35861,35863],{"class":96,"line":9770},[94,35860,31272],{"class":104},[94,35862,150],{"class":100},[94,35864,32272],{"class":104},[94,35866,35867],{"class":96,"line":9775},[94,35868,32277],{"class":163},[94,35870,35871],{"class":96,"line":9780},[94,35872,32282],{"class":163},[94,35874,35875],{"class":96,"line":9785},[94,35876,32287],{"class":163},[94,35878,35879,35881,35883],{"class":96,"line":9794},[94,35880,32292],{"class":104},[94,35882,150],{"class":100},[94,35884,32297],{"class":104},[94,35886,35887],{"class":96,"line":9799},[94,35888,2381],{"emptyLinePlaceholder":20},[94,35890,35891],{"class":96,"line":9805},[94,35892,2381],{"emptyLinePlaceholder":20},[94,35894,35895],{"class":96,"line":9826},[94,35896,32310],{"class":163},[94,35898,35899],{"class":96,"line":9832},[94,35900,32315],{"class":163},[94,35902,35903,35905,35907],{"class":96,"line":9846},[94,35904,32320],{"class":104},[94,35906,150],{"class":100},[94,35908,32325],{"class":153},[94,35910,35911],{"class":96,"line":9852},[94,35912,32330],{"class":163},[94,35914,35915,35917,35919],{"class":96,"line":9879},[94,35916,32335],{"class":104},[94,35918,150],{"class":100},[94,35920,32340],{"class":104},[94,35922,35923],{"class":96,"line":9888},[94,35924,32345],{"class":163},[94,35926,35927,35929,35931],{"class":96,"line":9894},[94,35928,32350],{"class":104},[94,35930,150],{"class":100},[94,35932,32340],{"class":104},[94,35934,35935],{"class":96,"line":9902},[94,35936,32359],{"class":163},[94,35938,35939,35941,35943],{"class":96,"line":9907},[94,35940,32364],{"class":104},[94,35942,150],{"class":100},[94,35944,32340],{"class":104},[94,35946,35947],{"class":96,"line":16586},[94,35948,32373],{"class":163},[94,35950,35951,35953,35955],{"class":96,"line":16592},[94,35952,32378],{"class":104},[94,35954,150],{"class":100},[94,35956,32340],{"class":104},[94,35958,35959],{"class":96,"line":16615},[94,35960,2381],{"emptyLinePlaceholder":20},[94,35962,35963],{"class":96,"line":16621},[94,35964,32391],{"class":163},[94,35966,35967,35969,35971],{"class":96,"line":16644},[94,35968,32396],{"class":104},[94,35970,150],{"class":100},[94,35972,32401],{"class":104},[94,35974,35975],{"class":96,"line":16658},[94,35976,2381],{"emptyLinePlaceholder":20},[94,35978,35979],{"class":96,"line":16678},[94,35980,2381],{"emptyLinePlaceholder":20},[94,35982,35983],{"class":96,"line":16684},[94,35984,32414],{"class":163},[94,35986,35987,35989,35991,35993,35995],{"class":96,"line":16695},[94,35988,3182],{"class":100},[94,35990,32421],{"class":104},[94,35992,26026],{"class":100},[94,35994,32426],{"class":153},[94,35996,32429],{"class":104},[94,35998,35999,36001,36003,36005,36007,36009,36011,36013,36015,36017,36019],{"class":96,"line":16718},[94,36000,32434],{"class":153},[94,36002,105],{"class":104},[94,36004,32439],{"class":209},[94,36006,32442],{"class":153},[94,36008,689],{"class":209},[94,36010,32442],{"class":153},[94,36012,356],{"class":209},[94,36014,32451],{"class":104},[94,36016,637],{"class":100},[94,36018,322],{"class":153},[94,36020,30480],{"class":104},[94,36022,36023,36025,36027,36029,36031,36033],{"class":96,"line":16740},[94,36024,32434],{"class":153},[94,36026,105],{"class":104},[94,36028,32466],{"class":209},[94,36030,560],{"class":100},[94,36032,551],{"class":153},[94,36034,111],{"class":104},[94,36036,36037],{"class":96,"line":16745},[94,36038,2381],{"emptyLinePlaceholder":20},[94,36040,36041],{"class":96,"line":16751},[94,36042,32481],{"class":163},[94,36044,36045],{"class":96,"line":16765},[94,36046,32486],{"class":163},[94,36048,36049,36051,36053],{"class":96,"line":16778},[94,36050,32491],{"class":104},[94,36052,150],{"class":100},[94,36054,32325],{"class":153},[94,36056,36057],{"class":96,"line":16783},[94,36058,32500],{"class":163},[94,36060,36061,36063,36065],{"class":96,"line":16797},[94,36062,32505],{"class":104},[94,36064,150],{"class":100},[94,36066,3066],{"class":153},[94,36068,36069],{"class":96,"line":16802},[94,36070,32514],{"class":163},[94,36072,36073,36075,36077],{"class":96,"line":16808},[94,36074,32519],{"class":104},[94,36076,150],{"class":100},[94,36078,32325],{"class":153},[94,36080,36081],{"class":96,"line":16813},[94,36082,32528],{"class":163},[94,36084,36085,36087,36089],{"class":96,"line":16827},[94,36086,32533],{"class":104},[94,36088,150],{"class":100},[94,36090,3066],{"class":153},[94,36092,36093],{"class":96,"line":16832},[94,36094,32542],{"class":163},[94,36096,36097,36099,36101],{"class":96,"line":16837},[94,36098,32547],{"class":104},[94,36100,150],{"class":100},[94,36102,3066],{"class":153},[94,36104,36105],{"class":96,"line":16851},[94,36106,32556],{"class":163},[94,36108,36109,36111,36113],{"class":96,"line":16863},[94,36110,32561],{"class":104},[94,36112,150],{"class":100},[94,36114,3066],{"class":153},[94,36116,36117],{"class":96,"line":16868},[94,36118,32570],{"class":163},[94,36120,36121,36123,36125,36127,36129],{"class":96,"line":16881},[94,36122,3384],{"class":100},[94,36124,31584],{"class":104},[94,36126,26026],{"class":100},[94,36128,31589],{"class":153},[94,36130,32583],{"class":104},[94,36132,36133],{"class":96,"line":16886},[94,36134,32588],{"class":163},[94,36136,36137,36139,36141],{"class":96,"line":16891},[94,36138,32593],{"class":104},[94,36140,150],{"class":100},[94,36142,32598],{"class":104},[94,36144,36145],{"class":96,"line":16896},[94,36146,32603],{"class":163},[94,36148,36149,36151,36153],{"class":96,"line":16909},[94,36150,32608],{"class":104},[94,36152,150],{"class":100},[94,36154,32613],{"class":104},[94,36156,36157],{"class":96,"line":16914},[94,36158,32619],{"class":163},[94,36160,36161],{"class":96,"line":32616},[94,36162,32625],{"class":104},[94,36164,36165],{"class":96,"line":32622},[94,36166,32631],{"class":163},[94,36168,36169],{"class":96,"line":32628},[94,36170,32637],{"class":163},[94,36172,36173,36175,36177],{"class":96,"line":32634},[94,36174,32643],{"class":104},[94,36176,150],{"class":100},[94,36178,32648],{"class":104},[94,36180,36181],{"class":96,"line":32640},[94,36182,32654],{"class":163},[94,36184,36185,36187,36189,36191,36193,36195,36197],{"class":96,"line":32651},[94,36186,32660],{"class":104},[94,36188,150],{"class":100},[94,36190,32665],{"class":104},[94,36192,32668],{"class":5198},[94,36194,150],{"class":100},[94,36196,322],{"class":153},[94,36198,111],{"class":104},[94,36200,36201],{"class":96,"line":32657},[94,36202,32680],{"class":163},[94,36204,36205,36207,36209],{"class":96,"line":32677},[94,36206,32686],{"class":104},[94,36208,150],{"class":100},[94,36210,32691],{"class":104},[94,36212,36213],{"class":96,"line":32683},[94,36214,32697],{"class":163},[94,36216,36217],{"class":96,"line":32694},[94,36218,32703],{"class":104},[94,36220,36221],{"class":96,"line":32700},[94,36222,32709],{"class":163},[94,36224,36225],{"class":96,"line":32706},[94,36226,32715],{"class":104},[94,36228,36229],{"class":96,"line":32712},[94,36230,32721],{"class":163},[94,36232,36233],{"class":96,"line":32718},[94,36234,32727],{"class":104},[94,36236,36237],{"class":96,"line":32724},[94,36238,32733],{"class":163},[94,36240,36241,36243,36245,36247,36249,36251,36253],{"class":96,"line":32730},[94,36242,32739],{"class":104},[94,36244,9459],{"class":100},[94,36246,32744],{"class":104},[94,36248,560],{"class":100},[94,36250,32749],{"class":104},[94,36252,296],{"class":153},[94,36254,111],{"class":104},[94,36256,36257],{"class":96,"line":32736},[94,36258,32759],{"class":163},[94,36260,36261,36263,36265,36267,36269],{"class":96,"line":32756},[94,36262,32765],{"class":104},[94,36264,9459],{"class":100},[94,36266,32770],{"class":104},[94,36268,2930],{"class":100},[94,36270,32775],{"class":104},[94,36272,36273],{"class":96,"line":32762},[94,36274,32781],{"class":163},[94,36276,36277,36279,36281,36283,36285],{"class":96,"line":32778},[94,36278,32787],{"class":104},[94,36280,9459],{"class":100},[94,36282,32749],{"class":104},[94,36284,296],{"class":153},[94,36286,111],{"class":104},[94,36288,36289],{"class":96,"line":32784},[94,36290,32801],{"class":163},[94,36292,36293,36295,36297,36299,36301],{"class":96,"line":32798},[94,36294,3384],{"class":100},[94,36296,32809],{"class":104},[94,36298,26026],{"class":100},[94,36300,31589],{"class":153},[94,36302,32816],{"class":104},[94,36304,36305],{"class":96,"line":32804},[94,36306,32822],{"class":163},[94,36308,36309,36311,36313],{"class":96,"line":32819},[94,36310,32593],{"class":104},[94,36312,150],{"class":100},[94,36314,32598],{"class":104},[94,36316,36317],{"class":96,"line":32825},[94,36318,32837],{"class":163},[94,36320,36321,36323,36325],{"class":96,"line":32834},[94,36322,32608],{"class":104},[94,36324,150],{"class":100},[94,36326,32613],{"class":104},[94,36328,36329],{"class":96,"line":32840},[94,36330,32852],{"class":163},[94,36332,36333],{"class":96,"line":32849},[94,36334,32858],{"class":104},[94,36336,36337],{"class":96,"line":32855},[94,36338,36339],{"class":163},"            # 验证时不计算梯度以节省内存\u002F计算\n",[94,36341,36342,36344],{"class":96,"line":32861},[94,36343,32864],{"class":100},[94,36345,32867],{"class":104},[94,36347,36348],{"class":96,"line":32870},[94,36349,32873],{"class":163},[94,36351,36352,36355,36357],{"class":96,"line":32876},[94,36353,36354],{"class":104},"                output",[94,36356,150],{"class":100},[94,36358,32648],{"class":104},[94,36360,36361],{"class":96,"line":32887},[94,36362,32890],{"class":163},[94,36364,36365,36368,36370,36372,36374,36376,36378],{"class":96,"line":32893},[94,36366,36367],{"class":104},"                pre_lab",[94,36369,150],{"class":100},[94,36371,32665],{"class":104},[94,36373,32668],{"class":5198},[94,36375,150],{"class":100},[94,36377,322],{"class":153},[94,36379,111],{"class":104},[94,36381,36382],{"class":96,"line":32912},[94,36383,32915],{"class":163},[94,36385,36386,36389,36391],{"class":96,"line":32918},[94,36387,36388],{"class":104},"                val_batch_loss",[94,36390,150],{"class":100},[94,36392,32691],{"class":104},[94,36394,36395],{"class":96,"line":32929},[94,36396,32932],{"class":163},[94,36398,36399,36402,36404,36407,36409,36411,36413],{"class":96,"line":32935},[94,36400,36401],{"class":104},"                val_loss",[94,36403,9459],{"class":100},[94,36405,36406],{"class":104},"val_batch_loss.item()",[94,36408,560],{"class":100},[94,36410,32749],{"class":104},[94,36412,296],{"class":153},[94,36414,111],{"class":104},[94,36416,36417,36420,36422,36424,36426],{"class":96,"line":32955},[94,36418,36419],{"class":104},"                val_corrects",[94,36421,9459],{"class":100},[94,36423,32770],{"class":104},[94,36425,2930],{"class":100},[94,36427,32775],{"class":104},[94,36429,36430],{"class":96,"line":32971},[94,36431,36432],{"class":163},"            # 当前用于验证的样本数量\n",[94,36434,36435,36438,36440,36442,36444],{"class":96,"line":32977},[94,36436,36437],{"class":104},"            val_num",[94,36439,9459],{"class":100},[94,36441,32749],{"class":104},[94,36443,296],{"class":153},[94,36445,111],{"class":104},[94,36447,36448],{"class":96,"line":32991},[94,36449,32994],{"class":163},[94,36451,36452],{"class":96,"line":32997},[94,36453,33000],{"class":163},[94,36455,36456,36458,36460],{"class":96,"line":33003},[94,36457,33006],{"class":104},[94,36459,689],{"class":100},[94,36461,33011],{"class":104},[94,36463,36464],{"class":96,"line":33014},[94,36465,33017],{"class":163},[94,36467,36468],{"class":96,"line":33020},[94,36469,33023],{"class":163},[94,36471,36472,36474,36476],{"class":96,"line":33026},[94,36473,33029],{"class":104},[94,36475,689],{"class":100},[94,36477,33011],{"class":104},[94,36479,36480],{"class":96,"line":33036},[94,36481,33039],{"class":163},[94,36483,36484,36486,36488],{"class":96,"line":33042},[94,36485,33045],{"class":104},[94,36487,689],{"class":100},[94,36489,33050],{"class":104},[94,36491,36492],{"class":96,"line":33053},[94,36493,33056],{"class":163},[94,36495,36496,36498,36500],{"class":96,"line":33059},[94,36497,33062],{"class":104},[94,36499,689],{"class":100},[94,36501,33050],{"class":104},[94,36503,36504],{"class":96,"line":33069},[94,36505,2381],{"emptyLinePlaceholder":20},[94,36507,36508],{"class":96,"line":33074},[94,36509,33077],{"class":163},[94,36511,36512,36514,36516,36518,36520,36522,36524,36526,36528,36530,36532,36534,36536,36538,36540,36542,36544,36546,36548,36550],{"class":96,"line":33080},[94,36513,32434],{"class":153},[94,36515,105],{"class":104},[94,36517,3573],{"class":209},[94,36519,32442],{"class":153},[94,36521,33091],{"class":209},[94,36523,1001],{"class":153},[94,36525,33096],{"class":100},[94,36527,1051],{"class":153},[94,36529,33101],{"class":209},[94,36531,1001],{"class":153},[94,36533,33096],{"class":100},[94,36535,1051],{"class":153},[94,36537,3573],{"class":209},[94,36539,33112],{"class":104},[94,36541,637],{"class":100},[94,36543,322],{"class":153},[94,36545,33119],{"class":104},[94,36547,637],{"class":100},[94,36549,322],{"class":153},[94,36551,33126],{"class":104},[94,36553,36554,36556,36558,36560,36562,36564,36566,36568,36570,36572,36574,36576,36578,36580,36582,36584,36586,36588,36590,36592],{"class":96,"line":33129},[94,36555,32434],{"class":153},[94,36557,105],{"class":104},[94,36559,3573],{"class":209},[94,36561,32442],{"class":153},[94,36563,33140],{"class":209},[94,36565,1001],{"class":153},[94,36567,33096],{"class":100},[94,36569,1051],{"class":153},[94,36571,33149],{"class":209},[94,36573,1001],{"class":153},[94,36575,33096],{"class":100},[94,36577,1051],{"class":153},[94,36579,3573],{"class":209},[94,36581,33160],{"class":104},[94,36583,637],{"class":100},[94,36585,322],{"class":153},[94,36587,33167],{"class":104},[94,36589,637],{"class":100},[94,36591,322],{"class":153},[94,36593,33126],{"class":104},[94,36595,36596],{"class":96,"line":33176},[94,36597,2381],{"emptyLinePlaceholder":20},[94,36599,36600],{"class":96,"line":33181},[94,36601,33184],{"class":163},[94,36603,36604,36606,36608,36610,36612,36614,36616],{"class":96,"line":33187},[94,36605,2478],{"class":100},[94,36607,33192],{"class":104},[94,36609,637],{"class":100},[94,36611,322],{"class":153},[94,36613,1045],{"class":104},[94,36615,1065],{"class":100},[94,36617,33203],{"class":104},[94,36619,36620],{"class":96,"line":33206},[94,36621,33209],{"class":163},[94,36623,36624,36626,36628,36630,36632,36634,36636],{"class":96,"line":33212},[94,36625,33215],{"class":104},[94,36627,144],{"class":153},[94,36629,150],{"class":100},[94,36631,33222],{"class":104},[94,36633,637],{"class":100},[94,36635,322],{"class":153},[94,36637,33229],{"class":104},[94,36639,36640],{"class":96,"line":33232},[94,36641,33235],{"class":163},[94,36643,36644],{"class":96,"line":33238},[94,36645,33241],{"class":163},[94,36647,36648,36650,36652],{"class":96,"line":33244},[94,36649,33247],{"class":104},[94,36651,150],{"class":100},[94,36653,32297],{"class":104},[94,36655,36656],{"class":96,"line":33254},[94,36657,2381],{"emptyLinePlaceholder":20},[94,36659,36660],{"class":96,"line":33259},[94,36661,33262],{"class":163},[94,36663,36664,36666,36668,36670,36672],{"class":96,"line":33265},[94,36665,33268],{"class":104},[94,36667,150],{"class":100},[94,36669,33273],{"class":104},[94,36671,637],{"class":100},[94,36673,33278],{"class":104},[94,36675,36676,36678,36680,36682,36684,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706,36708,36710],{"class":96,"line":33281},[94,36677,32434],{"class":153},[94,36679,105],{"class":104},[94,36681,33288],{"class":209},[94,36683,1001],{"class":153},[94,36685,33293],{"class":100},[94,36687,1051],{"class":153},[94,36689,649],{"class":209},[94,36691,1001],{"class":153},[94,36693,33293],{"class":100},[94,36695,1051],{"class":153},[94,36697,33306],{"class":209},[94,36699,33309],{"class":104},[94,36701,33312],{"class":100},[94,36703,1012],{"class":153},[94,36705,33317],{"class":104},[94,36707,433],{"class":100},[94,36709,1012],{"class":153},[94,36711,30480],{"class":104},[94,36713,36714],{"class":96,"line":33326},[94,36715,36716],{"class":163},"    # 选择最优参数并保存\n",[94,36718,36719],{"class":96,"line":33332},[94,36720,36721],{"class":163},"    # 保存最佳模型权重字典\n",[94,36723,36724,36727,36729],{"class":96,"line":33338},[94,36725,36726],{"class":104},"    torch.save(best_model_wts,",[94,36728,33350],{"class":209},[94,36730,111],{"class":104},[94,36732,36733],{"class":96,"line":33344},[94,36734,33370],{"class":163},[94,36736,36737,36739,36741,36743,36745,36747],{"class":96,"line":33355},[94,36738,33376],{"class":104},[94,36740,150],{"class":100},[94,36742,33381],{"class":104},[94,36744,33384],{"class":5198},[94,36746,150],{"class":100},[94,36748,1527],{"class":104},[94,36750,36751,36753,36755,36757],{"class":96,"line":33361},[94,36752,33394],{"class":209},[94,36754,964],{"class":104},[94,36756,33399],{"class":153},[94,36758,33402],{"class":104},[94,36760,36761,36763],{"class":96,"line":33367},[94,36762,33408],{"class":209},[94,36764,33411],{"class":104},[94,36766,36767,36769],{"class":96,"line":33373},[94,36768,33417],{"class":209},[94,36770,33420],{"class":104},[94,36772,36773,36775],{"class":96,"line":33391},[94,36774,33426],{"class":209},[94,36776,33429],{"class":104},[94,36778,36779,36781],{"class":96,"line":33405},[94,36780,33435],{"class":209},[94,36782,33438],{"class":104},[94,36784,36785],{"class":96,"line":33414},[94,36786,33444],{"class":104},[94,36788,36789],{"class":96,"line":33423},[94,36790,33450],{"class":163},[94,36792,36793,36795],{"class":96,"line":33432},[94,36794,4071],{"class":100},[94,36796,33458],{"class":104},[94,36798,36799],{"class":96,"line":33441},[94,36800,2381],{"emptyLinePlaceholder":20},[94,36802,36803],{"class":96,"line":33447},[94,36804,33469],{"class":163},[94,36806,36807,36809,36811],{"class":96,"line":33453},[94,36808,31930],{"class":100},[94,36810,33477],{"class":1944},[94,36812,33480],{"class":104},[94,36814,36815],{"class":96,"line":33461},[94,36816,33486],{"class":163},[94,36818,36819,36821,36823,36825,36827,36829,36831,36833],{"class":96,"line":33466},[94,36820,33492],{"class":104},[94,36822,31676],{"class":5198},[94,36824,150],{"class":100},[94,36826,105],{"class":104},[94,36828,603],{"class":153},[94,36830,483],{"class":104},[94,36832,398],{"class":153},[94,36834,30480],{"class":104},[94,36836,36837],{"class":96,"line":33472},[94,36838,33512],{"class":163},[94,36840,36841],{"class":96,"line":33483},[94,36842,33518],{"class":163},[94,36844,36845],{"class":96,"line":33489},[94,36846,33524],{"class":163},[94,36848,36849,36851,36853,36855,36857,36859,36861],{"class":96,"line":33509},[94,36850,31710],{"class":104},[94,36852,322],{"class":153},[94,36854,483],{"class":104},[94,36856,182],{"class":153},[94,36858,483],{"class":104},[94,36860,322],{"class":153},[94,36862,111],{"class":104},[94,36864,36865],{"class":96,"line":33515},[94,36866,33547],{"class":163},[94,36868,36869],{"class":96,"line":33521},[94,36870,33553],{"class":163},[94,36872,36873],{"class":96,"line":33527},[94,36874,33559],{"class":163},[94,36876,36877],{"class":96,"line":33544},[94,36878,33565],{"class":163},[94,36880,36881],{"class":96,"line":33550},[94,36882,33571],{"class":163},[94,36884,36885,36887,36889,36891,36893,36895,36897,36899,36901],{"class":96,"line":33556},[94,36886,33577],{"class":104},[94,36888,33580],{"class":209},[94,36890,33583],{"class":104},[94,36892,33586],{"class":209},[94,36894,483],{"class":104},[94,36896,33591],{"class":5198},[94,36898,150],{"class":100},[94,36900,33596],{"class":209},[94,36902,111],{"class":104},[94,36904,36905,36907,36909,36911,36913,36915,36917,36919,36921],{"class":96,"line":33562},[94,36906,33577],{"class":104},[94,36908,33580],{"class":209},[94,36910,33608],{"class":104},[94,36912,33611],{"class":209},[94,36914,483],{"class":104},[94,36916,33591],{"class":5198},[94,36918,150],{"class":100},[94,36920,33620],{"class":209},[94,36922,111],{"class":104},[94,36924,36925],{"class":96,"line":33568},[94,36926,33628],{"class":163},[94,36928,36929],{"class":96,"line":33574},[94,36930,33634],{"class":104},[94,36932,36933],{"class":96,"line":33601},[94,36934,33640],{"class":163},[94,36936,36937,36939,36941],{"class":96,"line":33625},[94,36938,33646],{"class":104},[94,36940,33649],{"class":209},[94,36942,111],{"class":104},[94,36944,36945,36947,36949],{"class":96,"line":33631},[94,36946,33657],{"class":104},[94,36948,33660],{"class":209},[94,36950,111],{"class":104},[94,36952,36953],{"class":96,"line":33637},[94,36954,33668],{"class":163},[94,36956,36957,36959,36961,36963,36965,36967,36969],{"class":96,"line":33643},[94,36958,31710],{"class":104},[94,36960,322],{"class":153},[94,36962,483],{"class":104},[94,36964,182],{"class":153},[94,36966,483],{"class":104},[94,36968,182],{"class":153},[94,36970,111],{"class":104},[94,36972,36973,36975,36977,36979,36981,36983,36985,36987,36989],{"class":96,"line":33654},[94,36974,33577],{"class":104},[94,36976,33580],{"class":209},[94,36978,33695],{"class":104},[94,36980,33586],{"class":209},[94,36982,483],{"class":104},[94,36984,33591],{"class":5198},[94,36986,150],{"class":100},[94,36988,33706],{"class":209},[94,36990,111],{"class":104},[94,36992,36993,36995,36997,36999,37001,37003,37005,37007,37009],{"class":96,"line":33665},[94,36994,33577],{"class":104},[94,36996,33580],{"class":209},[94,36998,33718],{"class":104},[94,37000,33611],{"class":209},[94,37002,483],{"class":104},[94,37004,33591],{"class":5198},[94,37006,150],{"class":100},[94,37008,33729],{"class":209},[94,37010,111],{"class":104},[94,37012,37013],{"class":96,"line":33671},[94,37014,33737],{"class":163},[94,37016,37017],{"class":96,"line":33688},[94,37018,33634],{"class":104},[94,37020,37021,37023,37025],{"class":96,"line":33711},[94,37022,33646],{"class":104},[94,37024,33580],{"class":209},[94,37026,111],{"class":104},[94,37028,37029,37031,37033],{"class":96,"line":33734},[94,37030,33657],{"class":104},[94,37032,33759],{"class":209},[94,37034,111],{"class":104},[94,37036,37037],{"class":96,"line":33740},[94,37038,33767],{"class":104},[94,37040,37041],{"class":96,"line":33745},[94,37042,2381],{"emptyLinePlaceholder":20},[94,37044,37045],{"class":96,"line":33754},[94,37046,33778],{"class":163},[94,37048,37049,37051,37053,37055,37057],{"class":96,"line":33764},[94,37050,1512],{"class":100},[94,37052,31203],{"class":153},[94,37054,2930],{"class":100},[94,37056,31208],{"class":209},[94,37058,3720],{"class":104},[94,37060,37061],{"class":96,"line":33770},[94,37062,33797],{"class":163},[94,37064,37065,37068,37070],{"class":96,"line":33775},[94,37066,37067],{"class":104},"    AlexNet",[94,37069,150],{"class":100},[94,37071,37072],{"class":104},"AlexNet()\n",[94,37074,37075,37077,37079],{"class":96,"line":33781},[94,37076,33814],{"class":104},[94,37078,150],{"class":100},[94,37080,33819],{"class":104},[94,37082,37083,37085,37087,37090,37092,37094,37096],{"class":96,"line":33794},[94,37084,33376],{"class":104},[94,37086,150],{"class":100},[94,37088,37089],{"class":104},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[94,37091,33832],{"class":5198},[94,37093,150],{"class":100},[94,37095,805],{"class":153},[94,37097,111],{"class":104},[94,37099,37100],{"class":96,"line":33800},[94,37101,33844],{"class":104},[48,37103,37104],{"start":1160},[51,37105,33857],{},[85,37107,37109],{"className":30361,"code":37108,"language":30363,"meta":14,"style":14},"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",[91,37110,37111,37117,37127,37137,37147,37151,37161,37171,37182,37186,37190,37194,37202,37218,37228,37244,37254,37268,37272,37282,37292,37302,37308,37312,37316,37324,37328,37344,37352,37356,37360,37368,37376,37380,37384,37388,37392,37398,37402,37412,37420,37428,37432,37436,37440,37448,37452,37468,37472,37476,37480,37492,37496,37508,37512,37516,37528,37532,37542,37546,37550,37562,37566,37574,37578,37582,37590,37594,37602,37606,37610,37614,37618,37622,37638,37646,37650,37654,37702,37708,37712,37722,37730,37738,37742,37746,37750,37754,37762,37766,37782,37786,37794,37802],{"__ignoreMap":14},[94,37112,37113,37115],{"class":96,"line":97},[94,37114,30375],{"class":100},[94,37116,30378],{"class":104},[94,37118,37119,37121,37123,37125],{"class":96,"line":15},[94,37120,30375],{"class":100},[94,37122,31398],{"class":104},[94,37124,31366],{"class":100},[94,37126,31403],{"class":104},[94,37128,37129,37131,37133,37135],{"class":96,"line":1160},[94,37130,30720],{"class":100},[94,37132,33885],{"class":104},[94,37134,30375],{"class":100},[94,37136,33890],{"class":104},[94,37138,37139,37141,37143,37145],{"class":96,"line":1175},[94,37140,30720],{"class":100},[94,37142,31381],{"class":104},[94,37144,30375],{"class":100},[94,37146,31386],{"class":104},[94,37148,37149],{"class":96,"line":1181},[94,37150,33905],{"class":163},[94,37152,37153,37155,37157,37159],{"class":96,"line":1195},[94,37154,30720],{"class":100},[94,37156,31351],{"class":104},[94,37158,30375],{"class":100},[94,37160,31356],{"class":104},[94,37162,37163,37165,37167,37169],{"class":96,"line":1201},[94,37164,30720],{"class":100},[94,37166,31897],{"class":104},[94,37168,30375],{"class":100},[94,37170,35540],{"class":104},[94,37172,37173,37175,37178,37180],{"class":96,"line":1292},[94,37174,30720],{"class":100},[94,37176,37177],{"class":104}," 练习.AlexNet.model ",[94,37179,30375],{"class":100},[94,37181,35540],{"class":104},[94,37183,37184],{"class":96,"line":1298},[94,37185,2381],{"emptyLinePlaceholder":20},[94,37187,37188],{"class":96,"line":1310},[94,37189,2381],{"emptyLinePlaceholder":20},[94,37191,37192],{"class":96,"line":1593},[94,37193,33934],{"class":163},[94,37195,37196,37198,37200],{"class":96,"line":1598},[94,37197,31930],{"class":100},[94,37199,33941],{"class":1944},[94,37201,31936],{"class":104},[94,37203,37204,37206,37208,37210,37212,37214,37216],{"class":96,"line":1604},[94,37205,33948],{"class":104},[94,37207,150],{"class":100},[94,37209,31438],{"class":104},[94,37211,31441],{"class":5198},[94,37213,150],{"class":100},[94,37215,31446],{"class":209},[94,37217,31449],{"class":104},[94,37219,37220,37222,37224,37226],{"class":96,"line":1609},[94,37221,33965],{"class":5198},[94,37223,150],{"class":100},[94,37225,33970],{"class":153},[94,37227,31449],{"class":104},[94,37229,37230,37232,37234,37236,37238,37240,37242],{"class":96,"line":1623},[94,37231,33977],{"class":5198},[94,37233,150],{"class":100},[94,37235,31476],{"class":104},[94,37237,31479],{"class":5198},[94,37239,150],{"class":100},[94,37241,35432],{"class":153},[94,37243,31487],{"class":104},[94,37245,37246,37248,37250,37252],{"class":96,"line":1628},[94,37247,33994],{"class":5198},[94,37249,150],{"class":100},[94,37251,31459],{"class":153},[94,37253,111],{"class":104},[94,37255,37256,37258,37260,37262,37264,37266],{"class":96,"line":1634},[94,37257,34005],{"class":104},[94,37259,150],{"class":100},[94,37261,31517],{"class":104},[94,37263,31520],{"class":5198},[94,37265,150],{"class":100},[94,37267,34016],{"class":104},[94,37269,37270],{"class":96,"line":1655},[94,37271,34021],{"class":163},[94,37273,37274,37276,37278,37280],{"class":96,"line":1660},[94,37275,34026],{"class":5198},[94,37277,150],{"class":100},[94,37279,322],{"class":153},[94,37281,31449],{"class":104},[94,37283,37284,37286,37288,37290],{"class":96,"line":1674},[94,37285,34037],{"class":5198},[94,37287,150],{"class":100},[94,37289,31459],{"class":153},[94,37291,31449],{"class":104},[94,37293,37294,37296,37298,37300],{"class":96,"line":1679},[94,37295,34048],{"class":5198},[94,37297,150],{"class":100},[94,37299,296],{"class":153},[94,37301,111],{"class":104},[94,37303,37304,37306],{"class":96,"line":1708},[94,37305,4071],{"class":100},[94,37307,34061],{"class":104},[94,37309,37310],{"class":96,"line":1713},[94,37311,2381],{"emptyLinePlaceholder":20},[94,37313,37314],{"class":96,"line":1730},[94,37315,34070],{"class":163},[94,37317,37318,37320,37322],{"class":96,"line":1735},[94,37319,31930],{"class":100},[94,37321,34077],{"class":1944},[94,37323,34080],{"class":104},[94,37325,37326],{"class":96,"line":1740},[94,37327,34085],{"class":163},[94,37329,37330,37332,37334,37336,37338,37340,37342],{"class":96,"line":1745},[94,37331,31220],{"class":104},[94,37333,150],{"class":100},[94,37335,31227],{"class":209},[94,37337,1685],{"class":100},[94,37339,31232],{"class":104},[94,37341,1682],{"class":100},[94,37343,34102],{"class":209},[94,37345,37346,37348,37350],{"class":96,"line":1759},[94,37347,31272],{"class":104},[94,37349,150],{"class":100},[94,37351,32272],{"class":104},[94,37353,37354],{"class":96,"line":1764},[94,37355,2381],{"emptyLinePlaceholder":20},[94,37357,37358],{"class":96,"line":2558},[94,37359,34119],{"class":163},[94,37361,37362,37364,37366],{"class":96,"line":2572},[94,37363,34124],{"class":104},[94,37365,150],{"class":100},[94,37367,32325],{"class":153},[94,37369,37370,37372,37374],{"class":96,"line":2580},[94,37371,34133],{"class":104},[94,37373,150],{"class":100},[94,37375,3066],{"class":153},[94,37377,37378],{"class":96,"line":2585},[94,37379,2381],{"emptyLinePlaceholder":20},[94,37381,37382],{"class":96,"line":2591},[94,37383,34146],{"class":163},[94,37385,37386],{"class":96,"line":2597},[94,37387,34151],{"class":163},[94,37389,37390],{"class":96,"line":2602},[94,37391,34156],{"class":163},[94,37393,37394,37396],{"class":96,"line":7930},[94,37395,34161],{"class":100},[94,37397,32867],{"class":104},[94,37399,37400],{"class":96,"line":7954},[94,37401,34168],{"class":163},[94,37403,37404,37406,37408,37410],{"class":96,"line":7959},[94,37405,3384],{"class":100},[94,37407,34175],{"class":104},[94,37409,26026],{"class":100},[94,37411,34180],{"class":104},[94,37413,37414,37416,37418],{"class":96,"line":7965},[94,37415,34185],{"class":104},[94,37417,150],{"class":100},[94,37419,34190],{"class":104},[94,37421,37422,37424,37426],{"class":96,"line":7992},[94,37423,34195],{"class":104},[94,37425,150],{"class":100},[94,37427,34200],{"class":104},[94,37429,37430],{"class":96,"line":7997},[94,37431,34205],{"class":163},[94,37433,37434],{"class":96,"line":8003},[94,37435,32858],{"class":104},[94,37437,37438],{"class":96,"line":8015},[94,37439,34214],{"class":163},[94,37441,37442,37444,37446],{"class":96,"line":8027},[94,37443,32643],{"class":104},[94,37445,150],{"class":100},[94,37447,34223],{"class":104},[94,37449,37450],{"class":96,"line":8039},[94,37451,34228],{"class":163},[94,37453,37454,37456,37458,37460,37462,37464,37466],{"class":96,"line":9698},[94,37455,32660],{"class":104},[94,37457,150],{"class":100},[94,37459,32665],{"class":104},[94,37461,32668],{"class":5198},[94,37463,150],{"class":100},[94,37465,322],{"class":153},[94,37467,111],{"class":104},[94,37469,37470],{"class":96,"line":9723},[94,37471,34249],{"class":163},[94,37473,37474],{"class":96,"line":9746},[94,37475,34254],{"class":163},[94,37477,37478],{"class":96,"line":9770},[94,37479,34259],{"class":163},[94,37481,37482,37484,37486,37488,37490],{"class":96,"line":9775},[94,37483,34264],{"class":104},[94,37485,9459],{"class":100},[94,37487,32770],{"class":104},[94,37489,2930],{"class":100},[94,37491,34273],{"class":104},[94,37493,37494],{"class":96,"line":9780},[94,37495,34278],{"class":163},[94,37497,37498,37500,37502,37504,37506],{"class":96,"line":9785},[94,37499,34283],{"class":104},[94,37501,9459],{"class":100},[94,37503,34288],{"class":104},[94,37505,296],{"class":153},[94,37507,111],{"class":104},[94,37509,37510],{"class":96,"line":9794},[94,37511,2381],{"emptyLinePlaceholder":20},[94,37513,37514],{"class":96,"line":9799},[94,37515,34301],{"class":163},[94,37517,37518,37520,37522,37524,37526],{"class":96,"line":9805},[94,37519,34306],{"class":104},[94,37521,150],{"class":100},[94,37523,34311],{"class":104},[94,37525,689],{"class":100},[94,37527,34316],{"class":104},[94,37529,37530],{"class":96,"line":9826},[94,37531,34321],{"class":163},[94,37533,37534,37536,37538,37540],{"class":96,"line":9832},[94,37535,32434],{"class":153},[94,37537,105],{"class":104},[94,37539,34330],{"class":209},[94,37541,34333],{"class":104},[94,37543,37544],{"class":96,"line":9846},[94,37545,2381],{"emptyLinePlaceholder":20},[94,37547,37548],{"class":96,"line":9852},[94,37549,34342],{"class":163},[94,37551,37552,37554,37556,37558,37560],{"class":96,"line":9879},[94,37553,1512],{"class":100},[94,37555,31203],{"class":153},[94,37557,2930],{"class":100},[94,37559,31208],{"class":209},[94,37561,3720],{"class":104},[94,37563,37564],{"class":96,"line":9888},[94,37565,34359],{"class":163},[94,37567,37568,37570,37572],{"class":96,"line":9894},[94,37569,31272],{"class":104},[94,37571,150],{"class":100},[94,37573,37072],{"class":104},[94,37575,37576],{"class":96,"line":9902},[94,37577,34372],{"class":163},[94,37579,37580],{"class":96,"line":9907},[94,37581,34377],{"class":163},[94,37583,37584,37586,37588],{"class":96,"line":16586},[94,37585,34382],{"class":104},[94,37587,34385],{"class":209},[94,37589,30480],{"class":104},[94,37591,37592],{"class":96,"line":16592},[94,37593,34392],{"class":163},[94,37595,37596,37598,37600],{"class":96,"line":16615},[94,37597,34005],{"class":104},[94,37599,150],{"class":100},[94,37601,34401],{"class":104},[94,37603,37604],{"class":96,"line":16621},[94,37605,34406],{"class":163},[94,37607,37608],{"class":96,"line":16644},[94,37609,34411],{"class":104},[94,37611,37612],{"class":96,"line":16658},[94,37613,2381],{"emptyLinePlaceholder":20},[94,37615,37616],{"class":96,"line":16678},[94,37617,34420],{"class":163},[94,37619,37620],{"class":96,"line":16684},[94,37621,34425],{"class":163},[94,37623,37624,37626,37628,37630,37632,37634,37636],{"class":96,"line":16695},[94,37625,31220],{"class":104},[94,37627,150],{"class":100},[94,37629,31227],{"class":209},[94,37631,1685],{"class":100},[94,37633,31232],{"class":104},[94,37635,1682],{"class":100},[94,37637,34102],{"class":209},[94,37639,37640,37642,37644],{"class":96,"line":16718},[94,37641,31272],{"class":104},[94,37643,150],{"class":100},[94,37645,32272],{"class":104},[94,37647,37648],{"class":96,"line":16740},[94,37649,34454],{"class":163},[94,37651,37652],{"class":96,"line":16745},[94,37653,34459],{"class":163},[94,37655,37656,37658,37660,37662,37664,37666,37668,37670,37672,37674,37676,37678,37680,37682,37684,37686,37688,37690,37692,37694,37696,37698,37700],{"class":96,"line":16751},[94,37657,34464],{"class":104},[94,37659,150],{"class":100},[94,37661,995],{"class":104},[94,37663,34471],{"class":209},[94,37665,483],{"class":104},[94,37667,34476],{"class":209},[94,37669,483],{"class":104},[94,37671,34481],{"class":209},[94,37673,483],{"class":104},[94,37675,34486],{"class":209},[94,37677,483],{"class":104},[94,37679,34491],{"class":209},[94,37681,483],{"class":104},[94,37683,34496],{"class":209},[94,37685,483],{"class":104},[94,37687,34501],{"class":209},[94,37689,483],{"class":104},[94,37691,34506],{"class":209},[94,37693,483],{"class":104},[94,37695,34511],{"class":209},[94,37697,483],{"class":104},[94,37699,34516],{"class":209},[94,37701,33229],{"class":104},[94,37703,37704,37706],{"class":96,"line":16765},[94,37705,34161],{"class":100},[94,37707,32867],{"class":104},[94,37709,37710],{"class":96,"line":16778},[94,37711,34529],{"class":163},[94,37713,37714,37716,37718,37720],{"class":96,"line":16783},[94,37715,3384],{"class":100},[94,37717,34536],{"class":104},[94,37719,26026],{"class":100},[94,37721,34180],{"class":104},[94,37723,37724,37726,37728],{"class":96,"line":16797},[94,37725,32593],{"class":104},[94,37727,150],{"class":100},[94,37729,32598],{"class":104},[94,37731,37732,37734,37736],{"class":96,"line":16802},[94,37733,32608],{"class":104},[94,37735,150],{"class":100},[94,37737,32613],{"class":104},[94,37739,37740],{"class":96,"line":16808},[94,37741,2381],{"emptyLinePlaceholder":20},[94,37743,37744],{"class":96,"line":16813},[94,37745,34565],{"class":163},[94,37747,37748],{"class":96,"line":16827},[94,37749,32858],{"class":104},[94,37751,37752],{"class":96,"line":16832},[94,37753,34574],{"class":163},[94,37755,37756,37758,37760],{"class":96,"line":16837},[94,37757,32643],{"class":104},[94,37759,150],{"class":100},[94,37761,32648],{"class":104},[94,37763,37764],{"class":96,"line":16851},[94,37765,34587],{"class":163},[94,37767,37768,37770,37772,37774,37776,37778,37780],{"class":96,"line":16863},[94,37769,32660],{"class":104},[94,37771,150],{"class":100},[94,37773,32665],{"class":104},[94,37775,32668],{"class":5198},[94,37777,150],{"class":100},[94,37779,322],{"class":153},[94,37781,111],{"class":104},[94,37783,37784],{"class":96,"line":16868},[94,37785,34608],{"class":163},[94,37787,37788,37790,37792],{"class":96,"line":16881},[94,37789,34613],{"class":104},[94,37791,150],{"class":100},[94,37793,34618],{"class":104},[94,37795,37796,37798,37800],{"class":96,"line":16886},[94,37797,34623],{"class":104},[94,37799,150],{"class":100},[94,37801,34628],{"class":104},[94,37803,37804,37806,37808,37810,37812,37814,37816,37818],{"class":96,"line":16891},[94,37805,34633],{"class":153},[94,37807,105],{"class":104},[94,37809,34638],{"class":209},[94,37811,34641],{"class":104},[94,37813,34644],{"class":209},[94,37815,483],{"class":104},[94,37817,34649],{"class":209},[94,37819,34652],{"class":104},[65,37821,37823],{"id":37822},"_22vgg","2.2.VGG",[21980,37825,37827],{"id":37826},"_221原理","2.2.1.原理",[40,37829,37830],{},[1443,37831],{"alt":14,"src":37832},"\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",[40,37834,37835],{},[1443,37836],{"alt":14,"src":37837},"\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",[40,37839,37840],{},[1443,37841],{"alt":14,"src":37842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[40,37844,37845],{},"参数详细描述：",[40,37847,37848],{},[1443,37849],{"alt":14,"src":37850},"\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",[40,37852,37853],{},[1443,37854],{"alt":14,"src":37855},"\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",[40,37857,37858],{},[1443,37859],{"alt":14,"src":37860},"\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",[40,37862,37863],{},[1443,37864],{"alt":14,"src":37865},"\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",[40,37867,37868],{},[1443,37869],{"alt":14,"src":37870},"\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",[21980,37872,37874],{"id":37873},"_222代码实现","2.2.2.代码实现",[48,37876,37877],{},[51,37878,37879],{},"网络搭建",[85,37881,37883],{"className":30361,"code":37882,"language":30363,"meta":14,"style":14},"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",[91,37884,37885,37891,37903,37913,37923,37927,37944,37952,37971,37976,37981,37993,38031,38036,38072,38076,38105,38110,38115,38126,38162,38166,38202,38206,38234,38238,38243,38254,38290,38294,38330,38334,38370,38374,38402,38406,38411,38422,38459,38463,38499,38503,38539,38543,38571,38575,38580,38591,38627,38631,38667,38671,38707,38711,38739,38743,38748,38759,38764,38769,38774,38795,38799,38811,38815,38827,38831,38835,38840,38845,38860,38865,38875,38880,38895,38900,38919,38924,38933,38938,38948,38953,38958,38972,38977,38991,38999,39003,39007,39015,39026,39037,39048,39059,39070,39081,39087,39091,39096,39109,39129,39135,39144],{"__ignoreMap":14},[94,37886,37887,37889],{"class":96,"line":97},[94,37888,30375],{"class":100},[94,37890,30378],{"class":104},[94,37892,37893,37895,37898,37900],{"class":96,"line":15},[94,37894,30720],{"class":100},[94,37896,37897],{"class":104}," sympy.core.sympify ",[94,37899,30375],{"class":100},[94,37901,37902],{"class":104}," kernS\n",[94,37904,37905,37907,37909,37911],{"class":96,"line":1160},[94,37906,30720],{"class":100},[94,37908,30723],{"class":104},[94,37910,30375],{"class":100},[94,37912,30728],{"class":104},[94,37914,37915,37917,37919,37921],{"class":96,"line":1175},[94,37916,30720],{"class":100},[94,37918,30740],{"class":104},[94,37920,30375],{"class":100},[94,37922,30745],{"class":104},[94,37924,37925],{"class":96,"line":1181},[94,37926,2381],{"emptyLinePlaceholder":20},[94,37928,37929,37931,37934,37936,37938,37940,37942],{"class":96,"line":1195},[94,37930,14676],{"class":100},[94,37932,37933],{"class":1944}," VGG16",[94,37935,105],{"class":104},[94,37937,30761],{"class":1944},[94,37939,663],{"class":104},[94,37941,30766],{"class":1944},[94,37943,30769],{"class":104},[94,37945,37946,37948,37950],{"class":96,"line":1201},[94,37947,30784],{"class":100},[94,37949,30787],{"class":153},[94,37951,30790],{"class":104},[94,37953,37954,37956,37958,37961,37963,37965,37967,37969],{"class":96,"line":1292},[94,37955,30800],{"class":153},[94,37957,105],{"class":104},[94,37959,37960],{"class":153},"VGG16",[94,37962,12417],{"class":104},[94,37964,30806],{"class":153},[94,37966,30809],{"class":104},[94,37968,30812],{"class":153},[94,37970,1957],{"class":104},[94,37972,37973],{"class":96,"line":1298},[94,37974,37975],{"class":163},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[94,37977,37978],{"class":96,"line":1310},[94,37979,37980],{"class":163},"        # 这里用的是灰度图\n",[94,37982,37983,37985,37988,37990],{"class":96,"line":1593},[94,37984,30828],{"class":153},[94,37986,37987],{"class":104},".block1",[94,37989,150],{"class":100},[94,37991,37992],{"class":104},"nn.Sequential(\n",[94,37994,37995,37998,38000,38002,38004,38006,38008,38010,38012,38014,38016,38018,38020,38022,38024,38026,38028],{"class":96,"line":1598},[94,37996,37997],{"class":104},"            nn.Conv2d(",[94,37999,30839],{"class":5198},[94,38001,150],{"class":100},[94,38003,322],{"class":153},[94,38005,483],{"class":104},[94,38007,30848],{"class":5198},[94,38009,150],{"class":100},[94,38011,308],{"class":153},[94,38013,483],{"class":104},[94,38015,30857],{"class":5198},[94,38017,150],{"class":100},[94,38019,176],{"class":153},[94,38021,483],{"class":104},[94,38023,30866],{"class":5198},[94,38025,150],{"class":100},[94,38027,322],{"class":153},[94,38029,38030],{"class":104},"),\n",[94,38032,38033],{"class":96,"line":1604},[94,38034,38035],{"class":104},"            nn.ReLU(),\n",[94,38037,38038,38040,38042,38044,38046,38048,38050,38052,38054,38056,38058,38060,38062,38064,38066,38068,38070],{"class":96,"line":1609},[94,38039,37997],{"class":104},[94,38041,30839],{"class":5198},[94,38043,150],{"class":100},[94,38045,308],{"class":153},[94,38047,483],{"class":104},[94,38049,30848],{"class":5198},[94,38051,150],{"class":100},[94,38053,308],{"class":153},[94,38055,483],{"class":104},[94,38057,30857],{"class":5198},[94,38059,150],{"class":100},[94,38061,176],{"class":153},[94,38063,483],{"class":104},[94,38065,30866],{"class":5198},[94,38067,150],{"class":100},[94,38069,322],{"class":153},[94,38071,38030],{"class":104},[94,38073,38074],{"class":96,"line":1623},[94,38075,38035],{"class":104},[94,38077,38078,38081,38083,38085,38087,38089,38091,38093,38095,38097,38099,38101,38103],{"class":96,"line":1628},[94,38079,38080],{"class":104},"            nn.MaxPool2d(",[94,38082,30857],{"class":5198},[94,38084,150],{"class":100},[94,38086,182],{"class":153},[94,38088,483],{"class":104},[94,38090,30912],{"class":5198},[94,38092,150],{"class":100},[94,38094,182],{"class":153},[94,38096,483],{"class":104},[94,38098,30866],{"class":5198},[94,38100,150],{"class":100},[94,38102,296],{"class":153},[94,38104,111],{"class":104},[94,38106,38107],{"class":96,"line":1634},[94,38108,38109],{"class":104},"        )\n",[94,38111,38112],{"class":96,"line":1655},[94,38113,38114],{"class":163},"        # 第二层\n",[94,38116,38117,38119,38122,38124],{"class":96,"line":1660},[94,38118,30828],{"class":153},[94,38120,38121],{"class":104},".block2",[94,38123,150],{"class":100},[94,38125,37992],{"class":104},[94,38127,38128,38130,38132,38134,38136,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156,38158,38160],{"class":96,"line":1674},[94,38129,37997],{"class":104},[94,38131,30839],{"class":5198},[94,38133,150],{"class":100},[94,38135,308],{"class":153},[94,38137,483],{"class":104},[94,38139,30848],{"class":5198},[94,38141,150],{"class":100},[94,38143,32053],{"class":153},[94,38145,483],{"class":104},[94,38147,30857],{"class":5198},[94,38149,150],{"class":100},[94,38151,176],{"class":153},[94,38153,483],{"class":104},[94,38155,30866],{"class":5198},[94,38157,150],{"class":100},[94,38159,322],{"class":153},[94,38161,38030],{"class":104},[94,38163,38164],{"class":96,"line":1679},[94,38165,38035],{"class":104},[94,38167,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196,38198,38200],{"class":96,"line":1708},[94,38169,37997],{"class":104},[94,38171,30839],{"class":5198},[94,38173,150],{"class":100},[94,38175,32053],{"class":153},[94,38177,483],{"class":104},[94,38179,30848],{"class":5198},[94,38181,150],{"class":100},[94,38183,32053],{"class":153},[94,38185,483],{"class":104},[94,38187,30857],{"class":5198},[94,38189,150],{"class":100},[94,38191,176],{"class":153},[94,38193,483],{"class":104},[94,38195,30866],{"class":5198},[94,38197,150],{"class":100},[94,38199,322],{"class":153},[94,38201,38030],{"class":104},[94,38203,38204],{"class":96,"line":1713},[94,38205,38035],{"class":104},[94,38207,38208,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228,38230,38232],{"class":96,"line":1730},[94,38209,38080],{"class":104},[94,38211,30857],{"class":5198},[94,38213,150],{"class":100},[94,38215,182],{"class":153},[94,38217,483],{"class":104},[94,38219,30912],{"class":5198},[94,38221,150],{"class":100},[94,38223,182],{"class":153},[94,38225,483],{"class":104},[94,38227,30866],{"class":5198},[94,38229,150],{"class":100},[94,38231,296],{"class":153},[94,38233,111],{"class":104},[94,38235,38236],{"class":96,"line":1735},[94,38237,38109],{"class":104},[94,38239,38240],{"class":96,"line":1740},[94,38241,38242],{"class":163},"        # 第三层\n",[94,38244,38245,38247,38250,38252],{"class":96,"line":1745},[94,38246,30828],{"class":153},[94,38248,38249],{"class":104},".block3",[94,38251,150],{"class":100},[94,38253,37992],{"class":104},[94,38255,38256,38258,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286,38288],{"class":96,"line":1759},[94,38257,37997],{"class":104},[94,38259,30839],{"class":5198},[94,38261,150],{"class":100},[94,38263,32053],{"class":153},[94,38265,483],{"class":104},[94,38267,30848],{"class":5198},[94,38269,150],{"class":100},[94,38271,34853],{"class":153},[94,38273,483],{"class":104},[94,38275,30857],{"class":5198},[94,38277,150],{"class":100},[94,38279,176],{"class":153},[94,38281,483],{"class":104},[94,38283,30866],{"class":5198},[94,38285,150],{"class":100},[94,38287,322],{"class":153},[94,38289,38030],{"class":104},[94,38291,38292],{"class":96,"line":1764},[94,38293,38035],{"class":104},[94,38295,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318,38320,38322,38324,38326,38328],{"class":96,"line":2558},[94,38297,37997],{"class":104},[94,38299,30839],{"class":5198},[94,38301,150],{"class":100},[94,38303,34853],{"class":153},[94,38305,483],{"class":104},[94,38307,30848],{"class":5198},[94,38309,150],{"class":100},[94,38311,34853],{"class":153},[94,38313,483],{"class":104},[94,38315,30857],{"class":5198},[94,38317,150],{"class":100},[94,38319,176],{"class":153},[94,38321,483],{"class":104},[94,38323,30866],{"class":5198},[94,38325,150],{"class":100},[94,38327,322],{"class":153},[94,38329,38030],{"class":104},[94,38331,38332],{"class":96,"line":2572},[94,38333,38035],{"class":104},[94,38335,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368],{"class":96,"line":2580},[94,38337,37997],{"class":104},[94,38339,30839],{"class":5198},[94,38341,150],{"class":100},[94,38343,34853],{"class":153},[94,38345,483],{"class":104},[94,38347,30848],{"class":5198},[94,38349,150],{"class":100},[94,38351,34853],{"class":153},[94,38353,483],{"class":104},[94,38355,30857],{"class":5198},[94,38357,150],{"class":100},[94,38359,176],{"class":153},[94,38361,483],{"class":104},[94,38363,30866],{"class":5198},[94,38365,150],{"class":100},[94,38367,322],{"class":153},[94,38369,38030],{"class":104},[94,38371,38372],{"class":96,"line":2585},[94,38373,38035],{"class":104},[94,38375,38376,38378,38380,38382,38384,38386,38388,38390,38392,38394,38396,38398,38400],{"class":96,"line":2591},[94,38377,38080],{"class":104},[94,38379,30857],{"class":5198},[94,38381,150],{"class":100},[94,38383,182],{"class":153},[94,38385,483],{"class":104},[94,38387,30912],{"class":5198},[94,38389,150],{"class":100},[94,38391,182],{"class":153},[94,38393,483],{"class":104},[94,38395,30866],{"class":5198},[94,38397,150],{"class":100},[94,38399,296],{"class":153},[94,38401,111],{"class":104},[94,38403,38404],{"class":96,"line":2597},[94,38405,38109],{"class":104},[94,38407,38408],{"class":96,"line":2602},[94,38409,38410],{"class":163},"        # 第四层\n",[94,38412,38413,38415,38418,38420],{"class":96,"line":7930},[94,38414,30828],{"class":153},[94,38416,38417],{"class":104},".block4",[94,38419,150],{"class":100},[94,38421,37992],{"class":104},[94,38423,38424,38426,38428,38430,38432,38434,38436,38438,38441,38443,38445,38447,38449,38451,38453,38455,38457],{"class":96,"line":7954},[94,38425,37997],{"class":104},[94,38427,30839],{"class":5198},[94,38429,150],{"class":100},[94,38431,34853],{"class":153},[94,38433,483],{"class":104},[94,38435,30848],{"class":5198},[94,38437,150],{"class":100},[94,38439,38440],{"class":153},"512",[94,38442,483],{"class":104},[94,38444,30857],{"class":5198},[94,38446,150],{"class":100},[94,38448,176],{"class":153},[94,38450,483],{"class":104},[94,38452,30866],{"class":5198},[94,38454,150],{"class":100},[94,38456,322],{"class":153},[94,38458,38030],{"class":104},[94,38460,38461],{"class":96,"line":7959},[94,38462,38035],{"class":104},[94,38464,38465,38467,38469,38471,38473,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493,38495,38497],{"class":96,"line":7965},[94,38466,37997],{"class":104},[94,38468,30839],{"class":5198},[94,38470,150],{"class":100},[94,38472,38440],{"class":153},[94,38474,483],{"class":104},[94,38476,30848],{"class":5198},[94,38478,150],{"class":100},[94,38480,38440],{"class":153},[94,38482,483],{"class":104},[94,38484,30857],{"class":5198},[94,38486,150],{"class":100},[94,38488,176],{"class":153},[94,38490,483],{"class":104},[94,38492,30866],{"class":5198},[94,38494,150],{"class":100},[94,38496,322],{"class":153},[94,38498,38030],{"class":104},[94,38500,38501],{"class":96,"line":7992},[94,38502,38035],{"class":104},[94,38504,38505,38507,38509,38511,38513,38515,38517,38519,38521,38523,38525,38527,38529,38531,38533,38535,38537],{"class":96,"line":7997},[94,38506,37997],{"class":104},[94,38508,30839],{"class":5198},[94,38510,150],{"class":100},[94,38512,38440],{"class":153},[94,38514,483],{"class":104},[94,38516,30848],{"class":5198},[94,38518,150],{"class":100},[94,38520,38440],{"class":153},[94,38522,483],{"class":104},[94,38524,30857],{"class":5198},[94,38526,150],{"class":100},[94,38528,176],{"class":153},[94,38530,483],{"class":104},[94,38532,30866],{"class":5198},[94,38534,150],{"class":100},[94,38536,322],{"class":153},[94,38538,38030],{"class":104},[94,38540,38541],{"class":96,"line":8003},[94,38542,38035],{"class":104},[94,38544,38545,38547,38549,38551,38553,38555,38557,38559,38561,38563,38565,38567,38569],{"class":96,"line":8015},[94,38546,38080],{"class":104},[94,38548,30857],{"class":5198},[94,38550,150],{"class":100},[94,38552,182],{"class":153},[94,38554,483],{"class":104},[94,38556,30912],{"class":5198},[94,38558,150],{"class":100},[94,38560,182],{"class":153},[94,38562,483],{"class":104},[94,38564,30866],{"class":5198},[94,38566,150],{"class":100},[94,38568,296],{"class":153},[94,38570,111],{"class":104},[94,38572,38573],{"class":96,"line":8027},[94,38574,38109],{"class":104},[94,38576,38577],{"class":96,"line":8039},[94,38578,38579],{"class":163},"        # 第五层\n",[94,38581,38582,38584,38587,38589],{"class":96,"line":9698},[94,38583,30828],{"class":153},[94,38585,38586],{"class":104},".block5",[94,38588,150],{"class":100},[94,38590,37992],{"class":104},[94,38592,38593,38595,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625],{"class":96,"line":9723},[94,38594,37997],{"class":104},[94,38596,30839],{"class":5198},[94,38598,150],{"class":100},[94,38600,38440],{"class":153},[94,38602,483],{"class":104},[94,38604,30848],{"class":5198},[94,38606,150],{"class":100},[94,38608,38440],{"class":153},[94,38610,483],{"class":104},[94,38612,30857],{"class":5198},[94,38614,150],{"class":100},[94,38616,176],{"class":153},[94,38618,483],{"class":104},[94,38620,30866],{"class":5198},[94,38622,150],{"class":100},[94,38624,322],{"class":153},[94,38626,38030],{"class":104},[94,38628,38629],{"class":96,"line":9746},[94,38630,38035],{"class":104},[94,38632,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665],{"class":96,"line":9770},[94,38634,37997],{"class":104},[94,38636,30839],{"class":5198},[94,38638,150],{"class":100},[94,38640,38440],{"class":153},[94,38642,483],{"class":104},[94,38644,30848],{"class":5198},[94,38646,150],{"class":100},[94,38648,38440],{"class":153},[94,38650,483],{"class":104},[94,38652,30857],{"class":5198},[94,38654,150],{"class":100},[94,38656,176],{"class":153},[94,38658,483],{"class":104},[94,38660,30866],{"class":5198},[94,38662,150],{"class":100},[94,38664,322],{"class":153},[94,38666,38030],{"class":104},[94,38668,38669],{"class":96,"line":9775},[94,38670,38035],{"class":104},[94,38672,38673,38675,38677,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705],{"class":96,"line":9780},[94,38674,37997],{"class":104},[94,38676,30839],{"class":5198},[94,38678,150],{"class":100},[94,38680,38440],{"class":153},[94,38682,483],{"class":104},[94,38684,30848],{"class":5198},[94,38686,150],{"class":100},[94,38688,38440],{"class":153},[94,38690,483],{"class":104},[94,38692,30857],{"class":5198},[94,38694,150],{"class":100},[94,38696,176],{"class":153},[94,38698,483],{"class":104},[94,38700,30866],{"class":5198},[94,38702,150],{"class":100},[94,38704,322],{"class":153},[94,38706,38030],{"class":104},[94,38708,38709],{"class":96,"line":9785},[94,38710,38035],{"class":104},[94,38712,38713,38715,38717,38719,38721,38723,38725,38727,38729,38731,38733,38735,38737],{"class":96,"line":9794},[94,38714,38080],{"class":104},[94,38716,30857],{"class":5198},[94,38718,150],{"class":100},[94,38720,182],{"class":153},[94,38722,483],{"class":104},[94,38724,30912],{"class":5198},[94,38726,150],{"class":100},[94,38728,182],{"class":153},[94,38730,483],{"class":104},[94,38732,30866],{"class":5198},[94,38734,150],{"class":100},[94,38736,296],{"class":153},[94,38738,111],{"class":104},[94,38740,38741],{"class":96,"line":9799},[94,38742,38109],{"class":104},[94,38744,38745],{"class":96,"line":9805},[94,38746,38747],{"class":163},"        # 全连接层\n",[94,38749,38750,38752,38755,38757],{"class":96,"line":9826},[94,38751,30828],{"class":153},[94,38753,38754],{"class":104},".block6",[94,38756,150],{"class":100},[94,38758,37992],{"class":104},[94,38760,38761],{"class":96,"line":9832},[94,38762,38763],{"class":163},"            # 平展操作\n",[94,38765,38766],{"class":96,"line":9846},[94,38767,38768],{"class":163},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[94,38770,38771],{"class":96,"line":9852},[94,38772,38773],{"class":104},"            nn.Flatten(),\n",[94,38775,38776,38779,38781,38783,38785,38787,38789,38791,38793],{"class":96,"line":9879},[94,38777,38778],{"class":104},"            nn.Linear(",[94,38780,474],{"class":153},[94,38782,560],{"class":100},[94,38784,474],{"class":153},[94,38786,560],{"class":100},[94,38788,38440],{"class":153},[94,38790,483],{"class":104},[94,38792,34853],{"class":153},[94,38794,38030],{"class":104},[94,38796,38797],{"class":96,"line":9888},[94,38798,38035],{"class":104},[94,38800,38801,38803,38805,38807,38809],{"class":96,"line":9894},[94,38802,38778],{"class":104},[94,38804,34853],{"class":153},[94,38806,483],{"class":104},[94,38808,32053],{"class":153},[94,38810,38030],{"class":104},[94,38812,38813],{"class":96,"line":9902},[94,38814,38035],{"class":104},[94,38816,38817,38819,38821,38823,38825],{"class":96,"line":9907},[94,38818,38778],{"class":104},[94,38820,32053],{"class":153},[94,38822,483],{"class":104},[94,38824,551],{"class":153},[94,38826,111],{"class":104},[94,38828,38829],{"class":96,"line":16586},[94,38830,38109],{"class":104},[94,38832,38833],{"class":96,"line":16592},[94,38834,2381],{"emptyLinePlaceholder":20},[94,38836,38837],{"class":96,"line":16615},[94,38838,38839],{"class":163},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[94,38841,38842],{"class":96,"line":16621},[94,38843,38844],{"class":163},"        # 循环遍历模型\n",[94,38846,38847,38849,38852,38854,38857],{"class":96,"line":16644},[94,38848,3384],{"class":100},[94,38850,38851],{"class":104}," m ",[94,38853,26026],{"class":100},[94,38855,38856],{"class":153}," self",[94,38858,38859],{"class":104},".modules():\n",[94,38861,38862],{"class":96,"line":16658},[94,38863,38864],{"class":163},"            # print(m)\n",[94,38866,38867,38869,38872],{"class":96,"line":16678},[94,38868,4623],{"class":100},[94,38870,38871],{"class":153}," isinstance",[94,38873,38874],{"class":104},"(m,nn.Conv2d):\n",[94,38876,38877],{"class":96,"line":16684},[94,38878,38879],{"class":163},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[94,38881,38882,38885,38888,38890,38893],{"class":96,"line":16695},[94,38883,38884],{"class":104},"                nn.init.kaiming_normal_(m.weight,",[94,38886,38887],{"class":5198},"nonlinearity",[94,38889,150],{"class":100},[94,38891,38892],{"class":209},"'relu'",[94,38894,111],{"class":104},[94,38896,38897],{"class":96,"line":16718},[94,38898,38899],{"class":163},"                # 判断b参数是否存在\n",[94,38901,38902,38905,38908,38911,38914,38917],{"class":96,"line":16740},[94,38903,38904],{"class":100},"                if",[94,38906,38907],{"class":104}," m.bias ",[94,38909,38910],{"class":100},"is",[94,38912,38913],{"class":100}," not",[94,38915,38916],{"class":153}," None",[94,38918,3720],{"class":104},[94,38920,38921],{"class":96,"line":16745},[94,38922,38923],{"class":163},"                    # 如果参数不存在的化初始化b=0\n",[94,38925,38926,38929,38931],{"class":96,"line":16751},[94,38927,38928],{"class":104},"                    nn.init.constant_(m.bias,",[94,38930,296],{"class":153},[94,38932,111],{"class":104},[94,38934,38935],{"class":96,"line":16765},[94,38936,38937],{"class":163},"            # 全连接层初始化\n",[94,38939,38940,38943,38945],{"class":96,"line":16778},[94,38941,38942],{"class":100},"            elif",[94,38944,38871],{"class":153},[94,38946,38947],{"class":104},"(m,nn.Linear):\n",[94,38949,38950],{"class":96,"line":16783},[94,38951,38952],{"class":163},"                # 这个初始化方法是利用的是正太分布的方式\n",[94,38954,38955],{"class":96,"line":16797},[94,38956,38957],{"class":163},"                # 均值为0，方差为0.01\n",[94,38959,38960,38963,38965,38967,38970],{"class":96,"line":16802},[94,38961,38962],{"class":104},"                nn.init.normal_(m.weight,",[94,38964,296],{"class":153},[94,38966,483],{"class":104},[94,38968,38969],{"class":153},"0.01",[94,38971,111],{"class":104},[94,38973,38974],{"class":96,"line":16808},[94,38975,38976],{"class":163},"                # 初始化b参数\n",[94,38978,38979,38981,38983,38985,38987,38989],{"class":96,"line":16813},[94,38980,38904],{"class":100},[94,38982,38907],{"class":104},[94,38984,38910],{"class":100},[94,38986,38913],{"class":100},[94,38988,38916],{"class":153},[94,38990,3720],{"class":104},[94,38992,38993,38995,38997],{"class":96,"line":16827},[94,38994,38928],{"class":104},[94,38996,296],{"class":153},[94,38998,111],{"class":104},[94,39000,39001],{"class":96,"line":16832},[94,39002,2381],{"emptyLinePlaceholder":20},[94,39004,39005],{"class":96,"line":16837},[94,39006,35148],{"class":163},[94,39008,39009,39011,39013],{"class":96,"line":16851},[94,39010,30784],{"class":100},[94,39012,31076],{"class":1944},[94,39014,31079],{"class":104},[94,39016,39017,39019,39021,39023],{"class":96,"line":16863},[94,39018,31084],{"class":104},[94,39020,150],{"class":100},[94,39022,30806],{"class":153},[94,39024,39025],{"class":104},".block1(x)\n",[94,39027,39028,39030,39032,39034],{"class":96,"line":16868},[94,39029,31084],{"class":104},[94,39031,150],{"class":100},[94,39033,30806],{"class":153},[94,39035,39036],{"class":104},".block2(x)\n",[94,39038,39039,39041,39043,39045],{"class":96,"line":16881},[94,39040,31084],{"class":104},[94,39042,150],{"class":100},[94,39044,30806],{"class":153},[94,39046,39047],{"class":104},".block3(x)\n",[94,39049,39050,39052,39054,39056],{"class":96,"line":16886},[94,39051,31084],{"class":104},[94,39053,150],{"class":100},[94,39055,30806],{"class":153},[94,39057,39058],{"class":104},".block4(x)\n",[94,39060,39061,39063,39065,39067],{"class":96,"line":16891},[94,39062,31084],{"class":104},[94,39064,150],{"class":100},[94,39066,30806],{"class":153},[94,39068,39069],{"class":104},".block5(x)\n",[94,39071,39072,39074,39076,39078],{"class":96,"line":16896},[94,39073,31084],{"class":104},[94,39075,150],{"class":100},[94,39077,30806],{"class":153},[94,39079,39080],{"class":104},".block6(x)\n",[94,39082,39083,39085],{"class":96,"line":16909},[94,39084,14734],{"class":100},[94,39086,31192],{"class":104},[94,39088,39089],{"class":96,"line":16914},[94,39090,2381],{"emptyLinePlaceholder":20},[94,39092,39093],{"class":96,"line":32616},[94,39094,39095],{"class":163},"# 验证模型\n",[94,39097,39098,39100,39102,39104,39107],{"class":96,"line":32622},[94,39099,1512],{"class":100},[94,39101,31203],{"class":153},[94,39103,2930],{"class":100},[94,39105,39106],{"class":209},"'__main__'",[94,39108,3720],{"class":104},[94,39110,39111,39113,39115,39117,39119,39121,39123,39125,39127],{"class":96,"line":32628},[94,39112,31220],{"class":104},[94,39114,150],{"class":100},[94,39116,30434],{"class":104},[94,39118,31227],{"class":209},[94,39120,1685],{"class":100},[94,39122,31232],{"class":104},[94,39124,1682],{"class":100},[94,39126,30459],{"class":209},[94,39128,111],{"class":104},[94,39130,39131,39133],{"class":96,"line":32634},[94,39132,31282],{"class":153},[94,39134,30468],{"class":104},[94,39136,39137,39139,39141],{"class":96,"line":32640},[94,39138,31272],{"class":104},[94,39140,150],{"class":100},[94,39142,39143],{"class":104},"VGG16().to(device)\n",[94,39145,39146,39148,39150,39152,39154,39156,39158,39160],{"class":96,"line":32651},[94,39147,31282],{"class":153},[94,39149,31285],{"class":104},[94,39151,322],{"class":153},[94,39153,483],{"class":104},[94,39155,31484],{"class":153},[94,39157,483],{"class":104},[94,39159,31484],{"class":153},[94,39161,31298],{"class":104},[48,39163,39164],{"start":15},[51,39165,39166],{},"训练代码",[40,39168,39169],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[40,39171,39172],{},"解决方式:",[40,39174,39175],{},"①权重初始化",[85,39177,39179],{"className":30361,"code":39178,"language":30363,"meta":14,"style":14},"# 权重初始化,保证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",[91,39180,39181,39186,39191,39203,39208,39216,39221,39234,39239,39253,39258,39267,39272,39281,39286,39291,39304,39309,39323],{"__ignoreMap":14},[94,39182,39183],{"class":96,"line":97},[94,39184,39185],{"class":163},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[94,39187,39188],{"class":96,"line":15},[94,39189,39190],{"class":163},"# 循环遍历模型\n",[94,39192,39193,39195,39197,39199,39201],{"class":96,"line":1160},[94,39194,3006],{"class":100},[94,39196,38851],{"class":104},[94,39198,26026],{"class":100},[94,39200,38856],{"class":153},[94,39202,38859],{"class":104},[94,39204,39205],{"class":96,"line":1175},[94,39206,39207],{"class":163},"    # print(m)\n",[94,39209,39210,39212,39214],{"class":96,"line":1181},[94,39211,3082],{"class":100},[94,39213,38871],{"class":153},[94,39215,38874],{"class":104},[94,39217,39218],{"class":96,"line":1195},[94,39219,39220],{"class":163},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[94,39222,39223,39226,39228,39230,39232],{"class":96,"line":1201},[94,39224,39225],{"class":104},"        nn.init.kaiming_normal_(m.weight,",[94,39227,38887],{"class":5198},[94,39229,150],{"class":100},[94,39231,38892],{"class":209},[94,39233,111],{"class":104},[94,39235,39236],{"class":96,"line":1292},[94,39237,39238],{"class":163},"        # 判断b参数是否存在\n",[94,39240,39241,39243,39245,39247,39249,39251],{"class":96,"line":1298},[94,39242,2478],{"class":100},[94,39244,38907],{"class":104},[94,39246,38910],{"class":100},[94,39248,38913],{"class":100},[94,39250,38916],{"class":153},[94,39252,3720],{"class":104},[94,39254,39255],{"class":96,"line":1310},[94,39256,39257],{"class":163},"            # 如果参数不存在的化初始化b=0\n",[94,39259,39260,39263,39265],{"class":96,"line":1593},[94,39261,39262],{"class":104},"            nn.init.constant_(m.bias,",[94,39264,296],{"class":153},[94,39266,111],{"class":104},[94,39268,39269],{"class":96,"line":1598},[94,39270,39271],{"class":163},"    # 全连接层初始化\n",[94,39273,39274,39277,39279],{"class":96,"line":1604},[94,39275,39276],{"class":100},"    elif",[94,39278,38871],{"class":153},[94,39280,38947],{"class":104},[94,39282,39283],{"class":96,"line":1609},[94,39284,39285],{"class":163},"        # 这个初始化方法是利用的是正太分布的方式\n",[94,39287,39288],{"class":96,"line":1623},[94,39289,39290],{"class":163},"        # 均值为0，方差为0.01\n",[94,39292,39293,39296,39298,39300,39302],{"class":96,"line":1628},[94,39294,39295],{"class":104},"        nn.init.normal_(m.weight,",[94,39297,296],{"class":153},[94,39299,483],{"class":104},[94,39301,38969],{"class":153},[94,39303,111],{"class":104},[94,39305,39306],{"class":96,"line":1634},[94,39307,39308],{"class":163},"        # 初始化b参数\n",[94,39310,39311,39313,39315,39317,39319,39321],{"class":96,"line":1655},[94,39312,2478],{"class":100},[94,39314,38907],{"class":104},[94,39316,38910],{"class":100},[94,39318,38913],{"class":100},[94,39320,38916],{"class":153},[94,39322,3720],{"class":104},[94,39324,39325,39327,39329],{"class":96,"line":1660},[94,39326,39262],{"class":104},[94,39328,296],{"class":153},[94,39330,111],{"class":104},[40,39332,39333],{},"②尽可能地增加批次",[40,39335,39336],{},"训练完整代码：",[85,39338,39339],{"className":30361,"code":37882,"language":30363,"meta":14,"style":14},[91,39340,39341,39347,39357,39367,39377,39381,39397,39405,39423,39427,39431,39441,39477,39481,39517,39521,39549,39553,39557,39567,39603,39607,39643,39647,39675,39679,39683,39693,39729,39733,39769,39773,39809,39813,39841,39845,39849,39859,39895,39899,39935,39939,39975,39979,40007,40011,40015,40025,40061,40065,40101,40105,40141,40145,40173,40177,40181,40191,40195,40199,40203,40223,40227,40239,40243,40255,40259,40263,40267,40271,40283,40287,40295,40299,40311,40315,40329,40333,40341,40345,40353,40357,40361,40373,40377,40391,40399,40403,40407,40415,40425,40435,40445,40455,40465,40475,40481,40485,40489,40501,40521,40527,40535],{"__ignoreMap":14},[94,39342,39343,39345],{"class":96,"line":97},[94,39344,30375],{"class":100},[94,39346,30378],{"class":104},[94,39348,39349,39351,39353,39355],{"class":96,"line":15},[94,39350,30720],{"class":100},[94,39352,37897],{"class":104},[94,39354,30375],{"class":100},[94,39356,37902],{"class":104},[94,39358,39359,39361,39363,39365],{"class":96,"line":1160},[94,39360,30720],{"class":100},[94,39362,30723],{"class":104},[94,39364,30375],{"class":100},[94,39366,30728],{"class":104},[94,39368,39369,39371,39373,39375],{"class":96,"line":1175},[94,39370,30720],{"class":100},[94,39372,30740],{"class":104},[94,39374,30375],{"class":100},[94,39376,30745],{"class":104},[94,39378,39379],{"class":96,"line":1181},[94,39380,2381],{"emptyLinePlaceholder":20},[94,39382,39383,39385,39387,39389,39391,39393,39395],{"class":96,"line":1195},[94,39384,14676],{"class":100},[94,39386,37933],{"class":1944},[94,39388,105],{"class":104},[94,39390,30761],{"class":1944},[94,39392,663],{"class":104},[94,39394,30766],{"class":1944},[94,39396,30769],{"class":104},[94,39398,39399,39401,39403],{"class":96,"line":1201},[94,39400,30784],{"class":100},[94,39402,30787],{"class":153},[94,39404,30790],{"class":104},[94,39406,39407,39409,39411,39413,39415,39417,39419,39421],{"class":96,"line":1292},[94,39408,30800],{"class":153},[94,39410,105],{"class":104},[94,39412,37960],{"class":153},[94,39414,12417],{"class":104},[94,39416,30806],{"class":153},[94,39418,30809],{"class":104},[94,39420,30812],{"class":153},[94,39422,1957],{"class":104},[94,39424,39425],{"class":96,"line":1298},[94,39426,37975],{"class":163},[94,39428,39429],{"class":96,"line":1310},[94,39430,37980],{"class":163},[94,39432,39433,39435,39437,39439],{"class":96,"line":1593},[94,39434,30828],{"class":153},[94,39436,37987],{"class":104},[94,39438,150],{"class":100},[94,39440,37992],{"class":104},[94,39442,39443,39445,39447,39449,39451,39453,39455,39457,39459,39461,39463,39465,39467,39469,39471,39473,39475],{"class":96,"line":1598},[94,39444,37997],{"class":104},[94,39446,30839],{"class":5198},[94,39448,150],{"class":100},[94,39450,322],{"class":153},[94,39452,483],{"class":104},[94,39454,30848],{"class":5198},[94,39456,150],{"class":100},[94,39458,308],{"class":153},[94,39460,483],{"class":104},[94,39462,30857],{"class":5198},[94,39464,150],{"class":100},[94,39466,176],{"class":153},[94,39468,483],{"class":104},[94,39470,30866],{"class":5198},[94,39472,150],{"class":100},[94,39474,322],{"class":153},[94,39476,38030],{"class":104},[94,39478,39479],{"class":96,"line":1604},[94,39480,38035],{"class":104},[94,39482,39483,39485,39487,39489,39491,39493,39495,39497,39499,39501,39503,39505,39507,39509,39511,39513,39515],{"class":96,"line":1609},[94,39484,37997],{"class":104},[94,39486,30839],{"class":5198},[94,39488,150],{"class":100},[94,39490,308],{"class":153},[94,39492,483],{"class":104},[94,39494,30848],{"class":5198},[94,39496,150],{"class":100},[94,39498,308],{"class":153},[94,39500,483],{"class":104},[94,39502,30857],{"class":5198},[94,39504,150],{"class":100},[94,39506,176],{"class":153},[94,39508,483],{"class":104},[94,39510,30866],{"class":5198},[94,39512,150],{"class":100},[94,39514,322],{"class":153},[94,39516,38030],{"class":104},[94,39518,39519],{"class":96,"line":1623},[94,39520,38035],{"class":104},[94,39522,39523,39525,39527,39529,39531,39533,39535,39537,39539,39541,39543,39545,39547],{"class":96,"line":1628},[94,39524,38080],{"class":104},[94,39526,30857],{"class":5198},[94,39528,150],{"class":100},[94,39530,182],{"class":153},[94,39532,483],{"class":104},[94,39534,30912],{"class":5198},[94,39536,150],{"class":100},[94,39538,182],{"class":153},[94,39540,483],{"class":104},[94,39542,30866],{"class":5198},[94,39544,150],{"class":100},[94,39546,296],{"class":153},[94,39548,111],{"class":104},[94,39550,39551],{"class":96,"line":1634},[94,39552,38109],{"class":104},[94,39554,39555],{"class":96,"line":1655},[94,39556,38114],{"class":163},[94,39558,39559,39561,39563,39565],{"class":96,"line":1660},[94,39560,30828],{"class":153},[94,39562,38121],{"class":104},[94,39564,150],{"class":100},[94,39566,37992],{"class":104},[94,39568,39569,39571,39573,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599,39601],{"class":96,"line":1674},[94,39570,37997],{"class":104},[94,39572,30839],{"class":5198},[94,39574,150],{"class":100},[94,39576,308],{"class":153},[94,39578,483],{"class":104},[94,39580,30848],{"class":5198},[94,39582,150],{"class":100},[94,39584,32053],{"class":153},[94,39586,483],{"class":104},[94,39588,30857],{"class":5198},[94,39590,150],{"class":100},[94,39592,176],{"class":153},[94,39594,483],{"class":104},[94,39596,30866],{"class":5198},[94,39598,150],{"class":100},[94,39600,322],{"class":153},[94,39602,38030],{"class":104},[94,39604,39605],{"class":96,"line":1679},[94,39606,38035],{"class":104},[94,39608,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639,39641],{"class":96,"line":1708},[94,39610,37997],{"class":104},[94,39612,30839],{"class":5198},[94,39614,150],{"class":100},[94,39616,32053],{"class":153},[94,39618,483],{"class":104},[94,39620,30848],{"class":5198},[94,39622,150],{"class":100},[94,39624,32053],{"class":153},[94,39626,483],{"class":104},[94,39628,30857],{"class":5198},[94,39630,150],{"class":100},[94,39632,176],{"class":153},[94,39634,483],{"class":104},[94,39636,30866],{"class":5198},[94,39638,150],{"class":100},[94,39640,322],{"class":153},[94,39642,38030],{"class":104},[94,39644,39645],{"class":96,"line":1713},[94,39646,38035],{"class":104},[94,39648,39649,39651,39653,39655,39657,39659,39661,39663,39665,39667,39669,39671,39673],{"class":96,"line":1730},[94,39650,38080],{"class":104},[94,39652,30857],{"class":5198},[94,39654,150],{"class":100},[94,39656,182],{"class":153},[94,39658,483],{"class":104},[94,39660,30912],{"class":5198},[94,39662,150],{"class":100},[94,39664,182],{"class":153},[94,39666,483],{"class":104},[94,39668,30866],{"class":5198},[94,39670,150],{"class":100},[94,39672,296],{"class":153},[94,39674,111],{"class":104},[94,39676,39677],{"class":96,"line":1735},[94,39678,38109],{"class":104},[94,39680,39681],{"class":96,"line":1740},[94,39682,38242],{"class":163},[94,39684,39685,39687,39689,39691],{"class":96,"line":1745},[94,39686,30828],{"class":153},[94,39688,38249],{"class":104},[94,39690,150],{"class":100},[94,39692,37992],{"class":104},[94,39694,39695,39697,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727],{"class":96,"line":1759},[94,39696,37997],{"class":104},[94,39698,30839],{"class":5198},[94,39700,150],{"class":100},[94,39702,32053],{"class":153},[94,39704,483],{"class":104},[94,39706,30848],{"class":5198},[94,39708,150],{"class":100},[94,39710,34853],{"class":153},[94,39712,483],{"class":104},[94,39714,30857],{"class":5198},[94,39716,150],{"class":100},[94,39718,176],{"class":153},[94,39720,483],{"class":104},[94,39722,30866],{"class":5198},[94,39724,150],{"class":100},[94,39726,322],{"class":153},[94,39728,38030],{"class":104},[94,39730,39731],{"class":96,"line":1764},[94,39732,38035],{"class":104},[94,39734,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767],{"class":96,"line":2558},[94,39736,37997],{"class":104},[94,39738,30839],{"class":5198},[94,39740,150],{"class":100},[94,39742,34853],{"class":153},[94,39744,483],{"class":104},[94,39746,30848],{"class":5198},[94,39748,150],{"class":100},[94,39750,34853],{"class":153},[94,39752,483],{"class":104},[94,39754,30857],{"class":5198},[94,39756,150],{"class":100},[94,39758,176],{"class":153},[94,39760,483],{"class":104},[94,39762,30866],{"class":5198},[94,39764,150],{"class":100},[94,39766,322],{"class":153},[94,39768,38030],{"class":104},[94,39770,39771],{"class":96,"line":2572},[94,39772,38035],{"class":104},[94,39774,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807],{"class":96,"line":2580},[94,39776,37997],{"class":104},[94,39778,30839],{"class":5198},[94,39780,150],{"class":100},[94,39782,34853],{"class":153},[94,39784,483],{"class":104},[94,39786,30848],{"class":5198},[94,39788,150],{"class":100},[94,39790,34853],{"class":153},[94,39792,483],{"class":104},[94,39794,30857],{"class":5198},[94,39796,150],{"class":100},[94,39798,176],{"class":153},[94,39800,483],{"class":104},[94,39802,30866],{"class":5198},[94,39804,150],{"class":100},[94,39806,322],{"class":153},[94,39808,38030],{"class":104},[94,39810,39811],{"class":96,"line":2585},[94,39812,38035],{"class":104},[94,39814,39815,39817,39819,39821,39823,39825,39827,39829,39831,39833,39835,39837,39839],{"class":96,"line":2591},[94,39816,38080],{"class":104},[94,39818,30857],{"class":5198},[94,39820,150],{"class":100},[94,39822,182],{"class":153},[94,39824,483],{"class":104},[94,39826,30912],{"class":5198},[94,39828,150],{"class":100},[94,39830,182],{"class":153},[94,39832,483],{"class":104},[94,39834,30866],{"class":5198},[94,39836,150],{"class":100},[94,39838,296],{"class":153},[94,39840,111],{"class":104},[94,39842,39843],{"class":96,"line":2597},[94,39844,38109],{"class":104},[94,39846,39847],{"class":96,"line":2602},[94,39848,38410],{"class":163},[94,39850,39851,39853,39855,39857],{"class":96,"line":7930},[94,39852,30828],{"class":153},[94,39854,38417],{"class":104},[94,39856,150],{"class":100},[94,39858,37992],{"class":104},[94,39860,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893],{"class":96,"line":7954},[94,39862,37997],{"class":104},[94,39864,30839],{"class":5198},[94,39866,150],{"class":100},[94,39868,34853],{"class":153},[94,39870,483],{"class":104},[94,39872,30848],{"class":5198},[94,39874,150],{"class":100},[94,39876,38440],{"class":153},[94,39878,483],{"class":104},[94,39880,30857],{"class":5198},[94,39882,150],{"class":100},[94,39884,176],{"class":153},[94,39886,483],{"class":104},[94,39888,30866],{"class":5198},[94,39890,150],{"class":100},[94,39892,322],{"class":153},[94,39894,38030],{"class":104},[94,39896,39897],{"class":96,"line":7959},[94,39898,38035],{"class":104},[94,39900,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933],{"class":96,"line":7965},[94,39902,37997],{"class":104},[94,39904,30839],{"class":5198},[94,39906,150],{"class":100},[94,39908,38440],{"class":153},[94,39910,483],{"class":104},[94,39912,30848],{"class":5198},[94,39914,150],{"class":100},[94,39916,38440],{"class":153},[94,39918,483],{"class":104},[94,39920,30857],{"class":5198},[94,39922,150],{"class":100},[94,39924,176],{"class":153},[94,39926,483],{"class":104},[94,39928,30866],{"class":5198},[94,39930,150],{"class":100},[94,39932,322],{"class":153},[94,39934,38030],{"class":104},[94,39936,39937],{"class":96,"line":7992},[94,39938,38035],{"class":104},[94,39940,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973],{"class":96,"line":7997},[94,39942,37997],{"class":104},[94,39944,30839],{"class":5198},[94,39946,150],{"class":100},[94,39948,38440],{"class":153},[94,39950,483],{"class":104},[94,39952,30848],{"class":5198},[94,39954,150],{"class":100},[94,39956,38440],{"class":153},[94,39958,483],{"class":104},[94,39960,30857],{"class":5198},[94,39962,150],{"class":100},[94,39964,176],{"class":153},[94,39966,483],{"class":104},[94,39968,30866],{"class":5198},[94,39970,150],{"class":100},[94,39972,322],{"class":153},[94,39974,38030],{"class":104},[94,39976,39977],{"class":96,"line":8003},[94,39978,38035],{"class":104},[94,39980,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005],{"class":96,"line":8015},[94,39982,38080],{"class":104},[94,39984,30857],{"class":5198},[94,39986,150],{"class":100},[94,39988,182],{"class":153},[94,39990,483],{"class":104},[94,39992,30912],{"class":5198},[94,39994,150],{"class":100},[94,39996,182],{"class":153},[94,39998,483],{"class":104},[94,40000,30866],{"class":5198},[94,40002,150],{"class":100},[94,40004,296],{"class":153},[94,40006,111],{"class":104},[94,40008,40009],{"class":96,"line":8027},[94,40010,38109],{"class":104},[94,40012,40013],{"class":96,"line":8039},[94,40014,38579],{"class":163},[94,40016,40017,40019,40021,40023],{"class":96,"line":9698},[94,40018,30828],{"class":153},[94,40020,38586],{"class":104},[94,40022,150],{"class":100},[94,40024,37992],{"class":104},[94,40026,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059],{"class":96,"line":9723},[94,40028,37997],{"class":104},[94,40030,30839],{"class":5198},[94,40032,150],{"class":100},[94,40034,38440],{"class":153},[94,40036,483],{"class":104},[94,40038,30848],{"class":5198},[94,40040,150],{"class":100},[94,40042,38440],{"class":153},[94,40044,483],{"class":104},[94,40046,30857],{"class":5198},[94,40048,150],{"class":100},[94,40050,176],{"class":153},[94,40052,483],{"class":104},[94,40054,30866],{"class":5198},[94,40056,150],{"class":100},[94,40058,322],{"class":153},[94,40060,38030],{"class":104},[94,40062,40063],{"class":96,"line":9746},[94,40064,38035],{"class":104},[94,40066,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099],{"class":96,"line":9770},[94,40068,37997],{"class":104},[94,40070,30839],{"class":5198},[94,40072,150],{"class":100},[94,40074,38440],{"class":153},[94,40076,483],{"class":104},[94,40078,30848],{"class":5198},[94,40080,150],{"class":100},[94,40082,38440],{"class":153},[94,40084,483],{"class":104},[94,40086,30857],{"class":5198},[94,40088,150],{"class":100},[94,40090,176],{"class":153},[94,40092,483],{"class":104},[94,40094,30866],{"class":5198},[94,40096,150],{"class":100},[94,40098,322],{"class":153},[94,40100,38030],{"class":104},[94,40102,40103],{"class":96,"line":9775},[94,40104,38035],{"class":104},[94,40106,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139],{"class":96,"line":9780},[94,40108,37997],{"class":104},[94,40110,30839],{"class":5198},[94,40112,150],{"class":100},[94,40114,38440],{"class":153},[94,40116,483],{"class":104},[94,40118,30848],{"class":5198},[94,40120,150],{"class":100},[94,40122,38440],{"class":153},[94,40124,483],{"class":104},[94,40126,30857],{"class":5198},[94,40128,150],{"class":100},[94,40130,176],{"class":153},[94,40132,483],{"class":104},[94,40134,30866],{"class":5198},[94,40136,150],{"class":100},[94,40138,322],{"class":153},[94,40140,38030],{"class":104},[94,40142,40143],{"class":96,"line":9785},[94,40144,38035],{"class":104},[94,40146,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167,40169,40171],{"class":96,"line":9794},[94,40148,38080],{"class":104},[94,40150,30857],{"class":5198},[94,40152,150],{"class":100},[94,40154,182],{"class":153},[94,40156,483],{"class":104},[94,40158,30912],{"class":5198},[94,40160,150],{"class":100},[94,40162,182],{"class":153},[94,40164,483],{"class":104},[94,40166,30866],{"class":5198},[94,40168,150],{"class":100},[94,40170,296],{"class":153},[94,40172,111],{"class":104},[94,40174,40175],{"class":96,"line":9799},[94,40176,38109],{"class":104},[94,40178,40179],{"class":96,"line":9805},[94,40180,38747],{"class":163},[94,40182,40183,40185,40187,40189],{"class":96,"line":9826},[94,40184,30828],{"class":153},[94,40186,38754],{"class":104},[94,40188,150],{"class":100},[94,40190,37992],{"class":104},[94,40192,40193],{"class":96,"line":9832},[94,40194,38763],{"class":163},[94,40196,40197],{"class":96,"line":9846},[94,40198,38768],{"class":163},[94,40200,40201],{"class":96,"line":9852},[94,40202,38773],{"class":104},[94,40204,40205,40207,40209,40211,40213,40215,40217,40219,40221],{"class":96,"line":9879},[94,40206,38778],{"class":104},[94,40208,474],{"class":153},[94,40210,560],{"class":100},[94,40212,474],{"class":153},[94,40214,560],{"class":100},[94,40216,38440],{"class":153},[94,40218,483],{"class":104},[94,40220,34853],{"class":153},[94,40222,38030],{"class":104},[94,40224,40225],{"class":96,"line":9888},[94,40226,38035],{"class":104},[94,40228,40229,40231,40233,40235,40237],{"class":96,"line":9894},[94,40230,38778],{"class":104},[94,40232,34853],{"class":153},[94,40234,483],{"class":104},[94,40236,32053],{"class":153},[94,40238,38030],{"class":104},[94,40240,40241],{"class":96,"line":9902},[94,40242,38035],{"class":104},[94,40244,40245,40247,40249,40251,40253],{"class":96,"line":9907},[94,40246,38778],{"class":104},[94,40248,32053],{"class":153},[94,40250,483],{"class":104},[94,40252,551],{"class":153},[94,40254,111],{"class":104},[94,40256,40257],{"class":96,"line":16586},[94,40258,38109],{"class":104},[94,40260,40261],{"class":96,"line":16592},[94,40262,2381],{"emptyLinePlaceholder":20},[94,40264,40265],{"class":96,"line":16615},[94,40266,38839],{"class":163},[94,40268,40269],{"class":96,"line":16621},[94,40270,38844],{"class":163},[94,40272,40273,40275,40277,40279,40281],{"class":96,"line":16644},[94,40274,3384],{"class":100},[94,40276,38851],{"class":104},[94,40278,26026],{"class":100},[94,40280,38856],{"class":153},[94,40282,38859],{"class":104},[94,40284,40285],{"class":96,"line":16658},[94,40286,38864],{"class":163},[94,40288,40289,40291,40293],{"class":96,"line":16678},[94,40290,4623],{"class":100},[94,40292,38871],{"class":153},[94,40294,38874],{"class":104},[94,40296,40297],{"class":96,"line":16684},[94,40298,38879],{"class":163},[94,40300,40301,40303,40305,40307,40309],{"class":96,"line":16695},[94,40302,38884],{"class":104},[94,40304,38887],{"class":5198},[94,40306,150],{"class":100},[94,40308,38892],{"class":209},[94,40310,111],{"class":104},[94,40312,40313],{"class":96,"line":16718},[94,40314,38899],{"class":163},[94,40316,40317,40319,40321,40323,40325,40327],{"class":96,"line":16740},[94,40318,38904],{"class":100},[94,40320,38907],{"class":104},[94,40322,38910],{"class":100},[94,40324,38913],{"class":100},[94,40326,38916],{"class":153},[94,40328,3720],{"class":104},[94,40330,40331],{"class":96,"line":16745},[94,40332,38923],{"class":163},[94,40334,40335,40337,40339],{"class":96,"line":16751},[94,40336,38928],{"class":104},[94,40338,296],{"class":153},[94,40340,111],{"class":104},[94,40342,40343],{"class":96,"line":16765},[94,40344,38937],{"class":163},[94,40346,40347,40349,40351],{"class":96,"line":16778},[94,40348,38942],{"class":100},[94,40350,38871],{"class":153},[94,40352,38947],{"class":104},[94,40354,40355],{"class":96,"line":16783},[94,40356,38952],{"class":163},[94,40358,40359],{"class":96,"line":16797},[94,40360,38957],{"class":163},[94,40362,40363,40365,40367,40369,40371],{"class":96,"line":16802},[94,40364,38962],{"class":104},[94,40366,296],{"class":153},[94,40368,483],{"class":104},[94,40370,38969],{"class":153},[94,40372,111],{"class":104},[94,40374,40375],{"class":96,"line":16808},[94,40376,38976],{"class":163},[94,40378,40379,40381,40383,40385,40387,40389],{"class":96,"line":16813},[94,40380,38904],{"class":100},[94,40382,38907],{"class":104},[94,40384,38910],{"class":100},[94,40386,38913],{"class":100},[94,40388,38916],{"class":153},[94,40390,3720],{"class":104},[94,40392,40393,40395,40397],{"class":96,"line":16827},[94,40394,38928],{"class":104},[94,40396,296],{"class":153},[94,40398,111],{"class":104},[94,40400,40401],{"class":96,"line":16832},[94,40402,2381],{"emptyLinePlaceholder":20},[94,40404,40405],{"class":96,"line":16837},[94,40406,35148],{"class":163},[94,40408,40409,40411,40413],{"class":96,"line":16851},[94,40410,30784],{"class":100},[94,40412,31076],{"class":1944},[94,40414,31079],{"class":104},[94,40416,40417,40419,40421,40423],{"class":96,"line":16863},[94,40418,31084],{"class":104},[94,40420,150],{"class":100},[94,40422,30806],{"class":153},[94,40424,39025],{"class":104},[94,40426,40427,40429,40431,40433],{"class":96,"line":16868},[94,40428,31084],{"class":104},[94,40430,150],{"class":100},[94,40432,30806],{"class":153},[94,40434,39036],{"class":104},[94,40436,40437,40439,40441,40443],{"class":96,"line":16881},[94,40438,31084],{"class":104},[94,40440,150],{"class":100},[94,40442,30806],{"class":153},[94,40444,39047],{"class":104},[94,40446,40447,40449,40451,40453],{"class":96,"line":16886},[94,40448,31084],{"class":104},[94,40450,150],{"class":100},[94,40452,30806],{"class":153},[94,40454,39058],{"class":104},[94,40456,40457,40459,40461,40463],{"class":96,"line":16891},[94,40458,31084],{"class":104},[94,40460,150],{"class":100},[94,40462,30806],{"class":153},[94,40464,39069],{"class":104},[94,40466,40467,40469,40471,40473],{"class":96,"line":16896},[94,40468,31084],{"class":104},[94,40470,150],{"class":100},[94,40472,30806],{"class":153},[94,40474,39080],{"class":104},[94,40476,40477,40479],{"class":96,"line":16909},[94,40478,14734],{"class":100},[94,40480,31192],{"class":104},[94,40482,40483],{"class":96,"line":16914},[94,40484,2381],{"emptyLinePlaceholder":20},[94,40486,40487],{"class":96,"line":32616},[94,40488,39095],{"class":163},[94,40490,40491,40493,40495,40497,40499],{"class":96,"line":32622},[94,40492,1512],{"class":100},[94,40494,31203],{"class":153},[94,40496,2930],{"class":100},[94,40498,39106],{"class":209},[94,40500,3720],{"class":104},[94,40502,40503,40505,40507,40509,40511,40513,40515,40517,40519],{"class":96,"line":32628},[94,40504,31220],{"class":104},[94,40506,150],{"class":100},[94,40508,30434],{"class":104},[94,40510,31227],{"class":209},[94,40512,1685],{"class":100},[94,40514,31232],{"class":104},[94,40516,1682],{"class":100},[94,40518,30459],{"class":209},[94,40520,111],{"class":104},[94,40522,40523,40525],{"class":96,"line":32634},[94,40524,31282],{"class":153},[94,40526,30468],{"class":104},[94,40528,40529,40531,40533],{"class":96,"line":32640},[94,40530,31272],{"class":104},[94,40532,150],{"class":100},[94,40534,39143],{"class":104},[94,40536,40537,40539,40541,40543,40545,40547,40549,40551],{"class":96,"line":32651},[94,40538,31282],{"class":153},[94,40540,31285],{"class":104},[94,40542,322],{"class":153},[94,40544,483],{"class":104},[94,40546,31484],{"class":153},[94,40548,483],{"class":104},[94,40550,31484],{"class":153},[94,40552,31298],{"class":104},[48,40554,40555],{"start":1160},[51,40556,40557],{},"测试代码",[85,40559,40561],{"className":30361,"code":40560,"language":30363,"meta":14,"style":14},"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",[91,40562,40563,40569,40579,40589,40593,40603,40614,40618,40622,40626,40634,40650,40660,40676,40686,40700,40704,40714,40724,40734,40740,40744,40748,40756,40760,40776,40784,40788,40792,40800,40808,40812,40816,40820,40824,40830,40834,40844,40852,40860,40864,40868,40872,40880,40884,40900,40904,40908,40912,40924,40928,40940,40944,40948,40960,40964,40974,40978,40982,40994,40998,41007,41011,41015,41023,41027,41035,41039,41043,41047,41051,41055,41071,41079,41083,41087,41135,41141,41145,41155,41163,41171,41175,41179,41183,41187,41195,41199,41215,41219,41227,41235],{"__ignoreMap":14},[94,40564,40565,40567],{"class":96,"line":97},[94,40566,30375],{"class":100},[94,40568,30378],{"class":104},[94,40570,40571,40573,40575,40577],{"class":96,"line":15},[94,40572,30375],{"class":100},[94,40574,31398],{"class":104},[94,40576,31366],{"class":100},[94,40578,31403],{"class":104},[94,40580,40581,40583,40585,40587],{"class":96,"line":1160},[94,40582,30720],{"class":100},[94,40584,31381],{"class":104},[94,40586,30375],{"class":100},[94,40588,31386],{"class":104},[94,40590,40591],{"class":96,"line":1175},[94,40592,33905],{"class":163},[94,40594,40595,40597,40599,40601],{"class":96,"line":1181},[94,40596,30720],{"class":100},[94,40598,31351],{"class":104},[94,40600,30375],{"class":100},[94,40602,31356],{"class":104},[94,40604,40605,40607,40609,40611],{"class":96,"line":1195},[94,40606,30720],{"class":100},[94,40608,31897],{"class":104},[94,40610,30375],{"class":100},[94,40612,40613],{"class":153}," VGG16\n",[94,40615,40616],{"class":96,"line":1201},[94,40617,2381],{"emptyLinePlaceholder":20},[94,40619,40620],{"class":96,"line":1292},[94,40621,2381],{"emptyLinePlaceholder":20},[94,40623,40624],{"class":96,"line":1298},[94,40625,33934],{"class":163},[94,40627,40628,40630,40632],{"class":96,"line":1310},[94,40629,31930],{"class":100},[94,40631,33941],{"class":1944},[94,40633,31936],{"class":104},[94,40635,40636,40638,40640,40642,40644,40646,40648],{"class":96,"line":1593},[94,40637,33948],{"class":104},[94,40639,150],{"class":100},[94,40641,31438],{"class":104},[94,40643,31441],{"class":5198},[94,40645,150],{"class":100},[94,40647,31446],{"class":209},[94,40649,31449],{"class":104},[94,40651,40652,40654,40656,40658],{"class":96,"line":1598},[94,40653,33965],{"class":5198},[94,40655,150],{"class":100},[94,40657,33970],{"class":153},[94,40659,31449],{"class":104},[94,40661,40662,40664,40666,40668,40670,40672,40674],{"class":96,"line":1604},[94,40663,33977],{"class":5198},[94,40665,150],{"class":100},[94,40667,31476],{"class":104},[94,40669,31479],{"class":5198},[94,40671,150],{"class":100},[94,40673,31484],{"class":153},[94,40675,31487],{"class":104},[94,40677,40678,40680,40682,40684],{"class":96,"line":1609},[94,40679,33994],{"class":5198},[94,40681,150],{"class":100},[94,40683,31459],{"class":153},[94,40685,111],{"class":104},[94,40687,40688,40690,40692,40694,40696,40698],{"class":96,"line":1623},[94,40689,34005],{"class":104},[94,40691,150],{"class":100},[94,40693,31517],{"class":104},[94,40695,31520],{"class":5198},[94,40697,150],{"class":100},[94,40699,34016],{"class":104},[94,40701,40702],{"class":96,"line":1628},[94,40703,34021],{"class":163},[94,40705,40706,40708,40710,40712],{"class":96,"line":1634},[94,40707,34026],{"class":5198},[94,40709,150],{"class":100},[94,40711,322],{"class":153},[94,40713,31449],{"class":104},[94,40715,40716,40718,40720,40722],{"class":96,"line":1655},[94,40717,34037],{"class":5198},[94,40719,150],{"class":100},[94,40721,31459],{"class":153},[94,40723,31449],{"class":104},[94,40725,40726,40728,40730,40732],{"class":96,"line":1660},[94,40727,34048],{"class":5198},[94,40729,150],{"class":100},[94,40731,296],{"class":153},[94,40733,111],{"class":104},[94,40735,40736,40738],{"class":96,"line":1674},[94,40737,4071],{"class":100},[94,40739,34061],{"class":104},[94,40741,40742],{"class":96,"line":1679},[94,40743,2381],{"emptyLinePlaceholder":20},[94,40745,40746],{"class":96,"line":1708},[94,40747,34070],{"class":163},[94,40749,40750,40752,40754],{"class":96,"line":1713},[94,40751,31930],{"class":100},[94,40753,34077],{"class":1944},[94,40755,34080],{"class":104},[94,40757,40758],{"class":96,"line":1730},[94,40759,34085],{"class":163},[94,40761,40762,40764,40766,40768,40770,40772,40774],{"class":96,"line":1735},[94,40763,31220],{"class":104},[94,40765,150],{"class":100},[94,40767,31227],{"class":209},[94,40769,1685],{"class":100},[94,40771,31232],{"class":104},[94,40773,1682],{"class":100},[94,40775,34102],{"class":209},[94,40777,40778,40780,40782],{"class":96,"line":1740},[94,40779,31272],{"class":104},[94,40781,150],{"class":100},[94,40783,32272],{"class":104},[94,40785,40786],{"class":96,"line":1745},[94,40787,2381],{"emptyLinePlaceholder":20},[94,40789,40790],{"class":96,"line":1759},[94,40791,34119],{"class":163},[94,40793,40794,40796,40798],{"class":96,"line":1764},[94,40795,34124],{"class":104},[94,40797,150],{"class":100},[94,40799,32325],{"class":153},[94,40801,40802,40804,40806],{"class":96,"line":2558},[94,40803,34133],{"class":104},[94,40805,150],{"class":100},[94,40807,3066],{"class":153},[94,40809,40810],{"class":96,"line":2572},[94,40811,2381],{"emptyLinePlaceholder":20},[94,40813,40814],{"class":96,"line":2580},[94,40815,34146],{"class":163},[94,40817,40818],{"class":96,"line":2585},[94,40819,34151],{"class":163},[94,40821,40822],{"class":96,"line":2591},[94,40823,34156],{"class":163},[94,40825,40826,40828],{"class":96,"line":2597},[94,40827,34161],{"class":100},[94,40829,32867],{"class":104},[94,40831,40832],{"class":96,"line":2602},[94,40833,34168],{"class":163},[94,40835,40836,40838,40840,40842],{"class":96,"line":7930},[94,40837,3384],{"class":100},[94,40839,34175],{"class":104},[94,40841,26026],{"class":100},[94,40843,34180],{"class":104},[94,40845,40846,40848,40850],{"class":96,"line":7954},[94,40847,34185],{"class":104},[94,40849,150],{"class":100},[94,40851,34190],{"class":104},[94,40853,40854,40856,40858],{"class":96,"line":7959},[94,40855,34195],{"class":104},[94,40857,150],{"class":100},[94,40859,34200],{"class":104},[94,40861,40862],{"class":96,"line":7965},[94,40863,34205],{"class":163},[94,40865,40866],{"class":96,"line":7992},[94,40867,32858],{"class":104},[94,40869,40870],{"class":96,"line":7997},[94,40871,34214],{"class":163},[94,40873,40874,40876,40878],{"class":96,"line":8003},[94,40875,32643],{"class":104},[94,40877,150],{"class":100},[94,40879,34223],{"class":104},[94,40881,40882],{"class":96,"line":8015},[94,40883,34228],{"class":163},[94,40885,40886,40888,40890,40892,40894,40896,40898],{"class":96,"line":8027},[94,40887,32660],{"class":104},[94,40889,150],{"class":100},[94,40891,32665],{"class":104},[94,40893,32668],{"class":5198},[94,40895,150],{"class":100},[94,40897,322],{"class":153},[94,40899,111],{"class":104},[94,40901,40902],{"class":96,"line":8039},[94,40903,34249],{"class":163},[94,40905,40906],{"class":96,"line":9698},[94,40907,34254],{"class":163},[94,40909,40910],{"class":96,"line":9723},[94,40911,34259],{"class":163},[94,40913,40914,40916,40918,40920,40922],{"class":96,"line":9746},[94,40915,34264],{"class":104},[94,40917,9459],{"class":100},[94,40919,32770],{"class":104},[94,40921,2930],{"class":100},[94,40923,34273],{"class":104},[94,40925,40926],{"class":96,"line":9770},[94,40927,34278],{"class":163},[94,40929,40930,40932,40934,40936,40938],{"class":96,"line":9775},[94,40931,34283],{"class":104},[94,40933,9459],{"class":100},[94,40935,34288],{"class":104},[94,40937,296],{"class":153},[94,40939,111],{"class":104},[94,40941,40942],{"class":96,"line":9780},[94,40943,2381],{"emptyLinePlaceholder":20},[94,40945,40946],{"class":96,"line":9785},[94,40947,34301],{"class":163},[94,40949,40950,40952,40954,40956,40958],{"class":96,"line":9794},[94,40951,34306],{"class":104},[94,40953,150],{"class":100},[94,40955,34311],{"class":104},[94,40957,689],{"class":100},[94,40959,34316],{"class":104},[94,40961,40962],{"class":96,"line":9799},[94,40963,34321],{"class":163},[94,40965,40966,40968,40970,40972],{"class":96,"line":9805},[94,40967,32434],{"class":153},[94,40969,105],{"class":104},[94,40971,34330],{"class":209},[94,40973,34333],{"class":104},[94,40975,40976],{"class":96,"line":9826},[94,40977,2381],{"emptyLinePlaceholder":20},[94,40979,40980],{"class":96,"line":9832},[94,40981,34342],{"class":163},[94,40983,40984,40986,40988,40990,40992],{"class":96,"line":9846},[94,40985,1512],{"class":100},[94,40987,31203],{"class":153},[94,40989,2930],{"class":100},[94,40991,31208],{"class":209},[94,40993,3720],{"class":104},[94,40995,40996],{"class":96,"line":9852},[94,40997,34359],{"class":163},[94,40999,41000,41002,41004],{"class":96,"line":9879},[94,41001,31272],{"class":104},[94,41003,150],{"class":100},[94,41005,41006],{"class":104},"VGG16()\n",[94,41008,41009],{"class":96,"line":9888},[94,41010,34372],{"class":163},[94,41012,41013],{"class":96,"line":9894},[94,41014,34377],{"class":163},[94,41016,41017,41019,41021],{"class":96,"line":9902},[94,41018,34382],{"class":104},[94,41020,34385],{"class":209},[94,41022,30480],{"class":104},[94,41024,41025],{"class":96,"line":9907},[94,41026,34392],{"class":163},[94,41028,41029,41031,41033],{"class":96,"line":16586},[94,41030,34005],{"class":104},[94,41032,150],{"class":100},[94,41034,34401],{"class":104},[94,41036,41037],{"class":96,"line":16592},[94,41038,34406],{"class":163},[94,41040,41041],{"class":96,"line":16615},[94,41042,34411],{"class":104},[94,41044,41045],{"class":96,"line":16621},[94,41046,2381],{"emptyLinePlaceholder":20},[94,41048,41049],{"class":96,"line":16644},[94,41050,34420],{"class":163},[94,41052,41053],{"class":96,"line":16658},[94,41054,34425],{"class":163},[94,41056,41057,41059,41061,41063,41065,41067,41069],{"class":96,"line":16678},[94,41058,31220],{"class":104},[94,41060,150],{"class":100},[94,41062,31227],{"class":209},[94,41064,1685],{"class":100},[94,41066,31232],{"class":104},[94,41068,1682],{"class":100},[94,41070,34102],{"class":209},[94,41072,41073,41075,41077],{"class":96,"line":16684},[94,41074,31272],{"class":104},[94,41076,150],{"class":100},[94,41078,32272],{"class":104},[94,41080,41081],{"class":96,"line":16695},[94,41082,34454],{"class":163},[94,41084,41085],{"class":96,"line":16718},[94,41086,34459],{"class":163},[94,41088,41089,41091,41093,41095,41097,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129,41131,41133],{"class":96,"line":16740},[94,41090,34464],{"class":104},[94,41092,150],{"class":100},[94,41094,995],{"class":104},[94,41096,34471],{"class":209},[94,41098,483],{"class":104},[94,41100,34476],{"class":209},[94,41102,483],{"class":104},[94,41104,34481],{"class":209},[94,41106,483],{"class":104},[94,41108,34486],{"class":209},[94,41110,483],{"class":104},[94,41112,34491],{"class":209},[94,41114,483],{"class":104},[94,41116,34496],{"class":209},[94,41118,483],{"class":104},[94,41120,34501],{"class":209},[94,41122,483],{"class":104},[94,41124,34506],{"class":209},[94,41126,483],{"class":104},[94,41128,34511],{"class":209},[94,41130,483],{"class":104},[94,41132,34516],{"class":209},[94,41134,33229],{"class":104},[94,41136,41137,41139],{"class":96,"line":16745},[94,41138,34161],{"class":100},[94,41140,32867],{"class":104},[94,41142,41143],{"class":96,"line":16751},[94,41144,34529],{"class":163},[94,41146,41147,41149,41151,41153],{"class":96,"line":16765},[94,41148,3384],{"class":100},[94,41150,34536],{"class":104},[94,41152,26026],{"class":100},[94,41154,34180],{"class":104},[94,41156,41157,41159,41161],{"class":96,"line":16778},[94,41158,32593],{"class":104},[94,41160,150],{"class":100},[94,41162,32598],{"class":104},[94,41164,41165,41167,41169],{"class":96,"line":16783},[94,41166,32608],{"class":104},[94,41168,150],{"class":100},[94,41170,32613],{"class":104},[94,41172,41173],{"class":96,"line":16797},[94,41174,2381],{"emptyLinePlaceholder":20},[94,41176,41177],{"class":96,"line":16802},[94,41178,34565],{"class":163},[94,41180,41181],{"class":96,"line":16808},[94,41182,32858],{"class":104},[94,41184,41185],{"class":96,"line":16813},[94,41186,34574],{"class":163},[94,41188,41189,41191,41193],{"class":96,"line":16827},[94,41190,32643],{"class":104},[94,41192,150],{"class":100},[94,41194,32648],{"class":104},[94,41196,41197],{"class":96,"line":16832},[94,41198,34587],{"class":163},[94,41200,41201,41203,41205,41207,41209,41211,41213],{"class":96,"line":16837},[94,41202,32660],{"class":104},[94,41204,150],{"class":100},[94,41206,32665],{"class":104},[94,41208,32668],{"class":5198},[94,41210,150],{"class":100},[94,41212,322],{"class":153},[94,41214,111],{"class":104},[94,41216,41217],{"class":96,"line":16851},[94,41218,34608],{"class":163},[94,41220,41221,41223,41225],{"class":96,"line":16863},[94,41222,34613],{"class":104},[94,41224,150],{"class":100},[94,41226,34618],{"class":104},[94,41228,41229,41231,41233],{"class":96,"line":16868},[94,41230,34623],{"class":104},[94,41232,150],{"class":100},[94,41234,34628],{"class":104},[94,41236,41237,41239,41241,41243,41245,41247,41249,41251],{"class":96,"line":16881},[94,41238,34633],{"class":153},[94,41240,105],{"class":104},[94,41242,34638],{"class":209},[94,41244,34641],{"class":104},[94,41246,34644],{"class":209},[94,41248,483],{"class":104},[94,41250,34649],{"class":209},[94,41252,34652],{"class":104},[65,41254,41256],{"id":41255},"_23googlenet","2.3.GoogLeNet",[21980,41258,41260],{"id":41259},"_231原理","2.3.1.原理",[48,41262,41263],{},[51,41264,41265],{},"网络结构",[40,41267,41268],{},[1443,41269],{"alt":14,"src":41270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[40,41272,41273],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[40,41275,41276],{},[1443,41277],{"alt":14,"src":41278},"\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",[40,41280,41281],{},[1443,41282],{"alt":14,"src":41283},"\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",[40,41285,41286],{},[1443,41287],{"alt":14,"src":41288},"\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",[48,41290,41291],{"start":15},[51,41292,41293],{},"1x1卷积的优点",[40,41295,41296],{},[1443,41297],{"alt":14,"src":41298},"\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",[48,41300,41301],{"start":1160},[51,41302,41303],{},"全局平均池化层优点",[40,41305,41306],{},[1443,41307],{"alt":14,"src":41308},"\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",[40,41310,41311],{},[1443,41312],{"alt":14,"src":41313},"\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",[48,41315,41316],{"start":1175},[51,41317,41318],{},"参数详细描述",[40,41320,41321],{},[1443,41322],{"alt":14,"src":41323},"\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",[40,41325,41326],{},[1443,41327],{"alt":14,"src":41328},"\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",[40,41330,41331],{},[1443,41332],{"alt":14,"src":41333},"\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",[40,41335,41336],{},[1443,41337],{"alt":14,"src":41338},"\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",[40,41340,41341],{},[1443,41342],{"alt":14,"src":41343},"\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",[40,41345,41346],{},[1443,41347],{"alt":14,"src":41348},"\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",[40,41350,41351],{},[1443,41352],{"alt":14,"src":41353},"\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",[40,41355,41356],{},[1443,41357],{"alt":14,"src":41358},"\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",[40,41360,41361],{},[1443,41362],{"alt":14,"src":41363},"\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",[40,41365,41366],{},[1443,41367],{"alt":14,"src":41368},"\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",[40,41370,41371],{},[1443,41372],{"alt":14,"src":41373},"\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",[40,41375,41376],{},[1443,41377],{"alt":14,"src":41378},"\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",[40,41380,41381],{},[1443,41382],{"alt":14,"src":41383},"\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",[40,41385,41386],{},[1443,41387],{"alt":14,"src":41388},"\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",[40,41390,41391],{},[1443,41392],{"alt":14,"src":41393},"\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",[40,41395,41396],{},[1443,41397],{"alt":14,"src":41398},"\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",[40,41400,41401],{},[1443,41402],{"alt":14,"src":41403},"\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",[40,41405,41406],{},[1443,41407],{"alt":14,"src":41408},"\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",[40,41410,41411],{},[1443,41412],{"alt":14,"src":41413},"\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",[40,41415,41416],{},[1443,41417],{"alt":14,"src":41418},"\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",[40,41420,41421],{},[1443,41422],{"alt":14,"src":41423},"\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",[21980,41425,41427],{"id":41426},"_232代码实现","2.3.2.代码实现",[48,41429,41430],{},[51,41431,30694],{},[40,41433,41434],{},"根据原理一步一步搭建即可",[85,41436,41438],{"className":30361,"code":41437,"language":30363,"meta":14,"style":14},"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",[91,41439,41440,41446,41456,41466,41470,41487,41496,41511,41521,41526,41559,41564,41601,41648,41653,41689,41736,41741,41746,41781,41813,41817,41825,41841,41865,41890,41911,41916,41931,41935,41939,41944,41961,41966,41975,41990,42001,42045,42049,42077,42081,42092,42120,42124,42161,42165,42193,42197,42208,42244,42276,42304,42308,42319,42353,42385,42417,42450,42484,42512,42516,42527,42560,42592,42606,42610,42623,42627,42632,42644,42652,42674,42679,42684,42689,42694,42699,42704,42718,42726,42735,42748,42763,42772,42776,42784,42795,42806,42817,42828,42839,42845,42849,42854,42866,42886,42895],{"__ignoreMap":14},[94,41441,41442,41444],{"class":96,"line":97},[94,41443,30375],{"class":100},[94,41445,30378],{"class":104},[94,41447,41448,41450,41452,41454],{"class":96,"line":15},[94,41449,30720],{"class":100},[94,41451,30723],{"class":104},[94,41453,30375],{"class":100},[94,41455,30728],{"class":104},[94,41457,41458,41460,41462,41464],{"class":96,"line":1160},[94,41459,30720],{"class":100},[94,41461,30740],{"class":104},[94,41463,30375],{"class":100},[94,41465,30745],{"class":104},[94,41467,41468],{"class":96,"line":1175},[94,41469,2381],{"emptyLinePlaceholder":20},[94,41471,41472,41474,41477,41479,41481,41483,41485],{"class":96,"line":1181},[94,41473,14676],{"class":100},[94,41475,41476],{"class":1944}," Inception",[94,41478,105],{"class":104},[94,41480,30761],{"class":1944},[94,41482,663],{"class":104},[94,41484,30766],{"class":1944},[94,41486,30769],{"class":104},[94,41488,41489,41491,41493],{"class":96,"line":1195},[94,41490,30784],{"class":100},[94,41492,30787],{"class":153},[94,41494,41495],{"class":104},"(self,in_channels,c1,c2,c3,c4):\n",[94,41497,41498,41500,41503,41505,41507,41509],{"class":96,"line":1201},[94,41499,30800],{"class":153},[94,41501,41502],{"class":104},"(Inception,",[94,41504,30806],{"class":153},[94,41506,30809],{"class":104},[94,41508,30812],{"class":153},[94,41510,1957],{"class":104},[94,41512,41513,41515,41517,41519],{"class":96,"line":1292},[94,41514,30828],{"class":153},[94,41516,34754],{"class":104},[94,41518,150],{"class":100},[94,41520,34759],{"class":104},[94,41522,41523],{"class":96,"line":1298},[94,41524,41525],{"class":163},"        # 路线1：定义1*1卷积\n",[94,41527,41528,41530,41533,41535,41537,41539,41541,41544,41546,41548,41551,41553,41555,41557],{"class":96,"line":1310},[94,41529,30828],{"class":153},[94,41531,41532],{"class":104},".p1_1",[94,41534,150],{"class":100},[94,41536,30836],{"class":104},[94,41538,30839],{"class":5198},[94,41540,150],{"class":100},[94,41542,41543],{"class":104},"in_channels,",[94,41545,30848],{"class":5198},[94,41547,150],{"class":100},[94,41549,41550],{"class":104},"c1,",[94,41552,30857],{"class":5198},[94,41554,150],{"class":100},[94,41556,322],{"class":153},[94,41558,111],{"class":104},[94,41560,41561],{"class":96,"line":1593},[94,41562,41563],{"class":163},"        # 路线2：定义1*1卷积和3*3\n",[94,41565,41566,41568,41571,41573,41575,41577,41579,41581,41583,41585,41588,41590,41593,41595,41597,41599],{"class":96,"line":1598},[94,41567,30828],{"class":153},[94,41569,41570],{"class":104},".p2_1",[94,41572,150],{"class":100},[94,41574,30836],{"class":104},[94,41576,30839],{"class":5198},[94,41578,150],{"class":100},[94,41580,41543],{"class":104},[94,41582,30848],{"class":5198},[94,41584,150],{"class":100},[94,41586,41587],{"class":104},"c2[",[94,41589,296],{"class":153},[94,41591,41592],{"class":104},"],",[94,41594,30857],{"class":5198},[94,41596,150],{"class":100},[94,41598,322],{"class":153},[94,41600,111],{"class":104},[94,41602,41603,41605,41608,41610,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636,41638,41640,41642,41644,41646],{"class":96,"line":1604},[94,41604,30828],{"class":153},[94,41606,41607],{"class":104},".p2_2",[94,41609,150],{"class":100},[94,41611,30836],{"class":104},[94,41613,30839],{"class":5198},[94,41615,150],{"class":100},[94,41617,41587],{"class":104},[94,41619,296],{"class":153},[94,41621,41592],{"class":104},[94,41623,30848],{"class":5198},[94,41625,150],{"class":100},[94,41627,41587],{"class":104},[94,41629,322],{"class":153},[94,41631,41592],{"class":104},[94,41633,30857],{"class":5198},[94,41635,150],{"class":100},[94,41637,176],{"class":153},[94,41639,483],{"class":104},[94,41641,30866],{"class":5198},[94,41643,150],{"class":100},[94,41645,322],{"class":153},[94,41647,111],{"class":104},[94,41649,41650],{"class":96,"line":1609},[94,41651,41652],{"class":163},"        # 路线3：定义1*1卷积和5*5\n",[94,41654,41655,41657,41660,41662,41664,41666,41668,41670,41672,41674,41677,41679,41681,41683,41685,41687],{"class":96,"line":1623},[94,41656,30828],{"class":153},[94,41658,41659],{"class":104},".p3_1",[94,41661,150],{"class":100},[94,41663,30836],{"class":104},[94,41665,30839],{"class":5198},[94,41667,150],{"class":100},[94,41669,41543],{"class":104},[94,41671,30848],{"class":5198},[94,41673,150],{"class":100},[94,41675,41676],{"class":104},"c3[",[94,41678,296],{"class":153},[94,41680,41592],{"class":104},[94,41682,30857],{"class":5198},[94,41684,150],{"class":100},[94,41686,322],{"class":153},[94,41688,111],{"class":104},[94,41690,41691,41693,41696,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732,41734],{"class":96,"line":1628},[94,41692,30828],{"class":153},[94,41694,41695],{"class":104},".p3_2",[94,41697,150],{"class":100},[94,41699,30836],{"class":104},[94,41701,30839],{"class":5198},[94,41703,150],{"class":100},[94,41705,41676],{"class":104},[94,41707,296],{"class":153},[94,41709,41592],{"class":104},[94,41711,30848],{"class":5198},[94,41713,150],{"class":100},[94,41715,41676],{"class":104},[94,41717,322],{"class":153},[94,41719,41592],{"class":104},[94,41721,30857],{"class":5198},[94,41723,150],{"class":100},[94,41725,424],{"class":153},[94,41727,483],{"class":104},[94,41729,30866],{"class":5198},[94,41731,150],{"class":100},[94,41733,182],{"class":153},[94,41735,111],{"class":104},[94,41737,41738],{"class":96,"line":1634},[94,41739,41740],{"class":163},"        # 路线4：定义3*3最大池化和1*1卷积\n",[94,41742,41743],{"class":96,"line":1655},[94,41744,41745],{"class":163},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[94,41747,41748,41750,41753,41755,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775,41777,41779],{"class":96,"line":1660},[94,41749,30828],{"class":153},[94,41751,41752],{"class":104},".p4_1",[94,41754,150],{"class":100},[94,41756,34812],{"class":104},[94,41758,30857],{"class":5198},[94,41760,150],{"class":100},[94,41762,176],{"class":153},[94,41764,483],{"class":104},[94,41766,30912],{"class":5198},[94,41768,150],{"class":100},[94,41770,322],{"class":153},[94,41772,483],{"class":104},[94,41774,30866],{"class":5198},[94,41776,150],{"class":100},[94,41778,322],{"class":153},[94,41780,111],{"class":104},[94,41782,41783,41785,41788,41790,41792,41794,41796,41798,41800,41802,41805,41807,41809,41811],{"class":96,"line":1674},[94,41784,30828],{"class":153},[94,41786,41787],{"class":104},".p4_2",[94,41789,150],{"class":100},[94,41791,30836],{"class":104},[94,41793,30839],{"class":5198},[94,41795,150],{"class":100},[94,41797,41543],{"class":104},[94,41799,30848],{"class":5198},[94,41801,150],{"class":100},[94,41803,41804],{"class":104},"c4,",[94,41806,30857],{"class":5198},[94,41808,150],{"class":100},[94,41810,322],{"class":153},[94,41812,111],{"class":104},[94,41814,41815],{"class":96,"line":1679},[94,41816,2381],{"emptyLinePlaceholder":20},[94,41818,41819,41821,41823],{"class":96,"line":1708},[94,41820,30784],{"class":100},[94,41822,31076],{"class":1944},[94,41824,31079],{"class":104},[94,41826,41827,41830,41832,41834,41836,41838],{"class":96,"line":1713},[94,41828,41829],{"class":104},"        p1",[94,41831,150],{"class":100},[94,41833,30806],{"class":153},[94,41835,35167],{"class":104},[94,41837,30806],{"class":153},[94,41839,41840],{"class":104},".p1_1(x))\n",[94,41842,41843,41845,41847,41849,41851,41853,41856,41858,41860,41862],{"class":96,"line":1730},[94,41844,7067],{"class":104},[94,41846,150],{"class":100},[94,41848,30806],{"class":153},[94,41850,35167],{"class":104},[94,41852,30806],{"class":153},[94,41854,41855],{"class":104},".p2_2(",[94,41857,30806],{"class":153},[94,41859,35167],{"class":104},[94,41861,30806],{"class":153},[94,41863,41864],{"class":104},".p2_1(x))))\n",[94,41866,41867,41870,41872,41874,41876,41878,41881,41883,41885,41887],{"class":96,"line":1735},[94,41868,41869],{"class":104},"        p3",[94,41871,150],{"class":100},[94,41873,30806],{"class":153},[94,41875,35167],{"class":104},[94,41877,30806],{"class":153},[94,41879,41880],{"class":104},".p3_2(",[94,41882,30806],{"class":153},[94,41884,35167],{"class":104},[94,41886,30806],{"class":153},[94,41888,41889],{"class":104},".p3_1(x))))\n",[94,41891,41892,41895,41897,41899,41901,41903,41906,41908],{"class":96,"line":1740},[94,41893,41894],{"class":104},"        p4",[94,41896,150],{"class":100},[94,41898,30806],{"class":153},[94,41900,35167],{"class":104},[94,41902,30806],{"class":153},[94,41904,41905],{"class":104},".p4_2(",[94,41907,30806],{"class":153},[94,41909,41910],{"class":104},".p4_1(x)))\n",[94,41912,41913],{"class":96,"line":1745},[94,41914,41915],{"class":163},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[94,41917,41918,41920,41923,41925,41927,41929],{"class":96,"line":1759},[94,41919,14734],{"class":100},[94,41921,41922],{"class":104}," torch.cat((p1,p2,p3,p4),",[94,41924,32668],{"class":5198},[94,41926,150],{"class":100},[94,41928,322],{"class":153},[94,41930,111],{"class":104},[94,41932,41933],{"class":96,"line":1764},[94,41934,2381],{"emptyLinePlaceholder":20},[94,41936,41937],{"class":96,"line":2558},[94,41938,2381],{"emptyLinePlaceholder":20},[94,41940,41941],{"class":96,"line":2572},[94,41942,41943],{"class":163},"# 搭建GoogLeNet网络\n",[94,41945,41946,41948,41951,41953,41955,41957,41959],{"class":96,"line":2580},[94,41947,14676],{"class":100},[94,41949,41950],{"class":1944}," GoogLeNet",[94,41952,105],{"class":104},[94,41954,30761],{"class":1944},[94,41956,663],{"class":104},[94,41958,30766],{"class":1944},[94,41960,30769],{"class":104},[94,41962,41963],{"class":96,"line":2585},[94,41964,41965],{"class":163},"    # 必须把Inception导入到里边\n",[94,41967,41968,41970,41972],{"class":96,"line":2591},[94,41969,30784],{"class":100},[94,41971,30787],{"class":153},[94,41973,41974],{"class":104},"(self,Inception):\n",[94,41976,41977,41979,41982,41984,41986,41988],{"class":96,"line":2597},[94,41978,30800],{"class":153},[94,41980,41981],{"class":104},"(GoogLeNet,",[94,41983,30806],{"class":153},[94,41985,30809],{"class":104},[94,41987,30812],{"class":153},[94,41989,1957],{"class":104},[94,41991,41992,41994,41997,41999],{"class":96,"line":2602},[94,41993,30828],{"class":153},[94,41995,41996],{"class":104},".b1",[94,41998,150],{"class":100},[94,42000,37992],{"class":104},[94,42002,42003,42005,42007,42009,42011,42013,42015,42017,42019,42021,42023,42025,42027,42029,42031,42033,42035,42037,42039,42041,42043],{"class":96,"line":7930},[94,42004,37997],{"class":104},[94,42006,30839],{"class":5198},[94,42008,150],{"class":100},[94,42010,322],{"class":153},[94,42012,483],{"class":104},[94,42014,30848],{"class":5198},[94,42016,150],{"class":100},[94,42018,308],{"class":153},[94,42020,483],{"class":104},[94,42022,30857],{"class":5198},[94,42024,150],{"class":100},[94,42026,474],{"class":153},[94,42028,483],{"class":104},[94,42030,30912],{"class":5198},[94,42032,150],{"class":100},[94,42034,182],{"class":153},[94,42036,483],{"class":104},[94,42038,30866],{"class":5198},[94,42040,150],{"class":100},[94,42042,176],{"class":153},[94,42044,38030],{"class":104},[94,42046,42047],{"class":96,"line":7954},[94,42048,38035],{"class":104},[94,42050,42051,42053,42055,42057,42059,42061,42063,42065,42067,42069,42071,42073,42075],{"class":96,"line":7959},[94,42052,38080],{"class":104},[94,42054,30857],{"class":5198},[94,42056,150],{"class":100},[94,42058,176],{"class":153},[94,42060,483],{"class":104},[94,42062,30912],{"class":5198},[94,42064,150],{"class":100},[94,42066,182],{"class":153},[94,42068,483],{"class":104},[94,42070,30866],{"class":5198},[94,42072,150],{"class":100},[94,42074,322],{"class":153},[94,42076,111],{"class":104},[94,42078,42079],{"class":96,"line":7965},[94,42080,38109],{"class":104},[94,42082,42083,42085,42088,42090],{"class":96,"line":7992},[94,42084,30828],{"class":153},[94,42086,42087],{"class":104},".b2",[94,42089,150],{"class":100},[94,42091,37992],{"class":104},[94,42093,42094,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114,42116,42118],{"class":96,"line":7997},[94,42095,37997],{"class":104},[94,42097,30839],{"class":5198},[94,42099,150],{"class":100},[94,42101,308],{"class":153},[94,42103,483],{"class":104},[94,42105,30848],{"class":5198},[94,42107,150],{"class":100},[94,42109,308],{"class":153},[94,42111,483],{"class":104},[94,42113,30857],{"class":5198},[94,42115,150],{"class":100},[94,42117,322],{"class":153},[94,42119,38030],{"class":104},[94,42121,42122],{"class":96,"line":8003},[94,42123,38035],{"class":104},[94,42125,42126,42128,42130,42132,42134,42136,42138,42140,42143,42145,42147,42149,42151,42153,42155,42157,42159],{"class":96,"line":8015},[94,42127,37997],{"class":104},[94,42129,30839],{"class":5198},[94,42131,150],{"class":100},[94,42133,308],{"class":153},[94,42135,483],{"class":104},[94,42137,30848],{"class":5198},[94,42139,150],{"class":100},[94,42141,42142],{"class":153},"192",[94,42144,483],{"class":104},[94,42146,30857],{"class":5198},[94,42148,150],{"class":100},[94,42150,176],{"class":153},[94,42152,483],{"class":104},[94,42154,30866],{"class":5198},[94,42156,150],{"class":100},[94,42158,322],{"class":153},[94,42160,38030],{"class":104},[94,42162,42163],{"class":96,"line":8027},[94,42164,38035],{"class":104},[94,42166,42167,42169,42171,42173,42175,42177,42179,42181,42183,42185,42187,42189,42191],{"class":96,"line":8039},[94,42168,38080],{"class":104},[94,42170,30857],{"class":5198},[94,42172,150],{"class":100},[94,42174,176],{"class":153},[94,42176,483],{"class":104},[94,42178,30912],{"class":5198},[94,42180,150],{"class":100},[94,42182,182],{"class":153},[94,42184,483],{"class":104},[94,42186,30866],{"class":5198},[94,42188,150],{"class":100},[94,42190,322],{"class":153},[94,42192,111],{"class":104},[94,42194,42195],{"class":96,"line":9698},[94,42196,38109],{"class":104},[94,42198,42199,42201,42204,42206],{"class":96,"line":9723},[94,42200,30828],{"class":153},[94,42202,42203],{"class":104},".b3",[94,42205,150],{"class":100},[94,42207,37992],{"class":104},[94,42209,42210,42213,42215,42217,42219,42222,42224,42226,42228,42231,42233,42235,42237,42240,42242],{"class":96,"line":9746},[94,42211,42212],{"class":104},"            Inception(",[94,42214,42142],{"class":153},[94,42216,483],{"class":104},[94,42218,308],{"class":153},[94,42220,42221],{"class":104},",(",[94,42223,314],{"class":153},[94,42225,483],{"class":104},[94,42227,32053],{"class":153},[94,42229,42230],{"class":104},"),(",[94,42232,706],{"class":153},[94,42234,483],{"class":104},[94,42236,302],{"class":153},[94,42238,42239],{"class":104},"),",[94,42241,302],{"class":153},[94,42243,38030],{"class":104},[94,42245,42246,42248,42250,42252,42254,42256,42258,42260,42262,42264,42266,42268,42270,42272,42274],{"class":96,"line":9770},[94,42247,42212],{"class":104},[94,42249,34853],{"class":153},[94,42251,483],{"class":104},[94,42253,32053],{"class":153},[94,42255,42221],{"class":104},[94,42257,32053],{"class":153},[94,42259,483],{"class":104},[94,42261,42142],{"class":153},[94,42263,42230],{"class":104},[94,42265,302],{"class":153},[94,42267,483],{"class":104},[94,42269,314],{"class":153},[94,42271,42239],{"class":104},[94,42273,308],{"class":153},[94,42275,38030],{"class":104},[94,42277,42278,42280,42282,42284,42286,42288,42290,42292,42294,42296,42298,42300,42302],{"class":96,"line":9775},[94,42279,38080],{"class":104},[94,42281,30857],{"class":5198},[94,42283,150],{"class":100},[94,42285,176],{"class":153},[94,42287,483],{"class":104},[94,42289,30912],{"class":5198},[94,42291,150],{"class":100},[94,42293,182],{"class":153},[94,42295,483],{"class":104},[94,42297,30866],{"class":5198},[94,42299,150],{"class":100},[94,42301,322],{"class":153},[94,42303,111],{"class":104},[94,42305,42306],{"class":96,"line":9780},[94,42307,38109],{"class":104},[94,42309,42310,42312,42315,42317],{"class":96,"line":9785},[94,42311,30828],{"class":153},[94,42313,42314],{"class":104},".b4",[94,42316,150],{"class":100},[94,42318,37992],{"class":104},[94,42320,42321,42323,42326,42328,42330,42332,42334,42336,42339,42341,42343,42345,42347,42349,42351],{"class":96,"line":9794},[94,42322,42212],{"class":104},[94,42324,42325],{"class":153},"480",[94,42327,483],{"class":104},[94,42329,42142],{"class":153},[94,42331,42221],{"class":104},[94,42333,314],{"class":153},[94,42335,483],{"class":104},[94,42337,42338],{"class":153},"208",[94,42340,42230],{"class":104},[94,42342,706],{"class":153},[94,42344,483],{"class":104},[94,42346,712],{"class":153},[94,42348,42239],{"class":104},[94,42350,308],{"class":153},[94,42352,38030],{"class":104},[94,42354,42355,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381,42383],{"class":96,"line":9799},[94,42356,42212],{"class":104},[94,42358,38440],{"class":153},[94,42360,483],{"class":104},[94,42362,21030],{"class":153},[94,42364,42221],{"class":104},[94,42366,723],{"class":153},[94,42368,483],{"class":104},[94,42370,31484],{"class":153},[94,42372,42230],{"class":104},[94,42374,905],{"class":153},[94,42376,483],{"class":104},[94,42378,308],{"class":153},[94,42380,42239],{"class":104},[94,42382,308],{"class":153},[94,42384,38030],{"class":104},[94,42386,42387,42389,42391,42393,42395,42397,42399,42401,42403,42405,42407,42409,42411,42413,42415],{"class":96,"line":9805},[94,42388,42212],{"class":104},[94,42390,38440],{"class":153},[94,42392,483],{"class":104},[94,42394,32053],{"class":153},[94,42396,42221],{"class":104},[94,42398,32053],{"class":153},[94,42400,483],{"class":104},[94,42402,34853],{"class":153},[94,42404,42230],{"class":104},[94,42406,905],{"class":153},[94,42408,483],{"class":104},[94,42410,308],{"class":153},[94,42412,42239],{"class":104},[94,42414,308],{"class":153},[94,42416,38030],{"class":104},[94,42418,42419,42421,42423,42425,42427,42429,42431,42433,42436,42438,42440,42442,42444,42446,42448],{"class":96,"line":9826},[94,42420,42212],{"class":104},[94,42422,38440],{"class":153},[94,42424,483],{"class":104},[94,42426,723],{"class":153},[94,42428,42221],{"class":104},[94,42430,32053],{"class":153},[94,42432,483],{"class":104},[94,42434,42435],{"class":153},"288",[94,42437,42230],{"class":104},[94,42439,302],{"class":153},[94,42441,483],{"class":104},[94,42443,308],{"class":153},[94,42445,42239],{"class":104},[94,42447,308],{"class":153},[94,42449,38030],{"class":104},[94,42451,42452,42454,42457,42459,42461,42463,42465,42467,42470,42472,42474,42476,42478,42480,42482],{"class":96,"line":9832},[94,42453,42212],{"class":104},[94,42455,42456],{"class":153},"528",[94,42458,483],{"class":104},[94,42460,34853],{"class":153},[94,42462,42221],{"class":104},[94,42464,21030],{"class":153},[94,42466,483],{"class":104},[94,42468,42469],{"class":153},"320",[94,42471,42230],{"class":104},[94,42473,302],{"class":153},[94,42475,483],{"class":104},[94,42477,32053],{"class":153},[94,42479,42239],{"class":104},[94,42481,32053],{"class":153},[94,42483,38030],{"class":104},[94,42485,42486,42488,42490,42492,42494,42496,42498,42500,42502,42504,42506,42508,42510],{"class":96,"line":9846},[94,42487,38080],{"class":104},[94,42489,30857],{"class":5198},[94,42491,150],{"class":100},[94,42493,176],{"class":153},[94,42495,483],{"class":104},[94,42497,30912],{"class":5198},[94,42499,150],{"class":100},[94,42501,182],{"class":153},[94,42503,483],{"class":104},[94,42505,30866],{"class":5198},[94,42507,150],{"class":100},[94,42509,322],{"class":153},[94,42511,111],{"class":104},[94,42513,42514],{"class":96,"line":9852},[94,42515,38109],{"class":104},[94,42517,42518,42520,42523,42525],{"class":96,"line":9879},[94,42519,30828],{"class":153},[94,42521,42522],{"class":104},".b5",[94,42524,150],{"class":100},[94,42526,37992],{"class":104},[94,42528,42529,42531,42534,42536,42538,42540,42542,42544,42546,42548,42550,42552,42554,42556,42558],{"class":96,"line":9888},[94,42530,42212],{"class":104},[94,42532,42533],{"class":153},"832",[94,42535,483],{"class":104},[94,42537,34853],{"class":153},[94,42539,42221],{"class":104},[94,42541,21030],{"class":153},[94,42543,483],{"class":104},[94,42545,42469],{"class":153},[94,42547,42230],{"class":104},[94,42549,302],{"class":153},[94,42551,483],{"class":104},[94,42553,32053],{"class":153},[94,42555,42239],{"class":104},[94,42557,32053],{"class":153},[94,42559,38030],{"class":104},[94,42561,42562,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586,42588,42590],{"class":96,"line":9894},[94,42563,42212],{"class":104},[94,42565,42533],{"class":153},[94,42567,483],{"class":104},[94,42569,34923],{"class":153},[94,42571,42221],{"class":104},[94,42573,42142],{"class":153},[94,42575,483],{"class":104},[94,42577,34923],{"class":153},[94,42579,42230],{"class":104},[94,42581,712],{"class":153},[94,42583,483],{"class":104},[94,42585,32053],{"class":153},[94,42587,42239],{"class":104},[94,42589,32053],{"class":153},[94,42591,38030],{"class":104},[94,42593,42594,42597,42599,42601,42603],{"class":96,"line":9902},[94,42595,42596],{"class":104},"            nn.AdaptiveAvgPool2d((",[94,42598,322],{"class":153},[94,42600,483],{"class":104},[94,42602,322],{"class":153},[94,42604,42605],{"class":104},")),\n",[94,42607,42608],{"class":96,"line":9907},[94,42609,38773],{"class":104},[94,42611,42612,42614,42617,42619,42621],{"class":96,"line":16586},[94,42613,38778],{"class":104},[94,42615,42616],{"class":153},"1024",[94,42618,483],{"class":104},[94,42620,551],{"class":153},[94,42622,111],{"class":104},[94,42624,42625],{"class":96,"line":16592},[94,42626,38109],{"class":104},[94,42628,42629],{"class":96,"line":16615},[94,42630,42631],{"class":163},"        # 对模型参数初始化\n",[94,42633,42634,42636,42638,42640,42642],{"class":96,"line":16621},[94,42635,3384],{"class":100},[94,42637,38851],{"class":104},[94,42639,26026],{"class":100},[94,42641,38856],{"class":153},[94,42643,38859],{"class":104},[94,42645,42646,42648,42650],{"class":96,"line":16644},[94,42647,4623],{"class":100},[94,42649,38871],{"class":153},[94,42651,38874],{"class":104},[94,42653,42654,42656,42659,42661,42664,42666,42668,42670,42672],{"class":96,"line":16658},[94,42655,38884],{"class":104},[94,42657,42658],{"class":5198},"mode",[94,42660,150],{"class":100},[94,42662,42663],{"class":209},"'fan_out'",[94,42665,483],{"class":104},[94,42667,38887],{"class":5198},[94,42669,150],{"class":100},[94,42671,38892],{"class":209},[94,42673,111],{"class":104},[94,42675,42676],{"class":96,"line":16678},[94,42677,42678],{"class":163},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[94,42680,42681],{"class":96,"line":16684},[94,42682,42683],{"class":163},"                # ② mode = 'fan_out'决定使用的fan值：\n",[94,42685,42686],{"class":96,"line":16695},[94,42687,42688],{"class":163},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[94,42690,42691],{"class":96,"line":16718},[94,42692,42693],{"class":163},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[94,42695,42696],{"class":96,"line":16740},[94,42697,42698],{"class":163},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[94,42700,42701],{"class":96,"line":16745},[94,42702,42703],{"class":163},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[94,42705,42706,42708,42710,42712,42714,42716],{"class":96,"line":16751},[94,42707,38904],{"class":100},[94,42709,38907],{"class":104},[94,42711,38910],{"class":100},[94,42713,38913],{"class":100},[94,42715,38916],{"class":153},[94,42717,3720],{"class":104},[94,42719,42720,42722,42724],{"class":96,"line":16765},[94,42721,38928],{"class":104},[94,42723,296],{"class":153},[94,42725,111],{"class":104},[94,42727,42728,42731,42733],{"class":96,"line":16778},[94,42729,42730],{"class":100},"                elif",[94,42732,38871],{"class":153},[94,42734,38947],{"class":104},[94,42736,42737,42740,42742,42744,42746],{"class":96,"line":16783},[94,42738,42739],{"class":104},"                    nn.init.normal_(m.weight,",[94,42741,296],{"class":153},[94,42743,483],{"class":104},[94,42745,38969],{"class":153},[94,42747,111],{"class":104},[94,42749,42750,42753,42755,42757,42759,42761],{"class":96,"line":16797},[94,42751,42752],{"class":100},"                    if",[94,42754,38907],{"class":104},[94,42756,38910],{"class":100},[94,42758,38913],{"class":100},[94,42760,38916],{"class":153},[94,42762,3720],{"class":104},[94,42764,42765,42768,42770],{"class":96,"line":16802},[94,42766,42767],{"class":104},"                        nn.init.constant_(m.bias,",[94,42769,296],{"class":153},[94,42771,111],{"class":104},[94,42773,42774],{"class":96,"line":16808},[94,42775,35148],{"class":163},[94,42777,42778,42780,42782],{"class":96,"line":16813},[94,42779,30784],{"class":100},[94,42781,31076],{"class":1944},[94,42783,31079],{"class":104},[94,42785,42786,42788,42790,42792],{"class":96,"line":16827},[94,42787,31084],{"class":104},[94,42789,150],{"class":100},[94,42791,30806],{"class":153},[94,42793,42794],{"class":104},".b1(x)\n",[94,42796,42797,42799,42801,42803],{"class":96,"line":16832},[94,42798,31084],{"class":104},[94,42800,150],{"class":100},[94,42802,30806],{"class":153},[94,42804,42805],{"class":104},".b2(x)\n",[94,42807,42808,42810,42812,42814],{"class":96,"line":16837},[94,42809,31084],{"class":104},[94,42811,150],{"class":100},[94,42813,30806],{"class":153},[94,42815,42816],{"class":104},".b3(x)\n",[94,42818,42819,42821,42823,42825],{"class":96,"line":16851},[94,42820,31084],{"class":104},[94,42822,150],{"class":100},[94,42824,30806],{"class":153},[94,42826,42827],{"class":104},".b4(x)\n",[94,42829,42830,42832,42834,42836],{"class":96,"line":16863},[94,42831,31084],{"class":104},[94,42833,150],{"class":100},[94,42835,30806],{"class":153},[94,42837,42838],{"class":104},".b5(x)\n",[94,42840,42841,42843],{"class":96,"line":16868},[94,42842,14734],{"class":100},[94,42844,31192],{"class":104},[94,42846,42847],{"class":96,"line":16881},[94,42848,2381],{"emptyLinePlaceholder":20},[94,42850,42851],{"class":96,"line":16886},[94,42852,42853],{"class":163},"# 模型展示\n",[94,42855,42856,42858,42860,42862,42864],{"class":96,"line":16891},[94,42857,1512],{"class":100},[94,42859,31203],{"class":153},[94,42861,2930],{"class":100},[94,42863,31208],{"class":209},[94,42865,3720],{"class":104},[94,42867,42868,42870,42872,42874,42876,42878,42880,42882,42884],{"class":96,"line":16896},[94,42869,31220],{"class":104},[94,42871,150],{"class":100},[94,42873,30434],{"class":104},[94,42875,31227],{"class":209},[94,42877,1685],{"class":100},[94,42879,31232],{"class":104},[94,42881,1682],{"class":100},[94,42883,30459],{"class":209},[94,42885,111],{"class":104},[94,42887,42888,42890,42892],{"class":96,"line":16909},[94,42889,31272],{"class":104},[94,42891,150],{"class":100},[94,42893,42894],{"class":104},"GoogLeNet(Inception).to(device)\n",[94,42896,42897,42899,42901,42903,42905,42907,42909,42911],{"class":96,"line":16914},[94,42898,31282],{"class":153},[94,42900,31285],{"class":104},[94,42902,322],{"class":153},[94,42904,483],{"class":104},[94,42906,31484],{"class":153},[94,42908,483],{"class":104},[94,42910,31484],{"class":153},[94,42912,31298],{"class":104},[48,42914,42915],{"start":15},[51,42916,39166],{},[85,42918,42920],{"className":30361,"code":42919,"language":30363,"meta":14,"style":14},"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",[91,42921,42922,42928,42934,42944,42950,42960,42970,42980,42990,43000,43004,43015,43025,43029,43033,43037,43045,43057,43067,43083,43093,43125,43139,43149,43159,43163,43173,43187,43197,43207,43217,43223,43227,43231,43235,43239,43243,43251,43271,43275,43279,43283,43287,43291,43307,43311,43315,43323,43327,43331,43339,43343,43347,43351,43359,43363,43367,43371,43375,43383,43387,43395,43399,43407,43411,43419,43423,43431,43435,43439,43447,43451,43455,43459,43471,43495,43509,43513,43517,43521,43529,43533,43541,43545,43553,43557,43565,43569,43577,43581,43589,43593,43605,43609,43617,43621,43629,43633,43637,43641,43645,43653,43657,43673,43677,43685,43689,43693,43697,43701,43705,43709,43713,43729,43733,43745,43749,43761,43765,43777,43781,43789,43793,43801,43805,43809,43813,43819,43823,43831,43835,43851,43855,43863,43867,43883,43895,43899,43911,43915,43919,43927,43931,43935,43943,43947,43955,43959,43967,43971,43975,44017,44059,44063,44067,44083,44087,44103,44107,44111,44119,44123,44127,44139,44177,44181,44185,44193,44197,44211,44221,44227,44233,44239,44245,44249,44253,44259,44263,44267,44275,44279,44297,44301,44305,44309,44325,44329,44333,44337,44341,44345,44365,44385,44389,44393,44397,44405,44413,44417,44433,44453,44473,44477,44481,44489,44497,44501,44505,44509,44521,44525,44535,44543,44560],{"__ignoreMap":14},[94,42923,42924,42926],{"class":96,"line":97},[94,42925,30375],{"class":100},[94,42927,31805],{"class":104},[94,42929,42930,42932],{"class":96,"line":15},[94,42931,30375],{"class":100},[94,42933,31812],{"class":104},[94,42935,42936,42938,42940,42942],{"class":96,"line":1160},[94,42937,30375],{"class":100},[94,42939,31823],{"class":104},[94,42941,31366],{"class":100},[94,42943,31828],{"class":104},[94,42945,42946,42948],{"class":96,"line":1175},[94,42947,30375],{"class":100},[94,42949,30378],{"class":104},[94,42951,42952,42954,42956,42958],{"class":96,"line":1181},[94,42953,30720],{"class":100},[94,42955,31398],{"class":104},[94,42957,30375],{"class":100},[94,42959,31845],{"class":104},[94,42961,42962,42964,42966,42968],{"class":96,"line":1195},[94,42963,30720],{"class":100},[94,42965,31351],{"class":104},[94,42967,30375],{"class":100},[94,42969,31356],{"class":104},[94,42971,42972,42974,42976,42978],{"class":96,"line":1201},[94,42973,30720],{"class":100},[94,42975,31381],{"class":104},[94,42977,30375],{"class":100},[94,42979,31386],{"class":104},[94,42981,42982,42984,42986,42988],{"class":96,"line":1292},[94,42983,30375],{"class":100},[94,42985,31398],{"class":104},[94,42987,31366],{"class":100},[94,42989,31403],{"class":104},[94,42991,42992,42994,42996,42998],{"class":96,"line":1298},[94,42993,30375],{"class":100},[94,42995,31415],{"class":104},[94,42997,31366],{"class":100},[94,42999,31420],{"class":104},[94,43001,43002],{"class":96,"line":1310},[94,43003,31890],{"class":163},[94,43005,43006,43008,43010,43012],{"class":96,"line":1593},[94,43007,30720],{"class":100},[94,43009,31897],{"class":104},[94,43011,30375],{"class":100},[94,43013,43014],{"class":104}," GoogLeNet, Inception\n",[94,43016,43017,43019,43021,43023],{"class":96,"line":1598},[94,43018,30720],{"class":100},[94,43020,30723],{"class":104},[94,43022,30375],{"class":100},[94,43024,30728],{"class":104},[94,43026,43027],{"class":96,"line":1604},[94,43028,2381],{"emptyLinePlaceholder":20},[94,43030,43031],{"class":96,"line":1609},[94,43032,2381],{"emptyLinePlaceholder":20},[94,43034,43035],{"class":96,"line":1623},[94,43036,31925],{"class":163},[94,43038,43039,43041,43043],{"class":96,"line":1628},[94,43040,31930],{"class":100},[94,43042,31933],{"class":1944},[94,43044,31936],{"class":104},[94,43046,43047,43049,43051,43053,43055],{"class":96,"line":1634},[94,43048,31941],{"class":104},[94,43050,150],{"class":100},[94,43052,31438],{"class":104},[94,43054,31446],{"class":209},[94,43056,31449],{"class":104},[94,43058,43059,43061,43063,43065],{"class":96,"line":1655},[94,43060,31954],{"class":5198},[94,43062,150],{"class":100},[94,43064,31459],{"class":153},[94,43066,31449],{"class":104},[94,43068,43069,43071,43073,43075,43077,43079,43081],{"class":96,"line":1660},[94,43070,31965],{"class":5198},[94,43072,150],{"class":100},[94,43074,31476],{"class":104},[94,43076,31479],{"class":5198},[94,43078,150],{"class":100},[94,43080,35432],{"class":153},[94,43082,31487],{"class":104},[94,43084,43085,43087,43089,43091],{"class":96,"line":1674},[94,43086,31982],{"class":5198},[94,43088,150],{"class":100},[94,43090,31459],{"class":153},[94,43092,111],{"class":104},[94,43094,43095,43097,43099,43101,43103,43105,43107,43109,43111,43113,43115,43117,43119,43121,43123],{"class":96,"line":1679},[94,43096,31993],{"class":104},[94,43098,150],{"class":100},[94,43100,31998],{"class":104},[94,43102,32001],{"class":153},[94,43104,105],{"class":104},[94,43106,32006],{"class":153},[94,43108,560],{"class":100},[94,43110,7340],{"class":153},[94,43112,32013],{"class":104},[94,43114,32001],{"class":153},[94,43116,105],{"class":104},[94,43118,32020],{"class":153},[94,43120,560],{"class":100},[94,43122,7340],{"class":153},[94,43124,32027],{"class":104},[94,43126,43127,43129,43131,43133,43135,43137],{"class":96,"line":1708},[94,43128,32032],{"class":104},[94,43130,150],{"class":100},[94,43132,32037],{"class":104},[94,43134,31520],{"class":5198},[94,43136,150],{"class":100},[94,43138,31525],{"class":104},[94,43140,43141,43143,43145,43147],{"class":96,"line":1713},[94,43142,32048],{"class":5198},[94,43144,150],{"class":100},[94,43146,302],{"class":153},[94,43148,31449],{"class":104},[94,43150,43151,43153,43155,43157],{"class":96,"line":1730},[94,43152,32060],{"class":5198},[94,43154,150],{"class":100},[94,43156,31459],{"class":153},[94,43158,31449],{"class":104},[94,43160,43161],{"class":96,"line":1735},[94,43162,32071],{"class":163},[94,43164,43165,43167,43169,43171],{"class":96,"line":1740},[94,43166,32076],{"class":5198},[94,43168,150],{"class":100},[94,43170,500],{"class":153},[94,43172,111],{"class":104},[94,43174,43175,43177,43179,43181,43183,43185],{"class":96,"line":1745},[94,43176,32087],{"class":104},[94,43178,150],{"class":100},[94,43180,31517],{"class":104},[94,43182,31520],{"class":5198},[94,43184,150],{"class":100},[94,43186,32098],{"class":104},[94,43188,43189,43191,43193,43195],{"class":96,"line":1759},[94,43190,32103],{"class":5198},[94,43192,150],{"class":100},[94,43194,302],{"class":153},[94,43196,31449],{"class":104},[94,43198,43199,43201,43203,43205],{"class":96,"line":1764},[94,43200,32114],{"class":5198},[94,43202,150],{"class":100},[94,43204,31459],{"class":153},[94,43206,31449],{"class":104},[94,43208,43209,43211,43213,43215],{"class":96,"line":2558},[94,43210,32125],{"class":5198},[94,43212,150],{"class":100},[94,43214,500],{"class":153},[94,43216,111],{"class":104},[94,43218,43219,43221],{"class":96,"line":2572},[94,43220,4071],{"class":100},[94,43222,32138],{"class":104},[94,43224,43225],{"class":96,"line":2580},[94,43226,2381],{"emptyLinePlaceholder":20},[94,43228,43229],{"class":96,"line":2585},[94,43230,32147],{"class":163},[94,43232,43233],{"class":96,"line":2591},[94,43234,32152],{"class":163},[94,43236,43237],{"class":96,"line":2597},[94,43238,2381],{"emptyLinePlaceholder":20},[94,43240,43241],{"class":96,"line":2602},[94,43242,32161],{"class":163},[94,43244,43245,43247,43249],{"class":96,"line":7930},[94,43246,31930],{"class":100},[94,43248,32168],{"class":1944},[94,43250,32171],{"class":104},[94,43252,43253,43255,43257,43259,43261,43263,43265,43267,43269],{"class":96,"line":7954},[94,43254,31220],{"class":104},[94,43256,150],{"class":100},[94,43258,30434],{"class":104},[94,43260,31227],{"class":209},[94,43262,1685],{"class":100},[94,43264,31232],{"class":104},[94,43266,1682],{"class":100},[94,43268,32190],{"class":209},[94,43270,111],{"class":104},[94,43272,43273],{"class":96,"line":7959},[94,43274,2381],{"emptyLinePlaceholder":20},[94,43276,43277],{"class":96,"line":7965},[94,43278,2381],{"emptyLinePlaceholder":20},[94,43280,43281],{"class":96,"line":7992},[94,43282,32205],{"class":163},[94,43284,43285],{"class":96,"line":7997},[94,43286,32210],{"class":163},[94,43288,43289],{"class":96,"line":8003},[94,43290,32215],{"class":163},[94,43292,43293,43295,43297,43299,43301,43303,43305],{"class":96,"line":8015},[94,43294,32220],{"class":104},[94,43296,150],{"class":100},[94,43298,32225],{"class":104},[94,43300,32228],{"class":5198},[94,43302,150],{"class":100},[94,43304,32233],{"class":153},[94,43306,111],{"class":104},[94,43308,43309],{"class":96,"line":8027},[94,43310,2381],{"emptyLinePlaceholder":20},[94,43312,43313],{"class":96,"line":8039},[94,43314,32244],{"class":163},[94,43316,43317,43319,43321],{"class":96,"line":9698},[94,43318,32249],{"class":104},[94,43320,150],{"class":100},[94,43322,32254],{"class":104},[94,43324,43325],{"class":96,"line":9723},[94,43326,2381],{"emptyLinePlaceholder":20},[94,43328,43329],{"class":96,"line":9746},[94,43330,32263],{"class":163},[94,43332,43333,43335,43337],{"class":96,"line":9770},[94,43334,31272],{"class":104},[94,43336,150],{"class":100},[94,43338,32272],{"class":104},[94,43340,43341],{"class":96,"line":9775},[94,43342,32277],{"class":163},[94,43344,43345],{"class":96,"line":9780},[94,43346,32282],{"class":163},[94,43348,43349],{"class":96,"line":9785},[94,43350,32287],{"class":163},[94,43352,43353,43355,43357],{"class":96,"line":9794},[94,43354,32292],{"class":104},[94,43356,150],{"class":100},[94,43358,32297],{"class":104},[94,43360,43361],{"class":96,"line":9799},[94,43362,2381],{"emptyLinePlaceholder":20},[94,43364,43365],{"class":96,"line":9805},[94,43366,2381],{"emptyLinePlaceholder":20},[94,43368,43369],{"class":96,"line":9826},[94,43370,32310],{"class":163},[94,43372,43373],{"class":96,"line":9832},[94,43374,32315],{"class":163},[94,43376,43377,43379,43381],{"class":96,"line":9846},[94,43378,32320],{"class":104},[94,43380,150],{"class":100},[94,43382,32325],{"class":153},[94,43384,43385],{"class":96,"line":9852},[94,43386,32330],{"class":163},[94,43388,43389,43391,43393],{"class":96,"line":9879},[94,43390,32335],{"class":104},[94,43392,150],{"class":100},[94,43394,32340],{"class":104},[94,43396,43397],{"class":96,"line":9888},[94,43398,32345],{"class":163},[94,43400,43401,43403,43405],{"class":96,"line":9894},[94,43402,32350],{"class":104},[94,43404,150],{"class":100},[94,43406,32340],{"class":104},[94,43408,43409],{"class":96,"line":9902},[94,43410,32359],{"class":163},[94,43412,43413,43415,43417],{"class":96,"line":9907},[94,43414,32364],{"class":104},[94,43416,150],{"class":100},[94,43418,32340],{"class":104},[94,43420,43421],{"class":96,"line":16586},[94,43422,32373],{"class":163},[94,43424,43425,43427,43429],{"class":96,"line":16592},[94,43426,32378],{"class":104},[94,43428,150],{"class":100},[94,43430,32340],{"class":104},[94,43432,43433],{"class":96,"line":16615},[94,43434,2381],{"emptyLinePlaceholder":20},[94,43436,43437],{"class":96,"line":16621},[94,43438,32391],{"class":163},[94,43440,43441,43443,43445],{"class":96,"line":16644},[94,43442,32396],{"class":104},[94,43444,150],{"class":100},[94,43446,32401],{"class":104},[94,43448,43449],{"class":96,"line":16658},[94,43450,2381],{"emptyLinePlaceholder":20},[94,43452,43453],{"class":96,"line":16678},[94,43454,2381],{"emptyLinePlaceholder":20},[94,43456,43457],{"class":96,"line":16684},[94,43458,32414],{"class":163},[94,43460,43461,43463,43465,43467,43469],{"class":96,"line":16695},[94,43462,3182],{"class":100},[94,43464,32421],{"class":104},[94,43466,26026],{"class":100},[94,43468,32426],{"class":153},[94,43470,32429],{"class":104},[94,43472,43473,43475,43477,43479,43481,43483,43485,43487,43489,43491,43493],{"class":96,"line":16718},[94,43474,32434],{"class":153},[94,43476,105],{"class":104},[94,43478,32439],{"class":209},[94,43480,32442],{"class":153},[94,43482,689],{"class":209},[94,43484,32442],{"class":153},[94,43486,356],{"class":209},[94,43488,32451],{"class":104},[94,43490,637],{"class":100},[94,43492,322],{"class":153},[94,43494,30480],{"class":104},[94,43496,43497,43499,43501,43503,43505,43507],{"class":96,"line":16740},[94,43498,32434],{"class":153},[94,43500,105],{"class":104},[94,43502,32466],{"class":209},[94,43504,560],{"class":100},[94,43506,551],{"class":153},[94,43508,111],{"class":104},[94,43510,43511],{"class":96,"line":16745},[94,43512,2381],{"emptyLinePlaceholder":20},[94,43514,43515],{"class":96,"line":16751},[94,43516,32481],{"class":163},[94,43518,43519],{"class":96,"line":16765},[94,43520,32486],{"class":163},[94,43522,43523,43525,43527],{"class":96,"line":16778},[94,43524,32491],{"class":104},[94,43526,150],{"class":100},[94,43528,32325],{"class":153},[94,43530,43531],{"class":96,"line":16783},[94,43532,32500],{"class":163},[94,43534,43535,43537,43539],{"class":96,"line":16797},[94,43536,32505],{"class":104},[94,43538,150],{"class":100},[94,43540,3066],{"class":153},[94,43542,43543],{"class":96,"line":16802},[94,43544,32514],{"class":163},[94,43546,43547,43549,43551],{"class":96,"line":16808},[94,43548,32519],{"class":104},[94,43550,150],{"class":100},[94,43552,32325],{"class":153},[94,43554,43555],{"class":96,"line":16813},[94,43556,32528],{"class":163},[94,43558,43559,43561,43563],{"class":96,"line":16827},[94,43560,32533],{"class":104},[94,43562,150],{"class":100},[94,43564,3066],{"class":153},[94,43566,43567],{"class":96,"line":16832},[94,43568,32542],{"class":163},[94,43570,43571,43573,43575],{"class":96,"line":16837},[94,43572,32547],{"class":104},[94,43574,150],{"class":100},[94,43576,3066],{"class":153},[94,43578,43579],{"class":96,"line":16851},[94,43580,32556],{"class":163},[94,43582,43583,43585,43587],{"class":96,"line":16863},[94,43584,32561],{"class":104},[94,43586,150],{"class":100},[94,43588,3066],{"class":153},[94,43590,43591],{"class":96,"line":16868},[94,43592,32570],{"class":163},[94,43594,43595,43597,43599,43601,43603],{"class":96,"line":16881},[94,43596,3384],{"class":100},[94,43598,31584],{"class":104},[94,43600,26026],{"class":100},[94,43602,31589],{"class":153},[94,43604,32583],{"class":104},[94,43606,43607],{"class":96,"line":16886},[94,43608,32588],{"class":163},[94,43610,43611,43613,43615],{"class":96,"line":16891},[94,43612,32593],{"class":104},[94,43614,150],{"class":100},[94,43616,32598],{"class":104},[94,43618,43619],{"class":96,"line":16896},[94,43620,32603],{"class":163},[94,43622,43623,43625,43627],{"class":96,"line":16909},[94,43624,32608],{"class":104},[94,43626,150],{"class":100},[94,43628,32613],{"class":104},[94,43630,43631],{"class":96,"line":16914},[94,43632,32619],{"class":163},[94,43634,43635],{"class":96,"line":32616},[94,43636,32625],{"class":104},[94,43638,43639],{"class":96,"line":32622},[94,43640,32631],{"class":163},[94,43642,43643],{"class":96,"line":32628},[94,43644,32637],{"class":163},[94,43646,43647,43649,43651],{"class":96,"line":32634},[94,43648,32643],{"class":104},[94,43650,150],{"class":100},[94,43652,32648],{"class":104},[94,43654,43655],{"class":96,"line":32640},[94,43656,32654],{"class":163},[94,43658,43659,43661,43663,43665,43667,43669,43671],{"class":96,"line":32651},[94,43660,32660],{"class":104},[94,43662,150],{"class":100},[94,43664,32665],{"class":104},[94,43666,32668],{"class":5198},[94,43668,150],{"class":100},[94,43670,322],{"class":153},[94,43672,111],{"class":104},[94,43674,43675],{"class":96,"line":32657},[94,43676,32680],{"class":163},[94,43678,43679,43681,43683],{"class":96,"line":32677},[94,43680,32686],{"class":104},[94,43682,150],{"class":100},[94,43684,32691],{"class":104},[94,43686,43687],{"class":96,"line":32683},[94,43688,32697],{"class":163},[94,43690,43691],{"class":96,"line":32694},[94,43692,32703],{"class":104},[94,43694,43695],{"class":96,"line":32700},[94,43696,32709],{"class":163},[94,43698,43699],{"class":96,"line":32706},[94,43700,32715],{"class":104},[94,43702,43703],{"class":96,"line":32712},[94,43704,32721],{"class":163},[94,43706,43707],{"class":96,"line":32718},[94,43708,32727],{"class":104},[94,43710,43711],{"class":96,"line":32724},[94,43712,32733],{"class":163},[94,43714,43715,43717,43719,43721,43723,43725,43727],{"class":96,"line":32730},[94,43716,32739],{"class":104},[94,43718,9459],{"class":100},[94,43720,32744],{"class":104},[94,43722,560],{"class":100},[94,43724,32749],{"class":104},[94,43726,296],{"class":153},[94,43728,111],{"class":104},[94,43730,43731],{"class":96,"line":32736},[94,43732,32759],{"class":163},[94,43734,43735,43737,43739,43741,43743],{"class":96,"line":32756},[94,43736,32765],{"class":104},[94,43738,9459],{"class":100},[94,43740,32770],{"class":104},[94,43742,2930],{"class":100},[94,43744,32775],{"class":104},[94,43746,43747],{"class":96,"line":32762},[94,43748,32781],{"class":163},[94,43750,43751,43753,43755,43757,43759],{"class":96,"line":32778},[94,43752,32787],{"class":104},[94,43754,9459],{"class":100},[94,43756,32749],{"class":104},[94,43758,296],{"class":153},[94,43760,111],{"class":104},[94,43762,43763],{"class":96,"line":32784},[94,43764,32801],{"class":163},[94,43766,43767,43769,43771,43773,43775],{"class":96,"line":32798},[94,43768,3384],{"class":100},[94,43770,32809],{"class":104},[94,43772,26026],{"class":100},[94,43774,31589],{"class":153},[94,43776,32816],{"class":104},[94,43778,43779],{"class":96,"line":32804},[94,43780,32822],{"class":163},[94,43782,43783,43785,43787],{"class":96,"line":32819},[94,43784,32593],{"class":104},[94,43786,150],{"class":100},[94,43788,32598],{"class":104},[94,43790,43791],{"class":96,"line":32825},[94,43792,32837],{"class":163},[94,43794,43795,43797,43799],{"class":96,"line":32834},[94,43796,32608],{"class":104},[94,43798,150],{"class":100},[94,43800,32613],{"class":104},[94,43802,43803],{"class":96,"line":32840},[94,43804,32852],{"class":163},[94,43806,43807],{"class":96,"line":32849},[94,43808,32858],{"class":104},[94,43810,43811],{"class":96,"line":32855},[94,43812,36339],{"class":163},[94,43814,43815,43817],{"class":96,"line":32861},[94,43816,32864],{"class":100},[94,43818,32867],{"class":104},[94,43820,43821],{"class":96,"line":32870},[94,43822,32873],{"class":163},[94,43824,43825,43827,43829],{"class":96,"line":32876},[94,43826,36354],{"class":104},[94,43828,150],{"class":100},[94,43830,32648],{"class":104},[94,43832,43833],{"class":96,"line":32887},[94,43834,32890],{"class":163},[94,43836,43837,43839,43841,43843,43845,43847,43849],{"class":96,"line":32893},[94,43838,36367],{"class":104},[94,43840,150],{"class":100},[94,43842,32665],{"class":104},[94,43844,32668],{"class":5198},[94,43846,150],{"class":100},[94,43848,322],{"class":153},[94,43850,111],{"class":104},[94,43852,43853],{"class":96,"line":32912},[94,43854,32915],{"class":163},[94,43856,43857,43859,43861],{"class":96,"line":32918},[94,43858,36388],{"class":104},[94,43860,150],{"class":100},[94,43862,32691],{"class":104},[94,43864,43865],{"class":96,"line":32929},[94,43866,32932],{"class":163},[94,43868,43869,43871,43873,43875,43877,43879,43881],{"class":96,"line":32935},[94,43870,36401],{"class":104},[94,43872,9459],{"class":100},[94,43874,36406],{"class":104},[94,43876,560],{"class":100},[94,43878,32749],{"class":104},[94,43880,296],{"class":153},[94,43882,111],{"class":104},[94,43884,43885,43887,43889,43891,43893],{"class":96,"line":32955},[94,43886,36419],{"class":104},[94,43888,9459],{"class":100},[94,43890,32770],{"class":104},[94,43892,2930],{"class":100},[94,43894,32775],{"class":104},[94,43896,43897],{"class":96,"line":32971},[94,43898,36432],{"class":163},[94,43900,43901,43903,43905,43907,43909],{"class":96,"line":32977},[94,43902,36437],{"class":104},[94,43904,9459],{"class":100},[94,43906,32749],{"class":104},[94,43908,296],{"class":153},[94,43910,111],{"class":104},[94,43912,43913],{"class":96,"line":32991},[94,43914,32994],{"class":163},[94,43916,43917],{"class":96,"line":32997},[94,43918,33000],{"class":163},[94,43920,43921,43923,43925],{"class":96,"line":33003},[94,43922,33006],{"class":104},[94,43924,689],{"class":100},[94,43926,33011],{"class":104},[94,43928,43929],{"class":96,"line":33014},[94,43930,33017],{"class":163},[94,43932,43933],{"class":96,"line":33020},[94,43934,33023],{"class":163},[94,43936,43937,43939,43941],{"class":96,"line":33026},[94,43938,33029],{"class":104},[94,43940,689],{"class":100},[94,43942,33011],{"class":104},[94,43944,43945],{"class":96,"line":33036},[94,43946,33039],{"class":163},[94,43948,43949,43951,43953],{"class":96,"line":33042},[94,43950,33045],{"class":104},[94,43952,689],{"class":100},[94,43954,33050],{"class":104},[94,43956,43957],{"class":96,"line":33053},[94,43958,33056],{"class":163},[94,43960,43961,43963,43965],{"class":96,"line":33059},[94,43962,33062],{"class":104},[94,43964,689],{"class":100},[94,43966,33050],{"class":104},[94,43968,43969],{"class":96,"line":33069},[94,43970,2381],{"emptyLinePlaceholder":20},[94,43972,43973],{"class":96,"line":33074},[94,43974,33077],{"class":163},[94,43976,43977,43979,43981,43983,43985,43987,43989,43991,43993,43995,43997,43999,44001,44003,44005,44007,44009,44011,44013,44015],{"class":96,"line":33080},[94,43978,32434],{"class":153},[94,43980,105],{"class":104},[94,43982,3573],{"class":209},[94,43984,32442],{"class":153},[94,43986,33091],{"class":209},[94,43988,1001],{"class":153},[94,43990,33096],{"class":100},[94,43992,1051],{"class":153},[94,43994,33101],{"class":209},[94,43996,1001],{"class":153},[94,43998,33096],{"class":100},[94,44000,1051],{"class":153},[94,44002,3573],{"class":209},[94,44004,33112],{"class":104},[94,44006,637],{"class":100},[94,44008,322],{"class":153},[94,44010,33119],{"class":104},[94,44012,637],{"class":100},[94,44014,322],{"class":153},[94,44016,33126],{"class":104},[94,44018,44019,44021,44023,44025,44027,44029,44031,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055,44057],{"class":96,"line":33129},[94,44020,32434],{"class":153},[94,44022,105],{"class":104},[94,44024,3573],{"class":209},[94,44026,32442],{"class":153},[94,44028,33140],{"class":209},[94,44030,1001],{"class":153},[94,44032,33096],{"class":100},[94,44034,1051],{"class":153},[94,44036,33149],{"class":209},[94,44038,1001],{"class":153},[94,44040,33096],{"class":100},[94,44042,1051],{"class":153},[94,44044,3573],{"class":209},[94,44046,33160],{"class":104},[94,44048,637],{"class":100},[94,44050,322],{"class":153},[94,44052,33167],{"class":104},[94,44054,637],{"class":100},[94,44056,322],{"class":153},[94,44058,33126],{"class":104},[94,44060,44061],{"class":96,"line":33176},[94,44062,2381],{"emptyLinePlaceholder":20},[94,44064,44065],{"class":96,"line":33181},[94,44066,33184],{"class":163},[94,44068,44069,44071,44073,44075,44077,44079,44081],{"class":96,"line":33187},[94,44070,2478],{"class":100},[94,44072,33192],{"class":104},[94,44074,637],{"class":100},[94,44076,322],{"class":153},[94,44078,1045],{"class":104},[94,44080,1065],{"class":100},[94,44082,33203],{"class":104},[94,44084,44085],{"class":96,"line":33206},[94,44086,33209],{"class":163},[94,44088,44089,44091,44093,44095,44097,44099,44101],{"class":96,"line":33212},[94,44090,33215],{"class":104},[94,44092,144],{"class":153},[94,44094,150],{"class":100},[94,44096,33222],{"class":104},[94,44098,637],{"class":100},[94,44100,322],{"class":153},[94,44102,33229],{"class":104},[94,44104,44105],{"class":96,"line":33232},[94,44106,33235],{"class":163},[94,44108,44109],{"class":96,"line":33238},[94,44110,33241],{"class":163},[94,44112,44113,44115,44117],{"class":96,"line":33244},[94,44114,33247],{"class":104},[94,44116,150],{"class":100},[94,44118,32297],{"class":104},[94,44120,44121],{"class":96,"line":33254},[94,44122,2381],{"emptyLinePlaceholder":20},[94,44124,44125],{"class":96,"line":33259},[94,44126,33262],{"class":163},[94,44128,44129,44131,44133,44135,44137],{"class":96,"line":33265},[94,44130,33268],{"class":104},[94,44132,150],{"class":100},[94,44134,33273],{"class":104},[94,44136,637],{"class":100},[94,44138,33278],{"class":104},[94,44140,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161,44163,44165,44167,44169,44171,44173,44175],{"class":96,"line":33281},[94,44142,32434],{"class":153},[94,44144,105],{"class":104},[94,44146,33288],{"class":209},[94,44148,1001],{"class":153},[94,44150,33293],{"class":100},[94,44152,1051],{"class":153},[94,44154,649],{"class":209},[94,44156,1001],{"class":153},[94,44158,33293],{"class":100},[94,44160,1051],{"class":153},[94,44162,33306],{"class":209},[94,44164,33309],{"class":104},[94,44166,33312],{"class":100},[94,44168,1012],{"class":153},[94,44170,33317],{"class":104},[94,44172,433],{"class":100},[94,44174,1012],{"class":153},[94,44176,30480],{"class":104},[94,44178,44179],{"class":96,"line":33326},[94,44180,36716],{"class":163},[94,44182,44183],{"class":96,"line":33332},[94,44184,36721],{"class":163},[94,44186,44187,44189,44191],{"class":96,"line":33338},[94,44188,36726],{"class":104},[94,44190,33350],{"class":209},[94,44192,111],{"class":104},[94,44194,44195],{"class":96,"line":33344},[94,44196,33370],{"class":163},[94,44198,44199,44201,44203,44205,44207,44209],{"class":96,"line":33355},[94,44200,33376],{"class":104},[94,44202,150],{"class":100},[94,44204,33381],{"class":104},[94,44206,33384],{"class":5198},[94,44208,150],{"class":100},[94,44210,1527],{"class":104},[94,44212,44213,44215,44217,44219],{"class":96,"line":33361},[94,44214,33394],{"class":209},[94,44216,964],{"class":104},[94,44218,33399],{"class":153},[94,44220,33402],{"class":104},[94,44222,44223,44225],{"class":96,"line":33367},[94,44224,33408],{"class":209},[94,44226,33411],{"class":104},[94,44228,44229,44231],{"class":96,"line":33373},[94,44230,33417],{"class":209},[94,44232,33420],{"class":104},[94,44234,44235,44237],{"class":96,"line":33391},[94,44236,33426],{"class":209},[94,44238,33429],{"class":104},[94,44240,44241,44243],{"class":96,"line":33405},[94,44242,33435],{"class":209},[94,44244,33438],{"class":104},[94,44246,44247],{"class":96,"line":33414},[94,44248,33444],{"class":104},[94,44250,44251],{"class":96,"line":33423},[94,44252,33450],{"class":163},[94,44254,44255,44257],{"class":96,"line":33432},[94,44256,4071],{"class":100},[94,44258,33458],{"class":104},[94,44260,44261],{"class":96,"line":33441},[94,44262,2381],{"emptyLinePlaceholder":20},[94,44264,44265],{"class":96,"line":33447},[94,44266,33469],{"class":163},[94,44268,44269,44271,44273],{"class":96,"line":33453},[94,44270,31930],{"class":100},[94,44272,33477],{"class":1944},[94,44274,33480],{"class":104},[94,44276,44277],{"class":96,"line":33461},[94,44278,33486],{"class":163},[94,44280,44281,44283,44285,44287,44289,44291,44293,44295],{"class":96,"line":33466},[94,44282,33492],{"class":104},[94,44284,31676],{"class":5198},[94,44286,150],{"class":100},[94,44288,105],{"class":104},[94,44290,603],{"class":153},[94,44292,483],{"class":104},[94,44294,398],{"class":153},[94,44296,30480],{"class":104},[94,44298,44299],{"class":96,"line":33472},[94,44300,33512],{"class":163},[94,44302,44303],{"class":96,"line":33483},[94,44304,33518],{"class":163},[94,44306,44307],{"class":96,"line":33489},[94,44308,33524],{"class":163},[94,44310,44311,44313,44315,44317,44319,44321,44323],{"class":96,"line":33509},[94,44312,31710],{"class":104},[94,44314,322],{"class":153},[94,44316,483],{"class":104},[94,44318,182],{"class":153},[94,44320,483],{"class":104},[94,44322,322],{"class":153},[94,44324,111],{"class":104},[94,44326,44327],{"class":96,"line":33515},[94,44328,33547],{"class":163},[94,44330,44331],{"class":96,"line":33521},[94,44332,33553],{"class":163},[94,44334,44335],{"class":96,"line":33527},[94,44336,33559],{"class":163},[94,44338,44339],{"class":96,"line":33544},[94,44340,33565],{"class":163},[94,44342,44343],{"class":96,"line":33550},[94,44344,33571],{"class":163},[94,44346,44347,44349,44351,44353,44355,44357,44359,44361,44363],{"class":96,"line":33556},[94,44348,33577],{"class":104},[94,44350,33580],{"class":209},[94,44352,33583],{"class":104},[94,44354,33586],{"class":209},[94,44356,483],{"class":104},[94,44358,33591],{"class":5198},[94,44360,150],{"class":100},[94,44362,33596],{"class":209},[94,44364,111],{"class":104},[94,44366,44367,44369,44371,44373,44375,44377,44379,44381,44383],{"class":96,"line":33562},[94,44368,33577],{"class":104},[94,44370,33580],{"class":209},[94,44372,33608],{"class":104},[94,44374,33611],{"class":209},[94,44376,483],{"class":104},[94,44378,33591],{"class":5198},[94,44380,150],{"class":100},[94,44382,33620],{"class":209},[94,44384,111],{"class":104},[94,44386,44387],{"class":96,"line":33568},[94,44388,33628],{"class":163},[94,44390,44391],{"class":96,"line":33574},[94,44392,33634],{"class":104},[94,44394,44395],{"class":96,"line":33601},[94,44396,33640],{"class":163},[94,44398,44399,44401,44403],{"class":96,"line":33625},[94,44400,33646],{"class":104},[94,44402,33649],{"class":209},[94,44404,111],{"class":104},[94,44406,44407,44409,44411],{"class":96,"line":33631},[94,44408,33657],{"class":104},[94,44410,33660],{"class":209},[94,44412,111],{"class":104},[94,44414,44415],{"class":96,"line":33637},[94,44416,33668],{"class":163},[94,44418,44419,44421,44423,44425,44427,44429,44431],{"class":96,"line":33643},[94,44420,31710],{"class":104},[94,44422,322],{"class":153},[94,44424,483],{"class":104},[94,44426,182],{"class":153},[94,44428,483],{"class":104},[94,44430,182],{"class":153},[94,44432,111],{"class":104},[94,44434,44435,44437,44439,44441,44443,44445,44447,44449,44451],{"class":96,"line":33654},[94,44436,33577],{"class":104},[94,44438,33580],{"class":209},[94,44440,33695],{"class":104},[94,44442,33586],{"class":209},[94,44444,483],{"class":104},[94,44446,33591],{"class":5198},[94,44448,150],{"class":100},[94,44450,33706],{"class":209},[94,44452,111],{"class":104},[94,44454,44455,44457,44459,44461,44463,44465,44467,44469,44471],{"class":96,"line":33665},[94,44456,33577],{"class":104},[94,44458,33580],{"class":209},[94,44460,33718],{"class":104},[94,44462,33611],{"class":209},[94,44464,483],{"class":104},[94,44466,33591],{"class":5198},[94,44468,150],{"class":100},[94,44470,33729],{"class":209},[94,44472,111],{"class":104},[94,44474,44475],{"class":96,"line":33671},[94,44476,33737],{"class":163},[94,44478,44479],{"class":96,"line":33688},[94,44480,33634],{"class":104},[94,44482,44483,44485,44487],{"class":96,"line":33711},[94,44484,33646],{"class":104},[94,44486,33580],{"class":209},[94,44488,111],{"class":104},[94,44490,44491,44493,44495],{"class":96,"line":33734},[94,44492,33657],{"class":104},[94,44494,33759],{"class":209},[94,44496,111],{"class":104},[94,44498,44499],{"class":96,"line":33740},[94,44500,33767],{"class":104},[94,44502,44503],{"class":96,"line":33745},[94,44504,2381],{"emptyLinePlaceholder":20},[94,44506,44507],{"class":96,"line":33754},[94,44508,33778],{"class":163},[94,44510,44511,44513,44515,44517,44519],{"class":96,"line":33764},[94,44512,1512],{"class":100},[94,44514,31203],{"class":153},[94,44516,2930],{"class":100},[94,44518,31208],{"class":209},[94,44520,3720],{"class":104},[94,44522,44523],{"class":96,"line":33770},[94,44524,33797],{"class":163},[94,44526,44527,44530,44532],{"class":96,"line":33775},[94,44528,44529],{"class":104},"    GoogLeNet",[94,44531,150],{"class":100},[94,44533,44534],{"class":104},"GoogLeNet(Inception)\n",[94,44536,44537,44539,44541],{"class":96,"line":33781},[94,44538,33814],{"class":104},[94,44540,150],{"class":100},[94,44542,33819],{"class":104},[94,44544,44545,44547,44549,44552,44554,44556,44558],{"class":96,"line":33794},[94,44546,33376],{"class":104},[94,44548,150],{"class":100},[94,44550,44551],{"class":104},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[94,44553,33832],{"class":5198},[94,44555,150],{"class":100},[94,44557,1056],{"class":153},[94,44559,111],{"class":104},[94,44561,44562],{"class":96,"line":33800},[94,44563,33844],{"class":104},[48,44565,44566],{"start":1160},[51,44567,40557],{},[85,44569,44571],{"className":30361,"code":44570,"language":30363,"meta":14,"style":14},"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",[91,44572,44573,44579,44589,44599,44603,44613,44624,44628,44632,44636,44644,44660,44670,44686,44696,44710,44714,44724,44734,44744,44750,44754,44758,44766,44770,44786,44794,44798,44802,44810,44818,44822,44826,44830,44834,44840,44844,44854,44862,44870,44874,44878,44882,44890,44894,44910,44914,44918,44922,44934,44938,44950,44954,44958,44970,44974,44984,44988,44992,45004,45008,45016,45020,45024,45032,45036,45044,45048,45052,45056,45060,45064,45080,45088,45092,45096,45144,45150,45154,45164,45172,45180,45184,45188,45192,45196,45204,45208,45224,45228,45236,45244],{"__ignoreMap":14},[94,44574,44575,44577],{"class":96,"line":97},[94,44576,30375],{"class":100},[94,44578,30378],{"class":104},[94,44580,44581,44583,44585,44587],{"class":96,"line":15},[94,44582,30375],{"class":100},[94,44584,31398],{"class":104},[94,44586,31366],{"class":100},[94,44588,31403],{"class":104},[94,44590,44591,44593,44595,44597],{"class":96,"line":1160},[94,44592,30720],{"class":100},[94,44594,31381],{"class":104},[94,44596,30375],{"class":100},[94,44598,31386],{"class":104},[94,44600,44601],{"class":96,"line":1175},[94,44602,33905],{"class":163},[94,44604,44605,44607,44609,44611],{"class":96,"line":1181},[94,44606,30720],{"class":100},[94,44608,31351],{"class":104},[94,44610,30375],{"class":100},[94,44612,31356],{"class":104},[94,44614,44615,44617,44619,44621],{"class":96,"line":1195},[94,44616,30720],{"class":100},[94,44618,31897],{"class":104},[94,44620,30375],{"class":100},[94,44622,44623],{"class":104}," GoogLeNet,Inception\n",[94,44625,44626],{"class":96,"line":1201},[94,44627,2381],{"emptyLinePlaceholder":20},[94,44629,44630],{"class":96,"line":1292},[94,44631,2381],{"emptyLinePlaceholder":20},[94,44633,44634],{"class":96,"line":1298},[94,44635,33934],{"class":163},[94,44637,44638,44640,44642],{"class":96,"line":1310},[94,44639,31930],{"class":100},[94,44641,33941],{"class":1944},[94,44643,31936],{"class":104},[94,44645,44646,44648,44650,44652,44654,44656,44658],{"class":96,"line":1593},[94,44647,33948],{"class":104},[94,44649,150],{"class":100},[94,44651,31438],{"class":104},[94,44653,31441],{"class":5198},[94,44655,150],{"class":100},[94,44657,31446],{"class":209},[94,44659,31449],{"class":104},[94,44661,44662,44664,44666,44668],{"class":96,"line":1598},[94,44663,33965],{"class":5198},[94,44665,150],{"class":100},[94,44667,33970],{"class":153},[94,44669,31449],{"class":104},[94,44671,44672,44674,44676,44678,44680,44682,44684],{"class":96,"line":1604},[94,44673,33977],{"class":5198},[94,44675,150],{"class":100},[94,44677,31476],{"class":104},[94,44679,31479],{"class":5198},[94,44681,150],{"class":100},[94,44683,35432],{"class":153},[94,44685,31487],{"class":104},[94,44687,44688,44690,44692,44694],{"class":96,"line":1609},[94,44689,33994],{"class":5198},[94,44691,150],{"class":100},[94,44693,31459],{"class":153},[94,44695,111],{"class":104},[94,44697,44698,44700,44702,44704,44706,44708],{"class":96,"line":1623},[94,44699,34005],{"class":104},[94,44701,150],{"class":100},[94,44703,31517],{"class":104},[94,44705,31520],{"class":5198},[94,44707,150],{"class":100},[94,44709,34016],{"class":104},[94,44711,44712],{"class":96,"line":1628},[94,44713,34021],{"class":163},[94,44715,44716,44718,44720,44722],{"class":96,"line":1634},[94,44717,34026],{"class":5198},[94,44719,150],{"class":100},[94,44721,322],{"class":153},[94,44723,31449],{"class":104},[94,44725,44726,44728,44730,44732],{"class":96,"line":1655},[94,44727,34037],{"class":5198},[94,44729,150],{"class":100},[94,44731,31459],{"class":153},[94,44733,31449],{"class":104},[94,44735,44736,44738,44740,44742],{"class":96,"line":1660},[94,44737,34048],{"class":5198},[94,44739,150],{"class":100},[94,44741,296],{"class":153},[94,44743,111],{"class":104},[94,44745,44746,44748],{"class":96,"line":1674},[94,44747,4071],{"class":100},[94,44749,34061],{"class":104},[94,44751,44752],{"class":96,"line":1679},[94,44753,2381],{"emptyLinePlaceholder":20},[94,44755,44756],{"class":96,"line":1708},[94,44757,34070],{"class":163},[94,44759,44760,44762,44764],{"class":96,"line":1713},[94,44761,31930],{"class":100},[94,44763,34077],{"class":1944},[94,44765,34080],{"class":104},[94,44767,44768],{"class":96,"line":1730},[94,44769,34085],{"class":163},[94,44771,44772,44774,44776,44778,44780,44782,44784],{"class":96,"line":1735},[94,44773,31220],{"class":104},[94,44775,150],{"class":100},[94,44777,31227],{"class":209},[94,44779,1685],{"class":100},[94,44781,31232],{"class":104},[94,44783,1682],{"class":100},[94,44785,34102],{"class":209},[94,44787,44788,44790,44792],{"class":96,"line":1740},[94,44789,31272],{"class":104},[94,44791,150],{"class":100},[94,44793,32272],{"class":104},[94,44795,44796],{"class":96,"line":1745},[94,44797,2381],{"emptyLinePlaceholder":20},[94,44799,44800],{"class":96,"line":1759},[94,44801,34119],{"class":163},[94,44803,44804,44806,44808],{"class":96,"line":1764},[94,44805,34124],{"class":104},[94,44807,150],{"class":100},[94,44809,32325],{"class":153},[94,44811,44812,44814,44816],{"class":96,"line":2558},[94,44813,34133],{"class":104},[94,44815,150],{"class":100},[94,44817,3066],{"class":153},[94,44819,44820],{"class":96,"line":2572},[94,44821,2381],{"emptyLinePlaceholder":20},[94,44823,44824],{"class":96,"line":2580},[94,44825,34146],{"class":163},[94,44827,44828],{"class":96,"line":2585},[94,44829,34151],{"class":163},[94,44831,44832],{"class":96,"line":2591},[94,44833,34156],{"class":163},[94,44835,44836,44838],{"class":96,"line":2597},[94,44837,34161],{"class":100},[94,44839,32867],{"class":104},[94,44841,44842],{"class":96,"line":2602},[94,44843,34168],{"class":163},[94,44845,44846,44848,44850,44852],{"class":96,"line":7930},[94,44847,3384],{"class":100},[94,44849,34175],{"class":104},[94,44851,26026],{"class":100},[94,44853,34180],{"class":104},[94,44855,44856,44858,44860],{"class":96,"line":7954},[94,44857,34185],{"class":104},[94,44859,150],{"class":100},[94,44861,34190],{"class":104},[94,44863,44864,44866,44868],{"class":96,"line":7959},[94,44865,34195],{"class":104},[94,44867,150],{"class":100},[94,44869,34200],{"class":104},[94,44871,44872],{"class":96,"line":7965},[94,44873,34205],{"class":163},[94,44875,44876],{"class":96,"line":7992},[94,44877,32858],{"class":104},[94,44879,44880],{"class":96,"line":7997},[94,44881,34214],{"class":163},[94,44883,44884,44886,44888],{"class":96,"line":8003},[94,44885,32643],{"class":104},[94,44887,150],{"class":100},[94,44889,34223],{"class":104},[94,44891,44892],{"class":96,"line":8015},[94,44893,34228],{"class":163},[94,44895,44896,44898,44900,44902,44904,44906,44908],{"class":96,"line":8027},[94,44897,32660],{"class":104},[94,44899,150],{"class":100},[94,44901,32665],{"class":104},[94,44903,32668],{"class":5198},[94,44905,150],{"class":100},[94,44907,322],{"class":153},[94,44909,111],{"class":104},[94,44911,44912],{"class":96,"line":8039},[94,44913,34249],{"class":163},[94,44915,44916],{"class":96,"line":9698},[94,44917,34254],{"class":163},[94,44919,44920],{"class":96,"line":9723},[94,44921,34259],{"class":163},[94,44923,44924,44926,44928,44930,44932],{"class":96,"line":9746},[94,44925,34264],{"class":104},[94,44927,9459],{"class":100},[94,44929,32770],{"class":104},[94,44931,2930],{"class":100},[94,44933,34273],{"class":104},[94,44935,44936],{"class":96,"line":9770},[94,44937,34278],{"class":163},[94,44939,44940,44942,44944,44946,44948],{"class":96,"line":9775},[94,44941,34283],{"class":104},[94,44943,9459],{"class":100},[94,44945,34288],{"class":104},[94,44947,296],{"class":153},[94,44949,111],{"class":104},[94,44951,44952],{"class":96,"line":9780},[94,44953,2381],{"emptyLinePlaceholder":20},[94,44955,44956],{"class":96,"line":9785},[94,44957,34301],{"class":163},[94,44959,44960,44962,44964,44966,44968],{"class":96,"line":9794},[94,44961,34306],{"class":104},[94,44963,150],{"class":100},[94,44965,34311],{"class":104},[94,44967,689],{"class":100},[94,44969,34316],{"class":104},[94,44971,44972],{"class":96,"line":9799},[94,44973,34321],{"class":163},[94,44975,44976,44978,44980,44982],{"class":96,"line":9805},[94,44977,32434],{"class":153},[94,44979,105],{"class":104},[94,44981,34330],{"class":209},[94,44983,34333],{"class":104},[94,44985,44986],{"class":96,"line":9826},[94,44987,2381],{"emptyLinePlaceholder":20},[94,44989,44990],{"class":96,"line":9832},[94,44991,34342],{"class":163},[94,44993,44994,44996,44998,45000,45002],{"class":96,"line":9846},[94,44995,1512],{"class":100},[94,44997,31203],{"class":153},[94,44999,2930],{"class":100},[94,45001,31208],{"class":209},[94,45003,3720],{"class":104},[94,45005,45006],{"class":96,"line":9852},[94,45007,34359],{"class":163},[94,45009,45010,45012,45014],{"class":96,"line":9879},[94,45011,31272],{"class":104},[94,45013,150],{"class":100},[94,45015,44534],{"class":104},[94,45017,45018],{"class":96,"line":9888},[94,45019,34372],{"class":163},[94,45021,45022],{"class":96,"line":9894},[94,45023,34377],{"class":163},[94,45025,45026,45028,45030],{"class":96,"line":9902},[94,45027,34382],{"class":104},[94,45029,34385],{"class":209},[94,45031,30480],{"class":104},[94,45033,45034],{"class":96,"line":9907},[94,45035,34392],{"class":163},[94,45037,45038,45040,45042],{"class":96,"line":16586},[94,45039,34005],{"class":104},[94,45041,150],{"class":100},[94,45043,34401],{"class":104},[94,45045,45046],{"class":96,"line":16592},[94,45047,34406],{"class":163},[94,45049,45050],{"class":96,"line":16615},[94,45051,34411],{"class":104},[94,45053,45054],{"class":96,"line":16621},[94,45055,2381],{"emptyLinePlaceholder":20},[94,45057,45058],{"class":96,"line":16644},[94,45059,34420],{"class":163},[94,45061,45062],{"class":96,"line":16658},[94,45063,34425],{"class":163},[94,45065,45066,45068,45070,45072,45074,45076,45078],{"class":96,"line":16678},[94,45067,31220],{"class":104},[94,45069,150],{"class":100},[94,45071,31227],{"class":209},[94,45073,1685],{"class":100},[94,45075,31232],{"class":104},[94,45077,1682],{"class":100},[94,45079,34102],{"class":209},[94,45081,45082,45084,45086],{"class":96,"line":16684},[94,45083,31272],{"class":104},[94,45085,150],{"class":100},[94,45087,32272],{"class":104},[94,45089,45090],{"class":96,"line":16695},[94,45091,34454],{"class":163},[94,45093,45094],{"class":96,"line":16718},[94,45095,34459],{"class":163},[94,45097,45098,45100,45102,45104,45106,45108,45110,45112,45114,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134,45136,45138,45140,45142],{"class":96,"line":16740},[94,45099,34464],{"class":104},[94,45101,150],{"class":100},[94,45103,995],{"class":104},[94,45105,34471],{"class":209},[94,45107,483],{"class":104},[94,45109,34476],{"class":209},[94,45111,483],{"class":104},[94,45113,34481],{"class":209},[94,45115,483],{"class":104},[94,45117,34486],{"class":209},[94,45119,483],{"class":104},[94,45121,34491],{"class":209},[94,45123,483],{"class":104},[94,45125,34496],{"class":209},[94,45127,483],{"class":104},[94,45129,34501],{"class":209},[94,45131,483],{"class":104},[94,45133,34506],{"class":209},[94,45135,483],{"class":104},[94,45137,34511],{"class":209},[94,45139,483],{"class":104},[94,45141,34516],{"class":209},[94,45143,33229],{"class":104},[94,45145,45146,45148],{"class":96,"line":16745},[94,45147,34161],{"class":100},[94,45149,32867],{"class":104},[94,45151,45152],{"class":96,"line":16751},[94,45153,34529],{"class":163},[94,45155,45156,45158,45160,45162],{"class":96,"line":16765},[94,45157,3384],{"class":100},[94,45159,34536],{"class":104},[94,45161,26026],{"class":100},[94,45163,34180],{"class":104},[94,45165,45166,45168,45170],{"class":96,"line":16778},[94,45167,32593],{"class":104},[94,45169,150],{"class":100},[94,45171,32598],{"class":104},[94,45173,45174,45176,45178],{"class":96,"line":16783},[94,45175,32608],{"class":104},[94,45177,150],{"class":100},[94,45179,32613],{"class":104},[94,45181,45182],{"class":96,"line":16797},[94,45183,2381],{"emptyLinePlaceholder":20},[94,45185,45186],{"class":96,"line":16802},[94,45187,34565],{"class":163},[94,45189,45190],{"class":96,"line":16808},[94,45191,32858],{"class":104},[94,45193,45194],{"class":96,"line":16813},[94,45195,34574],{"class":163},[94,45197,45198,45200,45202],{"class":96,"line":16827},[94,45199,32643],{"class":104},[94,45201,150],{"class":100},[94,45203,32648],{"class":104},[94,45205,45206],{"class":96,"line":16832},[94,45207,34587],{"class":163},[94,45209,45210,45212,45214,45216,45218,45220,45222],{"class":96,"line":16837},[94,45211,32660],{"class":104},[94,45213,150],{"class":100},[94,45215,32665],{"class":104},[94,45217,32668],{"class":5198},[94,45219,150],{"class":100},[94,45221,322],{"class":153},[94,45223,111],{"class":104},[94,45225,45226],{"class":96,"line":16851},[94,45227,34608],{"class":163},[94,45229,45230,45232,45234],{"class":96,"line":16863},[94,45231,34613],{"class":104},[94,45233,150],{"class":100},[94,45235,34618],{"class":104},[94,45237,45238,45240,45242],{"class":96,"line":16868},[94,45239,34623],{"class":104},[94,45241,150],{"class":100},[94,45243,34628],{"class":104},[94,45245,45246,45248,45250,45252,45254,45256,45258,45260],{"class":96,"line":16881},[94,45247,34633],{"class":153},[94,45249,105],{"class":104},[94,45251,34638],{"class":209},[94,45253,34641],{"class":104},[94,45255,34644],{"class":209},[94,45257,483],{"class":104},[94,45259,34649],{"class":209},[94,45261,34652],{"class":104},[65,45263,45265],{"id":45264},"_24训练自己的数据集","2.4.训练自己的数据集",[40,45267,45268],{},"猫狗分类任务",[40,45270,45271],{},"划分数据集和验证集",[85,45273,45275],{"className":30361,"code":45274,"language":30363,"meta":14,"style":14},"# 创建脚本，用于划分数据集和验证集\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",[91,45276,45277,45282,45289,45294,45305,45312,45316,45326,45340,45349,45353,45358,45368,45388,45392,45397,45407,45418,45431,45435,45440,45449,45459,45470,45474,45479,45489,45493,45498,45503,45508,45513,45518,45522,45532,45559,45572,45584,45611,45616,45621,45635,45640,45652,45667,45682,45690,45694,45699,45705,45717,45730,45735,45740,45745,45795,45801,45805],{"__ignoreMap":14},[94,45278,45279],{"class":96,"line":97},[94,45280,45281],{"class":163},"# 创建脚本，用于划分数据集和验证集\n",[94,45283,45284,45286],{"class":96,"line":15},[94,45285,30375],{"class":100},[94,45287,45288],{"class":104}," os\n",[94,45290,45291],{"class":96,"line":1160},[94,45292,45293],{"class":163},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[94,45295,45296,45298,45301,45303],{"class":96,"line":1175},[94,45297,30720],{"class":100},[94,45299,45300],{"class":104}," shutil ",[94,45302,30375],{"class":100},[94,45304,31805],{"class":104},[94,45306,45307,45309],{"class":96,"line":1181},[94,45308,30375],{"class":100},[94,45310,45311],{"class":104}," random\n",[94,45313,45314],{"class":96,"line":1195},[94,45315,2381],{"emptyLinePlaceholder":20},[94,45317,45318,45320,45323],{"class":96,"line":1201},[94,45319,31930],{"class":100},[94,45321,45322],{"class":1944}," mkfile",[94,45324,45325],{"class":104},"(file):\n",[94,45327,45328,45330,45332,45335,45338],{"class":96,"line":1292},[94,45329,3082],{"class":100},[94,45331,38913],{"class":100},[94,45333,45334],{"class":104}," os.path.exists(",[94,45336,45337],{"class":5198},"file",[94,45339,30769],{"class":104},[94,45341,45342,45345,45347],{"class":96,"line":1298},[94,45343,45344],{"class":104},"        os.makedirs(",[94,45346,45337],{"class":5198},[94,45348,111],{"class":104},[94,45350,45351],{"class":96,"line":1310},[94,45352,2381],{"emptyLinePlaceholder":20},[94,45354,45355],{"class":96,"line":1593},[94,45356,45357],{"class":163},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[94,45359,45360,45363,45365],{"class":96,"line":1598},[94,45361,45362],{"class":104},"file_path",[94,45364,150],{"class":100},[94,45366,45367],{"class":209},"'data_cat_dog'\n",[94,45369,45370,45373,45375,45378,45380,45383,45385],{"class":96,"line":1604},[94,45371,45372],{"class":104},"flower_class",[94,45374,150],{"class":100},[94,45376,45377],{"class":104},"[cla ",[94,45379,3006],{"class":100},[94,45381,45382],{"class":104}," cla ",[94,45384,26026],{"class":100},[94,45386,45387],{"class":104}," os.listdir(file_path)]\n",[94,45389,45390],{"class":96,"line":1609},[94,45391,2381],{"emptyLinePlaceholder":20},[94,45393,45394],{"class":96,"line":1623},[94,45395,45396],{"class":163},"# 创建训练集train文件夹\n",[94,45398,45399,45402,45405],{"class":96,"line":1628},[94,45400,45401],{"class":104},"mkfile(",[94,45403,45404],{"class":209},"'data\u002Ftrain'",[94,45406,111],{"class":104},[94,45408,45409,45411,45413,45415],{"class":96,"line":1634},[94,45410,3006],{"class":100},[94,45412,45382],{"class":104},[94,45414,26026],{"class":100},[94,45416,45417],{"class":104}," flower_class:\n",[94,45419,45420,45423,45426,45428],{"class":96,"line":1655},[94,45421,45422],{"class":104},"    mkfile(",[94,45424,45425],{"class":209},"'data\u002Ftrain\u002F'",[94,45427,586],{"class":100},[94,45429,45430],{"class":104},"cla)\n",[94,45432,45433],{"class":96,"line":1660},[94,45434,2381],{"emptyLinePlaceholder":20},[94,45436,45437],{"class":96,"line":1674},[94,45438,45439],{"class":163},"# 创建验证集val文件夹\n",[94,45441,45442,45444,45447],{"class":96,"line":1679},[94,45443,45401],{"class":104},[94,45445,45446],{"class":209},"'data\u002Ftest'",[94,45448,111],{"class":104},[94,45450,45451,45453,45455,45457],{"class":96,"line":1708},[94,45452,3006],{"class":100},[94,45454,45382],{"class":104},[94,45456,26026],{"class":100},[94,45458,45417],{"class":104},[94,45460,45461,45463,45466,45468],{"class":96,"line":1713},[94,45462,45422],{"class":104},[94,45464,45465],{"class":209},"'data\u002Ftest\u002F'",[94,45467,586],{"class":100},[94,45469,45430],{"class":104},[94,45471,45472],{"class":96,"line":1730},[94,45473,2381],{"emptyLinePlaceholder":20},[94,45475,45476],{"class":96,"line":1735},[94,45477,45478],{"class":163},"# 划分比例，训练集：测试集=9：1\n",[94,45480,45481,45484,45486],{"class":96,"line":1740},[94,45482,45483],{"class":104},"split_rate",[94,45485,150],{"class":100},[94,45487,45488],{"class":153},"0.1\n",[94,45490,45491],{"class":96,"line":1745},[94,45492,2381],{"emptyLinePlaceholder":20},[94,45494,45495],{"class":96,"line":1759},[94,45496,45497],{"class":163},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[94,45499,45500],{"class":96,"line":1764},[94,45501,45502],{"class":163},"# cla_path：当前类别的原始图片路径\n",[94,45504,45505],{"class":96,"line":2558},[94,45506,45507],{"class":163},"# images：当前类别下所有图片的文件名列表\n",[94,45509,45510],{"class":96,"line":2572},[94,45511,45512],{"class":163},"# num：该类别图片总数\n",[94,45514,45515],{"class":96,"line":2580},[94,45516,45517],{"class":163},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[94,45519,45520],{"class":96,"line":2585},[94,45521,2381],{"emptyLinePlaceholder":20},[94,45523,45524,45526,45528,45530],{"class":96,"line":2591},[94,45525,3006],{"class":100},[94,45527,45382],{"class":104},[94,45529,26026],{"class":100},[94,45531,45417],{"class":104},[94,45533,45534,45537,45539,45542,45544,45547,45550,45552,45554,45556],{"class":96,"line":2597},[94,45535,45536],{"class":104},"    cla_path ",[94,45538,150],{"class":100},[94,45540,45541],{"class":104}," file_path ",[94,45543,586],{"class":100},[94,45545,45546],{"class":209}," '\u002F'",[94,45548,45549],{"class":100}," +",[94,45551,45382],{"class":104},[94,45553,586],{"class":100},[94,45555,45546],{"class":209},[94,45557,45558],{"class":163},"  # 某一类别的子目录\n",[94,45560,45561,45564,45566,45569],{"class":96,"line":2602},[94,45562,45563],{"class":104},"    images ",[94,45565,150],{"class":100},[94,45567,45568],{"class":104}," os.listdir(cla_path)  ",[94,45570,45571],{"class":163},"# iamges 列表存储了该目录下所有图像的名称\n",[94,45573,45574,45577,45579,45581],{"class":96,"line":7930},[94,45575,45576],{"class":104},"    num ",[94,45578,150],{"class":100},[94,45580,7313],{"class":153},[94,45582,45583],{"class":104},"(images)\n",[94,45585,45586,45589,45591,45594,45596,45598,45600,45603,45605,45608],{"class":96,"line":7954},[94,45587,45588],{"class":104},"    eval_index ",[94,45590,150],{"class":100},[94,45592,45593],{"class":104}," random.sample(images, ",[94,45595,598],{"class":5198},[94,45597,150],{"class":100},[94,45599,108],{"class":153},[94,45601,45602],{"class":104},"(num ",[94,45604,560],{"class":100},[94,45606,45607],{"class":104}," split_rate))  ",[94,45609,45610],{"class":163},"# 从images列表中随机抽取 k 个图像名称\n",[94,45612,45613],{"class":96,"line":7959},[94,45614,45615],{"class":163},"    # 遍历该类别下的所有图片\n",[94,45617,45618],{"class":96,"line":7965},[94,45619,45620],{"class":163},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[94,45622,45623,45625,45628,45630,45632],{"class":96,"line":7992},[94,45624,3182],{"class":100},[94,45626,45627],{"class":104}," index, image ",[94,45629,26026],{"class":100},[94,45631,31589],{"class":153},[94,45633,45634],{"class":104},"(images):\n",[94,45636,45637],{"class":96,"line":7997},[94,45638,45639],{"class":163},"        # eval_index 中保存验证集val的图像名称\n",[94,45641,45642,45644,45647,45649],{"class":96,"line":8003},[94,45643,2478],{"class":100},[94,45645,45646],{"class":104}," image ",[94,45648,26026],{"class":100},[94,45650,45651],{"class":104}," eval_index:\n",[94,45653,45654,45657,45659,45662,45664],{"class":96,"line":8015},[94,45655,45656],{"class":104},"            image_path ",[94,45658,150],{"class":100},[94,45660,45661],{"class":104}," cla_path ",[94,45663,586],{"class":100},[94,45665,45666],{"class":104}," image\n",[94,45668,45669,45672,45674,45677,45679],{"class":96,"line":8027},[94,45670,45671],{"class":104},"            new_path ",[94,45673,150],{"class":100},[94,45675,45676],{"class":209}," 'data\u002Ftest\u002F'",[94,45678,45549],{"class":100},[94,45680,45681],{"class":104}," cla\n",[94,45683,45684,45687],{"class":96,"line":8039},[94,45685,45686],{"class":104},"            copy(image_path, new_path)  ",[94,45688,45689],{"class":163},"# 将选中的图像复制到新路径\n",[94,45691,45692],{"class":96,"line":9698},[94,45693,2381],{"emptyLinePlaceholder":20},[94,45695,45696],{"class":96,"line":9723},[94,45697,45698],{"class":163},"        # 其余的图像保存在训练集train中\n",[94,45700,45701,45703],{"class":96,"line":9746},[94,45702,2515],{"class":100},[94,45704,3720],{"class":104},[94,45706,45707,45709,45711,45713,45715],{"class":96,"line":9770},[94,45708,45656],{"class":104},[94,45710,150],{"class":100},[94,45712,45661],{"class":104},[94,45714,586],{"class":100},[94,45716,45666],{"class":104},[94,45718,45719,45721,45723,45726,45728],{"class":96,"line":9775},[94,45720,45671],{"class":104},[94,45722,150],{"class":100},[94,45724,45725],{"class":209}," 'data\u002Ftrain\u002F'",[94,45727,45549],{"class":100},[94,45729,45681],{"class":104},[94,45731,45732],{"class":96,"line":9780},[94,45733,45734],{"class":104},"            copy(image_path, new_path)\n",[94,45736,45737],{"class":96,"line":9785},[94,45738,45739],{"class":163},"            # 打印进度条信息\n",[94,45741,45742],{"class":96,"line":9794},[94,45743,45744],{"class":163},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[94,45746,45747,45749,45751,45753,45756,45758,45760,45763,45765,45767,45769,45772,45775,45777,45779,45782,45785,45787,45789,45792],{"class":96,"line":9799},[94,45748,32434],{"class":153},[94,45750,105],{"class":104},[94,45752,356],{"class":209},[94,45754,45755],{"class":153},"\\r",[94,45757,995],{"class":209},[94,45759,32442],{"class":153},[94,45761,45762],{"class":209},"] processing [",[94,45764,32442],{"class":153},[94,45766,689],{"class":209},[94,45768,32442],{"class":153},[94,45770,45771],{"class":209},"]\"",[94,45773,45774],{"class":104},".format(cla, index ",[94,45776,586],{"class":100},[94,45778,25101],{"class":153},[94,45780,45781],{"class":104},", num), ",[94,45783,45784],{"class":5198},"end",[94,45786,150],{"class":100},[94,45788,7634],{"class":209},[94,45790,45791],{"class":104},")  ",[94,45793,45794],{"class":163},"# processing bar\n",[94,45796,45797,45799],{"class":96,"line":9805},[94,45798,31282],{"class":153},[94,45800,1957],{"class":104},[94,45802,45803],{"class":96,"line":9826},[94,45804,2381],{"emptyLinePlaceholder":20},[94,45806,45807,45809,45811,45814],{"class":96,"line":9832},[94,45808,30398],{"class":153},[94,45810,105],{"class":104},[94,45812,45813],{"class":209},"\"processing done!\"",[94,45815,111],{"class":104},[40,45817,45818],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[21980,45820,45822],{"id":45821},"_242模型代码","2.4.2.模型代码",[40,45824,45825],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[85,45827,45829],{"className":30361,"code":45828,"language":30363,"meta":14,"style":14},"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",[91,45830,45831,45837,45847,45857,45861,45877,45885,45899,45909,45913,45943,45947,45981,46027,46031,46065,46111,46115,46119,46153,46183,46187,46195,46209,46231,46253,46271,46275,46289,46293,46297,46313,46317,46325,46339,46349,46393,46397,46425,46429,46439,46467,46471,46507,46511,46539,46543,46553,46585,46617,46645,46649,46659,46691,46723,46755,46787,46819,46847,46851,46861,46893,46925,46937,46941,46953,46957,46961,46973,46981,47001,47005,47009,47013,47017,47021,47025,47039,47047,47055,47067,47081,47089,47093,47101,47111,47121,47131,47141,47151,47157,47161,47165,47177,47197,47205],{"__ignoreMap":14},[94,45832,45833,45835],{"class":96,"line":97},[94,45834,30375],{"class":100},[94,45836,30378],{"class":104},[94,45838,45839,45841,45843,45845],{"class":96,"line":15},[94,45840,30720],{"class":100},[94,45842,30723],{"class":104},[94,45844,30375],{"class":100},[94,45846,30728],{"class":104},[94,45848,45849,45851,45853,45855],{"class":96,"line":1160},[94,45850,30720],{"class":100},[94,45852,30740],{"class":104},[94,45854,30375],{"class":100},[94,45856,30745],{"class":104},[94,45858,45859],{"class":96,"line":1175},[94,45860,2381],{"emptyLinePlaceholder":20},[94,45862,45863,45865,45867,45869,45871,45873,45875],{"class":96,"line":1181},[94,45864,14676],{"class":100},[94,45866,41476],{"class":1944},[94,45868,105],{"class":104},[94,45870,30761],{"class":1944},[94,45872,663],{"class":104},[94,45874,30766],{"class":1944},[94,45876,30769],{"class":104},[94,45878,45879,45881,45883],{"class":96,"line":1195},[94,45880,30784],{"class":100},[94,45882,30787],{"class":153},[94,45884,41495],{"class":104},[94,45886,45887,45889,45891,45893,45895,45897],{"class":96,"line":1201},[94,45888,30800],{"class":153},[94,45890,41502],{"class":104},[94,45892,30806],{"class":153},[94,45894,30809],{"class":104},[94,45896,30812],{"class":153},[94,45898,1957],{"class":104},[94,45900,45901,45903,45905,45907],{"class":96,"line":1292},[94,45902,30828],{"class":153},[94,45904,34754],{"class":104},[94,45906,150],{"class":100},[94,45908,34759],{"class":104},[94,45910,45911],{"class":96,"line":1298},[94,45912,41525],{"class":163},[94,45914,45915,45917,45919,45921,45923,45925,45927,45929,45931,45933,45935,45937,45939,45941],{"class":96,"line":1310},[94,45916,30828],{"class":153},[94,45918,41532],{"class":104},[94,45920,150],{"class":100},[94,45922,30836],{"class":104},[94,45924,30839],{"class":5198},[94,45926,150],{"class":100},[94,45928,41543],{"class":104},[94,45930,30848],{"class":5198},[94,45932,150],{"class":100},[94,45934,41550],{"class":104},[94,45936,30857],{"class":5198},[94,45938,150],{"class":100},[94,45940,322],{"class":153},[94,45942,111],{"class":104},[94,45944,45945],{"class":96,"line":1593},[94,45946,41563],{"class":163},[94,45948,45949,45951,45953,45955,45957,45959,45961,45963,45965,45967,45969,45971,45973,45975,45977,45979],{"class":96,"line":1598},[94,45950,30828],{"class":153},[94,45952,41570],{"class":104},[94,45954,150],{"class":100},[94,45956,30836],{"class":104},[94,45958,30839],{"class":5198},[94,45960,150],{"class":100},[94,45962,41543],{"class":104},[94,45964,30848],{"class":5198},[94,45966,150],{"class":100},[94,45968,41587],{"class":104},[94,45970,296],{"class":153},[94,45972,41592],{"class":104},[94,45974,30857],{"class":5198},[94,45976,150],{"class":100},[94,45978,322],{"class":153},[94,45980,111],{"class":104},[94,45982,45983,45985,45987,45989,45991,45993,45995,45997,45999,46001,46003,46005,46007,46009,46011,46013,46015,46017,46019,46021,46023,46025],{"class":96,"line":1604},[94,45984,30828],{"class":153},[94,45986,41607],{"class":104},[94,45988,150],{"class":100},[94,45990,30836],{"class":104},[94,45992,30839],{"class":5198},[94,45994,150],{"class":100},[94,45996,41587],{"class":104},[94,45998,296],{"class":153},[94,46000,41592],{"class":104},[94,46002,30848],{"class":5198},[94,46004,150],{"class":100},[94,46006,41587],{"class":104},[94,46008,322],{"class":153},[94,46010,41592],{"class":104},[94,46012,30857],{"class":5198},[94,46014,150],{"class":100},[94,46016,176],{"class":153},[94,46018,483],{"class":104},[94,46020,30866],{"class":5198},[94,46022,150],{"class":100},[94,46024,322],{"class":153},[94,46026,111],{"class":104},[94,46028,46029],{"class":96,"line":1609},[94,46030,41652],{"class":163},[94,46032,46033,46035,46037,46039,46041,46043,46045,46047,46049,46051,46053,46055,46057,46059,46061,46063],{"class":96,"line":1623},[94,46034,30828],{"class":153},[94,46036,41659],{"class":104},[94,46038,150],{"class":100},[94,46040,30836],{"class":104},[94,46042,30839],{"class":5198},[94,46044,150],{"class":100},[94,46046,41543],{"class":104},[94,46048,30848],{"class":5198},[94,46050,150],{"class":100},[94,46052,41676],{"class":104},[94,46054,296],{"class":153},[94,46056,41592],{"class":104},[94,46058,30857],{"class":5198},[94,46060,150],{"class":100},[94,46062,322],{"class":153},[94,46064,111],{"class":104},[94,46066,46067,46069,46071,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109],{"class":96,"line":1628},[94,46068,30828],{"class":153},[94,46070,41695],{"class":104},[94,46072,150],{"class":100},[94,46074,30836],{"class":104},[94,46076,30839],{"class":5198},[94,46078,150],{"class":100},[94,46080,41676],{"class":104},[94,46082,296],{"class":153},[94,46084,41592],{"class":104},[94,46086,30848],{"class":5198},[94,46088,150],{"class":100},[94,46090,41676],{"class":104},[94,46092,322],{"class":153},[94,46094,41592],{"class":104},[94,46096,30857],{"class":5198},[94,46098,150],{"class":100},[94,46100,424],{"class":153},[94,46102,483],{"class":104},[94,46104,30866],{"class":5198},[94,46106,150],{"class":100},[94,46108,182],{"class":153},[94,46110,111],{"class":104},[94,46112,46113],{"class":96,"line":1634},[94,46114,41740],{"class":163},[94,46116,46117],{"class":96,"line":1655},[94,46118,41745],{"class":163},[94,46120,46121,46123,46125,46127,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151],{"class":96,"line":1660},[94,46122,30828],{"class":153},[94,46124,41752],{"class":104},[94,46126,150],{"class":100},[94,46128,34812],{"class":104},[94,46130,30857],{"class":5198},[94,46132,150],{"class":100},[94,46134,176],{"class":153},[94,46136,483],{"class":104},[94,46138,30912],{"class":5198},[94,46140,150],{"class":100},[94,46142,322],{"class":153},[94,46144,483],{"class":104},[94,46146,30866],{"class":5198},[94,46148,150],{"class":100},[94,46150,322],{"class":153},[94,46152,111],{"class":104},[94,46154,46155,46157,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177,46179,46181],{"class":96,"line":1674},[94,46156,30828],{"class":153},[94,46158,41787],{"class":104},[94,46160,150],{"class":100},[94,46162,30836],{"class":104},[94,46164,30839],{"class":5198},[94,46166,150],{"class":100},[94,46168,41543],{"class":104},[94,46170,30848],{"class":5198},[94,46172,150],{"class":100},[94,46174,41804],{"class":104},[94,46176,30857],{"class":5198},[94,46178,150],{"class":100},[94,46180,322],{"class":153},[94,46182,111],{"class":104},[94,46184,46185],{"class":96,"line":1679},[94,46186,2381],{"emptyLinePlaceholder":20},[94,46188,46189,46191,46193],{"class":96,"line":1708},[94,46190,30784],{"class":100},[94,46192,31076],{"class":1944},[94,46194,31079],{"class":104},[94,46196,46197,46199,46201,46203,46205,46207],{"class":96,"line":1713},[94,46198,41829],{"class":104},[94,46200,150],{"class":100},[94,46202,30806],{"class":153},[94,46204,35167],{"class":104},[94,46206,30806],{"class":153},[94,46208,41840],{"class":104},[94,46210,46211,46213,46215,46217,46219,46221,46223,46225,46227,46229],{"class":96,"line":1730},[94,46212,7067],{"class":104},[94,46214,150],{"class":100},[94,46216,30806],{"class":153},[94,46218,35167],{"class":104},[94,46220,30806],{"class":153},[94,46222,41855],{"class":104},[94,46224,30806],{"class":153},[94,46226,35167],{"class":104},[94,46228,30806],{"class":153},[94,46230,41864],{"class":104},[94,46232,46233,46235,46237,46239,46241,46243,46245,46247,46249,46251],{"class":96,"line":1735},[94,46234,41869],{"class":104},[94,46236,150],{"class":100},[94,46238,30806],{"class":153},[94,46240,35167],{"class":104},[94,46242,30806],{"class":153},[94,46244,41880],{"class":104},[94,46246,30806],{"class":153},[94,46248,35167],{"class":104},[94,46250,30806],{"class":153},[94,46252,41889],{"class":104},[94,46254,46255,46257,46259,46261,46263,46265,46267,46269],{"class":96,"line":1740},[94,46256,41894],{"class":104},[94,46258,150],{"class":100},[94,46260,30806],{"class":153},[94,46262,35167],{"class":104},[94,46264,30806],{"class":153},[94,46266,41905],{"class":104},[94,46268,30806],{"class":153},[94,46270,41910],{"class":104},[94,46272,46273],{"class":96,"line":1745},[94,46274,41915],{"class":163},[94,46276,46277,46279,46281,46283,46285,46287],{"class":96,"line":1759},[94,46278,14734],{"class":100},[94,46280,41922],{"class":104},[94,46282,32668],{"class":5198},[94,46284,150],{"class":100},[94,46286,322],{"class":153},[94,46288,111],{"class":104},[94,46290,46291],{"class":96,"line":1764},[94,46292,2381],{"emptyLinePlaceholder":20},[94,46294,46295],{"class":96,"line":2558},[94,46296,41943],{"class":163},[94,46298,46299,46301,46303,46305,46307,46309,46311],{"class":96,"line":2572},[94,46300,14676],{"class":100},[94,46302,41950],{"class":1944},[94,46304,105],{"class":104},[94,46306,30761],{"class":1944},[94,46308,663],{"class":104},[94,46310,30766],{"class":1944},[94,46312,30769],{"class":104},[94,46314,46315],{"class":96,"line":2580},[94,46316,41965],{"class":163},[94,46318,46319,46321,46323],{"class":96,"line":2585},[94,46320,30784],{"class":100},[94,46322,30787],{"class":153},[94,46324,41974],{"class":104},[94,46326,46327,46329,46331,46333,46335,46337],{"class":96,"line":2591},[94,46328,30800],{"class":153},[94,46330,41981],{"class":104},[94,46332,30806],{"class":153},[94,46334,30809],{"class":104},[94,46336,30812],{"class":153},[94,46338,1957],{"class":104},[94,46340,46341,46343,46345,46347],{"class":96,"line":2597},[94,46342,30828],{"class":153},[94,46344,41996],{"class":104},[94,46346,150],{"class":100},[94,46348,37992],{"class":104},[94,46350,46351,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391],{"class":96,"line":2602},[94,46352,37997],{"class":104},[94,46354,30839],{"class":5198},[94,46356,150],{"class":100},[94,46358,176],{"class":153},[94,46360,483],{"class":104},[94,46362,30848],{"class":5198},[94,46364,150],{"class":100},[94,46366,308],{"class":153},[94,46368,483],{"class":104},[94,46370,30857],{"class":5198},[94,46372,150],{"class":100},[94,46374,474],{"class":153},[94,46376,483],{"class":104},[94,46378,30912],{"class":5198},[94,46380,150],{"class":100},[94,46382,182],{"class":153},[94,46384,483],{"class":104},[94,46386,30866],{"class":5198},[94,46388,150],{"class":100},[94,46390,176],{"class":153},[94,46392,38030],{"class":104},[94,46394,46395],{"class":96,"line":7930},[94,46396,38035],{"class":104},[94,46398,46399,46401,46403,46405,46407,46409,46411,46413,46415,46417,46419,46421,46423],{"class":96,"line":7954},[94,46400,38080],{"class":104},[94,46402,30857],{"class":5198},[94,46404,150],{"class":100},[94,46406,176],{"class":153},[94,46408,483],{"class":104},[94,46410,30912],{"class":5198},[94,46412,150],{"class":100},[94,46414,182],{"class":153},[94,46416,483],{"class":104},[94,46418,30866],{"class":5198},[94,46420,150],{"class":100},[94,46422,322],{"class":153},[94,46424,111],{"class":104},[94,46426,46427],{"class":96,"line":7959},[94,46428,38109],{"class":104},[94,46430,46431,46433,46435,46437],{"class":96,"line":7965},[94,46432,30828],{"class":153},[94,46434,42087],{"class":104},[94,46436,150],{"class":100},[94,46438,37992],{"class":104},[94,46440,46441,46443,46445,46447,46449,46451,46453,46455,46457,46459,46461,46463,46465],{"class":96,"line":7992},[94,46442,37997],{"class":104},[94,46444,30839],{"class":5198},[94,46446,150],{"class":100},[94,46448,308],{"class":153},[94,46450,483],{"class":104},[94,46452,30848],{"class":5198},[94,46454,150],{"class":100},[94,46456,308],{"class":153},[94,46458,483],{"class":104},[94,46460,30857],{"class":5198},[94,46462,150],{"class":100},[94,46464,322],{"class":153},[94,46466,38030],{"class":104},[94,46468,46469],{"class":96,"line":7997},[94,46470,38035],{"class":104},[94,46472,46473,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505],{"class":96,"line":8003},[94,46474,37997],{"class":104},[94,46476,30839],{"class":5198},[94,46478,150],{"class":100},[94,46480,308],{"class":153},[94,46482,483],{"class":104},[94,46484,30848],{"class":5198},[94,46486,150],{"class":100},[94,46488,42142],{"class":153},[94,46490,483],{"class":104},[94,46492,30857],{"class":5198},[94,46494,150],{"class":100},[94,46496,176],{"class":153},[94,46498,483],{"class":104},[94,46500,30866],{"class":5198},[94,46502,150],{"class":100},[94,46504,322],{"class":153},[94,46506,38030],{"class":104},[94,46508,46509],{"class":96,"line":8015},[94,46510,38035],{"class":104},[94,46512,46513,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533,46535,46537],{"class":96,"line":8027},[94,46514,38080],{"class":104},[94,46516,30857],{"class":5198},[94,46518,150],{"class":100},[94,46520,176],{"class":153},[94,46522,483],{"class":104},[94,46524,30912],{"class":5198},[94,46526,150],{"class":100},[94,46528,182],{"class":153},[94,46530,483],{"class":104},[94,46532,30866],{"class":5198},[94,46534,150],{"class":100},[94,46536,322],{"class":153},[94,46538,111],{"class":104},[94,46540,46541],{"class":96,"line":8039},[94,46542,38109],{"class":104},[94,46544,46545,46547,46549,46551],{"class":96,"line":9698},[94,46546,30828],{"class":153},[94,46548,42203],{"class":104},[94,46550,150],{"class":100},[94,46552,37992],{"class":104},[94,46554,46555,46557,46559,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583],{"class":96,"line":9723},[94,46556,42212],{"class":104},[94,46558,42142],{"class":153},[94,46560,483],{"class":104},[94,46562,308],{"class":153},[94,46564,42221],{"class":104},[94,46566,314],{"class":153},[94,46568,483],{"class":104},[94,46570,32053],{"class":153},[94,46572,42230],{"class":104},[94,46574,706],{"class":153},[94,46576,483],{"class":104},[94,46578,302],{"class":153},[94,46580,42239],{"class":104},[94,46582,302],{"class":153},[94,46584,38030],{"class":104},[94,46586,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611,46613,46615],{"class":96,"line":9746},[94,46588,42212],{"class":104},[94,46590,34853],{"class":153},[94,46592,483],{"class":104},[94,46594,32053],{"class":153},[94,46596,42221],{"class":104},[94,46598,32053],{"class":153},[94,46600,483],{"class":104},[94,46602,42142],{"class":153},[94,46604,42230],{"class":104},[94,46606,302],{"class":153},[94,46608,483],{"class":104},[94,46610,314],{"class":153},[94,46612,42239],{"class":104},[94,46614,308],{"class":153},[94,46616,38030],{"class":104},[94,46618,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643],{"class":96,"line":9770},[94,46620,38080],{"class":104},[94,46622,30857],{"class":5198},[94,46624,150],{"class":100},[94,46626,176],{"class":153},[94,46628,483],{"class":104},[94,46630,30912],{"class":5198},[94,46632,150],{"class":100},[94,46634,182],{"class":153},[94,46636,483],{"class":104},[94,46638,30866],{"class":5198},[94,46640,150],{"class":100},[94,46642,322],{"class":153},[94,46644,111],{"class":104},[94,46646,46647],{"class":96,"line":9775},[94,46648,38109],{"class":104},[94,46650,46651,46653,46655,46657],{"class":96,"line":9780},[94,46652,30828],{"class":153},[94,46654,42314],{"class":104},[94,46656,150],{"class":100},[94,46658,37992],{"class":104},[94,46660,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681,46683,46685,46687,46689],{"class":96,"line":9785},[94,46662,42212],{"class":104},[94,46664,42325],{"class":153},[94,46666,483],{"class":104},[94,46668,42142],{"class":153},[94,46670,42221],{"class":104},[94,46672,314],{"class":153},[94,46674,483],{"class":104},[94,46676,42338],{"class":153},[94,46678,42230],{"class":104},[94,46680,706],{"class":153},[94,46682,483],{"class":104},[94,46684,712],{"class":153},[94,46686,42239],{"class":104},[94,46688,308],{"class":153},[94,46690,38030],{"class":104},[94,46692,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715,46717,46719,46721],{"class":96,"line":9794},[94,46694,42212],{"class":104},[94,46696,38440],{"class":153},[94,46698,483],{"class":104},[94,46700,21030],{"class":153},[94,46702,42221],{"class":104},[94,46704,723],{"class":153},[94,46706,483],{"class":104},[94,46708,31484],{"class":153},[94,46710,42230],{"class":104},[94,46712,905],{"class":153},[94,46714,483],{"class":104},[94,46716,308],{"class":153},[94,46718,42239],{"class":104},[94,46720,308],{"class":153},[94,46722,38030],{"class":104},[94,46724,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751,46753],{"class":96,"line":9799},[94,46726,42212],{"class":104},[94,46728,38440],{"class":153},[94,46730,483],{"class":104},[94,46732,32053],{"class":153},[94,46734,42221],{"class":104},[94,46736,32053],{"class":153},[94,46738,483],{"class":104},[94,46740,34853],{"class":153},[94,46742,42230],{"class":104},[94,46744,905],{"class":153},[94,46746,483],{"class":104},[94,46748,308],{"class":153},[94,46750,42239],{"class":104},[94,46752,308],{"class":153},[94,46754,38030],{"class":104},[94,46756,46757,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785],{"class":96,"line":9805},[94,46758,42212],{"class":104},[94,46760,38440],{"class":153},[94,46762,483],{"class":104},[94,46764,723],{"class":153},[94,46766,42221],{"class":104},[94,46768,32053],{"class":153},[94,46770,483],{"class":104},[94,46772,42435],{"class":153},[94,46774,42230],{"class":104},[94,46776,302],{"class":153},[94,46778,483],{"class":104},[94,46780,308],{"class":153},[94,46782,42239],{"class":104},[94,46784,308],{"class":153},[94,46786,38030],{"class":104},[94,46788,46789,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815,46817],{"class":96,"line":9826},[94,46790,42212],{"class":104},[94,46792,42456],{"class":153},[94,46794,483],{"class":104},[94,46796,34853],{"class":153},[94,46798,42221],{"class":104},[94,46800,21030],{"class":153},[94,46802,483],{"class":104},[94,46804,42469],{"class":153},[94,46806,42230],{"class":104},[94,46808,302],{"class":153},[94,46810,483],{"class":104},[94,46812,32053],{"class":153},[94,46814,42239],{"class":104},[94,46816,32053],{"class":153},[94,46818,38030],{"class":104},[94,46820,46821,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845],{"class":96,"line":9832},[94,46822,38080],{"class":104},[94,46824,30857],{"class":5198},[94,46826,150],{"class":100},[94,46828,176],{"class":153},[94,46830,483],{"class":104},[94,46832,30912],{"class":5198},[94,46834,150],{"class":100},[94,46836,182],{"class":153},[94,46838,483],{"class":104},[94,46840,30866],{"class":5198},[94,46842,150],{"class":100},[94,46844,322],{"class":153},[94,46846,111],{"class":104},[94,46848,46849],{"class":96,"line":9846},[94,46850,38109],{"class":104},[94,46852,46853,46855,46857,46859],{"class":96,"line":9852},[94,46854,30828],{"class":153},[94,46856,42522],{"class":104},[94,46858,150],{"class":100},[94,46860,37992],{"class":104},[94,46862,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885,46887,46889,46891],{"class":96,"line":9879},[94,46864,42212],{"class":104},[94,46866,42533],{"class":153},[94,46868,483],{"class":104},[94,46870,34853],{"class":153},[94,46872,42221],{"class":104},[94,46874,21030],{"class":153},[94,46876,483],{"class":104},[94,46878,42469],{"class":153},[94,46880,42230],{"class":104},[94,46882,302],{"class":153},[94,46884,483],{"class":104},[94,46886,32053],{"class":153},[94,46888,42239],{"class":104},[94,46890,32053],{"class":153},[94,46892,38030],{"class":104},[94,46894,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921,46923],{"class":96,"line":9888},[94,46896,42212],{"class":104},[94,46898,42533],{"class":153},[94,46900,483],{"class":104},[94,46902,34923],{"class":153},[94,46904,42221],{"class":104},[94,46906,42142],{"class":153},[94,46908,483],{"class":104},[94,46910,34923],{"class":153},[94,46912,42230],{"class":104},[94,46914,712],{"class":153},[94,46916,483],{"class":104},[94,46918,32053],{"class":153},[94,46920,42239],{"class":104},[94,46922,32053],{"class":153},[94,46924,38030],{"class":104},[94,46926,46927,46929,46931,46933,46935],{"class":96,"line":9894},[94,46928,42596],{"class":104},[94,46930,322],{"class":153},[94,46932,483],{"class":104},[94,46934,322],{"class":153},[94,46936,42605],{"class":104},[94,46938,46939],{"class":96,"line":9902},[94,46940,38773],{"class":104},[94,46942,46943,46945,46947,46949,46951],{"class":96,"line":9907},[94,46944,38778],{"class":104},[94,46946,42616],{"class":153},[94,46948,483],{"class":104},[94,46950,182],{"class":153},[94,46952,111],{"class":104},[94,46954,46955],{"class":96,"line":16586},[94,46956,38109],{"class":104},[94,46958,46959],{"class":96,"line":16592},[94,46960,42631],{"class":163},[94,46962,46963,46965,46967,46969,46971],{"class":96,"line":16615},[94,46964,3384],{"class":100},[94,46966,38851],{"class":104},[94,46968,26026],{"class":100},[94,46970,38856],{"class":153},[94,46972,38859],{"class":104},[94,46974,46975,46977,46979],{"class":96,"line":16621},[94,46976,4623],{"class":100},[94,46978,38871],{"class":153},[94,46980,38874],{"class":104},[94,46982,46983,46985,46987,46989,46991,46993,46995,46997,46999],{"class":96,"line":16644},[94,46984,38884],{"class":104},[94,46986,42658],{"class":5198},[94,46988,150],{"class":100},[94,46990,42663],{"class":209},[94,46992,483],{"class":104},[94,46994,38887],{"class":5198},[94,46996,150],{"class":100},[94,46998,38892],{"class":209},[94,47000,111],{"class":104},[94,47002,47003],{"class":96,"line":16658},[94,47004,42678],{"class":163},[94,47006,47007],{"class":96,"line":16678},[94,47008,42683],{"class":163},[94,47010,47011],{"class":96,"line":16684},[94,47012,42688],{"class":163},[94,47014,47015],{"class":96,"line":16695},[94,47016,42693],{"class":163},[94,47018,47019],{"class":96,"line":16718},[94,47020,42698],{"class":163},[94,47022,47023],{"class":96,"line":16740},[94,47024,42703],{"class":163},[94,47026,47027,47029,47031,47033,47035,47037],{"class":96,"line":16745},[94,47028,38904],{"class":100},[94,47030,38907],{"class":104},[94,47032,38910],{"class":100},[94,47034,38913],{"class":100},[94,47036,38916],{"class":153},[94,47038,3720],{"class":104},[94,47040,47041,47043,47045],{"class":96,"line":16751},[94,47042,38928],{"class":104},[94,47044,296],{"class":153},[94,47046,111],{"class":104},[94,47048,47049,47051,47053],{"class":96,"line":16765},[94,47050,42730],{"class":100},[94,47052,38871],{"class":153},[94,47054,38947],{"class":104},[94,47056,47057,47059,47061,47063,47065],{"class":96,"line":16778},[94,47058,42739],{"class":104},[94,47060,296],{"class":153},[94,47062,483],{"class":104},[94,47064,38969],{"class":153},[94,47066,111],{"class":104},[94,47068,47069,47071,47073,47075,47077,47079],{"class":96,"line":16783},[94,47070,42752],{"class":100},[94,47072,38907],{"class":104},[94,47074,38910],{"class":100},[94,47076,38913],{"class":100},[94,47078,38916],{"class":153},[94,47080,3720],{"class":104},[94,47082,47083,47085,47087],{"class":96,"line":16797},[94,47084,42767],{"class":104},[94,47086,296],{"class":153},[94,47088,111],{"class":104},[94,47090,47091],{"class":96,"line":16802},[94,47092,35148],{"class":163},[94,47094,47095,47097,47099],{"class":96,"line":16808},[94,47096,30784],{"class":100},[94,47098,31076],{"class":1944},[94,47100,31079],{"class":104},[94,47102,47103,47105,47107,47109],{"class":96,"line":16813},[94,47104,31084],{"class":104},[94,47106,150],{"class":100},[94,47108,30806],{"class":153},[94,47110,42794],{"class":104},[94,47112,47113,47115,47117,47119],{"class":96,"line":16827},[94,47114,31084],{"class":104},[94,47116,150],{"class":100},[94,47118,30806],{"class":153},[94,47120,42805],{"class":104},[94,47122,47123,47125,47127,47129],{"class":96,"line":16832},[94,47124,31084],{"class":104},[94,47126,150],{"class":100},[94,47128,30806],{"class":153},[94,47130,42816],{"class":104},[94,47132,47133,47135,47137,47139],{"class":96,"line":16837},[94,47134,31084],{"class":104},[94,47136,150],{"class":100},[94,47138,30806],{"class":153},[94,47140,42827],{"class":104},[94,47142,47143,47145,47147,47149],{"class":96,"line":16851},[94,47144,31084],{"class":104},[94,47146,150],{"class":100},[94,47148,30806],{"class":153},[94,47150,42838],{"class":104},[94,47152,47153,47155],{"class":96,"line":16863},[94,47154,14734],{"class":100},[94,47156,31192],{"class":104},[94,47158,47159],{"class":96,"line":16868},[94,47160,2381],{"emptyLinePlaceholder":20},[94,47162,47163],{"class":96,"line":16881},[94,47164,42853],{"class":163},[94,47166,47167,47169,47171,47173,47175],{"class":96,"line":16886},[94,47168,1512],{"class":100},[94,47170,31203],{"class":153},[94,47172,2930],{"class":100},[94,47174,31208],{"class":209},[94,47176,3720],{"class":104},[94,47178,47179,47181,47183,47185,47187,47189,47191,47193,47195],{"class":96,"line":16891},[94,47180,31220],{"class":104},[94,47182,150],{"class":100},[94,47184,30434],{"class":104},[94,47186,31227],{"class":209},[94,47188,1685],{"class":100},[94,47190,31232],{"class":104},[94,47192,1682],{"class":100},[94,47194,30459],{"class":209},[94,47196,111],{"class":104},[94,47198,47199,47201,47203],{"class":96,"line":16896},[94,47200,31272],{"class":104},[94,47202,150],{"class":100},[94,47204,42894],{"class":104},[94,47206,47207,47209,47211,47213,47215,47217,47219,47221],{"class":96,"line":16909},[94,47208,31282],{"class":153},[94,47210,31285],{"class":104},[94,47212,322],{"class":153},[94,47214,483],{"class":104},[94,47216,31484],{"class":153},[94,47218,483],{"class":104},[94,47220,31484],{"class":153},[94,47222,31298],{"class":104},[21980,47224,47226],{"id":47225},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[40,47228,47229],{},"计算图片的均值与方差，用于训练中归一化处理操作",[85,47231,47233],{"className":30361,"code":47232,"language":30363,"meta":14,"style":14},"# 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",[91,47234,47235,47240,47253,47258,47264,47269,47279,47283,47288,47298,47302,47307,47317,47334,47338,47343,47355,47367,47398,47407,47417,47427,47431,47436,47451,47455,47460,47465,47470,47480,47485,47510,47514,47519,47534,47538,47551,47555,47560,47565,47570,47575,47580,47590,47600,47623,47631,47639,47647,47651,47663,47667,47672,47676,47680,47687,47707,47731,47738,47752,47757,47762,47766,47780,47784,47796],{"__ignoreMap":14},[94,47236,47237],{"class":96,"line":97},[94,47238,47239],{"class":163},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[94,47241,47242,47244,47247,47250],{"class":96,"line":15},[94,47243,30720],{"class":100},[94,47245,47246],{"class":153}," PIL",[94,47248,47249],{"class":100}," import",[94,47251,47252],{"class":104}," Image\n",[94,47254,47255],{"class":96,"line":1160},[94,47256,47257],{"class":163},"# os 用来处理文件夹和文件路径\n",[94,47259,47260,47262],{"class":96,"line":1175},[94,47261,30375],{"class":100},[94,47263,45288],{"class":104},[94,47265,47266],{"class":96,"line":1181},[94,47267,47268],{"class":163},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[94,47270,47271,47273,47275,47277],{"class":96,"line":1195},[94,47272,30375],{"class":100},[94,47274,31363],{"class":104},[94,47276,31366],{"class":100},[94,47278,31369],{"class":104},[94,47280,47281],{"class":96,"line":1201},[94,47282,2381],{"emptyLinePlaceholder":20},[94,47284,47285],{"class":96,"line":1292},[94,47286,47287],{"class":163},"# 文件夹路径，包含所有图片文件\n",[94,47289,47290,47293,47295],{"class":96,"line":1298},[94,47291,47292],{"class":104},"folder_path ",[94,47294,150],{"class":100},[94,47296,47297],{"class":209}," 'data_cat_dog'\n",[94,47299,47300],{"class":96,"line":1310},[94,47301,2381],{"emptyLinePlaceholder":20},[94,47303,47304],{"class":96,"line":1593},[94,47305,47306],{"class":163},"# 初始化累积变量\n",[94,47308,47309,47312,47314],{"class":96,"line":1598},[94,47310,47311],{"class":104},"total_pixels ",[94,47313,150],{"class":100},[94,47315,47316],{"class":153}," 0\n",[94,47318,47319,47322,47324,47327,47329,47331],{"class":96,"line":1604},[94,47320,47321],{"class":104},"sum_normalized_pixel_values ",[94,47323,150],{"class":100},[94,47325,47326],{"class":104}," np.zeros(",[94,47328,176],{"class":153},[94,47330,45791],{"class":104},[94,47332,47333],{"class":163},"# 如果是RGB图像，需要三个通道的均值和方差\n",[94,47335,47336],{"class":96,"line":1609},[94,47337,2381],{"emptyLinePlaceholder":20},[94,47339,47340],{"class":96,"line":1623},[94,47341,47342],{"class":163},"# 遍历文件夹中的图片文件\n",[94,47344,47345,47347,47350,47352],{"class":96,"line":1628},[94,47346,3006],{"class":100},[94,47348,47349],{"class":104}," root, dirs, files ",[94,47351,26026],{"class":100},[94,47353,47354],{"class":104}," os.walk(folder_path):\n",[94,47356,47357,47359,47362,47364],{"class":96,"line":1634},[94,47358,3182],{"class":100},[94,47360,47361],{"class":104}," filename ",[94,47363,26026],{"class":100},[94,47365,47366],{"class":104}," files:\n",[94,47368,47369,47371,47374,47377,47379,47382,47384,47387,47389,47392,47395],{"class":96,"line":1655},[94,47370,2478],{"class":100},[94,47372,47373],{"class":104}," filename.endswith((",[94,47375,47376],{"class":209},"'.jpg'",[94,47378,12417],{"class":104},[94,47380,47381],{"class":209},"'.jpeg'",[94,47383,12417],{"class":104},[94,47385,47386],{"class":209},"'.png'",[94,47388,12417],{"class":104},[94,47390,47391],{"class":209},"'.bmp'",[94,47393,47394],{"class":104},")):  ",[94,47396,47397],{"class":163},"# 可根据实际情况添加其他格式\n",[94,47399,47400,47402,47404],{"class":96,"line":1660},[94,47401,45656],{"class":104},[94,47403,150],{"class":100},[94,47405,47406],{"class":104}," os.path.join(root, filename)\n",[94,47408,47409,47412,47414],{"class":96,"line":1674},[94,47410,47411],{"class":104},"            image ",[94,47413,150],{"class":100},[94,47415,47416],{"class":104}," Image.open(image_path)\n",[94,47418,47419,47422,47424],{"class":96,"line":1679},[94,47420,47421],{"class":104},"            image_array ",[94,47423,150],{"class":100},[94,47425,47426],{"class":104}," np.array(image)\n",[94,47428,47429],{"class":96,"line":1708},[94,47430,2381],{"emptyLinePlaceholder":20},[94,47432,47433],{"class":96,"line":1713},[94,47434,47435],{"class":163},"            # 归一化像素值到0-1之间\n",[94,47437,47438,47441,47443,47446,47448],{"class":96,"line":1730},[94,47439,47440],{"class":104},"            normalized_image_array ",[94,47442,150],{"class":100},[94,47444,47445],{"class":104}," image_array ",[94,47447,689],{"class":100},[94,47449,47450],{"class":153}," 255.0\n",[94,47452,47453],{"class":96,"line":1735},[94,47454,2381],{"emptyLinePlaceholder":20},[94,47456,47457],{"class":96,"line":1740},[94,47458,47459],{"class":163},"            # print(image_path)\n",[94,47461,47462],{"class":96,"line":1745},[94,47463,47464],{"class":163},"            # print(normalized_image_array.shape)\n",[94,47466,47467],{"class":96,"line":1759},[94,47468,47469],{"class":163},"            # 累积归一化后的像素值和像素数量\n",[94,47471,47472,47475,47477],{"class":96,"line":1764},[94,47473,47474],{"class":104},"            total_pixels ",[94,47476,9459],{"class":100},[94,47478,47479],{"class":104}," normalized_image_array.size\n",[94,47481,47482],{"class":96,"line":2558},[94,47483,47484],{"class":163},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[94,47486,47487,47490,47492,47495,47498,47500,47502,47504,47506,47508],{"class":96,"line":2572},[94,47488,47489],{"class":104},"            sum_normalized_pixel_values ",[94,47491,9459],{"class":100},[94,47493,47494],{"class":104}," np.sum(normalized_image_array, ",[94,47496,47497],{"class":5198},"axis",[94,47499,150],{"class":100},[94,47501,105],{"class":104},[94,47503,296],{"class":153},[94,47505,12417],{"class":104},[94,47507,322],{"class":153},[94,47509,30480],{"class":104},[94,47511,47512],{"class":96,"line":2580},[94,47513,2381],{"emptyLinePlaceholder":20},[94,47515,47516],{"class":96,"line":2585},[94,47517,47518],{"class":163},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[94,47520,47521,47524,47526,47529,47531],{"class":96,"line":2591},[94,47522,47523],{"class":104},"mean ",[94,47525,150],{"class":100},[94,47527,47528],{"class":104}," sum_normalized_pixel_values ",[94,47530,689],{"class":100},[94,47532,47533],{"class":104}," total_pixels\n",[94,47535,47536],{"class":96,"line":2597},[94,47537,2381],{"emptyLinePlaceholder":20},[94,47539,47540,47543,47545,47547,47549],{"class":96,"line":2602},[94,47541,47542],{"class":104},"sum_squared_diff ",[94,47544,150],{"class":100},[94,47546,47326],{"class":104},[94,47548,176],{"class":153},[94,47550,111],{"class":104},[94,47552,47553],{"class":96,"line":7930},[94,47554,2381],{"emptyLinePlaceholder":20},[94,47556,47557],{"class":96,"line":7954},[94,47558,47559],{"class":163},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[94,47561,47562],{"class":96,"line":7959},[94,47563,47564],{"class":163},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[94,47566,47567],{"class":96,"line":7965},[94,47568,47569],{"class":163},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[94,47571,47572],{"class":96,"line":7992},[94,47573,47574],{"class":163},"# Image.open(image_path)：打开图片\n",[94,47576,47577],{"class":96,"line":7997},[94,47578,47579],{"class":163},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[94,47581,47582,47584,47586,47588],{"class":96,"line":8003},[94,47583,3006],{"class":100},[94,47585,47349],{"class":104},[94,47587,26026],{"class":100},[94,47589,47354],{"class":104},[94,47591,47592,47594,47596,47598],{"class":96,"line":8015},[94,47593,3182],{"class":100},[94,47595,47361],{"class":104},[94,47597,26026],{"class":100},[94,47599,47366],{"class":104},[94,47601,47602,47604,47606,47608,47610,47612,47614,47616,47618,47620],{"class":96,"line":8027},[94,47603,2478],{"class":100},[94,47605,47373],{"class":104},[94,47607,47376],{"class":209},[94,47609,12417],{"class":104},[94,47611,47381],{"class":209},[94,47613,12417],{"class":104},[94,47615,47386],{"class":209},[94,47617,12417],{"class":104},[94,47619,47391],{"class":209},[94,47621,47622],{"class":104},")):\n",[94,47624,47625,47627,47629],{"class":96,"line":8039},[94,47626,45656],{"class":104},[94,47628,150],{"class":100},[94,47630,47406],{"class":104},[94,47632,47633,47635,47637],{"class":96,"line":9698},[94,47634,47411],{"class":104},[94,47636,150],{"class":100},[94,47638,47416],{"class":104},[94,47640,47641,47643,47645],{"class":96,"line":9723},[94,47642,47421],{"class":104},[94,47644,150],{"class":100},[94,47646,47426],{"class":104},[94,47648,47649],{"class":96,"line":9746},[94,47650,47435],{"class":163},[94,47652,47653,47655,47657,47659,47661],{"class":96,"line":9770},[94,47654,47440],{"class":104},[94,47656,150],{"class":100},[94,47658,47445],{"class":104},[94,47660,689],{"class":100},[94,47662,47450],{"class":153},[94,47664,47665],{"class":96,"line":9775},[94,47666,47464],{"class":163},[94,47668,47669],{"class":96,"line":9780},[94,47670,47671],{"class":163},"            # print(mean.shape)\n",[94,47673,47674],{"class":96,"line":9785},[94,47675,47459],{"class":163},[94,47677,47678],{"class":96,"line":9794},[94,47679,2381],{"emptyLinePlaceholder":20},[94,47681,47682,47685],{"class":96,"line":9799},[94,47683,47684],{"class":100},"            try",[94,47686,3720],{"class":104},[94,47688,47689,47692,47694,47697,47699,47702,47704],{"class":96,"line":9805},[94,47690,47691],{"class":104},"                diff ",[94,47693,150],{"class":100},[94,47695,47696],{"class":104}," (normalized_image_array ",[94,47698,637],{"class":100},[94,47700,47701],{"class":104}," mean) ",[94,47703,10643],{"class":100},[94,47705,47706],{"class":153}," 2\n",[94,47708,47709,47712,47714,47717,47719,47721,47723,47725,47727,47729],{"class":96,"line":9826},[94,47710,47711],{"class":104},"                sum_squared_diff ",[94,47713,9459],{"class":100},[94,47715,47716],{"class":104}," np.sum(diff, ",[94,47718,47497],{"class":5198},[94,47720,150],{"class":100},[94,47722,105],{"class":104},[94,47724,296],{"class":153},[94,47726,12417],{"class":104},[94,47728,322],{"class":153},[94,47730,30480],{"class":104},[94,47732,47733,47736],{"class":96,"line":9832},[94,47734,47735],{"class":100},"            except",[94,47737,3720],{"class":104},[94,47739,47740,47743,47745,47747,47750],{"class":96,"line":9846},[94,47741,47742],{"class":153},"                print",[94,47744,105],{"class":104},[94,47746,157],{"class":100},[94,47748,47749],{"class":209},"\"捕获到自定义异常\"",[94,47751,111],{"class":104},[94,47753,47754],{"class":96,"line":9852},[94,47755,47756],{"class":163},"            # diff = (normalized_image_array - mean) ** 2\n",[94,47758,47759],{"class":96,"line":9879},[94,47760,47761],{"class":163},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[94,47763,47764],{"class":96,"line":9888},[94,47765,2381],{"emptyLinePlaceholder":20},[94,47767,47768,47771,47773,47776,47778],{"class":96,"line":9894},[94,47769,47770],{"class":104},"variance ",[94,47772,150],{"class":100},[94,47774,47775],{"class":104}," sum_squared_diff ",[94,47777,689],{"class":100},[94,47779,47533],{"class":104},[94,47781,47782],{"class":96,"line":9902},[94,47783,2381],{"emptyLinePlaceholder":20},[94,47785,47786,47788,47790,47793],{"class":96,"line":9907},[94,47787,30398],{"class":153},[94,47789,105],{"class":104},[94,47791,47792],{"class":209},"\"Mean:\"",[94,47794,47795],{"class":104},", mean)\n",[94,47797,47798,47800,47802,47805],{"class":96,"line":16586},[94,47799,30398],{"class":153},[94,47801,105],{"class":104},[94,47803,47804],{"class":209},"\"Variance:\"",[94,47806,47807],{"class":104},", variance)\n",[85,47809,47811],{"className":30361,"code":47810,"language":30363,"meta":14,"style":14},"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",[91,47812,47813,47819,47825,47835,47841,47851,47865,47875,47885,47895,47899,47909,47919,47923,47927,47935,47940,47945,47964,47968,47973,47978,47983,47988,48029,48034,48044,48049,48062,48067,48072,48077,48082,48087,48091,48096,48101,48123,48127,48159,48173,48183,48193,48197,48207,48221,48231,48241,48251,48257,48261,48265,48269,48273,48277,48285,48305,48309,48313,48317,48321,48337,48341,48345,48353,48357,48361,48369,48373,48377,48381,48389,48393,48397,48401,48409,48413,48421,48425,48433,48437,48445,48449,48457,48461,48465,48473,48477,48481,48493,48517,48531,48535,48539,48543,48551,48555,48563,48567,48575,48579,48587,48591,48599,48603,48611,48615,48627,48631,48639,48643,48651,48655,48659,48663,48667,48675,48679,48695,48699,48707,48711,48715,48719,48723,48727,48731,48735,48751,48755,48767,48771,48783,48787,48799,48803,48811,48815,48823,48827,48831,48835,48841,48845,48853,48857,48873,48877,48885,48889,48905,48917,48921,48933,48937,48941,48949,48953,48957,48965,48969,48977,48981,48989,48993,48997,49039,49081,49085,49089,49105,49109,49125,49129,49133,49141,49145,49149,49161,49199,49203,49207,49215,49219,49233,49243,49249,49255,49261,49267,49271,49275,49281,49285,49289,49297,49301,49319,49323,49327,49331,49347,49351,49355,49359,49363,49367,49387,49407,49411,49415,49419,49427,49435,49439,49455,49475,49495,49499,49504,49513,49522,49527,49532,49537,49550,49555,49564,49573,49590],{"__ignoreMap":14},[94,47814,47815,47817],{"class":96,"line":97},[94,47816,30375],{"class":100},[94,47818,31805],{"class":104},[94,47820,47821,47823],{"class":96,"line":15},[94,47822,30375],{"class":100},[94,47824,31812],{"class":104},[94,47826,47827,47829,47831,47833],{"class":96,"line":1160},[94,47828,30375],{"class":100},[94,47830,31823],{"class":104},[94,47832,31366],{"class":100},[94,47834,31828],{"class":104},[94,47836,47837,47839],{"class":96,"line":1175},[94,47838,30375],{"class":100},[94,47840,30378],{"class":104},[94,47842,47843,47845,47847,47849],{"class":96,"line":1181},[94,47844,30720],{"class":100},[94,47846,31398],{"class":104},[94,47848,30375],{"class":100},[94,47850,31845],{"class":104},[94,47852,47853,47855,47857,47859,47862],{"class":96,"line":1195},[94,47854,30720],{"class":100},[94,47856,31351],{"class":104},[94,47858,30375],{"class":100},[94,47860,47861],{"class":104}," ImageFolder ",[94,47863,47864],{"class":163},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[94,47866,47867,47869,47871,47873],{"class":96,"line":1201},[94,47868,30720],{"class":100},[94,47870,31381],{"class":104},[94,47872,30375],{"class":100},[94,47874,31386],{"class":104},[94,47876,47877,47879,47881,47883],{"class":96,"line":1292},[94,47878,30375],{"class":100},[94,47880,31398],{"class":104},[94,47882,31366],{"class":100},[94,47884,31403],{"class":104},[94,47886,47887,47889,47891,47893],{"class":96,"line":1298},[94,47888,30375],{"class":100},[94,47890,31415],{"class":104},[94,47892,31366],{"class":100},[94,47894,31420],{"class":104},[94,47896,47897],{"class":96,"line":1310},[94,47898,31890],{"class":163},[94,47900,47901,47903,47905,47907],{"class":96,"line":1593},[94,47902,30720],{"class":100},[94,47904,31897],{"class":104},[94,47906,30375],{"class":100},[94,47908,43014],{"class":104},[94,47910,47911,47913,47915,47917],{"class":96,"line":1598},[94,47912,30720],{"class":100},[94,47914,30723],{"class":104},[94,47916,30375],{"class":100},[94,47918,30728],{"class":104},[94,47920,47921],{"class":96,"line":1604},[94,47922,2381],{"emptyLinePlaceholder":20},[94,47924,47925],{"class":96,"line":1609},[94,47926,31925],{"class":163},[94,47928,47929,47931,47933],{"class":96,"line":1623},[94,47930,31930],{"class":100},[94,47932,31933],{"class":1944},[94,47934,31936],{"class":104},[94,47936,47937],{"class":96,"line":1628},[94,47938,47939],{"class":163},"    # 导入自己的数据集，并进行数据处理\n",[94,47941,47942],{"class":96,"line":1634},[94,47943,47944],{"class":163},"    # 定义数据集的路径\n",[94,47946,47947,47950,47952,47954,47956,47958,47962],{"class":96,"line":1655},[94,47948,47949],{"class":153},"    ROOT_PATH",[94,47951,150],{"class":100},[94,47953,775],{"class":100},[94,47955,356],{"class":209},[94,47957,663],{"class":153},[94,47959,47961],{"class":47960},"sA_wV","\u002Fdata\u002Ftrain",[94,47963,25116],{"class":209},[94,47965,47966],{"class":96,"line":1660},[94,47967,2381],{"emptyLinePlaceholder":20},[94,47969,47970],{"class":96,"line":1674},[94,47971,47972],{"class":163},"    # 定义归一化方法\n",[94,47974,47975],{"class":96,"line":1679},[94,47976,47977],{"class":163},"    # 这里需要先计算一下数据集的均值和方差\n",[94,47979,47980],{"class":96,"line":1708},[94,47981,47982],{"class":163},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[94,47984,47985],{"class":96,"line":1713},[94,47986,47987],{"class":163},"    # 第一个参数是均值，第二个参数是方差\n",[94,47989,47990,47993,47995,47998,48001,48003,48006,48008,48011,48014,48017,48019,48022,48024,48027],{"class":96,"line":1730},[94,47991,47992],{"class":104},"    normalize",[94,47994,150],{"class":100},[94,47996,47997],{"class":104},"transforms.Normalize([",[94,47999,48000],{"class":153},"0.162",[94,48002,483],{"class":104},[94,48004,48005],{"class":153},"0.151",[94,48007,483],{"class":104},[94,48009,48010],{"class":153},"0.138",[94,48012,48013],{"class":104},"],[",[94,48015,48016],{"class":153},"0.058",[94,48018,483],{"class":104},[94,48020,48021],{"class":153},"0.052",[94,48023,483],{"class":104},[94,48025,48026],{"class":153},"0.048",[94,48028,4638],{"class":104},[94,48030,48031],{"class":96,"line":1735},[94,48032,48033],{"class":163},"    # 定义数据集处理方法变量\n",[94,48035,48036,48039,48041],{"class":96,"line":1740},[94,48037,48038],{"class":104},"    train_transform",[94,48040,150],{"class":100},[94,48042,48043],{"class":104},"transforms.Compose([\n",[94,48045,48046],{"class":96,"line":1745},[94,48047,48048],{"class":163},"        # 调整图像大小为224*224\n",[94,48050,48051,48054,48056,48058,48060],{"class":96,"line":1759},[94,48052,48053],{"class":104},"        transforms.Resize((",[94,48055,31484],{"class":153},[94,48057,483],{"class":104},[94,48059,31484],{"class":153},[94,48061,42605],{"class":104},[94,48063,48064],{"class":96,"line":1764},[94,48065,48066],{"class":163},"        # 将图像转换为张量\n",[94,48068,48069],{"class":96,"line":2558},[94,48070,48071],{"class":104},"        transforms.ToTensor(),\n",[94,48073,48074],{"class":96,"line":2572},[94,48075,48076],{"class":104},"        normalize])\n",[94,48078,48079],{"class":96,"line":2580},[94,48080,48081],{"class":163},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[94,48083,48084],{"class":96,"line":2585},[94,48085,48086],{"class":163},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[94,48088,48089],{"class":96,"line":2591},[94,48090,2381],{"emptyLinePlaceholder":20},[94,48092,48093],{"class":96,"line":2597},[94,48094,48095],{"class":163},"    # 加载数据集\n",[94,48097,48098],{"class":96,"line":2602},[94,48099,48100],{"class":163},"    # 传入数据集路径与处理方法\n",[94,48102,48103,48105,48107,48110,48113,48115,48118,48120],{"class":96,"line":7930},[94,48104,31941],{"class":104},[94,48106,150],{"class":100},[94,48108,48109],{"class":104},"ImageFolder(",[94,48111,48112],{"class":153},"ROOT_PATH",[94,48114,483],{"class":104},[94,48116,48117],{"class":5198},"transform",[94,48119,150],{"class":100},[94,48121,48122],{"class":104},"train_transform)\n",[94,48124,48125],{"class":96,"line":7954},[94,48126,2381],{"emptyLinePlaceholder":20},[94,48128,48129,48131,48133,48135,48137,48139,48141,48143,48145,48147,48149,48151,48153,48155,48157],{"class":96,"line":7959},[94,48130,31993],{"class":104},[94,48132,150],{"class":100},[94,48134,31998],{"class":104},[94,48136,32001],{"class":153},[94,48138,105],{"class":104},[94,48140,32006],{"class":153},[94,48142,560],{"class":100},[94,48144,7340],{"class":153},[94,48146,32013],{"class":104},[94,48148,32001],{"class":153},[94,48150,105],{"class":104},[94,48152,32020],{"class":153},[94,48154,560],{"class":100},[94,48156,7340],{"class":153},[94,48158,32027],{"class":104},[94,48160,48161,48163,48165,48167,48169,48171],{"class":96,"line":7965},[94,48162,32032],{"class":104},[94,48164,150],{"class":100},[94,48166,32037],{"class":104},[94,48168,31520],{"class":5198},[94,48170,150],{"class":100},[94,48172,31525],{"class":104},[94,48174,48175,48177,48179,48181],{"class":96,"line":7992},[94,48176,32048],{"class":5198},[94,48178,150],{"class":100},[94,48180,302],{"class":153},[94,48182,31449],{"class":104},[94,48184,48185,48187,48189,48191],{"class":96,"line":7997},[94,48186,32060],{"class":5198},[94,48188,150],{"class":100},[94,48190,31459],{"class":153},[94,48192,31449],{"class":104},[94,48194,48195],{"class":96,"line":8003},[94,48196,32071],{"class":163},[94,48198,48199,48201,48203,48205],{"class":96,"line":8015},[94,48200,32076],{"class":5198},[94,48202,150],{"class":100},[94,48204,500],{"class":153},[94,48206,111],{"class":104},[94,48208,48209,48211,48213,48215,48217,48219],{"class":96,"line":8027},[94,48210,32087],{"class":104},[94,48212,150],{"class":100},[94,48214,31517],{"class":104},[94,48216,31520],{"class":5198},[94,48218,150],{"class":100},[94,48220,32098],{"class":104},[94,48222,48223,48225,48227,48229],{"class":96,"line":8039},[94,48224,32103],{"class":5198},[94,48226,150],{"class":100},[94,48228,302],{"class":153},[94,48230,31449],{"class":104},[94,48232,48233,48235,48237,48239],{"class":96,"line":9698},[94,48234,32114],{"class":5198},[94,48236,150],{"class":100},[94,48238,31459],{"class":153},[94,48240,31449],{"class":104},[94,48242,48243,48245,48247,48249],{"class":96,"line":9723},[94,48244,32125],{"class":5198},[94,48246,150],{"class":100},[94,48248,500],{"class":153},[94,48250,111],{"class":104},[94,48252,48253,48255],{"class":96,"line":9746},[94,48254,4071],{"class":100},[94,48256,32138],{"class":104},[94,48258,48259],{"class":96,"line":9770},[94,48260,2381],{"emptyLinePlaceholder":20},[94,48262,48263],{"class":96,"line":9775},[94,48264,32147],{"class":163},[94,48266,48267],{"class":96,"line":9780},[94,48268,32152],{"class":163},[94,48270,48271],{"class":96,"line":9785},[94,48272,2381],{"emptyLinePlaceholder":20},[94,48274,48275],{"class":96,"line":9794},[94,48276,32161],{"class":163},[94,48278,48279,48281,48283],{"class":96,"line":9799},[94,48280,31930],{"class":100},[94,48282,32168],{"class":1944},[94,48284,32171],{"class":104},[94,48286,48287,48289,48291,48293,48295,48297,48299,48301,48303],{"class":96,"line":9805},[94,48288,31220],{"class":104},[94,48290,150],{"class":100},[94,48292,30434],{"class":104},[94,48294,31227],{"class":209},[94,48296,1685],{"class":100},[94,48298,31232],{"class":104},[94,48300,1682],{"class":100},[94,48302,32190],{"class":209},[94,48304,111],{"class":104},[94,48306,48307],{"class":96,"line":9826},[94,48308,2381],{"emptyLinePlaceholder":20},[94,48310,48311],{"class":96,"line":9832},[94,48312,32205],{"class":163},[94,48314,48315],{"class":96,"line":9846},[94,48316,32210],{"class":163},[94,48318,48319],{"class":96,"line":9852},[94,48320,32215],{"class":163},[94,48322,48323,48325,48327,48329,48331,48333,48335],{"class":96,"line":9879},[94,48324,32220],{"class":104},[94,48326,150],{"class":100},[94,48328,32225],{"class":104},[94,48330,32228],{"class":5198},[94,48332,150],{"class":100},[94,48334,32233],{"class":153},[94,48336,111],{"class":104},[94,48338,48339],{"class":96,"line":9888},[94,48340,2381],{"emptyLinePlaceholder":20},[94,48342,48343],{"class":96,"line":9894},[94,48344,32244],{"class":163},[94,48346,48347,48349,48351],{"class":96,"line":9902},[94,48348,32249],{"class":104},[94,48350,150],{"class":100},[94,48352,32254],{"class":104},[94,48354,48355],{"class":96,"line":9907},[94,48356,2381],{"emptyLinePlaceholder":20},[94,48358,48359],{"class":96,"line":16586},[94,48360,32263],{"class":163},[94,48362,48363,48365,48367],{"class":96,"line":16592},[94,48364,31272],{"class":104},[94,48366,150],{"class":100},[94,48368,32272],{"class":104},[94,48370,48371],{"class":96,"line":16615},[94,48372,32277],{"class":163},[94,48374,48375],{"class":96,"line":16621},[94,48376,32282],{"class":163},[94,48378,48379],{"class":96,"line":16644},[94,48380,32287],{"class":163},[94,48382,48383,48385,48387],{"class":96,"line":16658},[94,48384,32292],{"class":104},[94,48386,150],{"class":100},[94,48388,32297],{"class":104},[94,48390,48391],{"class":96,"line":16678},[94,48392,2381],{"emptyLinePlaceholder":20},[94,48394,48395],{"class":96,"line":16684},[94,48396,32310],{"class":163},[94,48398,48399],{"class":96,"line":16695},[94,48400,32315],{"class":163},[94,48402,48403,48405,48407],{"class":96,"line":16718},[94,48404,32320],{"class":104},[94,48406,150],{"class":100},[94,48408,32325],{"class":153},[94,48410,48411],{"class":96,"line":16740},[94,48412,32330],{"class":163},[94,48414,48415,48417,48419],{"class":96,"line":16745},[94,48416,32335],{"class":104},[94,48418,150],{"class":100},[94,48420,32340],{"class":104},[94,48422,48423],{"class":96,"line":16751},[94,48424,32345],{"class":163},[94,48426,48427,48429,48431],{"class":96,"line":16765},[94,48428,32350],{"class":104},[94,48430,150],{"class":100},[94,48432,32340],{"class":104},[94,48434,48435],{"class":96,"line":16778},[94,48436,32359],{"class":163},[94,48438,48439,48441,48443],{"class":96,"line":16783},[94,48440,32364],{"class":104},[94,48442,150],{"class":100},[94,48444,32340],{"class":104},[94,48446,48447],{"class":96,"line":16797},[94,48448,32373],{"class":163},[94,48450,48451,48453,48455],{"class":96,"line":16802},[94,48452,32378],{"class":104},[94,48454,150],{"class":100},[94,48456,32340],{"class":104},[94,48458,48459],{"class":96,"line":16808},[94,48460,2381],{"emptyLinePlaceholder":20},[94,48462,48463],{"class":96,"line":16813},[94,48464,32391],{"class":163},[94,48466,48467,48469,48471],{"class":96,"line":16827},[94,48468,32396],{"class":104},[94,48470,150],{"class":100},[94,48472,32401],{"class":104},[94,48474,48475],{"class":96,"line":16832},[94,48476,2381],{"emptyLinePlaceholder":20},[94,48478,48479],{"class":96,"line":16837},[94,48480,32414],{"class":163},[94,48482,48483,48485,48487,48489,48491],{"class":96,"line":16851},[94,48484,3182],{"class":100},[94,48486,32421],{"class":104},[94,48488,26026],{"class":100},[94,48490,32426],{"class":153},[94,48492,32429],{"class":104},[94,48494,48495,48497,48499,48501,48503,48505,48507,48509,48511,48513,48515],{"class":96,"line":16863},[94,48496,32434],{"class":153},[94,48498,105],{"class":104},[94,48500,32439],{"class":209},[94,48502,32442],{"class":153},[94,48504,689],{"class":209},[94,48506,32442],{"class":153},[94,48508,356],{"class":209},[94,48510,32451],{"class":104},[94,48512,637],{"class":100},[94,48514,322],{"class":153},[94,48516,30480],{"class":104},[94,48518,48519,48521,48523,48525,48527,48529],{"class":96,"line":16868},[94,48520,32434],{"class":153},[94,48522,105],{"class":104},[94,48524,32466],{"class":209},[94,48526,560],{"class":100},[94,48528,551],{"class":153},[94,48530,111],{"class":104},[94,48532,48533],{"class":96,"line":16881},[94,48534,2381],{"emptyLinePlaceholder":20},[94,48536,48537],{"class":96,"line":16886},[94,48538,32481],{"class":163},[94,48540,48541],{"class":96,"line":16891},[94,48542,32486],{"class":163},[94,48544,48545,48547,48549],{"class":96,"line":16896},[94,48546,32491],{"class":104},[94,48548,150],{"class":100},[94,48550,32325],{"class":153},[94,48552,48553],{"class":96,"line":16909},[94,48554,32500],{"class":163},[94,48556,48557,48559,48561],{"class":96,"line":16914},[94,48558,32505],{"class":104},[94,48560,150],{"class":100},[94,48562,3066],{"class":153},[94,48564,48565],{"class":96,"line":32616},[94,48566,32514],{"class":163},[94,48568,48569,48571,48573],{"class":96,"line":32622},[94,48570,32519],{"class":104},[94,48572,150],{"class":100},[94,48574,32325],{"class":153},[94,48576,48577],{"class":96,"line":32628},[94,48578,32528],{"class":163},[94,48580,48581,48583,48585],{"class":96,"line":32634},[94,48582,32533],{"class":104},[94,48584,150],{"class":100},[94,48586,3066],{"class":153},[94,48588,48589],{"class":96,"line":32640},[94,48590,32542],{"class":163},[94,48592,48593,48595,48597],{"class":96,"line":32651},[94,48594,32547],{"class":104},[94,48596,150],{"class":100},[94,48598,3066],{"class":153},[94,48600,48601],{"class":96,"line":32657},[94,48602,32556],{"class":163},[94,48604,48605,48607,48609],{"class":96,"line":32677},[94,48606,32561],{"class":104},[94,48608,150],{"class":100},[94,48610,3066],{"class":153},[94,48612,48613],{"class":96,"line":32683},[94,48614,32570],{"class":163},[94,48616,48617,48619,48621,48623,48625],{"class":96,"line":32694},[94,48618,3384],{"class":100},[94,48620,31584],{"class":104},[94,48622,26026],{"class":100},[94,48624,31589],{"class":153},[94,48626,32583],{"class":104},[94,48628,48629],{"class":96,"line":32700},[94,48630,32588],{"class":163},[94,48632,48633,48635,48637],{"class":96,"line":32706},[94,48634,32593],{"class":104},[94,48636,150],{"class":100},[94,48638,32598],{"class":104},[94,48640,48641],{"class":96,"line":32712},[94,48642,32603],{"class":163},[94,48644,48645,48647,48649],{"class":96,"line":32718},[94,48646,32608],{"class":104},[94,48648,150],{"class":100},[94,48650,32613],{"class":104},[94,48652,48653],{"class":96,"line":32724},[94,48654,32619],{"class":163},[94,48656,48657],{"class":96,"line":32730},[94,48658,32625],{"class":104},[94,48660,48661],{"class":96,"line":32736},[94,48662,32631],{"class":163},[94,48664,48665],{"class":96,"line":32756},[94,48666,32637],{"class":163},[94,48668,48669,48671,48673],{"class":96,"line":32762},[94,48670,32643],{"class":104},[94,48672,150],{"class":100},[94,48674,32648],{"class":104},[94,48676,48677],{"class":96,"line":32778},[94,48678,32654],{"class":163},[94,48680,48681,48683,48685,48687,48689,48691,48693],{"class":96,"line":32784},[94,48682,32660],{"class":104},[94,48684,150],{"class":100},[94,48686,32665],{"class":104},[94,48688,32668],{"class":5198},[94,48690,150],{"class":100},[94,48692,322],{"class":153},[94,48694,111],{"class":104},[94,48696,48697],{"class":96,"line":32798},[94,48698,32680],{"class":163},[94,48700,48701,48703,48705],{"class":96,"line":32804},[94,48702,32686],{"class":104},[94,48704,150],{"class":100},[94,48706,32691],{"class":104},[94,48708,48709],{"class":96,"line":32819},[94,48710,32697],{"class":163},[94,48712,48713],{"class":96,"line":32825},[94,48714,32703],{"class":104},[94,48716,48717],{"class":96,"line":32834},[94,48718,32709],{"class":163},[94,48720,48721],{"class":96,"line":32840},[94,48722,32715],{"class":104},[94,48724,48725],{"class":96,"line":32849},[94,48726,32721],{"class":163},[94,48728,48729],{"class":96,"line":32855},[94,48730,32727],{"class":104},[94,48732,48733],{"class":96,"line":32861},[94,48734,32733],{"class":163},[94,48736,48737,48739,48741,48743,48745,48747,48749],{"class":96,"line":32870},[94,48738,32739],{"class":104},[94,48740,9459],{"class":100},[94,48742,32744],{"class":104},[94,48744,560],{"class":100},[94,48746,32749],{"class":104},[94,48748,296],{"class":153},[94,48750,111],{"class":104},[94,48752,48753],{"class":96,"line":32876},[94,48754,32759],{"class":163},[94,48756,48757,48759,48761,48763,48765],{"class":96,"line":32887},[94,48758,32765],{"class":104},[94,48760,9459],{"class":100},[94,48762,32770],{"class":104},[94,48764,2930],{"class":100},[94,48766,32775],{"class":104},[94,48768,48769],{"class":96,"line":32893},[94,48770,32781],{"class":163},[94,48772,48773,48775,48777,48779,48781],{"class":96,"line":32912},[94,48774,32787],{"class":104},[94,48776,9459],{"class":100},[94,48778,32749],{"class":104},[94,48780,296],{"class":153},[94,48782,111],{"class":104},[94,48784,48785],{"class":96,"line":32918},[94,48786,32801],{"class":163},[94,48788,48789,48791,48793,48795,48797],{"class":96,"line":32929},[94,48790,3384],{"class":100},[94,48792,32809],{"class":104},[94,48794,26026],{"class":100},[94,48796,31589],{"class":153},[94,48798,32816],{"class":104},[94,48800,48801],{"class":96,"line":32935},[94,48802,32822],{"class":163},[94,48804,48805,48807,48809],{"class":96,"line":32955},[94,48806,32593],{"class":104},[94,48808,150],{"class":100},[94,48810,32598],{"class":104},[94,48812,48813],{"class":96,"line":32971},[94,48814,32837],{"class":163},[94,48816,48817,48819,48821],{"class":96,"line":32977},[94,48818,32608],{"class":104},[94,48820,150],{"class":100},[94,48822,32613],{"class":104},[94,48824,48825],{"class":96,"line":32991},[94,48826,32852],{"class":163},[94,48828,48829],{"class":96,"line":32997},[94,48830,32858],{"class":104},[94,48832,48833],{"class":96,"line":33003},[94,48834,36339],{"class":163},[94,48836,48837,48839],{"class":96,"line":33014},[94,48838,32864],{"class":100},[94,48840,32867],{"class":104},[94,48842,48843],{"class":96,"line":33020},[94,48844,32873],{"class":163},[94,48846,48847,48849,48851],{"class":96,"line":33026},[94,48848,36354],{"class":104},[94,48850,150],{"class":100},[94,48852,32648],{"class":104},[94,48854,48855],{"class":96,"line":33036},[94,48856,32890],{"class":163},[94,48858,48859,48861,48863,48865,48867,48869,48871],{"class":96,"line":33042},[94,48860,36367],{"class":104},[94,48862,150],{"class":100},[94,48864,32665],{"class":104},[94,48866,32668],{"class":5198},[94,48868,150],{"class":100},[94,48870,322],{"class":153},[94,48872,111],{"class":104},[94,48874,48875],{"class":96,"line":33053},[94,48876,32915],{"class":163},[94,48878,48879,48881,48883],{"class":96,"line":33059},[94,48880,36388],{"class":104},[94,48882,150],{"class":100},[94,48884,32691],{"class":104},[94,48886,48887],{"class":96,"line":33069},[94,48888,32932],{"class":163},[94,48890,48891,48893,48895,48897,48899,48901,48903],{"class":96,"line":33074},[94,48892,36401],{"class":104},[94,48894,9459],{"class":100},[94,48896,36406],{"class":104},[94,48898,560],{"class":100},[94,48900,32749],{"class":104},[94,48902,296],{"class":153},[94,48904,111],{"class":104},[94,48906,48907,48909,48911,48913,48915],{"class":96,"line":33080},[94,48908,36419],{"class":104},[94,48910,9459],{"class":100},[94,48912,32770],{"class":104},[94,48914,2930],{"class":100},[94,48916,32775],{"class":104},[94,48918,48919],{"class":96,"line":33129},[94,48920,36432],{"class":163},[94,48922,48923,48925,48927,48929,48931],{"class":96,"line":33176},[94,48924,36437],{"class":104},[94,48926,9459],{"class":100},[94,48928,32749],{"class":104},[94,48930,296],{"class":153},[94,48932,111],{"class":104},[94,48934,48935],{"class":96,"line":33181},[94,48936,32994],{"class":163},[94,48938,48939],{"class":96,"line":33187},[94,48940,33000],{"class":163},[94,48942,48943,48945,48947],{"class":96,"line":33206},[94,48944,33006],{"class":104},[94,48946,689],{"class":100},[94,48948,33011],{"class":104},[94,48950,48951],{"class":96,"line":33212},[94,48952,33017],{"class":163},[94,48954,48955],{"class":96,"line":33232},[94,48956,33023],{"class":163},[94,48958,48959,48961,48963],{"class":96,"line":33238},[94,48960,33029],{"class":104},[94,48962,689],{"class":100},[94,48964,33011],{"class":104},[94,48966,48967],{"class":96,"line":33244},[94,48968,33039],{"class":163},[94,48970,48971,48973,48975],{"class":96,"line":33254},[94,48972,33045],{"class":104},[94,48974,689],{"class":100},[94,48976,33050],{"class":104},[94,48978,48979],{"class":96,"line":33259},[94,48980,33056],{"class":163},[94,48982,48983,48985,48987],{"class":96,"line":33265},[94,48984,33062],{"class":104},[94,48986,689],{"class":100},[94,48988,33050],{"class":104},[94,48990,48991],{"class":96,"line":33281},[94,48992,2381],{"emptyLinePlaceholder":20},[94,48994,48995],{"class":96,"line":33326},[94,48996,33077],{"class":163},[94,48998,48999,49001,49003,49005,49007,49009,49011,49013,49015,49017,49019,49021,49023,49025,49027,49029,49031,49033,49035,49037],{"class":96,"line":33332},[94,49000,32434],{"class":153},[94,49002,105],{"class":104},[94,49004,3573],{"class":209},[94,49006,32442],{"class":153},[94,49008,33091],{"class":209},[94,49010,1001],{"class":153},[94,49012,33096],{"class":100},[94,49014,1051],{"class":153},[94,49016,33101],{"class":209},[94,49018,1001],{"class":153},[94,49020,33096],{"class":100},[94,49022,1051],{"class":153},[94,49024,3573],{"class":209},[94,49026,33112],{"class":104},[94,49028,637],{"class":100},[94,49030,322],{"class":153},[94,49032,33119],{"class":104},[94,49034,637],{"class":100},[94,49036,322],{"class":153},[94,49038,33126],{"class":104},[94,49040,49041,49043,49045,49047,49049,49051,49053,49055,49057,49059,49061,49063,49065,49067,49069,49071,49073,49075,49077,49079],{"class":96,"line":33338},[94,49042,32434],{"class":153},[94,49044,105],{"class":104},[94,49046,3573],{"class":209},[94,49048,32442],{"class":153},[94,49050,33140],{"class":209},[94,49052,1001],{"class":153},[94,49054,33096],{"class":100},[94,49056,1051],{"class":153},[94,49058,33149],{"class":209},[94,49060,1001],{"class":153},[94,49062,33096],{"class":100},[94,49064,1051],{"class":153},[94,49066,3573],{"class":209},[94,49068,33160],{"class":104},[94,49070,637],{"class":100},[94,49072,322],{"class":153},[94,49074,33167],{"class":104},[94,49076,637],{"class":100},[94,49078,322],{"class":153},[94,49080,33126],{"class":104},[94,49082,49083],{"class":96,"line":33344},[94,49084,2381],{"emptyLinePlaceholder":20},[94,49086,49087],{"class":96,"line":33355},[94,49088,33184],{"class":163},[94,49090,49091,49093,49095,49097,49099,49101,49103],{"class":96,"line":33361},[94,49092,2478],{"class":100},[94,49094,33192],{"class":104},[94,49096,637],{"class":100},[94,49098,322],{"class":153},[94,49100,1045],{"class":104},[94,49102,1065],{"class":100},[94,49104,33203],{"class":104},[94,49106,49107],{"class":96,"line":33367},[94,49108,33209],{"class":163},[94,49110,49111,49113,49115,49117,49119,49121,49123],{"class":96,"line":33373},[94,49112,33215],{"class":104},[94,49114,144],{"class":153},[94,49116,150],{"class":100},[94,49118,33222],{"class":104},[94,49120,637],{"class":100},[94,49122,322],{"class":153},[94,49124,33229],{"class":104},[94,49126,49127],{"class":96,"line":33391},[94,49128,33235],{"class":163},[94,49130,49131],{"class":96,"line":33405},[94,49132,33241],{"class":163},[94,49134,49135,49137,49139],{"class":96,"line":33414},[94,49136,33247],{"class":104},[94,49138,150],{"class":100},[94,49140,32297],{"class":104},[94,49142,49143],{"class":96,"line":33423},[94,49144,2381],{"emptyLinePlaceholder":20},[94,49146,49147],{"class":96,"line":33432},[94,49148,33262],{"class":163},[94,49150,49151,49153,49155,49157,49159],{"class":96,"line":33441},[94,49152,33268],{"class":104},[94,49154,150],{"class":100},[94,49156,33273],{"class":104},[94,49158,637],{"class":100},[94,49160,33278],{"class":104},[94,49162,49163,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183,49185,49187,49189,49191,49193,49195,49197],{"class":96,"line":33447},[94,49164,32434],{"class":153},[94,49166,105],{"class":104},[94,49168,33288],{"class":209},[94,49170,1001],{"class":153},[94,49172,33293],{"class":100},[94,49174,1051],{"class":153},[94,49176,649],{"class":209},[94,49178,1001],{"class":153},[94,49180,33293],{"class":100},[94,49182,1051],{"class":153},[94,49184,33306],{"class":209},[94,49186,33309],{"class":104},[94,49188,33312],{"class":100},[94,49190,1012],{"class":153},[94,49192,33317],{"class":104},[94,49194,433],{"class":100},[94,49196,1012],{"class":153},[94,49198,30480],{"class":104},[94,49200,49201],{"class":96,"line":33453},[94,49202,36716],{"class":163},[94,49204,49205],{"class":96,"line":33461},[94,49206,36721],{"class":163},[94,49208,49209,49211,49213],{"class":96,"line":33466},[94,49210,36726],{"class":104},[94,49212,33350],{"class":209},[94,49214,111],{"class":104},[94,49216,49217],{"class":96,"line":33472},[94,49218,33370],{"class":163},[94,49220,49221,49223,49225,49227,49229,49231],{"class":96,"line":33483},[94,49222,33376],{"class":104},[94,49224,150],{"class":100},[94,49226,33381],{"class":104},[94,49228,33384],{"class":5198},[94,49230,150],{"class":100},[94,49232,1527],{"class":104},[94,49234,49235,49237,49239,49241],{"class":96,"line":33489},[94,49236,33394],{"class":209},[94,49238,964],{"class":104},[94,49240,33399],{"class":153},[94,49242,33402],{"class":104},[94,49244,49245,49247],{"class":96,"line":33509},[94,49246,33408],{"class":209},[94,49248,33411],{"class":104},[94,49250,49251,49253],{"class":96,"line":33515},[94,49252,33417],{"class":209},[94,49254,33420],{"class":104},[94,49256,49257,49259],{"class":96,"line":33521},[94,49258,33426],{"class":209},[94,49260,33429],{"class":104},[94,49262,49263,49265],{"class":96,"line":33527},[94,49264,33435],{"class":209},[94,49266,33438],{"class":104},[94,49268,49269],{"class":96,"line":33544},[94,49270,33444],{"class":104},[94,49272,49273],{"class":96,"line":33550},[94,49274,33450],{"class":163},[94,49276,49277,49279],{"class":96,"line":33556},[94,49278,4071],{"class":100},[94,49280,33458],{"class":104},[94,49282,49283],{"class":96,"line":33562},[94,49284,2381],{"emptyLinePlaceholder":20},[94,49286,49287],{"class":96,"line":33568},[94,49288,33469],{"class":163},[94,49290,49291,49293,49295],{"class":96,"line":33574},[94,49292,31930],{"class":100},[94,49294,33477],{"class":1944},[94,49296,33480],{"class":104},[94,49298,49299],{"class":96,"line":33601},[94,49300,33486],{"class":163},[94,49302,49303,49305,49307,49309,49311,49313,49315,49317],{"class":96,"line":33625},[94,49304,33492],{"class":104},[94,49306,31676],{"class":5198},[94,49308,150],{"class":100},[94,49310,105],{"class":104},[94,49312,603],{"class":153},[94,49314,483],{"class":104},[94,49316,398],{"class":153},[94,49318,30480],{"class":104},[94,49320,49321],{"class":96,"line":33631},[94,49322,33512],{"class":163},[94,49324,49325],{"class":96,"line":33637},[94,49326,33518],{"class":163},[94,49328,49329],{"class":96,"line":33643},[94,49330,33524],{"class":163},[94,49332,49333,49335,49337,49339,49341,49343,49345],{"class":96,"line":33654},[94,49334,31710],{"class":104},[94,49336,322],{"class":153},[94,49338,483],{"class":104},[94,49340,182],{"class":153},[94,49342,483],{"class":104},[94,49344,322],{"class":153},[94,49346,111],{"class":104},[94,49348,49349],{"class":96,"line":33665},[94,49350,33547],{"class":163},[94,49352,49353],{"class":96,"line":33671},[94,49354,33553],{"class":163},[94,49356,49357],{"class":96,"line":33688},[94,49358,33559],{"class":163},[94,49360,49361],{"class":96,"line":33711},[94,49362,33565],{"class":163},[94,49364,49365],{"class":96,"line":33734},[94,49366,33571],{"class":163},[94,49368,49369,49371,49373,49375,49377,49379,49381,49383,49385],{"class":96,"line":33740},[94,49370,33577],{"class":104},[94,49372,33580],{"class":209},[94,49374,33583],{"class":104},[94,49376,33586],{"class":209},[94,49378,483],{"class":104},[94,49380,33591],{"class":5198},[94,49382,150],{"class":100},[94,49384,33596],{"class":209},[94,49386,111],{"class":104},[94,49388,49389,49391,49393,49395,49397,49399,49401,49403,49405],{"class":96,"line":33745},[94,49390,33577],{"class":104},[94,49392,33580],{"class":209},[94,49394,33608],{"class":104},[94,49396,33611],{"class":209},[94,49398,483],{"class":104},[94,49400,33591],{"class":5198},[94,49402,150],{"class":100},[94,49404,33620],{"class":209},[94,49406,111],{"class":104},[94,49408,49409],{"class":96,"line":33754},[94,49410,33628],{"class":163},[94,49412,49413],{"class":96,"line":33764},[94,49414,33634],{"class":104},[94,49416,49417],{"class":96,"line":33770},[94,49418,33640],{"class":163},[94,49420,49421,49423,49425],{"class":96,"line":33775},[94,49422,33646],{"class":104},[94,49424,33649],{"class":209},[94,49426,111],{"class":104},[94,49428,49429,49431,49433],{"class":96,"line":33781},[94,49430,33657],{"class":104},[94,49432,33660],{"class":209},[94,49434,111],{"class":104},[94,49436,49437],{"class":96,"line":33794},[94,49438,33668],{"class":163},[94,49440,49441,49443,49445,49447,49449,49451,49453],{"class":96,"line":33800},[94,49442,31710],{"class":104},[94,49444,322],{"class":153},[94,49446,483],{"class":104},[94,49448,182],{"class":153},[94,49450,483],{"class":104},[94,49452,182],{"class":153},[94,49454,111],{"class":104},[94,49456,49457,49459,49461,49463,49465,49467,49469,49471,49473],{"class":96,"line":33811},[94,49458,33577],{"class":104},[94,49460,33580],{"class":209},[94,49462,33695],{"class":104},[94,49464,33586],{"class":209},[94,49466,483],{"class":104},[94,49468,33591],{"class":5198},[94,49470,150],{"class":100},[94,49472,33706],{"class":209},[94,49474,111],{"class":104},[94,49476,49477,49479,49481,49483,49485,49487,49489,49491,49493],{"class":96,"line":33822},[94,49478,33577],{"class":104},[94,49480,33580],{"class":209},[94,49482,33718],{"class":104},[94,49484,33611],{"class":209},[94,49486,483],{"class":104},[94,49488,33591],{"class":5198},[94,49490,150],{"class":100},[94,49492,33729],{"class":209},[94,49494,111],{"class":104},[94,49496,49497],{"class":96,"line":33841},[94,49498,33737],{"class":163},[94,49500,49502],{"class":96,"line":49501},219,[94,49503,33634],{"class":104},[94,49505,49507,49509,49511],{"class":96,"line":49506},220,[94,49508,33646],{"class":104},[94,49510,33580],{"class":209},[94,49512,111],{"class":104},[94,49514,49516,49518,49520],{"class":96,"line":49515},221,[94,49517,33657],{"class":104},[94,49519,33759],{"class":209},[94,49521,111],{"class":104},[94,49523,49525],{"class":96,"line":49524},222,[94,49526,33767],{"class":104},[94,49528,49530],{"class":96,"line":49529},223,[94,49531,2381],{"emptyLinePlaceholder":20},[94,49533,49535],{"class":96,"line":49534},224,[94,49536,33778],{"class":163},[94,49538,49540,49542,49544,49546,49548],{"class":96,"line":49539},225,[94,49541,1512],{"class":100},[94,49543,31203],{"class":153},[94,49545,2930],{"class":100},[94,49547,31208],{"class":209},[94,49549,3720],{"class":104},[94,49551,49553],{"class":96,"line":49552},226,[94,49554,33797],{"class":163},[94,49556,49558,49560,49562],{"class":96,"line":49557},227,[94,49559,44529],{"class":104},[94,49561,150],{"class":100},[94,49563,44534],{"class":104},[94,49565,49567,49569,49571],{"class":96,"line":49566},228,[94,49568,33814],{"class":104},[94,49570,150],{"class":100},[94,49572,33819],{"class":104},[94,49574,49576,49578,49580,49582,49584,49586,49588],{"class":96,"line":49575},229,[94,49577,33376],{"class":104},[94,49579,150],{"class":100},[94,49581,44551],{"class":104},[94,49583,33832],{"class":5198},[94,49585,150],{"class":100},[94,49587,1012],{"class":153},[94,49589,111],{"class":104},[94,49591,49593],{"class":96,"line":49592},230,[94,49594,33844],{"class":104},[21980,49596,49598],{"id":49597},"_242测试代码","2.4.2.测试代码",[40,49600,49601],{},"使用测试集进行测试与推理",[85,49603,49605],{"className":30361,"code":49604,"language":30363,"meta":14,"style":14},"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",[91,49606,49607,49613,49623,49633,49644,49654,49658,49662,49670,49675,49679,49696,49700,49704,49708,49712,49716,49748,49752,49760,49764,49776,49780,49784,49788,49792,49796,49800,49804,49808,49826,49840,49844,49854,49864,49874,49880,49884,49888,49896,49900,49916,49924,49928,49932,49940,49948,49952,49956,49960,49964,49970,49974,49984,49992,50000,50004,50008,50012,50020,50024,50040,50044,50048,50052,50064,50068,50080,50084,50088,50100,50104,50114,50118,50122,50134,50138,50146,50150,50154,50162,50166,50174,50178,50182,50186,50190,50194,50210,50218,50222,50226,50244,50250,50254,50264,50272,50280,50284,50288,50292,50296,50304,50308,50324,50328,50336,50344],{"__ignoreMap":14},[94,49608,49609,49611],{"class":96,"line":97},[94,49610,30375],{"class":100},[94,49612,30378],{"class":104},[94,49614,49615,49617,49619,49621],{"class":96,"line":15},[94,49616,30375],{"class":100},[94,49618,31398],{"class":104},[94,49620,31366],{"class":100},[94,49622,31403],{"class":104},[94,49624,49625,49627,49629,49631],{"class":96,"line":1160},[94,49626,30720],{"class":100},[94,49628,31381],{"class":104},[94,49630,30375],{"class":100},[94,49632,31386],{"class":104},[94,49634,49635,49637,49639,49641],{"class":96,"line":1175},[94,49636,30720],{"class":100},[94,49638,31351],{"class":104},[94,49640,30375],{"class":100},[94,49642,49643],{"class":104}," ImageFolder\n",[94,49645,49646,49648,49650,49652],{"class":96,"line":1181},[94,49647,30720],{"class":100},[94,49649,31897],{"class":104},[94,49651,30375],{"class":100},[94,49653,44623],{"class":104},[94,49655,49656],{"class":96,"line":1195},[94,49657,2381],{"emptyLinePlaceholder":20},[94,49659,49660],{"class":96,"line":1201},[94,49661,33934],{"class":163},[94,49663,49664,49666,49668],{"class":96,"line":1292},[94,49665,31930],{"class":100},[94,49667,33941],{"class":1944},[94,49669,31936],{"class":104},[94,49671,49672],{"class":96,"line":1298},[94,49673,49674],{"class":163},"   # 导入自己的数据集，并进行数据处理\n",[94,49676,49677],{"class":96,"line":1310},[94,49678,47944],{"class":163},[94,49680,49681,49683,49685,49687,49689,49691,49694],{"class":96,"line":1593},[94,49682,47949],{"class":153},[94,49684,150],{"class":100},[94,49686,775],{"class":100},[94,49688,356],{"class":209},[94,49690,663],{"class":153},[94,49692,49693],{"class":47960},"\u002Fdata\u002Ftest",[94,49695,25116],{"class":209},[94,49697,49698],{"class":96,"line":1598},[94,49699,2381],{"emptyLinePlaceholder":20},[94,49701,49702],{"class":96,"line":1604},[94,49703,47972],{"class":163},[94,49705,49706],{"class":96,"line":1609},[94,49707,47977],{"class":163},[94,49709,49710],{"class":96,"line":1623},[94,49711,47982],{"class":163},[94,49713,49714],{"class":96,"line":1628},[94,49715,47987],{"class":163},[94,49717,49718,49720,49722,49724,49726,49728,49730,49732,49734,49736,49738,49740,49742,49744,49746],{"class":96,"line":1634},[94,49719,47992],{"class":104},[94,49721,150],{"class":100},[94,49723,47997],{"class":104},[94,49725,48000],{"class":153},[94,49727,483],{"class":104},[94,49729,48005],{"class":153},[94,49731,483],{"class":104},[94,49733,48010],{"class":153},[94,49735,48013],{"class":104},[94,49737,48016],{"class":153},[94,49739,483],{"class":104},[94,49741,48021],{"class":153},[94,49743,483],{"class":104},[94,49745,48026],{"class":153},[94,49747,4638],{"class":104},[94,49749,49750],{"class":96,"line":1655},[94,49751,48033],{"class":163},[94,49753,49754,49756,49758],{"class":96,"line":1660},[94,49755,48038],{"class":104},[94,49757,150],{"class":100},[94,49759,48043],{"class":104},[94,49761,49762],{"class":96,"line":1674},[94,49763,48048],{"class":163},[94,49765,49766,49768,49770,49772,49774],{"class":96,"line":1679},[94,49767,48053],{"class":104},[94,49769,31484],{"class":153},[94,49771,483],{"class":104},[94,49773,31484],{"class":153},[94,49775,42605],{"class":104},[94,49777,49778],{"class":96,"line":1708},[94,49779,48066],{"class":163},[94,49781,49782],{"class":96,"line":1713},[94,49783,48071],{"class":104},[94,49785,49786],{"class":96,"line":1730},[94,49787,48076],{"class":104},[94,49789,49790],{"class":96,"line":1735},[94,49791,48081],{"class":163},[94,49793,49794],{"class":96,"line":1740},[94,49795,48086],{"class":163},[94,49797,49798],{"class":96,"line":1745},[94,49799,2381],{"emptyLinePlaceholder":20},[94,49801,49802],{"class":96,"line":1759},[94,49803,48095],{"class":163},[94,49805,49806],{"class":96,"line":1764},[94,49807,48100],{"class":163},[94,49809,49810,49812,49814,49816,49818,49820,49822,49824],{"class":96,"line":2558},[94,49811,33948],{"class":104},[94,49813,150],{"class":100},[94,49815,48109],{"class":104},[94,49817,48112],{"class":153},[94,49819,483],{"class":104},[94,49821,48117],{"class":5198},[94,49823,150],{"class":100},[94,49825,48122],{"class":104},[94,49827,49828,49830,49832,49834,49836,49838],{"class":96,"line":2572},[94,49829,34005],{"class":104},[94,49831,150],{"class":100},[94,49833,31517],{"class":104},[94,49835,31520],{"class":5198},[94,49837,150],{"class":100},[94,49839,34016],{"class":104},[94,49841,49842],{"class":96,"line":2580},[94,49843,34021],{"class":163},[94,49845,49846,49848,49850,49852],{"class":96,"line":2585},[94,49847,34026],{"class":5198},[94,49849,150],{"class":100},[94,49851,322],{"class":153},[94,49853,31449],{"class":104},[94,49855,49856,49858,49860,49862],{"class":96,"line":2591},[94,49857,34037],{"class":5198},[94,49859,150],{"class":100},[94,49861,31459],{"class":153},[94,49863,31449],{"class":104},[94,49865,49866,49868,49870,49872],{"class":96,"line":2597},[94,49867,34048],{"class":5198},[94,49869,150],{"class":100},[94,49871,296],{"class":153},[94,49873,111],{"class":104},[94,49875,49876,49878],{"class":96,"line":2602},[94,49877,4071],{"class":100},[94,49879,34061],{"class":104},[94,49881,49882],{"class":96,"line":7930},[94,49883,2381],{"emptyLinePlaceholder":20},[94,49885,49886],{"class":96,"line":7954},[94,49887,34070],{"class":163},[94,49889,49890,49892,49894],{"class":96,"line":7959},[94,49891,31930],{"class":100},[94,49893,34077],{"class":1944},[94,49895,34080],{"class":104},[94,49897,49898],{"class":96,"line":7965},[94,49899,34085],{"class":163},[94,49901,49902,49904,49906,49908,49910,49912,49914],{"class":96,"line":7992},[94,49903,31220],{"class":104},[94,49905,150],{"class":100},[94,49907,31227],{"class":209},[94,49909,1685],{"class":100},[94,49911,31232],{"class":104},[94,49913,1682],{"class":100},[94,49915,34102],{"class":209},[94,49917,49918,49920,49922],{"class":96,"line":7997},[94,49919,31272],{"class":104},[94,49921,150],{"class":100},[94,49923,32272],{"class":104},[94,49925,49926],{"class":96,"line":8003},[94,49927,2381],{"emptyLinePlaceholder":20},[94,49929,49930],{"class":96,"line":8015},[94,49931,34119],{"class":163},[94,49933,49934,49936,49938],{"class":96,"line":8027},[94,49935,34124],{"class":104},[94,49937,150],{"class":100},[94,49939,32325],{"class":153},[94,49941,49942,49944,49946],{"class":96,"line":8039},[94,49943,34133],{"class":104},[94,49945,150],{"class":100},[94,49947,3066],{"class":153},[94,49949,49950],{"class":96,"line":9698},[94,49951,2381],{"emptyLinePlaceholder":20},[94,49953,49954],{"class":96,"line":9723},[94,49955,34146],{"class":163},[94,49957,49958],{"class":96,"line":9746},[94,49959,34151],{"class":163},[94,49961,49962],{"class":96,"line":9770},[94,49963,34156],{"class":163},[94,49965,49966,49968],{"class":96,"line":9775},[94,49967,34161],{"class":100},[94,49969,32867],{"class":104},[94,49971,49972],{"class":96,"line":9780},[94,49973,34168],{"class":163},[94,49975,49976,49978,49980,49982],{"class":96,"line":9785},[94,49977,3384],{"class":100},[94,49979,34175],{"class":104},[94,49981,26026],{"class":100},[94,49983,34180],{"class":104},[94,49985,49986,49988,49990],{"class":96,"line":9794},[94,49987,34185],{"class":104},[94,49989,150],{"class":100},[94,49991,34190],{"class":104},[94,49993,49994,49996,49998],{"class":96,"line":9799},[94,49995,34195],{"class":104},[94,49997,150],{"class":100},[94,49999,34200],{"class":104},[94,50001,50002],{"class":96,"line":9805},[94,50003,34205],{"class":163},[94,50005,50006],{"class":96,"line":9826},[94,50007,32858],{"class":104},[94,50009,50010],{"class":96,"line":9832},[94,50011,34214],{"class":163},[94,50013,50014,50016,50018],{"class":96,"line":9846},[94,50015,32643],{"class":104},[94,50017,150],{"class":100},[94,50019,34223],{"class":104},[94,50021,50022],{"class":96,"line":9852},[94,50023,34228],{"class":163},[94,50025,50026,50028,50030,50032,50034,50036,50038],{"class":96,"line":9879},[94,50027,32660],{"class":104},[94,50029,150],{"class":100},[94,50031,32665],{"class":104},[94,50033,32668],{"class":5198},[94,50035,150],{"class":100},[94,50037,322],{"class":153},[94,50039,111],{"class":104},[94,50041,50042],{"class":96,"line":9888},[94,50043,34249],{"class":163},[94,50045,50046],{"class":96,"line":9894},[94,50047,34254],{"class":163},[94,50049,50050],{"class":96,"line":9902},[94,50051,34259],{"class":163},[94,50053,50054,50056,50058,50060,50062],{"class":96,"line":9907},[94,50055,34264],{"class":104},[94,50057,9459],{"class":100},[94,50059,32770],{"class":104},[94,50061,2930],{"class":100},[94,50063,34273],{"class":104},[94,50065,50066],{"class":96,"line":16586},[94,50067,34278],{"class":163},[94,50069,50070,50072,50074,50076,50078],{"class":96,"line":16592},[94,50071,34283],{"class":104},[94,50073,9459],{"class":100},[94,50075,34288],{"class":104},[94,50077,296],{"class":153},[94,50079,111],{"class":104},[94,50081,50082],{"class":96,"line":16615},[94,50083,2381],{"emptyLinePlaceholder":20},[94,50085,50086],{"class":96,"line":16621},[94,50087,34301],{"class":163},[94,50089,50090,50092,50094,50096,50098],{"class":96,"line":16644},[94,50091,34306],{"class":104},[94,50093,150],{"class":100},[94,50095,34311],{"class":104},[94,50097,689],{"class":100},[94,50099,34316],{"class":104},[94,50101,50102],{"class":96,"line":16658},[94,50103,34321],{"class":163},[94,50105,50106,50108,50110,50112],{"class":96,"line":16678},[94,50107,32434],{"class":153},[94,50109,105],{"class":104},[94,50111,34330],{"class":209},[94,50113,34333],{"class":104},[94,50115,50116],{"class":96,"line":16684},[94,50117,2381],{"emptyLinePlaceholder":20},[94,50119,50120],{"class":96,"line":16695},[94,50121,34342],{"class":163},[94,50123,50124,50126,50128,50130,50132],{"class":96,"line":16718},[94,50125,1512],{"class":100},[94,50127,31203],{"class":153},[94,50129,2930],{"class":100},[94,50131,31208],{"class":209},[94,50133,3720],{"class":104},[94,50135,50136],{"class":96,"line":16740},[94,50137,34359],{"class":163},[94,50139,50140,50142,50144],{"class":96,"line":16745},[94,50141,31272],{"class":104},[94,50143,150],{"class":100},[94,50145,44534],{"class":104},[94,50147,50148],{"class":96,"line":16751},[94,50149,34372],{"class":163},[94,50151,50152],{"class":96,"line":16765},[94,50153,34377],{"class":163},[94,50155,50156,50158,50160],{"class":96,"line":16778},[94,50157,34382],{"class":104},[94,50159,34385],{"class":209},[94,50161,30480],{"class":104},[94,50163,50164],{"class":96,"line":16783},[94,50165,34392],{"class":163},[94,50167,50168,50170,50172],{"class":96,"line":16797},[94,50169,34005],{"class":104},[94,50171,150],{"class":100},[94,50173,34401],{"class":104},[94,50175,50176],{"class":96,"line":16802},[94,50177,34406],{"class":163},[94,50179,50180],{"class":96,"line":16808},[94,50181,34411],{"class":104},[94,50183,50184],{"class":96,"line":16813},[94,50185,2381],{"emptyLinePlaceholder":20},[94,50187,50188],{"class":96,"line":16827},[94,50189,34420],{"class":163},[94,50191,50192],{"class":96,"line":16832},[94,50193,34425],{"class":163},[94,50195,50196,50198,50200,50202,50204,50206,50208],{"class":96,"line":16837},[94,50197,31220],{"class":104},[94,50199,150],{"class":100},[94,50201,31227],{"class":209},[94,50203,1685],{"class":100},[94,50205,31232],{"class":104},[94,50207,1682],{"class":100},[94,50209,34102],{"class":209},[94,50211,50212,50214,50216],{"class":96,"line":16851},[94,50213,31272],{"class":104},[94,50215,150],{"class":100},[94,50217,32272],{"class":104},[94,50219,50220],{"class":96,"line":16863},[94,50221,34454],{"class":163},[94,50223,50224],{"class":96,"line":16868},[94,50225,34459],{"class":163},[94,50227,50228,50230,50232,50234,50237,50239,50242],{"class":96,"line":16881},[94,50229,34464],{"class":104},[94,50231,150],{"class":100},[94,50233,995],{"class":104},[94,50235,50236],{"class":209},"'猫'",[94,50238,483],{"class":104},[94,50240,50241],{"class":209},"'狗'",[94,50243,33229],{"class":104},[94,50245,50246,50248],{"class":96,"line":16886},[94,50247,34161],{"class":100},[94,50249,32867],{"class":104},[94,50251,50252],{"class":96,"line":16891},[94,50253,34529],{"class":163},[94,50255,50256,50258,50260,50262],{"class":96,"line":16896},[94,50257,3384],{"class":100},[94,50259,34536],{"class":104},[94,50261,26026],{"class":100},[94,50263,34180],{"class":104},[94,50265,50266,50268,50270],{"class":96,"line":16909},[94,50267,32593],{"class":104},[94,50269,150],{"class":100},[94,50271,32598],{"class":104},[94,50273,50274,50276,50278],{"class":96,"line":16914},[94,50275,32608],{"class":104},[94,50277,150],{"class":100},[94,50279,32613],{"class":104},[94,50281,50282],{"class":96,"line":32616},[94,50283,2381],{"emptyLinePlaceholder":20},[94,50285,50286],{"class":96,"line":32622},[94,50287,34565],{"class":163},[94,50289,50290],{"class":96,"line":32628},[94,50291,32858],{"class":104},[94,50293,50294],{"class":96,"line":32634},[94,50295,34574],{"class":163},[94,50297,50298,50300,50302],{"class":96,"line":32640},[94,50299,32643],{"class":104},[94,50301,150],{"class":100},[94,50303,32648],{"class":104},[94,50305,50306],{"class":96,"line":32651},[94,50307,34587],{"class":163},[94,50309,50310,50312,50314,50316,50318,50320,50322],{"class":96,"line":32657},[94,50311,32660],{"class":104},[94,50313,150],{"class":100},[94,50315,32665],{"class":104},[94,50317,32668],{"class":5198},[94,50319,150],{"class":100},[94,50321,322],{"class":153},[94,50323,111],{"class":104},[94,50325,50326],{"class":96,"line":32677},[94,50327,34608],{"class":163},[94,50329,50330,50332,50334],{"class":96,"line":32683},[94,50331,34613],{"class":104},[94,50333,150],{"class":100},[94,50335,34618],{"class":104},[94,50337,50338,50340,50342],{"class":96,"line":32694},[94,50339,34623],{"class":104},[94,50341,150],{"class":100},[94,50343,34628],{"class":104},[94,50345,50346,50348,50350,50352,50354,50356,50358,50360],{"class":96,"line":32700},[94,50347,34633],{"class":153},[94,50349,105],{"class":104},[94,50351,34638],{"class":209},[94,50353,34641],{"class":104},[94,50355,34644],{"class":209},[94,50357,483],{"class":104},[94,50359,34649],{"class":209},[94,50361,34652],{"class":104},[5108,50363,50364],{},"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":14,"searchDepth":15,"depth":15,"links":50366},[50367,50368,50369,50370],{"id":30574,"depth":1160,"text":30575},{"id":37822,"depth":1160,"text":37823},{"id":41255,"depth":1160,"text":41256},{"id":45264,"depth":1160,"text":45265},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30566,"description":17},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":4,"title":5,"body":50377,"description":17,"extension":18,"meta":50383,"navigation":20,"path":21,"seo":50384,"stem":23,"__hash__":24},{"type":7,"value":50378,"toc":50381},[50379],[10,50380,5],{"id":12},{"title":14,"searchDepth":15,"depth":15,"links":50382},[],{},{"title":5,"description":17},{"id":50386,"title":50387,"body":50388,"description":50395,"extension":18,"meta":50396,"navigation":20,"path":50398,"seo":50399,"stem":50400,"__hash__":50401},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50389,"toc":50393},[50390],[40,50391,50392],{},"yolo模型还未补充",{"title":14,"searchDepth":15,"depth":15,"links":50394},[],"深度学习学习",{"category":50397},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50387,"description":50395},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50403,"title":50404,"body":50405,"description":17,"extension":18,"meta":50430,"navigation":20,"path":50431,"seo":50432,"stem":50433,"__hash__":50434},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50406,"toc":50428},[50407,50410,50413,50418,50425],[10,50408,50404],{"id":50409},"_1工具",[40,50411,50412],{},"提示错误插件：有问题会提前报错",[40,50414,50415],{},[1443,50416],{"alt":14,"src":50417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[40,50419,50420],{},[343,50421,50424],{"href":50422,"rel":50423},"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",[23847],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[40,50426,50427],{},"alt键加上下箭头可以实现语句的移动",{"title":14,"searchDepth":15,"depth":15,"links":50429},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50404,"description":17},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50436,"title":50437,"body":50438,"description":17,"extension":18,"meta":53302,"navigation":20,"path":53303,"seo":53304,"stem":53305,"__hash__":53306},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50439,"toc":53253},[50440,50443,50447,50451,50456,50459,50464,50468,50475,50480,50487,50492,50499,50504,50508,50513,50516,50520,50525,50529,50534,50537,50540,50543,50546,50549,50552,50555,50558,50563,50568,50573,50577,50580,50583,50587,50592,50595,50603,50608,50625,50633,50638,50643,50648,50653,50658,50661,50666,50671,50675,50684,50689,50694,50698,50703,50706,50710,50715,50723,50728,50733,50736,50741,50746,50751,50754,50757,50760,50765,50770,50773,50778,50781,50786,50789,50792,50795,50800,50803,50806,50821,50826,50831,50836,50839,50842,50845,50859,50862,50867,50872,50875,50878,50881,50884,50887,50890,50893,50897,50901,50906,50910,50913,50918,50923,50926,50931,50934,50938,50943,50946,50949,50952,50955,50958,50961,50964,50967,50970,50974,50979,50984,50989,50992,50995,50999,51004,51007,51011,51014,51017,51022,51025,51028,51032,51036,51039,51044,51049,51052,51081,51086,51091,51096,51101,51105,51110,51114,51119,51122,51126,51130,51135,51139,51144,51149,51153,51158,51161,51163,51166,51171,51175,51180,51184,51188,51193,51198,51203,51208,51212,51217,51222,51227,51230,51233,51238,51241,51246,51251,51256,51261,51265,52072,52076,52419,52424,52427,52430,52433,52436,52439,52442,52445,52448,52450,52453,52455,52458,52462,52467,52470,52473,52476,52480,52485,52490,52510,52513,52517,52522,52527,52544,52548,52577,52581,52603,52605,52644,52652,52658,52662,52665,52668,52673,52678,52681,52684,52687,52692,52697,52700,52703,52706,52709,52712,52715,52718,52721,52724,52727,52730,52732,52735,52738,52741,52744,52747,52750,52753,52756,52760,52765,52768,52773,52776,52779,52782,52785,52788,52791,52794,52796,52799,52802,52805,52808,52811,52814,52818,52821,52830,52833,52838,52841,52846,52849,52852,52855,52858,52861,52864,52867,52871,52875,52878,52881,52886,52891,52896,52900,52905,52910,52913,52916,52919,52922,52925,52930,52933,52938,52940,52945,52948,52952,52957,52960,52963,52968,52972,52975,52980,52983,52986,53015,53020,53023,53026,53029,53032,53035,53039,53042,53128,53132,53135,53140,53145,53152,53155,53158,53161,53164,53167,53172,53177,53180,53183,53186,53189,53192,53195,53198,53201,53204,53206,53209,53213,53218,53223,53228,53231,53236,53241,53244,53247,53250],[10,50441,50437],{"id":50442},"_2基础语法",[35,50444,50446],{"id":50445},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[65,50448,50450],{"id":50449},"_211-js组成","2.1.1 js组成",[48,50452,50453],{},[51,50454,50455],{},"js是编程语言，html和css不是编程语言，是标记语言",[40,50457,50458],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[48,50460,50461],{"start":15},[51,50462,50463],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[65,50465,50467],{"id":50466},"_212-js书写位置","2.1.2 js书写位置",[48,50469,50470],{},[51,50471,50472],{},[254,50473,50474],{},"内部 JavaScript",[40,50476,50477],{},[1443,50478],{"alt":14,"src":50479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[48,50481,50482],{"start":15},[51,50483,50484],{},[254,50485,50486],{},"外部 JavaScript",[40,50488,50489],{},[1443,50490],{"alt":14,"src":50491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[48,50493,50494],{"start":1160},[51,50495,50496],{},[254,50497,50498],{},"内联 JavaScript",[40,50500,50501],{},[1443,50502],{"alt":14,"src":50503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[65,50505,50507],{"id":50506},"_213-javascript注释","2.1.3 JavaScript注释",[40,50509,50510],{},[1443,50511],{"alt":14,"src":50512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[40,50514,50515],{},"alt+shift+a一定要记住！",[65,50517,50519],{"id":50518},"_214-javascript结束符","2.1.4 JavaScript结束符",[40,50521,50522],{},[1443,50523],{"alt":14,"src":50524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[65,50526,50528],{"id":50527},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[48,50530,50531],{},[51,50532,50533],{},"输出语法：",[40,50535,50536],{},"①document.write('要出的内容')",[40,50538,50539],{},"向body内输出内容；",[40,50541,50542],{},"如果输出的内容写的是标签，也会被解析cheng",[40,50544,50545],{},"②alert('要出的内容')",[40,50547,50548],{},"页面弹出警告对话框",[40,50550,50551],{},"③console.log('控制台打印')",[40,50553,50554],{},"控制台输出语法，程序员调试使用",[40,50556,50557],{},"输入log就行，自动生成：",[40,50559,50560],{},[1443,50561],{"alt":14,"src":50562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[48,50564,50565],{"start":15},[51,50566,50567],{},"输入语法：",[40,50569,50570],{},[1443,50571],{"alt":14,"src":50572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[65,50574,50576],{"id":50575},"_2116-字面量","21.1.6 字面量",[40,50578,50579],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[40,50581,50582],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[35,50584,50586],{"id":50585},"_22-变量","2.2 变量",[48,50588,50589],{},[51,50590,50591],{},"变量声明",[40,50593,50594],{},"let 变量名",[1112,50596,50597,50600],{},[51,50598,50599],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[51,50601,50602],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[48,50604,50605],{"start":15},[51,50606,50607],{},"变量赋值",[85,50609,50613],{"className":50610,"code":50611,"language":50612,"meta":14,"style":14},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[91,50614,50615,50620],{"__ignoreMap":14},[94,50616,50617],{"class":96,"line":97},[94,50618,50619],{"class":104},"let age\n",[94,50621,50622],{"class":96,"line":15},[94,50623,50624],{"class":104},"age=18\n",[48,50626,50627,50630],{"start":1160},[51,50628,50629],{},"连这些（变量的初始化）：let age=18",[51,50631,50632],{},"更新变量",[40,50634,50635],{},[1443,50636],{"alt":14,"src":50637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[48,50639,50640],{"start":1181},[51,50641,50642],{},"声明多个变量",[40,50644,50645],{},[1443,50646],{"alt":14,"src":50647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[48,50649,50650],{"start":1195},[51,50651,50652],{},"变量命名规则与规范",[40,50654,50655],{},[1443,50656],{"alt":14,"src":50657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[40,50659,50660],{},"遵守小驼峰！",[48,50662,50663],{"start":1201},[51,50664,50665],{},"变量拓展-let和var的区别",[40,50667,50668],{},[1443,50669],{"alt":14,"src":50670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[35,50672,50674],{"id":50673},"_23-数组","2.3 数组",[85,50676,50678],{"className":50610,"code":50677,"language":50612,"meta":14,"style":14},"let arr = []\n",[91,50679,50680],{"__ignoreMap":14},[94,50681,50682],{"class":96,"line":97},[94,50683,50677],{"class":104},[40,50685,50686],{},[1443,50687],{"alt":14,"src":50688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[40,50690,50691],{},[1443,50692],{"alt":14,"src":50693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[35,50695,50697],{"id":50696},"_24-常量","2.4 常量",[40,50699,50700],{},[1443,50701],{"alt":14,"src":50702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[40,50704,50705],{},"const — 类似于 let ，但是变量的值无法被修改",[35,50707,50709],{"id":50708},"_25-数据类型","2.5 数据类型",[40,50711,50712],{},[1443,50713],{"alt":14,"src":50714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[48,50716,50717,50720],{},[51,50718,50719],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[51,50721,50722],{},"算数运算符：",[40,50724,50725],{},[1443,50726],{"alt":14,"src":50727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[48,50729,50730],{"start":1160},[51,50731,50732],{},"数字类型（Number）",[40,50734,50735],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[40,50737,50738],{},[1443,50739],{"alt":14,"src":50740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[48,50742,50743],{"start":1175},[51,50744,50745],{},"字符串类型（string）",[40,50747,50748],{},[1443,50749],{"alt":14,"src":50750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[40,50752,50753],{},"反引号也是可以使用的",[40,50755,50756],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[40,50758,50759],{},"例如：document.write(\"我今年\"+age+\"岁\")",[48,50761,50762],{"start":1181},[51,50763,50764],{},"模板字符串",[40,50766,50767],{},[1443,50768],{"alt":14,"src":50769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[40,50771,50772],{},"类似于python的字符串格式化",[48,50774,50775],{"start":1195},[51,50776,50777],{},"布尔类型",[40,50779,50780],{},"true 和 false",[48,50782,50783],{"start":1201},[51,50784,50785],{},"未定义类型（underfined）",[40,50787,50788],{},"表示没有赋值",[40,50790,50791],{},"未定义类型是比较特殊的类型，只有一个值undefined",[40,50793,50794],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[48,50796,50797],{"start":1292},[51,50798,50799],{},"null（空类型）",[40,50801,50802],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[40,50804,50805],{},"赋值了，但是内容为空",[85,50807,50809],{"className":50610,"code":50808,"language":50612,"meta":14,"style":14},"typeof null\n输出的是'object'，是一个对象数据类型\n",[91,50810,50811,50816],{"__ignoreMap":14},[94,50812,50813],{"class":96,"line":97},[94,50814,50815],{"class":104},"typeof null\n",[94,50817,50818],{"class":96,"line":15},[94,50819,50820],{"class":104},"输出的是'object'，是一个对象数据类型\n",[48,50822,50823],{"start":1298},[51,50824,50825],{},"控制台检测数据类型",[40,50827,50828],{},[1443,50829],{"alt":14,"src":50830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[48,50832,50833],{"start":1310},[51,50834,50835],{},"类型转换",[40,50837,50838],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[40,50840,50841],{},"转换方式：隐式转换和显示转换",[40,50843,50844],{},"①隐式转换",[1112,50846,50847,50850,50853,50856],{},[51,50848,50849],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[51,50851,50852],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[51,50854,50855],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[51,50857,50858],{},"任何数据和字符串相加结果都是字符串",[40,50860,50861],{},"②显示转换",[40,50863,50864],{},[1443,50865],{"alt":14,"src":50866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[40,50868,50869],{},[1443,50870],{"alt":14,"src":50871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[40,50873,50874],{},"在输入的时候要用好隐式转换，简单写起来",[40,50876,50877],{},"let num = +prompt(’请输入数字：‘)",[40,50879,50880],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[40,50882,50883],{},"console.log(parseInt('12.333px'))",[40,50885,50886],{},"输出为：12",[40,50888,50889],{},"console.log(parseInt('a'a'a12.333px'))",[40,50891,50892],{},"输出：NaN",[35,50894,50896],{"id":50895},"_26-运算符","2.6 运算符",[65,50898,50900],{"id":50899},"_261-赋值运算符","2.6.1 赋值运算符",[40,50902,50903],{},[1443,50904],{"alt":14,"src":50905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[65,50907,50909],{"id":50908},"_262-一元运算符","2.6.2 一元运算符",[40,50911,50912],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[40,50914,50915],{},[1443,50916],{"alt":14,"src":50917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[40,50919,50920],{},[1443,50921],{"alt":14,"src":50922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[40,50924,50925],{},"两者的区别：",[40,50927,50928],{},[1443,50929],{"alt":14,"src":50930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[40,50932,50933],{},"前置先自加；后置后加，代码执行完之后再加",[65,50935,50937],{"id":50936},"_263-比较运算符","2.6.3 比较运算符",[40,50939,50940],{},[1443,50941],{"alt":14,"src":50942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[40,50944,50945],{},"比较运算符也有隐式转换",[40,50947,50948],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[40,50950,50951],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[40,50953,50954],{},"要使用三等，开发的时候",[40,50956,50957],{},"NaN不等于任何人，包括它自己",[40,50959,50960],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[40,50962,50963],{},"7\u002F10=0.7",[40,50965,50966],{},"最后：0.5+0.2=0.7",[40,50968,50969],{},"字符串比较，比较的是字符对应的ASCII码",[65,50971,50973],{"id":50972},"_264-逻辑运算符","2.6.4 逻辑运算符",[40,50975,50976],{},[1443,50977],{"alt":14,"src":50978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[40,50980,50981],{},[1443,50982],{"alt":14,"src":50983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[40,50985,50986],{},[1443,50987],{"alt":14,"src":50988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[40,50990,50991],{},"上述题目选D",[40,50993,50994],{},"与真2假1；或真1假2",[65,50996,50998],{"id":50997},"_265-运算符优先级","2.6.5 运算符优先级",[40,51000,51001],{},[1443,51002],{"alt":14,"src":51003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[40,51005,51006],{},"先算逻辑与，后算逻辑或",[35,51008,51010],{"id":51009},"_27-语句","2.7 语句",[40,51012,51013],{},"表达式：是可以被求值的代码，会有结果给我们",[40,51015,51016],{},"语句：语句是可以被执行的代码，例如prompt()",[40,51018,51019],{},[1443,51020],{"alt":14,"src":51021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[40,51023,51024],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[40,51026,51027],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[65,51029,51031],{"id":51030},"_271-分支语句","2.7.1 分支语句",[21980,51033,51035],{"id":51034},"_2711-if分支语句","2.7.1.1 if分支语句",[40,51037,51038],{},"if语句单行简单的话，可以不写{}，写在一行就行",[48,51040,51041],{},[51,51042,51043],{},"单分支语句",[40,51045,51046],{},[1443,51047],{"alt":14,"src":51048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[40,51050,51051],{},"除了0，所有数字都为真",[85,51053,51055],{"className":50610,"code":51054,"language":50612,"meta":14,"style":14},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[91,51056,51057,51062,51067,51072,51076],{"__ignoreMap":14},[94,51058,51059],{"class":96,"line":97},[94,51060,51061],{"class":104},"if（0) {\n",[94,51063,51064],{"class":96,"line":15},[94,51065,51066],{"class":104},"    let a=1\n",[94,51068,51069],{"class":96,"line":1160},[94,51070,51071],{"class":104},"    alert(typeof a)\n",[94,51073,51074],{"class":96,"line":1175},[94,51075,1546],{"class":104},[94,51077,51078],{"class":96,"line":1181},[94,51079,51080],{"class":104},"不输出，括号为假\n",[48,51082,51083],{"start":15},[51,51084,51085],{},"双分支语句",[40,51087,51088],{},[1443,51089],{"alt":14,"src":51090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[48,51092,51093],{"start":1160},[51,51094,51095],{},"多分支语句",[40,51097,51098],{},[1443,51099],{"alt":14,"src":51100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[21980,51102,51104],{"id":51103},"_2712-三元运算符","2.7.1.2 三元运算符",[40,51106,51107],{},[1443,51108],{"alt":14,"src":51109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[21980,51111,51113],{"id":51112},"_2713-switch语句","2.7.1.3 switch语句",[40,51115,51116],{},[1443,51117],{"alt":14,"src":51118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[40,51120,51121],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[65,51123,51125],{"id":51124},"_272-循环语句","2.7.2 循环语句",[21980,51127,51129],{"id":51128},"_2721-断点演示","2.7.2.1 断点演示",[40,51131,51132],{},[1443,51133],{"alt":14,"src":51134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[21980,51136,51138],{"id":51137},"_2722-while循环","2.7.2.2 while循环",[40,51140,51141],{},[1443,51142],{"alt":14,"src":51143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[40,51145,51146],{},[1443,51147],{"alt":14,"src":51148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[21980,51150,51152],{"id":51151},"_2723-for循环","2.7.2.3 for循环",[40,51154,51155],{},[1443,51156],{"alt":14,"src":51157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[40,51159,51160],{},"for(;;) {",[40,51162,1051],{},[40,51164,51165],{},"表示无限循环",[40,51167,51168],{},[1443,51169],{"alt":14,"src":51170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[21980,51172,51174],{"id":51173},"_2724-循环的退出","2.7.2.4 循环的退出",[40,51176,51177],{},[1443,51178],{"alt":14,"src":51179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[35,51181,51183],{"id":51182},"_28-数组","2.8 数组",[65,51185,51187],{"id":51186},"_281-基础认识","2.8.1 基础认识",[40,51189,51190],{},[1443,51191],{"alt":14,"src":51192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[40,51194,51195],{},[1443,51196],{"alt":14,"src":51197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[40,51199,51200],{},[1443,51201],{"alt":14,"src":51202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[40,51204,51205],{},[1443,51206],{"alt":14,"src":51207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[65,51209,51211],{"id":51210},"_282-操作数组","2.8.2 操作数组",[40,51213,51214],{},[1443,51215],{"alt":14,"src":51216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[48,51218,51219],{},[51,51220,51221],{},"添加元素",[40,51223,51224],{},[1443,51225],{"alt":14,"src":51226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[40,51228,51229],{},"console.log(arr.push('green'))",[40,51231,51232],{},"输出结果：为新数组的长度",[40,51234,51235],{},[1443,51236],{"alt":14,"src":51237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[40,51239,51240],{},"push用的非常多，一定要记住",[48,51242,51243],{},[51,51244,51245],{},"删除元素",[40,51247,51248],{},[1443,51249],{"alt":14,"src":51250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[40,51252,51253],{},[1443,51254],{"alt":14,"src":51255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[40,51257,51258],{},[1443,51259],{"alt":14,"src":51260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[65,51262,51264],{"id":51263},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[85,51266,51268],{"className":50610,"code":51267,"language":50612,"meta":14,"style":14},"\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",[91,51269,51270,51285,51301,51305,51314,51332,51356,51378,51392,51400,51407,51419,51430,51434,51438,51445,51457,51472,51485,51504,51521,51536,51548,51560,51572,51576,51580,51591,51601,51613,51625,51637,51648,51652,51656,51668,51672,51686,51690,51694,51705,51719,51731,51745,51749,51758,51767,51771,51780,51784,51793,51798,51803,51816,51844,51849,51854,51879,51884,51888,51893,51898,51913,51917,51922,51952,51964,51980,51996,52010,52015,52022,52026,52031,52044,52052,52060,52064],{"__ignoreMap":14},[94,51271,51272,51275,51279,51282],{"class":96,"line":97},[94,51273,51274],{"class":104},"\u003C!",[94,51276,51278],{"class":51277},"s9eBZ","DOCTYPE",[94,51280,51281],{"class":1944}," html",[94,51283,51284],{"class":104},">\n",[94,51286,51287,51289,51291,51294,51296,51299],{"class":96,"line":15},[94,51288,1015],{"class":104},[94,51290,50612],{"class":51277},[94,51292,51293],{"class":1944}," lang",[94,51295,150],{"class":104},[94,51297,51298],{"class":209},"\"en\"",[94,51300,51284],{"class":104},[94,51302,51303],{"class":96,"line":1160},[94,51304,2381],{"emptyLinePlaceholder":20},[94,51306,51307,51309,51312],{"class":96,"line":1175},[94,51308,1015],{"class":104},[94,51310,51311],{"class":51277},"head",[94,51313,51284],{"class":104},[94,51315,51316,51319,51322,51325,51327,51330],{"class":96,"line":1181},[94,51317,51318],{"class":104},"    \u003C",[94,51320,51321],{"class":51277},"meta",[94,51323,51324],{"class":1944}," charset",[94,51326,150],{"class":104},[94,51328,51329],{"class":209},"\"UTF-8\"",[94,51331,51284],{"class":104},[94,51333,51334,51336,51338,51341,51343,51346,51349,51351,51354],{"class":96,"line":1195},[94,51335,51318],{"class":104},[94,51337,51321],{"class":51277},[94,51339,51340],{"class":1944}," http-equiv",[94,51342,150],{"class":104},[94,51344,51345],{"class":209},"\"X-UA-Compatible\"",[94,51347,51348],{"class":1944}," content",[94,51350,150],{"class":104},[94,51352,51353],{"class":209},"\"IE=edge\"",[94,51355,51284],{"class":104},[94,51357,51358,51360,51362,51364,51366,51369,51371,51373,51376],{"class":96,"line":1201},[94,51359,51318],{"class":104},[94,51361,51321],{"class":51277},[94,51363,14902],{"class":1944},[94,51365,150],{"class":104},[94,51367,51368],{"class":209},"\"viewport\"",[94,51370,51348],{"class":1944},[94,51372,150],{"class":104},[94,51374,51375],{"class":209},"\"width=device-width, initial-scale=1.0\"",[94,51377,51284],{"class":104},[94,51379,51380,51382,51385,51388,51390],{"class":96,"line":1292},[94,51381,51318],{"class":104},[94,51383,51384],{"class":51277},"title",[94,51386,51387],{"class":104},">Document\u003C\u002F",[94,51389,51384],{"class":51277},[94,51391,51284],{"class":104},[94,51393,51394,51396,51398],{"class":96,"line":1298},[94,51395,51318],{"class":104},[94,51397,5108],{"class":51277},[94,51399,51284],{"class":104},[94,51401,51402,51405],{"class":96,"line":1310},[94,51403,51404],{"class":51277},"        *",[94,51406,15554],{"class":104},[94,51408,51409,51412,51415,51417],{"class":96,"line":1593},[94,51410,51411],{"class":153},"            margin",[94,51413,51414],{"class":104},": ",[94,51416,296],{"class":153},[94,51418,1271],{"class":104},[94,51420,51421,51424,51426,51428],{"class":96,"line":1598},[94,51422,51423],{"class":153},"            padding",[94,51425,51414],{"class":104},[94,51427,296],{"class":153},[94,51429,1271],{"class":104},[94,51431,51432],{"class":96,"line":1604},[94,51433,2510],{"class":104},[94,51435,51436],{"class":96,"line":1609},[94,51437,2381],{"emptyLinePlaceholder":20},[94,51439,51440,51443],{"class":96,"line":1623},[94,51441,51442],{"class":1944},"        .box",[94,51444,15554],{"class":104},[94,51446,51447,51450,51452,51455],{"class":96,"line":1628},[94,51448,51449],{"class":153},"            display",[94,51451,51414],{"class":104},[94,51453,51454],{"class":153},"flex",[94,51456,1271],{"class":104},[94,51458,51459,51462,51464,51467,51470],{"class":96,"line":1634},[94,51460,51461],{"class":153},"            width",[94,51463,51414],{"class":104},[94,51465,51466],{"class":153},"700",[94,51468,51469],{"class":100},"px",[94,51471,1271],{"class":104},[94,51473,51474,51477,51479,51481,51483],{"class":96,"line":1655},[94,51475,51476],{"class":153},"            height",[94,51478,51414],{"class":104},[94,51480,3954],{"class":153},[94,51482,51469],{"class":100},[94,51484,1271],{"class":104},[94,51486,51487,51490,51492,51494,51496,51499,51502],{"class":96,"line":1660},[94,51488,51489],{"class":153},"            border-left",[94,51491,51414],{"class":104},[94,51493,322],{"class":153},[94,51495,51469],{"class":100},[94,51497,51498],{"class":153}," solid",[94,51500,51501],{"class":153}," pink",[94,51503,1271],{"class":104},[94,51505,51506,51509,51511,51513,51515,51517,51519],{"class":96,"line":1674},[94,51507,51508],{"class":153},"            border-bottom",[94,51510,51414],{"class":104},[94,51512,322],{"class":153},[94,51514,51469],{"class":100},[94,51516,51498],{"class":153},[94,51518,51501],{"class":153},[94,51520,1271],{"class":104},[94,51522,51523,51525,51527,51529,51531,51534],{"class":96,"line":1679},[94,51524,51411],{"class":153},[94,51526,51414],{"class":104},[94,51528,761],{"class":153},[94,51530,51469],{"class":100},[94,51532,51533],{"class":153}," auto",[94,51535,1271],{"class":104},[94,51537,51538,51541,51543,51546],{"class":96,"line":1708},[94,51539,51540],{"class":153},"            justify-content",[94,51542,51414],{"class":104},[94,51544,51545],{"class":153},"space-around",[94,51547,1271],{"class":104},[94,51549,51550,51553,51555,51558],{"class":96,"line":1713},[94,51551,51552],{"class":153},"            align-items",[94,51554,51414],{"class":104},[94,51556,51557],{"class":153},"flex-end",[94,51559,1271],{"class":104},[94,51561,51562,51565,51567,51570],{"class":96,"line":1730},[94,51563,51564],{"class":153},"            text-align",[94,51566,51414],{"class":104},[94,51568,51569],{"class":153},"center",[94,51571,1271],{"class":104},[94,51573,51574],{"class":96,"line":1735},[94,51575,2510],{"class":104},[94,51577,51578],{"class":96,"line":1740},[94,51579,2381],{"emptyLinePlaceholder":20},[94,51581,51582,51584,51586,51589],{"class":96,"line":1745},[94,51583,51442],{"class":1944},[94,51585,1065],{"class":100},[94,51587,51588],{"class":51277},"div",[94,51590,15554],{"class":104},[94,51592,51593,51595,51597,51599],{"class":96,"line":1759},[94,51594,51449],{"class":153},[94,51596,51414],{"class":104},[94,51598,51454],{"class":153},[94,51600,1271],{"class":104},[94,51602,51603,51605,51607,51609,51611],{"class":96,"line":1764},[94,51604,51461],{"class":153},[94,51606,51414],{"class":104},[94,51608,761],{"class":153},[94,51610,51469],{"class":100},[94,51612,1271],{"class":104},[94,51614,51615,51618,51620,51623],{"class":96,"line":2558},[94,51616,51617],{"class":153},"            background-color",[94,51619,51414],{"class":104},[94,51621,51622],{"class":153},"pink",[94,51624,1271],{"class":104},[94,51626,51627,51630,51632,51635],{"class":96,"line":2572},[94,51628,51629],{"class":153},"            flex-direction",[94,51631,51414],{"class":104},[94,51633,51634],{"class":153},"column",[94,51636,1271],{"class":104},[94,51638,51639,51641,51643,51646],{"class":96,"line":2580},[94,51640,51540],{"class":153},[94,51642,51414],{"class":104},[94,51644,51645],{"class":153},"space-between",[94,51647,1271],{"class":104},[94,51649,51650],{"class":96,"line":2585},[94,51651,2510],{"class":104},[94,51653,51654],{"class":96,"line":2591},[94,51655,2381],{"emptyLinePlaceholder":20},[94,51657,51658,51660,51663,51666],{"class":96,"line":2597},[94,51659,51442],{"class":1944},[94,51661,51662],{"class":51277}," div",[94,51664,51665],{"class":51277}," span",[94,51667,15554],{"class":104},[94,51669,51670],{"class":96,"line":2602},[94,51671,2381],{"emptyLinePlaceholder":20},[94,51673,51674,51677,51679,51682,51684],{"class":96,"line":7930},[94,51675,51676],{"class":153},"            margin-top",[94,51678,51414],{"class":104},[94,51680,51681],{"class":153},"-20",[94,51683,51469],{"class":100},[94,51685,1271],{"class":104},[94,51687,51688],{"class":96,"line":7954},[94,51689,2510],{"class":104},[94,51691,51692],{"class":96,"line":7959},[94,51693,2381],{"emptyLinePlaceholder":20},[94,51695,51696,51698,51700,51703],{"class":96,"line":7965},[94,51697,51442],{"class":1944},[94,51699,51662],{"class":51277},[94,51701,51702],{"class":51277}," h4",[94,51704,15554],{"class":104},[94,51706,51707,51710,51712,51715,51717],{"class":96,"line":7992},[94,51708,51709],{"class":153},"            margin-bottom",[94,51711,51414],{"class":104},[94,51713,51714],{"class":153},"-35",[94,51716,51469],{"class":100},[94,51718,1271],{"class":104},[94,51720,51721,51723,51725,51727,51729],{"class":96,"line":7997},[94,51722,51461],{"class":153},[94,51724,51414],{"class":104},[94,51726,461],{"class":153},[94,51728,51469],{"class":100},[94,51730,1271],{"class":104},[94,51732,51733,51736,51738,51741,51743],{"class":96,"line":8003},[94,51734,51735],{"class":153},"            margin-left",[94,51737,51414],{"class":104},[94,51739,51740],{"class":153},"-10",[94,51742,51469],{"class":100},[94,51744,1271],{"class":104},[94,51746,51747],{"class":96,"line":8015},[94,51748,2510],{"class":104},[94,51750,51751,51754,51756],{"class":96,"line":8027},[94,51752,51753],{"class":104},"    \u003C\u002F",[94,51755,5108],{"class":51277},[94,51757,51284],{"class":104},[94,51759,51760,51763,51765],{"class":96,"line":8039},[94,51761,51762],{"class":104},"\u003C\u002F",[94,51764,51311],{"class":51277},[94,51766,51284],{"class":104},[94,51768,51769],{"class":96,"line":9698},[94,51770,2381],{"emptyLinePlaceholder":20},[94,51772,51773,51775,51778],{"class":96,"line":9723},[94,51774,1015],{"class":104},[94,51776,51777],{"class":51277},"body",[94,51779,51284],{"class":104},[94,51781,51782],{"class":96,"line":9746},[94,51783,2381],{"emptyLinePlaceholder":20},[94,51785,51786,51788,51791],{"class":96,"line":9770},[94,51787,51318],{"class":104},[94,51789,51790],{"class":51277},"script",[94,51792,51284],{"class":104},[94,51794,51795],{"class":96,"line":9775},[94,51796,51797],{"class":163},"        \u002F\u002F 1. 四次弹框效果\n",[94,51799,51800],{"class":96,"line":9780},[94,51801,51802],{"class":163},"        \u002F\u002F 声明一个新的数组\n",[94,51804,51805,51808,51811,51813],{"class":96,"line":9785},[94,51806,51807],{"class":100},"        let",[94,51809,51810],{"class":104}," arr ",[94,51812,150],{"class":100},[94,51814,51815],{"class":104}," []\n",[94,51817,51818,51820,51822,51825,51827,51829,51831,51833,51835,51838,51840,51842],{"class":96,"line":9794},[94,51819,3384],{"class":100},[94,51821,1639],{"class":104},[94,51823,51824],{"class":100},"let",[94,51826,9420],{"class":104},[94,51828,150],{"class":100},[94,51830,25101],{"class":153},[94,51832,9427],{"class":104},[94,51834,1569],{"class":100},[94,51836,51837],{"class":153}," 4",[94,51839,3195],{"class":104},[94,51841,2273],{"class":100},[94,51843,12424],{"class":104},[94,51845,51846],{"class":96,"line":9799},[94,51847,51848],{"class":163},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[94,51850,51851],{"class":96,"line":9805},[94,51852,51853],{"class":163},"            \u002F\u002F arr.push(num)\n",[94,51855,51856,51859,51862,51864,51867,51869,51872,51874,51877],{"class":96,"line":9826},[94,51857,51858],{"class":104},"            arr.",[94,51860,51861],{"class":1944},"push",[94,51863,105],{"class":104},[94,51865,51866],{"class":1944},"prompt",[94,51868,105],{"class":104},[94,51870,51871],{"class":209},"`请输入第${",[94,51873,546],{"class":104},[94,51875,51876],{"class":209},"}季度的数据:`",[94,51878,30480],{"class":104},[94,51880,51881],{"class":96,"line":9832},[94,51882,51883],{"class":163},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[94,51885,51886],{"class":96,"line":9846},[94,51887,2510],{"class":104},[94,51889,51890],{"class":96,"line":9852},[94,51891,51892],{"class":163},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[94,51894,51895],{"class":96,"line":9879},[94,51896,51897],{"class":163},"        \u002F\u002F 盒子开头\n",[94,51899,51900,51903,51906,51908,51911],{"class":96,"line":9888},[94,51901,51902],{"class":104},"        document.",[94,51904,51905],{"class":1944},"write",[94,51907,105],{"class":104},[94,51909,51910],{"class":209},"` \u003Cdiv class=\"box\">`",[94,51912,111],{"class":104},[94,51914,51915],{"class":96,"line":9894},[94,51916,2381],{"emptyLinePlaceholder":20},[94,51918,51919],{"class":96,"line":9902},[94,51920,51921],{"class":163},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[94,51923,51924,51926,51928,51930,51932,51934,51936,51938,51940,51943,51946,51948,51950],{"class":96,"line":9907},[94,51925,3384],{"class":100},[94,51927,1639],{"class":104},[94,51929,51824],{"class":100},[94,51931,9420],{"class":104},[94,51933,150],{"class":100},[94,51935,4074],{"class":153},[94,51937,9427],{"class":104},[94,51939,1015],{"class":100},[94,51941,51942],{"class":104}," arr.",[94,51944,51945],{"class":153},"length",[94,51947,3195],{"class":104},[94,51949,2273],{"class":100},[94,51951,12424],{"class":104},[94,51953,51954,51957,51959,51961],{"class":96,"line":16586},[94,51955,51956],{"class":104},"            document.",[94,51958,51905],{"class":1944},[94,51960,105],{"class":104},[94,51962,51963],{"class":209},"`\n",[94,51965,51966,51969,51971,51973,51975,51977],{"class":96,"line":16592},[94,51967,51968],{"class":209},"              \u003Cdiv style=\"height: ${",[94,51970,3861],{"class":104},[94,51972,995],{"class":209},[94,51974,546],{"class":104},[94,51976,1045],{"class":209},[94,51978,51979],{"class":209},"}px;\">\n",[94,51981,51982,51985,51987,51989,51991,51993],{"class":96,"line":16615},[94,51983,51984],{"class":209},"                \u003Cspan>${",[94,51986,3861],{"class":104},[94,51988,995],{"class":209},[94,51990,546],{"class":104},[94,51992,1045],{"class":209},[94,51994,51995],{"class":209},"}\u003C\u002Fspan>\n",[94,51997,51998,52001,52003,52005,52007],{"class":96,"line":16621},[94,51999,52000],{"class":209},"                \u003Ch4>第${",[94,52002,546],{"class":104},[94,52004,45549],{"class":100},[94,52006,25101],{"class":153},[94,52008,52009],{"class":209},"}季度\u003C\u002Fh4>\n",[94,52011,52012],{"class":96,"line":16644},[94,52013,52014],{"class":209},"              \u003C\u002Fdiv>          \n",[94,52016,52017,52020],{"class":96,"line":16658},[94,52018,52019],{"class":209},"            `",[94,52021,111],{"class":104},[94,52023,52024],{"class":96,"line":16678},[94,52025,2510],{"class":104},[94,52027,52028],{"class":96,"line":16684},[94,52029,52030],{"class":163},"        \u002F\u002F 盒子结尾\n",[94,52032,52033,52035,52037,52039,52042],{"class":96,"line":16695},[94,52034,51902],{"class":104},[94,52036,51905],{"class":1944},[94,52038,105],{"class":104},[94,52040,52041],{"class":209},"` \u003C\u002Fdiv>`",[94,52043,111],{"class":104},[94,52045,52046,52048,52050],{"class":96,"line":16718},[94,52047,51753],{"class":104},[94,52049,51790],{"class":51277},[94,52051,51284],{"class":104},[94,52053,52054,52056,52058],{"class":96,"line":16740},[94,52055,51762],{"class":104},[94,52057,51777],{"class":51277},[94,52059,51284],{"class":104},[94,52061,52062],{"class":96,"line":16745},[94,52063,2381],{"emptyLinePlaceholder":20},[94,52065,52066,52068,52070],{"class":96,"line":16751},[94,52067,51762],{"class":104},[94,52069,50612],{"class":51277},[94,52071,51284],{"class":104},[65,52073,52075],{"id":52074},"_284-冒泡排序","2.8.4 冒泡排序",[85,52077,52079],{"className":50610,"code":52078,"language":50612,"meta":14,"style":14},"\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",[91,52080,52081,52091,52105,52109,52117,52132,52152,52164,52172,52176,52184,52192,52224,52257,52294,52299,52318,52323,52336,52351,52367,52371,52376,52380,52390,52399,52407,52411],{"__ignoreMap":14},[94,52082,52083,52085,52087,52089],{"class":96,"line":97},[94,52084,51274],{"class":104},[94,52086,51278],{"class":51277},[94,52088,51281],{"class":1944},[94,52090,51284],{"class":104},[94,52092,52093,52095,52097,52099,52101,52103],{"class":96,"line":15},[94,52094,1015],{"class":104},[94,52096,50612],{"class":51277},[94,52098,51293],{"class":1944},[94,52100,150],{"class":104},[94,52102,51298],{"class":209},[94,52104,51284],{"class":104},[94,52106,52107],{"class":96,"line":1160},[94,52108,2381],{"emptyLinePlaceholder":20},[94,52110,52111,52113,52115],{"class":96,"line":1175},[94,52112,1015],{"class":104},[94,52114,51311],{"class":51277},[94,52116,51284],{"class":104},[94,52118,52119,52122,52124,52126,52128,52130],{"class":96,"line":1181},[94,52120,52121],{"class":104},"  \u003C",[94,52123,51321],{"class":51277},[94,52125,51324],{"class":1944},[94,52127,150],{"class":104},[94,52129,51329],{"class":209},[94,52131,51284],{"class":104},[94,52133,52134,52136,52138,52140,52142,52144,52146,52148,52150],{"class":96,"line":1195},[94,52135,52121],{"class":104},[94,52137,51321],{"class":51277},[94,52139,14902],{"class":1944},[94,52141,150],{"class":104},[94,52143,51368],{"class":209},[94,52145,51348],{"class":1944},[94,52147,150],{"class":104},[94,52149,51375],{"class":209},[94,52151,51284],{"class":104},[94,52153,52154,52156,52158,52160,52162],{"class":96,"line":1201},[94,52155,52121],{"class":104},[94,52157,51384],{"class":51277},[94,52159,51387],{"class":104},[94,52161,51384],{"class":51277},[94,52163,51284],{"class":104},[94,52165,52166,52168,52170],{"class":96,"line":1292},[94,52167,51762],{"class":104},[94,52169,51311],{"class":51277},[94,52171,51284],{"class":104},[94,52173,52174],{"class":96,"line":1298},[94,52175,2381],{"emptyLinePlaceholder":20},[94,52177,52178,52180,52182],{"class":96,"line":1310},[94,52179,1015],{"class":104},[94,52181,51777],{"class":51277},[94,52183,51284],{"class":104},[94,52185,52186,52188,52190],{"class":96,"line":1593},[94,52187,52121],{"class":104},[94,52189,51790],{"class":51277},[94,52191,51284],{"class":104},[94,52193,52194,52197,52199,52201,52204,52206,52208,52210,52212,52214,52216,52218,52220,52222],{"class":96,"line":1598},[94,52195,52196],{"class":100},"    let",[94,52198,51810],{"class":104},[94,52200,150],{"class":100},[94,52202,52203],{"class":104}," [",[94,52205,424],{"class":153},[94,52207,12417],{"class":104},[94,52209,398],{"class":153},[94,52211,12417],{"class":104},[94,52213,176],{"class":153},[94,52215,12417],{"class":104},[94,52217,182],{"class":153},[94,52219,12417],{"class":104},[94,52221,322],{"class":153},[94,52223,33229],{"class":104},[94,52225,52226,52228,52230,52232,52234,52236,52238,52240,52242,52244,52246,52249,52251,52253,52255],{"class":96,"line":1604},[94,52227,3182],{"class":100},[94,52229,1639],{"class":104},[94,52231,51824],{"class":100},[94,52233,9420],{"class":104},[94,52235,150],{"class":100},[94,52237,4074],{"class":153},[94,52239,9427],{"class":104},[94,52241,1015],{"class":100},[94,52243,51942],{"class":104},[94,52245,51945],{"class":153},[94,52247,52248],{"class":100}," -",[94,52250,25101],{"class":153},[94,52252,3195],{"class":104},[94,52254,2273],{"class":100},[94,52256,12424],{"class":104},[94,52258,52259,52262,52264,52266,52268,52270,52272,52274,52276,52278,52280,52282,52284,52286,52288,52290,52292],{"class":96,"line":1609},[94,52260,52261],{"class":100},"      for",[94,52263,1639],{"class":104},[94,52265,51824],{"class":100},[94,52267,9482],{"class":104},[94,52269,150],{"class":100},[94,52271,4074],{"class":153},[94,52273,9489],{"class":104},[94,52275,1015],{"class":100},[94,52277,51942],{"class":104},[94,52279,51945],{"class":153},[94,52281,52248],{"class":100},[94,52283,9420],{"class":104},[94,52285,637],{"class":100},[94,52287,25101],{"class":153},[94,52289,9496],{"class":104},[94,52291,2273],{"class":100},[94,52293,12424],{"class":104},[94,52295,52296],{"class":96,"line":1623},[94,52297,52298],{"class":163},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[94,52300,52301,52303,52306,52308,52311,52313,52315],{"class":96,"line":1628},[94,52302,2478],{"class":100},[94,52304,52305],{"class":104}," (arr[j] ",[94,52307,1065],{"class":100},[94,52309,52310],{"class":104}," arr[j ",[94,52312,586],{"class":100},[94,52314,25101],{"class":153},[94,52316,52317],{"class":104},"]) {\n",[94,52319,52320],{"class":96,"line":1634},[94,52321,52322],{"class":163},"          \u002F\u002F 交换两个变量\n",[94,52324,52325,52328,52331,52333],{"class":96,"line":1655},[94,52326,52327],{"class":100},"          let",[94,52329,52330],{"class":104}," tmp ",[94,52332,150],{"class":100},[94,52334,52335],{"class":104}," arr[j]\n",[94,52337,52338,52341,52343,52345,52347,52349],{"class":96,"line":1660},[94,52339,52340],{"class":104},"          arr[j] ",[94,52342,150],{"class":100},[94,52344,52310],{"class":104},[94,52346,586],{"class":100},[94,52348,25101],{"class":153},[94,52350,33229],{"class":104},[94,52352,52353,52356,52358,52360,52362,52364],{"class":96,"line":1674},[94,52354,52355],{"class":104},"          arr[j ",[94,52357,586],{"class":100},[94,52359,25101],{"class":153},[94,52361,4424],{"class":104},[94,52363,150],{"class":100},[94,52365,52366],{"class":104}," tmp\n",[94,52368,52369],{"class":96,"line":1679},[94,52370,2510],{"class":104},[94,52372,52373],{"class":96,"line":1708},[94,52374,52375],{"class":104},"      }\n",[94,52377,52378],{"class":96,"line":1713},[94,52379,2168],{"class":104},[94,52381,52382,52385,52387],{"class":96,"line":1730},[94,52383,52384],{"class":104},"    document.",[94,52386,51905],{"class":1944},[94,52388,52389],{"class":104},"(arr)\n",[94,52391,52392,52395,52397],{"class":96,"line":1735},[94,52393,52394],{"class":104},"  \u003C\u002F",[94,52396,51790],{"class":51277},[94,52398,51284],{"class":104},[94,52400,52401,52403,52405],{"class":96,"line":1740},[94,52402,51762],{"class":104},[94,52404,51777],{"class":51277},[94,52406,51284],{"class":104},[94,52408,52409],{"class":96,"line":1745},[94,52410,2381],{"emptyLinePlaceholder":20},[94,52412,52413,52415,52417],{"class":96,"line":1759},[94,52414,51762],{"class":104},[94,52416,50612],{"class":51277},[94,52418,51284],{"class":104},[40,52420,52421],{},[1443,52422],{"alt":14,"src":52423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[40,52425,52426],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[40,52428,52429],{},"let arr = [4, 2, 5, 1, 3]",[40,52431,52432],{},"\u002F\u002F 1.升序排列写法",[40,52434,52435],{},"arr.sort(function (a, b) {",[40,52437,52438],{},"return a - b",[40,52440,52441],{},"})",[40,52443,52444],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[40,52446,52447],{},"\u002F\u002F 降序排列写法",[40,52449,52435],{},[40,52451,52452],{},"return b - a",[40,52454,52441],{},[40,52456,52457],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[35,52459,52461],{"id":52460},"_29-函数","2.9 函数",[40,52463,52464],{},[1443,52465],{"alt":14,"src":52466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[40,52468,52469],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[40,52471,52472],{},"函数的声明用function",[40,52474,52475],{},"函数里边可以嵌套函数",[65,52477,52479],{"id":52478},"_291-函数传参","2.9.1 函数传参",[40,52481,52482],{},[1443,52483],{"alt":14,"src":52484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[40,52486,52487],{},[1443,52488],{"alt":14,"src":52489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1112,52491,52492,52495,52498,52501,52504,52507],{},[51,52493,52494],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[51,52496,52497],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[51,52499,52500],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[51,52502,52503],{},"开发中尽量保持形参和实参个数一致",[51,52505,52506],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[51,52508,52509],{},"形参只在函数中有用，所以不需要进行声明这个变量",[40,52511,52512],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[65,52514,52516],{"id":52515},"_292-函数的返回值","2.9.2 函数的返回值",[40,52518,52519],{},[1443,52520],{"alt":14,"src":52521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[40,52523,52524],{},[1443,52525],{"alt":14,"src":52526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1112,52528,52529,52532,52535,52538,52541],{},[51,52530,52531],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[51,52533,52534],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[51,52536,52537],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[51,52539,52540],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[51,52542,52543],{},"断点调试:进入函数内部看执行过程F11",[65,52545,52547],{"id":52546},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[85,52549,52551],{"className":50610,"code":52550,"language":50612,"meta":14,"style":14},"    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",[91,52552,52553,52558,52563,52567,52572],{"__ignoreMap":14},[94,52554,52555],{"class":96,"line":97},[94,52556,52557],{"class":104},"    function fn(a, b) {\n",[94,52559,52560],{"class":96,"line":15},[94,52561,52562],{"class":104},"      console.log(a + b);\n",[94,52564,52565],{"class":96,"line":1160},[94,52566,2168],{"class":104},[94,52568,52569],{"class":96,"line":1175},[94,52570,52571],{"class":104},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[94,52573,52574],{"class":96,"line":1181},[94,52575,52576],{"class":104},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[65,52578,52580],{"id":52579},"_294-作用域","2.9.4 作用域",[1112,52582,52583,52589,52594,52597,52600],{},[51,52584,52585,52586],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[254,52587,52588],{},"作用域",[51,52590,52591],{},[254,52592,52593],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[51,52595,52596],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[51,52598,52599],{},"函数内部可以直接所使用全局变量",[51,52601,52602],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[40,52604,14615],{},[85,52606,52608],{"className":50610,"code":52607,"language":50612,"meta":14,"style":14},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[91,52609,52610,52615,52620,52624,52629,52634,52639],{"__ignoreMap":14},[94,52611,52612],{"class":96,"line":97},[94,52613,52614],{"class":104},"    function fun() {\n",[94,52616,52617],{"class":96,"line":15},[94,52618,52619],{"class":104},"      num = 10\n",[94,52621,52622],{"class":96,"line":1160},[94,52623,2168],{"class":104},[94,52625,52626],{"class":96,"line":1175},[94,52627,52628],{"class":104},"    fun()\n",[94,52630,52631],{"class":96,"line":1181},[94,52632,52633],{"class":104},"    console.log(num)\n",[94,52635,52636],{"class":96,"line":1195},[94,52637,52638],{"class":104},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[94,52640,52641],{"class":96,"line":1201},[94,52642,52643],{"class":104},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1112,52645,52646,52649],{},[51,52647,52648],{},"函数内部的形参可以看做是局部变量",[51,52650,52651],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[40,52653,52654,52655],{},"变量访问原则： ",[254,52656,52657],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[65,52659,52661],{"id":52660},"_295-匿名函数","2.9.5 匿名函数",[40,52663,52664],{},"函数可以分为具名函数和匿名函数",[40,52666,52667],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[48,52669,52670],{},[51,52671,52672],{},"函数表达式",[40,52674,52675],{},[1443,52676],{"alt":14,"src":52677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[40,52679,52680],{},"里边也可以写参数",[40,52682,52683],{},"具名函数调用位置可以随意调整；",[40,52685,52686],{},"匿名函数函数表达式形式只能在声明后才可以使用",[48,52688,52689],{"start":15},[51,52690,52691],{},"立即执行函数",[40,52693,52694],{},[1443,52695],{"alt":14,"src":52696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[40,52698,52699],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[40,52701,52702],{},"写法：两个小括号，然后在第一个小括号中写function",[40,52704,52705],{},"(function () {})();",[40,52707,52708],{},"不要落下最后的;",[40,52710,52711],{},"立即执行函数必须要加;",[40,52713,52714],{},"分号写前写后都没问题",[40,52716,52717],{},"写前：",[40,52719,52720],{},"(function() {})()",[40,52722,52723],{},";(function () {})();",[40,52725,52726],{},"写后:",[40,52728,52729],{},"(function() {})();",[40,52731,52705],{},[40,52733,52734],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[40,52736,52737],{},"还有一种写法：",[40,52739,52740],{},"(function(){}());",[40,52742,52743],{},"或者:",[40,52745,52746],{},"!function(){}();",[40,52748,52749],{},"立即执行函数有时候也是可以加名字的：",[40,52751,52752],{},"(function flexible(window,document) {}(window,document));",[40,52754,52755],{},"省一些调用方法",[65,52757,52759],{"id":52758},"_296-逻辑中断","2.9.6 逻辑中断!!!",[40,52761,52762],{},[1443,52763],{"alt":14,"src":52764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[40,52766,52767],{},"这样就不用非得给x,y初始化了",[40,52769,52770],{},[1443,52771],{"alt":14,"src":52772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[40,52774,52775],{},"代码执行时先看左边",[40,52777,52778],{},"例如：console.log(false && 3+5)",[40,52780,52781],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[40,52783,52784],{},"&&都是真时，就返回最后一个真值",[40,52786,52787],{},"console.log(11 && 22)",[40,52789,52790],{},"输出22",[40,52792,52793],{},"逻辑与：遇真则真",[40,52795,14615],{},[40,52797,52798],{},"let age=1",[40,52800,52801],{},"console.log(11 || age++)",[40,52803,52804],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[40,52806,52807],{},"console.log(11 || 22)",[40,52809,52810],{},"||逻辑或遇到真就直接输出，输出结果为11",[40,52812,52813],{},"||如果都是假的话，就取最后一个假的值了",[65,52815,52817],{"id":52816},"_297-转换为boolean型","2.9.7 转换为Boolean型",[40,52819,52820],{},"显示转换：",[40,52822,52823,52826,52827],{},[254,52824,52825],{},"记忆","： ",[254,52828,52829],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[40,52831,52832],{},"空字符串为假，其他字符串全为真",[40,52834,52835],{},[1443,52836],{"alt":14,"src":52837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[40,52839,52840],{},"隐式转换：",[40,52842,52843],{},[1443,52844],{"alt":14,"src":52845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[40,52847,52848],{},"隐式转换:",[40,52850,52851],{},"null+3=3",[40,52853,52854],{},"undefined+3=NaN",[40,52856,52857],{},"null==undefined 输出true,他两个都当0看",[40,52859,52860],{},"null===undefined 输出false",[40,52862,52863],{},"undefined做任何操作都是NaN",[40,52865,52866],{},"NaN不等于NaN，NaN表示计算错误",[35,52868,52870],{"id":52869},"_210-对象","2.10 对象",[65,52872,52874],{"id":52873},"_2101-对象的介绍","2.10.1 对象的介绍",[40,52876,52877],{},"对象也是一种数据类型，里边的数据是无序的",[40,52879,52880],{},"对象由属性和方法组成",[40,52882,52883],{},[1443,52884],{"alt":14,"src":52885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[40,52887,52888],{},[1443,52889],{"alt":14,"src":52890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[40,52892,52893],{},[1443,52894],{"alt":14,"src":52895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[65,52897,52899],{"id":52898},"_2102-对象属性","2.10.2 对象属性",[40,52901,52902],{},[1443,52903],{"alt":14,"src":52904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[48,52906,52907],{},[51,52908,52909],{},"查询对象",[40,52911,52912],{},"对象名.属性 goods.uname",[40,52914,52915],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[40,52917,52918],{},"不带字符串的属性名也可以使用 对象名['属性名']",[40,52920,52921],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[40,52923,52924],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[48,52926,52927],{"start":15},[51,52928,52929],{},"重新赋值",[40,52931,52932],{},"对象名.属性=新值",[48,52934,52935],{"start":1160},[51,52936,52937],{},"增加新数据",[40,52939,52932],{},[48,52941,52942],{"start":1175},[51,52943,52944],{},"删除对象中的属性",[40,52946,52947],{},"delete 对象名.属性",[65,52949,52951],{"id":52950},"_2103-对象方法","2.10.3 对象方法",[40,52953,52954],{},[1443,52955],{"alt":14,"src":52956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[40,52958,52959],{},"后边跟的是匿名函数",[40,52961,52962],{},"对象外面的叫函数；对象内部的叫方法",[40,52964,52965],{},[1443,52966],{"alt":14,"src":52967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[65,52969,52971],{"id":52970},"_2104-遍历对象","2.10.4 遍历对象",[40,52973,52974],{},"理解为加括号的python字典遍历",[40,52976,52977],{},[1443,52978],{"alt":14,"src":52979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[40,52981,52982],{},"k是字符串类型",[40,52984,52985],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[85,52987,52989],{"className":50610,"code":52988,"language":50612,"meta":14,"style":14},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[91,52990,52991,52996,53001,53006,53011],{"__ignoreMap":14},[94,52992,52993],{"class":96,"line":97},[94,52994,52995],{"class":104},"   let arr = [1, 2, 3]\n",[94,52997,52998],{"class":96,"line":15},[94,52999,53000],{"class":104},"    for (let k in arr) {\n",[94,53002,53003],{"class":96,"line":1160},[94,53004,53005],{"class":104},"      console.log(k)\n",[94,53007,53008],{"class":96,"line":1175},[94,53009,53010],{"class":104},"      console.log(arr[k])\n",[94,53012,53013],{"class":96,"line":1181},[94,53014,2168],{"class":104},[40,53016,53017],{},[1443,53018],{"alt":14,"src":53019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[40,53021,53022],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[40,53024,53025],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[40,53027,53028],{},"for in 得到的k是属性名",[51790,53030,53031],{},"\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",[40,53033,53034],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[65,53036,53038],{"id":53037},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[40,53040,53041],{},"数组中放对象信息",[85,53043,53047],{"className":53044,"code":53045,"language":53046,"meta":14,"style":14},"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",[91,53048,53049,53057,53062,53067,53072,53077,53082,53087,53092,53097,53102,53107,53112,53116,53120],{"__ignoreMap":14},[94,53050,53051,53053,53055],{"class":96,"line":97},[94,53052,1015],{"class":104},[94,53054,51790],{"class":51277},[94,53056,51284],{"class":104},[94,53058,53059],{"class":96,"line":15},[94,53060,53061],{"class":104},"    let students = [\n",[94,53063,53064],{"class":96,"line":1160},[94,53065,53066],{"class":104},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[94,53068,53069],{"class":96,"line":1175},[94,53070,53071],{"class":104},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[94,53073,53074],{"class":96,"line":1181},[94,53075,53076],{"class":104},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[94,53078,53079],{"class":96,"line":1195},[94,53080,53081],{"class":104},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[94,53083,53084],{"class":96,"line":1201},[94,53085,53086],{"class":104},"    ]\n",[94,53088,53089],{"class":96,"line":1292},[94,53090,53091],{"class":104},"    for (let i = 0; i \u003C students.length; i++) {\n",[94,53093,53094],{"class":96,"line":1298},[94,53095,53096],{"class":104},"      for (let k in students[i]) {\n",[94,53098,53099],{"class":96,"line":1310},[94,53100,53101],{"class":104},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[94,53103,53104],{"class":96,"line":1593},[94,53105,53106],{"class":104},"        \u002F\u002F输出每个人的名字：\n",[94,53108,53109],{"class":96,"line":1598},[94,53110,53111],{"class":104},"        \u002F\u002Fconsole.log(students[i].name)\n",[94,53113,53114],{"class":96,"line":1604},[94,53115,52375],{"class":104},[94,53117,53118],{"class":96,"line":1609},[94,53119,2168],{"class":104},[94,53121,53122,53124,53126],{"class":96,"line":1623},[94,53123,52394],{"class":104},[94,53125,51790],{"class":51277},[94,53127,51284],{"class":104},[65,53129,53131],{"id":53130},"_2106-内置对象","2.10.6 内置对象",[40,53133,53134],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[48,53136,53137],{},[51,53138,53139],{},"数学对象Math",[40,53141,53142],{},[1443,53143],{"alt":14,"src":53144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[40,53146,53147],{},[343,53148,53151],{"href":53149,"rel":53150},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23847],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[40,53153,53154],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[40,53156,53157],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[40,53159,53160],{},"数组不可以使用Math中的max,min来求最大值与最小值",[40,53162,53163],{},"null是一个空对象，可以认为：null类似于let obj={}",[40,53165,53166],{},"null属于对象数据类型",[48,53168,53169],{"start":15},[51,53170,53171],{},"生成任意范围随机数",[40,53173,53174],{},[1443,53175],{"alt":14,"src":53176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[40,53178,53179],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[40,53181,53182],{},"乘以几就取不到几",[40,53184,53185],{},"取数组中的随机元素：",[40,53187,53188],{},"let arr = ['red', 'green', 'blue']",[40,53190,53191],{},"let random = Math.floor(Math.random() * arr.length)",[40,53193,53194],{},"console.log(arr[random])",[40,53196,53197],{},"这个函数得到的是全闭区间",[40,53199,53200],{},"function getRandom(N, M) {",[40,53202,53203],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[40,53205,1051],{},[40,53207,53208],{},"console.log(getRandom(4, 8))",[65,53210,53212],{"id":53211},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[40,53214,53215],{},[1443,53216],{"alt":14,"src":53217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[40,53219,53220],{},[1443,53221],{"alt":14,"src":53222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[40,53224,53225],{},[1443,53226],{"alt":14,"src":53227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[40,53229,53230],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[40,53232,53233],{},[1443,53234],{"alt":14,"src":53235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[40,53237,53238],{},[1443,53239],{"alt":14,"src":53240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[40,53242,53243],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[40,53245,53246],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[40,53248,53249],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5108,53251,53252],{},"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":14,"searchDepth":15,"depth":15,"links":53254},[53255,53263,53264,53265,53266,53267,53274,53278,53284,53293],{"id":50445,"depth":15,"text":50446,"children":53256},[53257,53258,53259,53260,53261,53262],{"id":50449,"depth":1160,"text":50450},{"id":50466,"depth":1160,"text":50467},{"id":50506,"depth":1160,"text":50507},{"id":50518,"depth":1160,"text":50519},{"id":50527,"depth":1160,"text":50528},{"id":50575,"depth":1160,"text":50576},{"id":50585,"depth":15,"text":50586},{"id":50673,"depth":15,"text":50674},{"id":50696,"depth":15,"text":50697},{"id":50708,"depth":15,"text":50709},{"id":50895,"depth":15,"text":50896,"children":53268},[53269,53270,53271,53272,53273],{"id":50899,"depth":1160,"text":50900},{"id":50908,"depth":1160,"text":50909},{"id":50936,"depth":1160,"text":50937},{"id":50972,"depth":1160,"text":50973},{"id":50997,"depth":1160,"text":50998},{"id":51009,"depth":15,"text":51010,"children":53275},[53276,53277],{"id":51030,"depth":1160,"text":51031},{"id":51124,"depth":1160,"text":51125},{"id":51182,"depth":15,"text":51183,"children":53279},[53280,53281,53282,53283],{"id":51186,"depth":1160,"text":51187},{"id":51210,"depth":1160,"text":51211},{"id":51263,"depth":1160,"text":51264},{"id":52074,"depth":1160,"text":52075},{"id":52460,"depth":15,"text":52461,"children":53285},[53286,53287,53288,53289,53290,53291,53292],{"id":52478,"depth":1160,"text":52479},{"id":52515,"depth":1160,"text":52516},{"id":52546,"depth":1160,"text":52547},{"id":52579,"depth":1160,"text":52580},{"id":52660,"depth":1160,"text":52661},{"id":52758,"depth":1160,"text":52759},{"id":52816,"depth":1160,"text":52817},{"id":52869,"depth":15,"text":52870,"children":53294},[53295,53296,53297,53298,53299,53300,53301],{"id":52873,"depth":1160,"text":52874},{"id":52898,"depth":1160,"text":52899},{"id":52950,"depth":1160,"text":52951},{"id":52970,"depth":1160,"text":52971},{"id":53037,"depth":1160,"text":53038},{"id":53130,"depth":1160,"text":53131},{"id":53211,"depth":1160,"text":53212},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50437,"description":17},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53308,"title":53309,"body":53310,"description":17,"extension":18,"meta":76650,"navigation":20,"path":76651,"seo":76652,"stem":76653,"__hash__":76654},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53311,"toc":76590},[53312,53315,53318,53321,53326,53329,53332,53335,53339,53343,53349,53354,53362,53369,53372,53376,53381,53386,53391,53394,53397,53408,53411,53415,53418,53421,53426,53431,53436,53439,53442,53534,53537,53542,53545,53550,53553,53556,53561,53564,53569,53573,53576,53590,53594,53599,53602,53605,53609,53614,53617,53621,53625,53630,53634,53639,53642,53645,53648,53651,53654,53657,53662,53667,53695,53698,53701,53704,53709,53712,53715,53718,53721,53725,53754,53758,53763,53768,53771,53774,53777,53782,53897,53902,53907,54068,54073,54076,54080,54085,54090,54093,54096,54099,54102,54105,54108,54111,54114,54117,54120,54123,54126,54129,54132,54134,54137,54140,54143,54148,54152,54549,54552,54558,54562,54567,55849,55854,55857,55860,55863,55868,57064,57068,57074,57079,57082,57087,57092,57096,57100,57105,57108,57113,57116,57119,57123,58031,58034,58038,58259,58262,58265,58268,58494,58497,58721,58724,58728,58733,58736,58739,58967,58970,59003,59006,59010,59015,59019,59022,59025,59028,59031,59034,59037,59040,59045,60325,60329,60332,61425,61429,61432,61435,61438,61441,61445,61448,61451,61453,61461,62942,62946,62949,62952,62955,63164,63167,63171,63175,63180,63185,63188,63191,63196,63200,63205,63208,63317,63321,63326,63331,63334,63337,63341,63346,63351,63356,63359,63362,63373,63376,63381,63386,63389,63392,63465,63469,63474,63477,63479,63490,63494,63499,64825,64828,64831,64834,64836,64839,64842,64845,64848,64851,64854,64857,64860,64863,64866,64869,64872,64874,64876,64879,64883,65977,65980,65983,65999,66013,66016,66021,66027,66032,66036,66040,66045,66049,66054,66496,66501,66504,66508,66513,66516,66519,66523,66528,66532,66537,66542,66546,66551,66556,66559,66564,66569,66573,66578,66583,66687,66690,66694,66699,67065,67068,67071,67074,67077,67080,67083,67086,67089,68385,68389,68394,68399,68402,68405,68408,68411,68413,68418,68423,68426,68430,68435,68440,68445,68448,68451,68454,68457,68460,68465,68468,68472,68477,68482,68486,68491,68494,68499,68502,68505,68508,68511,68514,68519,68522,68525,68528,68531,68535,68540,68543,68547,68552,68555,68558,68562,68591,68594,68598,68602,68607,68611,68616,68619,68622,68625,68628,68631,68634,68637,68640,68643,68646,68649,68652,68655,68658,68662,68667,68672,68675,68679,68683,68688,68691,68695,68698,68701,68706,68711,68716,68721,68726,68729,68732,68737,68742,68746,68751,68754,68759,68762,68765,68768,68771,68776,68779,68788,68792,68797,68800,68803,68807,68810,68815,68819,68822,68828,68834,68838,68864,68867,70428,70431,70927,70930,70935,70940,70945,70949,70954,70959,70964,70968,70973,70976,70979,70982,70985,70989,70992,70997,71000,71005,71009,71014,71017,71022,71027,71032,71035,71038,71043,71048,71051,71054,71058,71061,71066,71069,71074,71077,71082,71087,71092,71095,71100,71165,71168,71179,71183,71188,71360,71364,71369,71372,71375,71378,71382,71393,71397,71400,71405,71410,71413,71416,71419,71422,71425,71427,71430,71433,71436,71441,71444,71449,71452,71456,71459,71462,71476,71480,71483,71538,71543,71546,71549,71554,71557,71561,71566,71696,71700,71705,71710,71791,71796,71800,71803,71808,71813,71819,71822,71825,71828,71832,71837,71840,71851,71855,71872,74919,74923,74926,74929,74932,74953,74957,74960,74968,74971,74976,74979,74982,74987,74992,74996,75017,75021,75026,75029,75032,75035,75038,75042,75047,75050,75054,75059,75062,75067,75070,75075,75078,75083,76286,76290,76295,76298,76303,76587],[10,53313,53309],{"id":53314},"_3web-apis",[40,53316,53317],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[40,53319,53320],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[40,53322,53323],{},[1443,53324],{"alt":14,"src":53325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[40,53327,53328],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[40,53330,53331],{},"建议数组和对象使用 const 来声明",[40,53333,53334],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[35,53336,53338],{"id":53337},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[65,53340,53342],{"id":53341},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[40,53344,53345,53348],{},[91,53346,53347],{},"document"," = HTML 文件解析后的对象化表示；",[40,53350,53351,53353],{},[91,53352,53347],{}," ≠ HTML 文件本身",[40,53355,53356,53361],{},[254,53357,53358],{},[91,53359,53360],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[40,53363,53364,53368],{},[254,53365,53366],{},[91,53367,53347],{}," ：容器里的内容，代表当前加载的网页（DOM）",[40,53370,53371],{},"document实际上为window.document的简写",[65,53373,53375],{"id":53374},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[40,53377,53378],{},[1443,53379],{"alt":14,"src":53380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[40,53382,53383],{},[1443,53384],{"alt":14,"src":53385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[40,53387,53388],{},[1443,53389],{"alt":14,"src":53390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[40,53392,53393],{},"console.dir()",[40,53395,53396],{},"dir用来打印对象",[1112,53398,53399,53402,53405],{},[51,53400,53401],{},"任何一个标签，都是一个对象",[51,53403,53404],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[51,53406,53407],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[40,53409,53410],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[65,53412,53414],{"id":53413},"_312-获取dom对象","3.1.2 获取DoM对象",[40,53416,53417],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[40,53419,53420],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[40,53422,53423],{},[254,53424,53425],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[48,53427,53428],{},[51,53429,53430],{},"利用CSS选择器来获取标签元素",[40,53432,53433],{},[1443,53434],{"alt":14,"src":53435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[40,53437,53438],{},"里边的选择器必须必须加引号！！！",[40,53440,53441],{},"只选择第一个元素",[85,53443,53445],{"className":53044,"code":53444,"language":53046,"meta":14,"style":14},"\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",[91,53446,53447,53455,53476,53495,53503,53508,53513,53518,53526],{"__ignoreMap":14},[94,53448,53449,53451,53453],{"class":96,"line":97},[94,53450,1015],{"class":104},[94,53452,51777],{"class":51277},[94,53454,51284],{"class":104},[94,53456,53457,53459,53461,53464,53466,53469,53472,53474],{"class":96,"line":15},[94,53458,52121],{"class":104},[94,53460,51588],{"class":51277},[94,53462,53463],{"class":1944}," class",[94,53465,150],{"class":104},[94,53467,53468],{"class":209},"\"box\"",[94,53470,53471],{"class":104},">123\u003C\u002F",[94,53473,51588],{"class":51277},[94,53475,51284],{"class":104},[94,53477,53478,53480,53482,53484,53486,53488,53491,53493],{"class":96,"line":1160},[94,53479,52121],{"class":104},[94,53481,51588],{"class":51277},[94,53483,53463],{"class":1944},[94,53485,150],{"class":104},[94,53487,53468],{"class":209},[94,53489,53490],{"class":104},">456\u003C\u002F",[94,53492,51588],{"class":51277},[94,53494,51284],{"class":104},[94,53496,53497,53499,53501],{"class":96,"line":1175},[94,53498,52121],{"class":104},[94,53500,51790],{"class":51277},[94,53502,51284],{"class":104},[94,53504,53505],{"class":96,"line":1181},[94,53506,53507],{"class":104},"    \u002F\u002F 1.获取匹配的第一个元素\n",[94,53509,53510],{"class":96,"line":1195},[94,53511,53512],{"class":104},"    const box = document.querySelector('div')\n",[94,53514,53515],{"class":96,"line":1201},[94,53516,53517],{"class":104},"    console.dir(box)\n",[94,53519,53520,53522,53524],{"class":96,"line":1292},[94,53521,52394],{"class":104},[94,53523,51790],{"class":51277},[94,53525,51284],{"class":104},[94,53527,53528,53530,53532],{"class":96,"line":1298},[94,53529,51762],{"class":104},[94,53531,51777],{"class":51277},[94,53533,51284],{"class":104},[40,53535,53536],{},"只选123，不选456",[40,53538,53539],{},[1443,53540],{"alt":14,"src":53541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[40,53543,53544],{},"返回的是一个数组的集合，不能对其进行直接修改",[40,53546,53547],{},[1443,53548],{"alt":14,"src":53549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[40,53551,53552],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[40,53554,53555],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[48,53557,53558],{"start":15},[51,53559,53560],{},"其他方法来获取标签元素",[40,53562,53563],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[40,53565,53566],{},[1443,53567],{"alt":14,"src":53568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[65,53570,53572],{"id":53571},"_313-操作元素的内容","3.1.3 操作元素的内容",[40,53574,53575],{},"设置修改DOM元素内容有两种方式：",[1112,53577,53578,53581,53584,53587],{},[51,53579,53580],{},"元素.innerText=''",[51,53582,53583],{},"元素.innerHTML=''",[51,53585,53586],{},"不写字符串输出数字也是可以的",[51,53588,53589],{},"元素.innerHtml=1",[21980,53591,53593],{"id":53592},"_3131-innertext","3.1.3.1 innerText",[40,53595,53596],{},[1443,53597],{"alt":14,"src":53598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[40,53600,53601],{},"思路：实现了修改盒子中的内容！",[40,53603,53604],{},"它只显示纯文本，不解析标签",[21980,53606,53608],{"id":53607},"_3132-innerhtml","3.1.3.2 innerHTML",[40,53610,53611],{},[1443,53612],{"alt":14,"src":53613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[40,53615,53616],{},"相比于innerText，他的强大之处在于可以解析标签",[65,53618,53620],{"id":53619},"_314-操作元素属性","3.1.4 操作元素属性",[21980,53622,53624],{"id":53623},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[40,53626,53627],{},[1443,53628],{"alt":14,"src":53629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[21980,53631,53633],{"id":53632},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[40,53635,53636],{},[1443,53637],{"alt":14,"src":53638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[40,53640,53641],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[40,53643,53644],{},"div.style.backgroundColor = 'hotpink'",[40,53646,53647],{},"如果按照css的写法，-表示减，就会出错",[40,53649,53650],{},"body元素不需要再获取，直接用就行！！！！！！",[40,53652,53653],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[40,53655,53656],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[40,53658,53659],{},[1443,53660],{"alt":14,"src":53661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[40,53663,53664],{},[1443,53665],{"alt":14,"src":53666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[48,53668,53669,53672,53675,53678,53681,53684],{},[51,53670,53671],{},"className这个方式就是修改很多样式的时候来使用的！",[51,53673,53674],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[51,53676,53677],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[51,53679,53680],{},"className为属性名，如果还用class的话就导致与关键字冲突",[51,53682,53683],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[51,53685,53686,53687,53692],{},"解析标签的时候就变为了",[51588,53688],{"className":53689},[53690,53691],"nav","box",[53693,53694],"br",{},[40,53696,53697],{},"例子：",[51588,53699],{"className":53700},[53690],[51790,53702,53703],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[40,53705,53706],{},[1443,53707],{"alt":14,"src":53708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[40,53710,53711],{},"追加和删除类名用classList",[40,53713,53714],{},"常用于类似于开关的操作",[40,53716,53717],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[40,53719,53720],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[21980,53722,53724],{"id":53723},"_3143-牢记点","3.1.4.3 牢记点",[48,53726,53727,53730,53733,53736,53739,53742,53745,53748,53751],{},[51,53728,53729],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[51,53731,53732],{},"使用style属性操作css时不要忘记引号",[51,53734,53735],{},"使用className或者classList时也不要忘记引号",[51,53737,53738],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[51,53740,53741],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[51,53743,53744],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[51,53746,53747],{},"若： let arr=['1','2',3] arr[0]=1",[51,53749,53750],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[51,53752,53753],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[65,53755,53757],{"id":53756},"_315-操作表单元素","3.1.5 操作表单元素",[48,53759,53760],{},[51,53761,53762],{},"天生的属性",[40,53764,53765],{},[1443,53766],{"alt":14,"src":53767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[40,53769,53770],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[40,53772,53773],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[40,53775,53776],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[40,53778,53779],{},[1443,53780],{"alt":14,"src":53781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[85,53783,53785],{"className":50610,"code":53784,"language":50612,"meta":14,"style":14},"在复选框中如果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",[91,53786,53787,53792,53824,53829,53834,53839,53844,53848,53853,53858,53875,53887,53892],{"__ignoreMap":14},[94,53788,53789],{"class":96,"line":97},[94,53790,53791],{"class":104},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[94,53793,53794,53796,53799,53802,53804,53807,53809,53811,53813,53815,53817,53819,53822],{"class":96,"line":15},[94,53795,1015],{"class":104},[94,53797,53798],{"class":51277},"input",[94,53800,53801],{"class":1944}," type",[94,53803,150],{"class":104},[94,53805,53806],{"class":209},"\"checkbox\"",[94,53808,14902],{"class":1944},[94,53810,150],{"class":104},[94,53812,7634],{"class":209},[94,53814,14941],{"class":1944},[94,53816,150],{"class":104},[94,53818,7634],{"class":209},[94,53820,53821],{"class":1944}," checked",[94,53823,51284],{"class":104},[94,53825,53826],{"class":96,"line":1160},[94,53827,53828],{"class":104},"不选的话：\n",[94,53830,53831],{"class":96,"line":1175},[94,53832,53833],{"class":104},"const input = document.querySelector('input')\n",[94,53835,53836],{"class":96,"line":1181},[94,53837,53838],{"class":104},"input.checked=false\n",[94,53840,53841],{"class":96,"line":1195},[94,53842,53843],{"class":104},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[94,53845,53846],{"class":96,"line":1201},[94,53847,2381],{"emptyLinePlaceholder":20},[94,53849,53850],{"class":96,"line":1292},[94,53851,53852],{"class":104},"禁用按钮：\n",[94,53854,53855],{"class":96,"line":1298},[94,53856,53857],{"class":104},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[94,53859,53860,53862,53865,53868,53871,53873],{"class":96,"line":1310},[94,53861,1015],{"class":104},[94,53863,53864],{"class":51277},"button",[94,53866,53867],{"class":1944}," disabled",[94,53869,53870],{"class":104},">点击\u003C\u002F",[94,53872,53864],{"class":51277},[94,53874,51284],{"class":104},[94,53876,53877,53879,53881,53883,53885],{"class":96,"line":1593},[94,53878,1015],{"class":104},[94,53880,53864],{"class":51277},[94,53882,53870],{"class":104},[94,53884,53864],{"class":51277},[94,53886,51284],{"class":104},[94,53888,53889],{"class":96,"line":1598},[94,53890,53891],{"class":104},"const bt = document.querySelector('button')\n",[94,53893,53894],{"class":96,"line":1604},[94,53895,53896],{"class":104},"bt.disabled = false\n",[48,53898,53899],{"start":15},[51,53900,53901],{},"自定义属性",[40,53903,53904],{},[1443,53905],{"alt":14,"src":53906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[85,53908,53910],{"className":53044,"code":53909,"language":53046,"meta":14,"style":14},"\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",[91,53911,53912,53920,53948,53967,53986,54005,54024,54032,54037,54042,54047,54052,54060],{"__ignoreMap":14},[94,53913,53914,53916,53918],{"class":96,"line":97},[94,53915,1015],{"class":104},[94,53917,51777],{"class":51277},[94,53919,51284],{"class":104},[94,53921,53922,53924,53926,53929,53931,53933,53936,53938,53941,53944,53946],{"class":96,"line":15},[94,53923,52121],{"class":104},[94,53925,51588],{"class":51277},[94,53927,53928],{"class":1944}," data-id",[94,53930,150],{"class":104},[94,53932,3659],{"class":209},[94,53934,53935],{"class":1944}," data-spm",[94,53937,150],{"class":104},[94,53939,53940],{"class":209},"\"我不知道\"",[94,53942,53943],{"class":104},">1\u003C\u002F",[94,53945,51588],{"class":51277},[94,53947,51284],{"class":104},[94,53949,53950,53952,53954,53956,53958,53960,53963,53965],{"class":96,"line":1160},[94,53951,52121],{"class":104},[94,53953,51588],{"class":51277},[94,53955,53928],{"class":1944},[94,53957,150],{"class":104},[94,53959,3682],{"class":209},[94,53961,53962],{"class":104},">2\u003C\u002F",[94,53964,51588],{"class":51277},[94,53966,51284],{"class":104},[94,53968,53969,53971,53973,53975,53977,53979,53982,53984],{"class":96,"line":1175},[94,53970,52121],{"class":104},[94,53972,51588],{"class":51277},[94,53974,53928],{"class":1944},[94,53976,150],{"class":104},[94,53978,3695],{"class":209},[94,53980,53981],{"class":104},">3\u003C\u002F",[94,53983,51588],{"class":51277},[94,53985,51284],{"class":104},[94,53987,53988,53990,53992,53994,53996,53998,54001,54003],{"class":96,"line":1181},[94,53989,52121],{"class":104},[94,53991,51588],{"class":51277},[94,53993,53928],{"class":1944},[94,53995,150],{"class":104},[94,53997,3708],{"class":209},[94,53999,54000],{"class":104},">4\u003C\u002F",[94,54002,51588],{"class":51277},[94,54004,51284],{"class":104},[94,54006,54007,54009,54011,54013,54015,54017,54020,54022],{"class":96,"line":1195},[94,54008,52121],{"class":104},[94,54010,51588],{"class":51277},[94,54012,53928],{"class":1944},[94,54014,150],{"class":104},[94,54016,3729],{"class":209},[94,54018,54019],{"class":104},">5\u003C\u002F",[94,54021,51588],{"class":51277},[94,54023,51284],{"class":104},[94,54025,54026,54028,54030],{"class":96,"line":1201},[94,54027,52121],{"class":104},[94,54029,51790],{"class":51277},[94,54031,51284],{"class":104},[94,54033,54034],{"class":96,"line":1292},[94,54035,54036],{"class":104},"    const one = document.querySelector('div')\n",[94,54038,54039],{"class":96,"line":1298},[94,54040,54041],{"class":104},"    console.log(one.dataset)\n",[94,54043,54044],{"class":96,"line":1310},[94,54045,54046],{"class":104},"    console.log(one.dataset.id)\n",[94,54048,54049],{"class":96,"line":1593},[94,54050,54051],{"class":104},"    console.log(one.dataset.spm)\n",[94,54053,54054,54056,54058],{"class":96,"line":1598},[94,54055,52394],{"class":104},[94,54057,51790],{"class":51277},[94,54059,51284],{"class":104},[94,54061,54062,54064,54066],{"class":96,"line":1604},[94,54063,51762],{"class":104},[94,54065,51777],{"class":51277},[94,54067,51284],{"class":104},[40,54069,54070],{},[1443,54071],{"alt":14,"src":54072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[40,54074,54075],{},"document.querySelector选择的是第一个对象（元素）",[65,54077,54079],{"id":54078},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[40,54081,54082],{},[1443,54083],{"alt":14,"src":54084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[40,54086,54087],{},[1443,54088],{"alt":14,"src":54089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[40,54091,54092],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51790,54094,54095],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[40,54097,54098],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51790,54100,54101],{},"\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",[40,54103,54104],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[40,54106,54107],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[40,54109,54110],{},"单位为毫秒！！！",[40,54112,54113],{},"可以搭配匿名函数来用！！！",[40,54115,54116],{},"setInterval(function () {",[40,54118,54119],{},"alert('两秒执行一次')",[40,54121,54122],{},"}, 2000)",[40,54124,54125],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[40,54127,54128],{},"function fn() {",[40,54130,54131],{},"document.write(1)",[40,54133,1051],{},[40,54135,54136],{},"setInterval(fn, 1000)",[40,54138,54139],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[40,54141,54142],{},"setInterval('fn()', 1000)",[40,54144,54145],{},[1443,54146],{"alt":14,"src":54147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[21980,54149,54151],{"id":54150},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[85,54153,54155],{"className":50610,"code":54154,"language":50612,"meta":14,"style":14},"\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",[91,54156,54157,54167,54181,54185,54193,54207,54227,54239,54247,54251,54259,54296,54301,54306,54311,54319,54327,54349,54357,54362,54384,54389,54394,54405,54410,54430,54438,54453,54468,54479,54484,54494,54504,54508,54517,54521,54529,54537,54541],{"__ignoreMap":14},[94,54158,54159,54161,54163,54165],{"class":96,"line":97},[94,54160,51274],{"class":104},[94,54162,51278],{"class":51277},[94,54164,51281],{"class":1944},[94,54166,51284],{"class":104},[94,54168,54169,54171,54173,54175,54177,54179],{"class":96,"line":15},[94,54170,1015],{"class":104},[94,54172,50612],{"class":51277},[94,54174,51293],{"class":1944},[94,54176,150],{"class":104},[94,54178,51298],{"class":209},[94,54180,51284],{"class":104},[94,54182,54183],{"class":96,"line":1160},[94,54184,2381],{"emptyLinePlaceholder":20},[94,54186,54187,54189,54191],{"class":96,"line":1175},[94,54188,1015],{"class":104},[94,54190,51311],{"class":51277},[94,54192,51284],{"class":104},[94,54194,54195,54197,54199,54201,54203,54205],{"class":96,"line":1181},[94,54196,52121],{"class":104},[94,54198,51321],{"class":51277},[94,54200,51324],{"class":1944},[94,54202,150],{"class":104},[94,54204,51329],{"class":209},[94,54206,51284],{"class":104},[94,54208,54209,54211,54213,54215,54217,54219,54221,54223,54225],{"class":96,"line":1195},[94,54210,52121],{"class":104},[94,54212,51321],{"class":51277},[94,54214,14902],{"class":1944},[94,54216,150],{"class":104},[94,54218,51368],{"class":209},[94,54220,51348],{"class":1944},[94,54222,150],{"class":104},[94,54224,51375],{"class":209},[94,54226,51284],{"class":104},[94,54228,54229,54231,54233,54235,54237],{"class":96,"line":1201},[94,54230,52121],{"class":104},[94,54232,51384],{"class":51277},[94,54234,51387],{"class":104},[94,54236,51384],{"class":51277},[94,54238,51284],{"class":104},[94,54240,54241,54243,54245],{"class":96,"line":1292},[94,54242,51762],{"class":104},[94,54244,51311],{"class":51277},[94,54246,51284],{"class":104},[94,54248,54249],{"class":96,"line":1298},[94,54250,2381],{"emptyLinePlaceholder":20},[94,54252,54253,54255,54257],{"class":96,"line":1310},[94,54254,1015],{"class":104},[94,54256,51777],{"class":51277},[94,54258,51284],{"class":104},[94,54260,54261,54263,54266,54268,54270,54272,54274,54276,54278,54281,54283,54286,54289,54291,54294],{"class":96,"line":1593},[94,54262,52121],{"class":104},[94,54264,54265],{"class":51277},"textarea",[94,54267,14902],{"class":1944},[94,54269,150],{"class":104},[94,54271,7634],{"class":209},[94,54273,14941],{"class":1944},[94,54275,150],{"class":104},[94,54277,7634],{"class":209},[94,54279,54280],{"class":1944}," cols",[94,54282,150],{"class":104},[94,54284,54285],{"class":209},"\"30\"",[94,54287,54288],{"class":1944}," rows",[94,54290,150],{"class":104},[94,54292,54293],{"class":209},"\"10\"",[94,54295,51284],{"class":104},[94,54297,54298],{"class":96,"line":1598},[94,54299,54300],{"class":104},"        用户注册协议\n",[94,54302,54303],{"class":96,"line":1604},[94,54304,54305],{"class":104},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[94,54307,54308],{"class":96,"line":1609},[94,54309,54310],{"class":104},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[94,54312,54313,54315,54317],{"class":96,"line":1623},[94,54314,51753],{"class":104},[94,54316,54265],{"class":51277},[94,54318,51284],{"class":104},[94,54320,54321,54323,54325],{"class":96,"line":1628},[94,54322,52121],{"class":104},[94,54324,53693],{"class":51277},[94,54326,51284],{"class":104},[94,54328,54329,54331,54333,54335,54337,54340,54342,54345,54347],{"class":96,"line":1634},[94,54330,52121],{"class":104},[94,54332,53864],{"class":51277},[94,54334,53463],{"class":1944},[94,54336,150],{"class":104},[94,54338,54339],{"class":209},"\"btn\"",[94,54341,53867],{"class":1944},[94,54343,54344],{"class":104},">我已经阅读用户协议(5)\u003C\u002F",[94,54346,53864],{"class":51277},[94,54348,51284],{"class":104},[94,54350,54351,54353,54355],{"class":96,"line":1655},[94,54352,52121],{"class":104},[94,54354,51790],{"class":51277},[94,54356,51284],{"class":104},[94,54358,54359],{"class":96,"line":1660},[94,54360,54361],{"class":163},"    \u002F\u002F 1. 获取元素\n",[94,54363,54364,54366,54369,54371,54374,54377,54379,54382],{"class":96,"line":1674},[94,54365,11203],{"class":100},[94,54367,54368],{"class":153}," btn",[94,54370,13546],{"class":100},[94,54372,54373],{"class":104}," document.",[94,54375,54376],{"class":1944},"querySelector",[94,54378,105],{"class":104},[94,54380,54381],{"class":209},"'.btn'",[94,54383,111],{"class":104},[94,54385,54386],{"class":96,"line":1679},[94,54387,54388],{"class":163},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[94,54390,54391],{"class":96,"line":1708},[94,54392,54393],{"class":163},"    \u002F\u002F 2. 倒计时\n",[94,54395,54396,54398,54400,54402],{"class":96,"line":1713},[94,54397,52196],{"class":100},[94,54399,9420],{"class":104},[94,54401,150],{"class":100},[94,54403,54404],{"class":153}," 5\n",[94,54406,54407],{"class":96,"line":1730},[94,54408,54409],{"class":163},"    \u002F\u002F 2.1 开启定时器\n",[94,54411,54412,54414,54417,54419,54422,54424,54427],{"class":96,"line":1735},[94,54413,52196],{"class":100},[94,54415,54416],{"class":104}," n ",[94,54418,150],{"class":100},[94,54420,54421],{"class":1944}," setInterval",[94,54423,105],{"class":104},[94,54425,54426],{"class":100},"function",[94,54428,54429],{"class":104}," () {\n",[94,54431,54432,54435],{"class":96,"line":1740},[94,54433,54434],{"class":104},"      i",[94,54436,54437],{"class":100},"--\n",[94,54439,54440,54443,54445,54448,54450],{"class":96,"line":1745},[94,54441,54442],{"class":104},"      btn.innerHTML ",[94,54444,150],{"class":100},[94,54446,54447],{"class":209}," `我已经阅读用户协议(${",[94,54449,546],{"class":104},[94,54451,54452],{"class":209},"})`\n",[94,54454,54455,54458,54461,54464,54466],{"class":96,"line":1759},[94,54456,54457],{"class":100},"      if",[94,54459,54460],{"class":104}," (i ",[94,54462,54463],{"class":100},"===",[94,54465,4074],{"class":153},[94,54467,12424],{"class":104},[94,54469,54470,54473,54476],{"class":96,"line":1764},[94,54471,54472],{"class":1944},"        clearInterval",[94,54474,54475],{"class":104},"(n)  ",[94,54477,54478],{"class":163},"\u002F\u002F 关闭定时器\n",[94,54480,54481],{"class":96,"line":2558},[94,54482,54483],{"class":163},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[94,54485,54486,54489,54491],{"class":96,"line":2572},[94,54487,54488],{"class":104},"        btn.disabled ",[94,54490,150],{"class":100},[94,54492,54493],{"class":153}," false\n",[94,54495,54496,54499,54501],{"class":96,"line":2580},[94,54497,54498],{"class":104},"        btn.innerHTML ",[94,54500,150],{"class":100},[94,54502,54503],{"class":209}," '同意'\n",[94,54505,54506],{"class":96,"line":2585},[94,54507,52375],{"class":104},[94,54509,54510,54513,54515],{"class":96,"line":2591},[94,54511,54512],{"class":104},"    }, ",[94,54514,6392],{"class":153},[94,54516,111],{"class":104},[94,54518,54519],{"class":96,"line":2597},[94,54520,2381],{"emptyLinePlaceholder":20},[94,54522,54523,54525,54527],{"class":96,"line":2602},[94,54524,52394],{"class":104},[94,54526,51790],{"class":51277},[94,54528,51284],{"class":104},[94,54530,54531,54533,54535],{"class":96,"line":7930},[94,54532,51762],{"class":104},[94,54534,51777],{"class":51277},[94,54536,51284],{"class":104},[94,54538,54539],{"class":96,"line":7954},[94,54540,2381],{"emptyLinePlaceholder":20},[94,54542,54543,54545,54547],{"class":96,"line":7959},[94,54544,51762],{"class":104},[94,54546,50612],{"class":51277},[94,54548,51284],{"class":104},[40,54550,54551],{},"不要一直想着用死循环,避免死循环",[40,54553,54554,54557],{},[91,54555,54556],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[21980,54559,54561],{"id":54560},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[48,54563,54564],{},[51,54565,54566],{},"法1",[85,54568,54570],{"className":50610,"code":54569,"language":50612,"meta":14,"style":14},"\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",[91,54571,54572,54582,54596,54600,54608,54622,54642,54654,54662,54668,54679,54690,54694,54698,54705,54717,54721,54725,54732,54744,54758,54771,54785,54789,54793,54800,54811,54822,54833,54845,54857,54869,54873,54877,54885,54895,54908,54920,54933,54937,54941,54948,54958,54970,54982,54993,55004,55014,55026,55038,55042,55046,55055,55067,55079,55107,55120,55124,55128,55135,55146,55150,55158,55166,55170,55178,55192,55207,55231,55239,55254,55267,55275,55296,55308,55320,55332,55344,55356,55368,55380,55389,55397,55405,55413,55425,55448,55467,55486,55505,55524,55543,55562,55582,55586,55606,55625,55645,55666,55677,55694,55704,55714,55724,55729,55734,55739,55744,55769,55782,55786,55809,55813,55821,55829,55837,55841],{"__ignoreMap":14},[94,54573,54574,54576,54578,54580],{"class":96,"line":97},[94,54575,51274],{"class":104},[94,54577,51278],{"class":51277},[94,54579,51281],{"class":1944},[94,54581,51284],{"class":104},[94,54583,54584,54586,54588,54590,54592,54594],{"class":96,"line":15},[94,54585,1015],{"class":104},[94,54587,50612],{"class":51277},[94,54589,51293],{"class":1944},[94,54591,150],{"class":104},[94,54593,51298],{"class":209},[94,54595,51284],{"class":104},[94,54597,54598],{"class":96,"line":1160},[94,54599,2381],{"emptyLinePlaceholder":20},[94,54601,54602,54604,54606],{"class":96,"line":1175},[94,54603,1015],{"class":104},[94,54605,51311],{"class":51277},[94,54607,51284],{"class":104},[94,54609,54610,54612,54614,54616,54618,54620],{"class":96,"line":1181},[94,54611,52121],{"class":104},[94,54613,51321],{"class":51277},[94,54615,51324],{"class":1944},[94,54617,150],{"class":104},[94,54619,51329],{"class":209},[94,54621,51284],{"class":104},[94,54623,54624,54626,54628,54630,54632,54634,54636,54638,54640],{"class":96,"line":1195},[94,54625,52121],{"class":104},[94,54627,51321],{"class":51277},[94,54629,14902],{"class":1944},[94,54631,150],{"class":104},[94,54633,51368],{"class":209},[94,54635,51348],{"class":1944},[94,54637,150],{"class":104},[94,54639,51375],{"class":209},[94,54641,51284],{"class":104},[94,54643,54644,54646,54648,54650,54652],{"class":96,"line":1201},[94,54645,52121],{"class":104},[94,54647,51384],{"class":51277},[94,54649,51387],{"class":104},[94,54651,51384],{"class":51277},[94,54653,51284],{"class":104},[94,54655,54656,54658,54660],{"class":96,"line":1292},[94,54657,52121],{"class":104},[94,54659,5108],{"class":51277},[94,54661,51284],{"class":104},[94,54663,54664,54666],{"class":96,"line":1298},[94,54665,6385],{"class":51277},[94,54667,15554],{"class":104},[94,54669,54670,54673,54675,54677],{"class":96,"line":1310},[94,54671,54672],{"class":153},"      padding",[94,54674,51414],{"class":104},[94,54676,296],{"class":153},[94,54678,1271],{"class":104},[94,54680,54681,54684,54686,54688],{"class":96,"line":1593},[94,54682,54683],{"class":153},"      margin",[94,54685,51414],{"class":104},[94,54687,296],{"class":153},[94,54689,1271],{"class":104},[94,54691,54692],{"class":96,"line":1598},[94,54693,2168],{"class":104},[94,54695,54696],{"class":96,"line":1604},[94,54697,2381],{"emptyLinePlaceholder":20},[94,54699,54700,54703],{"class":96,"line":1609},[94,54701,54702],{"class":51277},"    li",[94,54704,15554],{"class":104},[94,54706,54707,54710,54712,54715],{"class":96,"line":1623},[94,54708,54709],{"class":153},"      list-style",[94,54711,51414],{"class":104},[94,54713,54714],{"class":153},"none",[94,54716,1271],{"class":104},[94,54718,54719],{"class":96,"line":1628},[94,54720,2168],{"class":104},[94,54722,54723],{"class":96,"line":1634},[94,54724,2381],{"emptyLinePlaceholder":20},[94,54726,54727,54730],{"class":96,"line":1655},[94,54728,54729],{"class":1944},"    .box",[94,54731,15554],{"class":104},[94,54733,54734,54737,54739,54742],{"class":96,"line":1660},[94,54735,54736],{"class":153},"      position",[94,54738,51414],{"class":104},[94,54740,54741],{"class":153},"relative",[94,54743,1271],{"class":104},[94,54745,54746,54749,54751,54754,54756],{"class":96,"line":1674},[94,54747,54748],{"class":153},"      width",[94,54750,51414],{"class":104},[94,54752,54753],{"class":153},"976",[94,54755,51469],{"class":100},[94,54757,1271],{"class":104},[94,54759,54760,54763,54765,54767,54769],{"class":96,"line":1679},[94,54761,54762],{"class":153},"      height",[94,54764,51414],{"class":104},[94,54766,1520],{"class":153},[94,54768,51469],{"class":100},[94,54770,1271],{"class":104},[94,54772,54773,54775,54777,54779,54781,54783],{"class":96,"line":1708},[94,54774,54683],{"class":153},[94,54776,51414],{"class":104},[94,54778,416],{"class":153},[94,54780,51469],{"class":100},[94,54782,51533],{"class":153},[94,54784,1271],{"class":104},[94,54786,54787],{"class":96,"line":1713},[94,54788,2168],{"class":104},[94,54790,54791],{"class":96,"line":1730},[94,54792,2381],{"emptyLinePlaceholder":20},[94,54794,54795,54798],{"class":96,"line":1735},[94,54796,54797],{"class":1944},"    .slider-footer",[94,54799,15554],{"class":104},[94,54801,54802,54804,54806,54809],{"class":96,"line":1740},[94,54803,54736],{"class":153},[94,54805,51414],{"class":104},[94,54807,54808],{"class":153},"absolute",[94,54810,1271],{"class":104},[94,54812,54813,54816,54818,54820],{"class":96,"line":1745},[94,54814,54815],{"class":153},"      left",[94,54817,51414],{"class":104},[94,54819,296],{"class":153},[94,54821,1271],{"class":104},[94,54823,54824,54827,54829,54831],{"class":96,"line":1759},[94,54825,54826],{"class":153},"      bottom",[94,54828,51414],{"class":104},[94,54830,296],{"class":153},[94,54832,1271],{"class":104},[94,54834,54835,54837,54839,54841,54843],{"class":96,"line":1764},[94,54836,54748],{"class":153},[94,54838,51414],{"class":104},[94,54840,416],{"class":153},[94,54842,433],{"class":100},[94,54844,1271],{"class":104},[94,54846,54847,54849,54851,54853,54855],{"class":96,"line":2558},[94,54848,54762],{"class":153},[94,54850,51414],{"class":104},[94,54852,680],{"class":153},[94,54854,433],{"class":100},[94,54856,1271],{"class":104},[94,54858,54859,54862,54864,54867],{"class":96,"line":2572},[94,54860,54861],{"class":153},"      background-color",[94,54863,51414],{"class":104},[94,54865,54866],{"class":153},"skyblue",[94,54868,1271],{"class":104},[94,54870,54871],{"class":96,"line":2580},[94,54872,2168],{"class":104},[94,54874,54875],{"class":96,"line":2585},[94,54876,2381],{"emptyLinePlaceholder":20},[94,54878,54879,54881,54883],{"class":96,"line":2591},[94,54880,54797],{"class":1944},[94,54882,6807],{"class":51277},[94,54884,15554],{"class":104},[94,54886,54887,54889,54891,54893],{"class":96,"line":2597},[94,54888,54736],{"class":153},[94,54890,51414],{"class":104},[94,54892,54808],{"class":153},[94,54894,1271],{"class":104},[94,54896,54897,54900,54902,54904,54906],{"class":96,"line":2602},[94,54898,54899],{"class":153},"      font-size",[94,54901,51414],{"class":104},[94,54903,1006],{"class":153},[94,54905,51469],{"class":100},[94,54907,1271],{"class":104},[94,54909,54910,54912,54914,54916,54918],{"class":96,"line":7930},[94,54911,54815],{"class":153},[94,54913,51414],{"class":104},[94,54915,805],{"class":153},[94,54917,51469],{"class":100},[94,54919,1271],{"class":104},[94,54921,54922,54925,54927,54929,54931],{"class":96,"line":7954},[94,54923,54924],{"class":153},"      top",[94,54926,51414],{"class":104},[94,54928,424],{"class":153},[94,54930,51469],{"class":100},[94,54932,1271],{"class":104},[94,54934,54935],{"class":96,"line":7959},[94,54936,2168],{"class":104},[94,54938,54939],{"class":96,"line":7965},[94,54940,2381],{"emptyLinePlaceholder":20},[94,54942,54943,54946],{"class":96,"line":7992},[94,54944,54945],{"class":51277},"    ul",[94,54947,15554],{"class":104},[94,54949,54950,54952,54954,54956],{"class":96,"line":7997},[94,54951,54736],{"class":153},[94,54953,51414],{"class":104},[94,54955,54808],{"class":153},[94,54957,1271],{"class":104},[94,54959,54960,54962,54964,54966,54968],{"class":96,"line":8003},[94,54961,54924],{"class":153},[94,54963,51414],{"class":104},[94,54965,886],{"class":153},[94,54967,51469],{"class":100},[94,54969,1271],{"class":104},[94,54971,54972,54974,54976,54978,54980],{"class":96,"line":8015},[94,54973,54815],{"class":153},[94,54975,51414],{"class":104},[94,54977,805],{"class":153},[94,54979,51469],{"class":100},[94,54981,1271],{"class":104},[94,54983,54984,54987,54989,54991],{"class":96,"line":8027},[94,54985,54986],{"class":153},"      display",[94,54988,51414],{"class":104},[94,54990,51454],{"class":153},[94,54992,1271],{"class":104},[94,54994,54995,54998,55000,55002],{"class":96,"line":8039},[94,54996,54997],{"class":153},"      justify-content",[94,54999,51414],{"class":104},[94,55001,51645],{"class":153},[94,55003,1271],{"class":104},[94,55005,55006,55008,55010,55012],{"class":96,"line":9698},[94,55007,54736],{"class":153},[94,55009,51414],{"class":104},[94,55011,54808],{"class":153},[94,55013,1271],{"class":104},[94,55015,55016,55018,55020,55022,55024],{"class":96,"line":9723},[94,55017,54748],{"class":153},[94,55019,51414],{"class":104},[94,55021,3973],{"class":153},[94,55023,51469],{"class":100},[94,55025,1271],{"class":104},[94,55027,55028,55030,55032,55034,55036],{"class":96,"line":9746},[94,55029,54762],{"class":153},[94,55031,51414],{"class":104},[94,55033,805],{"class":153},[94,55035,51469],{"class":100},[94,55037,1271],{"class":104},[94,55039,55040],{"class":96,"line":9770},[94,55041,2168],{"class":104},[94,55043,55044],{"class":96,"line":9775},[94,55045,2381],{"emptyLinePlaceholder":20},[94,55047,55048,55050,55053],{"class":96,"line":9780},[94,55049,54945],{"class":51277},[94,55051,55052],{"class":51277}," li",[94,55054,15554],{"class":104},[94,55056,55057,55059,55061,55063,55065],{"class":96,"line":9785},[94,55058,54748],{"class":153},[94,55060,51414],{"class":104},[94,55062,805],{"class":153},[94,55064,51469],{"class":100},[94,55066,1271],{"class":104},[94,55068,55069,55071,55073,55075,55077],{"class":96,"line":9794},[94,55070,54762],{"class":153},[94,55072,51414],{"class":104},[94,55074,805],{"class":153},[94,55076,51469],{"class":100},[94,55078,1271],{"class":104},[94,55080,55081,55083,55085,55088,55090,55092,55094,55096,55098,55100,55102,55105],{"class":96,"line":9799},[94,55082,54861],{"class":153},[94,55084,51414],{"class":104},[94,55086,55087],{"class":153},"rgba",[94,55089,105],{"class":104},[94,55091,296],{"class":153},[94,55093,12417],{"class":104},[94,55095,296],{"class":153},[94,55097,12417],{"class":104},[94,55099,296],{"class":153},[94,55101,12417],{"class":104},[94,55103,55104],{"class":153},".4",[94,55106,2700],{"class":104},[94,55108,55109,55112,55114,55116,55118],{"class":96,"line":9805},[94,55110,55111],{"class":153},"      border-radius",[94,55113,51414],{"class":104},[94,55115,551],{"class":153},[94,55117,51469],{"class":100},[94,55119,1271],{"class":104},[94,55121,55122],{"class":96,"line":9826},[94,55123,2168],{"class":104},[94,55125,55126],{"class":96,"line":9832},[94,55127,2381],{"emptyLinePlaceholder":20},[94,55129,55130,55133],{"class":96,"line":9846},[94,55131,55132],{"class":1944},"    .activate",[94,55134,15554],{"class":104},[94,55136,55137,55139,55141,55144],{"class":96,"line":9852},[94,55138,54861],{"class":153},[94,55140,51414],{"class":104},[94,55142,55143],{"class":153},"#f7f7f7",[94,55145,1271],{"class":104},[94,55147,55148],{"class":96,"line":9879},[94,55149,2168],{"class":104},[94,55151,55152,55154,55156],{"class":96,"line":9888},[94,55153,52394],{"class":104},[94,55155,5108],{"class":51277},[94,55157,51284],{"class":104},[94,55159,55160,55162,55164],{"class":96,"line":9894},[94,55161,51762],{"class":104},[94,55163,51311],{"class":51277},[94,55165,51284],{"class":104},[94,55167,55168],{"class":96,"line":9902},[94,55169,2381],{"emptyLinePlaceholder":20},[94,55171,55172,55174,55176],{"class":96,"line":9907},[94,55173,1015],{"class":104},[94,55175,51777],{"class":51277},[94,55177,51284],{"class":104},[94,55179,55180,55182,55184,55186,55188,55190],{"class":96,"line":16586},[94,55181,52121],{"class":104},[94,55183,51588],{"class":51277},[94,55185,53463],{"class":1944},[94,55187,150],{"class":104},[94,55189,53468],{"class":209},[94,55191,51284],{"class":104},[94,55193,55194,55196,55198,55200,55202,55205],{"class":96,"line":16592},[94,55195,51318],{"class":104},[94,55197,51588],{"class":51277},[94,55199,53463],{"class":1944},[94,55201,150],{"class":104},[94,55203,55204],{"class":209},"\"slider-wrapper\"",[94,55206,51284],{"class":104},[94,55208,55209,55212,55214,55217,55219,55222,55225,55227,55229],{"class":96,"line":16615},[94,55210,55211],{"class":104},"      \u003C",[94,55213,1443],{"class":51277},[94,55215,55216],{"class":1944}," src",[94,55218,150],{"class":104},[94,55220,55221],{"class":209},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[94,55223,55224],{"class":1944}," alt",[94,55226,150],{"class":104},[94,55228,7634],{"class":209},[94,55230,51284],{"class":104},[94,55232,55233,55235,55237],{"class":96,"line":16621},[94,55234,51753],{"class":104},[94,55236,51588],{"class":51277},[94,55238,51284],{"class":104},[94,55240,55241,55243,55245,55247,55249,55252],{"class":96,"line":16644},[94,55242,51318],{"class":104},[94,55244,51588],{"class":51277},[94,55246,53463],{"class":1944},[94,55248,150],{"class":104},[94,55250,55251],{"class":209},"\"slider-footer\"",[94,55253,51284],{"class":104},[94,55255,55256,55258,55260,55263,55265],{"class":96,"line":16658},[94,55257,55211],{"class":104},[94,55259,40],{"class":51277},[94,55261,55262],{"class":104},">对人类来说会不会太超前了?\u003C\u002F",[94,55264,40],{"class":51277},[94,55266,51284],{"class":104},[94,55268,55269,55271,55273],{"class":96,"line":16678},[94,55270,55211],{"class":104},[94,55272,1112],{"class":51277},[94,55274,51284],{"class":104},[94,55276,55277,55280,55282,55284,55286,55289,55292,55294],{"class":96,"line":16684},[94,55278,55279],{"class":104},"        \u003C",[94,55281,51],{"class":51277},[94,55283,53463],{"class":1944},[94,55285,150],{"class":104},[94,55287,55288],{"class":209},"\"activate\"",[94,55290,55291],{"class":104},">\u003C\u002F",[94,55293,51],{"class":51277},[94,55295,51284],{"class":104},[94,55297,55298,55300,55302,55304,55306],{"class":96,"line":16695},[94,55299,55279],{"class":104},[94,55301,51],{"class":51277},[94,55303,55291],{"class":104},[94,55305,51],{"class":51277},[94,55307,51284],{"class":104},[94,55309,55310,55312,55314,55316,55318],{"class":96,"line":16718},[94,55311,55279],{"class":104},[94,55313,51],{"class":51277},[94,55315,55291],{"class":104},[94,55317,51],{"class":51277},[94,55319,51284],{"class":104},[94,55321,55322,55324,55326,55328,55330],{"class":96,"line":16740},[94,55323,55279],{"class":104},[94,55325,51],{"class":51277},[94,55327,55291],{"class":104},[94,55329,51],{"class":51277},[94,55331,51284],{"class":104},[94,55333,55334,55336,55338,55340,55342],{"class":96,"line":16745},[94,55335,55279],{"class":104},[94,55337,51],{"class":51277},[94,55339,55291],{"class":104},[94,55341,51],{"class":51277},[94,55343,51284],{"class":104},[94,55345,55346,55348,55350,55352,55354],{"class":96,"line":16751},[94,55347,55279],{"class":104},[94,55349,51],{"class":51277},[94,55351,55291],{"class":104},[94,55353,51],{"class":51277},[94,55355,51284],{"class":104},[94,55357,55358,55360,55362,55364,55366],{"class":96,"line":16765},[94,55359,55279],{"class":104},[94,55361,51],{"class":51277},[94,55363,55291],{"class":104},[94,55365,51],{"class":51277},[94,55367,51284],{"class":104},[94,55369,55370,55372,55374,55376,55378],{"class":96,"line":16778},[94,55371,55279],{"class":104},[94,55373,51],{"class":51277},[94,55375,55291],{"class":104},[94,55377,51],{"class":51277},[94,55379,51284],{"class":104},[94,55381,55382,55385,55387],{"class":96,"line":16783},[94,55383,55384],{"class":104},"      \u003C\u002F",[94,55386,1112],{"class":51277},[94,55388,51284],{"class":104},[94,55390,55391,55393,55395],{"class":96,"line":16797},[94,55392,51753],{"class":104},[94,55394,51588],{"class":51277},[94,55396,51284],{"class":104},[94,55398,55399,55401,55403],{"class":96,"line":16802},[94,55400,52394],{"class":104},[94,55402,51588],{"class":51277},[94,55404,51284],{"class":104},[94,55406,55407,55409,55411],{"class":96,"line":16808},[94,55408,52121],{"class":104},[94,55410,51790],{"class":51277},[94,55412,51284],{"class":104},[94,55414,55415,55417,55420,55422],{"class":96,"line":16813},[94,55416,11203],{"class":100},[94,55418,55419],{"class":153}," arrImage",[94,55421,13546],{"class":100},[94,55423,55424],{"class":104}," [\n",[94,55426,55427,55430,55433,55436,55439,55442,55445],{"class":96,"line":16827},[94,55428,55429],{"class":104},"      { url: ",[94,55431,55432],{"class":209},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[94,55434,55435],{"class":104},", title: ",[94,55437,55438],{"class":209},"'对人类来说会不会太超前了?'",[94,55440,55441],{"class":104},", color: ",[94,55443,55444],{"class":209},"'rgba(100,67,68)'",[94,55446,55447],{"class":104}," },\n",[94,55449,55450,55452,55455,55457,55460,55462,55465],{"class":96,"line":16832},[94,55451,55429],{"class":104},[94,55453,55454],{"class":209},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[94,55456,55435],{"class":104},[94,55458,55459],{"class":209},"'开启剑与雪的黑暗传说!'",[94,55461,55441],{"class":104},[94,55463,55464],{"class":209},"'rgba(43,35,26)'",[94,55466,55447],{"class":104},[94,55468,55469,55471,55474,55476,55479,55481,55484],{"class":96,"line":16837},[94,55470,55429],{"class":104},[94,55472,55473],{"class":209},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[94,55475,55435],{"class":104},[94,55477,55478],{"class":209},"'真正的jo厨出现了!'",[94,55480,55441],{"class":104},[94,55482,55483],{"class":209},"'rgba(36,31,33)'",[94,55485,55447],{"class":104},[94,55487,55488,55490,55493,55495,55498,55500,55503],{"class":96,"line":16851},[94,55489,55429],{"class":104},[94,55491,55492],{"class":209},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[94,55494,55435],{"class":104},[94,55496,55497],{"class":209},"'李玉刚:让世界通过b站看到东方大国文化'",[94,55499,55441],{"class":104},[94,55501,55502],{"class":209},"'rgba(139,98,66)'",[94,55504,55447],{"class":104},[94,55506,55507,55509,55512,55514,55517,55519,55522],{"class":96,"line":16863},[94,55508,55429],{"class":104},[94,55510,55511],{"class":209},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[94,55513,55435],{"class":104},[94,55515,55516],{"class":209},"'快来分享你的寒假日常吧'",[94,55518,55441],{"class":104},[94,55520,55521],{"class":209},"'rgba(67,90,92)'",[94,55523,55447],{"class":104},[94,55525,55526,55528,55531,55533,55536,55538,55541],{"class":96,"line":16868},[94,55527,55429],{"class":104},[94,55529,55530],{"class":209},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[94,55532,55435],{"class":104},[94,55534,55535],{"class":209},"'哔哩哔哩小年YEAR'",[94,55537,55441],{"class":104},[94,55539,55540],{"class":209},"'rgba(166,131,143)'",[94,55542,55447],{"class":104},[94,55544,55545,55547,55550,55552,55555,55557,55560],{"class":96,"line":16881},[94,55546,55429],{"class":104},[94,55548,55549],{"class":209},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[94,55551,55435],{"class":104},[94,55553,55554],{"class":209},"'一站式解决你的电脑配置问题'",[94,55556,55441],{"class":104},[94,55558,55559],{"class":209},"'rgba(53,29,25)'",[94,55561,55447],{"class":104},[94,55563,55564,55566,55569,55571,55574,55576,55579],{"class":96,"line":16886},[94,55565,55429],{"class":104},[94,55567,55568],{"class":209},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[94,55570,55435],{"class":104},[94,55572,55573],{"class":209},"'谁不想和小猫咪贴贴呢?'",[94,55575,55441],{"class":104},[94,55577,55578],{"class":209},"'rgba(99,72,114)'",[94,55580,55581],{"class":104}," }\n",[94,55583,55584],{"class":96,"line":16891},[94,55585,53086],{"class":104},[94,55587,55588,55590,55593,55595,55597,55599,55601,55604],{"class":96,"line":16896},[94,55589,11203],{"class":100},[94,55591,55592],{"class":153}," img",[94,55594,13546],{"class":100},[94,55596,54373],{"class":104},[94,55598,54376],{"class":1944},[94,55600,105],{"class":104},[94,55602,55603],{"class":209},"'.slider-wrapper img'",[94,55605,111],{"class":104},[94,55607,55608,55610,55612,55614,55616,55618,55620,55623],{"class":96,"line":16909},[94,55609,11203],{"class":100},[94,55611,6807],{"class":153},[94,55613,13546],{"class":100},[94,55615,54373],{"class":104},[94,55617,54376],{"class":1944},[94,55619,105],{"class":104},[94,55621,55622],{"class":209},"'.slider-footer p'",[94,55624,111],{"class":104},[94,55626,55627,55629,55632,55634,55636,55638,55640,55643],{"class":96,"line":16914},[94,55628,11203],{"class":100},[94,55630,55631],{"class":153}," color",[94,55633,13546],{"class":100},[94,55635,54373],{"class":104},[94,55637,54376],{"class":1944},[94,55639,105],{"class":104},[94,55641,55642],{"class":209},"'.slider-footer'",[94,55644,111],{"class":104},[94,55646,55647,55649,55652,55654,55656,55659,55661,55664],{"class":96,"line":32616},[94,55648,11203],{"class":100},[94,55650,55651],{"class":153}," lis",[94,55653,13546],{"class":100},[94,55655,54373],{"class":104},[94,55657,55658],{"class":1944},"querySelectorAll",[94,55660,105],{"class":104},[94,55662,55663],{"class":209},"'.slider-footer ul li'",[94,55665,111],{"class":104},[94,55667,55668,55670,55672,55674],{"class":96,"line":32622},[94,55669,52196],{"class":100},[94,55671,9420],{"class":104},[94,55673,150],{"class":100},[94,55675,55676],{"class":153}," 1\n",[94,55678,55679,55681,55684,55686,55688,55690,55692],{"class":96,"line":32628},[94,55680,52196],{"class":100},[94,55682,55683],{"class":104}," timer ",[94,55685,150],{"class":100},[94,55687,54421],{"class":1944},[94,55689,105],{"class":104},[94,55691,54426],{"class":100},[94,55693,54429],{"class":104},[94,55695,55696,55699,55701],{"class":96,"line":32634},[94,55697,55698],{"class":104},"      img.src ",[94,55700,150],{"class":100},[94,55702,55703],{"class":104}," arrImage[i].url\n",[94,55705,55706,55709,55711],{"class":96,"line":32640},[94,55707,55708],{"class":104},"      p.innerHTML ",[94,55710,150],{"class":100},[94,55712,55713],{"class":104}," arrImage[i].title\n",[94,55715,55716,55719,55721],{"class":96,"line":32651},[94,55717,55718],{"class":104},"      color.style.backgroundColor ",[94,55720,150],{"class":100},[94,55722,55723],{"class":104}," arrImage[i].color\n",[94,55725,55726],{"class":96,"line":32657},[94,55727,55728],{"class":163},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[94,55730,55731],{"class":96,"line":32677},[94,55732,55733],{"class":163},"      \u002F\u002F li.classList.add('activate')\n",[94,55735,55736],{"class":96,"line":32683},[94,55737,55738],{"class":163},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[94,55740,55741],{"class":96,"line":32694},[94,55742,55743],{"class":163},"      \u002F\u002F lis[i].classList.remove('activate')\n",[94,55745,55746,55749,55751,55753,55756,55759,55762,55764,55767],{"class":96,"line":32700},[94,55747,55748],{"class":104},"      document.",[94,55750,54376],{"class":1944},[94,55752,105],{"class":104},[94,55754,55755],{"class":209},"'.activate'",[94,55757,55758],{"class":104},")?.classList.",[94,55760,55761],{"class":1944},"toggle",[94,55763,105],{"class":104},[94,55765,55766],{"class":209},"'activate'",[94,55768,111],{"class":104},[94,55770,55771,55774,55776,55778,55780],{"class":96,"line":32706},[94,55772,55773],{"class":104},"      lis[i].classList.",[94,55775,5316],{"class":1944},[94,55777,105],{"class":104},[94,55779,55766],{"class":209},[94,55781,111],{"class":104},[94,55783,55784],{"class":96,"line":32712},[94,55785,2381],{"emptyLinePlaceholder":20},[94,55787,55788,55791,55793,55795,55797,55799,55801,55803,55806],{"class":96,"line":32718},[94,55789,55790],{"class":104},"      i ",[94,55792,150],{"class":100},[94,55794,54460],{"class":104},[94,55796,586],{"class":100},[94,55798,25101],{"class":153},[94,55800,13696],{"class":104},[94,55802,433],{"class":100},[94,55804,55805],{"class":104}," arrImage.",[94,55807,55808],{"class":153},"length\n",[94,55810,55811],{"class":96,"line":32724},[94,55812,2381],{"emptyLinePlaceholder":20},[94,55814,55815,55817,55819],{"class":96,"line":32730},[94,55816,54512],{"class":104},[94,55818,6392],{"class":153},[94,55820,111],{"class":104},[94,55822,55823,55825,55827],{"class":96,"line":32736},[94,55824,52394],{"class":104},[94,55826,51790],{"class":51277},[94,55828,51284],{"class":104},[94,55830,55831,55833,55835],{"class":96,"line":32756},[94,55832,51762],{"class":104},[94,55834,51777],{"class":51277},[94,55836,51284],{"class":104},[94,55838,55839],{"class":96,"line":32762},[94,55840,2381],{"emptyLinePlaceholder":20},[94,55842,55843,55845,55847],{"class":96,"line":32778},[94,55844,51762],{"class":104},[94,55846,50612],{"class":51277},[94,55848,51284],{"class":104},[40,55850,55851],{},[1443,55852],{"alt":14,"src":55853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[40,55855,55856],{},"?.就是短路保护,确保输出正常进行",[40,55858,55859],{},"不要忘记取余%,有时候可以用",[40,55861,55862],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[48,55864,55865],{"start":15},[51,55866,55867],{},"法2",[85,55869,55871],{"className":50610,"code":55870,"language":50612,"meta":14,"style":14},"\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",[91,55872,55873,55883,55897,55901,55909,55923,55943,55955,55963,55969,55979,55989,55993,55997,56003,56013,56017,56021,56027,56037,56049,56061,56075,56079,56083,56089,56099,56109,56119,56131,56143,56153,56157,56161,56169,56179,56191,56203,56215,56219,56223,56229,56239,56251,56263,56273,56283,56293,56305,56317,56321,56325,56333,56345,56357,56383,56395,56399,56403,56409,56419,56423,56431,56439,56443,56451,56465,56479,56499,56507,56521,56533,56541,56559,56571,56583,56595,56607,56619,56631,56643,56651,56659,56667,56675,56686,56702,56718,56734,56750,56766,56782,56798,56814,56818,56823,56841,56859,56869,56874,56879,56890,56896,56911,56920,56924,56929,56938,56943,56952,56957,56962,56967,56990,57020,57024,57032,57036,57044,57052,57056],{"__ignoreMap":14},[94,55874,55875,55877,55879,55881],{"class":96,"line":97},[94,55876,51274],{"class":104},[94,55878,51278],{"class":51277},[94,55880,51281],{"class":1944},[94,55882,51284],{"class":104},[94,55884,55885,55887,55889,55891,55893,55895],{"class":96,"line":15},[94,55886,1015],{"class":104},[94,55888,50612],{"class":51277},[94,55890,51293],{"class":1944},[94,55892,150],{"class":104},[94,55894,51298],{"class":209},[94,55896,51284],{"class":104},[94,55898,55899],{"class":96,"line":1160},[94,55900,2381],{"emptyLinePlaceholder":20},[94,55902,55903,55905,55907],{"class":96,"line":1175},[94,55904,1015],{"class":104},[94,55906,51311],{"class":51277},[94,55908,51284],{"class":104},[94,55910,55911,55913,55915,55917,55919,55921],{"class":96,"line":1181},[94,55912,52121],{"class":104},[94,55914,51321],{"class":51277},[94,55916,51324],{"class":1944},[94,55918,150],{"class":104},[94,55920,51329],{"class":209},[94,55922,51284],{"class":104},[94,55924,55925,55927,55929,55931,55933,55935,55937,55939,55941],{"class":96,"line":1195},[94,55926,52121],{"class":104},[94,55928,51321],{"class":51277},[94,55930,14902],{"class":1944},[94,55932,150],{"class":104},[94,55934,51368],{"class":209},[94,55936,51348],{"class":1944},[94,55938,150],{"class":104},[94,55940,51375],{"class":209},[94,55942,51284],{"class":104},[94,55944,55945,55947,55949,55951,55953],{"class":96,"line":1201},[94,55946,52121],{"class":104},[94,55948,51384],{"class":51277},[94,55950,51387],{"class":104},[94,55952,51384],{"class":51277},[94,55954,51284],{"class":104},[94,55956,55957,55959,55961],{"class":96,"line":1292},[94,55958,52121],{"class":104},[94,55960,5108],{"class":51277},[94,55962,51284],{"class":104},[94,55964,55965,55967],{"class":96,"line":1298},[94,55966,6385],{"class":51277},[94,55968,15554],{"class":104},[94,55970,55971,55973,55975,55977],{"class":96,"line":1310},[94,55972,54672],{"class":153},[94,55974,51414],{"class":104},[94,55976,296],{"class":153},[94,55978,1271],{"class":104},[94,55980,55981,55983,55985,55987],{"class":96,"line":1593},[94,55982,54683],{"class":153},[94,55984,51414],{"class":104},[94,55986,296],{"class":153},[94,55988,1271],{"class":104},[94,55990,55991],{"class":96,"line":1598},[94,55992,2168],{"class":104},[94,55994,55995],{"class":96,"line":1604},[94,55996,2381],{"emptyLinePlaceholder":20},[94,55998,55999,56001],{"class":96,"line":1609},[94,56000,54702],{"class":51277},[94,56002,15554],{"class":104},[94,56004,56005,56007,56009,56011],{"class":96,"line":1623},[94,56006,54709],{"class":153},[94,56008,51414],{"class":104},[94,56010,54714],{"class":153},[94,56012,1271],{"class":104},[94,56014,56015],{"class":96,"line":1628},[94,56016,2168],{"class":104},[94,56018,56019],{"class":96,"line":1634},[94,56020,2381],{"emptyLinePlaceholder":20},[94,56022,56023,56025],{"class":96,"line":1655},[94,56024,54729],{"class":1944},[94,56026,15554],{"class":104},[94,56028,56029,56031,56033,56035],{"class":96,"line":1660},[94,56030,54736],{"class":153},[94,56032,51414],{"class":104},[94,56034,54741],{"class":153},[94,56036,1271],{"class":104},[94,56038,56039,56041,56043,56045,56047],{"class":96,"line":1674},[94,56040,54748],{"class":153},[94,56042,51414],{"class":104},[94,56044,54753],{"class":153},[94,56046,51469],{"class":100},[94,56048,1271],{"class":104},[94,56050,56051,56053,56055,56057,56059],{"class":96,"line":1679},[94,56052,54762],{"class":153},[94,56054,51414],{"class":104},[94,56056,1520],{"class":153},[94,56058,51469],{"class":100},[94,56060,1271],{"class":104},[94,56062,56063,56065,56067,56069,56071,56073],{"class":96,"line":1708},[94,56064,54683],{"class":153},[94,56066,51414],{"class":104},[94,56068,416],{"class":153},[94,56070,51469],{"class":100},[94,56072,51533],{"class":153},[94,56074,1271],{"class":104},[94,56076,56077],{"class":96,"line":1713},[94,56078,2168],{"class":104},[94,56080,56081],{"class":96,"line":1730},[94,56082,2381],{"emptyLinePlaceholder":20},[94,56084,56085,56087],{"class":96,"line":1735},[94,56086,54797],{"class":1944},[94,56088,15554],{"class":104},[94,56090,56091,56093,56095,56097],{"class":96,"line":1740},[94,56092,54736],{"class":153},[94,56094,51414],{"class":104},[94,56096,54808],{"class":153},[94,56098,1271],{"class":104},[94,56100,56101,56103,56105,56107],{"class":96,"line":1745},[94,56102,54815],{"class":153},[94,56104,51414],{"class":104},[94,56106,296],{"class":153},[94,56108,1271],{"class":104},[94,56110,56111,56113,56115,56117],{"class":96,"line":1759},[94,56112,54826],{"class":153},[94,56114,51414],{"class":104},[94,56116,296],{"class":153},[94,56118,1271],{"class":104},[94,56120,56121,56123,56125,56127,56129],{"class":96,"line":1764},[94,56122,54748],{"class":153},[94,56124,51414],{"class":104},[94,56126,416],{"class":153},[94,56128,433],{"class":100},[94,56130,1271],{"class":104},[94,56132,56133,56135,56137,56139,56141],{"class":96,"line":2558},[94,56134,54762],{"class":153},[94,56136,51414],{"class":104},[94,56138,680],{"class":153},[94,56140,433],{"class":100},[94,56142,1271],{"class":104},[94,56144,56145,56147,56149,56151],{"class":96,"line":2572},[94,56146,54861],{"class":153},[94,56148,51414],{"class":104},[94,56150,54866],{"class":153},[94,56152,1271],{"class":104},[94,56154,56155],{"class":96,"line":2580},[94,56156,2168],{"class":104},[94,56158,56159],{"class":96,"line":2585},[94,56160,2381],{"emptyLinePlaceholder":20},[94,56162,56163,56165,56167],{"class":96,"line":2591},[94,56164,54797],{"class":1944},[94,56166,6807],{"class":51277},[94,56168,15554],{"class":104},[94,56170,56171,56173,56175,56177],{"class":96,"line":2597},[94,56172,54736],{"class":153},[94,56174,51414],{"class":104},[94,56176,54808],{"class":153},[94,56178,1271],{"class":104},[94,56180,56181,56183,56185,56187,56189],{"class":96,"line":2602},[94,56182,54899],{"class":153},[94,56184,51414],{"class":104},[94,56186,1006],{"class":153},[94,56188,51469],{"class":100},[94,56190,1271],{"class":104},[94,56192,56193,56195,56197,56199,56201],{"class":96,"line":7930},[94,56194,54815],{"class":153},[94,56196,51414],{"class":104},[94,56198,805],{"class":153},[94,56200,51469],{"class":100},[94,56202,1271],{"class":104},[94,56204,56205,56207,56209,56211,56213],{"class":96,"line":7954},[94,56206,54924],{"class":153},[94,56208,51414],{"class":104},[94,56210,424],{"class":153},[94,56212,51469],{"class":100},[94,56214,1271],{"class":104},[94,56216,56217],{"class":96,"line":7959},[94,56218,2168],{"class":104},[94,56220,56221],{"class":96,"line":7965},[94,56222,2381],{"emptyLinePlaceholder":20},[94,56224,56225,56227],{"class":96,"line":7992},[94,56226,54945],{"class":51277},[94,56228,15554],{"class":104},[94,56230,56231,56233,56235,56237],{"class":96,"line":7997},[94,56232,54736],{"class":153},[94,56234,51414],{"class":104},[94,56236,54808],{"class":153},[94,56238,1271],{"class":104},[94,56240,56241,56243,56245,56247,56249],{"class":96,"line":8003},[94,56242,54924],{"class":153},[94,56244,51414],{"class":104},[94,56246,886],{"class":153},[94,56248,51469],{"class":100},[94,56250,1271],{"class":104},[94,56252,56253,56255,56257,56259,56261],{"class":96,"line":8015},[94,56254,54815],{"class":153},[94,56256,51414],{"class":104},[94,56258,805],{"class":153},[94,56260,51469],{"class":100},[94,56262,1271],{"class":104},[94,56264,56265,56267,56269,56271],{"class":96,"line":8027},[94,56266,54986],{"class":153},[94,56268,51414],{"class":104},[94,56270,51454],{"class":153},[94,56272,1271],{"class":104},[94,56274,56275,56277,56279,56281],{"class":96,"line":8039},[94,56276,54997],{"class":153},[94,56278,51414],{"class":104},[94,56280,51645],{"class":153},[94,56282,1271],{"class":104},[94,56284,56285,56287,56289,56291],{"class":96,"line":9698},[94,56286,54736],{"class":153},[94,56288,51414],{"class":104},[94,56290,54808],{"class":153},[94,56292,1271],{"class":104},[94,56294,56295,56297,56299,56301,56303],{"class":96,"line":9723},[94,56296,54748],{"class":153},[94,56298,51414],{"class":104},[94,56300,3973],{"class":153},[94,56302,51469],{"class":100},[94,56304,1271],{"class":104},[94,56306,56307,56309,56311,56313,56315],{"class":96,"line":9746},[94,56308,54762],{"class":153},[94,56310,51414],{"class":104},[94,56312,805],{"class":153},[94,56314,51469],{"class":100},[94,56316,1271],{"class":104},[94,56318,56319],{"class":96,"line":9770},[94,56320,2168],{"class":104},[94,56322,56323],{"class":96,"line":9775},[94,56324,2381],{"emptyLinePlaceholder":20},[94,56326,56327,56329,56331],{"class":96,"line":9780},[94,56328,54945],{"class":51277},[94,56330,55052],{"class":51277},[94,56332,15554],{"class":104},[94,56334,56335,56337,56339,56341,56343],{"class":96,"line":9785},[94,56336,54748],{"class":153},[94,56338,51414],{"class":104},[94,56340,805],{"class":153},[94,56342,51469],{"class":100},[94,56344,1271],{"class":104},[94,56346,56347,56349,56351,56353,56355],{"class":96,"line":9794},[94,56348,54762],{"class":153},[94,56350,51414],{"class":104},[94,56352,805],{"class":153},[94,56354,51469],{"class":100},[94,56356,1271],{"class":104},[94,56358,56359,56361,56363,56365,56367,56369,56371,56373,56375,56377,56379,56381],{"class":96,"line":9799},[94,56360,54861],{"class":153},[94,56362,51414],{"class":104},[94,56364,55087],{"class":153},[94,56366,105],{"class":104},[94,56368,296],{"class":153},[94,56370,12417],{"class":104},[94,56372,296],{"class":153},[94,56374,12417],{"class":104},[94,56376,296],{"class":153},[94,56378,12417],{"class":104},[94,56380,55104],{"class":153},[94,56382,2700],{"class":104},[94,56384,56385,56387,56389,56391,56393],{"class":96,"line":9805},[94,56386,55111],{"class":153},[94,56388,51414],{"class":104},[94,56390,551],{"class":153},[94,56392,51469],{"class":100},[94,56394,1271],{"class":104},[94,56396,56397],{"class":96,"line":9826},[94,56398,2168],{"class":104},[94,56400,56401],{"class":96,"line":9832},[94,56402,2381],{"emptyLinePlaceholder":20},[94,56404,56405,56407],{"class":96,"line":9846},[94,56406,55132],{"class":1944},[94,56408,15554],{"class":104},[94,56410,56411,56413,56415,56417],{"class":96,"line":9852},[94,56412,54861],{"class":153},[94,56414,51414],{"class":104},[94,56416,55143],{"class":153},[94,56418,1271],{"class":104},[94,56420,56421],{"class":96,"line":9879},[94,56422,2168],{"class":104},[94,56424,56425,56427,56429],{"class":96,"line":9888},[94,56426,52394],{"class":104},[94,56428,5108],{"class":51277},[94,56430,51284],{"class":104},[94,56432,56433,56435,56437],{"class":96,"line":9894},[94,56434,51762],{"class":104},[94,56436,51311],{"class":51277},[94,56438,51284],{"class":104},[94,56440,56441],{"class":96,"line":9902},[94,56442,2381],{"emptyLinePlaceholder":20},[94,56444,56445,56447,56449],{"class":96,"line":9907},[94,56446,1015],{"class":104},[94,56448,51777],{"class":51277},[94,56450,51284],{"class":104},[94,56452,56453,56455,56457,56459,56461,56463],{"class":96,"line":16586},[94,56454,52121],{"class":104},[94,56456,51588],{"class":51277},[94,56458,53463],{"class":1944},[94,56460,150],{"class":104},[94,56462,53468],{"class":209},[94,56464,51284],{"class":104},[94,56466,56467,56469,56471,56473,56475,56477],{"class":96,"line":16592},[94,56468,51318],{"class":104},[94,56470,51588],{"class":51277},[94,56472,53463],{"class":1944},[94,56474,150],{"class":104},[94,56476,55204],{"class":209},[94,56478,51284],{"class":104},[94,56480,56481,56483,56485,56487,56489,56491,56493,56495,56497],{"class":96,"line":16615},[94,56482,55211],{"class":104},[94,56484,1443],{"class":51277},[94,56486,55216],{"class":1944},[94,56488,150],{"class":104},[94,56490,55221],{"class":209},[94,56492,55224],{"class":1944},[94,56494,150],{"class":104},[94,56496,7634],{"class":209},[94,56498,51284],{"class":104},[94,56500,56501,56503,56505],{"class":96,"line":16621},[94,56502,51753],{"class":104},[94,56504,51588],{"class":51277},[94,56506,51284],{"class":104},[94,56508,56509,56511,56513,56515,56517,56519],{"class":96,"line":16644},[94,56510,51318],{"class":104},[94,56512,51588],{"class":51277},[94,56514,53463],{"class":1944},[94,56516,150],{"class":104},[94,56518,55251],{"class":209},[94,56520,51284],{"class":104},[94,56522,56523,56525,56527,56529,56531],{"class":96,"line":16658},[94,56524,55211],{"class":104},[94,56526,40],{"class":51277},[94,56528,55262],{"class":104},[94,56530,40],{"class":51277},[94,56532,51284],{"class":104},[94,56534,56535,56537,56539],{"class":96,"line":16678},[94,56536,55211],{"class":104},[94,56538,1112],{"class":51277},[94,56540,51284],{"class":104},[94,56542,56543,56545,56547,56549,56551,56553,56555,56557],{"class":96,"line":16684},[94,56544,55279],{"class":104},[94,56546,51],{"class":51277},[94,56548,53463],{"class":1944},[94,56550,150],{"class":104},[94,56552,55288],{"class":209},[94,56554,55291],{"class":104},[94,56556,51],{"class":51277},[94,56558,51284],{"class":104},[94,56560,56561,56563,56565,56567,56569],{"class":96,"line":16695},[94,56562,55279],{"class":104},[94,56564,51],{"class":51277},[94,56566,55291],{"class":104},[94,56568,51],{"class":51277},[94,56570,51284],{"class":104},[94,56572,56573,56575,56577,56579,56581],{"class":96,"line":16718},[94,56574,55279],{"class":104},[94,56576,51],{"class":51277},[94,56578,55291],{"class":104},[94,56580,51],{"class":51277},[94,56582,51284],{"class":104},[94,56584,56585,56587,56589,56591,56593],{"class":96,"line":16740},[94,56586,55279],{"class":104},[94,56588,51],{"class":51277},[94,56590,55291],{"class":104},[94,56592,51],{"class":51277},[94,56594,51284],{"class":104},[94,56596,56597,56599,56601,56603,56605],{"class":96,"line":16745},[94,56598,55279],{"class":104},[94,56600,51],{"class":51277},[94,56602,55291],{"class":104},[94,56604,51],{"class":51277},[94,56606,51284],{"class":104},[94,56608,56609,56611,56613,56615,56617],{"class":96,"line":16751},[94,56610,55279],{"class":104},[94,56612,51],{"class":51277},[94,56614,55291],{"class":104},[94,56616,51],{"class":51277},[94,56618,51284],{"class":104},[94,56620,56621,56623,56625,56627,56629],{"class":96,"line":16765},[94,56622,55279],{"class":104},[94,56624,51],{"class":51277},[94,56626,55291],{"class":104},[94,56628,51],{"class":51277},[94,56630,51284],{"class":104},[94,56632,56633,56635,56637,56639,56641],{"class":96,"line":16778},[94,56634,55279],{"class":104},[94,56636,51],{"class":51277},[94,56638,55291],{"class":104},[94,56640,51],{"class":51277},[94,56642,51284],{"class":104},[94,56644,56645,56647,56649],{"class":96,"line":16783},[94,56646,55384],{"class":104},[94,56648,1112],{"class":51277},[94,56650,51284],{"class":104},[94,56652,56653,56655,56657],{"class":96,"line":16797},[94,56654,51753],{"class":104},[94,56656,51588],{"class":51277},[94,56658,51284],{"class":104},[94,56660,56661,56663,56665],{"class":96,"line":16802},[94,56662,52394],{"class":104},[94,56664,51588],{"class":51277},[94,56666,51284],{"class":104},[94,56668,56669,56671,56673],{"class":96,"line":16808},[94,56670,52121],{"class":104},[94,56672,51790],{"class":51277},[94,56674,51284],{"class":104},[94,56676,56677,56679,56682,56684],{"class":96,"line":16813},[94,56678,11203],{"class":100},[94,56680,56681],{"class":153}," sliderData",[94,56683,13546],{"class":100},[94,56685,55424],{"class":104},[94,56687,56688,56690,56692,56694,56696,56698,56700],{"class":96,"line":16827},[94,56689,55429],{"class":104},[94,56691,55432],{"class":209},[94,56693,55435],{"class":104},[94,56695,55438],{"class":209},[94,56697,55441],{"class":104},[94,56699,55444],{"class":209},[94,56701,55447],{"class":104},[94,56703,56704,56706,56708,56710,56712,56714,56716],{"class":96,"line":16832},[94,56705,55429],{"class":104},[94,56707,55454],{"class":209},[94,56709,55435],{"class":104},[94,56711,55459],{"class":209},[94,56713,55441],{"class":104},[94,56715,55464],{"class":209},[94,56717,55447],{"class":104},[94,56719,56720,56722,56724,56726,56728,56730,56732],{"class":96,"line":16837},[94,56721,55429],{"class":104},[94,56723,55473],{"class":209},[94,56725,55435],{"class":104},[94,56727,55478],{"class":209},[94,56729,55441],{"class":104},[94,56731,55483],{"class":209},[94,56733,55447],{"class":104},[94,56735,56736,56738,56740,56742,56744,56746,56748],{"class":96,"line":16851},[94,56737,55429],{"class":104},[94,56739,55492],{"class":209},[94,56741,55435],{"class":104},[94,56743,55497],{"class":209},[94,56745,55441],{"class":104},[94,56747,55502],{"class":209},[94,56749,55447],{"class":104},[94,56751,56752,56754,56756,56758,56760,56762,56764],{"class":96,"line":16863},[94,56753,55429],{"class":104},[94,56755,55511],{"class":209},[94,56757,55435],{"class":104},[94,56759,55516],{"class":209},[94,56761,55441],{"class":104},[94,56763,55521],{"class":209},[94,56765,55447],{"class":104},[94,56767,56768,56770,56772,56774,56776,56778,56780],{"class":96,"line":16868},[94,56769,55429],{"class":104},[94,56771,55530],{"class":209},[94,56773,55435],{"class":104},[94,56775,55535],{"class":209},[94,56777,55441],{"class":104},[94,56779,55540],{"class":209},[94,56781,55447],{"class":104},[94,56783,56784,56786,56788,56790,56792,56794,56796],{"class":96,"line":16881},[94,56785,55429],{"class":104},[94,56787,55549],{"class":209},[94,56789,55435],{"class":104},[94,56791,55554],{"class":209},[94,56793,55441],{"class":104},[94,56795,55559],{"class":209},[94,56797,55447],{"class":104},[94,56799,56800,56802,56804,56806,56808,56810,56812],{"class":96,"line":16886},[94,56801,55429],{"class":104},[94,56803,55568],{"class":209},[94,56805,55435],{"class":104},[94,56807,55573],{"class":209},[94,56809,55441],{"class":104},[94,56811,55578],{"class":209},[94,56813,55581],{"class":104},[94,56815,56816],{"class":96,"line":16891},[94,56817,53086],{"class":104},[94,56819,56820],{"class":96,"line":16896},[94,56821,56822],{"class":163},"    \u002F\u002F 1.获取元素\n",[94,56824,56825,56827,56829,56831,56833,56835,56837,56839],{"class":96,"line":16909},[94,56826,11203],{"class":100},[94,56828,55592],{"class":153},[94,56830,13546],{"class":100},[94,56832,54373],{"class":104},[94,56834,54376],{"class":1944},[94,56836,105],{"class":104},[94,56838,55603],{"class":209},[94,56840,111],{"class":104},[94,56842,56843,56845,56847,56849,56851,56853,56855,56857],{"class":96,"line":16914},[94,56844,11203],{"class":100},[94,56846,6807],{"class":153},[94,56848,13546],{"class":100},[94,56850,54373],{"class":104},[94,56852,54376],{"class":1944},[94,56854,105],{"class":104},[94,56856,55622],{"class":209},[94,56858,111],{"class":104},[94,56860,56861,56863,56865,56867],{"class":96,"line":32616},[94,56862,52196],{"class":100},[94,56864,9420],{"class":104},[94,56866,150],{"class":100},[94,56868,47316],{"class":153},[94,56870,56871],{"class":96,"line":32622},[94,56872,56873],{"class":163},"    \u002F\u002F 2.开启定时器\n",[94,56875,56876],{"class":96,"line":32628},[94,56877,56878],{"class":163},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[94,56880,56881,56884,56886,56888],{"class":96,"line":32634},[94,56882,56883],{"class":1944},"    setInterval",[94,56885,105],{"class":104},[94,56887,54426],{"class":100},[94,56889,54429],{"class":104},[94,56891,56892,56894],{"class":96,"line":32640},[94,56893,54434],{"class":104},[94,56895,2683],{"class":100},[94,56897,56898,56900,56902,56904,56907,56909],{"class":96,"line":32651},[94,56899,54457],{"class":100},[94,56901,54460],{"class":104},[94,56903,1691],{"class":100},[94,56905,56906],{"class":104}," sliderData.",[94,56908,51945],{"class":153},[94,56910,12424],{"class":104},[94,56912,56913,56916,56918],{"class":96,"line":32657},[94,56914,56915],{"class":104},"        i ",[94,56917,150],{"class":100},[94,56919,47316],{"class":153},[94,56921,56922],{"class":96,"line":32677},[94,56923,52375],{"class":104},[94,56925,56926],{"class":96,"line":32683},[94,56927,56928],{"class":163},"      \u002F\u002F 更换图片路径\n",[94,56930,56931,56933,56935],{"class":96,"line":32694},[94,56932,55698],{"class":104},[94,56934,150],{"class":100},[94,56936,56937],{"class":104}," sliderData[i].url\n",[94,56939,56940],{"class":96,"line":32700},[94,56941,56942],{"class":163},"      \u002F\u002F 把文字写到p里面\n",[94,56944,56945,56947,56949],{"class":96,"line":32706},[94,56946,55708],{"class":104},[94,56948,150],{"class":100},[94,56950,56951],{"class":104}," sliderData[i].title\n",[94,56953,56954],{"class":96,"line":32712},[94,56955,56956],{"class":163},"      \u002F\u002F 小圆点\n",[94,56958,56959],{"class":96,"line":32718},[94,56960,56961],{"class":163},"      \u002F\u002F 先删除以前的active\n",[94,56963,56964],{"class":96,"line":32724},[94,56965,56966],{"class":163},"      \u002F\u002F 只让当前li添加active\n",[94,56968,56969,56971,56973,56975,56978,56981,56984,56986,56988],{"class":96,"line":32730},[94,56970,55748],{"class":104},[94,56972,54376],{"class":1944},[94,56974,105],{"class":104},[94,56976,56977],{"class":209},"'.slider-footer .activate'",[94,56979,56980],{"class":104},").classList.",[94,56982,56983],{"class":1944},"remove",[94,56985,105],{"class":104},[94,56987,55766],{"class":209},[94,56989,111],{"class":104},[94,56991,56992,56994,56996,56998,57001,57003,57005,57007,57010,57012,57014,57016,57018],{"class":96,"line":32736},[94,56993,55748],{"class":104},[94,56995,54376],{"class":1944},[94,56997,105],{"class":104},[94,56999,57000],{"class":209},"`.slider-footer ul li:nth-child(${",[94,57002,546],{"class":104},[94,57004,45549],{"class":100},[94,57006,25101],{"class":153},[94,57008,57009],{"class":209},"})`",[94,57011,56980],{"class":104},[94,57013,5316],{"class":1944},[94,57015,105],{"class":104},[94,57017,55766],{"class":209},[94,57019,111],{"class":104},[94,57021,57022],{"class":96,"line":32756},[94,57023,2381],{"emptyLinePlaceholder":20},[94,57025,57026,57028,57030],{"class":96,"line":32762},[94,57027,54512],{"class":104},[94,57029,6392],{"class":153},[94,57031,111],{"class":104},[94,57033,57034],{"class":96,"line":32778},[94,57035,2381],{"emptyLinePlaceholder":20},[94,57037,57038,57040,57042],{"class":96,"line":32784},[94,57039,52394],{"class":104},[94,57041,51790],{"class":51277},[94,57043,51284],{"class":104},[94,57045,57046,57048,57050],{"class":96,"line":32798},[94,57047,51762],{"class":104},[94,57049,51777],{"class":51277},[94,57051,51284],{"class":104},[94,57053,57054],{"class":96,"line":32804},[94,57055,2381],{"emptyLinePlaceholder":20},[94,57057,57058,57060,57062],{"class":96,"line":32819},[94,57059,51762],{"class":104},[94,57061,50612],{"class":51277},[94,57063,51284],{"class":104},[65,57065,57067],{"id":57066},"_317-重要知识点","3.1.7 重要知识点",[40,57069,57070,57071],{},"浏览器在渲染文本时， ",[254,57072,57073],{},"没有空格或换行符就没有“断行点”",[40,57075,57076],{},[1443,57077],{"alt":14,"src":57078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[40,57080,57081],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[40,57083,57084],{},[1443,57085],{"alt":14,"src":57086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[40,57088,57089],{},[1443,57090],{"alt":14,"src":57091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[35,57093,57095],{"id":57094},"_32-dom事件基础","3.2 DOM事件基础",[65,57097,57099],{"id":57098},"_321-事件监听","3.2.1 事件监听",[40,57101,57102],{},[1443,57103],{"alt":14,"src":57104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[40,57106,57107],{},"事件监听有响应的发生",[40,57109,57110],{},[1443,57111],{"alt":14,"src":57112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[40,57114,57115],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[40,57117,57118],{},"对于有名函数,要执行的函数名后边不要加()",[65,57120,57122],{"id":57121},"_322-随机点名案例","3.2.2 随机点名案例",[85,57124,57126],{"className":50610,"code":57125,"language":50612,"meta":14,"style":14},"\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",[91,57127,57128,57138,57152,57156,57164,57178,57198,57210,57218,57224,57234,57244,57248,57252,57259,57270,57274,57278,57284,57296,57310,57320,57332,57345,57349,57353,57360,57364,57377,57389,57401,57405,57409,57413,57420,57430,57434,57438,57447,57459,57471,57486,57490,57498,57506,57510,57518,57531,57545,57558,57578,57586,57601,57621,57641,57649,57653,57661,57666,57702,57722,57727,57746,57751,57762,57767,57778,57783,57802,57817,57822,57848,57858,57867,57872,57888,57893,57898,57903,57918,57922,57926,57931,57950,57967,57975,57980,57995,57999,58003,58011,58019,58023],{"__ignoreMap":14},[94,57129,57130,57132,57134,57136],{"class":96,"line":97},[94,57131,51274],{"class":104},[94,57133,51278],{"class":51277},[94,57135,51281],{"class":1944},[94,57137,51284],{"class":104},[94,57139,57140,57142,57144,57146,57148,57150],{"class":96,"line":15},[94,57141,1015],{"class":104},[94,57143,50612],{"class":51277},[94,57145,51293],{"class":1944},[94,57147,150],{"class":104},[94,57149,51298],{"class":209},[94,57151,51284],{"class":104},[94,57153,57154],{"class":96,"line":1160},[94,57155,2381],{"emptyLinePlaceholder":20},[94,57157,57158,57160,57162],{"class":96,"line":1175},[94,57159,1015],{"class":104},[94,57161,51311],{"class":51277},[94,57163,51284],{"class":104},[94,57165,57166,57168,57170,57172,57174,57176],{"class":96,"line":1181},[94,57167,52121],{"class":104},[94,57169,51321],{"class":51277},[94,57171,51324],{"class":1944},[94,57173,150],{"class":104},[94,57175,51329],{"class":209},[94,57177,51284],{"class":104},[94,57179,57180,57182,57184,57186,57188,57190,57192,57194,57196],{"class":96,"line":1195},[94,57181,52121],{"class":104},[94,57183,51321],{"class":51277},[94,57185,14902],{"class":1944},[94,57187,150],{"class":104},[94,57189,51368],{"class":209},[94,57191,51348],{"class":1944},[94,57193,150],{"class":104},[94,57195,51375],{"class":209},[94,57197,51284],{"class":104},[94,57199,57200,57202,57204,57206,57208],{"class":96,"line":1201},[94,57201,52121],{"class":104},[94,57203,51384],{"class":51277},[94,57205,51387],{"class":104},[94,57207,51384],{"class":51277},[94,57209,51284],{"class":104},[94,57211,57212,57214,57216],{"class":96,"line":1292},[94,57213,52121],{"class":104},[94,57215,5108],{"class":51277},[94,57217,51284],{"class":104},[94,57219,57220,57222],{"class":96,"line":1298},[94,57221,6385],{"class":51277},[94,57223,15554],{"class":104},[94,57225,57226,57228,57230,57232],{"class":96,"line":1310},[94,57227,54683],{"class":153},[94,57229,51414],{"class":104},[94,57231,296],{"class":153},[94,57233,1271],{"class":104},[94,57235,57236,57238,57240,57242],{"class":96,"line":1593},[94,57237,54672],{"class":153},[94,57239,51414],{"class":104},[94,57241,296],{"class":153},[94,57243,1271],{"class":104},[94,57245,57246],{"class":96,"line":1598},[94,57247,2168],{"class":104},[94,57249,57250],{"class":96,"line":1604},[94,57251,2381],{"emptyLinePlaceholder":20},[94,57253,57254,57257],{"class":96,"line":1609},[94,57255,57256],{"class":51277},"    h2",[94,57258,15554],{"class":104},[94,57260,57261,57264,57266,57268],{"class":96,"line":1623},[94,57262,57263],{"class":153},"      text-align",[94,57265,51414],{"class":104},[94,57267,51569],{"class":153},[94,57269,1271],{"class":104},[94,57271,57272],{"class":96,"line":1628},[94,57273,2168],{"class":104},[94,57275,57276],{"class":96,"line":1634},[94,57277,2381],{"emptyLinePlaceholder":20},[94,57279,57280,57282],{"class":96,"line":1655},[94,57281,54729],{"class":1944},[94,57283,15554],{"class":104},[94,57285,57286,57288,57290,57292,57294],{"class":96,"line":1660},[94,57287,54748],{"class":153},[94,57289,51414],{"class":104},[94,57291,1520],{"class":153},[94,57293,51469],{"class":100},[94,57295,1271],{"class":104},[94,57297,57298,57300,57302,57304,57306,57308],{"class":96,"line":1674},[94,57299,54683],{"class":153},[94,57301,51414],{"class":104},[94,57303,761],{"class":153},[94,57305,51469],{"class":100},[94,57307,51533],{"class":153},[94,57309,1271],{"class":104},[94,57311,57312,57314,57316,57318],{"class":96,"line":1679},[94,57313,54986],{"class":153},[94,57315,51414],{"class":104},[94,57317,51454],{"class":153},[94,57319,1271],{"class":104},[94,57321,57322,57324,57326,57328,57330],{"class":96,"line":1708},[94,57323,54899],{"class":153},[94,57325,51414],{"class":104},[94,57327,930],{"class":153},[94,57329,51469],{"class":100},[94,57331,1271],{"class":104},[94,57333,57334,57337,57339,57341,57343],{"class":96,"line":1713},[94,57335,57336],{"class":153},"      line-height",[94,57338,51414],{"class":104},[94,57340,506],{"class":153},[94,57342,51469],{"class":100},[94,57344,1271],{"class":104},[94,57346,57347],{"class":96,"line":1730},[94,57348,2168],{"class":104},[94,57350,57351],{"class":96,"line":1735},[94,57352,2381],{"emptyLinePlaceholder":20},[94,57354,57355,57358],{"class":96,"line":1740},[94,57356,57357],{"class":1944},"    .qs",[94,57359,15554],{"class":104},[94,57361,57362],{"class":96,"line":1745},[94,57363,2381],{"emptyLinePlaceholder":20},[94,57365,57366,57368,57370,57373,57375],{"class":96,"line":1759},[94,57367,54748],{"class":153},[94,57369,51414],{"class":104},[94,57371,57372],{"class":153},"450",[94,57374,51469],{"class":100},[94,57376,1271],{"class":104},[94,57378,57379,57381,57383,57385,57387],{"class":96,"line":1764},[94,57380,54762],{"class":153},[94,57382,51414],{"class":104},[94,57384,506],{"class":153},[94,57386,51469],{"class":100},[94,57388,1271],{"class":104},[94,57390,57391,57394,57396,57399],{"class":96,"line":2558},[94,57392,57393],{"class":153},"      color",[94,57395,51414],{"class":104},[94,57397,57398],{"class":153},"red",[94,57400,1271],{"class":104},[94,57402,57403],{"class":96,"line":2572},[94,57404,2381],{"emptyLinePlaceholder":20},[94,57406,57407],{"class":96,"line":2580},[94,57408,2168],{"class":104},[94,57410,57411],{"class":96,"line":2585},[94,57412,2381],{"emptyLinePlaceholder":20},[94,57414,57415,57418],{"class":96,"line":2591},[94,57416,57417],{"class":1944},"    .btns",[94,57419,15554],{"class":104},[94,57421,57422,57424,57426,57428],{"class":96,"line":2597},[94,57423,57263],{"class":153},[94,57425,51414],{"class":104},[94,57427,51569],{"class":153},[94,57429,1271],{"class":104},[94,57431,57432],{"class":96,"line":2602},[94,57433,2168],{"class":104},[94,57435,57436],{"class":96,"line":7930},[94,57437,2381],{"emptyLinePlaceholder":20},[94,57439,57440,57442,57445],{"class":96,"line":7954},[94,57441,57417],{"class":1944},[94,57443,57444],{"class":51277}," button",[94,57446,15554],{"class":104},[94,57448,57449,57451,57453,57455,57457],{"class":96,"line":7959},[94,57450,54748],{"class":153},[94,57452,51414],{"class":104},[94,57454,922],{"class":153},[94,57456,51469],{"class":100},[94,57458,1271],{"class":104},[94,57460,57461,57463,57465,57467,57469],{"class":96,"line":7965},[94,57462,54762],{"class":153},[94,57464,51414],{"class":104},[94,57466,378],{"class":153},[94,57468,51469],{"class":100},[94,57470,1271],{"class":104},[94,57472,57473,57475,57477,57479,57482,57484],{"class":96,"line":7992},[94,57474,54683],{"class":153},[94,57476,51414],{"class":104},[94,57478,296],{"class":153},[94,57480,57481],{"class":153}," 50",[94,57483,51469],{"class":100},[94,57485,1271],{"class":104},[94,57487,57488],{"class":96,"line":7997},[94,57489,2168],{"class":104},[94,57491,57492,57494,57496],{"class":96,"line":8003},[94,57493,52394],{"class":104},[94,57495,5108],{"class":51277},[94,57497,51284],{"class":104},[94,57499,57500,57502,57504],{"class":96,"line":8015},[94,57501,51762],{"class":104},[94,57503,51311],{"class":51277},[94,57505,51284],{"class":104},[94,57507,57508],{"class":96,"line":8027},[94,57509,2381],{"emptyLinePlaceholder":20},[94,57511,57512,57514,57516],{"class":96,"line":8039},[94,57513,1015],{"class":104},[94,57515,51777],{"class":51277},[94,57517,51284],{"class":104},[94,57519,57520,57522,57524,57527,57529],{"class":96,"line":9698},[94,57521,52121],{"class":104},[94,57523,35],{"class":51277},[94,57525,57526],{"class":104},">随机点名\u003C\u002F",[94,57528,35],{"class":51277},[94,57530,51284],{"class":104},[94,57532,57533,57535,57537,57539,57541,57543],{"class":96,"line":9723},[94,57534,52121],{"class":104},[94,57536,51588],{"class":51277},[94,57538,53463],{"class":1944},[94,57540,150],{"class":104},[94,57542,53468],{"class":209},[94,57544,51284],{"class":104},[94,57546,57547,57549,57551,57554,57556],{"class":96,"line":9746},[94,57548,51318],{"class":104},[94,57550,94],{"class":51277},[94,57552,57553],{"class":104},">名字是：\u003C\u002F",[94,57555,94],{"class":51277},[94,57557,51284],{"class":104},[94,57559,57560,57562,57564,57566,57568,57571,57574,57576],{"class":96,"line":9770},[94,57561,51318],{"class":104},[94,57563,51588],{"class":51277},[94,57565,53463],{"class":1944},[94,57567,150],{"class":104},[94,57569,57570],{"class":209},"\"qs\"",[94,57572,57573],{"class":104},">这里显示姓名\u003C\u002F",[94,57575,51588],{"class":51277},[94,57577,51284],{"class":104},[94,57579,57580,57582,57584],{"class":96,"line":9775},[94,57581,52394],{"class":104},[94,57583,51588],{"class":51277},[94,57585,51284],{"class":104},[94,57587,57588,57590,57592,57594,57596,57599],{"class":96,"line":9780},[94,57589,52121],{"class":104},[94,57591,51588],{"class":51277},[94,57593,53463],{"class":1944},[94,57595,150],{"class":104},[94,57597,57598],{"class":209},"\"btns\"",[94,57600,51284],{"class":104},[94,57602,57603,57605,57607,57609,57611,57614,57617,57619],{"class":96,"line":9785},[94,57604,51318],{"class":104},[94,57606,53864],{"class":51277},[94,57608,53463],{"class":1944},[94,57610,150],{"class":104},[94,57612,57613],{"class":209},"\"start\"",[94,57615,57616],{"class":104},">开始\u003C\u002F",[94,57618,53864],{"class":51277},[94,57620,51284],{"class":104},[94,57622,57623,57625,57627,57629,57631,57634,57637,57639],{"class":96,"line":9794},[94,57624,51318],{"class":104},[94,57626,53864],{"class":51277},[94,57628,53463],{"class":1944},[94,57630,150],{"class":104},[94,57632,57633],{"class":209},"\"end\"",[94,57635,57636],{"class":104},">结束\u003C\u002F",[94,57638,53864],{"class":51277},[94,57640,51284],{"class":104},[94,57642,57643,57645,57647],{"class":96,"line":9799},[94,57644,52394],{"class":104},[94,57646,51588],{"class":51277},[94,57648,51284],{"class":104},[94,57650,57651],{"class":96,"line":9805},[94,57652,2381],{"emptyLinePlaceholder":20},[94,57654,57655,57657,57659],{"class":96,"line":9826},[94,57656,52121],{"class":104},[94,57658,51790],{"class":51277},[94,57660,51284],{"class":104},[94,57662,57663],{"class":96,"line":9832},[94,57664,57665],{"class":163},"    \u002F\u002F 数据数组\n",[94,57667,57668,57670,57673,57675,57677,57680,57682,57685,57687,57690,57692,57695,57697,57700],{"class":96,"line":9846},[94,57669,11203],{"class":100},[94,57671,57672],{"class":153}," arr",[94,57674,13546],{"class":100},[94,57676,52203],{"class":104},[94,57678,57679],{"class":209},"'马超'",[94,57681,12417],{"class":104},[94,57683,57684],{"class":209},"'黄忠'",[94,57686,12417],{"class":104},[94,57688,57689],{"class":209},"'赵云'",[94,57691,12417],{"class":104},[94,57693,57694],{"class":209},"'关羽'",[94,57696,12417],{"class":104},[94,57698,57699],{"class":209},"'张飞'",[94,57701,33229],{"class":104},[94,57703,57704,57706,57709,57711,57713,57715,57717,57720],{"class":96,"line":9852},[94,57705,11203],{"class":100},[94,57707,57708],{"class":153}," qs",[94,57710,13546],{"class":100},[94,57712,54373],{"class":104},[94,57714,54376],{"class":1944},[94,57716,105],{"class":104},[94,57718,57719],{"class":209},"'.qs'",[94,57721,111],{"class":104},[94,57723,57724],{"class":96,"line":9879},[94,57725,57726],{"class":163},"    \u002F\u002F 1.业务1.开始按钮模块\n",[94,57728,57729,57731,57733,57735,57737,57739,57741,57744],{"class":96,"line":9888},[94,57730,11203],{"class":100},[94,57732,4165],{"class":153},[94,57734,13546],{"class":100},[94,57736,54373],{"class":104},[94,57738,54376],{"class":1944},[94,57740,105],{"class":104},[94,57742,57743],{"class":209},"'.start'",[94,57745,111],{"class":104},[94,57747,57748],{"class":96,"line":9894},[94,57749,57750],{"class":163},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[94,57752,57753,57755,57758,57760],{"class":96,"line":9902},[94,57754,52196],{"class":100},[94,57756,57757],{"class":104}," timerId ",[94,57759,150],{"class":100},[94,57761,47316],{"class":153},[94,57763,57764],{"class":96,"line":9907},[94,57765,57766],{"class":163},"    \u002F\u002F 随机号要全局变量\n",[94,57768,57769,57771,57774,57776],{"class":96,"line":16586},[94,57770,52196],{"class":100},[94,57772,57773],{"class":104}," random ",[94,57775,150],{"class":100},[94,57777,47316],{"class":153},[94,57779,57780],{"class":96,"line":16592},[94,57781,57782],{"class":163},"    \u002F\u002F 1.1 添加点击事件\n",[94,57784,57785,57788,57791,57793,57796,57798,57800],{"class":96,"line":16615},[94,57786,57787],{"class":104},"    start.",[94,57789,57790],{"class":1944},"addEventListener",[94,57792,105],{"class":104},[94,57794,57795],{"class":209},"'click'",[94,57797,12417],{"class":104},[94,57799,54426],{"class":100},[94,57801,54429],{"class":104},[94,57803,57804,57807,57809,57811,57813,57815],{"class":96,"line":16621},[94,57805,57806],{"class":104},"      timerId ",[94,57808,150],{"class":100},[94,57810,54421],{"class":1944},[94,57812,105],{"class":104},[94,57814,54426],{"class":100},[94,57816,54429],{"class":104},[94,57818,57819],{"class":96,"line":16644},[94,57820,57821],{"class":163},"        \u002F\u002F 随机数\n",[94,57823,57824,57827,57829,57832,57835,57838,57840,57842,57844,57846],{"class":96,"line":16658},[94,57825,57826],{"class":104},"        random ",[94,57828,150],{"class":100},[94,57830,57831],{"class":1944}," parseInt",[94,57833,57834],{"class":104},"(Math.",[94,57836,57837],{"class":1944},"random",[94,57839,13032],{"class":104},[94,57841,560],{"class":100},[94,57843,51942],{"class":104},[94,57845,51945],{"class":153},[94,57847,111],{"class":104},[94,57849,57850,57853,57855],{"class":96,"line":16678},[94,57851,57852],{"class":104},"        qs.innerHTML ",[94,57854,150],{"class":100},[94,57856,57857],{"class":104}," arr[random]\n",[94,57859,57860,57863,57865],{"class":96,"line":16684},[94,57861,57862],{"class":104},"      }, ",[94,57864,378],{"class":153},[94,57866,111],{"class":104},[94,57868,57869],{"class":96,"line":16695},[94,57870,57871],{"class":163},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[94,57873,57874,57876,57879,57881,57884,57886],{"class":96,"line":16718},[94,57875,54457],{"class":100},[94,57877,57878],{"class":104}," (arr.",[94,57880,51945],{"class":153},[94,57882,57883],{"class":100}," ===",[94,57885,25101],{"class":153},[94,57887,12424],{"class":104},[94,57889,57890],{"class":96,"line":16740},[94,57891,57892],{"class":163},"        \u002F\u002F start.disabled = true\n",[94,57894,57895],{"class":96,"line":16745},[94,57896,57897],{"class":163},"        \u002F\u002F end.disabled = true\n",[94,57899,57900],{"class":96,"line":16751},[94,57901,57902],{"class":163},"        \u002F\u002F 可以合起来写\n",[94,57904,57905,57908,57910,57913,57915],{"class":96,"line":16765},[94,57906,57907],{"class":104},"        start.disabled ",[94,57909,150],{"class":100},[94,57911,57912],{"class":104}," end.disabled ",[94,57914,150],{"class":100},[94,57916,57917],{"class":153}," true\n",[94,57919,57920],{"class":96,"line":16778},[94,57921,52375],{"class":104},[94,57923,57924],{"class":96,"line":16783},[94,57925,33444],{"class":104},[94,57927,57928],{"class":96,"line":16797},[94,57929,57930],{"class":163},"    \u002F\u002F 1.2 关闭按钮模块\n",[94,57932,57933,57935,57937,57939,57941,57943,57945,57948],{"class":96,"line":16802},[94,57934,11203],{"class":100},[94,57936,4181],{"class":153},[94,57938,13546],{"class":100},[94,57940,54373],{"class":104},[94,57942,54376],{"class":1944},[94,57944,105],{"class":104},[94,57946,57947],{"class":209},"'.end'",[94,57949,111],{"class":104},[94,57951,57952,57955,57957,57959,57961,57963,57965],{"class":96,"line":16808},[94,57953,57954],{"class":104},"    end.",[94,57956,57790],{"class":1944},[94,57958,105],{"class":104},[94,57960,57795],{"class":209},[94,57962,12417],{"class":104},[94,57964,54426],{"class":100},[94,57966,54429],{"class":104},[94,57968,57969,57972],{"class":96,"line":16813},[94,57970,57971],{"class":1944},"      clearInterval",[94,57973,57974],{"class":104},"(timerId)\n",[94,57976,57977],{"class":96,"line":16827},[94,57978,57979],{"class":163},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[94,57981,57982,57985,57988,57991,57993],{"class":96,"line":16832},[94,57983,57984],{"class":104},"      arr.",[94,57986,57987],{"class":1944},"splice",[94,57989,57990],{"class":104},"(random, ",[94,57992,322],{"class":153},[94,57994,111],{"class":104},[94,57996,57997],{"class":96,"line":16837},[94,57998,33444],{"class":104},[94,58000,58001],{"class":96,"line":16851},[94,58002,2381],{"emptyLinePlaceholder":20},[94,58004,58005,58007,58009],{"class":96,"line":16863},[94,58006,52394],{"class":104},[94,58008,51790],{"class":51277},[94,58010,51284],{"class":104},[94,58012,58013,58015,58017],{"class":96,"line":16868},[94,58014,51762],{"class":104},[94,58016,51777],{"class":51277},[94,58018,51284],{"class":104},[94,58020,58021],{"class":96,"line":16881},[94,58022,2381],{"emptyLinePlaceholder":20},[94,58024,58025,58027,58029],{"class":96,"line":16886},[94,58026,51762],{"class":104},[94,58028,50612],{"class":51277},[94,58030,51284],{"class":104},[40,58032,58033],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[65,58035,58037],{"id":58036},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[85,58039,58041],{"className":50610,"code":58040,"language":50612,"meta":14,"style":14},"\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",[91,58042,58043,58053,58067,58071,58079,58093,58113,58125,58133,58137,58145,58157,58165,58184,58201,58217,58227,58231,58239,58247,58251],{"__ignoreMap":14},[94,58044,58045,58047,58049,58051],{"class":96,"line":97},[94,58046,51274],{"class":104},[94,58048,51278],{"class":51277},[94,58050,51281],{"class":1944},[94,58052,51284],{"class":104},[94,58054,58055,58057,58059,58061,58063,58065],{"class":96,"line":15},[94,58056,1015],{"class":104},[94,58058,50612],{"class":51277},[94,58060,51293],{"class":1944},[94,58062,150],{"class":104},[94,58064,51298],{"class":209},[94,58066,51284],{"class":104},[94,58068,58069],{"class":96,"line":1160},[94,58070,2381],{"emptyLinePlaceholder":20},[94,58072,58073,58075,58077],{"class":96,"line":1175},[94,58074,1015],{"class":104},[94,58076,51311],{"class":51277},[94,58078,51284],{"class":104},[94,58080,58081,58083,58085,58087,58089,58091],{"class":96,"line":1181},[94,58082,52121],{"class":104},[94,58084,51321],{"class":51277},[94,58086,51324],{"class":1944},[94,58088,150],{"class":104},[94,58090,51329],{"class":209},[94,58092,51284],{"class":104},[94,58094,58095,58097,58099,58101,58103,58105,58107,58109,58111],{"class":96,"line":1195},[94,58096,52121],{"class":104},[94,58098,51321],{"class":51277},[94,58100,14902],{"class":1944},[94,58102,150],{"class":104},[94,58104,51368],{"class":209},[94,58106,51348],{"class":1944},[94,58108,150],{"class":104},[94,58110,51375],{"class":209},[94,58112,51284],{"class":104},[94,58114,58115,58117,58119,58121,58123],{"class":96,"line":1201},[94,58116,52121],{"class":104},[94,58118,51384],{"class":51277},[94,58120,51387],{"class":104},[94,58122,51384],{"class":51277},[94,58124,51284],{"class":104},[94,58126,58127,58129,58131],{"class":96,"line":1292},[94,58128,51762],{"class":104},[94,58130,51311],{"class":51277},[94,58132,51284],{"class":104},[94,58134,58135],{"class":96,"line":1298},[94,58136,2381],{"emptyLinePlaceholder":20},[94,58138,58139,58141,58143],{"class":96,"line":1310},[94,58140,1015],{"class":104},[94,58142,51777],{"class":51277},[94,58144,51284],{"class":104},[94,58146,58147,58149,58151,58153,58155],{"class":96,"line":1593},[94,58148,52121],{"class":104},[94,58150,53864],{"class":51277},[94,58152,53870],{"class":104},[94,58154,53864],{"class":51277},[94,58156,51284],{"class":104},[94,58158,58159,58161,58163],{"class":96,"line":1598},[94,58160,52121],{"class":104},[94,58162,51790],{"class":51277},[94,58164,51284],{"class":104},[94,58166,58167,58169,58171,58173,58175,58177,58179,58182],{"class":96,"line":1604},[94,58168,11203],{"class":100},[94,58170,54368],{"class":153},[94,58172,13546],{"class":100},[94,58174,54373],{"class":104},[94,58176,54376],{"class":1944},[94,58178,105],{"class":104},[94,58180,58181],{"class":209},"'button'",[94,58183,111],{"class":104},[94,58185,58186,58189,58191,58193,58195,58197,58199],{"class":96,"line":1609},[94,58187,58188],{"class":104},"    btn.",[94,58190,57790],{"class":1944},[94,58192,105],{"class":104},[94,58194,57795],{"class":209},[94,58196,12417],{"class":104},[94,58198,54426],{"class":100},[94,58200,54429],{"class":104},[94,58202,58203,58206,58208,58210,58213,58215],{"class":96,"line":1623},[94,58204,58205],{"class":100},"      const",[94,58207,2221],{"class":153},[94,58209,13546],{"class":100},[94,58211,58212],{"class":104}," Math.",[94,58214,57837],{"class":1944},[94,58216,1957],{"class":104},[94,58218,58219,58222,58225],{"class":96,"line":1628},[94,58220,58221],{"class":104},"      console.",[94,58223,58224],{"class":1944},"log",[94,58226,118],{"class":104},[94,58228,58229],{"class":96,"line":1634},[94,58230,33444],{"class":104},[94,58232,58233,58235,58237],{"class":96,"line":1655},[94,58234,52394],{"class":104},[94,58236,51790],{"class":51277},[94,58238,51284],{"class":104},[94,58240,58241,58243,58245],{"class":96,"line":1660},[94,58242,51762],{"class":104},[94,58244,51777],{"class":51277},[94,58246,51284],{"class":104},[94,58248,58249],{"class":96,"line":1674},[94,58250,2381],{"emptyLinePlaceholder":20},[94,58252,58253,58255,58257],{"class":96,"line":1679},[94,58254,51762],{"class":104},[94,58256,50612],{"class":51277},[94,58258,51284],{"class":104},[40,58260,58261],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[40,58263,58264],{},"常量不可以重新赋值",[40,58266,58267],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[85,58269,58271],{"className":50610,"code":58270,"language":50612,"meta":14,"style":14},"\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",[91,58272,58273,58283,58297,58301,58309,58323,58343,58355,58363,58367,58375,58387,58395,58406,58424,58440,58454,58462,58466,58474,58482,58486],{"__ignoreMap":14},[94,58274,58275,58277,58279,58281],{"class":96,"line":97},[94,58276,51274],{"class":104},[94,58278,51278],{"class":51277},[94,58280,51281],{"class":1944},[94,58282,51284],{"class":104},[94,58284,58285,58287,58289,58291,58293,58295],{"class":96,"line":15},[94,58286,1015],{"class":104},[94,58288,50612],{"class":51277},[94,58290,51293],{"class":1944},[94,58292,150],{"class":104},[94,58294,51298],{"class":209},[94,58296,51284],{"class":104},[94,58298,58299],{"class":96,"line":1160},[94,58300,2381],{"emptyLinePlaceholder":20},[94,58302,58303,58305,58307],{"class":96,"line":1175},[94,58304,1015],{"class":104},[94,58306,51311],{"class":51277},[94,58308,51284],{"class":104},[94,58310,58311,58313,58315,58317,58319,58321],{"class":96,"line":1181},[94,58312,52121],{"class":104},[94,58314,51321],{"class":51277},[94,58316,51324],{"class":1944},[94,58318,150],{"class":104},[94,58320,51329],{"class":209},[94,58322,51284],{"class":104},[94,58324,58325,58327,58329,58331,58333,58335,58337,58339,58341],{"class":96,"line":1195},[94,58326,52121],{"class":104},[94,58328,51321],{"class":51277},[94,58330,14902],{"class":1944},[94,58332,150],{"class":104},[94,58334,51368],{"class":209},[94,58336,51348],{"class":1944},[94,58338,150],{"class":104},[94,58340,51375],{"class":209},[94,58342,51284],{"class":104},[94,58344,58345,58347,58349,58351,58353],{"class":96,"line":1201},[94,58346,52121],{"class":104},[94,58348,51384],{"class":51277},[94,58350,51387],{"class":104},[94,58352,51384],{"class":51277},[94,58354,51284],{"class":104},[94,58356,58357,58359,58361],{"class":96,"line":1292},[94,58358,51762],{"class":104},[94,58360,51311],{"class":51277},[94,58362,51284],{"class":104},[94,58364,58365],{"class":96,"line":1298},[94,58366,2381],{"emptyLinePlaceholder":20},[94,58368,58369,58371,58373],{"class":96,"line":1310},[94,58370,1015],{"class":104},[94,58372,51777],{"class":51277},[94,58374,51284],{"class":104},[94,58376,58377,58379,58381,58383,58385],{"class":96,"line":1593},[94,58378,52121],{"class":104},[94,58380,53864],{"class":51277},[94,58382,53870],{"class":104},[94,58384,53864],{"class":51277},[94,58386,51284],{"class":104},[94,58388,58389,58391,58393],{"class":96,"line":1598},[94,58390,52121],{"class":104},[94,58392,51790],{"class":51277},[94,58394,51284],{"class":104},[94,58396,58397,58399,58401,58403],{"class":96,"line":1604},[94,58398,11203],{"class":100},[94,58400,2221],{"class":153},[94,58402,13546],{"class":100},[94,58404,58405],{"class":153}," 10\n",[94,58407,58408,58410,58412,58414,58416,58418,58420,58422],{"class":96,"line":1609},[94,58409,11203],{"class":100},[94,58411,54368],{"class":153},[94,58413,13546],{"class":100},[94,58415,54373],{"class":104},[94,58417,54376],{"class":1944},[94,58419,105],{"class":104},[94,58421,58181],{"class":209},[94,58423,111],{"class":104},[94,58425,58426,58428,58430,58432,58434,58436,58438],{"class":96,"line":1623},[94,58427,58188],{"class":104},[94,58429,57790],{"class":1944},[94,58431,105],{"class":104},[94,58433,57795],{"class":209},[94,58435,12417],{"class":104},[94,58437,54426],{"class":100},[94,58439,54429],{"class":104},[94,58441,58442,58444,58446,58448,58450,58452],{"class":96,"line":1628},[94,58443,58205],{"class":100},[94,58445,2221],{"class":153},[94,58447,13546],{"class":100},[94,58449,58212],{"class":104},[94,58451,57837],{"class":1944},[94,58453,1957],{"class":104},[94,58455,58456,58458,58460],{"class":96,"line":1634},[94,58457,58221],{"class":104},[94,58459,58224],{"class":1944},[94,58461,118],{"class":104},[94,58463,58464],{"class":96,"line":1655},[94,58465,33444],{"class":104},[94,58467,58468,58470,58472],{"class":96,"line":1660},[94,58469,52394],{"class":104},[94,58471,51790],{"class":51277},[94,58473,51284],{"class":104},[94,58475,58476,58478,58480],{"class":96,"line":1674},[94,58477,51762],{"class":104},[94,58479,51777],{"class":51277},[94,58481,51284],{"class":104},[94,58483,58484],{"class":96,"line":1679},[94,58485,2381],{"emptyLinePlaceholder":20},[94,58487,58488,58490,58492],{"class":96,"line":1708},[94,58489,51762],{"class":104},[94,58491,50612],{"class":51277},[94,58493,51284],{"class":104},[40,58495,58496],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[85,58498,58500],{"className":50610,"code":58499,"language":50612,"meta":14,"style":14},"\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",[91,58501,58502,58512,58526,58530,58538,58552,58572,58584,58592,58596,58604,58616,58624,58634,58652,58668,58681,58689,58693,58701,58709,58713],{"__ignoreMap":14},[94,58503,58504,58506,58508,58510],{"class":96,"line":97},[94,58505,51274],{"class":104},[94,58507,51278],{"class":51277},[94,58509,51281],{"class":1944},[94,58511,51284],{"class":104},[94,58513,58514,58516,58518,58520,58522,58524],{"class":96,"line":15},[94,58515,1015],{"class":104},[94,58517,50612],{"class":51277},[94,58519,51293],{"class":1944},[94,58521,150],{"class":104},[94,58523,51298],{"class":209},[94,58525,51284],{"class":104},[94,58527,58528],{"class":96,"line":1160},[94,58529,2381],{"emptyLinePlaceholder":20},[94,58531,58532,58534,58536],{"class":96,"line":1175},[94,58533,1015],{"class":104},[94,58535,51311],{"class":51277},[94,58537,51284],{"class":104},[94,58539,58540,58542,58544,58546,58548,58550],{"class":96,"line":1181},[94,58541,52121],{"class":104},[94,58543,51321],{"class":51277},[94,58545,51324],{"class":1944},[94,58547,150],{"class":104},[94,58549,51329],{"class":209},[94,58551,51284],{"class":104},[94,58553,58554,58556,58558,58560,58562,58564,58566,58568,58570],{"class":96,"line":1195},[94,58555,52121],{"class":104},[94,58557,51321],{"class":51277},[94,58559,14902],{"class":1944},[94,58561,150],{"class":104},[94,58563,51368],{"class":209},[94,58565,51348],{"class":1944},[94,58567,150],{"class":104},[94,58569,51375],{"class":209},[94,58571,51284],{"class":104},[94,58573,58574,58576,58578,58580,58582],{"class":96,"line":1201},[94,58575,52121],{"class":104},[94,58577,51384],{"class":51277},[94,58579,51387],{"class":104},[94,58581,51384],{"class":51277},[94,58583,51284],{"class":104},[94,58585,58586,58588,58590],{"class":96,"line":1292},[94,58587,51762],{"class":104},[94,58589,51311],{"class":51277},[94,58591,51284],{"class":104},[94,58593,58594],{"class":96,"line":1298},[94,58595,2381],{"emptyLinePlaceholder":20},[94,58597,58598,58600,58602],{"class":96,"line":1310},[94,58599,1015],{"class":104},[94,58601,51777],{"class":51277},[94,58603,51284],{"class":104},[94,58605,58606,58608,58610,58612,58614],{"class":96,"line":1593},[94,58607,52121],{"class":104},[94,58609,53864],{"class":51277},[94,58611,53870],{"class":104},[94,58613,53864],{"class":51277},[94,58615,51284],{"class":104},[94,58617,58618,58620,58622],{"class":96,"line":1598},[94,58619,52121],{"class":104},[94,58621,51790],{"class":51277},[94,58623,51284],{"class":104},[94,58625,58626,58628,58630,58632],{"class":96,"line":1604},[94,58627,11203],{"class":100},[94,58629,2221],{"class":153},[94,58631,13546],{"class":100},[94,58633,58405],{"class":153},[94,58635,58636,58638,58640,58642,58644,58646,58648,58650],{"class":96,"line":1609},[94,58637,11203],{"class":100},[94,58639,54368],{"class":153},[94,58641,13546],{"class":100},[94,58643,54373],{"class":104},[94,58645,54376],{"class":1944},[94,58647,105],{"class":104},[94,58649,58181],{"class":209},[94,58651,111],{"class":104},[94,58653,58654,58656,58658,58660,58662,58664,58666],{"class":96,"line":1623},[94,58655,58188],{"class":104},[94,58657,57790],{"class":1944},[94,58659,105],{"class":104},[94,58661,57795],{"class":209},[94,58663,12417],{"class":104},[94,58665,54426],{"class":100},[94,58667,54429],{"class":104},[94,58669,58670,58673,58675,58677,58679],{"class":96,"line":1628},[94,58671,58672],{"class":104},"      num ",[94,58674,150],{"class":100},[94,58676,58212],{"class":104},[94,58678,57837],{"class":1944},[94,58680,1957],{"class":104},[94,58682,58683,58685,58687],{"class":96,"line":1634},[94,58684,58221],{"class":104},[94,58686,58224],{"class":1944},[94,58688,118],{"class":104},[94,58690,58691],{"class":96,"line":1655},[94,58692,33444],{"class":104},[94,58694,58695,58697,58699],{"class":96,"line":1660},[94,58696,52394],{"class":104},[94,58698,51790],{"class":51277},[94,58700,51284],{"class":104},[94,58702,58703,58705,58707],{"class":96,"line":1674},[94,58704,51762],{"class":104},[94,58706,51777],{"class":51277},[94,58708,51284],{"class":104},[94,58710,58711],{"class":96,"line":1679},[94,58712,2381],{"emptyLinePlaceholder":20},[94,58714,58715,58717,58719],{"class":96,"line":1708},[94,58716,51762],{"class":104},[94,58718,50612],{"class":51277},[94,58720,51284],{"class":104},[40,58722,58723],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[65,58725,58727],{"id":58726},"_324-事件监听版本","3.2.4 事件监听版本",[40,58729,58730],{},[1443,58731],{"alt":14,"src":58732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[40,58734,58735],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[40,58737,58738],{},"这种方式会覆盖前边的事件监听:",[85,58740,58742],{"className":50610,"code":58741,"language":50612,"meta":14,"style":14},"\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",[91,58743,58744,58754,58768,58772,58780,58794,58814,58826,58834,58838,58846,58858,58866,58884,58898,58909,58913,58925,58935,58939,58947,58955,58959],{"__ignoreMap":14},[94,58745,58746,58748,58750,58752],{"class":96,"line":97},[94,58747,51274],{"class":104},[94,58749,51278],{"class":51277},[94,58751,51281],{"class":1944},[94,58753,51284],{"class":104},[94,58755,58756,58758,58760,58762,58764,58766],{"class":96,"line":15},[94,58757,1015],{"class":104},[94,58759,50612],{"class":51277},[94,58761,51293],{"class":1944},[94,58763,150],{"class":104},[94,58765,51298],{"class":209},[94,58767,51284],{"class":104},[94,58769,58770],{"class":96,"line":1160},[94,58771,2381],{"emptyLinePlaceholder":20},[94,58773,58774,58776,58778],{"class":96,"line":1175},[94,58775,1015],{"class":104},[94,58777,51311],{"class":51277},[94,58779,51284],{"class":104},[94,58781,58782,58784,58786,58788,58790,58792],{"class":96,"line":1181},[94,58783,52121],{"class":104},[94,58785,51321],{"class":51277},[94,58787,51324],{"class":1944},[94,58789,150],{"class":104},[94,58791,51329],{"class":209},[94,58793,51284],{"class":104},[94,58795,58796,58798,58800,58802,58804,58806,58808,58810,58812],{"class":96,"line":1195},[94,58797,52121],{"class":104},[94,58799,51321],{"class":51277},[94,58801,14902],{"class":1944},[94,58803,150],{"class":104},[94,58805,51368],{"class":209},[94,58807,51348],{"class":1944},[94,58809,150],{"class":104},[94,58811,51375],{"class":209},[94,58813,51284],{"class":104},[94,58815,58816,58818,58820,58822,58824],{"class":96,"line":1201},[94,58817,52121],{"class":104},[94,58819,51384],{"class":51277},[94,58821,51387],{"class":104},[94,58823,51384],{"class":51277},[94,58825,51284],{"class":104},[94,58827,58828,58830,58832],{"class":96,"line":1292},[94,58829,51762],{"class":104},[94,58831,51311],{"class":51277},[94,58833,51284],{"class":104},[94,58835,58836],{"class":96,"line":1298},[94,58837,2381],{"emptyLinePlaceholder":20},[94,58839,58840,58842,58844],{"class":96,"line":1310},[94,58841,1015],{"class":104},[94,58843,51777],{"class":51277},[94,58845,51284],{"class":104},[94,58847,58848,58850,58852,58854,58856],{"class":96,"line":1593},[94,58849,52121],{"class":104},[94,58851,53864],{"class":51277},[94,58853,53870],{"class":104},[94,58855,53864],{"class":51277},[94,58857,51284],{"class":104},[94,58859,58860,58862,58864],{"class":96,"line":1598},[94,58861,52121],{"class":104},[94,58863,51790],{"class":51277},[94,58865,51284],{"class":104},[94,58867,58868,58870,58872,58874,58876,58878,58880,58882],{"class":96,"line":1604},[94,58869,11203],{"class":100},[94,58871,54368],{"class":153},[94,58873,13546],{"class":100},[94,58875,54373],{"class":104},[94,58877,54376],{"class":1944},[94,58879,105],{"class":104},[94,58881,58181],{"class":209},[94,58883,111],{"class":104},[94,58885,58886,58888,58891,58893,58896],{"class":96,"line":1609},[94,58887,58188],{"class":104},[94,58889,58890],{"class":1944},"onclick",[94,58892,13546],{"class":100},[94,58894,58895],{"class":100}," function",[94,58897,54429],{"class":104},[94,58899,58900,58903,58905,58907],{"class":96,"line":1623},[94,58901,58902],{"class":1944},"      alert",[94,58904,105],{"class":104},[94,58906,577],{"class":153},[94,58908,111],{"class":104},[94,58910,58911],{"class":96,"line":1628},[94,58912,2168],{"class":104},[94,58914,58915,58917,58919,58921,58923],{"class":96,"line":1634},[94,58916,58188],{"class":104},[94,58918,58890],{"class":1944},[94,58920,13546],{"class":100},[94,58922,58895],{"class":100},[94,58924,54429],{"class":104},[94,58926,58927,58929,58931,58933],{"class":96,"line":1655},[94,58928,58902],{"class":1944},[94,58930,105],{"class":104},[94,58932,855],{"class":153},[94,58934,111],{"class":104},[94,58936,58937],{"class":96,"line":1660},[94,58938,2168],{"class":104},[94,58940,58941,58943,58945],{"class":96,"line":1674},[94,58942,52394],{"class":104},[94,58944,51790],{"class":51277},[94,58946,51284],{"class":104},[94,58948,58949,58951,58953],{"class":96,"line":1679},[94,58950,51762],{"class":104},[94,58952,51777],{"class":51277},[94,58954,51284],{"class":104},[94,58956,58957],{"class":96,"line":1708},[94,58958,2381],{"emptyLinePlaceholder":20},[94,58960,58961,58963,58965],{"class":96,"line":1713},[94,58962,51762],{"class":104},[94,58964,50612],{"class":51277},[94,58966,51284],{"class":104},[40,58968,58969],{},"只要点击就输出结果为22,前边11被覆盖了",[85,58971,58973],{"className":50610,"code":58972,"language":50612,"meta":14,"style":14},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[91,58974,58975,58980,58985,58989,58994,58999],{"__ignoreMap":14},[94,58976,58977],{"class":96,"line":97},[94,58978,58979],{"class":104},"  btn.addEventListener('click', function () {\n",[94,58981,58982],{"class":96,"line":15},[94,58983,58984],{"class":104},"      alert(11)\n",[94,58986,58987],{"class":96,"line":1160},[94,58988,33444],{"class":104},[94,58990,58991],{"class":96,"line":1175},[94,58992,58993],{"class":104},"    btn.addEventListener('click', function () {\n",[94,58995,58996],{"class":96,"line":1181},[94,58997,58998],{"class":104},"      alert(22)\n",[94,59000,59001],{"class":96,"line":1195},[94,59002,33444],{"class":104},[40,59004,59005],{},"点击第一次输出11,第二次点击为22",[65,59007,59009],{"id":59008},"_325-事件类型","3.2.5 事件类型",[40,59011,59012],{},[1443,59013],{"alt":14,"src":59014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[21980,59016,59018],{"id":59017},"_3251-鼠标事件","3.2.5.1 鼠标事件",[40,59020,59021],{},"补充知识:",[40,59023,59024],{},"轮播图自动播放模块,可以使用",[40,59026,59027],{},"let timerId = setInterval(function () {",[40,59029,59030],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[40,59032,59033],{},"用js方法模拟进行点击事件,click必须加()",[40,59035,59036],{},"next.click()",[40,59038,59039],{},"}, 1000)",[40,59041,59042],{},[1443,59043],{"alt":14,"src":59044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[85,59046,59048],{"className":53044,"code":59047,"language":53046,"meta":14,"style":14},"\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",[91,59049,59050,59054,59064,59078,59082,59090,59105,59125,59145,59158,59166,59171,59176,59180,59184,59189,59194,59199,59204,59208,59212,59217,59222,59227,59231,59235,59240,59244,59249,59254,59258,59262,59267,59272,59277,59282,59287,59291,59295,59300,59305,59310,59315,59320,59324,59328,59333,59338,59343,59348,59353,59358,59363,59368,59373,59378,59382,59386,59391,59396,59400,59404,59409,59414,59418,59423,59428,59432,59436,59441,59445,59450,59455,59459,59464,59468,59472,59477,59482,59487,59492,59497,59502,59507,59511,59515,59519,59524,59529,59534,59539,59543,59551,59559,59563,59571,59586,59600,59621,59629,59643,59656,59671,59690,59702,59714,59726,59738,59750,59762,59774,59782,59797,59821,59845,59853,59861,59869,59877,59882,59887,59892,59897,59902,59907,59912,59917,59922,59927,59931,59936,59941,59946,59951,59956,59961,59966,59971,59976,59980,59985,59990,59995,60000,60005,60010,60015,60020,60025,60030,60035,60040,60044,60048,60053,60058,60063,60067,60072,60077,60082,60087,60092,60096,60101,60105,60109,60113,60117,60121,60125,60130,60135,60140,60145,60150,60155,60160,60165,60170,60174,60178,60183,60188,60193,60198,60203,60207,60212,60217,60222,60227,60232,60237,60241,60245,60250,60254,60259,60263,60268,60273,60278,60283,60288,60293,60297,60305,60313,60317],{"__ignoreMap":14},[94,59051,59052],{"class":96,"line":97},[94,59053,2381],{"emptyLinePlaceholder":20},[94,59055,59056,59058,59060,59062],{"class":96,"line":15},[94,59057,51274],{"class":104},[94,59059,51278],{"class":100},[94,59061,51281],{"class":153},[94,59063,51284],{"class":104},[94,59065,59066,59068,59070,59072,59074,59076],{"class":96,"line":1160},[94,59067,1015],{"class":104},[94,59069,50612],{"class":51277},[94,59071,51293],{"class":1944},[94,59073,150],{"class":104},[94,59075,51298],{"class":209},[94,59077,51284],{"class":104},[94,59079,59080],{"class":96,"line":1175},[94,59081,2381],{"emptyLinePlaceholder":20},[94,59083,59084,59086,59088],{"class":96,"line":1181},[94,59085,1015],{"class":104},[94,59087,51311],{"class":51277},[94,59089,51284],{"class":104},[94,59091,59092,59094,59096,59098,59100,59102],{"class":96,"line":1195},[94,59093,52121],{"class":104},[94,59095,51321],{"class":51277},[94,59097,51324],{"class":1944},[94,59099,150],{"class":104},[94,59101,51329],{"class":209},[94,59103,59104],{"class":104}," \u002F>\n",[94,59106,59107,59109,59111,59113,59115,59117,59119,59121,59123],{"class":96,"line":1201},[94,59108,52121],{"class":104},[94,59110,51321],{"class":51277},[94,59112,51340],{"class":1944},[94,59114,150],{"class":104},[94,59116,51345],{"class":209},[94,59118,51348],{"class":1944},[94,59120,150],{"class":104},[94,59122,51353],{"class":209},[94,59124,59104],{"class":104},[94,59126,59127,59129,59131,59133,59135,59137,59139,59141,59143],{"class":96,"line":1292},[94,59128,52121],{"class":104},[94,59130,51321],{"class":51277},[94,59132,14902],{"class":1944},[94,59134,150],{"class":104},[94,59136,51368],{"class":209},[94,59138,51348],{"class":1944},[94,59140,150],{"class":104},[94,59142,51375],{"class":209},[94,59144,59104],{"class":104},[94,59146,59147,59149,59151,59154,59156],{"class":96,"line":1298},[94,59148,52121],{"class":104},[94,59150,51384],{"class":51277},[94,59152,59153],{"class":104},">轮播图点击切换\u003C\u002F",[94,59155,51384],{"class":51277},[94,59157,51284],{"class":104},[94,59159,59160,59162,59164],{"class":96,"line":1310},[94,59161,52121],{"class":104},[94,59163,5108],{"class":51277},[94,59165,51284],{"class":104},[94,59167,59168],{"class":96,"line":1593},[94,59169,59170],{"class":104},"    * {\n",[94,59172,59173],{"class":96,"line":1598},[94,59174,59175],{"class":104},"      box-sizing: border-box;\n",[94,59177,59178],{"class":96,"line":1604},[94,59179,2168],{"class":104},[94,59181,59182],{"class":96,"line":1609},[94,59183,2381],{"emptyLinePlaceholder":20},[94,59185,59186],{"class":96,"line":1623},[94,59187,59188],{"class":104},"    .slider {\n",[94,59190,59191],{"class":96,"line":1628},[94,59192,59193],{"class":104},"      width: 560px;\n",[94,59195,59196],{"class":96,"line":1634},[94,59197,59198],{"class":104},"      height: 400px;\n",[94,59200,59201],{"class":96,"line":1655},[94,59202,59203],{"class":104},"      overflow: hidden;\n",[94,59205,59206],{"class":96,"line":1660},[94,59207,2168],{"class":104},[94,59209,59210],{"class":96,"line":1674},[94,59211,2381],{"emptyLinePlaceholder":20},[94,59213,59214],{"class":96,"line":1679},[94,59215,59216],{"class":104},"    .slider-wrapper {\n",[94,59218,59219],{"class":96,"line":1708},[94,59220,59221],{"class":104},"      width: 100%;\n",[94,59223,59224],{"class":96,"line":1713},[94,59225,59226],{"class":104},"      height: 320px;\n",[94,59228,59229],{"class":96,"line":1730},[94,59230,2168],{"class":104},[94,59232,59233],{"class":96,"line":1735},[94,59234,2381],{"emptyLinePlaceholder":20},[94,59236,59237],{"class":96,"line":1740},[94,59238,59239],{"class":104},"    .slider-wrapper img {\n",[94,59241,59242],{"class":96,"line":1745},[94,59243,59221],{"class":104},[94,59245,59246],{"class":96,"line":1759},[94,59247,59248],{"class":104},"      height: 100%;\n",[94,59250,59251],{"class":96,"line":1764},[94,59252,59253],{"class":104},"      display: block;\n",[94,59255,59256],{"class":96,"line":2558},[94,59257,2168],{"class":104},[94,59259,59260],{"class":96,"line":2572},[94,59261,2381],{"emptyLinePlaceholder":20},[94,59263,59264],{"class":96,"line":2580},[94,59265,59266],{"class":104},"    .slider-footer {\n",[94,59268,59269],{"class":96,"line":2585},[94,59270,59271],{"class":104},"      height: 80px;\n",[94,59273,59274],{"class":96,"line":2591},[94,59275,59276],{"class":104},"      background-color: rgb(100, 67, 68);\n",[94,59278,59279],{"class":96,"line":2597},[94,59280,59281],{"class":104},"      padding: 12px 12px 0 12px;\n",[94,59283,59284],{"class":96,"line":2602},[94,59285,59286],{"class":104},"      position: relative;\n",[94,59288,59289],{"class":96,"line":7930},[94,59290,2168],{"class":104},[94,59292,59293],{"class":96,"line":7954},[94,59294,2381],{"emptyLinePlaceholder":20},[94,59296,59297],{"class":96,"line":7959},[94,59298,59299],{"class":104},"    .slider-footer .toggle {\n",[94,59301,59302],{"class":96,"line":7965},[94,59303,59304],{"class":104},"      position: absolute;\n",[94,59306,59307],{"class":96,"line":7992},[94,59308,59309],{"class":104},"      right: 0;\n",[94,59311,59312],{"class":96,"line":7997},[94,59313,59314],{"class":104},"      top: 12px;\n",[94,59316,59317],{"class":96,"line":8003},[94,59318,59319],{"class":104},"      display: flex;\n",[94,59321,59322],{"class":96,"line":8015},[94,59323,2168],{"class":104},[94,59325,59326],{"class":96,"line":8027},[94,59327,2381],{"emptyLinePlaceholder":20},[94,59329,59330],{"class":96,"line":8039},[94,59331,59332],{"class":104},"    .slider-footer .toggle button {\n",[94,59334,59335],{"class":96,"line":9698},[94,59336,59337],{"class":104},"      margin-right: 12px;\n",[94,59339,59340],{"class":96,"line":9723},[94,59341,59342],{"class":104},"      width: 28px;\n",[94,59344,59345],{"class":96,"line":9746},[94,59346,59347],{"class":104},"      height: 28px;\n",[94,59349,59350],{"class":96,"line":9770},[94,59351,59352],{"class":104},"      appearance: none;\n",[94,59354,59355],{"class":96,"line":9775},[94,59356,59357],{"class":104},"      border: none;\n",[94,59359,59360],{"class":96,"line":9780},[94,59361,59362],{"class":104},"      background: rgba(255, 255, 255, 0.1);\n",[94,59364,59365],{"class":96,"line":9785},[94,59366,59367],{"class":104},"      color: #fff;\n",[94,59369,59370],{"class":96,"line":9794},[94,59371,59372],{"class":104},"      border-radius: 4px;\n",[94,59374,59375],{"class":96,"line":9799},[94,59376,59377],{"class":104},"      cursor: pointer;\n",[94,59379,59380],{"class":96,"line":9805},[94,59381,2168],{"class":104},[94,59383,59384],{"class":96,"line":9826},[94,59385,2381],{"emptyLinePlaceholder":20},[94,59387,59388],{"class":96,"line":9832},[94,59389,59390],{"class":104},"    .slider-footer .toggle button:hover {\n",[94,59392,59393],{"class":96,"line":9846},[94,59394,59395],{"class":104},"      background: rgba(255, 255, 255, 0.2);\n",[94,59397,59398],{"class":96,"line":9852},[94,59399,2168],{"class":104},[94,59401,59402],{"class":96,"line":9879},[94,59403,2381],{"emptyLinePlaceholder":20},[94,59405,59406],{"class":96,"line":9888},[94,59407,59408],{"class":104},"    .slider-footer p {\n",[94,59410,59411],{"class":96,"line":9894},[94,59412,59413],{"class":104},"      margin: 0;\n",[94,59415,59416],{"class":96,"line":9902},[94,59417,59367],{"class":104},[94,59419,59420],{"class":96,"line":9907},[94,59421,59422],{"class":104},"      font-size: 18px;\n",[94,59424,59425],{"class":96,"line":16586},[94,59426,59427],{"class":104},"      margin-bottom: 10px;\n",[94,59429,59430],{"class":96,"line":16592},[94,59431,2168],{"class":104},[94,59433,59434],{"class":96,"line":16615},[94,59435,2381],{"emptyLinePlaceholder":20},[94,59437,59438],{"class":96,"line":16621},[94,59439,59440],{"class":104},"    .slider-indicator {\n",[94,59442,59443],{"class":96,"line":16644},[94,59444,59413],{"class":104},[94,59446,59447],{"class":96,"line":16658},[94,59448,59449],{"class":104},"      padding: 0;\n",[94,59451,59452],{"class":96,"line":16678},[94,59453,59454],{"class":104},"      list-style: none;\n",[94,59456,59457],{"class":96,"line":16684},[94,59458,59319],{"class":104},[94,59460,59461],{"class":96,"line":16695},[94,59462,59463],{"class":104},"      align-items: center;\n",[94,59465,59466],{"class":96,"line":16718},[94,59467,2168],{"class":104},[94,59469,59470],{"class":96,"line":16740},[94,59471,2381],{"emptyLinePlaceholder":20},[94,59473,59474],{"class":96,"line":16745},[94,59475,59476],{"class":104},"    .slider-indicator li {\n",[94,59478,59479],{"class":96,"line":16751},[94,59480,59481],{"class":104},"      width: 8px;\n",[94,59483,59484],{"class":96,"line":16765},[94,59485,59486],{"class":104},"      height: 8px;\n",[94,59488,59489],{"class":96,"line":16778},[94,59490,59491],{"class":104},"      margin: 4px;\n",[94,59493,59494],{"class":96,"line":16783},[94,59495,59496],{"class":104},"      border-radius: 50%;\n",[94,59498,59499],{"class":96,"line":16797},[94,59500,59501],{"class":104},"      background: #fff;\n",[94,59503,59504],{"class":96,"line":16802},[94,59505,59506],{"class":104},"      opacity: 0.4;\n",[94,59508,59509],{"class":96,"line":16808},[94,59510,59377],{"class":104},[94,59512,59513],{"class":96,"line":16813},[94,59514,2168],{"class":104},[94,59516,59517],{"class":96,"line":16827},[94,59518,2381],{"emptyLinePlaceholder":20},[94,59520,59521],{"class":96,"line":16832},[94,59522,59523],{"class":104},"    .slider-indicator li.active {\n",[94,59525,59526],{"class":96,"line":16837},[94,59527,59528],{"class":104},"      width: 12px;\n",[94,59530,59531],{"class":96,"line":16851},[94,59532,59533],{"class":104},"      height: 12px;\n",[94,59535,59536],{"class":96,"line":16863},[94,59537,59538],{"class":104},"      opacity: 1;\n",[94,59540,59541],{"class":96,"line":16868},[94,59542,2168],{"class":104},[94,59544,59545,59547,59549],{"class":96,"line":16881},[94,59546,52394],{"class":104},[94,59548,5108],{"class":51277},[94,59550,51284],{"class":104},[94,59552,59553,59555,59557],{"class":96,"line":16886},[94,59554,51762],{"class":104},[94,59556,51311],{"class":51277},[94,59558,51284],{"class":104},[94,59560,59561],{"class":96,"line":16891},[94,59562,2381],{"emptyLinePlaceholder":20},[94,59564,59565,59567,59569],{"class":96,"line":16896},[94,59566,1015],{"class":104},[94,59568,51777],{"class":51277},[94,59570,51284],{"class":104},[94,59572,59573,59575,59577,59579,59581,59584],{"class":96,"line":16909},[94,59574,52121],{"class":104},[94,59576,51588],{"class":51277},[94,59578,53463],{"class":1944},[94,59580,150],{"class":104},[94,59582,59583],{"class":209},"\"slider\"",[94,59585,51284],{"class":104},[94,59587,59588,59590,59592,59594,59596,59598],{"class":96,"line":16914},[94,59589,51318],{"class":104},[94,59591,51588],{"class":51277},[94,59593,53463],{"class":1944},[94,59595,150],{"class":104},[94,59597,55204],{"class":209},[94,59599,51284],{"class":104},[94,59601,59602,59604,59606,59608,59610,59613,59615,59617,59619],{"class":96,"line":32616},[94,59603,55211],{"class":104},[94,59605,1443],{"class":51277},[94,59607,55216],{"class":1944},[94,59609,150],{"class":104},[94,59611,59612],{"class":209},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[94,59614,55224],{"class":1944},[94,59616,150],{"class":104},[94,59618,7634],{"class":209},[94,59620,59104],{"class":104},[94,59622,59623,59625,59627],{"class":96,"line":32622},[94,59624,51753],{"class":104},[94,59626,51588],{"class":51277},[94,59628,51284],{"class":104},[94,59630,59631,59633,59635,59637,59639,59641],{"class":96,"line":32628},[94,59632,51318],{"class":104},[94,59634,51588],{"class":51277},[94,59636,53463],{"class":1944},[94,59638,150],{"class":104},[94,59640,55251],{"class":209},[94,59642,51284],{"class":104},[94,59644,59645,59647,59649,59652,59654],{"class":96,"line":32634},[94,59646,55211],{"class":104},[94,59648,40],{"class":51277},[94,59650,59651],{"class":104},">对人类来说会不会太超前了？\u003C\u002F",[94,59653,40],{"class":51277},[94,59655,51284],{"class":104},[94,59657,59658,59660,59662,59664,59666,59669],{"class":96,"line":32640},[94,59659,55211],{"class":104},[94,59661,1112],{"class":51277},[94,59663,53463],{"class":1944},[94,59665,150],{"class":104},[94,59667,59668],{"class":209},"\"slider-indicator\"",[94,59670,51284],{"class":104},[94,59672,59673,59675,59677,59679,59681,59684,59686,59688],{"class":96,"line":32651},[94,59674,55279],{"class":104},[94,59676,51],{"class":51277},[94,59678,53463],{"class":1944},[94,59680,150],{"class":104},[94,59682,59683],{"class":209},"\"active\"",[94,59685,55291],{"class":104},[94,59687,51],{"class":51277},[94,59689,51284],{"class":104},[94,59691,59692,59694,59696,59698,59700],{"class":96,"line":32657},[94,59693,55279],{"class":104},[94,59695,51],{"class":51277},[94,59697,55291],{"class":104},[94,59699,51],{"class":51277},[94,59701,51284],{"class":104},[94,59703,59704,59706,59708,59710,59712],{"class":96,"line":32677},[94,59705,55279],{"class":104},[94,59707,51],{"class":51277},[94,59709,55291],{"class":104},[94,59711,51],{"class":51277},[94,59713,51284],{"class":104},[94,59715,59716,59718,59720,59722,59724],{"class":96,"line":32683},[94,59717,55279],{"class":104},[94,59719,51],{"class":51277},[94,59721,55291],{"class":104},[94,59723,51],{"class":51277},[94,59725,51284],{"class":104},[94,59727,59728,59730,59732,59734,59736],{"class":96,"line":32694},[94,59729,55279],{"class":104},[94,59731,51],{"class":51277},[94,59733,55291],{"class":104},[94,59735,51],{"class":51277},[94,59737,51284],{"class":104},[94,59739,59740,59742,59744,59746,59748],{"class":96,"line":32700},[94,59741,55279],{"class":104},[94,59743,51],{"class":51277},[94,59745,55291],{"class":104},[94,59747,51],{"class":51277},[94,59749,51284],{"class":104},[94,59751,59752,59754,59756,59758,59760],{"class":96,"line":32706},[94,59753,55279],{"class":104},[94,59755,51],{"class":51277},[94,59757,55291],{"class":104},[94,59759,51],{"class":51277},[94,59761,51284],{"class":104},[94,59763,59764,59766,59768,59770,59772],{"class":96,"line":32712},[94,59765,55279],{"class":104},[94,59767,51],{"class":51277},[94,59769,55291],{"class":104},[94,59771,51],{"class":51277},[94,59773,51284],{"class":104},[94,59775,59776,59778,59780],{"class":96,"line":32718},[94,59777,55384],{"class":104},[94,59779,1112],{"class":51277},[94,59781,51284],{"class":104},[94,59783,59784,59786,59788,59790,59792,59795],{"class":96,"line":32724},[94,59785,55211],{"class":104},[94,59787,51588],{"class":51277},[94,59789,53463],{"class":1944},[94,59791,150],{"class":104},[94,59793,59794],{"class":209},"\"toggle\"",[94,59796,51284],{"class":104},[94,59798,59799,59801,59803,59805,59807,59810,59812,59815,59817,59819],{"class":96,"line":32730},[94,59800,55279],{"class":104},[94,59802,53864],{"class":51277},[94,59804,53463],{"class":1944},[94,59806,150],{"class":104},[94,59808,59809],{"class":209},"\"prev\"",[94,59811,1065],{"class":104},[94,59813,59814],{"class":153},"&lt;",[94,59816,51762],{"class":104},[94,59818,53864],{"class":51277},[94,59820,51284],{"class":104},[94,59822,59823,59825,59827,59829,59831,59834,59836,59839,59841,59843],{"class":96,"line":32736},[94,59824,55279],{"class":104},[94,59826,53864],{"class":51277},[94,59828,53463],{"class":1944},[94,59830,150],{"class":104},[94,59832,59833],{"class":209},"\"next\"",[94,59835,1065],{"class":104},[94,59837,59838],{"class":153},"&gt;",[94,59840,51762],{"class":104},[94,59842,53864],{"class":51277},[94,59844,51284],{"class":104},[94,59846,59847,59849,59851],{"class":96,"line":32756},[94,59848,55384],{"class":104},[94,59850,51588],{"class":51277},[94,59852,51284],{"class":104},[94,59854,59855,59857,59859],{"class":96,"line":32762},[94,59856,51753],{"class":104},[94,59858,51588],{"class":51277},[94,59860,51284],{"class":104},[94,59862,59863,59865,59867],{"class":96,"line":32778},[94,59864,52394],{"class":104},[94,59866,51588],{"class":51277},[94,59868,51284],{"class":104},[94,59870,59871,59873,59875],{"class":96,"line":32784},[94,59872,52121],{"class":104},[94,59874,51790],{"class":51277},[94,59876,51284],{"class":104},[94,59878,59879],{"class":96,"line":32798},[94,59880,59881],{"class":104},"    \u002F\u002F 1. 初始数据\n",[94,59883,59884],{"class":96,"line":32804},[94,59885,59886],{"class":104},"    const data = [\n",[94,59888,59889],{"class":96,"line":32819},[94,59890,59891],{"class":104},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[94,59893,59894],{"class":96,"line":32825},[94,59895,59896],{"class":104},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[94,59898,59899],{"class":96,"line":32834},[94,59900,59901],{"class":104},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[94,59903,59904],{"class":96,"line":32840},[94,59905,59906],{"class":104},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[94,59908,59909],{"class":96,"line":32849},[94,59910,59911],{"class":104},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[94,59913,59914],{"class":96,"line":32855},[94,59915,59916],{"class":104},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[94,59918,59919],{"class":96,"line":32861},[94,59920,59921],{"class":104},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[94,59923,59924],{"class":96,"line":32870},[94,59925,59926],{"class":104},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[94,59928,59929],{"class":96,"line":32876},[94,59930,53086],{"class":104},[94,59932,59933],{"class":96,"line":32887},[94,59934,59935],{"class":104},"    \u002F\u002F 获取元素\n",[94,59937,59938],{"class":96,"line":32893},[94,59939,59940],{"class":104},"    const img = document.querySelector('.slider-wrapper img')\n",[94,59942,59943],{"class":96,"line":32912},[94,59944,59945],{"class":104},"    const p = document.querySelector('.slider-footer p')\n",[94,59947,59948],{"class":96,"line":32918},[94,59949,59950],{"class":104},"    const footer = document.querySelector('.slider-footer')\n",[94,59952,59953],{"class":96,"line":32929},[94,59954,59955],{"class":104},"    \u002F\u002F 1. 右按钮业务\n",[94,59957,59958],{"class":96,"line":32935},[94,59959,59960],{"class":104},"    \u002F\u002F 1.1 获取右侧按钮 \n",[94,59962,59963],{"class":96,"line":32955},[94,59964,59965],{"class":104},"    const next = document.querySelector('.next')\n",[94,59967,59968],{"class":96,"line":32971},[94,59969,59970],{"class":104},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[94,59972,59973],{"class":96,"line":32977},[94,59974,59975],{"class":104},"    \u002F\u002F 1.2 注册点击事件\n",[94,59977,59978],{"class":96,"line":32991},[94,59979,2381],{"emptyLinePlaceholder":20},[94,59981,59982],{"class":96,"line":32997},[94,59983,59984],{"class":104},"    next.addEventListener('click', function () {\n",[94,59986,59987],{"class":96,"line":33003},[94,59988,59989],{"class":104},"      \u002F\u002F console.log(11)\n",[94,59991,59992],{"class":96,"line":33014},[94,59993,59994],{"class":104},"      i++\n",[94,59996,59997],{"class":96,"line":33020},[94,59998,59999],{"class":104},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[94,60001,60002],{"class":96,"line":33026},[94,60003,60004],{"class":104},"      \u002F\u002F if (i >= 8) {\n",[94,60006,60007],{"class":96,"line":33036},[94,60008,60009],{"class":104},"      \u002F\u002F   i = 0\n",[94,60011,60012],{"class":96,"line":33042},[94,60013,60014],{"class":104},"      \u002F\u002F }\n",[94,60016,60017],{"class":96,"line":33053},[94,60018,60019],{"class":104},"      i = i >= data.length ? 0 : i\n",[94,60021,60022],{"class":96,"line":33059},[94,60023,60024],{"class":104},"      \u002F\u002F 1.3 得到对应的对象\n",[94,60026,60027],{"class":96,"line":33069},[94,60028,60029],{"class":104},"      \u002F\u002F console.log(data[i])\n",[94,60031,60032],{"class":96,"line":33074},[94,60033,60034],{"class":104},"      \u002F\u002F 调用函数\n",[94,60036,60037],{"class":96,"line":33080},[94,60038,60039],{"class":104},"      toggle()\n",[94,60041,60042],{"class":96,"line":33129},[94,60043,33444],{"class":104},[94,60045,60046],{"class":96,"line":33176},[94,60047,2381],{"emptyLinePlaceholder":20},[94,60049,60050],{"class":96,"line":33181},[94,60051,60052],{"class":104},"    \u002F\u002F 2. 左侧按钮业务\n",[94,60054,60055],{"class":96,"line":33187},[94,60056,60057],{"class":104},"    \u002F\u002F 2.1 获取左侧按钮 \n",[94,60059,60060],{"class":96,"line":33206},[94,60061,60062],{"class":104},"    const prev = document.querySelector('.prev')\n",[94,60064,60065],{"class":96,"line":33212},[94,60066,59975],{"class":104},[94,60068,60069],{"class":96,"line":33232},[94,60070,60071],{"class":104},"    prev.addEventListener('click', function () {\n",[94,60073,60074],{"class":96,"line":33238},[94,60075,60076],{"class":104},"      i--\n",[94,60078,60079],{"class":96,"line":33244},[94,60080,60081],{"class":104},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[94,60083,60084],{"class":96,"line":33254},[94,60085,60086],{"class":104},"      \u002F\u002F if (i \u003C 0) {\n",[94,60088,60089],{"class":96,"line":33259},[94,60090,60091],{"class":104},"      \u002F\u002F   i = 7\n",[94,60093,60094],{"class":96,"line":33265},[94,60095,60014],{"class":104},[94,60097,60098],{"class":96,"line":33281},[94,60099,60100],{"class":104},"      i = i \u003C 0 ? data.length - 1 : i\n",[94,60102,60103],{"class":96,"line":33326},[94,60104,60024],{"class":104},[94,60106,60107],{"class":96,"line":33332},[94,60108,60029],{"class":104},[94,60110,60111],{"class":96,"line":33338},[94,60112,60034],{"class":104},[94,60114,60115],{"class":96,"line":33344},[94,60116,60039],{"class":104},[94,60118,60119],{"class":96,"line":33355},[94,60120,33444],{"class":104},[94,60122,60123],{"class":96,"line":33361},[94,60124,2381],{"emptyLinePlaceholder":20},[94,60126,60127],{"class":96,"line":33367},[94,60128,60129],{"class":104},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[94,60131,60132],{"class":96,"line":33373},[94,60133,60134],{"class":104},"    function toggle() {\n",[94,60136,60137],{"class":96,"line":33391},[94,60138,60139],{"class":104},"      \u002F\u002F 1.4 渲染对应的数据\n",[94,60141,60142],{"class":96,"line":33405},[94,60143,60144],{"class":104},"      img.src = data[i].url\n",[94,60146,60147],{"class":96,"line":33414},[94,60148,60149],{"class":104},"      p.innerHTML = data[i].title\n",[94,60151,60152],{"class":96,"line":33423},[94,60153,60154],{"class":104},"      footer.style.backgroundColor = data[i].color\n",[94,60156,60157],{"class":96,"line":33432},[94,60158,60159],{"class":104},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[94,60161,60162],{"class":96,"line":33441},[94,60163,60164],{"class":104},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[94,60166,60167],{"class":96,"line":33447},[94,60168,60169],{"class":104},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[94,60171,60172],{"class":96,"line":33453},[94,60173,2168],{"class":104},[94,60175,60176],{"class":96,"line":33461},[94,60177,2381],{"emptyLinePlaceholder":20},[94,60179,60180],{"class":96,"line":33466},[94,60181,60182],{"class":104},"    \u002F\u002F 3. 自动播放模块\n",[94,60184,60185],{"class":96,"line":33472},[94,60186,60187],{"class":104},"    let timerId = setInterval(function () {\n",[94,60189,60190],{"class":96,"line":33483},[94,60191,60192],{"class":104},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[94,60194,60195],{"class":96,"line":33489},[94,60196,60197],{"class":104},"      next.click()\n",[94,60199,60200],{"class":96,"line":33509},[94,60201,60202],{"class":104},"    }, 1000)\n",[94,60204,60205],{"class":96,"line":33515},[94,60206,2381],{"emptyLinePlaceholder":20},[94,60208,60209],{"class":96,"line":33521},[94,60210,60211],{"class":104},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[94,60213,60214],{"class":96,"line":33527},[94,60215,60216],{"class":104},"    const slider = document.querySelector('.slider')\n",[94,60218,60219],{"class":96,"line":33544},[94,60220,60221],{"class":104},"    \u002F\u002F 注册事件\n",[94,60223,60224],{"class":96,"line":33550},[94,60225,60226],{"class":104},"    slider.addEventListener('mouseenter', function () {\n",[94,60228,60229],{"class":96,"line":33556},[94,60230,60231],{"class":104},"      \u002F\u002F 停止定时器\n",[94,60233,60234],{"class":96,"line":33562},[94,60235,60236],{"class":104},"      clearInterval(timerId)\n",[94,60238,60239],{"class":96,"line":33568},[94,60240,33444],{"class":104},[94,60242,60243],{"class":96,"line":33574},[94,60244,2381],{"emptyLinePlaceholder":20},[94,60246,60247],{"class":96,"line":33601},[94,60248,60249],{"class":104},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[94,60251,60252],{"class":96,"line":33625},[94,60253,60221],{"class":104},[94,60255,60256],{"class":96,"line":33631},[94,60257,60258],{"class":104},"    slider.addEventListener('mouseleave', function () {\n",[94,60260,60261],{"class":96,"line":33637},[94,60262,60231],{"class":104},[94,60264,60265],{"class":96,"line":33643},[94,60266,60267],{"class":104},"      if (timerId) clearInterval(timerId)\n",[94,60269,60270],{"class":96,"line":33654},[94,60271,60272],{"class":104},"      \u002F\u002F 开启定时器\n",[94,60274,60275],{"class":96,"line":33665},[94,60276,60277],{"class":104},"      timerId = setInterval(function () {\n",[94,60279,60280],{"class":96,"line":33671},[94,60281,60282],{"class":104},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[94,60284,60285],{"class":96,"line":33688},[94,60286,60287],{"class":104},"        next.click()\n",[94,60289,60290],{"class":96,"line":33711},[94,60291,60292],{"class":104},"      }, 1000)\n",[94,60294,60295],{"class":96,"line":33734},[94,60296,33444],{"class":104},[94,60298,60299,60301,60303],{"class":96,"line":33740},[94,60300,52394],{"class":104},[94,60302,51790],{"class":51277},[94,60304,51284],{"class":104},[94,60306,60307,60309,60311],{"class":96,"line":33745},[94,60308,51762],{"class":104},[94,60310,51777],{"class":51277},[94,60312,51284],{"class":104},[94,60314,60315],{"class":96,"line":33754},[94,60316,2381],{"emptyLinePlaceholder":20},[94,60318,60319,60321,60323],{"class":96,"line":33764},[94,60320,51762],{"class":104},[94,60322,50612],{"class":51277},[94,60324,51284],{"class":104},[21980,60326,60328],{"id":60327},"_3252-焦点事件","3.2.5.2 焦点事件",[40,60330,60331],{},"小米搜索框案例：",[85,60333,60335],{"className":50610,"code":60334,"language":50612,"meta":14,"style":14},"\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",[91,60336,60337,60347,60361,60365,60373,60387,60407,60427,60439,60447,60453,60463,60473,60485,60489,60493,60500,60504,60515,60519,60523,60530,60541,60554,60568,60572,60576,60585,60597,60609,60623,60636,60649,60667,60678,60682,60686,60695,60712,60716,60720,60727,60737,60747,60758,60771,60783,60799,60810,60822,60826,60830,60838,60849,60866,60878,60890,60901,60905,60909,60920,60931,60935,60943,60947,60955,60959,60967,60982,61005,61020,61051,61078,61105,61132,61159,61186,61213,61222,61230,61238,61243,61263,61283,61288,61293,61311,61316,61326,61331,61345,61350,61355,61372,61381,61393,61397,61405,61413,61417],{"__ignoreMap":14},[94,60338,60339,60341,60343,60345],{"class":96,"line":97},[94,60340,51274],{"class":104},[94,60342,51278],{"class":51277},[94,60344,51281],{"class":1944},[94,60346,51284],{"class":104},[94,60348,60349,60351,60353,60355,60357,60359],{"class":96,"line":15},[94,60350,1015],{"class":104},[94,60352,50612],{"class":51277},[94,60354,51293],{"class":1944},[94,60356,150],{"class":104},[94,60358,51298],{"class":209},[94,60360,51284],{"class":104},[94,60362,60363],{"class":96,"line":1160},[94,60364,2381],{"emptyLinePlaceholder":20},[94,60366,60367,60369,60371],{"class":96,"line":1175},[94,60368,1015],{"class":104},[94,60370,51311],{"class":51277},[94,60372,51284],{"class":104},[94,60374,60375,60377,60379,60381,60383,60385],{"class":96,"line":1181},[94,60376,51318],{"class":104},[94,60378,51321],{"class":51277},[94,60380,51324],{"class":1944},[94,60382,150],{"class":104},[94,60384,51329],{"class":209},[94,60386,51284],{"class":104},[94,60388,60389,60391,60393,60395,60397,60399,60401,60403,60405],{"class":96,"line":1195},[94,60390,51318],{"class":104},[94,60392,51321],{"class":51277},[94,60394,51340],{"class":1944},[94,60396,150],{"class":104},[94,60398,51345],{"class":209},[94,60400,51348],{"class":1944},[94,60402,150],{"class":104},[94,60404,51353],{"class":209},[94,60406,51284],{"class":104},[94,60408,60409,60411,60413,60415,60417,60419,60421,60423,60425],{"class":96,"line":1201},[94,60410,51318],{"class":104},[94,60412,51321],{"class":51277},[94,60414,14902],{"class":1944},[94,60416,150],{"class":104},[94,60418,51368],{"class":209},[94,60420,51348],{"class":1944},[94,60422,150],{"class":104},[94,60424,51375],{"class":209},[94,60426,51284],{"class":104},[94,60428,60429,60431,60433,60435,60437],{"class":96,"line":1292},[94,60430,51318],{"class":104},[94,60432,51384],{"class":51277},[94,60434,51387],{"class":104},[94,60436,51384],{"class":51277},[94,60438,51284],{"class":104},[94,60440,60441,60443,60445],{"class":96,"line":1298},[94,60442,51318],{"class":104},[94,60444,5108],{"class":51277},[94,60446,51284],{"class":104},[94,60448,60449,60451],{"class":96,"line":1310},[94,60450,51404],{"class":51277},[94,60452,15554],{"class":104},[94,60454,60455,60457,60459,60461],{"class":96,"line":1593},[94,60456,51411],{"class":153},[94,60458,51414],{"class":104},[94,60460,296],{"class":153},[94,60462,1271],{"class":104},[94,60464,60465,60467,60469,60471],{"class":96,"line":1598},[94,60466,51423],{"class":153},[94,60468,51414],{"class":104},[94,60470,296],{"class":153},[94,60472,1271],{"class":104},[94,60474,60475,60478,60480,60483],{"class":96,"line":1604},[94,60476,60477],{"class":153},"            box-sizing",[94,60479,51414],{"class":104},[94,60481,60482],{"class":153},"border-box",[94,60484,1271],{"class":104},[94,60486,60487],{"class":96,"line":1609},[94,60488,2510],{"class":104},[94,60490,60491],{"class":96,"line":1623},[94,60492,2381],{"emptyLinePlaceholder":20},[94,60494,60495,60498],{"class":96,"line":1628},[94,60496,60497],{"class":51277},"        ul",[94,60499,15554],{"class":104},[94,60501,60502],{"class":96,"line":1634},[94,60503,2381],{"emptyLinePlaceholder":20},[94,60505,60506,60509,60511,60513],{"class":96,"line":1655},[94,60507,60508],{"class":153},"            list-style",[94,60510,51414],{"class":104},[94,60512,54714],{"class":153},[94,60514,1271],{"class":104},[94,60516,60517],{"class":96,"line":1660},[94,60518,2510],{"class":104},[94,60520,60521],{"class":96,"line":1674},[94,60522,2381],{"emptyLinePlaceholder":20},[94,60524,60525,60528],{"class":96,"line":1679},[94,60526,60527],{"class":1944},"        .mi",[94,60529,15554],{"class":104},[94,60531,60532,60535,60537,60539],{"class":96,"line":1708},[94,60533,60534],{"class":153},"            position",[94,60536,51414],{"class":104},[94,60538,54741],{"class":153},[94,60540,1271],{"class":104},[94,60542,60543,60545,60547,60550,60552],{"class":96,"line":1713},[94,60544,51461],{"class":153},[94,60546,51414],{"class":104},[94,60548,60549],{"class":153},"223",[94,60551,51469],{"class":100},[94,60553,1271],{"class":104},[94,60555,60556,60558,60560,60562,60564,60566],{"class":96,"line":1730},[94,60557,51411],{"class":153},[94,60559,51414],{"class":104},[94,60561,416],{"class":153},[94,60563,51469],{"class":100},[94,60565,51533],{"class":153},[94,60567,1271],{"class":104},[94,60569,60570],{"class":96,"line":1735},[94,60571,2510],{"class":104},[94,60573,60574],{"class":96,"line":1740},[94,60575,2381],{"emptyLinePlaceholder":20},[94,60577,60578,60580,60583],{"class":96,"line":1745},[94,60579,60527],{"class":1944},[94,60581,60582],{"class":51277}," input",[94,60584,15554],{"class":104},[94,60586,60587,60589,60591,60593,60595],{"class":96,"line":1759},[94,60588,51461],{"class":153},[94,60590,51414],{"class":104},[94,60592,60549],{"class":153},[94,60594,51469],{"class":100},[94,60596,1271],{"class":104},[94,60598,60599,60601,60603,60605,60607],{"class":96,"line":1764},[94,60600,51476],{"class":153},[94,60602,51414],{"class":104},[94,60604,712],{"class":153},[94,60606,51469],{"class":100},[94,60608,1271],{"class":104},[94,60610,60611,60613,60615,60617,60619,60621],{"class":96,"line":2558},[94,60612,51423],{"class":153},[94,60614,51414],{"class":104},[94,60616,296],{"class":153},[94,60618,2019],{"class":153},[94,60620,51469],{"class":100},[94,60622,1271],{"class":104},[94,60624,60625,60628,60630,60632,60634],{"class":96,"line":2572},[94,60626,60627],{"class":153},"            font-size",[94,60629,51414],{"class":104},[94,60631,654],{"class":153},[94,60633,51469],{"class":100},[94,60635,1271],{"class":104},[94,60637,60638,60641,60643,60645,60647],{"class":96,"line":2580},[94,60639,60640],{"class":153},"            line-height",[94,60642,51414],{"class":104},[94,60644,712],{"class":153},[94,60646,51469],{"class":100},[94,60648,1271],{"class":104},[94,60650,60651,60654,60656,60658,60660,60662,60665],{"class":96,"line":2585},[94,60652,60653],{"class":153},"            border",[94,60655,51414],{"class":104},[94,60657,322],{"class":153},[94,60659,51469],{"class":100},[94,60661,51498],{"class":153},[94,60663,60664],{"class":153}," #e0e0e0",[94,60666,1271],{"class":104},[94,60668,60669,60672,60674,60676],{"class":96,"line":2591},[94,60670,60671],{"class":153},"            outline",[94,60673,51414],{"class":104},[94,60675,54714],{"class":153},[94,60677,1271],{"class":104},[94,60679,60680],{"class":96,"line":2597},[94,60681,2510],{"class":104},[94,60683,60684],{"class":96,"line":2602},[94,60685,2381],{"emptyLinePlaceholder":20},[94,60687,60688,60690,60693],{"class":96,"line":7930},[94,60689,60527],{"class":1944},[94,60691,60692],{"class":1944}," .search",[94,60694,15554],{"class":104},[94,60696,60697,60699,60701,60703,60705,60707,60710],{"class":96,"line":7954},[94,60698,60653],{"class":153},[94,60700,51414],{"class":104},[94,60702,322],{"class":153},[94,60704,51469],{"class":100},[94,60706,51498],{"class":153},[94,60708,60709],{"class":153}," #ff6700",[94,60711,1271],{"class":104},[94,60713,60714],{"class":96,"line":7959},[94,60715,2510],{"class":104},[94,60717,60718],{"class":96,"line":7965},[94,60719,2381],{"emptyLinePlaceholder":20},[94,60721,60722,60725],{"class":96,"line":7992},[94,60723,60724],{"class":1944},"        .result-list",[94,60726,15554],{"class":104},[94,60728,60729,60731,60733,60735],{"class":96,"line":7997},[94,60730,51449],{"class":153},[94,60732,51414],{"class":104},[94,60734,54714],{"class":153},[94,60736,1271],{"class":104},[94,60738,60739,60741,60743,60745],{"class":96,"line":8003},[94,60740,60534],{"class":153},[94,60742,51414],{"class":104},[94,60744,54808],{"class":153},[94,60746,1271],{"class":104},[94,60748,60749,60752,60754,60756],{"class":96,"line":8015},[94,60750,60751],{"class":153},"            left",[94,60753,51414],{"class":104},[94,60755,296],{"class":153},[94,60757,1271],{"class":104},[94,60759,60760,60763,60765,60767,60769],{"class":96,"line":8027},[94,60761,60762],{"class":153},"            top",[94,60764,51414],{"class":104},[94,60766,712],{"class":153},[94,60768,51469],{"class":100},[94,60770,1271],{"class":104},[94,60772,60773,60775,60777,60779,60781],{"class":96,"line":8039},[94,60774,51461],{"class":153},[94,60776,51414],{"class":104},[94,60778,60549],{"class":153},[94,60780,51469],{"class":100},[94,60782,1271],{"class":104},[94,60784,60785,60787,60789,60791,60793,60795,60797],{"class":96,"line":9698},[94,60786,60653],{"class":153},[94,60788,51414],{"class":104},[94,60790,322],{"class":153},[94,60792,51469],{"class":100},[94,60794,51498],{"class":153},[94,60796,60709],{"class":153},[94,60798,1271],{"class":104},[94,60800,60801,60804,60806,60808],{"class":96,"line":9723},[94,60802,60803],{"class":153},"            border-top",[94,60805,51414],{"class":104},[94,60807,296],{"class":153},[94,60809,1271],{"class":104},[94,60811,60812,60815,60817,60820],{"class":96,"line":9746},[94,60813,60814],{"class":153},"            background",[94,60816,51414],{"class":104},[94,60818,60819],{"class":153},"#fff",[94,60821,1271],{"class":104},[94,60823,60824],{"class":96,"line":9770},[94,60825,2510],{"class":104},[94,60827,60828],{"class":96,"line":9775},[94,60829,2381],{"emptyLinePlaceholder":20},[94,60831,60832,60834,60836],{"class":96,"line":9780},[94,60833,60724],{"class":1944},[94,60835,1379],{"class":51277},[94,60837,15554],{"class":104},[94,60839,60840,60842,60844,60847],{"class":96,"line":9785},[94,60841,51449],{"class":153},[94,60843,51414],{"class":104},[94,60845,60846],{"class":153},"block",[94,60848,1271],{"class":104},[94,60850,60851,60853,60855,60857,60859,60862,60864],{"class":96,"line":9794},[94,60852,51423],{"class":153},[94,60854,51414],{"class":104},[94,60856,449],{"class":153},[94,60858,51469],{"class":100},[94,60860,60861],{"class":153}," 15",[94,60863,51469],{"class":100},[94,60865,1271],{"class":104},[94,60867,60868,60870,60872,60874,60876],{"class":96,"line":9799},[94,60869,60627],{"class":153},[94,60871,51414],{"class":104},[94,60873,603],{"class":153},[94,60875,51469],{"class":100},[94,60877,1271],{"class":104},[94,60879,60880,60883,60885,60888],{"class":96,"line":9805},[94,60881,60882],{"class":153},"            color",[94,60884,51414],{"class":104},[94,60886,60887],{"class":153},"#424242",[94,60889,1271],{"class":104},[94,60891,60892,60895,60897,60899],{"class":96,"line":9826},[94,60893,60894],{"class":153},"            text-decoration",[94,60896,51414],{"class":104},[94,60898,54714],{"class":153},[94,60900,1271],{"class":104},[94,60902,60903],{"class":96,"line":9832},[94,60904,2510],{"class":104},[94,60906,60907],{"class":96,"line":9846},[94,60908,2381],{"emptyLinePlaceholder":20},[94,60910,60911,60913,60915,60918],{"class":96,"line":9852},[94,60912,60724],{"class":1944},[94,60914,1379],{"class":51277},[94,60916,60917],{"class":1944},":hover",[94,60919,15554],{"class":104},[94,60921,60922,60924,60926,60929],{"class":96,"line":9879},[94,60923,51617],{"class":153},[94,60925,51414],{"class":104},[94,60927,60928],{"class":153},"#eee",[94,60930,1271],{"class":104},[94,60932,60933],{"class":96,"line":9888},[94,60934,2510],{"class":104},[94,60936,60937,60939,60941],{"class":96,"line":9894},[94,60938,51753],{"class":104},[94,60940,5108],{"class":51277},[94,60942,51284],{"class":104},[94,60944,60945],{"class":96,"line":9902},[94,60946,2381],{"emptyLinePlaceholder":20},[94,60948,60949,60951,60953],{"class":96,"line":9907},[94,60950,51762],{"class":104},[94,60952,51311],{"class":51277},[94,60954,51284],{"class":104},[94,60956,60957],{"class":96,"line":16586},[94,60958,2381],{"emptyLinePlaceholder":20},[94,60960,60961,60963,60965],{"class":96,"line":16592},[94,60962,1015],{"class":104},[94,60964,51777],{"class":51277},[94,60966,51284],{"class":104},[94,60968,60969,60971,60973,60975,60977,60980],{"class":96,"line":16615},[94,60970,51318],{"class":104},[94,60972,51588],{"class":51277},[94,60974,53463],{"class":1944},[94,60976,150],{"class":104},[94,60978,60979],{"class":209},"\"mi\"",[94,60981,51284],{"class":104},[94,60983,60984,60986,60988,60990,60992,60995,60998,61000,61003],{"class":96,"line":16621},[94,60985,55279],{"class":104},[94,60987,53798],{"class":51277},[94,60989,53801],{"class":1944},[94,60991,150],{"class":104},[94,60993,60994],{"class":209},"\"search\"",[94,60996,60997],{"class":1944}," placeholder",[94,60999,150],{"class":104},[94,61001,61002],{"class":209},"\"小米笔记本\"",[94,61004,51284],{"class":104},[94,61006,61007,61009,61011,61013,61015,61018],{"class":96,"line":16644},[94,61008,55279],{"class":104},[94,61010,1112],{"class":51277},[94,61012,53463],{"class":1944},[94,61014,150],{"class":104},[94,61016,61017],{"class":209},"\"result-list\"",[94,61019,51284],{"class":104},[94,61021,61022,61025,61027,61030,61032,61035,61037,61040,61043,61045,61047,61049],{"class":96,"line":16658},[94,61023,61024],{"class":104},"            \u003C",[94,61026,51],{"class":51277},[94,61028,61029],{"class":104},">\u003C",[94,61031,343],{"class":51277},[94,61033,61034],{"class":1944}," href",[94,61036,150],{"class":104},[94,61038,61039],{"class":209},"\"#\"",[94,61041,61042],{"class":104},">全部商品\u003C\u002F",[94,61044,343],{"class":51277},[94,61046,55291],{"class":104},[94,61048,51],{"class":51277},[94,61050,51284],{"class":104},[94,61052,61053,61055,61057,61059,61061,61063,61065,61067,61070,61072,61074,61076],{"class":96,"line":16678},[94,61054,61024],{"class":104},[94,61056,51],{"class":51277},[94,61058,61029],{"class":104},[94,61060,343],{"class":51277},[94,61062,61034],{"class":1944},[94,61064,150],{"class":104},[94,61066,61039],{"class":209},[94,61068,61069],{"class":104},">小米11\u003C\u002F",[94,61071,343],{"class":51277},[94,61073,55291],{"class":104},[94,61075,51],{"class":51277},[94,61077,51284],{"class":104},[94,61079,61080,61082,61084,61086,61088,61090,61092,61094,61097,61099,61101,61103],{"class":96,"line":16684},[94,61081,61024],{"class":104},[94,61083,51],{"class":51277},[94,61085,61029],{"class":104},[94,61087,343],{"class":51277},[94,61089,61034],{"class":1944},[94,61091,150],{"class":104},[94,61093,61039],{"class":209},[94,61095,61096],{"class":104},">小米10S\u003C\u002F",[94,61098,343],{"class":51277},[94,61100,55291],{"class":104},[94,61102,51],{"class":51277},[94,61104,51284],{"class":104},[94,61106,61107,61109,61111,61113,61115,61117,61119,61121,61124,61126,61128,61130],{"class":96,"line":16695},[94,61108,61024],{"class":104},[94,61110,51],{"class":51277},[94,61112,61029],{"class":104},[94,61114,343],{"class":51277},[94,61116,61034],{"class":1944},[94,61118,150],{"class":104},[94,61120,61039],{"class":209},[94,61122,61123],{"class":104},">小米笔记本\u003C\u002F",[94,61125,343],{"class":51277},[94,61127,55291],{"class":104},[94,61129,51],{"class":51277},[94,61131,51284],{"class":104},[94,61133,61134,61136,61138,61140,61142,61144,61146,61148,61151,61153,61155,61157],{"class":96,"line":16718},[94,61135,61024],{"class":104},[94,61137,51],{"class":51277},[94,61139,61029],{"class":104},[94,61141,343],{"class":51277},[94,61143,61034],{"class":1944},[94,61145,150],{"class":104},[94,61147,61039],{"class":209},[94,61149,61150],{"class":104},">小米手机\u003C\u002F",[94,61152,343],{"class":51277},[94,61154,55291],{"class":104},[94,61156,51],{"class":51277},[94,61158,51284],{"class":104},[94,61160,61161,61163,61165,61167,61169,61171,61173,61175,61178,61180,61182,61184],{"class":96,"line":16740},[94,61162,61024],{"class":104},[94,61164,51],{"class":51277},[94,61166,61029],{"class":104},[94,61168,343],{"class":51277},[94,61170,61034],{"class":1944},[94,61172,150],{"class":104},[94,61174,61039],{"class":209},[94,61176,61177],{"class":104},">黑鲨4\u003C\u002F",[94,61179,343],{"class":51277},[94,61181,55291],{"class":104},[94,61183,51],{"class":51277},[94,61185,51284],{"class":104},[94,61187,61188,61190,61192,61194,61196,61198,61200,61202,61205,61207,61209,61211],{"class":96,"line":16745},[94,61189,61024],{"class":104},[94,61191,51],{"class":51277},[94,61193,61029],{"class":104},[94,61195,343],{"class":51277},[94,61197,61034],{"class":1944},[94,61199,150],{"class":104},[94,61201,61039],{"class":209},[94,61203,61204],{"class":104},">空调\u003C\u002F",[94,61206,343],{"class":51277},[94,61208,55291],{"class":104},[94,61210,51],{"class":51277},[94,61212,51284],{"class":104},[94,61214,61215,61218,61220],{"class":96,"line":16751},[94,61216,61217],{"class":104},"        \u003C\u002F",[94,61219,1112],{"class":51277},[94,61221,51284],{"class":104},[94,61223,61224,61226,61228],{"class":96,"line":16765},[94,61225,51753],{"class":104},[94,61227,51588],{"class":51277},[94,61229,51284],{"class":104},[94,61231,61232,61234,61236],{"class":96,"line":16778},[94,61233,51318],{"class":104},[94,61235,51790],{"class":51277},[94,61237,51284],{"class":104},[94,61239,61240],{"class":96,"line":16783},[94,61241,61242],{"class":163},"        \u002F\u002F 1. 获取元素\n",[94,61244,61245,61248,61250,61252,61254,61256,61258,61261],{"class":96,"line":16797},[94,61246,61247],{"class":100},"        const",[94,61249,60582],{"class":153},[94,61251,13546],{"class":100},[94,61253,54373],{"class":104},[94,61255,54376],{"class":1944},[94,61257,105],{"class":104},[94,61259,61260],{"class":209},"'[type=search]'",[94,61262,111],{"class":104},[94,61264,61265,61267,61270,61272,61274,61276,61278,61281],{"class":96,"line":16802},[94,61266,61247],{"class":100},[94,61268,61269],{"class":153}," ul",[94,61271,13546],{"class":100},[94,61273,54373],{"class":104},[94,61275,54376],{"class":1944},[94,61277,105],{"class":104},[94,61279,61280],{"class":209},"'.result-list'",[94,61282,111],{"class":104},[94,61284,61285],{"class":96,"line":16808},[94,61286,61287],{"class":163},"        \u002F\u002F console.log(input)\n",[94,61289,61290],{"class":96,"line":16813},[94,61291,61292],{"class":163},"        \u002F\u002F 2. 监听事件 获得焦点\n",[94,61294,61295,61298,61300,61302,61305,61307,61309],{"class":96,"line":16827},[94,61296,61297],{"class":104},"        input.",[94,61299,57790],{"class":1944},[94,61301,105],{"class":104},[94,61303,61304],{"class":209},"'focus'",[94,61306,12417],{"class":104},[94,61308,54426],{"class":100},[94,61310,54429],{"class":104},[94,61312,61313],{"class":96,"line":16832},[94,61314,61315],{"class":163},"            \u002F\u002F ul显示\n",[94,61317,61318,61321,61323],{"class":96,"line":16837},[94,61319,61320],{"class":104},"            ul.style.display ",[94,61322,150],{"class":100},[94,61324,61325],{"class":209}," 'block'\n",[94,61327,61328],{"class":96,"line":16851},[94,61329,61330],{"class":163},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[94,61332,61333,61336,61338,61340,61343],{"class":96,"line":16863},[94,61334,61335],{"class":104},"            input.classList.",[94,61337,5316],{"class":1944},[94,61339,105],{"class":104},[94,61341,61342],{"class":209},"'search'",[94,61344,111],{"class":104},[94,61346,61347],{"class":96,"line":16868},[94,61348,61349],{"class":104},"        })\n",[94,61351,61352],{"class":96,"line":16881},[94,61353,61354],{"class":163},"        \u002F\u002F 3. 监听事件 失去焦点\n",[94,61356,61357,61359,61361,61363,61366,61368,61370],{"class":96,"line":16886},[94,61358,61297],{"class":104},[94,61360,57790],{"class":1944},[94,61362,105],{"class":104},[94,61364,61365],{"class":209},"'blur'",[94,61367,12417],{"class":104},[94,61369,54426],{"class":100},[94,61371,54429],{"class":104},[94,61373,61374,61376,61378],{"class":96,"line":16891},[94,61375,61320],{"class":104},[94,61377,150],{"class":100},[94,61379,61380],{"class":209}," 'none'\n",[94,61382,61383,61385,61387,61389,61391],{"class":96,"line":16896},[94,61384,61335],{"class":104},[94,61386,56983],{"class":1944},[94,61388,105],{"class":104},[94,61390,61342],{"class":209},[94,61392,111],{"class":104},[94,61394,61395],{"class":96,"line":16909},[94,61396,61349],{"class":104},[94,61398,61399,61401,61403],{"class":96,"line":16914},[94,61400,51753],{"class":104},[94,61402,51790],{"class":51277},[94,61404,51284],{"class":104},[94,61406,61407,61409,61411],{"class":96,"line":32616},[94,61408,51762],{"class":104},[94,61410,51777],{"class":51277},[94,61412,51284],{"class":104},[94,61414,61415],{"class":96,"line":32622},[94,61416,2381],{"emptyLinePlaceholder":20},[94,61418,61419,61421,61423],{"class":96,"line":32628},[94,61420,51762],{"class":104},[94,61422,50612],{"class":51277},[94,61424,51284],{"class":104},[21980,61426,61428],{"id":61427},"_3253-键盘事件","3.2.5.3 键盘事件",[40,61430,61431],{},"评论字数统计案例",[40,61433,61434],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[40,61436,61437],{},"牢记focus伪类选择器",[51321,61439],{"charSet":61440},"UTF-8",[51321,61442],{"name":61443,"content":61444},"viewport","width=device-width, initial-scale=1.0",[51384,61446,61447],{},"Document",[5108,61449,61450],{},"\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",[53798,61452],{"type":5169},[1112,61454,61455,61458],{},[51,61456,61457],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[51,61459,61460],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[85,61462,61464],{"className":50610,"code":61463,"language":50612,"meta":14,"style":14},"\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",[91,61465,61466,61476,61490,61494,61502,61516,61536,61556,61569,61577,61584,61597,61611,61621,61631,61635,61639,61646,61658,61670,61682,61694,61723,61736,61740,61744,61753,61764,61776,61787,61798,61810,61821,61833,61849,61861,61865,61869,61880,61891,61901,61913,61917,61921,61929,61940,61950,61961,61973,61986,61998,62010,62014,62018,62027,62039,62050,62063,62074,62088,62092,62096,62103,62115,62127,62137,62141,62145,62154,62166,62176,62180,62184,62195,62205,62224,62237,62241,62245,62255,62265,62269,62273,62284,62295,62307,62319,62323,62327,62338,62349,62363,62367,62371,62382,62392,62404,62408,62416,62424,62428,62436,62451,62470,62510,62523,62531,62545,62565,62573,62588,62611,62629,62644,62664,62684,62704,62712,62720,62728,62736,62756,62776,62781,62798,62807,62811,62816,62832,62840,62844,62849,62866,62871,62896,62900,62904,62909,62914,62922,62930,62934],{"__ignoreMap":14},[94,61467,61468,61470,61472,61474],{"class":96,"line":97},[94,61469,51274],{"class":104},[94,61471,51278],{"class":51277},[94,61473,51281],{"class":1944},[94,61475,51284],{"class":104},[94,61477,61478,61480,61482,61484,61486,61488],{"class":96,"line":15},[94,61479,1015],{"class":104},[94,61481,50612],{"class":51277},[94,61483,51293],{"class":1944},[94,61485,150],{"class":104},[94,61487,51298],{"class":209},[94,61489,51284],{"class":104},[94,61491,61492],{"class":96,"line":1160},[94,61493,2381],{"emptyLinePlaceholder":20},[94,61495,61496,61498,61500],{"class":96,"line":1175},[94,61497,1015],{"class":104},[94,61499,51311],{"class":51277},[94,61501,51284],{"class":104},[94,61503,61504,61506,61508,61510,61512,61514],{"class":96,"line":1181},[94,61505,52121],{"class":104},[94,61507,51321],{"class":51277},[94,61509,51324],{"class":1944},[94,61511,150],{"class":104},[94,61513,51329],{"class":209},[94,61515,51284],{"class":104},[94,61517,61518,61520,61522,61524,61526,61528,61530,61532,61534],{"class":96,"line":1195},[94,61519,52121],{"class":104},[94,61521,51321],{"class":51277},[94,61523,51340],{"class":1944},[94,61525,150],{"class":104},[94,61527,51345],{"class":209},[94,61529,51348],{"class":1944},[94,61531,150],{"class":104},[94,61533,51353],{"class":209},[94,61535,51284],{"class":104},[94,61537,61538,61540,61542,61544,61546,61548,61550,61552,61554],{"class":96,"line":1201},[94,61539,52121],{"class":104},[94,61541,51321],{"class":51277},[94,61543,14902],{"class":1944},[94,61545,150],{"class":104},[94,61547,51368],{"class":209},[94,61549,51348],{"class":1944},[94,61551,150],{"class":104},[94,61553,51375],{"class":209},[94,61555,51284],{"class":104},[94,61557,61558,61560,61562,61565,61567],{"class":96,"line":1292},[94,61559,52121],{"class":104},[94,61561,51384],{"class":51277},[94,61563,61564],{"class":104},">评论回车发布\u003C\u002F",[94,61566,51384],{"class":51277},[94,61568,51284],{"class":104},[94,61570,61571,61573,61575],{"class":96,"line":1298},[94,61572,52121],{"class":104},[94,61574,5108],{"class":51277},[94,61576,51284],{"class":104},[94,61578,61579,61582],{"class":96,"line":1310},[94,61580,61581],{"class":1944},"    .wrapper",[94,61583,15554],{"class":104},[94,61585,61586,61589,61591,61593,61595],{"class":96,"line":1593},[94,61587,61588],{"class":153},"      min-width",[94,61590,51414],{"class":104},[94,61592,3968],{"class":153},[94,61594,51469],{"class":100},[94,61596,1271],{"class":104},[94,61598,61599,61602,61604,61607,61609],{"class":96,"line":1598},[94,61600,61601],{"class":153},"      max-width",[94,61603,51414],{"class":104},[94,61605,61606],{"class":153},"800",[94,61608,51469],{"class":100},[94,61610,1271],{"class":104},[94,61612,61613,61615,61617,61619],{"class":96,"line":1604},[94,61614,54986],{"class":153},[94,61616,51414],{"class":104},[94,61618,51454],{"class":153},[94,61620,1271],{"class":104},[94,61622,61623,61625,61627,61629],{"class":96,"line":1609},[94,61624,54997],{"class":153},[94,61626,51414],{"class":104},[94,61628,51557],{"class":153},[94,61630,1271],{"class":104},[94,61632,61633],{"class":96,"line":1623},[94,61634,2168],{"class":104},[94,61636,61637],{"class":96,"line":1628},[94,61638,2381],{"emptyLinePlaceholder":20},[94,61640,61641,61644],{"class":96,"line":1634},[94,61642,61643],{"class":1944},"    .avatar",[94,61645,15554],{"class":104},[94,61647,61648,61650,61652,61654,61656],{"class":96,"line":1655},[94,61649,54748],{"class":153},[94,61651,51414],{"class":104},[94,61653,712],{"class":153},[94,61655,51469],{"class":100},[94,61657,1271],{"class":104},[94,61659,61660,61662,61664,61666,61668],{"class":96,"line":1660},[94,61661,54762],{"class":153},[94,61663,51414],{"class":104},[94,61665,712],{"class":153},[94,61667,51469],{"class":100},[94,61669,1271],{"class":104},[94,61671,61672,61674,61676,61678,61680],{"class":96,"line":1674},[94,61673,55111],{"class":153},[94,61675,51414],{"class":104},[94,61677,761],{"class":153},[94,61679,433],{"class":100},[94,61681,1271],{"class":104},[94,61683,61684,61687,61689,61692],{"class":96,"line":1679},[94,61685,61686],{"class":153},"      overflow",[94,61688,51414],{"class":104},[94,61690,61691],{"class":153},"hidden",[94,61693,1271],{"class":104},[94,61695,61696,61699,61701,61704,61706,61709,61711,61714,61716,61718,61721],{"class":96,"line":1708},[94,61697,61698],{"class":153},"      background",[94,61700,51414],{"class":104},[94,61702,61703],{"class":153},"url",[94,61705,105],{"class":104},[94,61707,61708],{"class":5198},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[94,61710,13696],{"class":104},[94,61712,61713],{"class":153},"no-repeat",[94,61715,17126],{"class":153},[94,61717,24961],{"class":104},[94,61719,61720],{"class":153},"cover",[94,61722,1271],{"class":104},[94,61724,61725,61728,61730,61732,61734],{"class":96,"line":1713},[94,61726,61727],{"class":153},"      margin-right",[94,61729,51414],{"class":104},[94,61731,805],{"class":153},[94,61733,51469],{"class":100},[94,61735,1271],{"class":104},[94,61737,61738],{"class":96,"line":1730},[94,61739,2168],{"class":104},[94,61741,61742],{"class":96,"line":1735},[94,61743,2381],{"emptyLinePlaceholder":20},[94,61745,61746,61748,61751],{"class":96,"line":1740},[94,61747,61581],{"class":1944},[94,61749,61750],{"class":51277}," textarea",[94,61752,15554],{"class":104},[94,61754,61755,61758,61760,61762],{"class":96,"line":1745},[94,61756,61757],{"class":153},"      outline",[94,61759,51414],{"class":104},[94,61761,54714],{"class":153},[94,61763,1271],{"class":104},[94,61765,61766,61769,61771,61774],{"class":96,"line":1759},[94,61767,61768],{"class":153},"      border-color",[94,61770,51414],{"class":104},[94,61772,61773],{"class":153},"transparent",[94,61775,1271],{"class":104},[94,61777,61778,61781,61783,61785],{"class":96,"line":1764},[94,61779,61780],{"class":153},"      resize",[94,61782,51414],{"class":104},[94,61784,54714],{"class":153},[94,61786,1271],{"class":104},[94,61788,61789,61791,61793,61796],{"class":96,"line":2558},[94,61790,61698],{"class":153},[94,61792,51414],{"class":104},[94,61794,61795],{"class":153},"#f5f5f5",[94,61797,1271],{"class":104},[94,61799,61800,61802,61804,61806,61808],{"class":96,"line":2572},[94,61801,55111],{"class":153},[94,61803,51414],{"class":104},[94,61805,398],{"class":153},[94,61807,51469],{"class":100},[94,61809,1271],{"class":104},[94,61811,61812,61815,61817,61819],{"class":96,"line":2580},[94,61813,61814],{"class":153},"      flex",[94,61816,51414],{"class":104},[94,61818,322],{"class":153},[94,61820,1271],{"class":104},[94,61822,61823,61825,61827,61829,61831],{"class":96,"line":2585},[94,61824,54672],{"class":153},[94,61826,51414],{"class":104},[94,61828,551],{"class":153},[94,61830,51469],{"class":100},[94,61832,1271],{"class":104},[94,61834,61835,61838,61840,61842,61845,61847],{"class":96,"line":2591},[94,61836,61837],{"class":153},"      transition",[94,61839,51414],{"class":104},[94,61841,28104],{"class":153},[94,61843,61844],{"class":153}," 0.5",[94,61846,800],{"class":100},[94,61848,1271],{"class":104},[94,61850,61851,61853,61855,61857,61859],{"class":96,"line":2597},[94,61852,54762],{"class":153},[94,61854,51414],{"class":104},[94,61856,1056],{"class":153},[94,61858,51469],{"class":100},[94,61860,1271],{"class":104},[94,61862,61863],{"class":96,"line":2602},[94,61864,2168],{"class":104},[94,61866,61867],{"class":96,"line":7930},[94,61868,2381],{"emptyLinePlaceholder":20},[94,61870,61871,61873,61875,61878],{"class":96,"line":7954},[94,61872,61581],{"class":1944},[94,61874,61750],{"class":51277},[94,61876,61877],{"class":1944},":focus",[94,61879,15554],{"class":104},[94,61881,61882,61884,61886,61889],{"class":96,"line":7959},[94,61883,61768],{"class":153},[94,61885,51414],{"class":104},[94,61887,61888],{"class":153},"#e4e4e4",[94,61890,1271],{"class":104},[94,61892,61893,61895,61897,61899],{"class":96,"line":7965},[94,61894,61698],{"class":153},[94,61896,51414],{"class":104},[94,61898,60819],{"class":153},[94,61900,1271],{"class":104},[94,61902,61903,61905,61907,61909,61911],{"class":96,"line":7992},[94,61904,54762],{"class":153},[94,61906,51414],{"class":104},[94,61908,761],{"class":153},[94,61910,51469],{"class":100},[94,61912,1271],{"class":104},[94,61914,61915],{"class":96,"line":7997},[94,61916,2168],{"class":104},[94,61918,61919],{"class":96,"line":8003},[94,61920,2381],{"emptyLinePlaceholder":20},[94,61922,61923,61925,61927],{"class":96,"line":8015},[94,61924,61581],{"class":1944},[94,61926,57444],{"class":51277},[94,61928,15554],{"class":104},[94,61930,61931,61933,61935,61938],{"class":96,"line":8027},[94,61932,61698],{"class":153},[94,61934,51414],{"class":104},[94,61936,61937],{"class":153},"#00aeec",[94,61939,1271],{"class":104},[94,61941,61942,61944,61946,61948],{"class":96,"line":8039},[94,61943,57393],{"class":153},[94,61945,51414],{"class":104},[94,61947,60819],{"class":153},[94,61949,1271],{"class":104},[94,61951,61952,61955,61957,61959],{"class":96,"line":9698},[94,61953,61954],{"class":153},"      border",[94,61956,51414],{"class":104},[94,61958,54714],{"class":153},[94,61960,1271],{"class":104},[94,61962,61963,61965,61967,61969,61971],{"class":96,"line":9723},[94,61964,55111],{"class":153},[94,61966,51414],{"class":104},[94,61968,398],{"class":153},[94,61970,51469],{"class":100},[94,61972,1271],{"class":104},[94,61974,61975,61978,61980,61982,61984],{"class":96,"line":9746},[94,61976,61977],{"class":153},"      margin-left",[94,61979,51414],{"class":104},[94,61981,551],{"class":153},[94,61983,51469],{"class":100},[94,61985,1271],{"class":104},[94,61987,61988,61990,61992,61994,61996],{"class":96,"line":9770},[94,61989,54748],{"class":153},[94,61991,51414],{"class":104},[94,61993,461],{"class":153},[94,61995,51469],{"class":100},[94,61997,1271],{"class":104},[94,61999,62000,62003,62005,62008],{"class":96,"line":9775},[94,62001,62002],{"class":153},"      cursor",[94,62004,51414],{"class":104},[94,62006,62007],{"class":153},"pointer",[94,62009,1271],{"class":104},[94,62011,62012],{"class":96,"line":9780},[94,62013,2168],{"class":104},[94,62015,62016],{"class":96,"line":9785},[94,62017,2381],{"emptyLinePlaceholder":20},[94,62019,62020,62022,62025],{"class":96,"line":9794},[94,62021,61581],{"class":1944},[94,62023,62024],{"class":1944}," .total",[94,62026,15554],{"class":104},[94,62028,62029,62031,62033,62035,62037],{"class":96,"line":9799},[94,62030,61727],{"class":153},[94,62032,51414],{"class":104},[94,62034,717],{"class":153},[94,62036,51469],{"class":100},[94,62038,1271],{"class":104},[94,62040,62041,62043,62045,62048],{"class":96,"line":9805},[94,62042,57393],{"class":153},[94,62044,51414],{"class":104},[94,62046,62047],{"class":153},"#999",[94,62049,1271],{"class":104},[94,62051,62052,62055,62057,62059,62061],{"class":96,"line":9826},[94,62053,62054],{"class":153},"      margin-top",[94,62056,51414],{"class":104},[94,62058,424],{"class":153},[94,62060,51469],{"class":100},[94,62062,1271],{"class":104},[94,62064,62065,62068,62070,62072],{"class":96,"line":9832},[94,62066,62067],{"class":153},"      opacity",[94,62069,51414],{"class":104},[94,62071,296],{"class":153},[94,62073,1271],{"class":104},[94,62075,62076,62078,62080,62082,62084,62086],{"class":96,"line":9846},[94,62077,61837],{"class":153},[94,62079,51414],{"class":104},[94,62081,28104],{"class":153},[94,62083,61844],{"class":153},[94,62085,800],{"class":100},[94,62087,1271],{"class":104},[94,62089,62090],{"class":96,"line":9852},[94,62091,2168],{"class":104},[94,62093,62094],{"class":96,"line":9879},[94,62095,2381],{"emptyLinePlaceholder":20},[94,62097,62098,62101],{"class":96,"line":9888},[94,62099,62100],{"class":1944},"    .list",[94,62102,15554],{"class":104},[94,62104,62105,62107,62109,62111,62113],{"class":96,"line":9894},[94,62106,61588],{"class":153},[94,62108,51414],{"class":104},[94,62110,3968],{"class":153},[94,62112,51469],{"class":100},[94,62114,1271],{"class":104},[94,62116,62117,62119,62121,62123,62125],{"class":96,"line":9902},[94,62118,61601],{"class":153},[94,62120,51414],{"class":104},[94,62122,61606],{"class":153},[94,62124,51469],{"class":100},[94,62126,1271],{"class":104},[94,62128,62129,62131,62133,62135],{"class":96,"line":9907},[94,62130,54986],{"class":153},[94,62132,51414],{"class":104},[94,62134,51454],{"class":153},[94,62136,1271],{"class":104},[94,62138,62139],{"class":96,"line":16586},[94,62140,2168],{"class":104},[94,62142,62143],{"class":96,"line":16592},[94,62144,2381],{"emptyLinePlaceholder":20},[94,62146,62147,62149,62152],{"class":96,"line":16615},[94,62148,62100],{"class":1944},[94,62150,62151],{"class":1944}," .item",[94,62153,15554],{"class":104},[94,62155,62156,62158,62160,62162,62164],{"class":96,"line":16621},[94,62157,54748],{"class":153},[94,62159,51414],{"class":104},[94,62161,416],{"class":153},[94,62163,433],{"class":100},[94,62165,1271],{"class":104},[94,62167,62168,62170,62172,62174],{"class":96,"line":16644},[94,62169,54986],{"class":153},[94,62171,51414],{"class":104},[94,62173,51454],{"class":153},[94,62175,1271],{"class":104},[94,62177,62178],{"class":96,"line":16658},[94,62179,2168],{"class":104},[94,62181,62182],{"class":96,"line":16678},[94,62183,2381],{"emptyLinePlaceholder":20},[94,62185,62186,62188,62190,62193],{"class":96,"line":16684},[94,62187,62100],{"class":1944},[94,62189,62151],{"class":1944},[94,62191,62192],{"class":1944}," .info",[94,62194,15554],{"class":104},[94,62196,62197,62199,62201,62203],{"class":96,"line":16695},[94,62198,61814],{"class":153},[94,62200,51414],{"class":104},[94,62202,322],{"class":153},[94,62204,1271],{"class":104},[94,62206,62207,62210,62212,62214,62216,62219,62222],{"class":96,"line":16718},[94,62208,62209],{"class":153},"      border-bottom",[94,62211,51414],{"class":104},[94,62213,322],{"class":153},[94,62215,51469],{"class":100},[94,62217,62218],{"class":153}," dashed",[94,62220,62221],{"class":153}," #e4e4e4",[94,62223,1271],{"class":104},[94,62225,62226,62229,62231,62233,62235],{"class":96,"line":16740},[94,62227,62228],{"class":153},"      padding-bottom",[94,62230,51414],{"class":104},[94,62232,551],{"class":153},[94,62234,51469],{"class":100},[94,62236,1271],{"class":104},[94,62238,62239],{"class":96,"line":16745},[94,62240,2168],{"class":104},[94,62242,62243],{"class":96,"line":16751},[94,62244,2381],{"emptyLinePlaceholder":20},[94,62246,62247,62249,62251,62253],{"class":96,"line":16765},[94,62248,62100],{"class":1944},[94,62250,62151],{"class":1944},[94,62252,6807],{"class":51277},[94,62254,15554],{"class":104},[94,62256,62257,62259,62261,62263],{"class":96,"line":16778},[94,62258,54683],{"class":153},[94,62260,51414],{"class":104},[94,62262,296],{"class":153},[94,62264,1271],{"class":104},[94,62266,62267],{"class":96,"line":16783},[94,62268,2168],{"class":104},[94,62270,62271],{"class":96,"line":16797},[94,62272,2381],{"emptyLinePlaceholder":20},[94,62274,62275,62277,62279,62282],{"class":96,"line":16802},[94,62276,62100],{"class":1944},[94,62278,62151],{"class":1944},[94,62280,62281],{"class":1944}," .name",[94,62283,15554],{"class":104},[94,62285,62286,62288,62290,62293],{"class":96,"line":16808},[94,62287,57393],{"class":153},[94,62289,51414],{"class":104},[94,62291,62292],{"class":153},"#FB7299",[94,62294,1271],{"class":104},[94,62296,62297,62299,62301,62303,62305],{"class":96,"line":16813},[94,62298,54899],{"class":153},[94,62300,51414],{"class":104},[94,62302,654],{"class":153},[94,62304,51469],{"class":100},[94,62306,1271],{"class":104},[94,62308,62309,62312,62314,62317],{"class":96,"line":16827},[94,62310,62311],{"class":153},"      font-weight",[94,62313,51414],{"class":104},[94,62315,62316],{"class":153},"bold",[94,62318,1271],{"class":104},[94,62320,62321],{"class":96,"line":16832},[94,62322,2168],{"class":104},[94,62324,62325],{"class":96,"line":16837},[94,62326,2381],{"emptyLinePlaceholder":20},[94,62328,62329,62331,62333,62336],{"class":96,"line":16851},[94,62330,62100],{"class":1944},[94,62332,62151],{"class":1944},[94,62334,62335],{"class":1944}," .text",[94,62337,15554],{"class":104},[94,62339,62340,62342,62344,62347],{"class":96,"line":16863},[94,62341,57393],{"class":153},[94,62343,51414],{"class":104},[94,62345,62346],{"class":153},"#333",[94,62348,1271],{"class":104},[94,62350,62351,62353,62355,62357,62359,62361],{"class":96,"line":16868},[94,62352,54672],{"class":153},[94,62354,51414],{"class":104},[94,62356,551],{"class":153},[94,62358,51469],{"class":100},[94,62360,4074],{"class":153},[94,62362,1271],{"class":104},[94,62364,62365],{"class":96,"line":16881},[94,62366,2168],{"class":104},[94,62368,62369],{"class":96,"line":16886},[94,62370,2381],{"emptyLinePlaceholder":20},[94,62372,62373,62375,62377,62380],{"class":96,"line":16891},[94,62374,62100],{"class":1944},[94,62376,62151],{"class":1944},[94,62378,62379],{"class":1944}," .time",[94,62381,15554],{"class":104},[94,62383,62384,62386,62388,62390],{"class":96,"line":16896},[94,62385,57393],{"class":153},[94,62387,51414],{"class":104},[94,62389,62047],{"class":153},[94,62391,1271],{"class":104},[94,62393,62394,62396,62398,62400,62402],{"class":96,"line":16909},[94,62395,54899],{"class":153},[94,62397,51414],{"class":104},[94,62399,603],{"class":153},[94,62401,51469],{"class":100},[94,62403,1271],{"class":104},[94,62405,62406],{"class":96,"line":16914},[94,62407,2168],{"class":104},[94,62409,62410,62412,62414],{"class":96,"line":32616},[94,62411,52394],{"class":104},[94,62413,5108],{"class":51277},[94,62415,51284],{"class":104},[94,62417,62418,62420,62422],{"class":96,"line":32622},[94,62419,51762],{"class":104},[94,62421,51311],{"class":51277},[94,62423,51284],{"class":104},[94,62425,62426],{"class":96,"line":32628},[94,62427,2381],{"emptyLinePlaceholder":20},[94,62429,62430,62432,62434],{"class":96,"line":32634},[94,62431,1015],{"class":104},[94,62433,51777],{"class":51277},[94,62435,51284],{"class":104},[94,62437,62438,62440,62442,62444,62446,62449],{"class":96,"line":32640},[94,62439,52121],{"class":104},[94,62441,51588],{"class":51277},[94,62443,53463],{"class":1944},[94,62445,150],{"class":104},[94,62447,62448],{"class":209},"\"wrapper\"",[94,62450,51284],{"class":104},[94,62452,62453,62455,62457,62459,62461,62464,62466,62468],{"class":96,"line":32651},[94,62454,51318],{"class":104},[94,62456,546],{"class":51277},[94,62458,53463],{"class":1944},[94,62460,150],{"class":104},[94,62462,62463],{"class":209},"\"avatar\"",[94,62465,55291],{"class":104},[94,62467,546],{"class":51277},[94,62469,51284],{"class":104},[94,62471,62472,62474,62476,62478,62480,62483,62485,62487,62490,62492,62494,62496,62499,62501,62504,62506,62508],{"class":96,"line":32657},[94,62473,51318],{"class":104},[94,62475,54265],{"class":51277},[94,62477,14941],{"class":1944},[94,62479,150],{"class":104},[94,62481,62482],{"class":209},"\"tx\"",[94,62484,60997],{"class":1944},[94,62486,150],{"class":104},[94,62488,62489],{"class":209},"\"发一条友善的评论\"",[94,62491,54288],{"class":1944},[94,62493,150],{"class":104},[94,62495,3682],{"class":209},[94,62497,62498],{"class":1944}," maxlength",[94,62500,150],{"class":104},[94,62502,62503],{"class":209},"\"200\"",[94,62505,55291],{"class":104},[94,62507,54265],{"class":51277},[94,62509,51284],{"class":104},[94,62511,62512,62514,62516,62519,62521],{"class":96,"line":32677},[94,62513,51318],{"class":104},[94,62515,53864],{"class":51277},[94,62517,62518],{"class":104},">发布\u003C\u002F",[94,62520,53864],{"class":51277},[94,62522,51284],{"class":104},[94,62524,62525,62527,62529],{"class":96,"line":32683},[94,62526,52394],{"class":104},[94,62528,51588],{"class":51277},[94,62530,51284],{"class":104},[94,62532,62533,62535,62537,62539,62541,62543],{"class":96,"line":32694},[94,62534,52121],{"class":104},[94,62536,51588],{"class":51277},[94,62538,53463],{"class":1944},[94,62540,150],{"class":104},[94,62542,62448],{"class":209},[94,62544,51284],{"class":104},[94,62546,62547,62549,62551,62553,62555,62558,62561,62563],{"class":96,"line":32700},[94,62548,51318],{"class":104},[94,62550,94],{"class":51277},[94,62552,53463],{"class":1944},[94,62554,150],{"class":104},[94,62556,62557],{"class":209},"\"total\"",[94,62559,62560],{"class":104},">0\u002F200字\u003C\u002F",[94,62562,94],{"class":51277},[94,62564,51284],{"class":104},[94,62566,62567,62569,62571],{"class":96,"line":32706},[94,62568,52394],{"class":104},[94,62570,51588],{"class":51277},[94,62572,51284],{"class":104},[94,62574,62575,62577,62579,62581,62583,62586],{"class":96,"line":32712},[94,62576,52121],{"class":104},[94,62578,51588],{"class":51277},[94,62580,53463],{"class":1944},[94,62582,150],{"class":104},[94,62584,62585],{"class":209},"\"list\"",[94,62587,51284],{"class":104},[94,62589,62590,62592,62594,62596,62598,62601,62604,62606,62609],{"class":96,"line":32718},[94,62591,51318],{"class":104},[94,62593,51588],{"class":51277},[94,62595,53463],{"class":1944},[94,62597,150],{"class":104},[94,62599,62600],{"class":209},"\"item\"",[94,62602,62603],{"class":1944}," style",[94,62605,150],{"class":104},[94,62607,62608],{"class":209},"\"display: none;\"",[94,62610,51284],{"class":104},[94,62612,62613,62615,62617,62619,62621,62623,62625,62627],{"class":96,"line":32724},[94,62614,55211],{"class":104},[94,62616,546],{"class":51277},[94,62618,53463],{"class":1944},[94,62620,150],{"class":104},[94,62622,62463],{"class":209},[94,62624,55291],{"class":104},[94,62626,546],{"class":51277},[94,62628,51284],{"class":104},[94,62630,62631,62633,62635,62637,62639,62642],{"class":96,"line":32730},[94,62632,55211],{"class":104},[94,62634,51588],{"class":51277},[94,62636,53463],{"class":1944},[94,62638,150],{"class":104},[94,62640,62641],{"class":209},"\"info\"",[94,62643,51284],{"class":104},[94,62645,62646,62648,62650,62652,62654,62657,62660,62662],{"class":96,"line":32736},[94,62647,55279],{"class":104},[94,62649,40],{"class":51277},[94,62651,53463],{"class":1944},[94,62653,150],{"class":104},[94,62655,62656],{"class":209},"\"name\"",[94,62658,62659],{"class":104},">清风徐来\u003C\u002F",[94,62661,40],{"class":51277},[94,62663,51284],{"class":104},[94,62665,62666,62668,62670,62672,62674,62677,62680,62682],{"class":96,"line":32756},[94,62667,55279],{"class":104},[94,62669,40],{"class":51277},[94,62671,53463],{"class":1944},[94,62673,150],{"class":104},[94,62675,62676],{"class":209},"\"text\"",[94,62678,62679],{"class":104},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[94,62681,40],{"class":51277},[94,62683,51284],{"class":104},[94,62685,62686,62688,62690,62692,62694,62697,62700,62702],{"class":96,"line":32762},[94,62687,55279],{"class":104},[94,62689,40],{"class":51277},[94,62691,53463],{"class":1944},[94,62693,150],{"class":104},[94,62695,62696],{"class":209},"\"time\"",[94,62698,62699],{"class":104},">2022-10-10 20:29:21\u003C\u002F",[94,62701,40],{"class":51277},[94,62703,51284],{"class":104},[94,62705,62706,62708,62710],{"class":96,"line":32778},[94,62707,55384],{"class":104},[94,62709,51588],{"class":51277},[94,62711,51284],{"class":104},[94,62713,62714,62716,62718],{"class":96,"line":32784},[94,62715,51753],{"class":104},[94,62717,51588],{"class":51277},[94,62719,51284],{"class":104},[94,62721,62722,62724,62726],{"class":96,"line":32798},[94,62723,52394],{"class":104},[94,62725,51588],{"class":51277},[94,62727,51284],{"class":104},[94,62729,62730,62732,62734],{"class":96,"line":32804},[94,62731,52121],{"class":104},[94,62733,51790],{"class":51277},[94,62735,51284],{"class":104},[94,62737,62738,62740,62743,62745,62747,62749,62751,62754],{"class":96,"line":32819},[94,62739,11203],{"class":100},[94,62741,62742],{"class":153}," tx",[94,62744,13546],{"class":100},[94,62746,54373],{"class":104},[94,62748,54376],{"class":1944},[94,62750,105],{"class":104},[94,62752,62753],{"class":209},"'#tx'",[94,62755,111],{"class":104},[94,62757,62758,62760,62763,62765,62767,62769,62771,62774],{"class":96,"line":32825},[94,62759,11203],{"class":100},[94,62761,62762],{"class":153}," total",[94,62764,13546],{"class":100},[94,62766,54373],{"class":104},[94,62768,54376],{"class":1944},[94,62770,105],{"class":104},[94,62772,62773],{"class":209},"'.total'",[94,62775,111],{"class":104},[94,62777,62778],{"class":96,"line":32834},[94,62779,62780],{"class":163},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[94,62782,62783,62786,62788,62790,62792,62794,62796],{"class":96,"line":32840},[94,62784,62785],{"class":104},"    tx.",[94,62787,57790],{"class":1944},[94,62789,105],{"class":104},[94,62791,61304],{"class":209},[94,62793,12417],{"class":104},[94,62795,54426],{"class":100},[94,62797,54429],{"class":104},[94,62799,62800,62803,62805],{"class":96,"line":32849},[94,62801,62802],{"class":104},"      total.style.opacity ",[94,62804,150],{"class":100},[94,62806,55676],{"class":153},[94,62808,62809],{"class":96,"line":32855},[94,62810,33444],{"class":104},[94,62812,62813],{"class":96,"line":32861},[94,62814,62815],{"class":163},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[94,62817,62818,62820,62822,62824,62826,62828,62830],{"class":96,"line":32870},[94,62819,62785],{"class":104},[94,62821,57790],{"class":1944},[94,62823,105],{"class":104},[94,62825,61365],{"class":209},[94,62827,12417],{"class":104},[94,62829,54426],{"class":100},[94,62831,54429],{"class":104},[94,62833,62834,62836,62838],{"class":96,"line":32876},[94,62835,62802],{"class":104},[94,62837,150],{"class":100},[94,62839,47316],{"class":153},[94,62841,62842],{"class":96,"line":32887},[94,62843,33444],{"class":104},[94,62845,62846],{"class":96,"line":32893},[94,62847,62848],{"class":163},"    \u002F\u002F 3. 检测用户输入\n",[94,62850,62851,62853,62855,62857,62860,62862,62864],{"class":96,"line":32912},[94,62852,62785],{"class":104},[94,62854,57790],{"class":1944},[94,62856,105],{"class":104},[94,62858,62859],{"class":209},"'input'",[94,62861,12417],{"class":104},[94,62863,54426],{"class":100},[94,62865,54429],{"class":104},[94,62867,62868],{"class":96,"line":32918},[94,62869,62870],{"class":163},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[94,62872,62873,62876,62878,62881,62884,62886,62889,62891,62893],{"class":96,"line":32929},[94,62874,62875],{"class":104},"      total.innerHTML ",[94,62877,150],{"class":100},[94,62879,62880],{"class":209}," `${",[94,62882,62883],{"class":104},"tx",[94,62885,663],{"class":209},[94,62887,62888],{"class":104},"value",[94,62890,663],{"class":209},[94,62892,51945],{"class":153},[94,62894,62895],{"class":209},"}\u002F200字`\n",[94,62897,62898],{"class":96,"line":32935},[94,62899,33444],{"class":104},[94,62901,62902],{"class":96,"line":32955},[94,62903,2381],{"emptyLinePlaceholder":20},[94,62905,62906],{"class":96,"line":32971},[94,62907,62908],{"class":163},"    \u002F\u002F const str = 'andy'\n",[94,62910,62911],{"class":96,"line":32977},[94,62912,62913],{"class":163},"    \u002F\u002F console.log(str.length)\n",[94,62915,62916,62918,62920],{"class":96,"line":32991},[94,62917,52394],{"class":104},[94,62919,51790],{"class":51277},[94,62921,51284],{"class":104},[94,62923,62924,62926,62928],{"class":96,"line":32997},[94,62925,51762],{"class":104},[94,62927,51777],{"class":51277},[94,62929,51284],{"class":104},[94,62931,62932],{"class":96,"line":33003},[94,62933,2381],{"emptyLinePlaceholder":20},[94,62935,62936,62938,62940],{"class":96,"line":33014},[94,62937,51762],{"class":104},[94,62939,50612],{"class":51277},[94,62941,51284],{"class":104},[21980,62943,62945],{"id":62944},"_3254-change事件","3.2.5.4 change事件",[40,62947,62948],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[40,62950,62951],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[40,62953,62954],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[85,62956,62958],{"className":50610,"code":62957,"language":50612,"meta":14,"style":14},"\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",[91,62959,62960,62970,62984,62988,62996,63010,63030,63042,63050,63054,63062,63076,63084,63102,63120,63132,63136,63144,63152,63156],{"__ignoreMap":14},[94,62961,62962,62964,62966,62968],{"class":96,"line":97},[94,62963,51274],{"class":104},[94,62965,51278],{"class":51277},[94,62967,51281],{"class":1944},[94,62969,51284],{"class":104},[94,62971,62972,62974,62976,62978,62980,62982],{"class":96,"line":15},[94,62973,1015],{"class":104},[94,62975,50612],{"class":51277},[94,62977,51293],{"class":1944},[94,62979,150],{"class":104},[94,62981,51298],{"class":209},[94,62983,51284],{"class":104},[94,62985,62986],{"class":96,"line":1160},[94,62987,2381],{"emptyLinePlaceholder":20},[94,62989,62990,62992,62994],{"class":96,"line":1175},[94,62991,1015],{"class":104},[94,62993,51311],{"class":51277},[94,62995,51284],{"class":104},[94,62997,62998,63000,63002,63004,63006,63008],{"class":96,"line":1181},[94,62999,52121],{"class":104},[94,63001,51321],{"class":51277},[94,63003,51324],{"class":1944},[94,63005,150],{"class":104},[94,63007,51329],{"class":209},[94,63009,51284],{"class":104},[94,63011,63012,63014,63016,63018,63020,63022,63024,63026,63028],{"class":96,"line":1195},[94,63013,52121],{"class":104},[94,63015,51321],{"class":51277},[94,63017,14902],{"class":1944},[94,63019,150],{"class":104},[94,63021,51368],{"class":209},[94,63023,51348],{"class":1944},[94,63025,150],{"class":104},[94,63027,51375],{"class":209},[94,63029,51284],{"class":104},[94,63031,63032,63034,63036,63038,63040],{"class":96,"line":1201},[94,63033,52121],{"class":104},[94,63035,51384],{"class":51277},[94,63037,51387],{"class":104},[94,63039,51384],{"class":51277},[94,63041,51284],{"class":104},[94,63043,63044,63046,63048],{"class":96,"line":1292},[94,63045,51762],{"class":104},[94,63047,51311],{"class":51277},[94,63049,51284],{"class":104},[94,63051,63052],{"class":96,"line":1298},[94,63053,2381],{"emptyLinePlaceholder":20},[94,63055,63056,63058,63060],{"class":96,"line":1310},[94,63057,1015],{"class":104},[94,63059,51777],{"class":51277},[94,63061,51284],{"class":104},[94,63063,63064,63066,63068,63070,63072,63074],{"class":96,"line":1593},[94,63065,52121],{"class":104},[94,63067,53798],{"class":51277},[94,63069,53801],{"class":1944},[94,63071,150],{"class":104},[94,63073,62676],{"class":209},[94,63075,51284],{"class":104},[94,63077,63078,63080,63082],{"class":96,"line":1598},[94,63079,52121],{"class":104},[94,63081,51790],{"class":51277},[94,63083,51284],{"class":104},[94,63085,63086,63088,63090,63092,63094,63096,63098,63100],{"class":96,"line":1604},[94,63087,11203],{"class":100},[94,63089,60582],{"class":153},[94,63091,13546],{"class":100},[94,63093,54373],{"class":104},[94,63095,54376],{"class":1944},[94,63097,105],{"class":104},[94,63099,62859],{"class":209},[94,63101,111],{"class":104},[94,63103,63104,63107,63109,63111,63114,63116,63118],{"class":96,"line":1609},[94,63105,63106],{"class":104},"    input.",[94,63108,57790],{"class":1944},[94,63110,105],{"class":104},[94,63112,63113],{"class":209},"'change'",[94,63115,12417],{"class":104},[94,63117,54426],{"class":100},[94,63119,54429],{"class":104},[94,63121,63122,63124,63126,63128,63130],{"class":96,"line":1623},[94,63123,58221],{"class":104},[94,63125,58224],{"class":1944},[94,63127,105],{"class":104},[94,63129,698],{"class":153},[94,63131,111],{"class":104},[94,63133,63134],{"class":96,"line":1628},[94,63135,33444],{"class":104},[94,63137,63138,63140,63142],{"class":96,"line":1634},[94,63139,52394],{"class":104},[94,63141,51790],{"class":51277},[94,63143,51284],{"class":104},[94,63145,63146,63148,63150],{"class":96,"line":1655},[94,63147,51762],{"class":104},[94,63149,51777],{"class":51277},[94,63151,51284],{"class":104},[94,63153,63154],{"class":96,"line":1660},[94,63155,2381],{"emptyLinePlaceholder":20},[94,63157,63158,63160,63162],{"class":96,"line":1674},[94,63159,51762],{"class":104},[94,63161,50612],{"class":51277},[94,63163,51284],{"class":104},[40,63165,63166],{},"总结：内容发生改变才回去触发",[65,63168,63170],{"id":63169},"_326-事件对象","3.2.6 事件对象",[21980,63172,63174],{"id":63173},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[40,63176,63177],{},[1443,63178],{"alt":14,"src":63179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[40,63181,63182],{},[1443,63183],{"alt":14,"src":63184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[40,63186,63187],{},"点击一次，就输出了事件对象，它是个对象",[40,63189,63190],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[40,63192,63193],{},[1443,63194],{"alt":14,"src":63195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[21980,63197,63199],{"id":63198},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[40,63201,63202],{},[1443,63203],{"alt":14,"src":63204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[40,63206,63207],{},"实现按特殊字符才是实现打印输出效果：",[85,63209,63211],{"className":53044,"code":63210,"language":53046,"meta":14,"style":14},"\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",[91,63212,63213,63221,63226,63240,63248,63253,63258,63263,63268,63273,63278,63283,63288,63293,63297,63301,63309],{"__ignoreMap":14},[94,63214,63215,63217,63219],{"class":96,"line":97},[94,63216,1015],{"class":104},[94,63218,51777],{"class":51277},[94,63220,51284],{"class":104},[94,63222,63223],{"class":96,"line":15},[94,63224,63225],{"class":163},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[94,63227,63228,63230,63232,63234,63236,63238],{"class":96,"line":1160},[94,63229,52121],{"class":104},[94,63231,53798],{"class":51277},[94,63233,53801],{"class":1944},[94,63235,150],{"class":104},[94,63237,62676],{"class":209},[94,63239,51284],{"class":104},[94,63241,63242,63244,63246],{"class":96,"line":1175},[94,63243,52121],{"class":104},[94,63245,51790],{"class":51277},[94,63247,51284],{"class":104},[94,63249,63250],{"class":96,"line":1181},[94,63251,63252],{"class":104},"    \u002F\u002F const btn = document.querySelector('button')\n",[94,63254,63255],{"class":96,"line":1195},[94,63256,63257],{"class":104},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[94,63259,63260],{"class":96,"line":1201},[94,63261,63262],{"class":104},"    \u002F\u002F   console.log(e);\n",[94,63264,63265],{"class":96,"line":1292},[94,63266,63267],{"class":104},"    \u002F\u002F })\n",[94,63269,63270],{"class":96,"line":1298},[94,63271,63272],{"class":104},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[94,63274,63275],{"class":96,"line":1310},[94,63276,63277],{"class":104},"    const input = document.querySelector('input')\n",[94,63279,63280],{"class":96,"line":1593},[94,63281,63282],{"class":104},"    input.addEventListener('keyup', function (e) {\n",[94,63284,63285],{"class":96,"line":1598},[94,63286,63287],{"class":104},"      if (e.key === 'Enter') {\n",[94,63289,63290],{"class":96,"line":1604},[94,63291,63292],{"class":104},"        console.log('我按下了回车键')\n",[94,63294,63295],{"class":96,"line":1609},[94,63296,52375],{"class":104},[94,63298,63299],{"class":96,"line":1623},[94,63300,33444],{"class":104},[94,63302,63303,63305,63307],{"class":96,"line":1628},[94,63304,52394],{"class":104},[94,63306,51790],{"class":51277},[94,63308,51284],{"class":104},[94,63310,63311,63313,63315],{"class":96,"line":1634},[94,63312,51762],{"class":104},[94,63314,51777],{"class":51277},[94,63316,51284],{"class":104},[21980,63318,63320],{"id":63319},"_3263-trim方法","3.2.6.3 trim方法",[40,63322,63323],{},[1443,63324],{"alt":14,"src":63325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[40,63327,63328],{},[1443,63329],{"alt":14,"src":63330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[40,63332,63333],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[40,63335,63336],{},"str.trim()",[65,63338,63340],{"id":63339},"_327-环境对象","3.2.7 环境对象",[40,63342,63343],{},[1443,63344],{"alt":14,"src":63345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[40,63347,63348],{},[1443,63349],{"alt":14,"src":63350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[40,63352,63353],{},[1443,63354],{"alt":14,"src":63355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[40,63357,63358],{},"实际函数调用是window.fn()",[40,63360,63361],{},"普通函数里面this指向的是window",[1112,63363,63364,63367,63370],{},[51,63365,63366],{},"在普通函数下，this指向的是window",[51,63368,63369],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[51,63371,63372],{},"箭头函数没有this",[40,63374,63375],{},"粗略记法就是：谁调用，this就指向谁",[40,63377,63378],{},[1443,63379],{"alt":14,"src":63380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[40,63382,63383],{},[1443,63384],{"alt":14,"src":63385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[40,63387,63388],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[40,63390,63391],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[85,63393,63395],{"className":53044,"code":63394,"language":53046,"meta":14,"style":14},"\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",[91,63396,63397,63405,63417,63425,63430,63435,63440,63445,63449,63457],{"__ignoreMap":14},[94,63398,63399,63401,63403],{"class":96,"line":97},[94,63400,1015],{"class":104},[94,63402,51777],{"class":51277},[94,63404,51284],{"class":104},[94,63406,63407,63409,63411,63413,63415],{"class":96,"line":15},[94,63408,52121],{"class":104},[94,63410,53864],{"class":51277},[94,63412,53870],{"class":104},[94,63414,53864],{"class":51277},[94,63416,51284],{"class":104},[94,63418,63419,63421,63423],{"class":96,"line":1160},[94,63420,52121],{"class":104},[94,63422,51790],{"class":51277},[94,63424,51284],{"class":104},[94,63426,63427],{"class":96,"line":1175},[94,63428,63429],{"class":104},"    const button = document.querySelector('button')\n",[94,63431,63432],{"class":96,"line":1181},[94,63433,63434],{"class":104},"    button.addEventListener('click', function () {\n",[94,63436,63437],{"class":96,"line":1195},[94,63438,63439],{"class":104},"      \u002F\u002F console.log(this);\n",[94,63441,63442],{"class":96,"line":1201},[94,63443,63444],{"class":104},"      this.style.color = 'pink'\n",[94,63446,63447],{"class":96,"line":1292},[94,63448,33444],{"class":104},[94,63450,63451,63453,63455],{"class":96,"line":1298},[94,63452,52394],{"class":104},[94,63454,51790],{"class":51277},[94,63456,51284],{"class":104},[94,63458,63459,63461,63463],{"class":96,"line":1310},[94,63460,51762],{"class":104},[94,63462,51777],{"class":51277},[94,63464,51284],{"class":104},[65,63466,63468],{"id":63467},"_328-回调函数","3.2.8 回调函数",[40,63470,63471],{},[1443,63472],{"alt":14,"src":63473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[40,63475,63476],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[40,63478,11314],{},[1112,63480,63481,63484,63487],{},[51,63482,63483],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[51,63485,63486],{},"回调函数本质还是函数，只不过把它当成参数使用",[51,63488,63489],{},"使用匿名函数做为回调函数比较常见",[65,63491,63493],{"id":63492},"_329-tab栏切换","3.2.9 tab栏切换",[40,63495,63496],{},[1443,63497],{"alt":14,"src":63498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[85,63500,63502],{"className":50610,"code":63501,"language":50612,"meta":14,"style":14},"\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",[91,63503,63504,63514,63528,63532,63540,63554,63574,63594,63607,63615,63621,63631,63641,63645,63649,63656,63669,63682,63694,63710,63714,63718,63725,63737,63749,63761,63771,63781,63785,63789,63798,63810,63821,63833,63837,63841,63849,63859,63869,63879,63883,63887,63897,63911,63923,63927,63931,63943,63954,63971,63981,63985,63989,64004,64015,64025,64029,64033,64040,64055,64059,64063,64071,64081,64085,64089,64098,64108,64112,64120,64128,64132,64140,64155,64170,64183,64191,64225,64252,64279,64306,64333,64341,64349,64364,64401,64436,64471,64506,64541,64549,64557,64565,64570,64575,64595,64600,64629,64634,64639,64657,64662,64667,64672,64694,64699,64715,64719,64724,64729,64750,64755,64784,64788,64793,64797,64805,64813,64817],{"__ignoreMap":14},[94,63505,63506,63508,63510,63512],{"class":96,"line":97},[94,63507,51274],{"class":104},[94,63509,51278],{"class":51277},[94,63511,51281],{"class":1944},[94,63513,51284],{"class":104},[94,63515,63516,63518,63520,63522,63524,63526],{"class":96,"line":15},[94,63517,1015],{"class":104},[94,63519,50612],{"class":51277},[94,63521,51293],{"class":1944},[94,63523,150],{"class":104},[94,63525,51298],{"class":209},[94,63527,51284],{"class":104},[94,63529,63530],{"class":96,"line":1160},[94,63531,2381],{"emptyLinePlaceholder":20},[94,63533,63534,63536,63538],{"class":96,"line":1175},[94,63535,1015],{"class":104},[94,63537,51311],{"class":51277},[94,63539,51284],{"class":104},[94,63541,63542,63544,63546,63548,63550,63552],{"class":96,"line":1181},[94,63543,52121],{"class":104},[94,63545,51321],{"class":51277},[94,63547,51324],{"class":1944},[94,63549,150],{"class":104},[94,63551,51329],{"class":209},[94,63553,59104],{"class":104},[94,63555,63556,63558,63560,63562,63564,63566,63568,63570,63572],{"class":96,"line":1195},[94,63557,52121],{"class":104},[94,63559,51321],{"class":51277},[94,63561,51340],{"class":1944},[94,63563,150],{"class":104},[94,63565,51345],{"class":209},[94,63567,51348],{"class":1944},[94,63569,150],{"class":104},[94,63571,51353],{"class":209},[94,63573,59104],{"class":104},[94,63575,63576,63578,63580,63582,63584,63586,63588,63590,63592],{"class":96,"line":1201},[94,63577,52121],{"class":104},[94,63579,51321],{"class":51277},[94,63581,14902],{"class":1944},[94,63583,150],{"class":104},[94,63585,51368],{"class":209},[94,63587,51348],{"class":1944},[94,63589,150],{"class":104},[94,63591,51375],{"class":209},[94,63593,59104],{"class":104},[94,63595,63596,63598,63600,63603,63605],{"class":96,"line":1292},[94,63597,52121],{"class":104},[94,63599,51384],{"class":51277},[94,63601,63602],{"class":104},">tab栏切换\u003C\u002F",[94,63604,51384],{"class":51277},[94,63606,51284],{"class":104},[94,63608,63609,63611,63613],{"class":96,"line":1298},[94,63610,52121],{"class":104},[94,63612,5108],{"class":51277},[94,63614,51284],{"class":104},[94,63616,63617,63619],{"class":96,"line":1310},[94,63618,6385],{"class":51277},[94,63620,15554],{"class":104},[94,63622,63623,63625,63627,63629],{"class":96,"line":1593},[94,63624,54683],{"class":153},[94,63626,51414],{"class":104},[94,63628,296],{"class":153},[94,63630,1271],{"class":104},[94,63632,63633,63635,63637,63639],{"class":96,"line":1598},[94,63634,54672],{"class":153},[94,63636,51414],{"class":104},[94,63638,296],{"class":153},[94,63640,1271],{"class":104},[94,63642,63643],{"class":96,"line":1604},[94,63644,2168],{"class":104},[94,63646,63647],{"class":96,"line":1609},[94,63648,2381],{"emptyLinePlaceholder":20},[94,63650,63651,63654],{"class":96,"line":1623},[94,63652,63653],{"class":1944},"    .tab",[94,63655,15554],{"class":104},[94,63657,63658,63660,63662,63665,63667],{"class":96,"line":1628},[94,63659,54748],{"class":153},[94,63661,51414],{"class":104},[94,63663,63664],{"class":153},"590",[94,63666,51469],{"class":100},[94,63668,1271],{"class":104},[94,63670,63671,63673,63675,63678,63680],{"class":96,"line":1634},[94,63672,54762],{"class":153},[94,63674,51414],{"class":104},[94,63676,63677],{"class":153},"340",[94,63679,51469],{"class":100},[94,63681,1271],{"class":104},[94,63683,63684,63686,63688,63690,63692],{"class":96,"line":1655},[94,63685,54683],{"class":153},[94,63687,51414],{"class":104},[94,63689,805],{"class":153},[94,63691,51469],{"class":100},[94,63693,1271],{"class":104},[94,63695,63696,63698,63700,63702,63704,63706,63708],{"class":96,"line":1660},[94,63697,61954],{"class":153},[94,63699,51414],{"class":104},[94,63701,322],{"class":153},[94,63703,51469],{"class":100},[94,63705,51498],{"class":153},[94,63707,62221],{"class":153},[94,63709,1271],{"class":104},[94,63711,63712],{"class":96,"line":1674},[94,63713,2168],{"class":104},[94,63715,63716],{"class":96,"line":1679},[94,63717,2381],{"emptyLinePlaceholder":20},[94,63719,63720,63723],{"class":96,"line":1708},[94,63721,63722],{"class":1944},"    .tab-nav",[94,63724,15554],{"class":104},[94,63726,63727,63729,63731,63733,63735],{"class":96,"line":1713},[94,63728,54748],{"class":153},[94,63730,51414],{"class":104},[94,63732,416],{"class":153},[94,63734,433],{"class":100},[94,63736,1271],{"class":104},[94,63738,63739,63741,63743,63745,63747],{"class":96,"line":1730},[94,63740,54762],{"class":153},[94,63742,51414],{"class":104},[94,63744,1012],{"class":153},[94,63746,51469],{"class":100},[94,63748,1271],{"class":104},[94,63750,63751,63753,63755,63757,63759],{"class":96,"line":1735},[94,63752,57336],{"class":153},[94,63754,51414],{"class":104},[94,63756,1012],{"class":153},[94,63758,51469],{"class":100},[94,63760,1271],{"class":104},[94,63762,63763,63765,63767,63769],{"class":96,"line":1740},[94,63764,54986],{"class":153},[94,63766,51414],{"class":104},[94,63768,51454],{"class":153},[94,63770,1271],{"class":104},[94,63772,63773,63775,63777,63779],{"class":96,"line":1745},[94,63774,54997],{"class":153},[94,63776,51414],{"class":104},[94,63778,51645],{"class":153},[94,63780,1271],{"class":104},[94,63782,63783],{"class":96,"line":1759},[94,63784,2168],{"class":104},[94,63786,63787],{"class":96,"line":1764},[94,63788,2381],{"emptyLinePlaceholder":20},[94,63790,63791,63793,63796],{"class":96,"line":2558},[94,63792,63722],{"class":1944},[94,63794,63795],{"class":51277}," h3",[94,63797,15554],{"class":104},[94,63799,63800,63802,63804,63806,63808],{"class":96,"line":2572},[94,63801,54899],{"class":153},[94,63803,51414],{"class":104},[94,63805,905],{"class":153},[94,63807,51469],{"class":100},[94,63809,1271],{"class":104},[94,63811,63812,63814,63816,63819],{"class":96,"line":2580},[94,63813,62311],{"class":153},[94,63815,51414],{"class":104},[94,63817,63818],{"class":153},"normal",[94,63820,1271],{"class":104},[94,63822,63823,63825,63827,63829,63831],{"class":96,"line":2585},[94,63824,61977],{"class":153},[94,63826,51414],{"class":104},[94,63828,805],{"class":153},[94,63830,51469],{"class":100},[94,63832,1271],{"class":104},[94,63834,63835],{"class":96,"line":2591},[94,63836,2168],{"class":104},[94,63838,63839],{"class":96,"line":2597},[94,63840,2381],{"emptyLinePlaceholder":20},[94,63842,63843,63845,63847],{"class":96,"line":2602},[94,63844,63722],{"class":1944},[94,63846,61269],{"class":51277},[94,63848,15554],{"class":104},[94,63850,63851,63853,63855,63857],{"class":96,"line":7930},[94,63852,54709],{"class":153},[94,63854,51414],{"class":104},[94,63856,54714],{"class":153},[94,63858,1271],{"class":104},[94,63860,63861,63863,63865,63867],{"class":96,"line":7954},[94,63862,54986],{"class":153},[94,63864,51414],{"class":104},[94,63866,51454],{"class":153},[94,63868,1271],{"class":104},[94,63870,63871,63873,63875,63877],{"class":96,"line":7959},[94,63872,54997],{"class":153},[94,63874,51414],{"class":104},[94,63876,51557],{"class":153},[94,63878,1271],{"class":104},[94,63880,63881],{"class":96,"line":7965},[94,63882,2168],{"class":104},[94,63884,63885],{"class":96,"line":7992},[94,63886,2381],{"emptyLinePlaceholder":20},[94,63888,63889,63891,63893,63895],{"class":96,"line":7997},[94,63890,63722],{"class":1944},[94,63892,61269],{"class":51277},[94,63894,55052],{"class":51277},[94,63896,15554],{"class":104},[94,63898,63899,63901,63903,63905,63907,63909],{"class":96,"line":8003},[94,63900,54683],{"class":153},[94,63902,51414],{"class":104},[94,63904,296],{"class":153},[94,63906,8932],{"class":153},[94,63908,51469],{"class":100},[94,63910,1271],{"class":104},[94,63912,63913,63915,63917,63919,63921],{"class":96,"line":8015},[94,63914,54899],{"class":153},[94,63916,51414],{"class":104},[94,63918,654],{"class":153},[94,63920,51469],{"class":100},[94,63922,1271],{"class":104},[94,63924,63925],{"class":96,"line":8027},[94,63926,2168],{"class":104},[94,63928,63929],{"class":96,"line":8039},[94,63930,2381],{"emptyLinePlaceholder":20},[94,63932,63933,63935,63937,63939,63941],{"class":96,"line":9698},[94,63934,63722],{"class":1944},[94,63936,61269],{"class":51277},[94,63938,55052],{"class":51277},[94,63940,1379],{"class":51277},[94,63942,15554],{"class":104},[94,63944,63945,63948,63950,63952],{"class":96,"line":9723},[94,63946,63947],{"class":153},"      text-decoration",[94,63949,51414],{"class":104},[94,63951,54714],{"class":153},[94,63953,1271],{"class":104},[94,63955,63956,63958,63960,63962,63964,63966,63969],{"class":96,"line":9746},[94,63957,62209],{"class":153},[94,63959,51414],{"class":104},[94,63961,182],{"class":153},[94,63963,51469],{"class":100},[94,63965,51498],{"class":153},[94,63967,63968],{"class":153}," transparent",[94,63970,1271],{"class":104},[94,63972,63973,63975,63977,63979],{"class":96,"line":9770},[94,63974,57393],{"class":153},[94,63976,51414],{"class":104},[94,63978,62346],{"class":153},[94,63980,1271],{"class":104},[94,63982,63983],{"class":96,"line":9775},[94,63984,2168],{"class":104},[94,63986,63987],{"class":96,"line":9780},[94,63988,2381],{"emptyLinePlaceholder":20},[94,63990,63991,63993,63995,63997,63999,64002],{"class":96,"line":9785},[94,63992,63722],{"class":1944},[94,63994,61269],{"class":51277},[94,63996,55052],{"class":51277},[94,63998,1379],{"class":51277},[94,64000,64001],{"class":1944},".active",[94,64003,15554],{"class":104},[94,64005,64006,64008,64010,64013],{"class":96,"line":9794},[94,64007,61768],{"class":153},[94,64009,51414],{"class":104},[94,64011,64012],{"class":153},"#e1251b",[94,64014,1271],{"class":104},[94,64016,64017,64019,64021,64023],{"class":96,"line":9799},[94,64018,57393],{"class":153},[94,64020,51414],{"class":104},[94,64022,64012],{"class":153},[94,64024,1271],{"class":104},[94,64026,64027],{"class":96,"line":9805},[94,64028,2168],{"class":104},[94,64030,64031],{"class":96,"line":9826},[94,64032,2381],{"emptyLinePlaceholder":20},[94,64034,64035,64038],{"class":96,"line":9832},[94,64036,64037],{"class":1944},"    .tab-content",[94,64039,15554],{"class":104},[94,64041,64042,64044,64046,64048,64051,64053],{"class":96,"line":9846},[94,64043,54672],{"class":153},[94,64045,51414],{"class":104},[94,64047,296],{"class":153},[94,64049,64050],{"class":153}," 16",[94,64052,51469],{"class":100},[94,64054,1271],{"class":104},[94,64056,64057],{"class":96,"line":9852},[94,64058,2168],{"class":104},[94,64060,64061],{"class":96,"line":9879},[94,64062,2381],{"emptyLinePlaceholder":20},[94,64064,64065,64067,64069],{"class":96,"line":9888},[94,64066,64037],{"class":1944},[94,64068,62151],{"class":1944},[94,64070,15554],{"class":104},[94,64072,64073,64075,64077,64079],{"class":96,"line":9894},[94,64074,54986],{"class":153},[94,64076,51414],{"class":104},[94,64078,54714],{"class":153},[94,64080,1271],{"class":104},[94,64082,64083],{"class":96,"line":9902},[94,64084,2168],{"class":104},[94,64086,64087],{"class":96,"line":9907},[94,64088,2381],{"emptyLinePlaceholder":20},[94,64090,64091,64093,64096],{"class":96,"line":16586},[94,64092,64037],{"class":1944},[94,64094,64095],{"class":1944}," .item.active",[94,64097,15554],{"class":104},[94,64099,64100,64102,64104,64106],{"class":96,"line":16592},[94,64101,54986],{"class":153},[94,64103,51414],{"class":104},[94,64105,60846],{"class":153},[94,64107,1271],{"class":104},[94,64109,64110],{"class":96,"line":16615},[94,64111,2168],{"class":104},[94,64113,64114,64116,64118],{"class":96,"line":16621},[94,64115,52394],{"class":104},[94,64117,5108],{"class":51277},[94,64119,51284],{"class":104},[94,64121,64122,64124,64126],{"class":96,"line":16644},[94,64123,51762],{"class":104},[94,64125,51311],{"class":51277},[94,64127,51284],{"class":104},[94,64129,64130],{"class":96,"line":16658},[94,64131,2381],{"emptyLinePlaceholder":20},[94,64133,64134,64136,64138],{"class":96,"line":16678},[94,64135,1015],{"class":104},[94,64137,51777],{"class":51277},[94,64139,51284],{"class":104},[94,64141,64142,64144,64146,64148,64150,64153],{"class":96,"line":16684},[94,64143,52121],{"class":104},[94,64145,51588],{"class":51277},[94,64147,53463],{"class":1944},[94,64149,150],{"class":104},[94,64151,64152],{"class":209},"\"tab\"",[94,64154,51284],{"class":104},[94,64156,64157,64159,64161,64163,64165,64168],{"class":96,"line":16695},[94,64158,51318],{"class":104},[94,64160,51588],{"class":51277},[94,64162,53463],{"class":1944},[94,64164,150],{"class":104},[94,64166,64167],{"class":209},"\"tab-nav\"",[94,64169,51284],{"class":104},[94,64171,64172,64174,64176,64179,64181],{"class":96,"line":16718},[94,64173,55211],{"class":104},[94,64175,65],{"class":51277},[94,64177,64178],{"class":104},">每日特价\u003C\u002F",[94,64180,65],{"class":51277},[94,64182,51284],{"class":104},[94,64184,64185,64187,64189],{"class":96,"line":16740},[94,64186,55211],{"class":104},[94,64188,1112],{"class":51277},[94,64190,51284],{"class":104},[94,64192,64193,64195,64197,64199,64201,64203,64205,64207,64209,64211,64214,64217,64219,64221,64223],{"class":96,"line":16745},[94,64194,55279],{"class":104},[94,64196,51],{"class":51277},[94,64198,61029],{"class":104},[94,64200,343],{"class":51277},[94,64202,53463],{"class":1944},[94,64204,150],{"class":104},[94,64206,59683],{"class":209},[94,64208,61034],{"class":1944},[94,64210,150],{"class":104},[94,64212,64213],{"class":209},"\"javascript:;\"",[94,64215,64216],{"class":104},">精选\u003C\u002F",[94,64218,343],{"class":51277},[94,64220,55291],{"class":104},[94,64222,51],{"class":51277},[94,64224,51284],{"class":104},[94,64226,64227,64229,64231,64233,64235,64237,64239,64241,64244,64246,64248,64250],{"class":96,"line":16751},[94,64228,55279],{"class":104},[94,64230,51],{"class":51277},[94,64232,61029],{"class":104},[94,64234,343],{"class":51277},[94,64236,61034],{"class":1944},[94,64238,150],{"class":104},[94,64240,64213],{"class":209},[94,64242,64243],{"class":104},">美食\u003C\u002F",[94,64245,343],{"class":51277},[94,64247,55291],{"class":104},[94,64249,51],{"class":51277},[94,64251,51284],{"class":104},[94,64253,64254,64256,64258,64260,64262,64264,64266,64268,64271,64273,64275,64277],{"class":96,"line":16765},[94,64255,55279],{"class":104},[94,64257,51],{"class":51277},[94,64259,61029],{"class":104},[94,64261,343],{"class":51277},[94,64263,61034],{"class":1944},[94,64265,150],{"class":104},[94,64267,64213],{"class":209},[94,64269,64270],{"class":104},">百货\u003C\u002F",[94,64272,343],{"class":51277},[94,64274,55291],{"class":104},[94,64276,51],{"class":51277},[94,64278,51284],{"class":104},[94,64280,64281,64283,64285,64287,64289,64291,64293,64295,64298,64300,64302,64304],{"class":96,"line":16778},[94,64282,55279],{"class":104},[94,64284,51],{"class":51277},[94,64286,61029],{"class":104},[94,64288,343],{"class":51277},[94,64290,61034],{"class":1944},[94,64292,150],{"class":104},[94,64294,64213],{"class":209},[94,64296,64297],{"class":104},">个护\u003C\u002F",[94,64299,343],{"class":51277},[94,64301,55291],{"class":104},[94,64303,51],{"class":51277},[94,64305,51284],{"class":104},[94,64307,64308,64310,64312,64314,64316,64318,64320,64322,64325,64327,64329,64331],{"class":96,"line":16783},[94,64309,55279],{"class":104},[94,64311,51],{"class":51277},[94,64313,61029],{"class":104},[94,64315,343],{"class":51277},[94,64317,61034],{"class":1944},[94,64319,150],{"class":104},[94,64321,64213],{"class":209},[94,64323,64324],{"class":104},">预告\u003C\u002F",[94,64326,343],{"class":51277},[94,64328,55291],{"class":104},[94,64330,51],{"class":51277},[94,64332,51284],{"class":104},[94,64334,64335,64337,64339],{"class":96,"line":16797},[94,64336,55384],{"class":104},[94,64338,1112],{"class":51277},[94,64340,51284],{"class":104},[94,64342,64343,64345,64347],{"class":96,"line":16802},[94,64344,51753],{"class":104},[94,64346,51588],{"class":51277},[94,64348,51284],{"class":104},[94,64350,64351,64353,64355,64357,64359,64362],{"class":96,"line":16808},[94,64352,51318],{"class":104},[94,64354,51588],{"class":51277},[94,64356,53463],{"class":1944},[94,64358,150],{"class":104},[94,64360,64361],{"class":209},"\"tab-content\"",[94,64363,51284],{"class":104},[94,64365,64366,64368,64370,64372,64374,64377,64379,64381,64383,64385,64388,64390,64392,64394,64397,64399],{"class":96,"line":16813},[94,64367,55211],{"class":104},[94,64369,51588],{"class":51277},[94,64371,53463],{"class":1944},[94,64373,150],{"class":104},[94,64375,64376],{"class":209},"\"item active\"",[94,64378,61029],{"class":104},[94,64380,1443],{"class":51277},[94,64382,55216],{"class":1944},[94,64384,150],{"class":104},[94,64386,64387],{"class":209},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[94,64389,55224],{"class":1944},[94,64391,150],{"class":104},[94,64393,7634],{"class":209},[94,64395,64396],{"class":104}," \u002F>\u003C\u002F",[94,64398,51588],{"class":51277},[94,64400,51284],{"class":104},[94,64402,64403,64405,64407,64409,64411,64413,64415,64417,64419,64421,64424,64426,64428,64430,64432,64434],{"class":96,"line":16827},[94,64404,55211],{"class":104},[94,64406,51588],{"class":51277},[94,64408,53463],{"class":1944},[94,64410,150],{"class":104},[94,64412,62600],{"class":209},[94,64414,61029],{"class":104},[94,64416,1443],{"class":51277},[94,64418,55216],{"class":1944},[94,64420,150],{"class":104},[94,64422,64423],{"class":209},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[94,64425,55224],{"class":1944},[94,64427,150],{"class":104},[94,64429,7634],{"class":209},[94,64431,64396],{"class":104},[94,64433,51588],{"class":51277},[94,64435,51284],{"class":104},[94,64437,64438,64440,64442,64444,64446,64448,64450,64452,64454,64456,64459,64461,64463,64465,64467,64469],{"class":96,"line":16832},[94,64439,55211],{"class":104},[94,64441,51588],{"class":51277},[94,64443,53463],{"class":1944},[94,64445,150],{"class":104},[94,64447,62600],{"class":209},[94,64449,61029],{"class":104},[94,64451,1443],{"class":51277},[94,64453,55216],{"class":1944},[94,64455,150],{"class":104},[94,64457,64458],{"class":209},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[94,64460,55224],{"class":1944},[94,64462,150],{"class":104},[94,64464,7634],{"class":209},[94,64466,64396],{"class":104},[94,64468,51588],{"class":51277},[94,64470,51284],{"class":104},[94,64472,64473,64475,64477,64479,64481,64483,64485,64487,64489,64491,64494,64496,64498,64500,64502,64504],{"class":96,"line":16837},[94,64474,55211],{"class":104},[94,64476,51588],{"class":51277},[94,64478,53463],{"class":1944},[94,64480,150],{"class":104},[94,64482,62600],{"class":209},[94,64484,61029],{"class":104},[94,64486,1443],{"class":51277},[94,64488,55216],{"class":1944},[94,64490,150],{"class":104},[94,64492,64493],{"class":209},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[94,64495,55224],{"class":1944},[94,64497,150],{"class":104},[94,64499,7634],{"class":209},[94,64501,64396],{"class":104},[94,64503,51588],{"class":51277},[94,64505,51284],{"class":104},[94,64507,64508,64510,64512,64514,64516,64518,64520,64522,64524,64526,64529,64531,64533,64535,64537,64539],{"class":96,"line":16851},[94,64509,55211],{"class":104},[94,64511,51588],{"class":51277},[94,64513,53463],{"class":1944},[94,64515,150],{"class":104},[94,64517,62600],{"class":209},[94,64519,61029],{"class":104},[94,64521,1443],{"class":51277},[94,64523,55216],{"class":1944},[94,64525,150],{"class":104},[94,64527,64528],{"class":209},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[94,64530,55224],{"class":1944},[94,64532,150],{"class":104},[94,64534,7634],{"class":209},[94,64536,64396],{"class":104},[94,64538,51588],{"class":51277},[94,64540,51284],{"class":104},[94,64542,64543,64545,64547],{"class":96,"line":16863},[94,64544,51753],{"class":104},[94,64546,51588],{"class":51277},[94,64548,51284],{"class":104},[94,64550,64551,64553,64555],{"class":96,"line":16868},[94,64552,52394],{"class":104},[94,64554,51588],{"class":51277},[94,64556,51284],{"class":104},[94,64558,64559,64561,64563],{"class":96,"line":16881},[94,64560,52121],{"class":104},[94,64562,51790],{"class":51277},[94,64564,51284],{"class":104},[94,64566,64567],{"class":96,"line":16886},[94,64568,64569],{"class":163},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[94,64571,64572],{"class":96,"line":16891},[94,64573,64574],{"class":163},"    \u002F\u002F 1.1 获取 a 元素 \n",[94,64576,64577,64579,64582,64584,64586,64588,64590,64593],{"class":96,"line":16896},[94,64578,11203],{"class":100},[94,64580,64581],{"class":153}," as",[94,64583,13546],{"class":100},[94,64585,54373],{"class":104},[94,64587,55658],{"class":1944},[94,64589,105],{"class":104},[94,64591,64592],{"class":209},"'.tab-nav a'",[94,64594,111],{"class":104},[94,64596,64597],{"class":96,"line":16909},[94,64598,64599],{"class":163},"    \u002F\u002F console.log(as) \n",[94,64601,64602,64604,64606,64608,64610,64612,64614,64616,64618,64621,64623,64625,64627],{"class":96,"line":16914},[94,64603,3182],{"class":100},[94,64605,1639],{"class":104},[94,64607,51824],{"class":100},[94,64609,9420],{"class":104},[94,64611,150],{"class":100},[94,64613,4074],{"class":153},[94,64615,9427],{"class":104},[94,64617,1015],{"class":100},[94,64619,64620],{"class":104}," as.",[94,64622,51945],{"class":153},[94,64624,3195],{"class":104},[94,64626,2273],{"class":100},[94,64628,12424],{"class":104},[94,64630,64631],{"class":96,"line":32616},[94,64632,64633],{"class":163},"      \u002F\u002F console.log(as[i])\n",[94,64635,64636],{"class":96,"line":32622},[94,64637,64638],{"class":163},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[94,64640,64641,64644,64646,64648,64651,64653,64655],{"class":96,"line":32628},[94,64642,64643],{"class":104},"      as[i].",[94,64645,57790],{"class":1944},[94,64647,105],{"class":104},[94,64649,64650],{"class":209},"'mouseenter'",[94,64652,12417],{"class":104},[94,64654,54426],{"class":100},[94,64656,54429],{"class":104},[94,64658,64659],{"class":96,"line":32634},[94,64660,64661],{"class":163},"        \u002F\u002F console.log('鼠标经过')\n",[94,64663,64664],{"class":96,"line":32640},[94,64665,64666],{"class":163},"        \u002F\u002F 排他思想  \n",[94,64668,64669],{"class":96,"line":32651},[94,64670,64671],{"class":163},"        \u002F\u002F 干掉别人 移除类active\n",[94,64673,64674,64676,64678,64680,64683,64685,64687,64689,64692],{"class":96,"line":32657},[94,64675,51902],{"class":104},[94,64677,54376],{"class":1944},[94,64679,105],{"class":104},[94,64681,64682],{"class":209},"'.tab-nav .active'",[94,64684,56980],{"class":104},[94,64686,56983],{"class":1944},[94,64688,105],{"class":104},[94,64690,64691],{"class":209},"'active'",[94,64693,111],{"class":104},[94,64695,64696],{"class":96,"line":32677},[94,64697,64698],{"class":163},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[94,64700,64701,64704,64707,64709,64711,64713],{"class":96,"line":32683},[94,64702,64703],{"class":153},"        this",[94,64705,64706],{"class":104},".classList.",[94,64708,5316],{"class":1944},[94,64710,105],{"class":104},[94,64712,64691],{"class":209},[94,64714,111],{"class":104},[94,64716,64717],{"class":96,"line":32694},[94,64718,2381],{"emptyLinePlaceholder":20},[94,64720,64721],{"class":96,"line":32700},[94,64722,64723],{"class":163},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[94,64725,64726],{"class":96,"line":32706},[94,64727,64728],{"class":163},"        \u002F\u002F 干掉别人\n",[94,64730,64731,64733,64735,64737,64740,64742,64744,64746,64748],{"class":96,"line":32712},[94,64732,51902],{"class":104},[94,64734,54376],{"class":1944},[94,64736,105],{"class":104},[94,64738,64739],{"class":209},"'.tab-content .active'",[94,64741,56980],{"class":104},[94,64743,56983],{"class":1944},[94,64745,105],{"class":104},[94,64747,64691],{"class":209},[94,64749,111],{"class":104},[94,64751,64752],{"class":96,"line":32718},[94,64753,64754],{"class":163},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[94,64756,64757,64759,64761,64763,64766,64768,64770,64772,64774,64776,64778,64780,64782],{"class":96,"line":32724},[94,64758,51902],{"class":104},[94,64760,54376],{"class":1944},[94,64762,105],{"class":104},[94,64764,64765],{"class":209},"`.tab-content .item:nth-child(${",[94,64767,546],{"class":104},[94,64769,45549],{"class":100},[94,64771,25101],{"class":153},[94,64773,57009],{"class":209},[94,64775,56980],{"class":104},[94,64777,5316],{"class":1944},[94,64779,105],{"class":104},[94,64781,64691],{"class":209},[94,64783,111],{"class":104},[94,64785,64786],{"class":96,"line":32730},[94,64787,2381],{"emptyLinePlaceholder":20},[94,64789,64790],{"class":96,"line":32736},[94,64791,64792],{"class":104},"      })\n",[94,64794,64795],{"class":96,"line":32756},[94,64796,2168],{"class":104},[94,64798,64799,64801,64803],{"class":96,"line":32762},[94,64800,52394],{"class":104},[94,64802,51790],{"class":51277},[94,64804,51284],{"class":104},[94,64806,64807,64809,64811],{"class":96,"line":32778},[94,64808,51762],{"class":104},[94,64810,51777],{"class":51277},[94,64812,51284],{"class":104},[94,64814,64815],{"class":96,"line":32784},[94,64816,2381],{"emptyLinePlaceholder":20},[94,64818,64819,64821,64823],{"class":96,"line":32798},[94,64820,51762],{"class":104},[94,64822,50612],{"class":51277},[94,64824,51284],{"class":104},[40,64826,64827],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[40,64829,64830],{},"在监听事件中，this指向的就是他的调用者",[40,64832,64833],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[40,64835,53697],{},[40,64837,64838],{},"(function () {",[40,64840,64841],{},"const list = document.querySelector('.xtx-elevator-list')",[40,64843,64844],{},"list.addEventListener('click', function (e) {",[40,64846,64847],{},"if (e.target.tagName === 'A') {",[40,64849,64850],{},"\u002F\u002F 排他思想",[40,64852,64853],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[40,64855,64856],{},"const old = document.querySelector('.xtx-elevator-list .active')",[40,64858,64859],{},"\u002F\u002F console.log(old);",[40,64861,64862],{},"\u002F\u002F 判断",[40,64864,64865],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[40,64867,64868],{},"if (old) old.classList.remove('active')",[40,64870,64871],{},"e.target.classList.add('active')",[40,64873,1051],{},[40,64875,52441],{},[40,64877,64878],{},"})();",[65,64880,64882],{"id":64881},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[85,64884,64886],{"className":50610,"code":64885,"language":50612,"meta":14,"style":14},"\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",[91,64887,64888,64898,64902,64910,64914,64928,64942,64954,64962,64968,64978,64988,64992,64996,65003,65015,65026,65043,65056,65070,65080,65084,65088,65095,65106,65124,65134,65146,65150,65154,65161,65178,65189,65201,65205,65209,65216,65228,65232,65240,65248,65252,65260,65268,65276,65291,65335,65343,65356,65369,65382,65390,65398,65406,65434,65442,65454,65467,65480,65488,65496,65504,65530,65538,65551,65563,65576,65584,65592,65600,65626,65634,65647,65659,65672,65680,65688,65696,65701,65721,65726,65746,65751,65768,65773,65781,65786,65815,65828,65832,65836,65841,65845,65873,65878,65895,65900,65905,65910,65915,65941,65945,65949,65957,65965,65969],{"__ignoreMap":14},[94,64889,64890,64892,64894,64896],{"class":96,"line":97},[94,64891,51274],{"class":104},[94,64893,51278],{"class":51277},[94,64895,51281],{"class":1944},[94,64897,51284],{"class":104},[94,64899,64900],{"class":96,"line":15},[94,64901,2381],{"emptyLinePlaceholder":20},[94,64903,64904,64906,64908],{"class":96,"line":1160},[94,64905,1015],{"class":104},[94,64907,50612],{"class":51277},[94,64909,51284],{"class":104},[94,64911,64912],{"class":96,"line":1175},[94,64913,2381],{"emptyLinePlaceholder":20},[94,64915,64916,64918,64920,64922,64924,64926],{"class":96,"line":1181},[94,64917,1015],{"class":104},[94,64919,51311],{"class":51277},[94,64921,51293],{"class":1944},[94,64923,150],{"class":104},[94,64925,51298],{"class":209},[94,64927,51284],{"class":104},[94,64929,64930,64932,64934,64936,64938,64940],{"class":96,"line":1195},[94,64931,52121],{"class":104},[94,64933,51321],{"class":51277},[94,64935,51324],{"class":1944},[94,64937,150],{"class":104},[94,64939,51329],{"class":209},[94,64941,51284],{"class":104},[94,64943,64944,64946,64948,64950,64952],{"class":96,"line":1201},[94,64945,52121],{"class":104},[94,64947,51384],{"class":51277},[94,64949,55291],{"class":104},[94,64951,51384],{"class":51277},[94,64953,51284],{"class":104},[94,64955,64956,64958,64960],{"class":96,"line":1292},[94,64957,52121],{"class":104},[94,64959,5108],{"class":51277},[94,64961,51284],{"class":104},[94,64963,64964,64966],{"class":96,"line":1298},[94,64965,6385],{"class":51277},[94,64967,15554],{"class":104},[94,64969,64970,64972,64974,64976],{"class":96,"line":1310},[94,64971,54683],{"class":153},[94,64973,51414],{"class":104},[94,64975,296],{"class":153},[94,64977,1271],{"class":104},[94,64979,64980,64982,64984,64986],{"class":96,"line":1593},[94,64981,54672],{"class":153},[94,64983,51414],{"class":104},[94,64985,296],{"class":153},[94,64987,1271],{"class":104},[94,64989,64990],{"class":96,"line":1598},[94,64991,2168],{"class":104},[94,64993,64994],{"class":96,"line":1604},[94,64995,2381],{"emptyLinePlaceholder":20},[94,64997,64998,65001],{"class":96,"line":1609},[94,64999,65000],{"class":51277},"    table",[94,65002,15554],{"class":104},[94,65004,65005,65008,65010,65013],{"class":96,"line":1623},[94,65006,65007],{"class":153},"      border-collapse",[94,65009,51414],{"class":104},[94,65011,65012],{"class":153},"collapse",[94,65014,1271],{"class":104},[94,65016,65017,65020,65022,65024],{"class":96,"line":1628},[94,65018,65019],{"class":153},"      border-spacing",[94,65021,51414],{"class":104},[94,65023,296],{"class":153},[94,65025,1271],{"class":104},[94,65027,65028,65030,65032,65034,65036,65038,65041],{"class":96,"line":1634},[94,65029,61954],{"class":153},[94,65031,51414],{"class":104},[94,65033,322],{"class":153},[94,65035,51469],{"class":100},[94,65037,51498],{"class":153},[94,65039,65040],{"class":153}," #c0c0c0",[94,65042,1271],{"class":104},[94,65044,65045,65047,65049,65052,65054],{"class":96,"line":1655},[94,65046,54748],{"class":153},[94,65048,51414],{"class":104},[94,65050,65051],{"class":153},"500",[94,65053,51469],{"class":100},[94,65055,1271],{"class":104},[94,65057,65058,65060,65062,65064,65066,65068],{"class":96,"line":1660},[94,65059,54683],{"class":153},[94,65061,51414],{"class":104},[94,65063,416],{"class":153},[94,65065,51469],{"class":100},[94,65067,51533],{"class":153},[94,65069,1271],{"class":104},[94,65071,65072,65074,65076,65078],{"class":96,"line":1674},[94,65073,57263],{"class":153},[94,65075,51414],{"class":104},[94,65077,51569],{"class":153},[94,65079,1271],{"class":104},[94,65081,65082],{"class":96,"line":1679},[94,65083,2168],{"class":104},[94,65085,65086],{"class":96,"line":1708},[94,65087,2381],{"emptyLinePlaceholder":20},[94,65089,65090,65093],{"class":96,"line":1713},[94,65091,65092],{"class":51277},"    th",[94,65094,15554],{"class":104},[94,65096,65097,65099,65101,65104],{"class":96,"line":1730},[94,65098,54861],{"class":153},[94,65100,51414],{"class":104},[94,65102,65103],{"class":153},"#09c",[94,65105,1271],{"class":104},[94,65107,65108,65111,65113,65115,65117,65119,65122],{"class":96,"line":1735},[94,65109,65110],{"class":153},"      font",[94,65112,51414],{"class":104},[94,65114,62316],{"class":153},[94,65116,64050],{"class":153},[94,65118,51469],{"class":100},[94,65120,65121],{"class":209}," \"微软雅黑\"",[94,65123,1271],{"class":104},[94,65125,65126,65128,65130,65132],{"class":96,"line":1740},[94,65127,57393],{"class":153},[94,65129,51414],{"class":104},[94,65131,60819],{"class":153},[94,65133,1271],{"class":104},[94,65135,65136,65138,65140,65142,65144],{"class":96,"line":1745},[94,65137,54762],{"class":153},[94,65139,51414],{"class":104},[94,65141,905],{"class":153},[94,65143,51469],{"class":100},[94,65145,1271],{"class":104},[94,65147,65148],{"class":96,"line":1759},[94,65149,2168],{"class":104},[94,65151,65152],{"class":96,"line":1764},[94,65153,2381],{"emptyLinePlaceholder":20},[94,65155,65156,65159],{"class":96,"line":2558},[94,65157,65158],{"class":51277},"    td",[94,65160,15554],{"class":104},[94,65162,65163,65165,65167,65169,65171,65173,65176],{"class":96,"line":2572},[94,65164,61954],{"class":153},[94,65166,51414],{"class":104},[94,65168,322],{"class":153},[94,65170,51469],{"class":100},[94,65172,51498],{"class":153},[94,65174,65175],{"class":153}," #d0d0d0",[94,65177,1271],{"class":104},[94,65179,65180,65182,65184,65187],{"class":96,"line":2580},[94,65181,57393],{"class":153},[94,65183,51414],{"class":104},[94,65185,65186],{"class":153},"#404060",[94,65188,1271],{"class":104},[94,65190,65191,65193,65195,65197,65199],{"class":96,"line":2585},[94,65192,54672],{"class":153},[94,65194,51414],{"class":104},[94,65196,551],{"class":153},[94,65198,51469],{"class":100},[94,65200,1271],{"class":104},[94,65202,65203],{"class":96,"line":2591},[94,65204,2168],{"class":104},[94,65206,65207],{"class":96,"line":2597},[94,65208,2381],{"emptyLinePlaceholder":20},[94,65210,65211,65214],{"class":96,"line":2602},[94,65212,65213],{"class":1944},"    .allCheck",[94,65215,15554],{"class":104},[94,65217,65218,65220,65222,65224,65226],{"class":96,"line":7930},[94,65219,54748],{"class":153},[94,65221,51414],{"class":104},[94,65223,717],{"class":153},[94,65225,51469],{"class":100},[94,65227,1271],{"class":104},[94,65229,65230],{"class":96,"line":7954},[94,65231,2168],{"class":104},[94,65233,65234,65236,65238],{"class":96,"line":7959},[94,65235,52394],{"class":104},[94,65237,5108],{"class":51277},[94,65239,51284],{"class":104},[94,65241,65242,65244,65246],{"class":96,"line":7965},[94,65243,51762],{"class":104},[94,65245,51311],{"class":51277},[94,65247,51284],{"class":104},[94,65249,65250],{"class":96,"line":7992},[94,65251,2381],{"emptyLinePlaceholder":20},[94,65253,65254,65256,65258],{"class":96,"line":7997},[94,65255,1015],{"class":104},[94,65257,51777],{"class":51277},[94,65259,51284],{"class":104},[94,65261,65262,65264,65266],{"class":96,"line":8003},[94,65263,52121],{"class":104},[94,65265,242],{"class":51277},[94,65267,51284],{"class":104},[94,65269,65270,65272,65274],{"class":96,"line":8015},[94,65271,51318],{"class":104},[94,65273,248],{"class":51277},[94,65275,51284],{"class":104},[94,65277,65278,65280,65282,65284,65286,65289],{"class":96,"line":8027},[94,65279,55211],{"class":104},[94,65281,251],{"class":51277},[94,65283,53463],{"class":1944},[94,65285,150],{"class":104},[94,65287,65288],{"class":209},"\"allCheck\"",[94,65290,51284],{"class":104},[94,65292,65293,65295,65297,65299,65301,65303,65305,65307,65309,65311,65313,65316,65319,65321,65323,65325,65328,65331,65333],{"class":96,"line":8039},[94,65294,55279],{"class":104},[94,65296,53798],{"class":51277},[94,65298,53801],{"class":1944},[94,65300,150],{"class":104},[94,65302,53806],{"class":209},[94,65304,14902],{"class":1944},[94,65306,150],{"class":104},[94,65308,7634],{"class":209},[94,65310,14941],{"class":1944},[94,65312,150],{"class":104},[94,65314,65315],{"class":209},"\"checkAll\"",[94,65317,65318],{"class":104},"> \u003C",[94,65320,94],{"class":51277},[94,65322,53463],{"class":1944},[94,65324,150],{"class":104},[94,65326,65327],{"class":209},"\"all\"",[94,65329,65330],{"class":104},">全选\u003C\u002F",[94,65332,94],{"class":51277},[94,65334,51284],{"class":104},[94,65336,65337,65339,65341],{"class":96,"line":9698},[94,65338,55384],{"class":104},[94,65340,251],{"class":51277},[94,65342,51284],{"class":104},[94,65344,65345,65347,65349,65352,65354],{"class":96,"line":9723},[94,65346,55211],{"class":104},[94,65348,251],{"class":51277},[94,65350,65351],{"class":104},">商品\u003C\u002F",[94,65353,251],{"class":51277},[94,65355,51284],{"class":104},[94,65357,65358,65360,65362,65365,65367],{"class":96,"line":9746},[94,65359,55211],{"class":104},[94,65361,251],{"class":51277},[94,65363,65364],{"class":104},">商家\u003C\u002F",[94,65366,251],{"class":51277},[94,65368,51284],{"class":104},[94,65370,65371,65373,65375,65378,65380],{"class":96,"line":9770},[94,65372,55211],{"class":104},[94,65374,251],{"class":51277},[94,65376,65377],{"class":104},">价格\u003C\u002F",[94,65379,251],{"class":51277},[94,65381,51284],{"class":104},[94,65383,65384,65386,65388],{"class":96,"line":9775},[94,65385,51753],{"class":104},[94,65387,248],{"class":51277},[94,65389,51284],{"class":104},[94,65391,65392,65394,65396],{"class":96,"line":9780},[94,65393,51318],{"class":104},[94,65395,248],{"class":51277},[94,65397,51284],{"class":104},[94,65399,65400,65402,65404],{"class":96,"line":9785},[94,65401,55211],{"class":104},[94,65403,294],{"class":51277},[94,65405,51284],{"class":104},[94,65407,65408,65410,65412,65414,65416,65418,65420,65422,65425,65427,65429,65432],{"class":96,"line":9794},[94,65409,55279],{"class":104},[94,65411,53798],{"class":51277},[94,65413,53801],{"class":1944},[94,65415,150],{"class":104},[94,65417,53806],{"class":209},[94,65419,14902],{"class":1944},[94,65421,150],{"class":104},[94,65423,65424],{"class":209},"\"check\"",[94,65426,53463],{"class":1944},[94,65428,150],{"class":104},[94,65430,65431],{"class":209},"\"ck\"",[94,65433,51284],{"class":104},[94,65435,65436,65438,65440],{"class":96,"line":9799},[94,65437,55384],{"class":104},[94,65439,294],{"class":51277},[94,65441,51284],{"class":104},[94,65443,65444,65446,65448,65450,65452],{"class":96,"line":9805},[94,65445,55211],{"class":104},[94,65447,294],{"class":51277},[94,65449,61150],{"class":104},[94,65451,294],{"class":51277},[94,65453,51284],{"class":104},[94,65455,65456,65458,65460,65463,65465],{"class":96,"line":9826},[94,65457,55211],{"class":104},[94,65459,294],{"class":51277},[94,65461,65462],{"class":104},">小米\u003C\u002F",[94,65464,294],{"class":51277},[94,65466,51284],{"class":104},[94,65468,65469,65471,65473,65476,65478],{"class":96,"line":9832},[94,65470,55211],{"class":104},[94,65472,294],{"class":51277},[94,65474,65475],{"class":104},">￥1999\u003C\u002F",[94,65477,294],{"class":51277},[94,65479,51284],{"class":104},[94,65481,65482,65484,65486],{"class":96,"line":9846},[94,65483,51753],{"class":104},[94,65485,248],{"class":51277},[94,65487,51284],{"class":104},[94,65489,65490,65492,65494],{"class":96,"line":9852},[94,65491,51318],{"class":104},[94,65493,248],{"class":51277},[94,65495,51284],{"class":104},[94,65497,65498,65500,65502],{"class":96,"line":9879},[94,65499,55211],{"class":104},[94,65501,294],{"class":51277},[94,65503,51284],{"class":104},[94,65505,65506,65508,65510,65512,65514,65516,65518,65520,65522,65524,65526,65528],{"class":96,"line":9888},[94,65507,55279],{"class":104},[94,65509,53798],{"class":51277},[94,65511,53801],{"class":1944},[94,65513,150],{"class":104},[94,65515,53806],{"class":209},[94,65517,14902],{"class":1944},[94,65519,150],{"class":104},[94,65521,65424],{"class":209},[94,65523,53463],{"class":1944},[94,65525,150],{"class":104},[94,65527,65431],{"class":209},[94,65529,51284],{"class":104},[94,65531,65532,65534,65536],{"class":96,"line":9894},[94,65533,55384],{"class":104},[94,65535,294],{"class":51277},[94,65537,51284],{"class":104},[94,65539,65540,65542,65544,65547,65549],{"class":96,"line":9902},[94,65541,55211],{"class":104},[94,65543,294],{"class":51277},[94,65545,65546],{"class":104},">小米净水器\u003C\u002F",[94,65548,294],{"class":51277},[94,65550,51284],{"class":104},[94,65552,65553,65555,65557,65559,65561],{"class":96,"line":9907},[94,65554,55211],{"class":104},[94,65556,294],{"class":51277},[94,65558,65462],{"class":104},[94,65560,294],{"class":51277},[94,65562,51284],{"class":104},[94,65564,65565,65567,65569,65572,65574],{"class":96,"line":16586},[94,65566,55211],{"class":104},[94,65568,294],{"class":51277},[94,65570,65571],{"class":104},">￥4999\u003C\u002F",[94,65573,294],{"class":51277},[94,65575,51284],{"class":104},[94,65577,65578,65580,65582],{"class":96,"line":16592},[94,65579,51753],{"class":104},[94,65581,248],{"class":51277},[94,65583,51284],{"class":104},[94,65585,65586,65588,65590],{"class":96,"line":16615},[94,65587,51318],{"class":104},[94,65589,248],{"class":51277},[94,65591,51284],{"class":104},[94,65593,65594,65596,65598],{"class":96,"line":16621},[94,65595,55211],{"class":104},[94,65597,294],{"class":51277},[94,65599,51284],{"class":104},[94,65601,65602,65604,65606,65608,65610,65612,65614,65616,65618,65620,65622,65624],{"class":96,"line":16644},[94,65603,55279],{"class":104},[94,65605,53798],{"class":51277},[94,65607,53801],{"class":1944},[94,65609,150],{"class":104},[94,65611,53806],{"class":209},[94,65613,14902],{"class":1944},[94,65615,150],{"class":104},[94,65617,65424],{"class":209},[94,65619,53463],{"class":1944},[94,65621,150],{"class":104},[94,65623,65431],{"class":209},[94,65625,51284],{"class":104},[94,65627,65628,65630,65632],{"class":96,"line":16658},[94,65629,55384],{"class":104},[94,65631,294],{"class":51277},[94,65633,51284],{"class":104},[94,65635,65636,65638,65640,65643,65645],{"class":96,"line":16678},[94,65637,55211],{"class":104},[94,65639,294],{"class":51277},[94,65641,65642],{"class":104},">小米电视\u003C\u002F",[94,65644,294],{"class":51277},[94,65646,51284],{"class":104},[94,65648,65649,65651,65653,65655,65657],{"class":96,"line":16684},[94,65650,55211],{"class":104},[94,65652,294],{"class":51277},[94,65654,65462],{"class":104},[94,65656,294],{"class":51277},[94,65658,51284],{"class":104},[94,65660,65661,65663,65665,65668,65670],{"class":96,"line":16695},[94,65662,55211],{"class":104},[94,65664,294],{"class":51277},[94,65666,65667],{"class":104},">￥5999\u003C\u002F",[94,65669,294],{"class":51277},[94,65671,51284],{"class":104},[94,65673,65674,65676,65678],{"class":96,"line":16718},[94,65675,51753],{"class":104},[94,65677,248],{"class":51277},[94,65679,51284],{"class":104},[94,65681,65682,65684,65686],{"class":96,"line":16740},[94,65683,52394],{"class":104},[94,65685,242],{"class":51277},[94,65687,51284],{"class":104},[94,65689,65690,65692,65694],{"class":96,"line":16745},[94,65691,52121],{"class":104},[94,65693,51790],{"class":51277},[94,65695,51284],{"class":104},[94,65697,65698],{"class":96,"line":16751},[94,65699,65700],{"class":163},"    \u002F\u002F 1. 获取大复选框\n",[94,65702,65703,65705,65708,65710,65712,65714,65716,65719],{"class":96,"line":16765},[94,65704,11203],{"class":100},[94,65706,65707],{"class":153}," checkAll",[94,65709,13546],{"class":100},[94,65711,54373],{"class":104},[94,65713,54376],{"class":1944},[94,65715,105],{"class":104},[94,65717,65718],{"class":209},"'#checkAll'",[94,65720,111],{"class":104},[94,65722,65723],{"class":96,"line":16778},[94,65724,65725],{"class":163},"    \u002F\u002F 2. 获取所有的小复选框\n",[94,65727,65728,65730,65733,65735,65737,65739,65741,65744],{"class":96,"line":16783},[94,65729,11203],{"class":100},[94,65731,65732],{"class":153}," cks",[94,65734,13546],{"class":100},[94,65736,54373],{"class":104},[94,65738,55658],{"class":1944},[94,65740,105],{"class":104},[94,65742,65743],{"class":209},"'.ck'",[94,65745,111],{"class":104},[94,65747,65748],{"class":96,"line":16797},[94,65749,65750],{"class":163},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[94,65752,65753,65756,65758,65760,65762,65764,65766],{"class":96,"line":16802},[94,65754,65755],{"class":104},"    checkAll.",[94,65757,57790],{"class":1944},[94,65759,105],{"class":104},[94,65761,57795],{"class":209},[94,65763,12417],{"class":104},[94,65765,54426],{"class":100},[94,65767,54429],{"class":104},[94,65769,65770],{"class":96,"line":16808},[94,65771,65772],{"class":163},"      \u002F\u002F 得到当前大复选框的选中状态\n",[94,65774,65775,65778],{"class":96,"line":16813},[94,65776,65777],{"class":163},"      \u002F\u002F console.log(checkAll.checked)",[94,65779,65780],{"class":163},"  \u002F\u002F 得到 是 true 或者是 false\n",[94,65782,65783],{"class":96,"line":16827},[94,65784,65785],{"class":163},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[94,65787,65788,65790,65792,65794,65796,65798,65800,65802,65804,65807,65809,65811,65813],{"class":96,"line":16832},[94,65789,52261],{"class":100},[94,65791,1639],{"class":104},[94,65793,51824],{"class":100},[94,65795,9420],{"class":104},[94,65797,150],{"class":100},[94,65799,4074],{"class":153},[94,65801,9427],{"class":104},[94,65803,1015],{"class":100},[94,65805,65806],{"class":104}," cks.",[94,65808,51945],{"class":153},[94,65810,3195],{"class":104},[94,65812,2273],{"class":100},[94,65814,12424],{"class":104},[94,65816,65817,65820,65822,65825],{"class":96,"line":16837},[94,65818,65819],{"class":104},"        cks[i].checked ",[94,65821,150],{"class":100},[94,65823,65824],{"class":153}," this",[94,65826,65827],{"class":104},".checked\n",[94,65829,65830],{"class":96,"line":16851},[94,65831,52375],{"class":104},[94,65833,65834],{"class":96,"line":16863},[94,65835,33444],{"class":104},[94,65837,65838],{"class":96,"line":16868},[94,65839,65840],{"class":163},"    \u002F\u002F 5. 小复选框控制大复选框\n",[94,65842,65843],{"class":96,"line":16881},[94,65844,2381],{"emptyLinePlaceholder":20},[94,65846,65847,65849,65851,65853,65855,65857,65859,65861,65863,65865,65867,65869,65871],{"class":96,"line":16886},[94,65848,3182],{"class":100},[94,65850,1639],{"class":104},[94,65852,51824],{"class":100},[94,65854,9420],{"class":104},[94,65856,150],{"class":100},[94,65858,4074],{"class":153},[94,65860,9427],{"class":104},[94,65862,1015],{"class":100},[94,65864,65806],{"class":104},[94,65866,51945],{"class":153},[94,65868,3195],{"class":104},[94,65870,2273],{"class":100},[94,65872,12424],{"class":104},[94,65874,65875],{"class":96,"line":16891},[94,65876,65877],{"class":163},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[94,65879,65880,65883,65885,65887,65889,65891,65893],{"class":96,"line":16896},[94,65881,65882],{"class":104},"      cks[i].",[94,65884,57790],{"class":1944},[94,65886,105],{"class":104},[94,65888,57795],{"class":209},[94,65890,12417],{"class":104},[94,65892,54426],{"class":100},[94,65894,54429],{"class":104},[94,65896,65897],{"class":96,"line":16909},[94,65898,65899],{"class":163},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[94,65901,65902],{"class":96,"line":16914},[94,65903,65904],{"class":163},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[94,65906,65907],{"class":96,"line":32616},[94,65908,65909],{"class":163},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[94,65911,65912],{"class":96,"line":32622},[94,65913,65914],{"class":163},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[94,65916,65917,65920,65922,65924,65926,65928,65931,65933,65935,65937,65939],{"class":96,"line":32628},[94,65918,65919],{"class":104},"        checkAll.checked ",[94,65921,150],{"class":100},[94,65923,54373],{"class":104},[94,65925,55658],{"class":1944},[94,65927,105],{"class":104},[94,65929,65930],{"class":209},"'.ck:checked'",[94,65932,30809],{"class":104},[94,65934,51945],{"class":153},[94,65936,57883],{"class":100},[94,65938,65806],{"class":104},[94,65940,55808],{"class":153},[94,65942,65943],{"class":96,"line":32634},[94,65944,64792],{"class":104},[94,65946,65947],{"class":96,"line":32640},[94,65948,2168],{"class":104},[94,65950,65951,65953,65955],{"class":96,"line":32651},[94,65952,52394],{"class":104},[94,65954,51790],{"class":51277},[94,65956,51284],{"class":104},[94,65958,65959,65961,65963],{"class":96,"line":32657},[94,65960,51762],{"class":104},[94,65962,51777],{"class":51277},[94,65964,51284],{"class":104},[94,65966,65967],{"class":96,"line":32677},[94,65968,2381],{"emptyLinePlaceholder":20},[94,65970,65971,65973,65975],{"class":96,"line":32683},[94,65972,51762],{"class":104},[94,65974,50612],{"class":51277},[94,65976,51284],{"class":104},[40,65978,65979],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[40,65981,65982],{},"用好之间比较得到的布尔值！！！",[40,65984,65985,65986,65989,65990,1639,65993,689,65995,65998],{},"在 JS 里访问的时候，",[91,65987,65988],{},"checkbox.checked"," 是一个 ",[254,65991,65992],{},"布尔值",[91,65994,1343],{},[91,65996,65997],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[40,66000,66001,66002,66005,66006],{},"HTML 的 ",[91,66003,66004],{},"checked=\"checked\""," 只是 ",[254,66007,66008,66009,66012],{},"初始值；JS 的 ",[91,66010,66011],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[40,66014,66015],{},"：checked是一个伪类选择器",[40,66017,66018],{},[1443,66019],{"alt":14,"src":66020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[40,66022,66023,66026],{},[66024,66025],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[40,66028,66029],{},[1443,66030],{"alt":14,"src":66031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[35,66033,66035],{"id":66034},"_33-dom事件进阶","3.3 DOM事件进阶",[65,66037,66039],{"id":66038},"_331-事件流","3.3.1 事件流",[40,66041,66042],{},[1443,66043],{"alt":14,"src":66044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[21980,66046,66048],{"id":66047},"_3311-事件捕获","3.3.1.1 事件捕获",[40,66050,66051],{},[1443,66052],{"alt":14,"src":66053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[85,66055,66057],{"className":50610,"code":66056,"language":50612,"meta":14,"style":14},"\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",[91,66058,66059,66069,66083,66087,66095,66109,66129,66141,66149,66156,66168,66180,66190,66194,66198,66205,66217,66229,66239,66243,66251,66259,66263,66271,66286,66305,66313,66321,66341,66361,66377,66388,66396,66413,66424,66432,66449,66460,66468,66476,66484,66488],{"__ignoreMap":14},[94,66060,66061,66063,66065,66067],{"class":96,"line":97},[94,66062,51274],{"class":104},[94,66064,51278],{"class":51277},[94,66066,51281],{"class":1944},[94,66068,51284],{"class":104},[94,66070,66071,66073,66075,66077,66079,66081],{"class":96,"line":15},[94,66072,1015],{"class":104},[94,66074,50612],{"class":51277},[94,66076,51293],{"class":1944},[94,66078,150],{"class":104},[94,66080,51298],{"class":209},[94,66082,51284],{"class":104},[94,66084,66085],{"class":96,"line":1160},[94,66086,2381],{"emptyLinePlaceholder":20},[94,66088,66089,66091,66093],{"class":96,"line":1175},[94,66090,1015],{"class":104},[94,66092,51311],{"class":51277},[94,66094,51284],{"class":104},[94,66096,66097,66099,66101,66103,66105,66107],{"class":96,"line":1181},[94,66098,52121],{"class":104},[94,66100,51321],{"class":51277},[94,66102,51324],{"class":1944},[94,66104,150],{"class":104},[94,66106,51329],{"class":209},[94,66108,51284],{"class":104},[94,66110,66111,66113,66115,66117,66119,66121,66123,66125,66127],{"class":96,"line":1195},[94,66112,52121],{"class":104},[94,66114,51321],{"class":51277},[94,66116,14902],{"class":1944},[94,66118,150],{"class":104},[94,66120,51368],{"class":209},[94,66122,51348],{"class":1944},[94,66124,150],{"class":104},[94,66126,51375],{"class":209},[94,66128,51284],{"class":104},[94,66130,66131,66133,66135,66137,66139],{"class":96,"line":1201},[94,66132,52121],{"class":104},[94,66134,51384],{"class":51277},[94,66136,51387],{"class":104},[94,66138,51384],{"class":51277},[94,66140,51284],{"class":104},[94,66142,66143,66145,66147],{"class":96,"line":1292},[94,66144,52121],{"class":104},[94,66146,5108],{"class":51277},[94,66148,51284],{"class":104},[94,66150,66151,66154],{"class":96,"line":1298},[94,66152,66153],{"class":1944},"    .father",[94,66155,15554],{"class":104},[94,66157,66158,66160,66162,66164,66166],{"class":96,"line":1310},[94,66159,54748],{"class":153},[94,66161,51414],{"class":104},[94,66163,65051],{"class":153},[94,66165,51469],{"class":100},[94,66167,1271],{"class":104},[94,66169,66170,66172,66174,66176,66178],{"class":96,"line":1593},[94,66171,54762],{"class":153},[94,66173,51414],{"class":104},[94,66175,65051],{"class":153},[94,66177,51469],{"class":100},[94,66179,1271],{"class":104},[94,66181,66182,66184,66186,66188],{"class":96,"line":1598},[94,66183,54861],{"class":153},[94,66185,51414],{"class":104},[94,66187,51622],{"class":153},[94,66189,1271],{"class":104},[94,66191,66192],{"class":96,"line":1604},[94,66193,2168],{"class":104},[94,66195,66196],{"class":96,"line":1609},[94,66197,2381],{"emptyLinePlaceholder":20},[94,66199,66200,66203],{"class":96,"line":1623},[94,66201,66202],{"class":1944},"    .son",[94,66204,15554],{"class":104},[94,66206,66207,66209,66211,66213,66215],{"class":96,"line":1628},[94,66208,54748],{"class":153},[94,66210,51414],{"class":104},[94,66212,1703],{"class":153},[94,66214,51469],{"class":100},[94,66216,1271],{"class":104},[94,66218,66219,66221,66223,66225,66227],{"class":96,"line":1634},[94,66220,54762],{"class":153},[94,66222,51414],{"class":104},[94,66224,1703],{"class":153},[94,66226,51469],{"class":100},[94,66228,1271],{"class":104},[94,66230,66231,66233,66235,66237],{"class":96,"line":1655},[94,66232,54861],{"class":153},[94,66234,51414],{"class":104},[94,66236,54866],{"class":153},[94,66238,1271],{"class":104},[94,66240,66241],{"class":96,"line":1660},[94,66242,2168],{"class":104},[94,66244,66245,66247,66249],{"class":96,"line":1674},[94,66246,52394],{"class":104},[94,66248,5108],{"class":51277},[94,66250,51284],{"class":104},[94,66252,66253,66255,66257],{"class":96,"line":1679},[94,66254,51762],{"class":104},[94,66256,51311],{"class":51277},[94,66258,51284],{"class":104},[94,66260,66261],{"class":96,"line":1708},[94,66262,2381],{"emptyLinePlaceholder":20},[94,66264,66265,66267,66269],{"class":96,"line":1713},[94,66266,1015],{"class":104},[94,66268,51777],{"class":51277},[94,66270,51284],{"class":104},[94,66272,66273,66275,66277,66279,66281,66284],{"class":96,"line":1730},[94,66274,52121],{"class":104},[94,66276,51588],{"class":51277},[94,66278,53463],{"class":1944},[94,66280,150],{"class":104},[94,66282,66283],{"class":209},"\"father\"",[94,66285,51284],{"class":104},[94,66287,66288,66290,66292,66294,66296,66299,66301,66303],{"class":96,"line":1735},[94,66289,51318],{"class":104},[94,66291,51588],{"class":51277},[94,66293,53463],{"class":1944},[94,66295,150],{"class":104},[94,66297,66298],{"class":209},"\"son\"",[94,66300,55291],{"class":104},[94,66302,51588],{"class":51277},[94,66304,51284],{"class":104},[94,66306,66307,66309,66311],{"class":96,"line":1740},[94,66308,52394],{"class":104},[94,66310,51588],{"class":51277},[94,66312,51284],{"class":104},[94,66314,66315,66317,66319],{"class":96,"line":1745},[94,66316,52121],{"class":104},[94,66318,51790],{"class":51277},[94,66320,51284],{"class":104},[94,66322,66323,66325,66328,66330,66332,66334,66336,66339],{"class":96,"line":1759},[94,66324,11203],{"class":100},[94,66326,66327],{"class":153}," fa",[94,66329,13546],{"class":100},[94,66331,54373],{"class":104},[94,66333,54376],{"class":1944},[94,66335,105],{"class":104},[94,66337,66338],{"class":209},"'.father'",[94,66340,111],{"class":104},[94,66342,66343,66345,66348,66350,66352,66354,66356,66359],{"class":96,"line":1764},[94,66344,11203],{"class":100},[94,66346,66347],{"class":153}," son",[94,66349,13546],{"class":100},[94,66351,54373],{"class":104},[94,66353,54376],{"class":1944},[94,66355,105],{"class":104},[94,66357,66358],{"class":209},"'.son'",[94,66360,111],{"class":104},[94,66362,66363,66365,66367,66369,66371,66373,66375],{"class":96,"line":2558},[94,66364,52384],{"class":104},[94,66366,57790],{"class":1944},[94,66368,105],{"class":104},[94,66370,57795],{"class":209},[94,66372,12417],{"class":104},[94,66374,54426],{"class":100},[94,66376,54429],{"class":104},[94,66378,66379,66381,66383,66386],{"class":96,"line":2572},[94,66380,58902],{"class":1944},[94,66382,105],{"class":104},[94,66384,66385],{"class":209},"'woshiu1'",[94,66387,111],{"class":104},[94,66389,66390,66392,66394],{"class":96,"line":2580},[94,66391,54512],{"class":104},[94,66393,1343],{"class":153},[94,66395,111],{"class":104},[94,66397,66398,66401,66403,66405,66407,66409,66411],{"class":96,"line":2585},[94,66399,66400],{"class":104},"    fa.",[94,66402,57790],{"class":1944},[94,66404,105],{"class":104},[94,66406,57795],{"class":209},[94,66408,12417],{"class":104},[94,66410,54426],{"class":100},[94,66412,54429],{"class":104},[94,66414,66415,66417,66419,66422],{"class":96,"line":2591},[94,66416,58902],{"class":1944},[94,66418,105],{"class":104},[94,66420,66421],{"class":209},"'1'",[94,66423,111],{"class":104},[94,66425,66426,66428,66430],{"class":96,"line":2597},[94,66427,54512],{"class":104},[94,66429,1343],{"class":153},[94,66431,111],{"class":104},[94,66433,66434,66437,66439,66441,66443,66445,66447],{"class":96,"line":2602},[94,66435,66436],{"class":104},"    son.",[94,66438,57790],{"class":1944},[94,66440,105],{"class":104},[94,66442,57795],{"class":209},[94,66444,12417],{"class":104},[94,66446,54426],{"class":100},[94,66448,54429],{"class":104},[94,66450,66451,66453,66455,66458],{"class":96,"line":7930},[94,66452,58902],{"class":1944},[94,66454,105],{"class":104},[94,66456,66457],{"class":209},"'2'",[94,66459,111],{"class":104},[94,66461,66462,66464,66466],{"class":96,"line":7954},[94,66463,54512],{"class":104},[94,66465,1343],{"class":153},[94,66467,111],{"class":104},[94,66469,66470,66472,66474],{"class":96,"line":7959},[94,66471,52394],{"class":104},[94,66473,51790],{"class":51277},[94,66475,51284],{"class":104},[94,66477,66478,66480,66482],{"class":96,"line":7965},[94,66479,51762],{"class":104},[94,66481,51777],{"class":51277},[94,66483,51284],{"class":104},[94,66485,66486],{"class":96,"line":7992},[94,66487,2381],{"emptyLinePlaceholder":20},[94,66489,66490,66492,66494],{"class":96,"line":7997},[94,66491,51762],{"class":104},[94,66493,50612],{"class":51277},[94,66495,51284],{"class":104},[40,66497,66498],{},[1443,66499],{"alt":14,"src":66500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[40,66502,66503],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[21980,66505,66507],{"id":66506},"_3312-事件冒泡","3.3.1.2 事件冒泡",[40,66509,66510],{},[1443,66511],{"alt":14,"src":66512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[40,66514,66515],{},"反着来",[40,66517,66518],{},"注意是同名事件，比如都是‘click’",[21980,66520,66522],{"id":66521},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[40,66524,66525],{},[1443,66526],{"alt":14,"src":66527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[21980,66529,66531],{"id":66530},"_3314-解绑事件","3.3.1.4 解绑事件",[40,66533,66534],{},[1443,66535],{"alt":14,"src":66536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[40,66538,66539],{},[1443,66540],{"alt":14,"src":66541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[21980,66543,66545],{"id":66544},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[48,66547,66548],{},[51,66549,66550],{},"事件类型的区别",[40,66552,66553],{},[1443,66554],{"alt":14,"src":66555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[40,66557,66558],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[48,66560,66561],{"start":15},[51,66562,66563],{},"注册事件的区别",[40,66565,66566],{},[1443,66567],{"alt":14,"src":66568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[21980,66570,66572],{"id":66571},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[40,66574,66575],{},[1443,66576],{"alt":14,"src":66577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[40,66579,66580],{},[1443,66581],{"alt":14,"src":66582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[85,66584,66586],{"className":53044,"code":66585,"language":53046,"meta":14,"style":14},"\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",[91,66587,66588,66596,66613,66636,66644,66649,66654,66659,66663,66671,66679],{"__ignoreMap":14},[94,66589,66590,66592,66594],{"class":96,"line":97},[94,66591,1015],{"class":104},[94,66593,51777],{"class":51277},[94,66595,51284],{"class":104},[94,66597,66598,66600,66603,66606,66608,66611],{"class":96,"line":15},[94,66599,52121],{"class":104},[94,66601,66602],{"class":51277},"form",[94,66604,66605],{"class":1944}," action",[94,66607,150],{"class":104},[94,66609,66610],{"class":209},"\"http:\u002F\u002Fwww.itcast.cn\"",[94,66612,51284],{"class":104},[94,66614,66615,66617,66619,66621,66623,66626,66629,66631,66634],{"class":96,"line":1160},[94,66616,51318],{"class":104},[94,66618,53798],{"class":51277},[94,66620,53801],{"class":1944},[94,66622,150],{"class":104},[94,66624,66625],{"class":209},"\"submit\"",[94,66627,66628],{"class":1944}," value",[94,66630,150],{"class":104},[94,66632,66633],{"class":209},"\"免费注册\"",[94,66635,51284],{"class":104},[94,66637,66638,66640,66642],{"class":96,"line":1175},[94,66639,51318],{"class":104},[94,66641,51790],{"class":51277},[94,66643,51284],{"class":104},[94,66645,66646],{"class":96,"line":1181},[94,66647,66648],{"class":104},"      const form = document.querySelector('form')\n",[94,66650,66651],{"class":96,"line":1195},[94,66652,66653],{"class":104},"      form.addEventListener('submit', function (e) {\n",[94,66655,66656],{"class":96,"line":1201},[94,66657,66658],{"class":104},"        e.preventDefault()\n",[94,66660,66661],{"class":96,"line":1292},[94,66662,64792],{"class":104},[94,66664,66665,66667,66669],{"class":96,"line":1298},[94,66666,51753],{"class":104},[94,66668,51790],{"class":51277},[94,66670,51284],{"class":104},[94,66672,66673,66675,66677],{"class":96,"line":1310},[94,66674,52394],{"class":104},[94,66676,66602],{"class":51277},[94,66678,51284],{"class":104},[94,66680,66681,66683,66685],{"class":96,"line":1593},[94,66682,51762],{"class":104},[94,66684,51777],{"class":51277},[94,66686,51284],{"class":104},[40,66688,66689],{},"点击不在跳转！！！",[65,66691,66693],{"id":66692},"_332-事件委托","3.3.2 事件委托",[40,66695,66696],{},[1443,66697],{"alt":14,"src":66698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[85,66700,66702],{"className":50610,"code":66701,"language":50612,"meta":14,"style":14},"\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",[91,66703,66704,66714,66728,66732,66740,66754,66774,66786,66794,66798,66806,66814,66826,66838,66850,66862,66874,66887,66895,66903,66908,66927,66948,66953,66958,66963,66968,66977,66981,66991,66995,67000,67005,67019,67029,67033,67037,67045,67053,67057],{"__ignoreMap":14},[94,66705,66706,66708,66710,66712],{"class":96,"line":97},[94,66707,51274],{"class":104},[94,66709,51278],{"class":51277},[94,66711,51281],{"class":1944},[94,66713,51284],{"class":104},[94,66715,66716,66718,66720,66722,66724,66726],{"class":96,"line":15},[94,66717,1015],{"class":104},[94,66719,50612],{"class":51277},[94,66721,51293],{"class":1944},[94,66723,150],{"class":104},[94,66725,51298],{"class":209},[94,66727,51284],{"class":104},[94,66729,66730],{"class":96,"line":1160},[94,66731,2381],{"emptyLinePlaceholder":20},[94,66733,66734,66736,66738],{"class":96,"line":1175},[94,66735,1015],{"class":104},[94,66737,51311],{"class":51277},[94,66739,51284],{"class":104},[94,66741,66742,66744,66746,66748,66750,66752],{"class":96,"line":1181},[94,66743,52121],{"class":104},[94,66745,51321],{"class":51277},[94,66747,51324],{"class":1944},[94,66749,150],{"class":104},[94,66751,51329],{"class":209},[94,66753,51284],{"class":104},[94,66755,66756,66758,66760,66762,66764,66766,66768,66770,66772],{"class":96,"line":1195},[94,66757,52121],{"class":104},[94,66759,51321],{"class":51277},[94,66761,14902],{"class":1944},[94,66763,150],{"class":104},[94,66765,51368],{"class":209},[94,66767,51348],{"class":1944},[94,66769,150],{"class":104},[94,66771,51375],{"class":209},[94,66773,51284],{"class":104},[94,66775,66776,66778,66780,66782,66784],{"class":96,"line":1201},[94,66777,52121],{"class":104},[94,66779,51384],{"class":51277},[94,66781,51387],{"class":104},[94,66783,51384],{"class":51277},[94,66785,51284],{"class":104},[94,66787,66788,66790,66792],{"class":96,"line":1292},[94,66789,51762],{"class":104},[94,66791,51311],{"class":51277},[94,66793,51284],{"class":104},[94,66795,66796],{"class":96,"line":1298},[94,66797,2381],{"emptyLinePlaceholder":20},[94,66799,66800,66802,66804],{"class":96,"line":1310},[94,66801,1015],{"class":104},[94,66803,51777],{"class":51277},[94,66805,51284],{"class":104},[94,66807,66808,66810,66812],{"class":96,"line":1593},[94,66809,52121],{"class":104},[94,66811,1112],{"class":51277},[94,66813,51284],{"class":104},[94,66815,66816,66818,66820,66822,66824],{"class":96,"line":1598},[94,66817,51318],{"class":104},[94,66819,51],{"class":51277},[94,66821,53943],{"class":104},[94,66823,51],{"class":51277},[94,66825,51284],{"class":104},[94,66827,66828,66830,66832,66834,66836],{"class":96,"line":1604},[94,66829,51318],{"class":104},[94,66831,51],{"class":51277},[94,66833,53962],{"class":104},[94,66835,51],{"class":51277},[94,66837,51284],{"class":104},[94,66839,66840,66842,66844,66846,66848],{"class":96,"line":1609},[94,66841,51318],{"class":104},[94,66843,51],{"class":51277},[94,66845,53981],{"class":104},[94,66847,51],{"class":51277},[94,66849,51284],{"class":104},[94,66851,66852,66854,66856,66858,66860],{"class":96,"line":1623},[94,66853,51318],{"class":104},[94,66855,51],{"class":51277},[94,66857,54000],{"class":104},[94,66859,51],{"class":51277},[94,66861,51284],{"class":104},[94,66863,66864,66866,66868,66870,66872],{"class":96,"line":1628},[94,66865,51318],{"class":104},[94,66867,51],{"class":51277},[94,66869,54019],{"class":104},[94,66871,51],{"class":51277},[94,66873,51284],{"class":104},[94,66875,66876,66878,66880,66883,66885],{"class":96,"line":1634},[94,66877,51318],{"class":104},[94,66879,40],{"class":51277},[94,66881,66882],{"class":104},">我不需要变色\u003C\u002F",[94,66884,40],{"class":51277},[94,66886,51284],{"class":104},[94,66888,66889,66891,66893],{"class":96,"line":1655},[94,66890,52394],{"class":104},[94,66892,1112],{"class":51277},[94,66894,51284],{"class":104},[94,66896,66897,66899,66901],{"class":96,"line":1660},[94,66898,52121],{"class":104},[94,66900,51790],{"class":51277},[94,66902,51284],{"class":104},[94,66904,66905],{"class":96,"line":1674},[94,66906,66907],{"class":163},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[94,66909,66910,66912,66914,66916,66918,66920,66922,66925],{"class":96,"line":1679},[94,66911,11203],{"class":100},[94,66913,61269],{"class":153},[94,66915,13546],{"class":100},[94,66917,54373],{"class":104},[94,66919,54376],{"class":1944},[94,66921,105],{"class":104},[94,66923,66924],{"class":209},"'ul'",[94,66926,111],{"class":104},[94,66928,66929,66932,66934,66936,66938,66940,66942,66944,66946],{"class":96,"line":1708},[94,66930,66931],{"class":104},"    ul.",[94,66933,57790],{"class":1944},[94,66935,105],{"class":104},[94,66937,57795],{"class":209},[94,66939,12417],{"class":104},[94,66941,54426],{"class":100},[94,66943,1639],{"class":104},[94,66945,179],{"class":5198},[94,66947,12424],{"class":104},[94,66949,66950],{"class":96,"line":1713},[94,66951,66952],{"class":163},"      \u002F\u002F alert(1)\n",[94,66954,66955],{"class":96,"line":1730},[94,66956,66957],{"class":163},"      \u002F\u002F e.target就是我们点击的对象\n",[94,66959,66960],{"class":96,"line":1735},[94,66961,66962],{"class":163},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[94,66964,66965],{"class":96,"line":1740},[94,66966,66967],{"class":163},"      \u002F\u002F e.target.style.color = 'red'\n",[94,66969,66970,66972,66974],{"class":96,"line":1745},[94,66971,58221],{"class":104},[94,66973,58224],{"class":1944},[94,66975,66976],{"class":104},"(e)\n",[94,66978,66979],{"class":96,"line":1759},[94,66980,2381],{"emptyLinePlaceholder":20},[94,66982,66983,66985,66988],{"class":96,"line":1764},[94,66984,58221],{"class":104},[94,66986,66987],{"class":1944},"dir",[94,66989,66990],{"class":104},"(e.target)\n",[94,66992,66993],{"class":96,"line":2558},[94,66994,2381],{"emptyLinePlaceholder":20},[94,66996,66997],{"class":96,"line":2572},[94,66998,66999],{"class":163},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[94,67001,67002],{"class":96,"line":2580},[94,67003,67004],{"class":163},"      \u002F\u002F 通过tagName来进行判断\n",[94,67006,67007,67009,67012,67014,67017],{"class":96,"line":2585},[94,67008,54457],{"class":100},[94,67010,67011],{"class":104}," (e.target.tagName ",[94,67013,54463],{"class":100},[94,67015,67016],{"class":209}," 'LI'",[94,67018,12424],{"class":104},[94,67020,67021,67024,67026],{"class":96,"line":2591},[94,67022,67023],{"class":104},"        e.target.style.color ",[94,67025,150],{"class":100},[94,67027,67028],{"class":209}," 'red'\n",[94,67030,67031],{"class":96,"line":2597},[94,67032,52375],{"class":104},[94,67034,67035],{"class":96,"line":2602},[94,67036,33444],{"class":104},[94,67038,67039,67041,67043],{"class":96,"line":7930},[94,67040,52394],{"class":104},[94,67042,51790],{"class":51277},[94,67044,51284],{"class":104},[94,67046,67047,67049,67051],{"class":96,"line":7954},[94,67048,51762],{"class":104},[94,67050,51777],{"class":51277},[94,67052,51284],{"class":104},[94,67054,67055],{"class":96,"line":7959},[94,67056,2381],{"emptyLinePlaceholder":20},[94,67058,67059,67061,67063],{"class":96,"line":7965},[94,67060,51762],{"class":104},[94,67062,50612],{"class":51277},[94,67064,51284],{"class":104},[40,67066,67067],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[40,67069,67070],{},"if(e.target.ragName==='P') {}",[40,67072,67073],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[40,67075,67076],{},"通过事件委托的方式实现tab栏切换改造：",[40,67078,67079],{},"一定要记住自定义属性！！！！！！",[40,67081,67082],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[40,67084,67085],{},"id是自定义的属性名",[40,67087,67088],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[85,67090,67092],{"className":50610,"code":67091,"language":50612,"meta":14,"style":14},"\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",[91,67093,67094,67104,67118,67122,67130,67144,67164,67184,67196,67204,67210,67220,67230,67234,67238,67244,67256,67268,67280,67296,67300,67304,67310,67322,67334,67346,67356,67366,67370,67374,67382,67394,67404,67416,67420,67424,67432,67442,67452,67462,67466,67470,67480,67494,67506,67510,67514,67526,67536,67552,67562,67566,67570,67584,67594,67604,67608,67612,67618,67632,67636,67640,67648,67658,67662,67666,67675,67685,67689,67697,67705,67709,67717,67731,67745,67757,67765,67804,67836,67868,67900,67932,67940,67948,67962,67996,68030,68064,68098,68132,68140,68148,68156,68161,68166,68185,68190,68210,68218,68223,68236,68257,68270,68274,68279,68284,68297,68317,68345,68349,68353,68357,68365,68373,68377],{"__ignoreMap":14},[94,67095,67096,67098,67100,67102],{"class":96,"line":97},[94,67097,51274],{"class":104},[94,67099,51278],{"class":51277},[94,67101,51281],{"class":1944},[94,67103,51284],{"class":104},[94,67105,67106,67108,67110,67112,67114,67116],{"class":96,"line":15},[94,67107,1015],{"class":104},[94,67109,50612],{"class":51277},[94,67111,51293],{"class":1944},[94,67113,150],{"class":104},[94,67115,51298],{"class":209},[94,67117,51284],{"class":104},[94,67119,67120],{"class":96,"line":1160},[94,67121,2381],{"emptyLinePlaceholder":20},[94,67123,67124,67126,67128],{"class":96,"line":1175},[94,67125,1015],{"class":104},[94,67127,51311],{"class":51277},[94,67129,51284],{"class":104},[94,67131,67132,67134,67136,67138,67140,67142],{"class":96,"line":1181},[94,67133,52121],{"class":104},[94,67135,51321],{"class":51277},[94,67137,51324],{"class":1944},[94,67139,150],{"class":104},[94,67141,51329],{"class":209},[94,67143,59104],{"class":104},[94,67145,67146,67148,67150,67152,67154,67156,67158,67160,67162],{"class":96,"line":1195},[94,67147,52121],{"class":104},[94,67149,51321],{"class":51277},[94,67151,51340],{"class":1944},[94,67153,150],{"class":104},[94,67155,51345],{"class":209},[94,67157,51348],{"class":1944},[94,67159,150],{"class":104},[94,67161,51353],{"class":209},[94,67163,59104],{"class":104},[94,67165,67166,67168,67170,67172,67174,67176,67178,67180,67182],{"class":96,"line":1201},[94,67167,52121],{"class":104},[94,67169,51321],{"class":51277},[94,67171,14902],{"class":1944},[94,67173,150],{"class":104},[94,67175,51368],{"class":209},[94,67177,51348],{"class":1944},[94,67179,150],{"class":104},[94,67181,51375],{"class":209},[94,67183,59104],{"class":104},[94,67185,67186,67188,67190,67192,67194],{"class":96,"line":1292},[94,67187,52121],{"class":104},[94,67189,51384],{"class":51277},[94,67191,63602],{"class":104},[94,67193,51384],{"class":51277},[94,67195,51284],{"class":104},[94,67197,67198,67200,67202],{"class":96,"line":1298},[94,67199,52121],{"class":104},[94,67201,5108],{"class":51277},[94,67203,51284],{"class":104},[94,67205,67206,67208],{"class":96,"line":1310},[94,67207,6385],{"class":51277},[94,67209,15554],{"class":104},[94,67211,67212,67214,67216,67218],{"class":96,"line":1593},[94,67213,54683],{"class":153},[94,67215,51414],{"class":104},[94,67217,296],{"class":153},[94,67219,1271],{"class":104},[94,67221,67222,67224,67226,67228],{"class":96,"line":1598},[94,67223,54672],{"class":153},[94,67225,51414],{"class":104},[94,67227,296],{"class":153},[94,67229,1271],{"class":104},[94,67231,67232],{"class":96,"line":1604},[94,67233,2168],{"class":104},[94,67235,67236],{"class":96,"line":1609},[94,67237,2381],{"emptyLinePlaceholder":20},[94,67239,67240,67242],{"class":96,"line":1623},[94,67241,63653],{"class":1944},[94,67243,15554],{"class":104},[94,67245,67246,67248,67250,67252,67254],{"class":96,"line":1628},[94,67247,54748],{"class":153},[94,67249,51414],{"class":104},[94,67251,63664],{"class":153},[94,67253,51469],{"class":100},[94,67255,1271],{"class":104},[94,67257,67258,67260,67262,67264,67266],{"class":96,"line":1634},[94,67259,54762],{"class":153},[94,67261,51414],{"class":104},[94,67263,63677],{"class":153},[94,67265,51469],{"class":100},[94,67267,1271],{"class":104},[94,67269,67270,67272,67274,67276,67278],{"class":96,"line":1655},[94,67271,54683],{"class":153},[94,67273,51414],{"class":104},[94,67275,805],{"class":153},[94,67277,51469],{"class":100},[94,67279,1271],{"class":104},[94,67281,67282,67284,67286,67288,67290,67292,67294],{"class":96,"line":1660},[94,67283,61954],{"class":153},[94,67285,51414],{"class":104},[94,67287,322],{"class":153},[94,67289,51469],{"class":100},[94,67291,51498],{"class":153},[94,67293,62221],{"class":153},[94,67295,1271],{"class":104},[94,67297,67298],{"class":96,"line":1674},[94,67299,2168],{"class":104},[94,67301,67302],{"class":96,"line":1679},[94,67303,2381],{"emptyLinePlaceholder":20},[94,67305,67306,67308],{"class":96,"line":1708},[94,67307,63722],{"class":1944},[94,67309,15554],{"class":104},[94,67311,67312,67314,67316,67318,67320],{"class":96,"line":1713},[94,67313,54748],{"class":153},[94,67315,51414],{"class":104},[94,67317,416],{"class":153},[94,67319,433],{"class":100},[94,67321,1271],{"class":104},[94,67323,67324,67326,67328,67330,67332],{"class":96,"line":1730},[94,67325,54762],{"class":153},[94,67327,51414],{"class":104},[94,67329,1012],{"class":153},[94,67331,51469],{"class":100},[94,67333,1271],{"class":104},[94,67335,67336,67338,67340,67342,67344],{"class":96,"line":1735},[94,67337,57336],{"class":153},[94,67339,51414],{"class":104},[94,67341,1012],{"class":153},[94,67343,51469],{"class":100},[94,67345,1271],{"class":104},[94,67347,67348,67350,67352,67354],{"class":96,"line":1740},[94,67349,54986],{"class":153},[94,67351,51414],{"class":104},[94,67353,51454],{"class":153},[94,67355,1271],{"class":104},[94,67357,67358,67360,67362,67364],{"class":96,"line":1745},[94,67359,54997],{"class":153},[94,67361,51414],{"class":104},[94,67363,51645],{"class":153},[94,67365,1271],{"class":104},[94,67367,67368],{"class":96,"line":1759},[94,67369,2168],{"class":104},[94,67371,67372],{"class":96,"line":1764},[94,67373,2381],{"emptyLinePlaceholder":20},[94,67375,67376,67378,67380],{"class":96,"line":2558},[94,67377,63722],{"class":1944},[94,67379,63795],{"class":51277},[94,67381,15554],{"class":104},[94,67383,67384,67386,67388,67390,67392],{"class":96,"line":2572},[94,67385,54899],{"class":153},[94,67387,51414],{"class":104},[94,67389,905],{"class":153},[94,67391,51469],{"class":100},[94,67393,1271],{"class":104},[94,67395,67396,67398,67400,67402],{"class":96,"line":2580},[94,67397,62311],{"class":153},[94,67399,51414],{"class":104},[94,67401,63818],{"class":153},[94,67403,1271],{"class":104},[94,67405,67406,67408,67410,67412,67414],{"class":96,"line":2585},[94,67407,61977],{"class":153},[94,67409,51414],{"class":104},[94,67411,805],{"class":153},[94,67413,51469],{"class":100},[94,67415,1271],{"class":104},[94,67417,67418],{"class":96,"line":2591},[94,67419,2168],{"class":104},[94,67421,67422],{"class":96,"line":2597},[94,67423,2381],{"emptyLinePlaceholder":20},[94,67425,67426,67428,67430],{"class":96,"line":2602},[94,67427,63722],{"class":1944},[94,67429,61269],{"class":51277},[94,67431,15554],{"class":104},[94,67433,67434,67436,67438,67440],{"class":96,"line":7930},[94,67435,54709],{"class":153},[94,67437,51414],{"class":104},[94,67439,54714],{"class":153},[94,67441,1271],{"class":104},[94,67443,67444,67446,67448,67450],{"class":96,"line":7954},[94,67445,54986],{"class":153},[94,67447,51414],{"class":104},[94,67449,51454],{"class":153},[94,67451,1271],{"class":104},[94,67453,67454,67456,67458,67460],{"class":96,"line":7959},[94,67455,54997],{"class":153},[94,67457,51414],{"class":104},[94,67459,51557],{"class":153},[94,67461,1271],{"class":104},[94,67463,67464],{"class":96,"line":7965},[94,67465,2168],{"class":104},[94,67467,67468],{"class":96,"line":7992},[94,67469,2381],{"emptyLinePlaceholder":20},[94,67471,67472,67474,67476,67478],{"class":96,"line":7997},[94,67473,63722],{"class":1944},[94,67475,61269],{"class":51277},[94,67477,55052],{"class":51277},[94,67479,15554],{"class":104},[94,67481,67482,67484,67486,67488,67490,67492],{"class":96,"line":8003},[94,67483,54683],{"class":153},[94,67485,51414],{"class":104},[94,67487,296],{"class":153},[94,67489,8932],{"class":153},[94,67491,51469],{"class":100},[94,67493,1271],{"class":104},[94,67495,67496,67498,67500,67502,67504],{"class":96,"line":8015},[94,67497,54899],{"class":153},[94,67499,51414],{"class":104},[94,67501,654],{"class":153},[94,67503,51469],{"class":100},[94,67505,1271],{"class":104},[94,67507,67508],{"class":96,"line":8027},[94,67509,2168],{"class":104},[94,67511,67512],{"class":96,"line":8039},[94,67513,2381],{"emptyLinePlaceholder":20},[94,67515,67516,67518,67520,67522,67524],{"class":96,"line":9698},[94,67517,63722],{"class":1944},[94,67519,61269],{"class":51277},[94,67521,55052],{"class":51277},[94,67523,1379],{"class":51277},[94,67525,15554],{"class":104},[94,67527,67528,67530,67532,67534],{"class":96,"line":9723},[94,67529,63947],{"class":153},[94,67531,51414],{"class":104},[94,67533,54714],{"class":153},[94,67535,1271],{"class":104},[94,67537,67538,67540,67542,67544,67546,67548,67550],{"class":96,"line":9746},[94,67539,62209],{"class":153},[94,67541,51414],{"class":104},[94,67543,182],{"class":153},[94,67545,51469],{"class":100},[94,67547,51498],{"class":153},[94,67549,63968],{"class":153},[94,67551,1271],{"class":104},[94,67553,67554,67556,67558,67560],{"class":96,"line":9770},[94,67555,57393],{"class":153},[94,67557,51414],{"class":104},[94,67559,62346],{"class":153},[94,67561,1271],{"class":104},[94,67563,67564],{"class":96,"line":9775},[94,67565,2168],{"class":104},[94,67567,67568],{"class":96,"line":9780},[94,67569,2381],{"emptyLinePlaceholder":20},[94,67571,67572,67574,67576,67578,67580,67582],{"class":96,"line":9785},[94,67573,63722],{"class":1944},[94,67575,61269],{"class":51277},[94,67577,55052],{"class":51277},[94,67579,1379],{"class":51277},[94,67581,64001],{"class":1944},[94,67583,15554],{"class":104},[94,67585,67586,67588,67590,67592],{"class":96,"line":9794},[94,67587,61768],{"class":153},[94,67589,51414],{"class":104},[94,67591,64012],{"class":153},[94,67593,1271],{"class":104},[94,67595,67596,67598,67600,67602],{"class":96,"line":9799},[94,67597,57393],{"class":153},[94,67599,51414],{"class":104},[94,67601,64012],{"class":153},[94,67603,1271],{"class":104},[94,67605,67606],{"class":96,"line":9805},[94,67607,2168],{"class":104},[94,67609,67610],{"class":96,"line":9826},[94,67611,2381],{"emptyLinePlaceholder":20},[94,67613,67614,67616],{"class":96,"line":9832},[94,67615,64037],{"class":1944},[94,67617,15554],{"class":104},[94,67619,67620,67622,67624,67626,67628,67630],{"class":96,"line":9846},[94,67621,54672],{"class":153},[94,67623,51414],{"class":104},[94,67625,296],{"class":153},[94,67627,64050],{"class":153},[94,67629,51469],{"class":100},[94,67631,1271],{"class":104},[94,67633,67634],{"class":96,"line":9852},[94,67635,2168],{"class":104},[94,67637,67638],{"class":96,"line":9879},[94,67639,2381],{"emptyLinePlaceholder":20},[94,67641,67642,67644,67646],{"class":96,"line":9888},[94,67643,64037],{"class":1944},[94,67645,62151],{"class":1944},[94,67647,15554],{"class":104},[94,67649,67650,67652,67654,67656],{"class":96,"line":9894},[94,67651,54986],{"class":153},[94,67653,51414],{"class":104},[94,67655,54714],{"class":153},[94,67657,1271],{"class":104},[94,67659,67660],{"class":96,"line":9902},[94,67661,2168],{"class":104},[94,67663,67664],{"class":96,"line":9907},[94,67665,2381],{"emptyLinePlaceholder":20},[94,67667,67668,67670,67673],{"class":96,"line":16586},[94,67669,64037],{"class":1944},[94,67671,67672],{"class":1944}," .active",[94,67674,15554],{"class":104},[94,67676,67677,67679,67681,67683],{"class":96,"line":16592},[94,67678,54986],{"class":153},[94,67680,51414],{"class":104},[94,67682,60846],{"class":153},[94,67684,1271],{"class":104},[94,67686,67687],{"class":96,"line":16615},[94,67688,2168],{"class":104},[94,67690,67691,67693,67695],{"class":96,"line":16621},[94,67692,52394],{"class":104},[94,67694,5108],{"class":51277},[94,67696,51284],{"class":104},[94,67698,67699,67701,67703],{"class":96,"line":16644},[94,67700,51762],{"class":104},[94,67702,51311],{"class":51277},[94,67704,51284],{"class":104},[94,67706,67707],{"class":96,"line":16658},[94,67708,2381],{"emptyLinePlaceholder":20},[94,67710,67711,67713,67715],{"class":96,"line":16678},[94,67712,1015],{"class":104},[94,67714,51777],{"class":51277},[94,67716,51284],{"class":104},[94,67718,67719,67721,67723,67725,67727,67729],{"class":96,"line":16684},[94,67720,52121],{"class":104},[94,67722,51588],{"class":51277},[94,67724,53463],{"class":1944},[94,67726,150],{"class":104},[94,67728,64152],{"class":209},[94,67730,51284],{"class":104},[94,67732,67733,67735,67737,67739,67741,67743],{"class":96,"line":16695},[94,67734,51318],{"class":104},[94,67736,51588],{"class":51277},[94,67738,53463],{"class":1944},[94,67740,150],{"class":104},[94,67742,64167],{"class":209},[94,67744,51284],{"class":104},[94,67746,67747,67749,67751,67753,67755],{"class":96,"line":16718},[94,67748,55211],{"class":104},[94,67750,65],{"class":51277},[94,67752,64178],{"class":104},[94,67754,65],{"class":51277},[94,67756,51284],{"class":104},[94,67758,67759,67761,67763],{"class":96,"line":16740},[94,67760,55211],{"class":104},[94,67762,1112],{"class":51277},[94,67764,51284],{"class":104},[94,67766,67767,67769,67771,67773,67775,67777,67779,67781,67783,67785,67787,67789,67791,67794,67796,67798,67800,67802],{"class":96,"line":16745},[94,67768,55279],{"class":104},[94,67770,51],{"class":51277},[94,67772,61029],{"class":104},[94,67774,343],{"class":51277},[94,67776,53463],{"class":1944},[94,67778,150],{"class":104},[94,67780,59683],{"class":209},[94,67782,61034],{"class":1944},[94,67784,150],{"class":104},[94,67786,64213],{"class":209},[94,67788,53928],{"class":1944},[94,67790,150],{"class":104},[94,67792,67793],{"class":209},"\"0\"",[94,67795,64216],{"class":104},[94,67797,343],{"class":51277},[94,67799,55291],{"class":104},[94,67801,51],{"class":51277},[94,67803,51284],{"class":104},[94,67805,67806,67808,67810,67812,67814,67816,67818,67820,67822,67824,67826,67828,67830,67832,67834],{"class":96,"line":16751},[94,67807,55279],{"class":104},[94,67809,51],{"class":51277},[94,67811,61029],{"class":104},[94,67813,343],{"class":51277},[94,67815,61034],{"class":1944},[94,67817,150],{"class":104},[94,67819,64213],{"class":209},[94,67821,53928],{"class":1944},[94,67823,150],{"class":104},[94,67825,3659],{"class":209},[94,67827,64243],{"class":104},[94,67829,343],{"class":51277},[94,67831,55291],{"class":104},[94,67833,51],{"class":51277},[94,67835,51284],{"class":104},[94,67837,67838,67840,67842,67844,67846,67848,67850,67852,67854,67856,67858,67860,67862,67864,67866],{"class":96,"line":16765},[94,67839,55279],{"class":104},[94,67841,51],{"class":51277},[94,67843,61029],{"class":104},[94,67845,343],{"class":51277},[94,67847,61034],{"class":1944},[94,67849,150],{"class":104},[94,67851,64213],{"class":209},[94,67853,53928],{"class":1944},[94,67855,150],{"class":104},[94,67857,3682],{"class":209},[94,67859,64270],{"class":104},[94,67861,343],{"class":51277},[94,67863,55291],{"class":104},[94,67865,51],{"class":51277},[94,67867,51284],{"class":104},[94,67869,67870,67872,67874,67876,67878,67880,67882,67884,67886,67888,67890,67892,67894,67896,67898],{"class":96,"line":16778},[94,67871,55279],{"class":104},[94,67873,51],{"class":51277},[94,67875,61029],{"class":104},[94,67877,343],{"class":51277},[94,67879,61034],{"class":1944},[94,67881,150],{"class":104},[94,67883,64213],{"class":209},[94,67885,53928],{"class":1944},[94,67887,150],{"class":104},[94,67889,3695],{"class":209},[94,67891,64297],{"class":104},[94,67893,343],{"class":51277},[94,67895,55291],{"class":104},[94,67897,51],{"class":51277},[94,67899,51284],{"class":104},[94,67901,67902,67904,67906,67908,67910,67912,67914,67916,67918,67920,67922,67924,67926,67928,67930],{"class":96,"line":16783},[94,67903,55279],{"class":104},[94,67905,51],{"class":51277},[94,67907,61029],{"class":104},[94,67909,343],{"class":51277},[94,67911,61034],{"class":1944},[94,67913,150],{"class":104},[94,67915,64213],{"class":209},[94,67917,53928],{"class":1944},[94,67919,150],{"class":104},[94,67921,3708],{"class":209},[94,67923,64324],{"class":104},[94,67925,343],{"class":51277},[94,67927,55291],{"class":104},[94,67929,51],{"class":51277},[94,67931,51284],{"class":104},[94,67933,67934,67936,67938],{"class":96,"line":16797},[94,67935,55384],{"class":104},[94,67937,1112],{"class":51277},[94,67939,51284],{"class":104},[94,67941,67942,67944,67946],{"class":96,"line":16802},[94,67943,51753],{"class":104},[94,67945,51588],{"class":51277},[94,67947,51284],{"class":104},[94,67949,67950,67952,67954,67956,67958,67960],{"class":96,"line":16808},[94,67951,51318],{"class":104},[94,67953,51588],{"class":51277},[94,67955,53463],{"class":1944},[94,67957,150],{"class":104},[94,67959,64361],{"class":209},[94,67961,51284],{"class":104},[94,67963,67964,67966,67968,67970,67972,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994],{"class":96,"line":16813},[94,67965,55211],{"class":104},[94,67967,51588],{"class":51277},[94,67969,53463],{"class":1944},[94,67971,150],{"class":104},[94,67973,64376],{"class":209},[94,67975,61029],{"class":104},[94,67977,1443],{"class":51277},[94,67979,55216],{"class":1944},[94,67981,150],{"class":104},[94,67983,64387],{"class":209},[94,67985,55224],{"class":1944},[94,67987,150],{"class":104},[94,67989,7634],{"class":209},[94,67991,64396],{"class":104},[94,67993,51588],{"class":51277},[94,67995,51284],{"class":104},[94,67997,67998,68000,68002,68004,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028],{"class":96,"line":16827},[94,67999,55211],{"class":104},[94,68001,51588],{"class":51277},[94,68003,53463],{"class":1944},[94,68005,150],{"class":104},[94,68007,62600],{"class":209},[94,68009,61029],{"class":104},[94,68011,1443],{"class":51277},[94,68013,55216],{"class":1944},[94,68015,150],{"class":104},[94,68017,64423],{"class":209},[94,68019,55224],{"class":1944},[94,68021,150],{"class":104},[94,68023,7634],{"class":209},[94,68025,64396],{"class":104},[94,68027,51588],{"class":51277},[94,68029,51284],{"class":104},[94,68031,68032,68034,68036,68038,68040,68042,68044,68046,68048,68050,68052,68054,68056,68058,68060,68062],{"class":96,"line":16832},[94,68033,55211],{"class":104},[94,68035,51588],{"class":51277},[94,68037,53463],{"class":1944},[94,68039,150],{"class":104},[94,68041,62600],{"class":209},[94,68043,61029],{"class":104},[94,68045,1443],{"class":51277},[94,68047,55216],{"class":1944},[94,68049,150],{"class":104},[94,68051,64458],{"class":209},[94,68053,55224],{"class":1944},[94,68055,150],{"class":104},[94,68057,7634],{"class":209},[94,68059,64396],{"class":104},[94,68061,51588],{"class":51277},[94,68063,51284],{"class":104},[94,68065,68066,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094,68096],{"class":96,"line":16837},[94,68067,55211],{"class":104},[94,68069,51588],{"class":51277},[94,68071,53463],{"class":1944},[94,68073,150],{"class":104},[94,68075,62600],{"class":209},[94,68077,61029],{"class":104},[94,68079,1443],{"class":51277},[94,68081,55216],{"class":1944},[94,68083,150],{"class":104},[94,68085,64493],{"class":209},[94,68087,55224],{"class":1944},[94,68089,150],{"class":104},[94,68091,7634],{"class":209},[94,68093,64396],{"class":104},[94,68095,51588],{"class":51277},[94,68097,51284],{"class":104},[94,68099,68100,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126,68128,68130],{"class":96,"line":16851},[94,68101,55211],{"class":104},[94,68103,51588],{"class":51277},[94,68105,53463],{"class":1944},[94,68107,150],{"class":104},[94,68109,62600],{"class":209},[94,68111,61029],{"class":104},[94,68113,1443],{"class":51277},[94,68115,55216],{"class":1944},[94,68117,150],{"class":104},[94,68119,64528],{"class":209},[94,68121,55224],{"class":1944},[94,68123,150],{"class":104},[94,68125,7634],{"class":209},[94,68127,64396],{"class":104},[94,68129,51588],{"class":51277},[94,68131,51284],{"class":104},[94,68133,68134,68136,68138],{"class":96,"line":16863},[94,68135,51753],{"class":104},[94,68137,51588],{"class":51277},[94,68139,51284],{"class":104},[94,68141,68142,68144,68146],{"class":96,"line":16868},[94,68143,52394],{"class":104},[94,68145,51588],{"class":51277},[94,68147,51284],{"class":104},[94,68149,68150,68152,68154],{"class":96,"line":16881},[94,68151,52121],{"class":104},[94,68153,51790],{"class":51277},[94,68155,51284],{"class":104},[94,68157,68158],{"class":96,"line":16886},[94,68159,68160],{"class":163},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[94,68162,68163],{"class":96,"line":16891},[94,68164,68165],{"class":163},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[94,68167,68168,68170,68172,68174,68176,68178,68180,68183],{"class":96,"line":16896},[94,68169,11203],{"class":100},[94,68171,61269],{"class":153},[94,68173,13546],{"class":100},[94,68175,54373],{"class":104},[94,68177,54376],{"class":1944},[94,68179,105],{"class":104},[94,68181,68182],{"class":209},"'.tab-nav ul'",[94,68184,111],{"class":104},[94,68186,68187],{"class":96,"line":16909},[94,68188,68189],{"class":163},"    \u002F\u002F 2.添加事件\n",[94,68191,68192,68194,68196,68198,68200,68202,68204,68206,68208],{"class":96,"line":16914},[94,68193,66931],{"class":104},[94,68195,57790],{"class":1944},[94,68197,105],{"class":104},[94,68199,57795],{"class":209},[94,68201,12417],{"class":104},[94,68203,54426],{"class":100},[94,68205,1639],{"class":104},[94,68207,179],{"class":5198},[94,68209,12424],{"class":104},[94,68211,68212,68214,68216],{"class":96,"line":32616},[94,68213,58221],{"class":104},[94,68215,66987],{"class":1944},[94,68217,66990],{"class":104},[94,68219,68220],{"class":96,"line":32622},[94,68221,68222],{"class":163},"      \u002F\u002Fe.targer是我们点击的对象\n",[94,68224,68225,68227,68229,68231,68234],{"class":96,"line":32628},[94,68226,54457],{"class":100},[94,68228,67011],{"class":104},[94,68230,54463],{"class":100},[94,68232,68233],{"class":209}," 'A'",[94,68235,12424],{"class":104},[94,68237,68238,68240,68242,68244,68247,68249,68251,68253,68255],{"class":96,"line":32634},[94,68239,51902],{"class":104},[94,68241,54376],{"class":1944},[94,68243,105],{"class":104},[94,68245,68246],{"class":209},"'.active'",[94,68248,56980],{"class":104},[94,68250,56983],{"class":1944},[94,68252,105],{"class":104},[94,68254,64691],{"class":209},[94,68256,111],{"class":104},[94,68258,68259,68262,68264,68266,68268],{"class":96,"line":32640},[94,68260,68261],{"class":104},"        e.target.classList.",[94,68263,5316],{"class":1944},[94,68265,105],{"class":104},[94,68267,64691],{"class":209},[94,68269,111],{"class":104},[94,68271,68272],{"class":96,"line":32651},[94,68273,2381],{"emptyLinePlaceholder":20},[94,68275,68276],{"class":96,"line":32657},[94,68277,68278],{"class":163},"        \u002F\u002F 下面大盒子模块\n",[94,68280,68281],{"class":96,"line":32677},[94,68282,68283],{"class":163},"        \u002F\u002F console.log(e.target.dataset.id)\n",[94,68285,68286,68288,68290,68292,68294],{"class":96,"line":32683},[94,68287,61247],{"class":100},[94,68289,3013],{"class":153},[94,68291,13546],{"class":100},[94,68293,45549],{"class":100},[94,68295,68296],{"class":104},"e.target.dataset.id\n",[94,68298,68299,68301,68303,68305,68307,68309,68311,68313,68315],{"class":96,"line":32694},[94,68300,51902],{"class":104},[94,68302,54376],{"class":1944},[94,68304,105],{"class":104},[94,68306,64739],{"class":209},[94,68308,56980],{"class":104},[94,68310,56983],{"class":1944},[94,68312,105],{"class":104},[94,68314,64691],{"class":209},[94,68316,111],{"class":104},[94,68318,68319,68321,68323,68325,68327,68329,68331,68333,68335,68337,68339,68341,68343],{"class":96,"line":32700},[94,68320,51902],{"class":104},[94,68322,54376],{"class":1944},[94,68324,105],{"class":104},[94,68326,64765],{"class":209},[94,68328,546],{"class":104},[94,68330,45549],{"class":100},[94,68332,25101],{"class":153},[94,68334,57009],{"class":209},[94,68336,56980],{"class":104},[94,68338,5316],{"class":1944},[94,68340,105],{"class":104},[94,68342,64691],{"class":209},[94,68344,111],{"class":104},[94,68346,68347],{"class":96,"line":32706},[94,68348,2381],{"emptyLinePlaceholder":20},[94,68350,68351],{"class":96,"line":32712},[94,68352,52375],{"class":104},[94,68354,68355],{"class":96,"line":32718},[94,68356,33444],{"class":104},[94,68358,68359,68361,68363],{"class":96,"line":32724},[94,68360,52394],{"class":104},[94,68362,51790],{"class":51277},[94,68364,51284],{"class":104},[94,68366,68367,68369,68371],{"class":96,"line":32730},[94,68368,51762],{"class":104},[94,68370,51777],{"class":51277},[94,68372,51284],{"class":104},[94,68374,68375],{"class":96,"line":32736},[94,68376,2381],{"emptyLinePlaceholder":20},[94,68378,68379,68381,68383],{"class":96,"line":32756},[94,68380,51762],{"class":104},[94,68382,50612],{"class":51277},[94,68384,51284],{"class":104},[65,68386,68388],{"id":68387},"_333-页面加载事件","3.3.3 页面加载事件",[48,68390,68391],{},[51,68392,68393],{},"load",[40,68395,68396],{},[1443,68397],{"alt":14,"src":68398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[40,68400,68401],{},"window代表整个窗口，比document还要大",[40,68403,68404],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[40,68406,68407],{},"img.addEventListener('load', function () {",[40,68409,68410],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[40,68412,52441],{},[48,68414,68415],{"start":15},[51,68416,68417],{},"DOMContentLoaded",[40,68419,68420],{},[1443,68421],{"alt":14,"src":68422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[40,68424,68425],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[65,68427,68429],{"id":68428},"_334-元素滚动事件","3.3.4 元素滚动事件",[40,68431,68432],{},[1443,68433],{"alt":14,"src":68434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[40,68436,68437],{},[1443,68438],{"alt":14,"src":68439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[40,68441,68442],{},[1443,68443],{"alt":14,"src":68444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[40,68446,68447],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[40,68449,68450],{},"获得的是数字型数据，不带单位",[40,68452,68453],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[40,68455,68456],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[40,68458,68459],{},"它是通过document.documentElement来获取",[40,68461,68462],{},[1443,68463],{"alt":14,"src":68464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[40,68466,68467],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[65,68469,68471],{"id":68470},"_335-页面缩放事件","3.3.5 页面缩放事件",[40,68473,68474],{},[1443,68475],{"alt":14,"src":68476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[40,68478,68479],{},[1443,68480],{"alt":14,"src":68481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[65,68483,68485],{"id":68484},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[40,68487,68488],{},[1443,68489],{"alt":14,"src":68490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[40,68492,68493],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[40,68495,68496],{},[1443,68497],{"alt":14,"src":68498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[40,68500,68501],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[40,68503,68504],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[40,68506,68507],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[40,68509,68510],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[40,68512,68513],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[40,68515,68516],{},[1443,68517],{"alt":14,"src":68518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[40,68520,68521],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[40,68523,68524],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[40,68526,68527],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[40,68529,68530],{},"e.pageX-box.getBoundingClientRect()",[65,68532,68534],{"id":68533},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[40,68536,68537],{},[1443,68538],{"alt":14,"src":68539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[40,68541,68542],{},"这个是相对于视口来说的，它是个方法，不是属性值",[65,68544,68546],{"id":68545},"_338-总结","3.3.8 总结",[40,68548,68549],{},[1443,68550],{"alt":14,"src":68551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[40,68553,68554],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[40,68556,68557],{},"修改盒子的宽高只能通过width和height来实现",[65,68559,68561],{"id":68560},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[85,68563,68565],{"className":50610,"code":68564,"language":50612,"meta":14,"style":14},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[91,68566,68567,68572,68577,68582,68587],{"__ignoreMap":14},[94,68568,68569],{"class":96,"line":97},[94,68570,68571],{"class":104},"\u002F* 页面滑动 *\u002F\n",[94,68573,68574],{"class":96,"line":15},[94,68575,68576],{"class":104},"html {\n",[94,68578,68579],{"class":96,"line":1160},[94,68580,68581],{"class":104},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[94,68583,68584],{"class":96,"line":1175},[94,68585,68586],{"class":104},"  scroll-behavior: smooth;\n",[94,68588,68589],{"class":96,"line":1181},[94,68590,1546],{"class":104},[40,68592,68593],{},"默认是auto",[65,68595,68597],{"id":68596},"_3310-日期对象","3.3.10 日期对象",[21980,68599,68601],{"id":68600},"_33101-实例化","3.3.10.1 实例化",[40,68603,68604],{},[1443,68605],{"alt":14,"src":68606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[21980,68608,68610],{"id":68609},"_33102-时期对象方法","3.3.10.2 时期对象方法",[40,68612,68613],{},[1443,68614],{"alt":14,"src":68615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[40,68617,68618],{},"月份+1",[40,68620,68621],{},"老外认为第一天为0，星期天",[40,68623,68624],{},"方法使用的时候必须要跟括号",[40,68626,68627],{},"快速获得日期",[40,68629,68630],{},"\u002F\u002F 得到年月日",[40,68632,68633],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[40,68635,68636],{},"\u002F\u002F 得到当地日期",[40,68638,68639],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[40,68641,68642],{},"\u002F\u002F 得到当地时间",[40,68644,68645],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[40,68647,68648],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[40,68650,68651],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51790,68653,68654],{},"\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",[40,68656,68657],{},"学会去封装函数！",[21980,68659,68661],{"id":68660},"_33103-时间戳","3.3.10.3 时间戳",[40,68663,68664],{},[1443,68665],{"alt":14,"src":68666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[40,68668,68669],{},[1443,68670],{"alt":14,"src":68671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[40,68673,68674],{},"三种方法记住一个就可以",[65,68676,68678],{"id":68677},"_3311-节点操作","3.3.11 节点操作",[21980,68680,68682],{"id":68681},"_33111-dom节点","3.3.11.1 DOM节点",[40,68684,68685],{},[1443,68686],{"alt":14,"src":68687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[40,68689,68690],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[21980,68692,68694],{"id":68693},"_33112-查找节点","3.3.11.2 查找节点",[40,68696,68697],{},"前边的document.querySelector()是获取的元素",[40,68699,68700],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[40,68702,68703],{},[1443,68704],{"alt":14,"src":68705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[48,68707,68708],{},[51,68709,68710],{},"父节点",[40,68712,68713],{},[1443,68714],{"alt":14,"src":68715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[48,68717,68718],{"start":15},[51,68719,68720],{},"子节点",[40,68722,68723],{},[1443,68724],{"alt":14,"src":68725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[40,68727,68728],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[40,68730,68731],{},"children获得的是伪数组，是亲儿子",[48,68733,68734],{"start":1160},[51,68735,68736],{},"兄弟节点",[40,68738,68739],{},[1443,68740],{"alt":14,"src":68741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[21980,68743,68745],{"id":68744},"_33113-增加节点","3.3.11.3 增加节点",[40,68747,68748],{},[1443,68749],{"alt":14,"src":68750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[40,68752,68753],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[40,68755,68756],{},[1443,68757],{"alt":14,"src":68758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[40,68760,68761],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[40,68763,68764],{},"下面是写法的部分展示，就按照下边的格式来写",[40,68766,68767],{},"例：",[51790,68769,68770],{},"\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",[40,68772,68773],{},[1443,68774],{"alt":14,"src":68775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[40,68777,68778],{},"false只克隆标签，里边的内容不会克隆过来",[85,68780,68782],{"className":50610,"code":68781,"language":50612,"meta":14,"style":14},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[91,68783,68784],{"__ignoreMap":14},[94,68785,68786],{"class":96,"line":97},[94,68787,68781],{"class":104},[21980,68789,68791],{"id":68790},"_33114-删除节点","3.3.11.4 删除节点",[40,68793,68794],{},[1443,68795],{"alt":14,"src":68796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[40,68798,68799],{},"父亲删儿子",[40,68801,68802],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[65,68804,68806],{"id":68805},"_3312-m端事件","3.3.12 M端事件",[40,68808,68809],{},"M端就是移动端",[40,68811,68812],{},[1443,68813],{"alt":14,"src":68814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[65,68816,68818],{"id":68817},"_3313-插件","3.3.13 插件",[40,68820,68821],{},"要熟悉官网！！！",[40,68823,68824],{},[343,68825,68826],{"href":68826,"rel":68827},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23847],[40,68829,68830],{},[343,68831,68832],{"href":68832,"rel":68833},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23847],[65,68835,68837],{"id":68836},"_3314-学生信息表","3.3.14 学生信息表",[48,68839,68840,68843,68846,68849,68852,68855,68858,68861],{},[51,68841,68842],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[51,68844,68845],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[51,68847,68848],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[51,68850,68851],{},"用好表单元素自带的属性，value,name等",[51,68853,68854],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[51,68856,68857],{},"不要忘记事件对象",[51,68859,68860],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[51,68862,68863],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[40,68865,68866],{},"结构：",[85,68868,68870],{"className":50610,"code":68869,"language":50612,"meta":14,"style":14},"\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",[91,68871,68872,68882,68896,68900,68908,68922,68942,68963,68976,69000,69008,69012,69020,69033,69054,69082,69110,69115,69137,69157,69176,69184,69212,69234,69254,69274,69294,69314,69334,69342,69362,69370,69374,69387,69395,69403,69411,69424,69437,69450,69463,69476,69489,69502,69510,69518,69526,69531,69536,69541,69546,69551,69556,69561,69566,69571,69576,69581,69586,69591,69599,69607,69615,69619,69639,69658,69678,69698,69718,69738,69742,69747,69767,69772,69782,69787,69792,69812,69834,69839,69849,69853,69857,69862,69867,69896,69910,69925,69929,69933,69937,69942,69953,69966,69971,69976,69981,69986,69991,69995,70000,70005,70014,70019,70024,70036,70041,70048,70052,70057,70067,70072,70082,70087,70115,70136,70146,70166,70184,70201,70218,70235,70252,70256,70266,70271,70276,70281,70292,70296,70300,70304,70309,70314,70335,70347,70352,70357,70362,70376,70381,70388,70392,70396,70404,70408,70416,70420],{"__ignoreMap":14},[94,68873,68874,68876,68878,68880],{"class":96,"line":97},[94,68875,51274],{"class":104},[94,68877,51278],{"class":51277},[94,68879,51281],{"class":1944},[94,68881,51284],{"class":104},[94,68883,68884,68886,68888,68890,68892,68894],{"class":96,"line":15},[94,68885,1015],{"class":104},[94,68887,50612],{"class":51277},[94,68889,51293],{"class":1944},[94,68891,150],{"class":104},[94,68893,51298],{"class":209},[94,68895,51284],{"class":104},[94,68897,68898],{"class":96,"line":1160},[94,68899,2381],{"emptyLinePlaceholder":20},[94,68901,68902,68904,68906],{"class":96,"line":1175},[94,68903,1015],{"class":104},[94,68905,51311],{"class":51277},[94,68907,51284],{"class":104},[94,68909,68910,68912,68914,68916,68918,68920],{"class":96,"line":1181},[94,68911,52121],{"class":104},[94,68913,51321],{"class":51277},[94,68915,51324],{"class":1944},[94,68917,150],{"class":104},[94,68919,51329],{"class":209},[94,68921,59104],{"class":104},[94,68923,68924,68926,68928,68930,68932,68934,68936,68938,68940],{"class":96,"line":1195},[94,68925,52121],{"class":104},[94,68927,51321],{"class":51277},[94,68929,14902],{"class":1944},[94,68931,150],{"class":104},[94,68933,51368],{"class":209},[94,68935,51348],{"class":1944},[94,68937,150],{"class":104},[94,68939,51375],{"class":209},[94,68941,59104],{"class":104},[94,68943,68944,68946,68948,68950,68952,68954,68956,68958,68961],{"class":96,"line":1201},[94,68945,52121],{"class":104},[94,68947,51321],{"class":51277},[94,68949,51340],{"class":1944},[94,68951,150],{"class":104},[94,68953,51345],{"class":209},[94,68955,51348],{"class":1944},[94,68957,150],{"class":104},[94,68959,68960],{"class":209},"\"ie=edge\"",[94,68962,59104],{"class":104},[94,68964,68965,68967,68969,68972,68974],{"class":96,"line":1292},[94,68966,52121],{"class":104},[94,68968,51384],{"class":51277},[94,68970,68971],{"class":104},">学生信息管理\u003C\u002F",[94,68973,51384],{"class":51277},[94,68975,51284],{"class":104},[94,68977,68978,68980,68983,68986,68988,68991,68993,68995,68998],{"class":96,"line":1298},[94,68979,52121],{"class":104},[94,68981,68982],{"class":51277},"link",[94,68984,68985],{"class":1944}," rel",[94,68987,150],{"class":104},[94,68989,68990],{"class":209},"\"stylesheet\"",[94,68992,61034],{"class":1944},[94,68994,150],{"class":104},[94,68996,68997],{"class":209},"\"css\u002Findex.css\"",[94,68999,59104],{"class":104},[94,69001,69002,69004,69006],{"class":96,"line":1310},[94,69003,51762],{"class":104},[94,69005,51311],{"class":51277},[94,69007,51284],{"class":104},[94,69009,69010],{"class":96,"line":1593},[94,69011,2381],{"emptyLinePlaceholder":20},[94,69013,69014,69016,69018],{"class":96,"line":1598},[94,69015,1015],{"class":104},[94,69017,51777],{"class":51277},[94,69019,51284],{"class":104},[94,69021,69022,69024,69026,69029,69031],{"class":96,"line":1604},[94,69023,52121],{"class":104},[94,69025,10],{"class":51277},[94,69027,69028],{"class":104},">新增学员\u003C\u002F",[94,69030,10],{"class":51277},[94,69032,51284],{"class":104},[94,69034,69035,69037,69039,69041,69043,69045,69048,69050,69052],{"class":96,"line":1609},[94,69036,52121],{"class":104},[94,69038,66602],{"class":51277},[94,69040,53463],{"class":1944},[94,69042,150],{"class":104},[94,69044,62641],{"class":209},[94,69046,69047],{"class":1944}," autocomplete",[94,69049,150],{"class":104},[94,69051,31759],{"class":209},[94,69053,51284],{"class":104},[94,69055,69056,69059,69061,69063,69065,69067,69069,69071,69074,69076,69078,69080],{"class":96,"line":1623},[94,69057,69058],{"class":104},"    姓名：\u003C",[94,69060,53798],{"class":51277},[94,69062,53801],{"class":1944},[94,69064,150],{"class":104},[94,69066,62676],{"class":209},[94,69068,53463],{"class":1944},[94,69070,150],{"class":104},[94,69072,69073],{"class":209},"\"uname\"",[94,69075,14902],{"class":1944},[94,69077,150],{"class":104},[94,69079,69073],{"class":209},[94,69081,59104],{"class":104},[94,69083,69084,69087,69089,69091,69093,69095,69097,69099,69102,69104,69106,69108],{"class":96,"line":1628},[94,69085,69086],{"class":104},"    年龄：\u003C",[94,69088,53798],{"class":51277},[94,69090,53801],{"class":1944},[94,69092,150],{"class":104},[94,69094,62676],{"class":209},[94,69096,53463],{"class":1944},[94,69098,150],{"class":104},[94,69100,69101],{"class":209},"\"age\"",[94,69103,14902],{"class":1944},[94,69105,150],{"class":104},[94,69107,69101],{"class":209},[94,69109,59104],{"class":104},[94,69111,69112],{"class":96,"line":1634},[94,69113,69114],{"class":104},"    性别:\n",[94,69116,69117,69119,69122,69124,69126,69129,69131,69133,69135],{"class":96,"line":1655},[94,69118,51318],{"class":104},[94,69120,69121],{"class":51277},"select",[94,69123,14902],{"class":1944},[94,69125,150],{"class":104},[94,69127,69128],{"class":209},"\"gender\"",[94,69130,53463],{"class":1944},[94,69132,150],{"class":104},[94,69134,69128],{"class":209},[94,69136,51284],{"class":104},[94,69138,69139,69141,69144,69146,69148,69150,69153,69155],{"class":96,"line":1660},[94,69140,55211],{"class":104},[94,69142,69143],{"class":51277},"option",[94,69145,66628],{"class":1944},[94,69147,150],{"class":104},[94,69149,9943],{"class":209},[94,69151,69152],{"class":104},">男\u003C\u002F",[94,69154,69143],{"class":51277},[94,69156,51284],{"class":104},[94,69158,69159,69161,69163,69165,69167,69169,69172,69174],{"class":96,"line":1674},[94,69160,55211],{"class":104},[94,69162,69143],{"class":51277},[94,69164,66628],{"class":1944},[94,69166,150],{"class":104},[94,69168,10012],{"class":209},[94,69170,69171],{"class":104},">女\u003C\u002F",[94,69173,69143],{"class":51277},[94,69175,51284],{"class":104},[94,69177,69178,69180,69182],{"class":96,"line":1679},[94,69179,51753],{"class":104},[94,69181,69121],{"class":51277},[94,69183,51284],{"class":104},[94,69185,69186,69189,69191,69193,69195,69197,69199,69201,69204,69206,69208,69210],{"class":96,"line":1708},[94,69187,69188],{"class":104},"    薪资：\u003C",[94,69190,53798],{"class":51277},[94,69192,53801],{"class":1944},[94,69194,150],{"class":104},[94,69196,62676],{"class":209},[94,69198,53463],{"class":1944},[94,69200,150],{"class":104},[94,69202,69203],{"class":209},"\"salary\"",[94,69205,14902],{"class":1944},[94,69207,150],{"class":104},[94,69209,69203],{"class":209},[94,69211,59104],{"class":104},[94,69213,69214,69217,69219,69221,69223,69226,69228,69230,69232],{"class":96,"line":1713},[94,69215,69216],{"class":104},"    就业城市：\u003C",[94,69218,69121],{"class":51277},[94,69220,14902],{"class":1944},[94,69222,150],{"class":104},[94,69224,69225],{"class":209},"\"city\"",[94,69227,53463],{"class":1944},[94,69229,150],{"class":104},[94,69231,69225],{"class":209},[94,69233,51284],{"class":104},[94,69235,69236,69238,69240,69242,69244,69247,69250,69252],{"class":96,"line":1730},[94,69237,55211],{"class":104},[94,69239,69143],{"class":51277},[94,69241,66628],{"class":1944},[94,69243,150],{"class":104},[94,69245,69246],{"class":209},"\"北京\"",[94,69248,69249],{"class":104},">北京\u003C\u002F",[94,69251,69143],{"class":51277},[94,69253,51284],{"class":104},[94,69255,69256,69258,69260,69262,69264,69267,69270,69272],{"class":96,"line":1735},[94,69257,55211],{"class":104},[94,69259,69143],{"class":51277},[94,69261,66628],{"class":1944},[94,69263,150],{"class":104},[94,69265,69266],{"class":209},"\"上海\"",[94,69268,69269],{"class":104},">上海\u003C\u002F",[94,69271,69143],{"class":51277},[94,69273,51284],{"class":104},[94,69275,69276,69278,69280,69282,69284,69287,69290,69292],{"class":96,"line":1740},[94,69277,55211],{"class":104},[94,69279,69143],{"class":51277},[94,69281,66628],{"class":1944},[94,69283,150],{"class":104},[94,69285,69286],{"class":209},"\"广州\"",[94,69288,69289],{"class":104},">广州\u003C\u002F",[94,69291,69143],{"class":51277},[94,69293,51284],{"class":104},[94,69295,69296,69298,69300,69302,69304,69307,69310,69312],{"class":96,"line":1745},[94,69297,55211],{"class":104},[94,69299,69143],{"class":51277},[94,69301,66628],{"class":1944},[94,69303,150],{"class":104},[94,69305,69306],{"class":209},"\"深圳\"",[94,69308,69309],{"class":104},">深圳\u003C\u002F",[94,69311,69143],{"class":51277},[94,69313,51284],{"class":104},[94,69315,69316,69318,69320,69322,69324,69327,69330,69332],{"class":96,"line":1759},[94,69317,55211],{"class":104},[94,69319,69143],{"class":51277},[94,69321,66628],{"class":1944},[94,69323,150],{"class":104},[94,69325,69326],{"class":209},"\"曹县\"",[94,69328,69329],{"class":104},">曹县\u003C\u002F",[94,69331,69143],{"class":51277},[94,69333,51284],{"class":104},[94,69335,69336,69338,69340],{"class":96,"line":1764},[94,69337,51753],{"class":104},[94,69339,69121],{"class":51277},[94,69341,51284],{"class":104},[94,69343,69344,69346,69348,69350,69352,69355,69358,69360],{"class":96,"line":2558},[94,69345,51318],{"class":104},[94,69347,53864],{"class":51277},[94,69349,53463],{"class":1944},[94,69351,150],{"class":104},[94,69353,69354],{"class":209},"\"add\"",[94,69356,69357],{"class":104},">录入\u003C\u002F",[94,69359,53864],{"class":51277},[94,69361,51284],{"class":104},[94,69363,69364,69366,69368],{"class":96,"line":2572},[94,69365,52394],{"class":104},[94,69367,66602],{"class":51277},[94,69369,51284],{"class":104},[94,69371,69372],{"class":96,"line":2580},[94,69373,2381],{"emptyLinePlaceholder":20},[94,69375,69376,69378,69380,69383,69385],{"class":96,"line":2585},[94,69377,52121],{"class":104},[94,69379,10],{"class":51277},[94,69381,69382],{"class":104},">就业榜\u003C\u002F",[94,69384,10],{"class":51277},[94,69386,51284],{"class":104},[94,69388,69389,69391,69393],{"class":96,"line":2591},[94,69390,52121],{"class":104},[94,69392,242],{"class":51277},[94,69394,51284],{"class":104},[94,69396,69397,69399,69401],{"class":96,"line":2597},[94,69398,51318],{"class":104},[94,69400,245],{"class":51277},[94,69402,51284],{"class":104},[94,69404,69405,69407,69409],{"class":96,"line":2602},[94,69406,55211],{"class":104},[94,69408,248],{"class":51277},[94,69410,51284],{"class":104},[94,69412,69413,69415,69417,69420,69422],{"class":96,"line":7930},[94,69414,55279],{"class":104},[94,69416,251],{"class":51277},[94,69418,69419],{"class":104},">序号\u003C\u002F",[94,69421,251],{"class":51277},[94,69423,51284],{"class":104},[94,69425,69426,69428,69430,69433,69435],{"class":96,"line":7954},[94,69427,55279],{"class":104},[94,69429,251],{"class":51277},[94,69431,69432],{"class":104},">姓名\u003C\u002F",[94,69434,251],{"class":51277},[94,69436,51284],{"class":104},[94,69438,69439,69441,69443,69446,69448],{"class":96,"line":7959},[94,69440,55279],{"class":104},[94,69442,251],{"class":51277},[94,69444,69445],{"class":104},">年龄\u003C\u002F",[94,69447,251],{"class":51277},[94,69449,51284],{"class":104},[94,69451,69452,69454,69456,69459,69461],{"class":96,"line":7965},[94,69453,55279],{"class":104},[94,69455,251],{"class":51277},[94,69457,69458],{"class":104},">性别\u003C\u002F",[94,69460,251],{"class":51277},[94,69462,51284],{"class":104},[94,69464,69465,69467,69469,69472,69474],{"class":96,"line":7992},[94,69466,55279],{"class":104},[94,69468,251],{"class":51277},[94,69470,69471],{"class":104},">薪资\u003C\u002F",[94,69473,251],{"class":51277},[94,69475,51284],{"class":104},[94,69477,69478,69480,69482,69485,69487],{"class":96,"line":7997},[94,69479,55279],{"class":104},[94,69481,251],{"class":51277},[94,69483,69484],{"class":104},">就业城市\u003C\u002F",[94,69486,251],{"class":51277},[94,69488,51284],{"class":104},[94,69490,69491,69493,69495,69498,69500],{"class":96,"line":8003},[94,69492,55279],{"class":104},[94,69494,251],{"class":51277},[94,69496,69497],{"class":104},">操作\u003C\u002F",[94,69499,251],{"class":51277},[94,69501,51284],{"class":104},[94,69503,69504,69506,69508],{"class":96,"line":8015},[94,69505,55384],{"class":104},[94,69507,248],{"class":51277},[94,69509,51284],{"class":104},[94,69511,69512,69514,69516],{"class":96,"line":8027},[94,69513,51753],{"class":104},[94,69515,245],{"class":51277},[94,69517,51284],{"class":104},[94,69519,69520,69522,69524],{"class":96,"line":8039},[94,69521,51318],{"class":104},[94,69523,289],{"class":51277},[94,69525,51284],{"class":104},[94,69527,69528],{"class":96,"line":9698},[94,69529,69530],{"class":163},"      \u003C!-- \n",[94,69532,69533],{"class":96,"line":9723},[94,69534,69535],{"class":163},"        \u003Ctr>\n",[94,69537,69538],{"class":96,"line":9746},[94,69539,69540],{"class":163},"          \u003Ctd>1001\u003C\u002Ftd>\n",[94,69542,69543],{"class":96,"line":9770},[94,69544,69545],{"class":163},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[94,69547,69548],{"class":96,"line":9775},[94,69549,69550],{"class":163},"          \u003Ctd>19\u003C\u002Ftd>\n",[94,69552,69553],{"class":96,"line":9780},[94,69554,69555],{"class":163},"          \u003Ctd>男\u003C\u002Ftd>\n",[94,69557,69558],{"class":96,"line":9785},[94,69559,69560],{"class":163},"          \u003Ctd>15000\u003C\u002Ftd>\n",[94,69562,69563],{"class":96,"line":9794},[94,69564,69565],{"class":163},"          \u003Ctd>上海\u003C\u002Ftd>\n",[94,69567,69568],{"class":96,"line":9799},[94,69569,69570],{"class":163},"          \u003Ctd>\n",[94,69572,69573],{"class":96,"line":9805},[94,69574,69575],{"class":163},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[94,69577,69578],{"class":96,"line":9826},[94,69579,69580],{"class":163},"          \u003C\u002Ftd>\n",[94,69582,69583],{"class":96,"line":9832},[94,69584,69585],{"class":163},"        \u003C\u002Ftr> \n",[94,69587,69588],{"class":96,"line":9846},[94,69589,69590],{"class":163},"        -->\n",[94,69592,69593,69595,69597],{"class":96,"line":9852},[94,69594,51753],{"class":104},[94,69596,289],{"class":51277},[94,69598,51284],{"class":104},[94,69600,69601,69603,69605],{"class":96,"line":9879},[94,69602,52394],{"class":104},[94,69604,242],{"class":51277},[94,69606,51284],{"class":104},[94,69608,69609,69611,69613],{"class":96,"line":9888},[94,69610,52121],{"class":104},[94,69612,51790],{"class":51277},[94,69614,51284],{"class":104},[94,69616,69617],{"class":96,"line":9894},[94,69618,59935],{"class":163},[94,69620,69621,69623,69626,69628,69630,69632,69634,69637],{"class":96,"line":9902},[94,69622,11203],{"class":100},[94,69624,69625],{"class":153}," uname",[94,69627,13546],{"class":100},[94,69629,54373],{"class":104},[94,69631,54376],{"class":1944},[94,69633,105],{"class":104},[94,69635,69636],{"class":209},"'.uname'",[94,69638,111],{"class":104},[94,69640,69641,69643,69645,69647,69649,69651,69653,69656],{"class":96,"line":9907},[94,69642,11203],{"class":100},[94,69644,15671],{"class":153},[94,69646,13546],{"class":100},[94,69648,54373],{"class":104},[94,69650,54376],{"class":1944},[94,69652,105],{"class":104},[94,69654,69655],{"class":209},"'.age'",[94,69657,111],{"class":104},[94,69659,69660,69662,69665,69667,69669,69671,69673,69676],{"class":96,"line":16586},[94,69661,11203],{"class":100},[94,69663,69664],{"class":153}," gender",[94,69666,13546],{"class":100},[94,69668,54373],{"class":104},[94,69670,54376],{"class":1944},[94,69672,105],{"class":104},[94,69674,69675],{"class":209},"'.gender'",[94,69677,111],{"class":104},[94,69679,69680,69682,69685,69687,69689,69691,69693,69696],{"class":96,"line":16592},[94,69681,11203],{"class":100},[94,69683,69684],{"class":153}," salary",[94,69686,13546],{"class":100},[94,69688,54373],{"class":104},[94,69690,54376],{"class":1944},[94,69692,105],{"class":104},[94,69694,69695],{"class":209},"'.salary'",[94,69697,111],{"class":104},[94,69699,69700,69702,69705,69707,69709,69711,69713,69716],{"class":96,"line":16615},[94,69701,11203],{"class":100},[94,69703,69704],{"class":153}," city",[94,69706,13546],{"class":100},[94,69708,54373],{"class":104},[94,69710,54376],{"class":1944},[94,69712,105],{"class":104},[94,69714,69715],{"class":209},"'.city'",[94,69717,111],{"class":104},[94,69719,69720,69722,69725,69727,69729,69731,69733,69736],{"class":96,"line":16621},[94,69721,11203],{"class":100},[94,69723,69724],{"class":153}," tbody",[94,69726,13546],{"class":100},[94,69728,54373],{"class":104},[94,69730,54376],{"class":1944},[94,69732,105],{"class":104},[94,69734,69735],{"class":209},"'tbody'",[94,69737,111],{"class":104},[94,69739,69740],{"class":96,"line":16644},[94,69741,2381],{"emptyLinePlaceholder":20},[94,69743,69744],{"class":96,"line":16658},[94,69745,69746],{"class":163},"    \u002F\u002F 获取所有带有name属性的元素\n",[94,69748,69749,69751,69754,69756,69758,69760,69762,69765],{"class":96,"line":16678},[94,69750,11203],{"class":100},[94,69752,69753],{"class":153}," items",[94,69755,13546],{"class":100},[94,69757,54373],{"class":104},[94,69759,55658],{"class":1944},[94,69761,105],{"class":104},[94,69763,69764],{"class":209},"'[name]'",[94,69766,111],{"class":104},[94,69768,69769],{"class":96,"line":16684},[94,69770,69771],{"class":163},"    \u002F\u002F 声明一个空的数组\n",[94,69773,69774,69776,69778,69780],{"class":96,"line":16695},[94,69775,11203],{"class":100},[94,69777,57672],{"class":153},[94,69779,13546],{"class":100},[94,69781,51815],{"class":104},[94,69783,69784],{"class":96,"line":16718},[94,69785,69786],{"class":163},"    \u002F\u002F 1.录入模块\n",[94,69788,69789],{"class":96,"line":16740},[94,69790,69791],{"class":163},"    \u002F\u002F 1.1这是一个表单提交事件\n",[94,69793,69794,69796,69799,69801,69803,69805,69807,69810],{"class":96,"line":16745},[94,69795,11203],{"class":100},[94,69797,69798],{"class":153}," info",[94,69800,13546],{"class":100},[94,69802,54373],{"class":104},[94,69804,54376],{"class":1944},[94,69806,105],{"class":104},[94,69808,69809],{"class":209},"'.info'",[94,69811,111],{"class":104},[94,69813,69814,69817,69819,69821,69824,69826,69828,69830,69832],{"class":96,"line":16751},[94,69815,69816],{"class":104},"    info.",[94,69818,57790],{"class":1944},[94,69820,105],{"class":104},[94,69822,69823],{"class":209},"'submit'",[94,69825,12417],{"class":104},[94,69827,54426],{"class":100},[94,69829,1639],{"class":104},[94,69831,179],{"class":5198},[94,69833,12424],{"class":104},[94,69835,69836],{"class":96,"line":16765},[94,69837,69838],{"class":163},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[94,69840,69841,69844,69847],{"class":96,"line":16778},[94,69842,69843],{"class":104},"      e.",[94,69845,69846],{"class":1944},"preventDefault",[94,69848,1957],{"class":104},[94,69850,69851],{"class":96,"line":16783},[94,69852,59989],{"class":163},[94,69854,69855],{"class":96,"line":16797},[94,69856,2381],{"emptyLinePlaceholder":20},[94,69858,69859],{"class":96,"line":16802},[94,69860,69861],{"class":163},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[94,69863,69864],{"class":96,"line":16808},[94,69865,69866],{"class":163},"      \u002F\u002F 先遍历循环\n",[94,69868,69869,69871,69873,69875,69877,69879,69881,69883,69885,69888,69890,69892,69894],{"class":96,"line":16813},[94,69870,52261],{"class":100},[94,69872,1639],{"class":104},[94,69874,51824],{"class":100},[94,69876,9420],{"class":104},[94,69878,150],{"class":100},[94,69880,4074],{"class":153},[94,69882,9427],{"class":104},[94,69884,1015],{"class":100},[94,69886,69887],{"class":104}," items.",[94,69889,51945],{"class":153},[94,69891,3195],{"class":104},[94,69893,2273],{"class":100},[94,69895,12424],{"class":104},[94,69897,69898,69900,69903,69905,69908],{"class":96,"line":16827},[94,69899,2478],{"class":100},[94,69901,69902],{"class":104}," (items[i].value ",[94,69904,54463],{"class":100},[94,69906,69907],{"class":209}," ''",[94,69909,12424],{"class":104},[94,69911,69912,69915,69918,69920,69923],{"class":96,"line":16832},[94,69913,69914],{"class":100},"          return",[94,69916,69917],{"class":1944}," alert",[94,69919,105],{"class":104},[94,69921,69922],{"class":209},"'输入内容不能为空'",[94,69924,111],{"class":104},[94,69926,69927],{"class":96,"line":16837},[94,69928,2510],{"class":104},[94,69930,69931],{"class":96,"line":16851},[94,69932,52375],{"class":104},[94,69934,69935],{"class":96,"line":16863},[94,69936,2381],{"emptyLinePlaceholder":20},[94,69938,69939],{"class":96,"line":16868},[94,69940,69941],{"class":163},"      \u002F\u002F 创建新的对象\n",[94,69943,69944,69946,69949,69951],{"class":96,"line":16881},[94,69945,58205],{"class":100},[94,69947,69948],{"class":153}," obj",[94,69950,13546],{"class":100},[94,69952,15554],{"class":104},[94,69954,69955,69958,69960,69962,69964],{"class":96,"line":16886},[94,69956,69957],{"class":104},"        stuID: arr.",[94,69959,51945],{"class":153},[94,69961,45549],{"class":100},[94,69963,25101],{"class":153},[94,69965,31449],{"class":104},[94,69967,69968],{"class":96,"line":16891},[94,69969,69970],{"class":104},"        uname: uname.value,\n",[94,69972,69973],{"class":96,"line":16896},[94,69974,69975],{"class":104},"        age: age.value,\n",[94,69977,69978],{"class":96,"line":16909},[94,69979,69980],{"class":104},"        gender: gender.value,\n",[94,69982,69983],{"class":96,"line":16914},[94,69984,69985],{"class":104},"        salary: salary.value,\n",[94,69987,69988],{"class":96,"line":32616},[94,69989,69990],{"class":104},"        city: city.value\n",[94,69992,69993],{"class":96,"line":32622},[94,69994,52375],{"class":104},[94,69996,69997],{"class":96,"line":32628},[94,69998,69999],{"class":163},"      \u002F\u002F console.log(obj);\n",[94,70001,70002],{"class":96,"line":32634},[94,70003,70004],{"class":163},"      \u002F\u002F 追加到数组里面\n",[94,70006,70007,70009,70011],{"class":96,"line":32640},[94,70008,57984],{"class":104},[94,70010,51861],{"class":1944},[94,70012,70013],{"class":104},"(obj)\n",[94,70015,70016],{"class":96,"line":32651},[94,70017,70018],{"class":163},"      \u002F\u002F console.log(arr);\n",[94,70020,70021],{"class":96,"line":32657},[94,70022,70023],{"class":163},"      \u002F\u002F 清空表单  reset重置表单\n",[94,70025,70026,70029,70031,70034],{"class":96,"line":32677},[94,70027,70028],{"class":153},"      this",[94,70030,663],{"class":104},[94,70032,70033],{"class":1944},"reset",[94,70035,1957],{"class":104},[94,70037,70038],{"class":96,"line":32683},[94,70039,70040],{"class":163},"      \u002F\u002F 调用渲染函数\n",[94,70042,70043,70046],{"class":96,"line":32694},[94,70044,70045],{"class":1944},"      render",[94,70047,1957],{"class":104},[94,70049,70050],{"class":96,"line":32700},[94,70051,33444],{"class":104},[94,70053,70054],{"class":96,"line":32706},[94,70055,70056],{"class":163},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[94,70058,70059,70062,70065],{"class":96,"line":32712},[94,70060,70061],{"class":100},"    function",[94,70063,70064],{"class":1944}," render",[94,70066,10835],{"class":104},[94,70068,70069],{"class":96,"line":32718},[94,70070,70071],{"class":163},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[94,70073,70074,70077,70079],{"class":96,"line":32724},[94,70075,70076],{"class":104},"      tbody.innerHTML ",[94,70078,150],{"class":100},[94,70080,70081],{"class":209}," ''\n",[94,70083,70084],{"class":96,"line":32730},[94,70085,70086],{"class":163},"      \u002F\u002F 遍历数组\n",[94,70088,70089,70091,70093,70095,70097,70099,70101,70103,70105,70107,70109,70111,70113],{"class":96,"line":32736},[94,70090,52261],{"class":100},[94,70092,1639],{"class":104},[94,70094,51824],{"class":100},[94,70096,9420],{"class":104},[94,70098,150],{"class":100},[94,70100,4074],{"class":153},[94,70102,9427],{"class":104},[94,70104,1015],{"class":100},[94,70106,51942],{"class":104},[94,70108,51945],{"class":153},[94,70110,3195],{"class":104},[94,70112,2273],{"class":100},[94,70114,12424],{"class":104},[94,70116,70117,70119,70122,70124,70126,70129,70131,70134],{"class":96,"line":32756},[94,70118,61247],{"class":100},[94,70120,70121],{"class":153}," tr",[94,70123,13546],{"class":100},[94,70125,54373],{"class":104},[94,70127,70128],{"class":1944},"createElement",[94,70130,105],{"class":104},[94,70132,70133],{"class":209},"'tr'",[94,70135,111],{"class":104},[94,70137,70138,70141,70143],{"class":96,"line":32762},[94,70139,70140],{"class":104},"        tr.innerHTML ",[94,70142,150],{"class":100},[94,70144,70145],{"class":209}," `\n",[94,70147,70148,70151,70153,70155,70157,70160,70163],{"class":96,"line":32778},[94,70149,70150],{"class":209},"        \u003Ctd>${",[94,70152,3861],{"class":104},[94,70154,995],{"class":209},[94,70156,546],{"class":104},[94,70158,70159],{"class":209},"].",[94,70161,70162],{"class":104},"stuID",[94,70164,70165],{"class":209},"}\u003C\u002Ftd>\n",[94,70167,70168,70171,70173,70175,70177,70179,70182],{"class":96,"line":32784},[94,70169,70170],{"class":209},"          \u003Ctd>${",[94,70172,3861],{"class":104},[94,70174,995],{"class":209},[94,70176,546],{"class":104},[94,70178,70159],{"class":209},[94,70180,70181],{"class":104},"uname",[94,70183,70165],{"class":209},[94,70185,70186,70188,70190,70192,70194,70196,70199],{"class":96,"line":32798},[94,70187,70170],{"class":209},[94,70189,3861],{"class":104},[94,70191,995],{"class":209},[94,70193,546],{"class":104},[94,70195,70159],{"class":209},[94,70197,70198],{"class":104},"age",[94,70200,70165],{"class":209},[94,70202,70203,70205,70207,70209,70211,70213,70216],{"class":96,"line":32804},[94,70204,70170],{"class":209},[94,70206,3861],{"class":104},[94,70208,995],{"class":209},[94,70210,546],{"class":104},[94,70212,70159],{"class":209},[94,70214,70215],{"class":104},"gender",[94,70217,70165],{"class":209},[94,70219,70220,70222,70224,70226,70228,70230,70233],{"class":96,"line":32819},[94,70221,70170],{"class":209},[94,70223,3861],{"class":104},[94,70225,995],{"class":209},[94,70227,546],{"class":104},[94,70229,70159],{"class":209},[94,70231,70232],{"class":104},"salary",[94,70234,70165],{"class":209},[94,70236,70237,70239,70241,70243,70245,70247,70250],{"class":96,"line":32825},[94,70238,70170],{"class":209},[94,70240,3861],{"class":104},[94,70242,995],{"class":209},[94,70244,546],{"class":104},[94,70246,70159],{"class":209},[94,70248,70249],{"class":104},"city",[94,70251,70165],{"class":209},[94,70253,70254],{"class":96,"line":32834},[94,70255,69570],{"class":209},[94,70257,70258,70261,70263],{"class":96,"line":32840},[94,70259,70260],{"class":209},"            \u003Ca href=\"javascript:\" data-id=${",[94,70262,546],{"class":104},[94,70264,70265],{"class":209},"}>删除\u003C\u002Fa>\n",[94,70267,70268],{"class":96,"line":32849},[94,70269,70270],{"class":209},"          \u003C\u002Ftd> \n",[94,70272,70273],{"class":96,"line":32855},[94,70274,70275],{"class":209},"          `\n",[94,70277,70278],{"class":96,"line":32861},[94,70279,70280],{"class":163},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[94,70282,70283,70286,70289],{"class":96,"line":32870},[94,70284,70285],{"class":104},"        tbody.",[94,70287,70288],{"class":1944},"appendChild",[94,70290,70291],{"class":104},"(tr)\n",[94,70293,70294],{"class":96,"line":32876},[94,70295,52375],{"class":104},[94,70297,70298],{"class":96,"line":32887},[94,70299,2168],{"class":104},[94,70301,70302],{"class":96,"line":32893},[94,70303,2381],{"emptyLinePlaceholder":20},[94,70305,70306],{"class":96,"line":32912},[94,70307,70308],{"class":163},"    \u002F\u002F 3.删除委托\n",[94,70310,70311],{"class":96,"line":32918},[94,70312,70313],{"class":163},"    \u002F\u002F 3.1 事件委托 tbody\n",[94,70315,70316,70319,70321,70323,70325,70327,70329,70331,70333],{"class":96,"line":32929},[94,70317,70318],{"class":104},"    tbody.",[94,70320,57790],{"class":1944},[94,70322,105],{"class":104},[94,70324,57795],{"class":209},[94,70326,12417],{"class":104},[94,70328,54426],{"class":100},[94,70330,1639],{"class":104},[94,70332,179],{"class":5198},[94,70334,12424],{"class":104},[94,70336,70337,70339,70341,70343,70345],{"class":96,"line":32935},[94,70338,54457],{"class":100},[94,70340,67011],{"class":104},[94,70342,54463],{"class":100},[94,70344,68233],{"class":209},[94,70346,12424],{"class":104},[94,70348,70349],{"class":96,"line":32955},[94,70350,70351],{"class":163},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[94,70353,70354],{"class":96,"line":32971},[94,70355,70356],{"class":163},"        \u002F\u002F console.log(e.target.dataset.id);\n",[94,70358,70359],{"class":96,"line":32977},[94,70360,70361],{"class":163},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[94,70363,70364,70367,70369,70372,70374],{"class":96,"line":32991},[94,70365,70366],{"class":104},"        arr.",[94,70368,57987],{"class":1944},[94,70370,70371],{"class":104},"(e.target.dataset.id, ",[94,70373,322],{"class":153},[94,70375,111],{"class":104},[94,70377,70378],{"class":96,"line":32997},[94,70379,70380],{"class":163},"        \u002F\u002F 重新渲染一次\n",[94,70382,70383,70386],{"class":96,"line":33003},[94,70384,70385],{"class":1944},"        render",[94,70387,1957],{"class":104},[94,70389,70390],{"class":96,"line":33014},[94,70391,52375],{"class":104},[94,70393,70394],{"class":96,"line":33020},[94,70395,33444],{"class":104},[94,70397,70398,70400,70402],{"class":96,"line":33026},[94,70399,52394],{"class":104},[94,70401,51790],{"class":51277},[94,70403,51284],{"class":104},[94,70405,70406],{"class":96,"line":33036},[94,70407,2381],{"emptyLinePlaceholder":20},[94,70409,70410,70412,70414],{"class":96,"line":33042},[94,70411,51762],{"class":104},[94,70413,51777],{"class":51277},[94,70415,51284],{"class":104},[94,70417,70418],{"class":96,"line":33053},[94,70419,2381],{"emptyLinePlaceholder":20},[94,70421,70422,70424,70426],{"class":96,"line":33059},[94,70423,51762],{"class":104},[94,70425,50612],{"class":51277},[94,70427,51284],{"class":104},[40,70429,70430],{},"样式：",[85,70432,70436],{"className":70433,"code":70434,"language":70435,"meta":14,"style":14},"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",[91,70437,70438,70443,70453,70462,70466,70470,70475,70485,70490,70494,70499,70509,70514,70523,70527,70531,70536,70541,70551,70561,70566,70570,70575,70584,70594,70599,70609,70619,70623,70628,70636,70640,70645,70650,70655,70663,70672,70676,70681,70690,70694,70699,70708,70712,70717,70726,70735,70743,70747,70752,70761,70771,70780,70790,70796,70805,70815,70825,70829,70834,70843,70851,70861,70869,70878,70887,70897,70905,70909,70914,70923],{"__ignoreMap":14},[94,70439,70440],{"class":96,"line":97},[94,70441,70442],{"class":104},"* {\n",[94,70444,70445,70448,70450],{"class":96,"line":15},[94,70446,70447],{"class":51277},"  margin",[94,70449,51414],{"class":104},[94,70451,70452],{"class":209},"0;\n",[94,70454,70455,70458,70460],{"class":96,"line":1160},[94,70456,70457],{"class":209},"  padding",[94,70459,51414],{"class":104},[94,70461,70452],{"class":209},[94,70463,70464],{"class":96,"line":1175},[94,70465,1546],{"class":104},[94,70467,70468],{"class":96,"line":1181},[94,70469,2381],{"emptyLinePlaceholder":20},[94,70471,70472],{"class":96,"line":1195},[94,70473,70474],{"class":209},"a {\n",[94,70476,70477,70480,70482],{"class":96,"line":1201},[94,70478,70479],{"class":51277},"  text-decoration",[94,70481,51414],{"class":104},[94,70483,70484],{"class":209},"none;\n",[94,70486,70487],{"class":96,"line":1292},[94,70488,70489],{"class":209},"  color:#721c24;\n",[94,70491,70492],{"class":96,"line":1298},[94,70493,1546],{"class":104},[94,70495,70496],{"class":96,"line":1310},[94,70497,70498],{"class":209},"h1 {\n",[94,70500,70501,70504,70506],{"class":96,"line":1593},[94,70502,70503],{"class":51277},"  text-align",[94,70505,51414],{"class":104},[94,70507,70508],{"class":209},"center;\n",[94,70510,70511],{"class":96,"line":1598},[94,70512,70513],{"class":209},"  color:#333;\n",[94,70515,70516,70518,70520],{"class":96,"line":1604},[94,70517,70447],{"class":51277},[94,70519,51414],{"class":104},[94,70521,70522],{"class":209},"20px 0;\n",[94,70524,70525],{"class":96,"line":1609},[94,70526,2655],{"class":104},[94,70528,70529],{"class":96,"line":1623},[94,70530,1546],{"class":104},[94,70532,70533],{"class":96,"line":1628},[94,70534,70535],{"class":209},"table {\n",[94,70537,70538],{"class":96,"line":1634},[94,70539,70540],{"class":209},"  margin:0 auto;\n",[94,70542,70543,70546,70548],{"class":96,"line":1655},[94,70544,70545],{"class":51277},"  width",[94,70547,51414],{"class":104},[94,70549,70550],{"class":209},"800px;\n",[94,70552,70553,70556,70558],{"class":96,"line":1660},[94,70554,70555],{"class":51277},"  border-collapse",[94,70557,51414],{"class":104},[94,70559,70560],{"class":209},"collapse;\n",[94,70562,70563],{"class":96,"line":1674},[94,70564,70565],{"class":209},"  color:#004085;\n",[94,70567,70568],{"class":96,"line":1679},[94,70569,1546],{"class":104},[94,70571,70572],{"class":96,"line":1708},[94,70573,70574],{"class":209},"th {\n",[94,70576,70577,70579,70581],{"class":96,"line":1713},[94,70578,70457],{"class":51277},[94,70580,51414],{"class":104},[94,70582,70583],{"class":209},"10px;\n",[94,70585,70586,70589,70591],{"class":96,"line":1730},[94,70587,70588],{"class":51277},"  background",[94,70590,51414],{"class":104},[94,70592,70593],{"class":163},"#cfe5ff;\n",[94,70595,70596],{"class":96,"line":1735},[94,70597,70598],{"class":104},"  \n",[94,70600,70601,70604,70606],{"class":96,"line":1740},[94,70602,70603],{"class":51277},"  font-size",[94,70605,51414],{"class":104},[94,70607,70608],{"class":209},"20px;\n",[94,70610,70611,70614,70616],{"class":96,"line":1745},[94,70612,70613],{"class":51277},"  font-weight",[94,70615,51414],{"class":104},[94,70617,70618],{"class":209},"400;\n",[94,70620,70621],{"class":96,"line":1759},[94,70622,1546],{"class":104},[94,70624,70625],{"class":96,"line":1764},[94,70626,70627],{"class":209},"td,th {\n",[94,70629,70630,70633],{"class":96,"line":2558},[94,70631,70632],{"class":209},"  border:1px solid",[94,70634,70635],{"class":163}," #b8daff;\n",[94,70637,70638],{"class":96,"line":2572},[94,70639,1546],{"class":104},[94,70641,70642],{"class":96,"line":2580},[94,70643,70644],{"class":209},"td {\n",[94,70646,70647],{"class":96,"line":2585},[94,70648,70649],{"class":209},"  padding:10px;\n",[94,70651,70652],{"class":96,"line":2591},[94,70653,70654],{"class":209},"  color:#666;\n",[94,70656,70657,70659,70661],{"class":96,"line":2597},[94,70658,70503],{"class":51277},[94,70660,51414],{"class":104},[94,70662,70508],{"class":209},[94,70664,70665,70667,70669],{"class":96,"line":2602},[94,70666,70603],{"class":51277},[94,70668,51414],{"class":104},[94,70670,70671],{"class":209},"16px;\n",[94,70673,70674],{"class":96,"line":7930},[94,70675,1546],{"class":104},[94,70677,70678],{"class":96,"line":7954},[94,70679,70680],{"class":209},"tbody tr {\n",[94,70682,70683,70685,70687],{"class":96,"line":7959},[94,70684,70588],{"class":51277},[94,70686,51414],{"class":104},[94,70688,70689],{"class":163},"#fff;\n",[94,70691,70692],{"class":96,"line":7965},[94,70693,1546],{"class":104},[94,70695,70696],{"class":96,"line":7992},[94,70697,70698],{"class":209},"tbody tr:hover {\n",[94,70700,70701,70703,70705],{"class":96,"line":7997},[94,70702,70588],{"class":51277},[94,70704,51414],{"class":104},[94,70706,70707],{"class":163},"#e1ecf8;\n",[94,70709,70710],{"class":96,"line":8003},[94,70711,1546],{"class":104},[94,70713,70714],{"class":96,"line":8015},[94,70715,70716],{"class":209},".info {\n",[94,70718,70719,70721,70723],{"class":96,"line":8027},[94,70720,70545],{"class":51277},[94,70722,51414],{"class":104},[94,70724,70725],{"class":209},"900px;\n",[94,70727,70728,70730,70732],{"class":96,"line":8039},[94,70729,70447],{"class":51277},[94,70731,51414],{"class":104},[94,70733,70734],{"class":209},"50px auto;\n",[94,70736,70737,70739,70741],{"class":96,"line":9698},[94,70738,70503],{"class":51277},[94,70740,51414],{"class":104},[94,70742,70508],{"class":209},[94,70744,70745],{"class":96,"line":9723},[94,70746,1546],{"class":104},[94,70748,70749],{"class":96,"line":9746},[94,70750,70751],{"class":209},".info  input, .info select {\n",[94,70753,70754,70756,70758],{"class":96,"line":9770},[94,70755,70545],{"class":51277},[94,70757,51414],{"class":104},[94,70759,70760],{"class":209},"80px;\n",[94,70762,70763,70766,70768],{"class":96,"line":9775},[94,70764,70765],{"class":51277},"  height",[94,70767,51414],{"class":104},[94,70769,70770],{"class":209},"27px;\n",[94,70772,70773,70776,70778],{"class":96,"line":9780},[94,70774,70775],{"class":51277},"  outline",[94,70777,51414],{"class":104},[94,70779,70484],{"class":209},[94,70781,70782,70785,70787],{"class":96,"line":9785},[94,70783,70784],{"class":51277},"  border-radius",[94,70786,51414],{"class":104},[94,70788,70789],{"class":209},"5px;\n",[94,70791,70792,70794],{"class":96,"line":9794},[94,70793,70632],{"class":209},[94,70795,70635],{"class":163},[94,70797,70798,70801,70803],{"class":96,"line":9799},[94,70799,70800],{"class":51277},"  padding-left",[94,70802,51414],{"class":104},[94,70804,70789],{"class":209},[94,70806,70807,70810,70812],{"class":96,"line":9805},[94,70808,70809],{"class":51277},"  box-sizing",[94,70811,51414],{"class":104},[94,70813,70814],{"class":209},"border-box;\n",[94,70816,70817,70820,70822],{"class":96,"line":9826},[94,70818,70819],{"class":51277},"  margin-right",[94,70821,51414],{"class":104},[94,70823,70824],{"class":209},"15px;\n",[94,70826,70827],{"class":96,"line":9832},[94,70828,1546],{"class":104},[94,70830,70831],{"class":96,"line":9846},[94,70832,70833],{"class":209},".info button {\n",[94,70835,70836,70838,70840],{"class":96,"line":9852},[94,70837,70545],{"class":51277},[94,70839,51414],{"class":104},[94,70841,70842],{"class":209},"60px;\n",[94,70844,70845,70847,70849],{"class":96,"line":9879},[94,70846,70765],{"class":51277},[94,70848,51414],{"class":104},[94,70850,70770],{"class":209},[94,70852,70853,70856,70858],{"class":96,"line":9888},[94,70854,70855],{"class":51277},"  background-color",[94,70857,51414],{"class":104},[94,70859,70860],{"class":163},"#004085;\n",[94,70862,70863,70865,70867],{"class":96,"line":9894},[94,70864,70775],{"class":51277},[94,70866,51414],{"class":104},[94,70868,70484],{"class":209},[94,70870,70871,70874,70876],{"class":96,"line":9902},[94,70872,70873],{"class":51277},"  border",[94,70875,51414],{"class":104},[94,70877,70452],{"class":209},[94,70879,70880,70883,70885],{"class":96,"line":9907},[94,70881,70882],{"class":51277},"  color",[94,70884,51414],{"class":104},[94,70886,70689],{"class":163},[94,70888,70889,70892,70894],{"class":96,"line":16586},[94,70890,70891],{"class":51277},"  cursor",[94,70893,51414],{"class":104},[94,70895,70896],{"class":209},"pointer;\n",[94,70898,70899,70901,70903],{"class":96,"line":16592},[94,70900,70784],{"class":51277},[94,70902,51414],{"class":104},[94,70904,70789],{"class":209},[94,70906,70907],{"class":96,"line":16615},[94,70908,1546],{"class":104},[94,70910,70911],{"class":96,"line":16621},[94,70912,70913],{"class":209},".info .age {\n",[94,70915,70916,70918,70920],{"class":96,"line":16644},[94,70917,70545],{"class":51277},[94,70919,51414],{"class":104},[94,70921,70922],{"class":209},"50px;\n",[94,70924,70925],{"class":96,"line":16658},[94,70926,1546],{"class":104},[40,70928,70929],{},"思路：",[40,70931,70932],{},[1443,70933],{"alt":14,"src":70934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[40,70936,70937],{},[1443,70938],{"alt":14,"src":70939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[40,70941,70942],{},[1443,70943],{"alt":14,"src":70944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[65,70946,70948],{"id":70947},"_3315-重绘回流","3.3.15 重绘回流",[40,70950,70951],{},[1443,70952],{"alt":14,"src":70953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[40,70955,70956],{},[1443,70957],{"alt":14,"src":70958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[40,70960,70961],{},[1443,70962],{"alt":14,"src":70963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[35,70965,70967],{"id":70966},"_34-bom","3.4 BOM",[40,70969,70970],{},[1443,70971],{"alt":14,"src":70972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[40,70974,70975],{},"平时写的document省略了window而已，实际上是window.document",[40,70977,70978],{},"函数也是这样，调用的时候实际为window.fn()",[40,70980,70981],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[40,70983,70984],{},"window大部分情况下可以省略",[65,70986,70988],{"id":70987},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[40,70990,70991],{},"只执行一次",[40,70993,70994],{},[1443,70995],{"alt":14,"src":70996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[40,70998,70999],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[40,71001,71002],{},[1443,71003],{"alt":14,"src":71004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[65,71006,71008],{"id":71007},"_342-js执行机制","3.4.2 JS执行机制",[40,71010,71011],{},[1443,71012],{"alt":14,"src":71013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[40,71015,71016],{},"两个的结果都是1111 3333 2222",[40,71018,71019],{},[1443,71020],{"alt":14,"src":71021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[40,71023,71024],{},[1443,71025],{"alt":14,"src":71026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[40,71028,71029],{},[1443,71030],{"alt":14,"src":71031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[40,71033,71034],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[40,71036,71037],{},"工作流程：",[40,71039,71040],{},[1443,71041],{"alt":14,"src":71042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[40,71044,71045],{},[1443,71046],{"alt":14,"src":71047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[40,71049,71050],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[40,71052,71053],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[65,71055,71057],{"id":71056},"_343-location对象","3.4.3 location对象",[40,71059,71060],{},"location对象属于window这个全局对象下的，可以 省略window",[40,71062,71063],{},[1443,71064],{"alt":14,"src":71065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[40,71067,71068],{},"href可以跳转页面",[48,71070,71071],{},[51,71072,71073],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[40,71075,71076],{},"search得到提交信息之后网站后边的地址",[40,71078,71079],{},[1443,71080],{"alt":14,"src":71081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[40,71083,71084],{},[1443,71085],{"alt":14,"src":71086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[48,71088,71089],{"start":15},[51,71090,71091],{},"hash:这个获取单页面应用#后边的地址",[40,71093,71094],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[40,71096,71097],{},[1443,71098],{"alt":14,"src":71099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[85,71101,71103],{"className":53044,"code":71102,"language":53046,"meta":14,"style":14},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[91,71104,71105,71125,71145],{"__ignoreMap":14},[94,71106,71107,71109,71111,71113,71115,71118,71121,71123],{"class":96,"line":97},[94,71108,52121],{"class":104},[94,71110,343],{"class":51277},[94,71112,61034],{"class":1944},[94,71114,150],{"class":104},[94,71116,71117],{"class":209},"\"#\u002Fmy\"",[94,71119,71120],{"class":104},">我的\u003C\u002F",[94,71122,343],{"class":51277},[94,71124,51284],{"class":104},[94,71126,71127,71129,71131,71133,71135,71138,71141,71143],{"class":96,"line":15},[94,71128,52121],{"class":104},[94,71130,343],{"class":51277},[94,71132,61034],{"class":1944},[94,71134,150],{"class":104},[94,71136,71137],{"class":209},"\"#\u002Ffriend\"",[94,71139,71140],{"class":104},">关注\u003C\u002F",[94,71142,343],{"class":51277},[94,71144,51284],{"class":104},[94,71146,71147,71149,71151,71153,71155,71158,71161,71163],{"class":96,"line":1160},[94,71148,52121],{"class":104},[94,71150,343],{"class":51277},[94,71152,61034],{"class":1944},[94,71154,150],{"class":104},[94,71156,71157],{"class":209},"\"#\u002Fdownload\"",[94,71159,71160],{"class":104},">下载\u003C\u002F",[94,71162,343],{"class":51277},[94,71164,51284],{"class":104},[40,71166,71167],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[48,71169,71170],{"start":1160},[51,71171,71172,71173,71175,71176,71178],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53693,71174],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53693,71177],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[65,71180,71182],{"id":71181},"_345-navigator对象","3.4.5 navigator对象",[40,71184,71185],{},[1443,71186],{"alt":14,"src":71187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[85,71189,71193],{"className":71190,"code":71191,"language":71192,"meta":14,"style":14},"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",[91,71194,71195,71200,71211,71223,71228,71279,71320,71325,71338,71350,71355],{"__ignoreMap":14},[94,71196,71197],{"class":96,"line":97},[94,71198,71199],{"class":163},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[94,71201,71202,71204,71206,71208],{"class":96,"line":15},[94,71203,331],{"class":100},[94,71205,105],{"class":104},[94,71207,54426],{"class":100},[94,71209,71210],{"class":104}," () { \n",[94,71212,71213,71215,71218,71220],{"class":96,"line":1160},[94,71214,6774],{"class":100},[94,71216,71217],{"class":153}," userAgent",[94,71219,13546],{"class":100},[94,71221,71222],{"class":104}," navigator.userAgent \n",[94,71224,71225],{"class":96,"line":1175},[94,71226,71227],{"class":163},"\u002F\u002F 验证是否为Android或iPhone \n",[94,71229,71230,71232,71235,71237,71240,71243,71245,71247,71250,71252,71255,71259,71261,71263,71265,71268,71270,71272,71274,71276],{"class":96,"line":1181},[94,71231,6774],{"class":100},[94,71233,71234],{"class":153}," android",[94,71236,13546],{"class":100},[94,71238,71239],{"class":104}," userAgent.",[94,71241,71242],{"class":1944},"match",[94,71244,105],{"class":104},[94,71246,689],{"class":209},[94,71248,71249],{"class":47960},"(Android);",[94,71251,1091],{"class":100},[94,71253,71254],{"class":153},"[\\s",[94,71256,71258],{"class":71257},"snhLl","\\\u002F",[94,71260,1045],{"class":153},[94,71262,586],{"class":100},[94,71264,105],{"class":47960},[94,71266,71267],{"class":153},"[\\d.]",[94,71269,586],{"class":100},[94,71271,534],{"class":47960},[94,71273,1091],{"class":100},[94,71275,689],{"class":209},[94,71277,71278],{"class":104},") \n",[94,71280,71281,71283,71286,71288,71290,71292,71294,71296,71299,71302,71305,71307,71309,71312,71314,71316,71318],{"class":96,"line":1195},[94,71282,6774],{"class":100},[94,71284,71285],{"class":153}," iphone",[94,71287,13546],{"class":100},[94,71289,71239],{"class":104},[94,71291,71242],{"class":1944},[94,71293,105],{"class":104},[94,71295,689],{"class":209},[94,71297,71298],{"class":47960},"(iPhone",[94,71300,71301],{"class":153},"\\s",[94,71303,71304],{"class":47960},"OS)",[94,71306,71301],{"class":153},[94,71308,105],{"class":47960},[94,71310,71311],{"class":153},"[\\d_]",[94,71313,586],{"class":100},[94,71315,534],{"class":47960},[94,71317,689],{"class":209},[94,71319,71278],{"class":104},[94,71321,71322],{"class":96,"line":1201},[94,71323,71324],{"class":163},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[94,71326,71327,71329,71332,71335],{"class":96,"line":1292},[94,71328,1512],{"class":100},[94,71330,71331],{"class":104}," (android ",[94,71333,71334],{"class":100},"||",[94,71336,71337],{"class":104}," iphone) { \n",[94,71339,71340,71343,71345,71348],{"class":96,"line":1298},[94,71341,71342],{"class":104},"location.href ",[94,71344,150],{"class":100},[94,71346,71347],{"class":209}," 'http:\u002F\u002Fm.itcast.cn'",[94,71349,2655],{"class":104},[94,71351,71352],{"class":96,"line":1310},[94,71353,71354],{"class":104},"} \n",[94,71356,71357],{"class":96,"line":1593},[94,71358,71359],{"class":104},"})()\n",[65,71361,71363],{"id":71362},"_346-histroy对象","3.4.6 histroy对象",[40,71365,71366],{},[1443,71367],{"alt":14,"src":71368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[40,71370,71371],{},"浏览器地址的前进与后退!!!",[40,71373,71374],{},"history.back() 等效于 history.go(-1)",[40,71376,71377],{},"history.forward() 等效于 history.go(1)",[35,71379,71381],{"id":71380},"_35-本地存储","3.5 本地存储",[48,71383,71384,71387,71390],{},[51,71385,71386],{},"数据存储在用户浏览器中",[51,71388,71389],{},"设置、读取方便、甚至页面刷新不丢失数据",[51,71391,71392],{},"容量较大，sessionStorage和localStorage约 5M 左右",[65,71394,71396],{"id":71395},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[40,71398,71399],{},"只能存储字符串",[40,71401,71402],{},[1443,71403],{"alt":14,"src":71404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[40,71406,71407],{},[1443,71408],{"alt":14,"src":71409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[40,71411,71412],{},"键值对要加引号,不然就会当变量来看了",[40,71414,71415],{},"localStorage.setItem('uname', 'pink')",[40,71417,71418],{},"刷新之后信息不再丢失",[40,71420,71421],{},"操作key,value会跟着变",[40,71423,71424],{},"删除只删除键就可以,即名字",[40,71426,71415],{},[40,71428,71429],{},"改:",[40,71431,71432],{},"localStorage.setItem('uname','red')",[40,71434,71435],{},"有这个键就是改,没有这个键就是改",[40,71437,71438],{},[1443,71439],{"alt":14,"src":71440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[40,71442,71443],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[40,71445,71446],{},[1443,71447],{"alt":14,"src":71448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[40,71450,71451],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[65,71453,71455],{"id":71454},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[40,71457,71458],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[40,71460,71461],{},"特性:",[48,71463,71464,71467,71470,71473],{},[51,71465,71466],{},"生命周期为关闭浏览器窗口",[51,71468,71469],{},"在同一个窗口(页面)下数据可以共享",[51,71471,71472],{},"以键值对的形式存储使用",[51,71474,71475],{},"用法跟localStorage 基本相同",[65,71477,71479],{"id":71478},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[40,71481,71482],{},"本地只能存储字符串,无法直接存储复杂数据类型",[85,71484,71486],{"className":53044,"code":71485,"language":53046,"meta":14,"style":14},"\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",[91,71487,71488,71496,71501,71506,71511,71516,71520,71525,71530],{"__ignoreMap":14},[94,71489,71490,71492,71494],{"class":96,"line":97},[94,71491,1015],{"class":104},[94,71493,51790],{"class":51277},[94,71495,51284],{"class":104},[94,71497,71498],{"class":96,"line":15},[94,71499,71500],{"class":104},"    const obj = {\n",[94,71502,71503],{"class":96,"line":1160},[94,71504,71505],{"class":104},"      uname: 'pink老师',\n",[94,71507,71508],{"class":96,"line":1175},[94,71509,71510],{"class":104},"      age: 18,\n",[94,71512,71513],{"class":96,"line":1181},[94,71514,71515],{"class":104},"      gender: '女'\n",[94,71517,71518],{"class":96,"line":1195},[94,71519,2168],{"class":104},[94,71521,71522],{"class":96,"line":1201},[94,71523,71524],{"class":104},"    \u002F\u002F 存储复杂数据类型\n",[94,71526,71527],{"class":96,"line":1292},[94,71528,71529],{"class":104},"    localStorage.setItem('obj', obj)\n",[94,71531,71532,71534,71536],{"class":96,"line":1298},[94,71533,52394],{"class":104},[94,71535,51790],{"class":51277},[94,71537,51284],{"class":104},[40,71539,71540],{},[1443,71541],{"alt":14,"src":71542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[40,71544,71545],{},"如果获取一下数据:",[40,71547,71548],{},"log(localStorage.getItem('obj'))",[40,71550,71551],{},[1443,71552],{"alt":14,"src":71553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[40,71555,71556],{},"发现直接存对象是使用不了的!!!",[21980,71558,71560],{"id":71559},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[40,71562,71563],{},[1443,71564],{"alt":14,"src":71565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[85,71567,71569],{"className":50610,"code":71568,"language":50612,"meta":14,"style":14},"\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",[91,71570,71571,71579,71589,71599,71608,71616,71620,71624,71650,71669,71677,71681,71686,71691],{"__ignoreMap":14},[94,71572,71573,71575,71577],{"class":96,"line":97},[94,71574,1015],{"class":104},[94,71576,51790],{"class":51277},[94,71578,51284],{"class":104},[94,71580,71581,71583,71585,71587],{"class":96,"line":15},[94,71582,11203],{"class":100},[94,71584,69948],{"class":153},[94,71586,13546],{"class":100},[94,71588,15554],{"class":104},[94,71590,71591,71594,71597],{"class":96,"line":1160},[94,71592,71593],{"class":104},"      uname: ",[94,71595,71596],{"class":209},"'pink老师'",[94,71598,31449],{"class":104},[94,71600,71601,71604,71606],{"class":96,"line":1175},[94,71602,71603],{"class":104},"      age: ",[94,71605,755],{"class":153},[94,71607,31449],{"class":104},[94,71609,71610,71613],{"class":96,"line":1181},[94,71611,71612],{"class":104},"      gender: ",[94,71614,71615],{"class":209},"'女'\n",[94,71617,71618],{"class":96,"line":1195},[94,71619,2168],{"class":104},[94,71621,71622],{"class":96,"line":1201},[94,71623,71524],{"class":163},[94,71625,71626,71629,71632,71634,71637,71639,71642,71644,71647],{"class":96,"line":1292},[94,71627,71628],{"class":104},"  localStorage.",[94,71630,71631],{"class":1944},"setItem",[94,71633,105],{"class":104},[94,71635,71636],{"class":209},"'obj'",[94,71638,12417],{"class":104},[94,71640,71641],{"class":153},"JSON",[94,71643,663],{"class":104},[94,71645,71646],{"class":1944},"stringify",[94,71648,71649],{"class":104},"(obj))\n",[94,71651,71652,71655,71657,71660,71663,71665,71667],{"class":96,"line":1298},[94,71653,71654],{"class":104},"  console.",[94,71656,58224],{"class":1944},[94,71658,71659],{"class":104},"(localStorage.",[94,71661,71662],{"class":1944},"getItem",[94,71664,105],{"class":104},[94,71666,71636],{"class":209},[94,71668,30480],{"class":104},[94,71670,71671,71673,71675],{"class":96,"line":1310},[94,71672,52394],{"class":104},[94,71674,51790],{"class":51277},[94,71676,51284],{"class":104},[94,71678,71679],{"class":96,"line":1593},[94,71680,70598],{"class":104},[94,71682,71683],{"class":96,"line":1598},[94,71684,71685],{"class":104},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[94,71687,71688],{"class":96,"line":1604},[94,71689,71690],{"class":104},"  类型是字符串的\n",[94,71692,71693],{"class":96,"line":1609},[94,71694,71695],{"class":104},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[21980,71697,71699],{"id":71698},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[40,71701,71702],{},[1443,71703],{"alt":14,"src":71704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[40,71706,71707],{},[1443,71708],{"alt":14,"src":71709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[85,71711,71713],{"className":53044,"code":71712,"language":53046,"meta":14,"style":14},"  \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",[91,71714,71715,71723,71727,71731,71735,71739,71743,71748,71753,71758,71763,71768,71773,71778,71783],{"__ignoreMap":14},[94,71716,71717,71719,71721],{"class":96,"line":97},[94,71718,52121],{"class":104},[94,71720,51790],{"class":51277},[94,71722,51284],{"class":104},[94,71724,71725],{"class":96,"line":15},[94,71726,71500],{"class":104},[94,71728,71729],{"class":96,"line":1160},[94,71730,71505],{"class":104},[94,71732,71733],{"class":96,"line":1175},[94,71734,71510],{"class":104},[94,71736,71737],{"class":96,"line":1181},[94,71738,71515],{"class":104},[94,71740,71741],{"class":96,"line":1195},[94,71742,2168],{"class":104},[94,71744,71745],{"class":96,"line":1201},[94,71746,71747],{"class":104},"    \u002F\u002F 1.存储复杂数据类型\n",[94,71749,71750],{"class":96,"line":1292},[94,71751,71752],{"class":104},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[94,71754,71755],{"class":96,"line":1298},[94,71756,71757],{"class":104},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[94,71759,71760],{"class":96,"line":1310},[94,71761,71762],{"class":104},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[94,71764,71765],{"class":96,"line":1593},[94,71766,71767],{"class":104},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[94,71769,71770],{"class":96,"line":1598},[94,71771,71772],{"class":104},"    \u002F\u002F 取\n",[94,71774,71775],{"class":96,"line":1604},[94,71776,71777],{"class":104},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[94,71779,71780],{"class":96,"line":1609},[94,71781,71782],{"class":104},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[94,71784,71785,71787,71789],{"class":96,"line":1623},[94,71786,52394],{"class":104},[94,71788,51790],{"class":51277},[94,71790,51284],{"class":104},[40,71792,71793],{},[1443,71794],{"alt":14,"src":71795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[65,71797,71799],{"id":71798},"_356-数组map方法","3.5.6 数组map方法",[40,71801,71802],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[40,71804,71805],{},[1443,71806],{"alt":14,"src":71807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[40,71809,71810],{},[1443,71811],{"alt":14,"src":71812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[40,71814,71815,71818],{},[254,71816,71817],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[40,71820,71821],{},"map有返回值，但是forEach没有返回值",[40,71823,71824],{},"map是个方法。用的时候要加 ()",[40,71826,71827],{},"map返回的是一个数组",[65,71829,71831],{"id":71830},"_357-数组中join方法","3.5.7 数组中join方法",[40,71833,71834],{},[1443,71835],{"alt":14,"src":71836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[40,71838,71839],{},"类似于python中拼接字符串一样！",[48,71841,71842,71845,71848],{},[51,71843,71844],{},"小括号为空则逗号分开",[51,71846,71847],{},"小括号为空字符串 ''，则元素之间没有分隔符",[51,71849,71850],{},"小括号用啥符号就用进行分割",[65,71852,71854],{"id":71853},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[48,71856,71857,71860,71863,71866,71869],{},[51,71858,71859],{},"记住本地时间获取快速方式：new Date().toDateString()",[51,71861,71862],{},"尽量减少DOM操作，用好map+join的渲染方式",[51,71864,71865],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[51,71867,71868],{},"return可以实现函数的结束",[51,71870,71871],{},"禁止跳转是 preventDefault() 不要忘记",[85,71873,71875],{"className":50610,"code":71874,"language":50612,"meta":14,"style":14},"\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",[91,71876,71877,71887,71901,71905,71913,71927,71947,71959,71967,71973,71983,71993,71997,72001,72007,72017,72029,72033,72037,72044,72056,72070,72080,72084,72088,72095,72102,72109,72121,72133,72143,72155,72159,72163,72170,72177,72189,72201,72211,72223,72253,72257,72261,72268,72280,72292,72316,72326,72336,72340,72344,72352,72363,72375,72387,72399,72416,72428,72440,72444,72448,72455,72467,72479,72491,72502,72520,72533,72545,72569,72580,72584,72588,72596,72606,72610,72614,72620,72632,72643,72653,72657,72661,72667,72689,72693,72697,72703,72709,72721,72731,72743,72773,72786,72803,72807,72811,72822,72844,72854,72858,72862,72875,72885,72897,72909,72921,72933,72943,72953,72963,72974,72987,72991,72999,73007,73011,73019,73032,73052,73085,73118,73151,73177,73195,73213,73221,73247,73265,73283,73301,73319,73337,73345,73353,73371,73379,73408,73416,73424,73432,73445,73457,73469,73481,73493,73505,73518,73530,73538,73546,73554,73559,73564,73568,73572,73576,73580,73584,73588,73593,73598,73603,73608,73616,73624,73632,73637,73642,73647,73652,73657,73662,73667,73672,73677,73682,73687,73692,73697,73702,73706,73711,73716,73726,73735,73739,73744,73753,73769,73811,73851,73890,73955,73963,73967,73972,73990,73998,74003,74008,74038,74044,74049,74062,74074,74086,74098,74110,74122,74134,74138,74148,74152,74157,74162,74166,74175,74179,74184,74189,74208,74213,74233,74237,74242,74246,74251,74269,74287,74305,74324,74343,74362,74367,74373,74394,74400,74409,74415,74421,74427,74454,74467,74472,74482,74488,74494,74500,74506,74511,74517,74523,74529,74535,74568,74573,74578,74583,74588,74594,74600,74606,74617,74622,74628,74635,74649,74655,74679,74684,74689,74695,74701,74722,74728,74741,74747,74753,74759,74765,74770,74776,74782,74788,74806,74820,74826,74834,74840,74862,74867,74872,74877,74882,74887,74896,74905,74910],{"__ignoreMap":14},[94,71878,71879,71881,71883,71885],{"class":96,"line":97},[94,71880,51274],{"class":104},[94,71882,51278],{"class":51277},[94,71884,51281],{"class":1944},[94,71886,51284],{"class":104},[94,71888,71889,71891,71893,71895,71897,71899],{"class":96,"line":15},[94,71890,1015],{"class":104},[94,71892,50612],{"class":51277},[94,71894,51293],{"class":1944},[94,71896,150],{"class":104},[94,71898,51298],{"class":209},[94,71900,51284],{"class":104},[94,71902,71903],{"class":96,"line":1160},[94,71904,2381],{"emptyLinePlaceholder":20},[94,71906,71907,71909,71911],{"class":96,"line":1175},[94,71908,1015],{"class":104},[94,71910,51311],{"class":51277},[94,71912,51284],{"class":104},[94,71914,71915,71917,71919,71921,71923,71925],{"class":96,"line":1181},[94,71916,52121],{"class":104},[94,71918,51321],{"class":51277},[94,71920,51324],{"class":1944},[94,71922,150],{"class":104},[94,71924,51329],{"class":209},[94,71926,51284],{"class":104},[94,71928,71929,71931,71933,71935,71937,71939,71941,71943,71945],{"class":96,"line":1195},[94,71930,52121],{"class":104},[94,71932,51321],{"class":51277},[94,71934,14902],{"class":1944},[94,71936,150],{"class":104},[94,71938,51368],{"class":209},[94,71940,51348],{"class":1944},[94,71942,150],{"class":104},[94,71944,51375],{"class":209},[94,71946,51284],{"class":104},[94,71948,71949,71951,71953,71955,71957],{"class":96,"line":1201},[94,71950,52121],{"class":104},[94,71952,51384],{"class":51277},[94,71954,51387],{"class":104},[94,71956,51384],{"class":51277},[94,71958,51284],{"class":104},[94,71960,71961,71963,71965],{"class":96,"line":1292},[94,71962,52121],{"class":104},[94,71964,5108],{"class":51277},[94,71966,51284],{"class":104},[94,71968,71969,71971],{"class":96,"line":1298},[94,71970,6385],{"class":51277},[94,71972,15554],{"class":104},[94,71974,71975,71977,71979,71981],{"class":96,"line":1310},[94,71976,54672],{"class":153},[94,71978,51414],{"class":104},[94,71980,296],{"class":153},[94,71982,1271],{"class":104},[94,71984,71985,71987,71989,71991],{"class":96,"line":1593},[94,71986,54683],{"class":153},[94,71988,51414],{"class":104},[94,71990,296],{"class":153},[94,71992,1271],{"class":104},[94,71994,71995],{"class":96,"line":1598},[94,71996,2168],{"class":104},[94,71998,71999],{"class":96,"line":1604},[94,72000,2381],{"emptyLinePlaceholder":20},[94,72002,72003,72005],{"class":96,"line":1609},[94,72004,57256],{"class":51277},[94,72006,15554],{"class":104},[94,72008,72009,72011,72013,72015],{"class":96,"line":1623},[94,72010,57263],{"class":153},[94,72012,51414],{"class":104},[94,72014,51569],{"class":153},[94,72016,1271],{"class":104},[94,72018,72019,72021,72023,72025,72027],{"class":96,"line":1628},[94,72020,62054],{"class":153},[94,72022,51414],{"class":104},[94,72024,805],{"class":153},[94,72026,51469],{"class":100},[94,72028,1271],{"class":104},[94,72030,72031],{"class":96,"line":1634},[94,72032,2168],{"class":104},[94,72034,72035],{"class":96,"line":1655},[94,72036,2381],{"emptyLinePlaceholder":20},[94,72038,72039,72042],{"class":96,"line":1660},[94,72040,72041],{"class":1944},"    .info",[94,72043,15554],{"class":104},[94,72045,72046,72048,72050,72052,72054],{"class":96,"line":1674},[94,72047,54748],{"class":153},[94,72049,51414],{"class":104},[94,72051,51466],{"class":153},[94,72053,51469],{"class":100},[94,72055,1271],{"class":104},[94,72057,72058,72060,72062,72064,72066,72068],{"class":96,"line":1679},[94,72059,54683],{"class":153},[94,72061,51414],{"class":104},[94,72063,551],{"class":153},[94,72065,51469],{"class":100},[94,72067,51533],{"class":153},[94,72069,1271],{"class":104},[94,72071,72072,72074,72076,72078],{"class":96,"line":1708},[94,72073,57263],{"class":153},[94,72075,51414],{"class":104},[94,72077,51569],{"class":153},[94,72079,1271],{"class":104},[94,72081,72082],{"class":96,"line":1713},[94,72083,2168],{"class":104},[94,72085,72086],{"class":96,"line":1730},[94,72087,2381],{"emptyLinePlaceholder":20},[94,72089,72090,72093],{"class":96,"line":1735},[94,72091,72092],{"class":1944},"    .uname",[94,72094,31449],{"class":104},[94,72096,72097,72100],{"class":96,"line":1740},[94,72098,72099],{"class":1944},"    .age",[94,72101,31449],{"class":104},[94,72103,72104,72107],{"class":96,"line":1745},[94,72105,72106],{"class":1944},"    .salary",[94,72108,15554],{"class":104},[94,72110,72111,72113,72115,72117,72119],{"class":96,"line":1759},[94,72112,54748],{"class":153},[94,72114,51414],{"class":104},[94,72116,416],{"class":153},[94,72118,51469],{"class":100},[94,72120,1271],{"class":104},[94,72122,72123,72125,72127,72129,72131],{"class":96,"line":1764},[94,72124,54762],{"class":153},[94,72126,51414],{"class":104},[94,72128,805],{"class":153},[94,72130,51469],{"class":100},[94,72132,1271],{"class":104},[94,72134,72135,72137,72139,72141],{"class":96,"line":2558},[94,72136,61757],{"class":153},[94,72138,51414],{"class":104},[94,72140,54714],{"class":153},[94,72142,1271],{"class":104},[94,72144,72145,72147,72149,72151,72153],{"class":96,"line":2572},[94,72146,61727],{"class":153},[94,72148,51414],{"class":104},[94,72150,680],{"class":153},[94,72152,51469],{"class":100},[94,72154,1271],{"class":104},[94,72156,72157],{"class":96,"line":2580},[94,72158,2168],{"class":104},[94,72160,72161],{"class":96,"line":2585},[94,72162,2381],{"emptyLinePlaceholder":20},[94,72164,72165,72168],{"class":96,"line":2591},[94,72166,72167],{"class":1944},"    .gender",[94,72169,31449],{"class":104},[94,72171,72172,72175],{"class":96,"line":2597},[94,72173,72174],{"class":1944},"    .city",[94,72176,15554],{"class":104},[94,72178,72179,72181,72183,72185,72187],{"class":96,"line":2602},[94,72180,54748],{"class":153},[94,72182,51414],{"class":104},[94,72184,416],{"class":153},[94,72186,51469],{"class":100},[94,72188,1271],{"class":104},[94,72190,72191,72193,72195,72197,72199],{"class":96,"line":7930},[94,72192,54762],{"class":153},[94,72194,51414],{"class":104},[94,72196,930],{"class":153},[94,72198,51469],{"class":100},[94,72200,1271],{"class":104},[94,72202,72203,72205,72207,72209],{"class":96,"line":7954},[94,72204,61757],{"class":153},[94,72206,51414],{"class":104},[94,72208,54714],{"class":153},[94,72210,1271],{"class":104},[94,72212,72213,72215,72217,72219,72221],{"class":96,"line":7959},[94,72214,61727],{"class":153},[94,72216,51414],{"class":104},[94,72218,680],{"class":153},[94,72220,51469],{"class":100},[94,72222,1271],{"class":104},[94,72224,72225,72227,72229,72231,72233,72235,72238,72240,72242,72244,72247,72249,72251],{"class":96,"line":7965},[94,72226,61954],{"class":153},[94,72228,51414],{"class":104},[94,72230,322],{"class":153},[94,72232,51469],{"class":100},[94,72234,51498],{"class":153},[94,72236,72237],{"class":153}," rgb",[94,72239,105],{"class":104},[94,72241,1703],{"class":153},[94,72243,12417],{"class":104},[94,72245,72246],{"class":153},"197",[94,72248,12417],{"class":104},[94,72250,72246],{"class":153},[94,72252,2700],{"class":104},[94,72254,72255],{"class":96,"line":7992},[94,72256,2168],{"class":104},[94,72258,72259],{"class":96,"line":7997},[94,72260,2381],{"emptyLinePlaceholder":20},[94,72262,72263,72266],{"class":96,"line":8003},[94,72264,72265],{"class":51277},"    button",[94,72267,15554],{"class":104},[94,72269,72270,72272,72274,72276,72278],{"class":96,"line":8015},[94,72271,54762],{"class":153},[94,72273,51414],{"class":104},[94,72275,930],{"class":153},[94,72277,51469],{"class":100},[94,72279,1271],{"class":104},[94,72281,72282,72284,72286,72288,72290],{"class":96,"line":8027},[94,72283,54748],{"class":153},[94,72285,51414],{"class":104},[94,72287,589],{"class":153},[94,72289,51469],{"class":100},[94,72291,1271],{"class":104},[94,72293,72294,72296,72298,72301,72303,72305,72307,72310,72312,72314],{"class":96,"line":8039},[94,72295,54861],{"class":153},[94,72297,51414],{"class":104},[94,72299,72300],{"class":153},"rgb",[94,72302,105],{"class":104},[94,72304,1074],{"class":153},[94,72306,12417],{"class":104},[94,72308,72309],{"class":153},"187",[94,72311,12417],{"class":104},[94,72313,404],{"class":153},[94,72315,2700],{"class":104},[94,72317,72318,72320,72322,72324],{"class":96,"line":9698},[94,72319,57393],{"class":153},[94,72321,51414],{"class":104},[94,72323,60819],{"class":153},[94,72325,1271],{"class":104},[94,72327,72328,72330,72332,72334],{"class":96,"line":9723},[94,72329,61954],{"class":153},[94,72331,51414],{"class":104},[94,72333,296],{"class":153},[94,72335,1271],{"class":104},[94,72337,72338],{"class":96,"line":9746},[94,72339,2168],{"class":104},[94,72341,72342],{"class":96,"line":9770},[94,72343,2381],{"emptyLinePlaceholder":20},[94,72345,72346,72348,72350],{"class":96,"line":9775},[94,72347,72265],{"class":51277},[94,72349,51665],{"class":51277},[94,72351,15554],{"class":104},[94,72353,72354,72356,72358,72361],{"class":96,"line":9780},[94,72355,54986],{"class":153},[94,72357,51414],{"class":104},[94,72359,72360],{"class":153},"inline-block",[94,72362,1271],{"class":104},[94,72364,72365,72367,72369,72371,72373],{"class":96,"line":9785},[94,72366,54748],{"class":153},[94,72368,51414],{"class":104},[94,72370,551],{"class":153},[94,72372,51469],{"class":100},[94,72374,1271],{"class":104},[94,72376,72377,72379,72381,72383,72385],{"class":96,"line":9794},[94,72378,54762],{"class":153},[94,72380,51414],{"class":104},[94,72382,551],{"class":153},[94,72384,51469],{"class":100},[94,72386,1271],{"class":104},[94,72388,72389,72391,72393,72395,72397],{"class":96,"line":9799},[94,72390,57336],{"class":153},[94,72392,51414],{"class":104},[94,72394,577],{"class":153},[94,72396,51469],{"class":100},[94,72398,1271],{"class":104},[94,72400,72401,72403,72405,72407,72409,72411,72414],{"class":96,"line":9805},[94,72402,61954],{"class":153},[94,72404,51414],{"class":104},[94,72406,322],{"class":153},[94,72408,51469],{"class":100},[94,72410,51498],{"class":153},[94,72412,72413],{"class":153}," #fff",[94,72415,1271],{"class":104},[94,72417,72418,72420,72422,72424,72426],{"class":96,"line":9826},[94,72419,55111],{"class":153},[94,72421,51414],{"class":104},[94,72423,424],{"class":153},[94,72425,51469],{"class":100},[94,72427,1271],{"class":104},[94,72429,72430,72432,72434,72436,72438],{"class":96,"line":9832},[94,72431,61727],{"class":153},[94,72433,51414],{"class":104},[94,72435,322],{"class":153},[94,72437,51469],{"class":100},[94,72439,1271],{"class":104},[94,72441,72442],{"class":96,"line":9846},[94,72443,2168],{"class":104},[94,72445,72446],{"class":96,"line":9852},[94,72447,2381],{"emptyLinePlaceholder":20},[94,72449,72450,72453],{"class":96,"line":9879},[94,72451,72452],{"class":1944},"    .total",[94,72454,15554],{"class":104},[94,72456,72457,72459,72461,72463,72465],{"class":96,"line":9888},[94,72458,54748],{"class":153},[94,72460,51414],{"class":104},[94,72462,61606],{"class":153},[94,72464,51469],{"class":100},[94,72466,1271],{"class":104},[94,72468,72469,72471,72473,72475,72477],{"class":96,"line":9894},[94,72470,54762],{"class":153},[94,72472,51414],{"class":104},[94,72474,506],{"class":153},[94,72476,51469],{"class":100},[94,72478,1271],{"class":104},[94,72480,72481,72483,72485,72487,72489],{"class":96,"line":9902},[94,72482,57336],{"class":153},[94,72484,51414],{"class":104},[94,72486,506],{"class":153},[94,72488,51469],{"class":100},[94,72490,1271],{"class":104},[94,72492,72493,72495,72497,72500],{"class":96,"line":9907},[94,72494,57263],{"class":153},[94,72496,51414],{"class":104},[94,72498,72499],{"class":153},"right",[94,72501,1271],{"class":104},[94,72503,72504,72506,72508,72510,72512,72514,72516,72518],{"class":96,"line":16586},[94,72505,54683],{"class":153},[94,72507,51414],{"class":104},[94,72509,506],{"class":153},[94,72511,51469],{"class":100},[94,72513,51533],{"class":153},[94,72515,2019],{"class":153},[94,72517,51469],{"class":100},[94,72519,1271],{"class":104},[94,72521,72522,72525,72527,72529,72531],{"class":96,"line":16592},[94,72523,72524],{"class":153},"      padding-right",[94,72526,51414],{"class":104},[94,72528,551],{"class":153},[94,72530,51469],{"class":100},[94,72532,1271],{"class":104},[94,72534,72535,72537,72539,72541,72543],{"class":96,"line":16615},[94,72536,54899],{"class":153},[94,72538,51414],{"class":104},[94,72540,628],{"class":153},[94,72542,51469],{"class":100},[94,72544,1271],{"class":104},[94,72546,72547,72549,72551,72553,72555,72558,72560,72563,72565,72567],{"class":96,"line":16621},[94,72548,54861],{"class":153},[94,72550,51414],{"class":104},[94,72552,72300],{"class":153},[94,72554,105],{"class":104},[94,72556,72557],{"class":153},"237",[94,72559,12417],{"class":104},[94,72561,72562],{"class":153},"235",[94,72564,12417],{"class":104},[94,72566,72562],{"class":153},[94,72568,2700],{"class":104},[94,72570,72571,72574,72576,72578],{"class":96,"line":16644},[94,72572,72573],{"class":153},"      box-sizing",[94,72575,51414],{"class":104},[94,72577,60482],{"class":153},[94,72579,1271],{"class":104},[94,72581,72582],{"class":96,"line":16658},[94,72583,2168],{"class":104},[94,72585,72586],{"class":96,"line":16678},[94,72587,2381],{"emptyLinePlaceholder":20},[94,72589,72590,72592,72594],{"class":96,"line":16684},[94,72591,72452],{"class":1944},[94,72593,51665],{"class":51277},[94,72595,15554],{"class":104},[94,72597,72598,72600,72602,72604],{"class":96,"line":16695},[94,72599,57393],{"class":153},[94,72601,51414],{"class":104},[94,72603,57398],{"class":153},[94,72605,1271],{"class":104},[94,72607,72608],{"class":96,"line":16718},[94,72609,2168],{"class":104},[94,72611,72612],{"class":96,"line":16740},[94,72613,2381],{"emptyLinePlaceholder":20},[94,72615,72616,72618],{"class":96,"line":16745},[94,72617,65000],{"class":51277},[94,72619,15554],{"class":104},[94,72621,72622,72624,72626,72628,72630],{"class":96,"line":16751},[94,72623,54748],{"class":153},[94,72625,51414],{"class":104},[94,72627,61606],{"class":153},[94,72629,51469],{"class":100},[94,72631,1271],{"class":104},[94,72633,72634,72636,72638,72641],{"class":96,"line":16765},[94,72635,54683],{"class":153},[94,72637,51414],{"class":104},[94,72639,72640],{"class":153},"auto",[94,72642,1271],{"class":104},[94,72644,72645,72647,72649,72651],{"class":96,"line":16778},[94,72646,65007],{"class":153},[94,72648,51414],{"class":104},[94,72650,65012],{"class":153},[94,72652,1271],{"class":104},[94,72654,72655],{"class":96,"line":16783},[94,72656,2168],{"class":104},[94,72658,72659],{"class":96,"line":16797},[94,72660,2381],{"emptyLinePlaceholder":20},[94,72662,72663,72665],{"class":96,"line":16802},[94,72664,65092],{"class":51277},[94,72666,15554],{"class":104},[94,72668,72669,72671,72673,72675,72677,72679,72681,72683,72685,72687],{"class":96,"line":16808},[94,72670,54861],{"class":153},[94,72672,51414],{"class":104},[94,72674,72300],{"class":153},[94,72676,105],{"class":104},[94,72678,72557],{"class":153},[94,72680,12417],{"class":104},[94,72682,72562],{"class":153},[94,72684,12417],{"class":104},[94,72686,72562],{"class":153},[94,72688,2700],{"class":104},[94,72690,72691],{"class":96,"line":16813},[94,72692,2168],{"class":104},[94,72694,72695],{"class":96,"line":16827},[94,72696,2381],{"emptyLinePlaceholder":20},[94,72698,72699,72701],{"class":96,"line":16832},[94,72700,65092],{"class":51277},[94,72702,31449],{"class":104},[94,72704,72705,72707],{"class":96,"line":16837},[94,72706,65158],{"class":51277},[94,72708,15554],{"class":104},[94,72710,72711,72713,72715,72717,72719],{"class":96,"line":16851},[94,72712,54762],{"class":153},[94,72714,51414],{"class":104},[94,72716,378],{"class":153},[94,72718,51469],{"class":100},[94,72720,1271],{"class":104},[94,72722,72723,72725,72727,72729],{"class":96,"line":16863},[94,72724,57263],{"class":153},[94,72726,51414],{"class":104},[94,72728,23718],{"class":153},[94,72730,1271],{"class":104},[94,72732,72733,72735,72737,72739,72741],{"class":96,"line":16868},[94,72734,54899],{"class":153},[94,72736,51414],{"class":104},[94,72738,654],{"class":153},[94,72740,51469],{"class":100},[94,72742,1271],{"class":104},[94,72744,72745,72747,72749,72751,72753,72755,72757,72759,72762,72764,72767,72769,72771],{"class":96,"line":16881},[94,72746,61954],{"class":153},[94,72748,51414],{"class":104},[94,72750,322],{"class":153},[94,72752,51469],{"class":100},[94,72754,51498],{"class":153},[94,72756,72237],{"class":153},[94,72758,105],{"class":104},[94,72760,72761],{"class":153},"228",[94,72763,12417],{"class":104},[94,72765,72766],{"class":153},"225",[94,72768,12417],{"class":104},[94,72770,72766],{"class":153},[94,72772,2700],{"class":104},[94,72774,72775,72778,72780,72782,72784],{"class":96,"line":16886},[94,72776,72777],{"class":153},"      padding-left",[94,72779,51414],{"class":104},[94,72781,424],{"class":153},[94,72783,51469],{"class":100},[94,72785,1271],{"class":104},[94,72787,72788,72790,72792,72794,72797,72799,72801],{"class":96,"line":16891},[94,72789,61837],{"class":153},[94,72791,51414],{"class":104},[94,72793,28104],{"class":153},[94,72795,72796],{"class":153}," linear",[94,72798,61844],{"class":153},[94,72800,800],{"class":100},[94,72802,1271],{"class":104},[94,72804,72805],{"class":96,"line":16896},[94,72806,2168],{"class":104},[94,72808,72809],{"class":96,"line":16909},[94,72810,2381],{"emptyLinePlaceholder":20},[94,72812,72813,72816,72818,72820],{"class":96,"line":16914},[94,72814,72815],{"class":51277},"    tbody",[94,72817,70121],{"class":51277},[94,72819,60917],{"class":1944},[94,72821,15554],{"class":104},[94,72823,72824,72826,72828,72830,72832,72834,72836,72838,72840,72842],{"class":96,"line":32616},[94,72825,54861],{"class":153},[94,72827,51414],{"class":104},[94,72829,72300],{"class":153},[94,72831,105],{"class":104},[94,72833,72557],{"class":153},[94,72835,12417],{"class":104},[94,72837,72562],{"class":153},[94,72839,12417],{"class":104},[94,72841,72562],{"class":153},[94,72843,2700],{"class":104},[94,72845,72846,72848,72850,72852],{"class":96,"line":32622},[94,72847,62002],{"class":153},[94,72849,51414],{"class":104},[94,72851,62007],{"class":153},[94,72853,1271],{"class":104},[94,72855,72856],{"class":96,"line":32628},[94,72857,2168],{"class":104},[94,72859,72860],{"class":96,"line":32634},[94,72861,2381],{"emptyLinePlaceholder":20},[94,72863,72864,72866,72868,72871,72873],{"class":96,"line":32640},[94,72865,72815],{"class":51277},[94,72867,70121],{"class":51277},[94,72869,72870],{"class":51277}," td",[94,72872,1379],{"class":51277},[94,72874,15554],{"class":104},[94,72876,72877,72879,72881,72883],{"class":96,"line":32651},[94,72878,54986],{"class":153},[94,72880,51414],{"class":104},[94,72882,60846],{"class":153},[94,72884,1271],{"class":104},[94,72886,72887,72889,72891,72893,72895],{"class":96,"line":32657},[94,72888,54748],{"class":153},[94,72890,51414],{"class":104},[94,72892,1012],{"class":153},[94,72894,51469],{"class":100},[94,72896,1271],{"class":104},[94,72898,72899,72901,72903,72905,72907],{"class":96,"line":32677},[94,72900,54762],{"class":153},[94,72902,51414],{"class":104},[94,72904,930],{"class":153},[94,72906,51469],{"class":100},[94,72908,1271],{"class":104},[94,72910,72911,72913,72915,72917,72919],{"class":96,"line":32683},[94,72912,57336],{"class":153},[94,72914,51414],{"class":104},[94,72916,930],{"class":153},[94,72918,51469],{"class":100},[94,72920,1271],{"class":104},[94,72922,72923,72925,72927,72929,72931],{"class":96,"line":32694},[94,72924,62054],{"class":153},[94,72926,51414],{"class":104},[94,72928,182],{"class":153},[94,72930,51469],{"class":100},[94,72932,1271],{"class":104},[94,72934,72935,72937,72939,72941],{"class":96,"line":32700},[94,72936,57393],{"class":153},[94,72938,51414],{"class":104},[94,72940,60819],{"class":153},[94,72942,1271],{"class":104},[94,72944,72945,72947,72949,72951],{"class":96,"line":32706},[94,72946,57263],{"class":153},[94,72948,51414],{"class":104},[94,72950,51569],{"class":153},[94,72952,1271],{"class":104},[94,72954,72955,72957,72959,72961],{"class":96,"line":32712},[94,72956,63947],{"class":153},[94,72958,51414],{"class":104},[94,72960,54714],{"class":153},[94,72962,1271],{"class":104},[94,72964,72965,72967,72969,72972],{"class":96,"line":32718},[94,72966,54861],{"class":153},[94,72968,51414],{"class":104},[94,72970,72971],{"class":153},"orange",[94,72973,1271],{"class":104},[94,72975,72976,72978,72980,72983,72985],{"class":96,"line":32724},[94,72977,55111],{"class":153},[94,72979,51414],{"class":104},[94,72981,72982],{"class":153},"12.5",[94,72984,51469],{"class":100},[94,72986,1271],{"class":104},[94,72988,72989],{"class":96,"line":32730},[94,72990,2168],{"class":104},[94,72992,72993,72995,72997],{"class":96,"line":32736},[94,72994,52394],{"class":104},[94,72996,5108],{"class":51277},[94,72998,51284],{"class":104},[94,73000,73001,73003,73005],{"class":96,"line":32756},[94,73002,51762],{"class":104},[94,73004,51311],{"class":51277},[94,73006,51284],{"class":104},[94,73008,73009],{"class":96,"line":32762},[94,73010,2381],{"emptyLinePlaceholder":20},[94,73012,73013,73015,73017],{"class":96,"line":32778},[94,73014,1015],{"class":104},[94,73016,51777],{"class":51277},[94,73018,51284],{"class":104},[94,73020,73021,73023,73025,73028,73030],{"class":96,"line":32784},[94,73022,52121],{"class":104},[94,73024,35],{"class":51277},[94,73026,73027],{"class":104},">学生就业统计表\u003C\u002F",[94,73029,35],{"class":51277},[94,73031,51284],{"class":104},[94,73033,73034,73036,73038,73040,73042,73044,73046,73048,73050],{"class":96,"line":32798},[94,73035,52121],{"class":104},[94,73037,66602],{"class":51277},[94,73039,53463],{"class":1944},[94,73041,150],{"class":104},[94,73043,62641],{"class":209},[94,73045,69047],{"class":1944},[94,73047,150],{"class":104},[94,73049,31759],{"class":209},[94,73051,51284],{"class":104},[94,73053,73054,73056,73058,73060,73062,73064,73066,73068,73070,73072,73074,73077,73079,73081,73083],{"class":96,"line":32804},[94,73055,51318],{"class":104},[94,73057,53798],{"class":51277},[94,73059,53801],{"class":1944},[94,73061,150],{"class":104},[94,73063,62676],{"class":209},[94,73065,14902],{"class":1944},[94,73067,150],{"class":104},[94,73069,69073],{"class":209},[94,73071,60997],{"class":1944},[94,73073,150],{"class":104},[94,73075,73076],{"class":209},"\"姓名\"",[94,73078,53463],{"class":1944},[94,73080,150],{"class":104},[94,73082,69073],{"class":209},[94,73084,51284],{"class":104},[94,73086,73087,73089,73091,73093,73095,73097,73099,73101,73103,73105,73107,73110,73112,73114,73116],{"class":96,"line":32819},[94,73088,51318],{"class":104},[94,73090,53798],{"class":51277},[94,73092,53801],{"class":1944},[94,73094,150],{"class":104},[94,73096,62676],{"class":209},[94,73098,14902],{"class":1944},[94,73100,150],{"class":104},[94,73102,69101],{"class":209},[94,73104,60997],{"class":1944},[94,73106,150],{"class":104},[94,73108,73109],{"class":209},"\"年龄\"",[94,73111,53463],{"class":1944},[94,73113,150],{"class":104},[94,73115,69101],{"class":209},[94,73117,51284],{"class":104},[94,73119,73120,73122,73124,73126,73128,73130,73132,73134,73136,73138,73140,73143,73145,73147,73149],{"class":96,"line":32825},[94,73121,51318],{"class":104},[94,73123,53798],{"class":51277},[94,73125,53801],{"class":1944},[94,73127,150],{"class":104},[94,73129,62676],{"class":209},[94,73131,14902],{"class":1944},[94,73133,150],{"class":104},[94,73135,69203],{"class":209},[94,73137,60997],{"class":1944},[94,73139,150],{"class":104},[94,73141,73142],{"class":209},"\"薪资\"",[94,73144,53463],{"class":1944},[94,73146,150],{"class":104},[94,73148,69203],{"class":209},[94,73150,51284],{"class":104},[94,73152,73153,73155,73157,73159,73161,73163,73165,73167,73169,73171,73173,73175],{"class":96,"line":32834},[94,73154,51318],{"class":104},[94,73156,69121],{"class":51277},[94,73158,14902],{"class":1944},[94,73160,150],{"class":104},[94,73162,69128],{"class":209},[94,73164,14941],{"class":1944},[94,73166,150],{"class":104},[94,73168,7634],{"class":209},[94,73170,53463],{"class":1944},[94,73172,150],{"class":104},[94,73174,69128],{"class":209},[94,73176,51284],{"class":104},[94,73178,73179,73181,73183,73185,73187,73189,73191,73193],{"class":96,"line":32840},[94,73180,55211],{"class":104},[94,73182,69143],{"class":51277},[94,73184,66628],{"class":1944},[94,73186,150],{"class":104},[94,73188,9943],{"class":209},[94,73190,69152],{"class":104},[94,73192,69143],{"class":51277},[94,73194,51284],{"class":104},[94,73196,73197,73199,73201,73203,73205,73207,73209,73211],{"class":96,"line":32849},[94,73198,55211],{"class":104},[94,73200,69143],{"class":51277},[94,73202,66628],{"class":1944},[94,73204,150],{"class":104},[94,73206,10012],{"class":209},[94,73208,69171],{"class":104},[94,73210,69143],{"class":51277},[94,73212,51284],{"class":104},[94,73214,73215,73217,73219],{"class":96,"line":32855},[94,73216,51753],{"class":104},[94,73218,69121],{"class":51277},[94,73220,51284],{"class":104},[94,73222,73223,73225,73227,73229,73231,73233,73235,73237,73239,73241,73243,73245],{"class":96,"line":32861},[94,73224,51318],{"class":104},[94,73226,69121],{"class":51277},[94,73228,14902],{"class":1944},[94,73230,150],{"class":104},[94,73232,69225],{"class":209},[94,73234,14941],{"class":1944},[94,73236,150],{"class":104},[94,73238,7634],{"class":209},[94,73240,53463],{"class":1944},[94,73242,150],{"class":104},[94,73244,69225],{"class":209},[94,73246,51284],{"class":104},[94,73248,73249,73251,73253,73255,73257,73259,73261,73263],{"class":96,"line":32870},[94,73250,55211],{"class":104},[94,73252,69143],{"class":51277},[94,73254,66628],{"class":1944},[94,73256,150],{"class":104},[94,73258,69246],{"class":209},[94,73260,69249],{"class":104},[94,73262,69143],{"class":51277},[94,73264,51284],{"class":104},[94,73266,73267,73269,73271,73273,73275,73277,73279,73281],{"class":96,"line":32876},[94,73268,55211],{"class":104},[94,73270,69143],{"class":51277},[94,73272,66628],{"class":1944},[94,73274,150],{"class":104},[94,73276,69266],{"class":209},[94,73278,69269],{"class":104},[94,73280,69143],{"class":51277},[94,73282,51284],{"class":104},[94,73284,73285,73287,73289,73291,73293,73295,73297,73299],{"class":96,"line":32887},[94,73286,55211],{"class":104},[94,73288,69143],{"class":51277},[94,73290,66628],{"class":1944},[94,73292,150],{"class":104},[94,73294,69286],{"class":209},[94,73296,69289],{"class":104},[94,73298,69143],{"class":51277},[94,73300,51284],{"class":104},[94,73302,73303,73305,73307,73309,73311,73313,73315,73317],{"class":96,"line":32893},[94,73304,55211],{"class":104},[94,73306,69143],{"class":51277},[94,73308,66628],{"class":1944},[94,73310,150],{"class":104},[94,73312,69306],{"class":209},[94,73314,69309],{"class":104},[94,73316,69143],{"class":51277},[94,73318,51284],{"class":104},[94,73320,73321,73323,73325,73327,73329,73331,73333,73335],{"class":96,"line":32912},[94,73322,55211],{"class":104},[94,73324,69143],{"class":51277},[94,73326,66628],{"class":1944},[94,73328,150],{"class":104},[94,73330,69326],{"class":209},[94,73332,69329],{"class":104},[94,73334,69143],{"class":51277},[94,73336,51284],{"class":104},[94,73338,73339,73341,73343],{"class":96,"line":32918},[94,73340,51753],{"class":104},[94,73342,69121],{"class":51277},[94,73344,51284],{"class":104},[94,73346,73347,73349,73351],{"class":96,"line":32929},[94,73348,51318],{"class":104},[94,73350,53864],{"class":51277},[94,73352,51284],{"class":104},[94,73354,73355,73357,73359,73362,73364,73367,73369],{"class":96,"line":32935},[94,73356,55211],{"class":104},[94,73358,94],{"class":51277},[94,73360,73361],{"class":104},">+\u003C\u002F",[94,73363,94],{"class":51277},[94,73365,73366],{"class":104},">添加\u003C\u002F",[94,73368,53864],{"class":51277},[94,73370,51284],{"class":104},[94,73372,73373,73375,73377],{"class":96,"line":32955},[94,73374,52394],{"class":104},[94,73376,66602],{"class":51277},[94,73378,51284],{"class":104},[94,73380,73381,73383,73385,73387,73389,73391,73394,73396,73399,73401,73404,73406],{"class":96,"line":32971},[94,73382,52121],{"class":104},[94,73384,51588],{"class":51277},[94,73386,53463],{"class":1944},[94,73388,150],{"class":104},[94,73390,62557],{"class":209},[94,73392,73393],{"class":104},">共有数据 \u003C",[94,73395,94],{"class":51277},[94,73397,73398],{"class":104},">0\u003C\u002F",[94,73400,94],{"class":51277},[94,73402,73403],{"class":104},"> 条\u003C\u002F",[94,73405,51588],{"class":51277},[94,73407,51284],{"class":104},[94,73409,73410,73412,73414],{"class":96,"line":32977},[94,73411,52121],{"class":104},[94,73413,242],{"class":51277},[94,73415,51284],{"class":104},[94,73417,73418,73420,73422],{"class":96,"line":32991},[94,73419,51318],{"class":104},[94,73421,245],{"class":51277},[94,73423,51284],{"class":104},[94,73425,73426,73428,73430],{"class":96,"line":32997},[94,73427,55211],{"class":104},[94,73429,248],{"class":51277},[94,73431,51284],{"class":104},[94,73433,73434,73436,73438,73441,73443],{"class":96,"line":33003},[94,73435,55279],{"class":104},[94,73437,251],{"class":51277},[94,73439,73440],{"class":104},">ID\u003C\u002F",[94,73442,251],{"class":51277},[94,73444,51284],{"class":104},[94,73446,73447,73449,73451,73453,73455],{"class":96,"line":33014},[94,73448,55279],{"class":104},[94,73450,251],{"class":51277},[94,73452,69432],{"class":104},[94,73454,251],{"class":51277},[94,73456,51284],{"class":104},[94,73458,73459,73461,73463,73465,73467],{"class":96,"line":33020},[94,73460,55279],{"class":104},[94,73462,251],{"class":51277},[94,73464,69445],{"class":104},[94,73466,251],{"class":51277},[94,73468,51284],{"class":104},[94,73470,73471,73473,73475,73477,73479],{"class":96,"line":33026},[94,73472,55279],{"class":104},[94,73474,251],{"class":51277},[94,73476,69458],{"class":104},[94,73478,251],{"class":51277},[94,73480,51284],{"class":104},[94,73482,73483,73485,73487,73489,73491],{"class":96,"line":33036},[94,73484,55279],{"class":104},[94,73486,251],{"class":51277},[94,73488,69471],{"class":104},[94,73490,251],{"class":51277},[94,73492,51284],{"class":104},[94,73494,73495,73497,73499,73501,73503],{"class":96,"line":33042},[94,73496,55279],{"class":104},[94,73498,251],{"class":51277},[94,73500,69484],{"class":104},[94,73502,251],{"class":51277},[94,73504,51284],{"class":104},[94,73506,73507,73509,73511,73514,73516],{"class":96,"line":33053},[94,73508,55279],{"class":104},[94,73510,251],{"class":51277},[94,73512,73513],{"class":104},">录入时间\u003C\u002F",[94,73515,251],{"class":51277},[94,73517,51284],{"class":104},[94,73519,73520,73522,73524,73526,73528],{"class":96,"line":33059},[94,73521,55279],{"class":104},[94,73523,251],{"class":51277},[94,73525,69497],{"class":104},[94,73527,251],{"class":51277},[94,73529,51284],{"class":104},[94,73531,73532,73534,73536],{"class":96,"line":33069},[94,73533,55384],{"class":104},[94,73535,248],{"class":51277},[94,73537,51284],{"class":104},[94,73539,73540,73542,73544],{"class":96,"line":33074},[94,73541,51753],{"class":104},[94,73543,245],{"class":51277},[94,73545,51284],{"class":104},[94,73547,73548,73550,73552],{"class":96,"line":33080},[94,73549,51318],{"class":104},[94,73551,289],{"class":51277},[94,73553,51284],{"class":104},[94,73555,73556],{"class":96,"line":33129},[94,73557,73558],{"class":163},"      \u003C!-- \u003Ctr>\n",[94,73560,73561],{"class":96,"line":33176},[94,73562,73563],{"class":163},"        \u003Ctd>1\u003C\u002Ftd>\n",[94,73565,73566],{"class":96,"line":33181},[94,73567,73563],{"class":163},[94,73569,73570],{"class":96,"line":33187},[94,73571,73563],{"class":163},[94,73573,73574],{"class":96,"line":33206},[94,73575,73563],{"class":163},[94,73577,73578],{"class":96,"line":33212},[94,73579,73563],{"class":163},[94,73581,73582],{"class":96,"line":33232},[94,73583,73563],{"class":163},[94,73585,73586],{"class":96,"line":33238},[94,73587,73563],{"class":163},[94,73589,73590],{"class":96,"line":33244},[94,73591,73592],{"class":163},"        \u003Ctd>\n",[94,73594,73595],{"class":96,"line":33254},[94,73596,73597],{"class":163},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[94,73599,73600],{"class":96,"line":33259},[94,73601,73602],{"class":163},"        \u003C\u002Ftd>\n",[94,73604,73605],{"class":96,"line":33265},[94,73606,73607],{"class":163},"      \u003C\u002Ftr> -->\n",[94,73609,73610,73612,73614],{"class":96,"line":33281},[94,73611,51753],{"class":104},[94,73613,289],{"class":51277},[94,73615,51284],{"class":104},[94,73617,73618,73620,73622],{"class":96,"line":33326},[94,73619,52394],{"class":104},[94,73621,242],{"class":51277},[94,73623,51284],{"class":104},[94,73625,73626,73628,73630],{"class":96,"line":33332},[94,73627,52121],{"class":104},[94,73629,51790],{"class":51277},[94,73631,51284],{"class":104},[94,73633,73634],{"class":96,"line":33338},[94,73635,73636],{"class":163},"    \u002F\u002F const initData = [{\n",[94,73638,73639],{"class":96,"line":33344},[94,73640,73641],{"class":163},"    \u002F\u002F   unameId: 1,\n",[94,73643,73644],{"class":96,"line":33355},[94,73645,73646],{"class":163},"    \u002F\u002F   uname: '华晨宇',\n",[94,73648,73649],{"class":96,"line":33361},[94,73650,73651],{"class":163},"    \u002F\u002F   age: 22,\n",[94,73653,73654],{"class":96,"line":33367},[94,73655,73656],{"class":163},"    \u002F\u002F   salary: 12000,\n",[94,73658,73659],{"class":96,"line":33373},[94,73660,73661],{"class":163},"    \u002F\u002F   gender: '男',\n",[94,73663,73664],{"class":96,"line":33391},[94,73665,73666],{"class":163},"    \u002F\u002F   city: '北京',\n",[94,73668,73669],{"class":96,"line":33405},[94,73670,73671],{"class":163},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[94,73673,73674],{"class":96,"line":33414},[94,73675,73676],{"class":163},"    \u002F\u002F }]\n",[94,73678,73679],{"class":96,"line":33423},[94,73680,73681],{"class":163},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[94,73683,73684],{"class":96,"line":33432},[94,73685,73686],{"class":163},"    \u002F\u002F 1.渲染业务\n",[94,73688,73689],{"class":96,"line":33441},[94,73690,73691],{"class":163},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[94,73693,73694],{"class":96,"line":33447},[94,73695,73696],{"class":163},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[94,73698,73699],{"class":96,"line":33453},[94,73700,73701],{"class":163},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[94,73703,73704],{"class":96,"line":33461},[94,73705,2381],{"emptyLinePlaceholder":20},[94,73707,73708],{"class":96,"line":33466},[94,73709,73710],{"class":163},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[94,73712,73713],{"class":96,"line":33472},[94,73714,73715],{"class":163},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[94,73717,73718,73720,73722,73724],{"class":96,"line":33483},[94,73719,11203],{"class":100},[94,73721,57672],{"class":153},[94,73723,13546],{"class":100},[94,73725,51815],{"class":104},[94,73727,73728,73731,73733],{"class":96,"line":33489},[94,73729,73730],{"class":104},"    console.",[94,73732,58224],{"class":1944},[94,73734,52389],{"class":104},[94,73736,73737],{"class":96,"line":33509},[94,73738,2381],{"emptyLinePlaceholder":20},[94,73740,73741],{"class":96,"line":33515},[94,73742,73743],{"class":163},"    \u002F\u002F 时间函数\n",[94,73745,73746,73748,73751],{"class":96,"line":33521},[94,73747,70061],{"class":100},[94,73749,73750],{"class":1944}," getTime",[94,73752,10835],{"class":104},[94,73754,73755,73757,73760,73762,73764,73767],{"class":96,"line":33527},[94,73756,58205],{"class":100},[94,73758,73759],{"class":153}," date",[94,73761,13546],{"class":100},[94,73763,11560],{"class":100},[94,73765,73766],{"class":1944}," Date",[94,73768,1957],{"class":104},[94,73770,73771,73773,73775,73777,73780,73783,73785,73787,73789,73792,73795,73797,73799,73801,73803,73805,73807,73809],{"class":96,"line":33544},[94,73772,58205],{"class":100},[94,73774,16073],{"class":153},[94,73776,13546],{"class":100},[94,73778,73779],{"class":104}," date.",[94,73781,73782],{"class":1944},"getHours",[94,73784,13032],{"class":104},[94,73786,1015],{"class":100},[94,73788,2019],{"class":153},[94,73790,73791],{"class":100}," ?",[94,73793,73794],{"class":209}," '0'",[94,73796,45549],{"class":100},[94,73798,73779],{"class":104},[94,73800,73782],{"class":1944},[94,73802,13032],{"class":104},[94,73804,964],{"class":100},[94,73806,73779],{"class":104},[94,73808,73782],{"class":1944},[94,73810,1957],{"class":104},[94,73812,73813,73815,73818,73820,73822,73825,73827,73829,73831,73833,73835,73837,73839,73841,73843,73845,73847,73849],{"class":96,"line":33550},[94,73814,58205],{"class":100},[94,73816,73817],{"class":153}," m",[94,73819,13546],{"class":100},[94,73821,73779],{"class":104},[94,73823,73824],{"class":1944},"getMinutes",[94,73826,13032],{"class":104},[94,73828,1015],{"class":100},[94,73830,2019],{"class":153},[94,73832,73791],{"class":100},[94,73834,73794],{"class":209},[94,73836,45549],{"class":100},[94,73838,73779],{"class":104},[94,73840,73824],{"class":1944},[94,73842,13032],{"class":104},[94,73844,964],{"class":100},[94,73846,73779],{"class":104},[94,73848,73824],{"class":1944},[94,73850,1957],{"class":104},[94,73852,73853,73855,73857,73859,73861,73864,73866,73868,73870,73872,73874,73876,73878,73880,73882,73884,73886,73888],{"class":96,"line":33556},[94,73854,58205],{"class":100},[94,73856,8410],{"class":153},[94,73858,13546],{"class":100},[94,73860,73779],{"class":104},[94,73862,73863],{"class":1944},"getSeconds",[94,73865,13032],{"class":104},[94,73867,1015],{"class":100},[94,73869,2019],{"class":153},[94,73871,73791],{"class":100},[94,73873,73794],{"class":209},[94,73875,45549],{"class":100},[94,73877,73779],{"class":104},[94,73879,73863],{"class":1944},[94,73881,13032],{"class":104},[94,73883,964],{"class":100},[94,73885,73779],{"class":104},[94,73887,73863],{"class":1944},[94,73889,1957],{"class":104},[94,73891,73892,73894,73897,73899,73901,73904,73906,73909,73911,73914,73916,73918,73921,73923,73925,73927,73929,73931,73933,73936,73938,73941,73943,73946,73948,73950,73952],{"class":96,"line":33562},[94,73893,58205],{"class":100},[94,73895,73896],{"class":153}," str",[94,73898,13546],{"class":100},[94,73900,62880],{"class":209},[94,73902,73903],{"class":104},"date",[94,73905,663],{"class":209},[94,73907,73908],{"class":1944},"getFullYear",[94,73910,2408],{"class":209},[94,73912,73913],{"class":209},"}\u002F${",[94,73915,73903],{"class":104},[94,73917,663],{"class":209},[94,73919,73920],{"class":1944},"getMonth",[94,73922,13032],{"class":209},[94,73924,586],{"class":100},[94,73926,25101],{"class":153},[94,73928,73913],{"class":209},[94,73930,73903],{"class":104},[94,73932,663],{"class":209},[94,73934,73935],{"class":1944},"getDate",[94,73937,2408],{"class":209},[94,73939,73940],{"class":209},"} ${",[94,73942,520],{"class":104},[94,73944,73945],{"class":209},"}:${",[94,73947,649],{"class":104},[94,73949,73945],{"class":209},[94,73951,800],{"class":104},[94,73953,73954],{"class":209},"}`\n",[94,73956,73957,73960],{"class":96,"line":33568},[94,73958,73959],{"class":100},"      return",[94,73961,73962],{"class":104}," str\n",[94,73964,73965],{"class":96,"line":33574},[94,73966,2168],{"class":104},[94,73968,73969],{"class":96,"line":33601},[94,73970,73971],{"class":163},"    \u002F\u002F 渲染函数\n",[94,73973,73974,73976,73978,73980,73982,73984,73986,73988],{"class":96,"line":33625},[94,73975,11203],{"class":100},[94,73977,69724],{"class":153},[94,73979,13546],{"class":100},[94,73981,54373],{"class":104},[94,73983,54376],{"class":1944},[94,73985,105],{"class":104},[94,73987,69735],{"class":209},[94,73989,111],{"class":104},[94,73991,73992,73994,73996],{"class":96,"line":33631},[94,73993,70061],{"class":100},[94,73995,70064],{"class":1944},[94,73997,10835],{"class":104},[94,73999,74000],{"class":96,"line":33637},[94,74001,74002],{"class":163},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[94,74004,74005],{"class":96,"line":33643},[94,74006,74007],{"class":163},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[94,74009,74010,74012,74015,74017,74019,74022,74024,74026,74028,74031,74033,74036],{"class":96,"line":33654},[94,74011,58205],{"class":100},[94,74013,74014],{"class":153}," trArr",[94,74016,13546],{"class":100},[94,74018,51942],{"class":104},[94,74020,74021],{"class":1944},"map",[94,74023,105],{"class":104},[94,74025,54426],{"class":100},[94,74027,1639],{"class":104},[94,74029,74030],{"class":5198},"ele",[94,74032,12417],{"class":104},[94,74034,74035],{"class":5198},"index",[94,74037,12424],{"class":104},[94,74039,74040,74042],{"class":96,"line":33665},[94,74041,14734],{"class":100},[94,74043,70145],{"class":209},[94,74045,74046],{"class":96,"line":33671},[94,74047,74048],{"class":209},"      \u003Ctr>\n",[94,74050,74051,74053,74055,74057,74060],{"class":96,"line":33688},[94,74052,70150],{"class":209},[94,74054,74030],{"class":104},[94,74056,663],{"class":209},[94,74058,74059],{"class":104},"unameId",[94,74061,70165],{"class":209},[94,74063,74064,74066,74068,74070,74072],{"class":96,"line":33711},[94,74065,70150],{"class":209},[94,74067,74030],{"class":104},[94,74069,663],{"class":209},[94,74071,70181],{"class":104},[94,74073,70165],{"class":209},[94,74075,74076,74078,74080,74082,74084],{"class":96,"line":33734},[94,74077,70150],{"class":209},[94,74079,74030],{"class":104},[94,74081,663],{"class":209},[94,74083,70198],{"class":104},[94,74085,70165],{"class":209},[94,74087,74088,74090,74092,74094,74096],{"class":96,"line":33740},[94,74089,70150],{"class":209},[94,74091,74030],{"class":104},[94,74093,663],{"class":209},[94,74095,70215],{"class":104},[94,74097,70165],{"class":209},[94,74099,74100,74102,74104,74106,74108],{"class":96,"line":33745},[94,74101,70150],{"class":209},[94,74103,74030],{"class":104},[94,74105,663],{"class":209},[94,74107,70232],{"class":104},[94,74109,70165],{"class":209},[94,74111,74112,74114,74116,74118,74120],{"class":96,"line":33754},[94,74113,70150],{"class":209},[94,74115,74030],{"class":104},[94,74117,663],{"class":209},[94,74119,70249],{"class":104},[94,74121,70165],{"class":209},[94,74123,74124,74126,74128,74130,74132],{"class":96,"line":33764},[94,74125,70150],{"class":209},[94,74127,74030],{"class":104},[94,74129,663],{"class":209},[94,74131,2368],{"class":104},[94,74133,70165],{"class":209},[94,74135,74136],{"class":96,"line":33770},[94,74137,73592],{"class":209},[94,74139,74140,74143,74145],{"class":96,"line":33775},[94,74141,74142],{"class":209},"          \u003Ca href=\"#\" data-id=\"${",[94,74144,74035],{"class":104},[94,74146,74147],{"class":209},"}\">删除\u003C\u002Fa>\n",[94,74149,74150],{"class":96,"line":33781},[94,74151,73602],{"class":209},[94,74153,74154],{"class":96,"line":33794},[94,74155,74156],{"class":209},"      \u003C\u002Ftr>\n",[94,74158,74159],{"class":96,"line":33800},[94,74160,74161],{"class":209},"  `\n",[94,74163,74164],{"class":96,"line":33811},[94,74165,64792],{"class":104},[94,74167,74168,74170,74172],{"class":96,"line":33822},[94,74169,58221],{"class":104},[94,74171,58224],{"class":1944},[94,74173,74174],{"class":104},"(trArr)\n",[94,74176,74177],{"class":96,"line":33841},[94,74178,2381],{"emptyLinePlaceholder":20},[94,74180,74181],{"class":96,"line":49501},[94,74182,74183],{"class":163},"      \u002F\u002F (2) 把数组转换为字符串join\n",[94,74185,74186],{"class":96,"line":49506},[94,74187,74188],{"class":163},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[94,74190,74191,74193,74195,74198,74201,74203,74206],{"class":96,"line":49515},[94,74192,70076],{"class":104},[94,74194,150],{"class":100},[94,74196,74197],{"class":104}," trArr.",[94,74199,74200],{"class":1944},"join",[94,74202,105],{"class":104},[94,74204,74205],{"class":209},"''",[94,74207,111],{"class":104},[94,74209,74210],{"class":96,"line":49524},[94,74211,74212],{"class":163},"      \u002F\u002F 显示共有几条\n",[94,74214,74215,74217,74219,74221,74224,74227,74229,74231],{"class":96,"line":49529},[94,74216,55748],{"class":104},[94,74218,54376],{"class":1944},[94,74220,105],{"class":104},[94,74222,74223],{"class":209},"'.total span'",[94,74225,74226],{"class":104},").innerHTML ",[94,74228,150],{"class":100},[94,74230,51942],{"class":104},[94,74232,55808],{"class":153},[94,74234,74235],{"class":96,"line":49534},[94,74236,2168],{"class":104},[94,74238,74239],{"class":96,"line":49539},[94,74240,74241],{"class":163},"    \u002F\u002F render()\n",[94,74243,74244],{"class":96,"line":49552},[94,74245,2381],{"emptyLinePlaceholder":20},[94,74247,74248],{"class":96,"line":49557},[94,74249,74250],{"class":163},"    \u002F\u002F 获取DOM对象\n",[94,74252,74253,74255,74257,74259,74261,74263,74265,74267],{"class":96,"line":49566},[94,74254,11203],{"class":100},[94,74256,69798],{"class":153},[94,74258,13546],{"class":100},[94,74260,54373],{"class":104},[94,74262,54376],{"class":1944},[94,74264,105],{"class":104},[94,74266,69809],{"class":209},[94,74268,111],{"class":104},[94,74270,74271,74273,74275,74277,74279,74281,74283,74285],{"class":96,"line":49575},[94,74272,11203],{"class":100},[94,74274,69625],{"class":153},[94,74276,13546],{"class":100},[94,74278,54373],{"class":104},[94,74280,54376],{"class":1944},[94,74282,105],{"class":104},[94,74284,69636],{"class":209},[94,74286,111],{"class":104},[94,74288,74289,74291,74293,74295,74297,74299,74301,74303],{"class":96,"line":49592},[94,74290,11203],{"class":100},[94,74292,15671],{"class":153},[94,74294,13546],{"class":100},[94,74296,54373],{"class":104},[94,74298,54376],{"class":1944},[94,74300,105],{"class":104},[94,74302,69655],{"class":209},[94,74304,111],{"class":104},[94,74306,74308,74310,74312,74314,74316,74318,74320,74322],{"class":96,"line":74307},231,[94,74309,11203],{"class":100},[94,74311,69684],{"class":153},[94,74313,13546],{"class":100},[94,74315,54373],{"class":104},[94,74317,54376],{"class":1944},[94,74319,105],{"class":104},[94,74321,69695],{"class":209},[94,74323,111],{"class":104},[94,74325,74327,74329,74331,74333,74335,74337,74339,74341],{"class":96,"line":74326},232,[94,74328,11203],{"class":100},[94,74330,69664],{"class":153},[94,74332,13546],{"class":100},[94,74334,54373],{"class":104},[94,74336,54376],{"class":1944},[94,74338,105],{"class":104},[94,74340,69675],{"class":209},[94,74342,111],{"class":104},[94,74344,74346,74348,74350,74352,74354,74356,74358,74360],{"class":96,"line":74345},233,[94,74347,11203],{"class":100},[94,74349,69704],{"class":153},[94,74351,13546],{"class":100},[94,74353,54373],{"class":104},[94,74355,54376],{"class":1944},[94,74357,105],{"class":104},[94,74359,69715],{"class":209},[94,74361,111],{"class":104},[94,74363,74365],{"class":96,"line":74364},234,[94,74366,2381],{"emptyLinePlaceholder":20},[94,74368,74370],{"class":96,"line":74369},235,[94,74371,74372],{"class":163},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[94,74374,74376,74378,74380,74382,74384,74386,74388,74390,74392],{"class":96,"line":74375},236,[94,74377,69816],{"class":104},[94,74379,57790],{"class":1944},[94,74381,105],{"class":104},[94,74383,69823],{"class":209},[94,74385,12417],{"class":104},[94,74387,54426],{"class":100},[94,74389,1639],{"class":104},[94,74391,179],{"class":5198},[94,74393,12424],{"class":104},[94,74395,74397],{"class":96,"line":74396},237,[94,74398,74399],{"class":163},"      \u002F\u002F 禁止浏览器跳转\n",[94,74401,74403,74405,74407],{"class":96,"line":74402},238,[94,74404,69843],{"class":104},[94,74406,69846],{"class":1944},[94,74408,1957],{"class":104},[94,74410,74412],{"class":96,"line":74411},239,[94,74413,74414],{"class":163},"      \u002F\u002F 非空判断\n",[94,74416,74418],{"class":96,"line":74417},240,[94,74419,74420],{"class":163},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[94,74422,74424],{"class":96,"line":74423},241,[94,74425,74426],{"class":163},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[94,74428,74430,74432,74434,74436,74439,74441,74444,74447,74449,74451],{"class":96,"line":74429},242,[94,74431,54457],{"class":100},[94,74433,1639],{"class":104},[94,74435,331],{"class":100},[94,74437,74438],{"class":104},"uname.value ",[94,74440,71334],{"class":100},[94,74442,74443],{"class":100}," !",[94,74445,74446],{"class":104},"age.value ",[94,74448,71334],{"class":100},[94,74450,74443],{"class":100},[94,74452,74453],{"class":104},"salary.value) {\n",[94,74455,74457,74459,74461,74463,74465],{"class":96,"line":74456},243,[94,74458,14734],{"class":100},[94,74460,69917],{"class":1944},[94,74462,105],{"class":104},[94,74464,69922],{"class":209},[94,74466,111],{"class":104},[94,74468,74470],{"class":96,"line":74469},244,[94,74471,52375],{"class":104},[94,74473,74475,74477,74479],{"class":96,"line":74474},245,[94,74476,57984],{"class":104},[94,74478,51861],{"class":1944},[94,74480,74481],{"class":104},"({\n",[94,74483,74485],{"class":96,"line":74484},246,[94,74486,74487],{"class":163},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[94,74489,74491],{"class":96,"line":74490},247,[94,74492,74493],{"class":163},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[94,74495,74497],{"class":96,"line":74496},248,[94,74498,74499],{"class":163},"        \u002F\u002F 对象的序号应为数组长度+1\n",[94,74501,74503],{"class":96,"line":74502},249,[94,74504,74505],{"class":163},"        \u002F\u002F unameId: arr.length + 1,\n",[94,74507,74509],{"class":96,"line":74508},250,[94,74510,2381],{"emptyLinePlaceholder":20},[94,74512,74514],{"class":96,"line":74513},251,[94,74515,74516],{"class":163},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[94,74518,74520],{"class":96,"line":74519},252,[94,74521,74522],{"class":163},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[94,74524,74526],{"class":96,"line":74525},253,[94,74527,74528],{"class":163},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[94,74530,74532],{"class":96,"line":74531},254,[94,74533,74534],{"class":163},"        \u002F\u002F 0当假看\n",[94,74536,74538,74541,74543,74545,74548,74550,74552,74554,74557,74559,74561,74564,74566],{"class":96,"line":74537},255,[94,74539,74540],{"class":104},"        unameId: arr.",[94,74542,51945],{"class":153},[94,74544,73791],{"class":100},[94,74546,74547],{"class":104}," arr[arr.",[94,74549,51945],{"class":153},[94,74551,52248],{"class":100},[94,74553,25101],{"class":153},[94,74555,74556],{"class":104},"].unameId ",[94,74558,586],{"class":100},[94,74560,25101],{"class":153},[94,74562,74563],{"class":100}," :",[94,74565,25101],{"class":153},[94,74567,31449],{"class":104},[94,74569,74571],{"class":96,"line":74570},256,[94,74572,69970],{"class":104},[94,74574,74576],{"class":96,"line":74575},257,[94,74577,69975],{"class":104},[94,74579,74581],{"class":96,"line":74580},258,[94,74582,69985],{"class":104},[94,74584,74586],{"class":96,"line":74585},259,[94,74587,69980],{"class":104},[94,74589,74591],{"class":96,"line":74590},260,[94,74592,74593],{"class":104},"        city: city.value,\n",[94,74595,74597],{"class":96,"line":74596},261,[94,74598,74599],{"class":163},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[94,74601,74603],{"class":96,"line":74602},262,[94,74604,74605],{"class":163},"        \u002F\u002F time: new Date().toDateString()\n",[94,74607,74609,74612,74615],{"class":96,"line":74608},263,[94,74610,74611],{"class":104},"        time: ",[94,74613,74614],{"class":1944},"getTime",[94,74616,1957],{"class":104},[94,74618,74620],{"class":96,"line":74619},264,[94,74621,64792],{"class":104},[94,74623,74625],{"class":96,"line":74624},265,[94,74626,74627],{"class":163},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[94,74629,74631,74633],{"class":96,"line":74630},266,[94,74632,70045],{"class":1944},[94,74634,1957],{"class":104},[94,74636,74638,74640,74642,74644,74646],{"class":96,"line":74637},267,[94,74639,70028],{"class":153},[94,74641,663],{"class":104},[94,74643,70033],{"class":1944},[94,74645,13032],{"class":104},[94,74647,74648],{"class":163},"\u002F\u002F重置表单\n",[94,74650,74652],{"class":96,"line":74651},268,[94,74653,74654],{"class":163},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[94,74656,74658,74661,74663,74665,74668,74670,74672,74674,74676],{"class":96,"line":74657},269,[94,74659,74660],{"class":104},"      localStorage.",[94,74662,71631],{"class":1944},[94,74664,105],{"class":104},[94,74666,74667],{"class":209},"'data'",[94,74669,12417],{"class":104},[94,74671,71641],{"class":153},[94,74673,663],{"class":104},[94,74675,71646],{"class":1944},[94,74677,74678],{"class":104},"(arr))\n",[94,74680,74682],{"class":96,"line":74681},270,[94,74683,33444],{"class":104},[94,74685,74687],{"class":96,"line":74686},271,[94,74688,2381],{"emptyLinePlaceholder":20},[94,74690,74692],{"class":96,"line":74691},272,[94,74693,74694],{"class":163},"    \u002F\u002F 3.删除业务\n",[94,74696,74698],{"class":96,"line":74697},273,[94,74699,74700],{"class":163},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[94,74702,74704,74706,74708,74710,74712,74714,74716,74718,74720],{"class":96,"line":74703},274,[94,74705,70318],{"class":104},[94,74707,57790],{"class":1944},[94,74709,105],{"class":104},[94,74711,57795],{"class":209},[94,74713,12417],{"class":104},[94,74715,54426],{"class":100},[94,74717,1639],{"class":104},[94,74719,179],{"class":5198},[94,74721,12424],{"class":104},[94,74723,74725],{"class":96,"line":74724},275,[94,74726,74727],{"class":163},"      \u002F\u002F 判断是否点击的是删除按钮\n",[94,74729,74731,74733,74735,74737,74739],{"class":96,"line":74730},276,[94,74732,54457],{"class":100},[94,74734,67011],{"class":104},[94,74736,54463],{"class":100},[94,74738,68233],{"class":209},[94,74740,12424],{"class":104},[94,74742,74744],{"class":96,"line":74743},277,[94,74745,74746],{"class":163},"        \u002F\u002F alert(1)\n",[94,74748,74750],{"class":96,"line":74749},278,[94,74751,74752],{"class":163},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[94,74754,74756],{"class":96,"line":74755},279,[94,74757,74758],{"class":163},"        \u002F\u002F console.log(e.target)\n",[94,74760,74762],{"class":96,"line":74761},280,[94,74763,74764],{"class":163},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[94,74766,74768],{"class":96,"line":74767},281,[94,74769,2381],{"emptyLinePlaceholder":20},[94,74771,74773],{"class":96,"line":74772},282,[94,74774,74775],{"class":163},"        \u002F\u002F 确认框，确然是否真的要删除\n",[94,74777,74779],{"class":96,"line":74778},283,[94,74780,74781],{"class":163},"        \u002F\u002F confirm()为确认框\n",[94,74783,74785],{"class":96,"line":74784},284,[94,74786,74787],{"class":163},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[94,74789,74791,74793,74795,74798,74800,74803],{"class":96,"line":74790},285,[94,74792,2478],{"class":100},[94,74794,1639],{"class":104},[94,74796,74797],{"class":1944},"confirm",[94,74799,105],{"class":104},[94,74801,74802],{"class":209},"'您确定要删除这条数据吗？'",[94,74804,74805],{"class":104},")) {\n",[94,74807,74809,74812,74814,74816,74818],{"class":96,"line":74808},286,[94,74810,74811],{"class":104},"          arr.",[94,74813,57987],{"class":1944},[94,74815,70371],{"class":104},[94,74817,322],{"class":153},[94,74819,111],{"class":104},[94,74821,74823],{"class":96,"line":74822},287,[94,74824,74825],{"class":163},"          \u002F\u002F 3.4 重新渲染页面\n",[94,74827,74829,74832],{"class":96,"line":74828},288,[94,74830,74831],{"class":1944},"          render",[94,74833,1957],{"class":104},[94,74835,74837],{"class":96,"line":74836},289,[94,74838,74839],{"class":163},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[94,74841,74843,74846,74848,74850,74852,74854,74856,74858,74860],{"class":96,"line":74842},290,[94,74844,74845],{"class":104},"          localStorage.",[94,74847,71631],{"class":1944},[94,74849,105],{"class":104},[94,74851,74667],{"class":209},[94,74853,12417],{"class":104},[94,74855,71641],{"class":153},[94,74857,663],{"class":104},[94,74859,71646],{"class":1944},[94,74861,74678],{"class":104},[94,74863,74865],{"class":96,"line":74864},291,[94,74866,2510],{"class":104},[94,74868,74870],{"class":96,"line":74869},292,[94,74871,52375],{"class":104},[94,74873,74875],{"class":96,"line":74874},293,[94,74876,2381],{"emptyLinePlaceholder":20},[94,74878,74880],{"class":96,"line":74879},294,[94,74881,33444],{"class":104},[94,74883,74885],{"class":96,"line":74884},295,[94,74886,2381],{"emptyLinePlaceholder":20},[94,74888,74890,74892,74894],{"class":96,"line":74889},296,[94,74891,52394],{"class":104},[94,74893,51790],{"class":51277},[94,74895,51284],{"class":104},[94,74897,74899,74901,74903],{"class":96,"line":74898},297,[94,74900,51762],{"class":104},[94,74902,51777],{"class":51277},[94,74904,51284],{"class":104},[94,74906,74908],{"class":96,"line":74907},298,[94,74909,2381],{"emptyLinePlaceholder":20},[94,74911,74913,74915,74917],{"class":96,"line":74912},299,[94,74914,51762],{"class":104},[94,74916,50612],{"class":51277},[94,74918,51284],{"class":104},[35,74920,74922],{"id":74921},"_36-正则表达式","3.6 正则表达式",[40,74924,74925],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[40,74927,74928],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[40,74930,74931],{},"正则表达式的作用：",[1112,74933,74934,74941,74947],{},[51,74935,74936,74937,74940],{},"表单验证（ ",[254,74938,74939],{},"匹配"," ）",[51,74942,74943,74944,74940],{},"过滤敏感词（ ",[254,74945,74946],{},"替换",[51,74948,74949,74950,74940],{},"字符串中提取我们想要的部分（ ",[254,74951,74952],{},"提取",[65,74954,74956],{"id":74955},"_361-语法","3.6.1 语法",[40,74958,74959],{},"正则表达式使用步骤：",[48,74961,74962,74965],{},[51,74963,74964],{},"定义规则",[51,74966,74967],{},"查找是否匹配",[40,74969,74970],{},"正则表达式里边不需要写引号",[40,74972,74973],{},[1443,74974],{"alt":14,"src":74975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[40,74977,74978],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[40,74980,74981],{},"reg.test(str)",[40,74983,74984],{},[1443,74985],{"alt":14,"src":74986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[40,74988,74989],{},[1443,74990],{"alt":14,"src":74991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[65,74993,74995],{"id":74994},"_362-元字符","3.6.2 元字符",[48,74997,74998,75001,75004,75007,75014],{},[51,74999,75000],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[51,75002,75003],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[51,75005,75006],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[51,75008,75009,75010],{},"正则验证工具：",[343,75011,75012],{"href":75012,"rel":75013},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23847],[51,75015,75016],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[21980,75018,75020],{"id":75019},"_3621-边界符","3.6.2.1 边界符",[40,75022,75023],{},[1443,75024],{"alt":14,"src":75025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[40,75027,75028],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[40,75030,75031],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[40,75033,75034],{},"只匹配一次",[40,75036,75037],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[21980,75039,75041],{"id":75040},"_3622-量词","3.6.2.2 量词",[40,75043,75044],{},[1443,75045],{"alt":14,"src":75046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[40,75048,75049],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[21980,75051,75053],{"id":75052},"_3623-元字符","3.6.2.3 元字符",[40,75055,75056],{},[1443,75057],{"alt":14,"src":75058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[40,75060,75061],{},"匹配的是a或b或c []只选一个",[40,75063,75064],{},[1443,75065],{"alt":14,"src":75066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[40,75068,75069],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[40,75071,75072],{},[1443,75073],{"alt":14,"src":75074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[40,75076,75077],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[40,75079,75080],{},[1443,75081],{"alt":14,"src":75082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[85,75084,75086],{"className":50610,"code":75085,"language":50612,"meta":14,"style":14},"\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",[91,75087,75088,75098,75112,75116,75124,75138,75158,75170,75178,75182,75190,75198,75203,75234,75261,75289,75293,75298,75326,75357,75362,75367,75398,75430,75462,75466,75471,75502,75532,75562,75566,75571,75602,75633,75663,75693,75697,75702,75735,75739,75744,75775,75806,75810,75815,75846,75876,75907,75911,75916,75948,75979,76010,76037,76068,76100,76133,76164,76195,76227,76258,76266,76274,76278],{"__ignoreMap":14},[94,75089,75090,75092,75094,75096],{"class":96,"line":97},[94,75091,51274],{"class":104},[94,75093,51278],{"class":51277},[94,75095,51281],{"class":1944},[94,75097,51284],{"class":104},[94,75099,75100,75102,75104,75106,75108,75110],{"class":96,"line":15},[94,75101,1015],{"class":104},[94,75103,50612],{"class":51277},[94,75105,51293],{"class":1944},[94,75107,150],{"class":104},[94,75109,51298],{"class":209},[94,75111,51284],{"class":104},[94,75113,75114],{"class":96,"line":1160},[94,75115,2381],{"emptyLinePlaceholder":20},[94,75117,75118,75120,75122],{"class":96,"line":1175},[94,75119,1015],{"class":104},[94,75121,51311],{"class":51277},[94,75123,51284],{"class":104},[94,75125,75126,75128,75130,75132,75134,75136],{"class":96,"line":1181},[94,75127,52121],{"class":104},[94,75129,51321],{"class":51277},[94,75131,51324],{"class":1944},[94,75133,150],{"class":104},[94,75135,51329],{"class":209},[94,75137,51284],{"class":104},[94,75139,75140,75142,75144,75146,75148,75150,75152,75154,75156],{"class":96,"line":1195},[94,75141,52121],{"class":104},[94,75143,51321],{"class":51277},[94,75145,14902],{"class":1944},[94,75147,150],{"class":104},[94,75149,51368],{"class":209},[94,75151,51348],{"class":1944},[94,75153,150],{"class":104},[94,75155,51375],{"class":209},[94,75157,51284],{"class":104},[94,75159,75160,75162,75164,75166,75168],{"class":96,"line":1201},[94,75161,52121],{"class":104},[94,75163,51384],{"class":51277},[94,75165,51387],{"class":104},[94,75167,51384],{"class":51277},[94,75169,51284],{"class":104},[94,75171,75172,75174,75176],{"class":96,"line":1292},[94,75173,51762],{"class":104},[94,75175,51311],{"class":51277},[94,75177,51284],{"class":104},[94,75179,75180],{"class":96,"line":1298},[94,75181,2381],{"emptyLinePlaceholder":20},[94,75183,75184,75186,75188],{"class":96,"line":1310},[94,75185,1015],{"class":104},[94,75187,51777],{"class":51277},[94,75189,51284],{"class":104},[94,75191,75192,75194,75196],{"class":96,"line":1593},[94,75193,52121],{"class":104},[94,75195,51790],{"class":51277},[94,75197,51284],{"class":104},[94,75199,75200],{"class":96,"line":1598},[94,75201,75202],{"class":163},"    \u002F\u002F 元字符中\n",[94,75204,75205,75207,75209,75211,75213,75216,75218,75220,75223,75225,75228,75231],{"class":96,"line":1604},[94,75206,73730],{"class":104},[94,75208,58224],{"class":1944},[94,75210,105],{"class":104},[94,75212,689],{"class":209},[94,75214,75215],{"class":47960},"哈",[94,75217,689],{"class":209},[94,75219,663],{"class":104},[94,75221,75222],{"class":1944},"test",[94,75224,105],{"class":104},[94,75226,75227],{"class":209},"'哈'",[94,75229,75230],{"class":104},"))  ",[94,75232,75233],{"class":163},"\u002F\u002Ftrue\n",[94,75235,75236,75238,75240,75242,75244,75246,75248,75250,75252,75254,75257,75259],{"class":96,"line":1609},[94,75237,73730],{"class":104},[94,75239,58224],{"class":1944},[94,75241,105],{"class":104},[94,75243,689],{"class":209},[94,75245,75215],{"class":47960},[94,75247,689],{"class":209},[94,75249,663],{"class":104},[94,75251,75222],{"class":1944},[94,75253,105],{"class":104},[94,75255,75256],{"class":209},"'哈哈'",[94,75258,75230],{"class":104},[94,75260,75233],{"class":163},[94,75262,75263,75265,75267,75269,75271,75273,75275,75277,75279,75281,75284,75287],{"class":96,"line":1623},[94,75264,73730],{"class":104},[94,75266,58224],{"class":1944},[94,75268,105],{"class":104},[94,75270,689],{"class":209},[94,75272,75215],{"class":47960},[94,75274,689],{"class":209},[94,75276,663],{"class":104},[94,75278,75222],{"class":1944},[94,75280,105],{"class":104},[94,75282,75283],{"class":209},"'二哈'",[94,75285,75286],{"class":104},"))   ",[94,75288,75233],{"class":163},[94,75290,75291],{"class":96,"line":1628},[94,75292,2381],{"emptyLinePlaceholder":20},[94,75294,75295],{"class":96,"line":1634},[94,75296,75297],{"class":163},"    \u002F\u002F 1.边界符\n",[94,75299,75300,75302,75304,75306,75308,75310,75312,75314,75316,75318,75320,75322,75324],{"class":96,"line":1655},[94,75301,73730],{"class":104},[94,75303,58224],{"class":1944},[94,75305,105],{"class":104},[94,75307,689],{"class":209},[94,75309,1071],{"class":100},[94,75311,75215],{"class":47960},[94,75313,689],{"class":209},[94,75315,663],{"class":104},[94,75317,75222],{"class":1944},[94,75319,105],{"class":104},[94,75321,75227],{"class":209},[94,75323,75230],{"class":104},[94,75325,75233],{"class":163},[94,75327,75328,75330,75332,75334,75336,75338,75340,75342,75344,75346,75348,75350,75352,75354],{"class":96,"line":1660},[94,75329,73730],{"class":104},[94,75331,58224],{"class":1944},[94,75333,105],{"class":104},[94,75335,689],{"class":209},[94,75337,1071],{"class":100},[94,75339,75215],{"class":47960},[94,75341,407],{"class":100},[94,75343,689],{"class":209},[94,75345,663],{"class":104},[94,75347,75222],{"class":1944},[94,75349,105],{"class":104},[94,75351,75256],{"class":209},[94,75353,75230],{"class":104},[94,75355,75356],{"class":163},"\u002F\u002Ffalse\n",[94,75358,75359],{"class":96,"line":1674},[94,75360,75361],{"class":163},"    \u002F\u002F 2.量词\n",[94,75363,75364],{"class":96,"line":1679},[94,75365,75366],{"class":163},"    \u002F\u002F 量词 * 类似于 >= 0\n",[94,75368,75369,75371,75373,75375,75377,75379,75381,75384,75386,75388,75390,75392,75394,75396],{"class":96,"line":1708},[94,75370,73730],{"class":104},[94,75372,58224],{"class":1944},[94,75374,105],{"class":104},[94,75376,689],{"class":209},[94,75378,1071],{"class":100},[94,75380,75215],{"class":47960},[94,75382,75383],{"class":100},"*$",[94,75385,689],{"class":209},[94,75387,663],{"class":104},[94,75389,75222],{"class":1944},[94,75391,105],{"class":104},[94,75393,75256],{"class":209},[94,75395,75230],{"class":104},[94,75397,75233],{"class":163},[94,75399,75400,75402,75404,75406,75408,75410,75412,75414,75416,75418,75420,75422,75425,75427],{"class":96,"line":1713},[94,75401,73730],{"class":104},[94,75403,58224],{"class":1944},[94,75405,105],{"class":104},[94,75407,689],{"class":209},[94,75409,1071],{"class":100},[94,75411,75215],{"class":47960},[94,75413,75383],{"class":100},[94,75415,689],{"class":209},[94,75417,663],{"class":104},[94,75419,75222],{"class":1944},[94,75421,105],{"class":104},[94,75423,75424],{"class":209},"'二哈好傻'",[94,75426,75230],{"class":104},[94,75428,75429],{"class":163},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[94,75431,75432,75434,75436,75438,75440,75442,75444,75446,75448,75450,75452,75454,75457,75459],{"class":96,"line":1730},[94,75433,73730],{"class":104},[94,75435,58224],{"class":1944},[94,75437,105],{"class":104},[94,75439,689],{"class":209},[94,75441,1071],{"class":100},[94,75443,75215],{"class":47960},[94,75445,75383],{"class":100},[94,75447,689],{"class":209},[94,75449,663],{"class":104},[94,75451,75222],{"class":1944},[94,75453,105],{"class":104},[94,75455,75456],{"class":209},"'哈好哈'",[94,75458,75286],{"class":104},[94,75460,75461],{"class":163},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[94,75463,75464],{"class":96,"line":1735},[94,75465,2381],{"emptyLinePlaceholder":20},[94,75467,75468],{"class":96,"line":1740},[94,75469,75470],{"class":163},"    \u002F\u002F +类似于>=1\n",[94,75472,75473,75475,75477,75479,75481,75483,75485,75488,75490,75492,75494,75496,75498,75500],{"class":96,"line":1745},[94,75474,73730],{"class":104},[94,75476,58224],{"class":1944},[94,75478,105],{"class":104},[94,75480,689],{"class":209},[94,75482,1071],{"class":100},[94,75484,75215],{"class":47960},[94,75486,75487],{"class":100},"+$",[94,75489,689],{"class":209},[94,75491,663],{"class":104},[94,75493,75222],{"class":1944},[94,75495,105],{"class":104},[94,75497,75256],{"class":209},[94,75499,75230],{"class":104},[94,75501,75233],{"class":163},[94,75503,75504,75506,75508,75510,75512,75514,75516,75518,75520,75522,75524,75526,75528,75530],{"class":96,"line":1759},[94,75505,73730],{"class":104},[94,75507,58224],{"class":1944},[94,75509,105],{"class":104},[94,75511,689],{"class":209},[94,75513,1071],{"class":100},[94,75515,75215],{"class":47960},[94,75517,75487],{"class":100},[94,75519,689],{"class":209},[94,75521,663],{"class":104},[94,75523,75222],{"class":1944},[94,75525,105],{"class":104},[94,75527,75424],{"class":209},[94,75529,75230],{"class":104},[94,75531,75429],{"class":163},[94,75533,75534,75536,75538,75540,75542,75544,75546,75548,75550,75552,75554,75556,75558,75560],{"class":96,"line":1764},[94,75535,73730],{"class":104},[94,75537,58224],{"class":1944},[94,75539,105],{"class":104},[94,75541,689],{"class":209},[94,75543,1071],{"class":100},[94,75545,75215],{"class":47960},[94,75547,75487],{"class":100},[94,75549,689],{"class":209},[94,75551,663],{"class":104},[94,75553,75222],{"class":1944},[94,75555,105],{"class":104},[94,75557,75456],{"class":209},[94,75559,75286],{"class":104},[94,75561,75356],{"class":163},[94,75563,75564],{"class":96,"line":2558},[94,75565,2381],{"emptyLinePlaceholder":20},[94,75567,75568],{"class":96,"line":2572},[94,75569,75570],{"class":163},"    \u002F\u002F ?类似于0次或一次\n",[94,75572,75573,75575,75577,75579,75581,75583,75586,75588,75590,75592,75594,75596,75598,75600],{"class":96,"line":2580},[94,75574,73730],{"class":104},[94,75576,58224],{"class":1944},[94,75578,105],{"class":104},[94,75580,689],{"class":209},[94,75582,1071],{"class":100},[94,75584,75585],{"class":47960},"哈？",[94,75587,407],{"class":100},[94,75589,689],{"class":209},[94,75591,663],{"class":104},[94,75593,75222],{"class":1944},[94,75595,105],{"class":104},[94,75597,74205],{"class":209},[94,75599,75286],{"class":104},[94,75601,75233],{"class":163},[94,75603,75604,75606,75608,75610,75612,75614,75616,75619,75621,75623,75625,75627,75629,75631],{"class":96,"line":2585},[94,75605,73730],{"class":104},[94,75607,58224],{"class":1944},[94,75609,105],{"class":104},[94,75611,689],{"class":209},[94,75613,1071],{"class":100},[94,75615,75215],{"class":47960},[94,75617,75618],{"class":100},"?$",[94,75620,689],{"class":209},[94,75622,663],{"class":104},[94,75624,75222],{"class":1944},[94,75626,105],{"class":104},[94,75628,75256],{"class":209},[94,75630,75230],{"class":104},[94,75632,75356],{"class":163},[94,75634,75635,75637,75639,75641,75643,75645,75647,75649,75651,75653,75655,75657,75659,75661],{"class":96,"line":2591},[94,75636,73730],{"class":104},[94,75638,58224],{"class":1944},[94,75640,105],{"class":104},[94,75642,689],{"class":209},[94,75644,1071],{"class":100},[94,75646,75215],{"class":47960},[94,75648,75618],{"class":100},[94,75650,689],{"class":209},[94,75652,663],{"class":104},[94,75654,75222],{"class":1944},[94,75656,105],{"class":104},[94,75658,75424],{"class":209},[94,75660,75230],{"class":104},[94,75662,75429],{"class":163},[94,75664,75665,75667,75669,75671,75673,75675,75677,75679,75681,75683,75685,75687,75689,75691],{"class":96,"line":2597},[94,75666,73730],{"class":104},[94,75668,58224],{"class":1944},[94,75670,105],{"class":104},[94,75672,689],{"class":209},[94,75674,1071],{"class":100},[94,75676,75215],{"class":47960},[94,75678,75618],{"class":100},[94,75680,689],{"class":209},[94,75682,663],{"class":104},[94,75684,75222],{"class":1944},[94,75686,105],{"class":104},[94,75688,75456],{"class":209},[94,75690,75230],{"class":104},[94,75692,75356],{"class":163},[94,75694,75695],{"class":96,"line":2602},[94,75696,2381],{"emptyLinePlaceholder":20},[94,75698,75699],{"class":96,"line":7930},[94,75700,75701],{"class":163},"    \u002F\u002F {n}写几，就必须出现几次\n",[94,75703,75704,75706,75708,75710,75712,75714,75716,75719,75721,75723,75725,75727,75730,75733],{"class":96,"line":7954},[94,75705,73730],{"class":104},[94,75707,58224],{"class":1944},[94,75709,105],{"class":104},[94,75711,689],{"class":209},[94,75713,1071],{"class":100},[94,75715,75215],{"class":47960},[94,75717,75718],{"class":100},"{4}$",[94,75720,689],{"class":209},[94,75722,663],{"class":104},[94,75724,75222],{"class":1944},[94,75726,105],{"class":104},[94,75728,75729],{"class":209},"'哈哈哈哈'",[94,75731,75732],{"class":104},")) ",[94,75734,75233],{"class":163},[94,75736,75737],{"class":96,"line":7959},[94,75738,2381],{"emptyLinePlaceholder":20},[94,75740,75741],{"class":96,"line":7965},[94,75742,75743],{"class":163},"    \u002F\u002F {n,}大于等于n次\n",[94,75745,75746,75748,75750,75752,75754,75756,75758,75761,75763,75765,75767,75769,75771,75773],{"class":96,"line":7992},[94,75747,73730],{"class":104},[94,75749,58224],{"class":1944},[94,75751,105],{"class":104},[94,75753,689],{"class":209},[94,75755,1071],{"class":100},[94,75757,75215],{"class":47960},[94,75759,75760],{"class":100},"{4,}$",[94,75762,689],{"class":209},[94,75764,663],{"class":104},[94,75766,75222],{"class":1944},[94,75768,105],{"class":104},[94,75770,75729],{"class":209},[94,75772,75732],{"class":104},[94,75774,75233],{"class":163},[94,75776,75777,75779,75781,75783,75785,75787,75789,75791,75793,75795,75797,75799,75802,75804],{"class":96,"line":7997},[94,75778,73730],{"class":104},[94,75780,58224],{"class":1944},[94,75782,105],{"class":104},[94,75784,689],{"class":209},[94,75786,1071],{"class":100},[94,75788,75215],{"class":47960},[94,75790,75760],{"class":100},[94,75792,689],{"class":209},[94,75794,663],{"class":104},[94,75796,75222],{"class":1944},[94,75798,105],{"class":104},[94,75800,75801],{"class":209},"'哈哈哈哈哈'",[94,75803,75732],{"class":104},[94,75805,75233],{"class":163},[94,75807,75808],{"class":96,"line":8003},[94,75809,2381],{"emptyLinePlaceholder":20},[94,75811,75812],{"class":96,"line":8015},[94,75813,75814],{"class":163},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[94,75816,75817,75819,75821,75823,75825,75827,75829,75832,75834,75836,75838,75840,75842,75844],{"class":96,"line":8027},[94,75818,73730],{"class":104},[94,75820,58224],{"class":1944},[94,75822,105],{"class":104},[94,75824,689],{"class":209},[94,75826,1071],{"class":100},[94,75828,75215],{"class":47960},[94,75830,75831],{"class":100},"{4,6}$",[94,75833,689],{"class":209},[94,75835,663],{"class":104},[94,75837,75222],{"class":1944},[94,75839,105],{"class":104},[94,75841,75729],{"class":209},[94,75843,75732],{"class":104},[94,75845,75233],{"class":163},[94,75847,75848,75850,75852,75854,75856,75858,75860,75862,75864,75866,75868,75870,75872,75874],{"class":96,"line":8039},[94,75849,73730],{"class":104},[94,75851,58224],{"class":1944},[94,75853,105],{"class":104},[94,75855,689],{"class":209},[94,75857,1071],{"class":100},[94,75859,75215],{"class":47960},[94,75861,75831],{"class":100},[94,75863,689],{"class":209},[94,75865,663],{"class":104},[94,75867,75222],{"class":1944},[94,75869,105],{"class":104},[94,75871,75801],{"class":209},[94,75873,75732],{"class":104},[94,75875,75233],{"class":163},[94,75877,75878,75880,75882,75884,75886,75888,75890,75892,75894,75896,75898,75900,75903,75905],{"class":96,"line":9698},[94,75879,73730],{"class":104},[94,75881,58224],{"class":1944},[94,75883,105],{"class":104},[94,75885,689],{"class":209},[94,75887,1071],{"class":100},[94,75889,75215],{"class":47960},[94,75891,75831],{"class":100},[94,75893,689],{"class":209},[94,75895,663],{"class":104},[94,75897,75222],{"class":1944},[94,75899,105],{"class":104},[94,75901,75902],{"class":209},"'哈哈哈哈哈哈哈'",[94,75904,75732],{"class":104},[94,75906,75356],{"class":163},[94,75908,75909],{"class":96,"line":9723},[94,75910,2381],{"emptyLinePlaceholder":20},[94,75912,75913],{"class":96,"line":9746},[94,75914,75915],{"class":163},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[94,75917,75918,75920,75922,75924,75926,75928,75931,75933,75935,75937,75939,75941,75944,75946],{"class":96,"line":9770},[94,75919,73730],{"class":104},[94,75921,58224],{"class":1944},[94,75923,105],{"class":104},[94,75925,689],{"class":209},[94,75927,1071],{"class":100},[94,75929,75930],{"class":153},"[abc]",[94,75932,407],{"class":100},[94,75934,689],{"class":209},[94,75936,663],{"class":104},[94,75938,75222],{"class":1944},[94,75940,105],{"class":104},[94,75942,75943],{"class":209},"'a'",[94,75945,75230],{"class":104},[94,75947,75233],{"class":163},[94,75949,75950,75952,75954,75956,75958,75960,75962,75964,75966,75968,75970,75972,75975,75977],{"class":96,"line":9775},[94,75951,73730],{"class":104},[94,75953,58224],{"class":1944},[94,75955,105],{"class":104},[94,75957,689],{"class":209},[94,75959,1071],{"class":100},[94,75961,75930],{"class":153},[94,75963,407],{"class":100},[94,75965,689],{"class":209},[94,75967,663],{"class":104},[94,75969,75222],{"class":1944},[94,75971,105],{"class":104},[94,75973,75974],{"class":209},"'b'",[94,75976,75230],{"class":104},[94,75978,75233],{"class":163},[94,75980,75981,75983,75985,75987,75989,75991,75993,75995,75997,75999,76001,76003,76006,76008],{"class":96,"line":9780},[94,75982,73730],{"class":104},[94,75984,58224],{"class":1944},[94,75986,105],{"class":104},[94,75988,689],{"class":209},[94,75990,1071],{"class":100},[94,75992,75930],{"class":153},[94,75994,407],{"class":100},[94,75996,689],{"class":209},[94,75998,663],{"class":104},[94,76000,75222],{"class":1944},[94,76002,105],{"class":104},[94,76004,76005],{"class":209},"'c'",[94,76007,75230],{"class":104},[94,76009,75233],{"class":163},[94,76011,76012,76014,76016,76018,76020,76022,76024,76026,76028,76030,76033,76035],{"class":96,"line":9785},[94,76013,73730],{"class":104},[94,76015,58224],{"class":1944},[94,76017,105],{"class":104},[94,76019,689],{"class":209},[94,76021,75930],{"class":153},[94,76023,689],{"class":209},[94,76025,663],{"class":104},[94,76027,75222],{"class":1944},[94,76029,105],{"class":104},[94,76031,76032],{"class":209},"'ab'",[94,76034,75230],{"class":104},[94,76036,75233],{"class":163},[94,76038,76039,76041,76043,76045,76047,76049,76051,76053,76055,76057,76059,76061,76063,76065],{"class":96,"line":9794},[94,76040,73730],{"class":104},[94,76042,58224],{"class":1944},[94,76044,105],{"class":104},[94,76046,689],{"class":209},[94,76048,1071],{"class":100},[94,76050,75930],{"class":153},[94,76052,407],{"class":100},[94,76054,689],{"class":209},[94,76056,663],{"class":104},[94,76058,75222],{"class":1944},[94,76060,105],{"class":104},[94,76062,76032],{"class":209},[94,76064,75230],{"class":104},[94,76066,76067],{"class":163},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[94,76069,76070,76072,76074,76076,76078,76080,76082,76085,76087,76089,76091,76093,76095,76097],{"class":96,"line":9799},[94,76071,73730],{"class":104},[94,76073,58224],{"class":1944},[94,76075,105],{"class":104},[94,76077,689],{"class":209},[94,76079,1071],{"class":100},[94,76081,75930],{"class":153},[94,76083,76084],{"class":100},"{2}$",[94,76086,689],{"class":209},[94,76088,663],{"class":104},[94,76090,75222],{"class":1944},[94,76092,105],{"class":104},[94,76094,76032],{"class":209},[94,76096,75230],{"class":104},[94,76098,76099],{"class":163},"\u002F\u002Ftrue   可以选两个\n",[94,76101,76102,76104,76106,76108,76110,76112,76115,76117,76119,76121,76123,76125,76128,76130],{"class":96,"line":9805},[94,76103,73730],{"class":104},[94,76105,58224],{"class":1944},[94,76107,105],{"class":104},[94,76109,689],{"class":209},[94,76111,1071],{"class":100},[94,76113,76114],{"class":153},"[a-z]",[94,76116,407],{"class":100},[94,76118,689],{"class":209},[94,76120,663],{"class":104},[94,76122,75222],{"class":1944},[94,76124,105],{"class":104},[94,76126,76127],{"class":209},"'p'",[94,76129,75286],{"class":104},[94,76131,76132],{"class":163},"\u002F\u002Ftrue   依然只能选一个\n",[94,76134,76135,76137,76139,76141,76143,76145,76148,76150,76152,76154,76156,76158,76160,76162],{"class":96,"line":9826},[94,76136,73730],{"class":104},[94,76138,58224],{"class":1944},[94,76140,105],{"class":104},[94,76142,689],{"class":209},[94,76144,1071],{"class":100},[94,76146,76147],{"class":153},"[A-Z]",[94,76149,407],{"class":100},[94,76151,689],{"class":209},[94,76153,663],{"class":104},[94,76155,75222],{"class":1944},[94,76157,105],{"class":104},[94,76159,76127],{"class":209},[94,76161,75286],{"class":104},[94,76163,75356],{"class":163},[94,76165,76166,76168,76170,76172,76174,76176,76178,76180,76182,76184,76186,76188,76191,76193],{"class":96,"line":9832},[94,76167,73730],{"class":104},[94,76169,58224],{"class":1944},[94,76171,105],{"class":104},[94,76173,689],{"class":209},[94,76175,1071],{"class":100},[94,76177,76147],{"class":153},[94,76179,407],{"class":100},[94,76181,689],{"class":209},[94,76183,663],{"class":104},[94,76185,75222],{"class":1944},[94,76187,105],{"class":104},[94,76189,76190],{"class":209},"'P'",[94,76192,75286],{"class":104},[94,76194,75233],{"class":163},[94,76196,76197,76199,76201,76203,76205,76207,76210,76212,76214,76216,76218,76220,76223,76225],{"class":96,"line":9846},[94,76198,73730],{"class":104},[94,76200,58224],{"class":1944},[94,76202,105],{"class":104},[94,76204,689],{"class":209},[94,76206,1071],{"class":100},[94,76208,76209],{"class":153},"[0-9]",[94,76211,407],{"class":100},[94,76213,689],{"class":209},[94,76215,663],{"class":104},[94,76217,75222],{"class":1944},[94,76219,105],{"class":104},[94,76221,76222],{"class":209},"'0'",[94,76224,75286],{"class":104},[94,76226,75233],{"class":163},[94,76228,76229,76231,76233,76235,76237,76239,76242,76244,76246,76248,76250,76252,76254,76256],{"class":96,"line":9852},[94,76230,73730],{"class":104},[94,76232,58224],{"class":1944},[94,76234,105],{"class":104},[94,76236,689],{"class":209},[94,76238,1071],{"class":100},[94,76240,76241],{"class":153},"[a-zA-Z0-9]",[94,76243,407],{"class":100},[94,76245,689],{"class":209},[94,76247,663],{"class":104},[94,76249,75222],{"class":1944},[94,76251,105],{"class":104},[94,76253,76127],{"class":209},[94,76255,75230],{"class":104},[94,76257,75233],{"class":163},[94,76259,76260,76262,76264],{"class":96,"line":9879},[94,76261,52394],{"class":104},[94,76263,51790],{"class":51277},[94,76265,51284],{"class":104},[94,76267,76268,76270,76272],{"class":96,"line":9888},[94,76269,51762],{"class":104},[94,76271,51777],{"class":51277},[94,76273,51284],{"class":104},[94,76275,76276],{"class":96,"line":9894},[94,76277,2381],{"emptyLinePlaceholder":20},[94,76279,76280,76282,76284],{"class":96,"line":9902},[94,76281,51762],{"class":104},[94,76283,50612],{"class":51277},[94,76285,51284],{"class":104},[21980,76287,76289],{"id":76288},"_3624-修饰符","3.6.2.4 修饰符",[40,76291,76292],{},[1443,76293],{"alt":14,"src":76294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[40,76296,76297],{},"replace是个方法，使用的时候一定不要忘记括号()",[40,76299,76300],{},[1443,76301],{"alt":14,"src":76302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[85,76304,76306],{"className":50610,"code":76305,"language":50612,"meta":14,"style":14},"\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",[91,76307,76308,76318,76332,76340,76354,76374,76386,76394,76402,76410,76442,76473,76478,76510,76521,76554,76563,76571,76579],{"__ignoreMap":14},[94,76309,76310,76312,76314,76316],{"class":96,"line":97},[94,76311,51274],{"class":104},[94,76313,51278],{"class":51277},[94,76315,51281],{"class":1944},[94,76317,51284],{"class":104},[94,76319,76320,76322,76324,76326,76328,76330],{"class":96,"line":15},[94,76321,1015],{"class":104},[94,76323,50612],{"class":51277},[94,76325,51293],{"class":1944},[94,76327,150],{"class":104},[94,76329,51298],{"class":209},[94,76331,51284],{"class":104},[94,76333,76334,76336,76338],{"class":96,"line":1160},[94,76335,1015],{"class":104},[94,76337,51311],{"class":51277},[94,76339,51284],{"class":104},[94,76341,76342,76344,76346,76348,76350,76352],{"class":96,"line":1175},[94,76343,52121],{"class":104},[94,76345,51321],{"class":51277},[94,76347,51324],{"class":1944},[94,76349,150],{"class":104},[94,76351,51329],{"class":209},[94,76353,51284],{"class":104},[94,76355,76356,76358,76360,76362,76364,76366,76368,76370,76372],{"class":96,"line":1181},[94,76357,52121],{"class":104},[94,76359,51321],{"class":51277},[94,76361,14902],{"class":1944},[94,76363,150],{"class":104},[94,76365,51368],{"class":209},[94,76367,51348],{"class":1944},[94,76369,150],{"class":104},[94,76371,51375],{"class":209},[94,76373,51284],{"class":104},[94,76375,76376,76378,76380,76382,76384],{"class":96,"line":1195},[94,76377,52121],{"class":104},[94,76379,51384],{"class":51277},[94,76381,51387],{"class":104},[94,76383,51384],{"class":51277},[94,76385,51284],{"class":104},[94,76387,76388,76390,76392],{"class":96,"line":1201},[94,76389,51762],{"class":104},[94,76391,51311],{"class":51277},[94,76393,51284],{"class":104},[94,76395,76396,76398,76400],{"class":96,"line":1292},[94,76397,1015],{"class":104},[94,76399,51777],{"class":51277},[94,76401,51284],{"class":104},[94,76403,76404,76406,76408],{"class":96,"line":1298},[94,76405,52121],{"class":104},[94,76407,51790],{"class":51277},[94,76409,51284],{"class":104},[94,76411,76412,76414,76416,76418,76420,76422,76425,76427,76429,76431,76433,76435,76438,76440],{"class":96,"line":1310},[94,76413,73730],{"class":104},[94,76415,58224],{"class":1944},[94,76417,105],{"class":104},[94,76419,689],{"class":209},[94,76421,1071],{"class":100},[94,76423,76424],{"class":47960},"java",[94,76426,407],{"class":100},[94,76428,689],{"class":209},[94,76430,663],{"class":104},[94,76432,75222],{"class":1944},[94,76434,105],{"class":104},[94,76436,76437],{"class":209},"'java'",[94,76439,75732],{"class":104},[94,76441,75233],{"class":163},[94,76443,76444,76446,76448,76450,76452,76454,76456,76458,76460,76462,76464,76466,76469,76471],{"class":96,"line":1593},[94,76445,73730],{"class":104},[94,76447,58224],{"class":1944},[94,76449,105],{"class":104},[94,76451,689],{"class":209},[94,76453,1071],{"class":100},[94,76455,76424],{"class":47960},[94,76457,407],{"class":100},[94,76459,689],{"class":209},[94,76461,663],{"class":104},[94,76463,75222],{"class":1944},[94,76465,105],{"class":104},[94,76467,76468],{"class":209},"'Java'",[94,76470,75732],{"class":104},[94,76472,75356],{"class":163},[94,76474,76475],{"class":96,"line":1598},[94,76476,76477],{"class":163},"    \u002F\u002F 不区分大小写、\n",[94,76479,76480,76482,76484,76486,76488,76490,76492,76494,76496,76498,76500,76502,76504,76506,76508],{"class":96,"line":1604},[94,76481,73730],{"class":104},[94,76483,58224],{"class":1944},[94,76485,105],{"class":104},[94,76487,689],{"class":209},[94,76489,1071],{"class":100},[94,76491,76424],{"class":47960},[94,76493,407],{"class":100},[94,76495,689],{"class":209},[94,76497,546],{"class":100},[94,76499,663],{"class":104},[94,76501,75222],{"class":1944},[94,76503,105],{"class":104},[94,76505,76468],{"class":209},[94,76507,75732],{"class":104},[94,76509,75233],{"class":163},[94,76511,76512,76514,76516,76518],{"class":96,"line":1609},[94,76513,11203],{"class":100},[94,76515,73896],{"class":153},[94,76517,13546],{"class":100},[94,76519,76520],{"class":209}," 'java是一门编程语言，学完java工资很高'\n",[94,76522,76523,76525,76528,76530,76533,76536,76538,76540,76542,76544,76547,76549,76552],{"class":96,"line":1623},[94,76524,11203],{"class":100},[94,76526,76527],{"class":153}," result",[94,76529,13546],{"class":100},[94,76531,76532],{"class":104}," str.",[94,76534,76535],{"class":1944},"replace",[94,76537,105],{"class":104},[94,76539,689],{"class":209},[94,76541,76424],{"class":47960},[94,76543,689],{"class":209},[94,76545,76546],{"class":100},"ig",[94,76548,12417],{"class":104},[94,76550,76551],{"class":209},"'前端'",[94,76553,111],{"class":104},[94,76555,76556,76558,76560],{"class":96,"line":1628},[94,76557,73730],{"class":104},[94,76559,58224],{"class":1944},[94,76561,76562],{"class":104},"(result)\n",[94,76564,76565,76567,76569],{"class":96,"line":1634},[94,76566,52394],{"class":104},[94,76568,51790],{"class":51277},[94,76570,51284],{"class":104},[94,76572,76573,76575,76577],{"class":96,"line":1655},[94,76574,51762],{"class":104},[94,76576,51777],{"class":51277},[94,76578,51284],{"class":104},[94,76580,76581,76583,76585],{"class":96,"line":1660},[94,76582,51762],{"class":104},[94,76584,50612],{"class":51277},[94,76586,51284],{"class":104},[5108,76588,76589],{},"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":14,"searchDepth":15,"depth":15,"links":76591},[76592,76602,76614,76631,76638,76646],{"id":53337,"depth":15,"text":53338,"children":76593},[76594,76595,76596,76597,76598,76599,76600,76601],{"id":53341,"depth":1160,"text":53342},{"id":53374,"depth":1160,"text":53375},{"id":53413,"depth":1160,"text":53414},{"id":53571,"depth":1160,"text":53572},{"id":53619,"depth":1160,"text":53620},{"id":53756,"depth":1160,"text":53757},{"id":54078,"depth":1160,"text":54079},{"id":57066,"depth":1160,"text":57067},{"id":57094,"depth":15,"text":57095,"children":76603},[76604,76605,76606,76607,76608,76609,76610,76611,76612,76613],{"id":57098,"depth":1160,"text":57099},{"id":57121,"depth":1160,"text":57122},{"id":58036,"depth":1160,"text":58037},{"id":58726,"depth":1160,"text":58727},{"id":59008,"depth":1160,"text":59009},{"id":63169,"depth":1160,"text":63170},{"id":63339,"depth":1160,"text":63340},{"id":63467,"depth":1160,"text":63468},{"id":63492,"depth":1160,"text":63493},{"id":64881,"depth":1160,"text":64882},{"id":66034,"depth":15,"text":66035,"children":76615},[76616,76617,76618,76619,76620,76621,76622,76623,76624,76625,76626,76627,76628,76629,76630],{"id":66038,"depth":1160,"text":66039},{"id":66692,"depth":1160,"text":66693},{"id":68387,"depth":1160,"text":68388},{"id":68428,"depth":1160,"text":68429},{"id":68470,"depth":1160,"text":68471},{"id":68484,"depth":1160,"text":68485},{"id":68533,"depth":1160,"text":68534},{"id":68545,"depth":1160,"text":68546},{"id":68560,"depth":1160,"text":68561},{"id":68596,"depth":1160,"text":68597},{"id":68677,"depth":1160,"text":68678},{"id":68805,"depth":1160,"text":68806},{"id":68817,"depth":1160,"text":68818},{"id":68836,"depth":1160,"text":68837},{"id":70947,"depth":1160,"text":70948},{"id":70966,"depth":15,"text":70967,"children":76632},[76633,76634,76635,76636,76637],{"id":70987,"depth":1160,"text":70988},{"id":71007,"depth":1160,"text":71008},{"id":71056,"depth":1160,"text":71057},{"id":71181,"depth":1160,"text":71182},{"id":71362,"depth":1160,"text":71363},{"id":71380,"depth":15,"text":71381,"children":76639},[76640,76641,76642,76643,76644,76645],{"id":71395,"depth":1160,"text":71396},{"id":71454,"depth":1160,"text":71455},{"id":71478,"depth":1160,"text":71479},{"id":71798,"depth":1160,"text":71799},{"id":71830,"depth":1160,"text":71831},{"id":71853,"depth":1160,"text":71854},{"id":74921,"depth":15,"text":74922,"children":76647},[76648,76649],{"id":74955,"depth":1160,"text":74956},{"id":74994,"depth":1160,"text":74995},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53309,"description":17},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76656,"title":76657,"body":76658,"description":17,"extension":18,"meta":92795,"navigation":20,"path":92796,"seo":92797,"stem":92798,"__hash__":92799},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76659,"toc":92731},[76660,76663,76666,76670,76674,76679,76684,76695,76699,76704,76707,76711,76714,76719,76723,76727,76730,76735,76738,76742,76745,76753,76756,76760,76765,76770,76773,76777,76782,76787,76790,76794,76799,76802,76807,76810,76815,76818,76823,76828,76831,76834,76838,76843,76848,76851,76855,76859,76862,76865,76868,76872,76876,76881,76886,76889,76893,76898,76903,76906,76909,76912,76915,76918,76921,76924,76927,76930,76935,76939,76944,76949,76952,76955,76958,76961,76964,76967,76970,76973,76977,76981,76984,76987,76990,76995,76997,77000,77003,77006,77009,77012,77015,77018,77021,77024,77027,77030,77033,77036,77041,77046,77051,77054,77058,77061,77066,77070,77072,77083,77088,77189,77192,77195,77198,77201,77204,77207,77210,77213,77215,77218,77221,77224,77227,77230,77232,77235,77238,77241,77244,77247,77250,77252,77255,77257,77259,77262,77266,77270,77273,77276,77279,77282,77285,77288,77291,77294,77297,77302,77422,77425,77428,77433,77436,77439,77442,77445,77450,77453,77456,77459,77462,77467,77470,77570,77635,77709,77713,77716,77719,77723,77726,77740,77769,77772,77775,77778,77781,77784,77787,77790,77792,77795,77798,77801,77804,77808,77813,77817,77822,77897,77900,78083,78086,78089,78092,78095,78098,78100,78103,78106,78109,78112,78115,78118,78120,78124,78127,78132,78135,78138,78141,78144,78146,78151,78154,78157,78160,78163,78165,78170,78173,78176,78178,78180,78183,78187,78190,78193,78198,78201,78204,78207,78257,78262,78266,78271,78274,78343,78346,78355,78359,78364,78367,78370,78378,78381,78398,80200,80204,80208,80213,80216,80220,80226,80232,80384,80389,80394,80397,80400,80403,80406,80409,80412,80415,80418,80421,80424,80427,80430,80435,80439,80442,80453,80457,80462,80465,80468,80471,80474,80477,80479,80482,80485,80488,80491,80493,80510,80513,80517,80520,80525,80530,80533,80536,80540,80543,80546,80555,80558,80562,80565,80570,80575,80642,80646,80649,80652,80657,80662,80748,80753,80757,80760,80763,80778,80781,80786,80790,80795,80904,80907,80918,81068,81072,81077,81186,81190,81195,81200,81205,81208,81215,81235,81271,81435,81440,81443,81448,81455,81458,81461,81464,81523,81579,81635,81639,81644,81959,81962,81966,81969,81974,82083,82088,82092,82097,82101,82172,82176,82178,82181,82184,82222,82498,82502,82519,82585,82619,82623,82626,82631,82660,82667,82676,82681,82696,82701,82710,82713,82850,82854,82916,82920,82925,83170,83174,83179,83182,83185,83188,83191,83195,83200,84781,84785,84789,84795,84798,84803,84807,84810,84815,84818,84829,84833,84838,84842,84847,84852,84855,84860,84864,84868,84871,84876,84881,84884,84887,84890,85012,85017,85119,85122,85125,85129,85134,85306,85311,85315,85318,85323,85389,85394,85397,85528,85531,85536,85539,85542,85633,85638,85641,85644,85647,85650,85655,85660,85663,85668,85673,85678,85682,85685,85688,85693,85698,85703,85708,85762,85765,85768,85773,85776,85779,85784,85789,85794,85798,85803,85817,85822,85825,85830,85834,85839,85844,85849,85854,85859,85864,85869,85874,85877,85881,85886,85889,85892,85895,85900,85905,85908,85911,85915,85918,85921,85926,85931,85936,85941,85944,85949,85954,86015,86020,86023,86028,87269,87274,87278,87282,87287,87290,87295,87300,87303,87308,87310,87315,87319,87322,87325,87336,87340,87345,87350,87405,87410,87415,87420,87631,87636,87640,87645,87648,87650,87653,87656,88103,88108,88115,88121,88124,88127,88391,88396,88400,88665,88670,88674,88679,88684,88689,88694,89025,89028,89033,89038,89041,89045,89049,89054,89059,89064,89069,89074,89079,89083,89086,89091,89096,89099,89173,89178,89183,89188,89190,89193,89563,89568,89573,89578,89581,89584,89686,89691,89696,89799,89803,89808,89812,89816,89821,89826,89829,89834,89837,89840,90233,90238,90241,90244,90247,90250,90770,90774,90779,90784,90789,90792,90797,90800,90803,91185,91190,91192,91194,91197,91200,91712,91716,91777,91780,91783,91786,91790,91793,91798,91803,92728],[10,76661,76657],{"id":76662},"_4js进阶",[40,76664,76665],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[35,76667,76669],{"id":76668},"_41-作用域","4.1 作用域",[65,76671,76673],{"id":76672},"_411-局部作用域","4.1.1 局部作用域",[40,76675,76676],{},[1443,76677],{"alt":14,"src":76678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[40,76680,76681],{},[1443,76682],{"alt":14,"src":76683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1112,76685,76686,76689,76692],{},[51,76687,76688],{},"函数作用域在函数内部",[51,76690,76691],{},"块级作用域在{}",[51,76693,76694],{},"对象的那个{}不是作用域，不是块作用域",[65,76696,76698],{"id":76697},"_412-全局作用域","4.1.2 全局作用域",[40,76700,76701],{},[1443,76702],{"alt":14,"src":76703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[40,76705,76706],{},"window.a=10不要这样写",[65,76708,76710],{"id":76709},"_413-作用域链","4.1.3 作用域链",[40,76712,76713],{},"变量查找机制",[40,76715,76716],{},[1443,76717],{"alt":14,"src":76718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[35,76720,76722],{"id":76721},"_42-垃圾回收机制","4.2 垃圾回收机制",[65,76724,76726],{"id":76725},"_421-大体介绍","4.2.1 大体介绍",[40,76728,76729],{},"垃圾回收机制(Garbage Collection) 简称 GC",[40,76731,76732],{},[1443,76733],{"alt":14,"src":76734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[40,76736,76737],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[65,76739,76741],{"id":76740},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[40,76743,76744],{},"堆栈空间分配区别：",[48,76746,76747,76750],{},[51,76748,76749],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[51,76751,76752],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[40,76754,76755],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[21980,76757,76759],{"id":76758},"_4221-引用计数","4.2.2.1 引用计数",[40,76761,76762],{},[1443,76763],{"alt":14,"src":76764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[40,76766,76767],{},[1443,76768],{"alt":14,"src":76769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[40,76771,76772],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[21980,76774,76776],{"id":76775},"_4222-标记清除法","4.2.2.2 标记清除法",[40,76778,76779],{},[1443,76780],{"alt":14,"src":76781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[40,76783,76784],{},[1443,76785],{"alt":14,"src":76786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[40,76788,76789],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[35,76791,76793],{"id":76792},"_43-闭包","4.3 闭包",[40,76795,76796],{},[1443,76797],{"alt":14,"src":76798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[40,76800,76801],{},"闭包：内层函数+外层函数的变量",[40,76803,76804],{},[1443,76805],{"alt":14,"src":76806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[40,76808,76809],{},"closure就是闭包",[40,76811,76812],{},[1443,76813],{"alt":14,"src":76814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[40,76816,76817],{},"内层函数必须包含外层函数的变量才是闭包",[40,76819,76820],{},[1443,76821],{"alt":14,"src":76822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[40,76824,76825],{},[1443,76826],{"alt":14,"src":76827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[40,76829,76830],{},"闭包可能会引起内存泄漏",[40,76832,76833],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[35,76835,76837],{"id":76836},"_44-变量提升","4.4 变量提升",[40,76839,76840],{},[1443,76841],{"alt":14,"src":76842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[40,76844,76845],{},[1443,76846],{"alt":14,"src":76847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[40,76849,76850],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[35,76852,76854],{"id":76853},"_45-函数进阶","4.5 函数进阶",[65,76856,76858],{"id":76857},"_451-函数提升","4.5.1 函数提升",[40,76860,76861],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[40,76863,76864],{},"只提升函数声明，不提升函数调用",[51790,76866,76867],{},"\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",[65,76869,76871],{"id":76870},"_452-函数参数","4.5.2 函数参数",[21980,76873,76875],{"id":76874},"_4521-动态参数","4.5.2.1 动态参数",[40,76877,76878],{},[1443,76879],{"alt":14,"src":76880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[40,76882,76883],{},[1443,76884],{"alt":14,"src":76885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[40,76887,76888],{},"箭头函数里边没有arguments",[21980,76890,76892],{"id":76891},"_4522-剩余参数","4.5.2.2 剩余参数",[40,76894,76895],{},[1443,76896],{"alt":14,"src":76897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[40,76899,76900],{},[1443,76901],{"alt":14,"src":76902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[40,76904,76905],{},"剩余参数使用的时候不需要写...",[40,76907,76908],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[40,76910,76911],{},"  function getSum(a,b,...arr) {",[40,76913,76914],{},"  console.log(11)",[40,76916,76917],{},"  }",[40,76919,76920],{},"  getSum(1,2,3,4)",[40,76922,76923],{},"  将1传给a，2传给b，剩下的传给剩余参数",[40,76925,76926],{},"  getSum(1,2)",[40,76928,76929],{},"  将1传给a，2传给b，剩余参数为一个空数组",[40,76931,76932],{},[1443,76933],{"alt":14,"src":76934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[21980,76936,76938],{"id":76937},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[40,76940,76941],{},[1443,76942],{"alt":14,"src":76943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[40,76945,76946],{},[1443,76947],{"alt":14,"src":76948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[40,76950,76951],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[40,76953,76954],{},"展开运算符可以用于数组之间的合并：",[40,76956,76957],{},"const arr1 = [1, 2, 3]",[40,76959,76960],{},"const arr2 = [3, 4, 5]",[40,76962,76963],{},"const arr = [...arr1, ...arr2]",[40,76965,76966],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[40,76968,76969],{},"剩余参数：函数参数使用，得到真数组",[40,76971,76972],{},"展开运算符：数组中使用，数组展开",[65,76974,76976],{"id":76975},"_453-箭头函数","4.5.3 箭头函数",[21980,76978,76980],{"id":76979},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[40,76982,76983],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[40,76985,76986],{},"它不是万能的！！！",[40,76988,76989],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[40,76991,76992],{},[1443,76993],{"alt":14,"src":76994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[40,76996,134],{},[40,76998,76999],{},"① 只有一个形参的时候，可以省略小括号：",[40,77001,77002],{},"const fn=x=>{console.log(x)}",[40,77004,77005],{},"② 只有一行代码时可以省略大括号：",[40,77007,77008],{},"const fn=x=>console.log(11)",[40,77010,77011],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[40,77013,77014],{},"const fn=x=>x+x",[40,77016,77017],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[40,77019,77020],{},"⑤ 阻止表单默认提交：",[40,77022,77023],{},"const form = document.querySelector('form')",[40,77025,77026],{},"form.addEventListener('click', ev => ev.preventDefault())",[40,77028,77029],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[40,77031,77032],{},"const fn=uname=>({uname:uname})",[40,77034,77035],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[40,77037,77038],{},[1443,77039],{"alt":14,"src":77040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[40,77042,77043],{},[1443,77044],{"alt":14,"src":77045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[40,77047,77048],{},[1443,77049],{"alt":14,"src":77050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[40,77052,77053],{},"一定不要忘记用()，有()就理解为自带return",[21980,77055,77057],{"id":77056},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[40,77059,77060],{},"箭头函数是没有动态参数的arguments",[40,77062,77063],{},[1443,77064],{"alt":14,"src":77065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[21980,77067,77069],{"id":77068},"_4533-箭头函数this","4.5.3.3 箭头函数this",[40,77071,11314],{},[48,77073,77074,77077,77080],{},[51,77075,77076],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[51,77078,77079],{},"事件回调函数使用箭头函数时，this 为全局的 window",[51,77081,77082],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[40,77084,77085],{},[1443,77086],{"alt":14,"src":77087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[85,77089,77091],{"className":53044,"code":77090,"language":53046,"meta":14,"style":14},"  \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",[91,77092,77093,77101,77106,77111,77116,77121,77126,77130,77135,77139,77143,77148,77153,77158,77162,77166,77171,77176,77181],{"__ignoreMap":14},[94,77094,77095,77097,77099],{"class":96,"line":97},[94,77096,52121],{"class":104},[94,77098,51790],{"class":51277},[94,77100,51284],{"class":104},[94,77102,77103],{"class":96,"line":15},[94,77104,77105],{"class":104},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[94,77107,77108],{"class":96,"line":1160},[94,77109,77110],{"class":104},"    console.log(this) \u002F\u002F指向window\n",[94,77112,77113],{"class":96,"line":1175},[94,77114,77115],{"class":104},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[94,77117,77118],{"class":96,"line":1181},[94,77119,77120],{"class":104},"    function fn() {\n",[94,77122,77123],{"class":96,"line":1195},[94,77124,77125],{"class":104},"      console.log(this)  \u002F\u002F指向window\n",[94,77127,77128],{"class":96,"line":1201},[94,77129,2168],{"class":104},[94,77131,77132],{"class":96,"line":1292},[94,77133,77134],{"class":104},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[94,77136,77137],{"class":96,"line":1298},[94,77138,2381],{"emptyLinePlaceholder":20},[94,77140,77141],{"class":96,"line":1310},[94,77142,71500],{"class":104},[94,77144,77145],{"class":96,"line":1593},[94,77146,77147],{"class":104},"      name: 'andy',\n",[94,77149,77150],{"class":96,"line":1598},[94,77151,77152],{"class":104},"      sayHai: function () {\n",[94,77154,77155],{"class":96,"line":1604},[94,77156,77157],{"class":104},"        console.log(this)\n",[94,77159,77160],{"class":96,"line":1609},[94,77161,52375],{"class":104},[94,77163,77164],{"class":96,"line":1623},[94,77165,2168],{"class":104},[94,77167,77168],{"class":96,"line":1628},[94,77169,77170],{"class":104},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[94,77172,77173],{"class":96,"line":1634},[94,77174,77175],{"class":104},"    \u002F\u002F 2.箭头函数的this\n",[94,77177,77178],{"class":96,"line":1655},[94,77179,77180],{"class":104},"    const fn = () => console.log(this)\n",[94,77182,77183,77185,77187],{"class":96,"line":1660},[94,77184,52394],{"class":104},[94,77186,51790],{"class":51277},[94,77188,51284],{"class":104},[40,77190,77191],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[40,77193,77194],{},"const fn = () => console.log(this)",[40,77196,77197],{},"fn() \u002F\u002F指向window",[40,77199,77200],{},"\u002F\u002F 3.对象方法箭头函数 this",[40,77202,77203],{},"①",[40,77205,77206],{},"const obj = {",[40,77208,77209],{},"uname: 'pink老师',",[40,77211,77212],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[40,77214,1051],{},[40,77216,77217],{},"调用对象里边的函数",[40,77219,77220],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[40,77222,77223],{},"obj.sayHai()",[40,77225,77226],{},"②",[40,77228,77229],{},"const obj1 = {",[40,77231,77209],{},[40,77233,77234],{},"sayHai: function () {",[40,77236,77237],{},"let i = 10",[40,77239,77240],{},"const count = () => {",[40,77242,77243],{},"console.log(this)",[40,77245,77246],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[40,77248,77249],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[40,77251,1051],{},[40,77253,77254],{},"count()",[40,77256,1051],{},[40,77258,1051],{},[40,77260,77261],{},"obj1.sayHai()",[35,77263,77265],{"id":77264},"_46-解构赋值","4.6 解构赋值",[65,77267,77269],{"id":77268},"_461-数组解构","4.6.1 数组解构",[40,77271,77272],{},"以前要是使用数组中的值的话：",[40,77274,77275],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[40,77277,77278],{},"const arr=[100,60,80]",[40,77280,77281],{},"const max=arr[0]",[40,77283,77284],{},"const min=arr[1]",[40,77286,77287],{},"const avg=arr[2]",[40,77289,77290],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[40,77292,77293],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[40,77295,77296],{},"这个写法就类似于上边的那种用很多const的方法",[40,77298,77299],{},[1443,77300],{"alt":14,"src":77301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[85,77303,77305],{"className":50610,"code":77304,"language":50612,"meta":14,"style":14},"①变量之间交换值:\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",[91,77306,77307,77312,77317,77322,77327,77332,77336,77340,77345,77349,77354,77359,77363,77368,77373,77384,77394,77399,77404,77409,77413,77417],{"__ignoreMap":14},[94,77308,77309],{"class":96,"line":97},[94,77310,77311],{"class":104},"①变量之间交换值:\n",[94,77313,77314],{"class":96,"line":15},[94,77315,77316],{"class":104},"let a=1\n",[94,77318,77319],{"class":96,"line":1160},[94,77320,77321],{"class":104},"let b=2;\n",[94,77323,77324],{"class":96,"line":1175},[94,77325,77326],{"class":104},"必须加这行代码，不然就会报错\n",[94,77328,77329],{"class":96,"line":1181},[94,77330,77331],{"class":104},"[b,a]=[a,b]\n",[94,77333,77334],{"class":96,"line":1195},[94,77335,2381],{"emptyLinePlaceholder":20},[94,77337,77338],{"class":96,"line":1201},[94,77339,2381],{"emptyLinePlaceholder":20},[94,77341,77342],{"class":96,"line":1292},[94,77343,77344],{"class":104},"可以写成下面的方式：\n",[94,77346,77347],{"class":96,"line":1298},[94,77348,77316],{"class":104},[94,77350,77351],{"class":96,"line":1310},[94,77352,77353],{"class":104},"let b=2\n",[94,77355,77356],{"class":96,"line":1593},[94,77357,77358],{"class":104},";[b,a]=[a,b]\n",[94,77360,77361],{"class":96,"line":1598},[94,77362,2381],{"emptyLinePlaceholder":20},[94,77364,77365],{"class":96,"line":1604},[94,77366,77367],{"class":104},"②排序\n",[94,77369,77370],{"class":96,"line":1609},[94,77371,77372],{"class":104},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[94,77374,77375,77378,77381],{"class":96,"line":1623},[94,77376,77377],{"class":104},"for (let i = 0; i ",[94,77379,1015],{"class":77380},"s7hpK",[94,77382,77383],{"class":104}," arr1.length; i++) {\n",[94,77385,77386,77389,77391],{"class":96,"line":1628},[94,77387,77388],{"class":104},"   for (let j = 0; j ",[94,77390,1015],{"class":77380},[94,77392,77393],{"class":104}," arr1.length - 1; j++) {\n",[94,77395,77396],{"class":96,"line":1634},[94,77397,77398],{"class":104},"      if (arr1[j] > arr1[j + 1]) {\n",[94,77400,77401],{"class":96,"line":1655},[94,77402,77403],{"class":104},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[94,77405,77406],{"class":96,"line":1660},[94,77407,77408],{"class":104},"       }\n",[94,77410,77411],{"class":96,"line":1674},[94,77412,4290],{"class":104},[94,77414,77415],{"class":96,"line":1679},[94,77416,1546],{"class":104},[94,77418,77419],{"class":96,"line":1708},[94,77420,77421],{"class":104},"console.log(arr1)\n",[40,77423,77424],{},"数组解构的细节：",[40,77426,77427],{},"①变量多，单元值少",[40,77429,77430],{},[1443,77431],{"alt":14,"src":77432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[40,77434,77435],{},"防止出现undefined的方法：",[40,77437,77438],{},"const [a=0,b=0] =[1]",[40,77440,77441],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[40,77443,77444],{},"②变量少，单元值多",[40,77446,77447],{},[1443,77448],{"alt":14,"src":77449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[40,77451,77452],{},"此时可以使用剩余参数来接收多余的值",[40,77454,77455],{},"const [a,b,...c]=[1,2,3,4]",[40,77457,77458],{},"console.log(c) 输出[3,4]",[40,77460,77461],{},"③可以按需导入，忽略某些返回值",[40,77463,77464],{},[1443,77465],{"alt":14,"src":77466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[40,77468,77469],{},"④支持多维数组的结构",[85,77471,77475],{"className":77472,"code":77473,"language":77474,"meta":14,"style":14},"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",[91,77476,77477,77505,77521,77536,77551],{"__ignoreMap":14},[94,77478,77479,77481,77483,77485,77487,77489,77491,77493,77496,77498,77500,77502],{"class":96,"line":97},[94,77480,6774],{"class":100},[94,77482,51810],{"class":104},[94,77484,150],{"class":100},[94,77486,52203],{"class":104},[94,77488,322],{"class":153},[94,77490,12417],{"class":104},[94,77492,182],{"class":153},[94,77494,77495],{"class":104},", [",[94,77497,176],{"class":153},[94,77499,12417],{"class":104},[94,77501,398],{"class":153},[94,77503,77504],{"class":104},"]]\n",[94,77506,77507,77510,77512,77514,77516,77518],{"class":96,"line":15},[94,77508,77509],{"class":104},"console.",[94,77511,58224],{"class":1944},[94,77513,3832],{"class":104},[94,77515,296],{"class":153},[94,77517,4197],{"class":104},[94,77519,77520],{"class":163},"  \u002F\u002F1\n",[94,77522,77523,77525,77527,77529,77531,77533],{"class":96,"line":1160},[94,77524,77509],{"class":104},[94,77526,58224],{"class":1944},[94,77528,3832],{"class":104},[94,77530,322],{"class":153},[94,77532,4197],{"class":104},[94,77534,77535],{"class":163},"  \u002F\u002F2\n",[94,77537,77538,77540,77542,77544,77546,77548],{"class":96,"line":1175},[94,77539,77509],{"class":104},[94,77541,58224],{"class":1944},[94,77543,3832],{"class":104},[94,77545,182],{"class":153},[94,77547,4197],{"class":104},[94,77549,77550],{"class":163},"  \u002F\u002F[3,4]\n",[94,77552,77553,77555,77557,77559,77561,77563,77565,77567],{"class":96,"line":1181},[94,77554,77509],{"class":104},[94,77556,58224],{"class":1944},[94,77558,3832],{"class":104},[94,77560,182],{"class":153},[94,77562,4882],{"class":104},[94,77564,296],{"class":153},[94,77566,4197],{"class":104},[94,77568,77569],{"class":163},"  \u002F\u002F3\n",[85,77571,77573],{"className":77472,"code":77572,"language":77474,"meta":14,"style":14},"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",[91,77574,77575,77602,77613,77624],{"__ignoreMap":14},[94,77576,77577,77579,77582,77584,77586,77588,77590,77592,77594,77596,77598,77600],{"class":96,"line":97},[94,77578,6774],{"class":100},[94,77580,77581],{"class":104}," [a, b, c] ",[94,77583,150],{"class":100},[94,77585,52203],{"class":104},[94,77587,322],{"class":153},[94,77589,12417],{"class":104},[94,77591,182],{"class":153},[94,77593,77495],{"class":104},[94,77595,176],{"class":153},[94,77597,12417],{"class":104},[94,77599,398],{"class":153},[94,77601,77504],{"class":104},[94,77603,77604,77606,77608,77611],{"class":96,"line":15},[94,77605,77509],{"class":104},[94,77607,58224],{"class":1944},[94,77609,77610],{"class":104},"(a)",[94,77612,77520],{"class":163},[94,77614,77615,77617,77619,77622],{"class":96,"line":1160},[94,77616,77509],{"class":104},[94,77618,58224],{"class":1944},[94,77620,77621],{"class":104},"(b)",[94,77623,77535],{"class":163},[94,77625,77626,77628,77630,77633],{"class":96,"line":1175},[94,77627,77509],{"class":104},[94,77629,58224],{"class":1944},[94,77631,77632],{"class":104},"(c)",[94,77634,77550],{"class":163},[85,77636,77638],{"className":77472,"code":77637,"language":77474,"meta":14,"style":14},"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",[91,77639,77640,77667,77677,77687,77697],{"__ignoreMap":14},[94,77641,77642,77644,77647,77649,77651,77653,77655,77657,77659,77661,77663,77665],{"class":96,"line":97},[94,77643,6774],{"class":100},[94,77645,77646],{"class":104}," [a, b, [c, d]] ",[94,77648,150],{"class":100},[94,77650,52203],{"class":104},[94,77652,322],{"class":153},[94,77654,12417],{"class":104},[94,77656,182],{"class":153},[94,77658,77495],{"class":104},[94,77660,176],{"class":153},[94,77662,12417],{"class":104},[94,77664,398],{"class":153},[94,77666,77504],{"class":104},[94,77668,77669,77671,77673,77675],{"class":96,"line":15},[94,77670,77509],{"class":104},[94,77672,58224],{"class":1944},[94,77674,77610],{"class":104},[94,77676,77520],{"class":163},[94,77678,77679,77681,77683,77685],{"class":96,"line":1160},[94,77680,77509],{"class":104},[94,77682,58224],{"class":1944},[94,77684,77621],{"class":104},[94,77686,77535],{"class":163},[94,77688,77689,77691,77693,77695],{"class":96,"line":1175},[94,77690,77509],{"class":104},[94,77692,58224],{"class":1944},[94,77694,77632],{"class":104},[94,77696,77569],{"class":163},[94,77698,77699,77701,77703,77706],{"class":96,"line":1181},[94,77700,77509],{"class":104},[94,77702,58224],{"class":1944},[94,77704,77705],{"class":104},"(d)",[94,77707,77708],{"class":163},"  \u002F\u002F4\n",[65,77710,77712],{"id":77711},"_462-对象解构","4.6.2 对象解构",[40,77714,77715],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[40,77717,77718],{},"用的非常非常多！！！！！！",[21980,77720,77722],{"id":77721},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[40,77724,77725],{},"基本语法：",[48,77727,77728,77731,77734,77737],{},[51,77729,77730],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[51,77732,77733],{},"对象属性的值将被赋值给与属性名相同的变量",[51,77735,77736],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[51,77738,77739],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[85,77741,77743],{"className":50610,"code":77742,"language":50612,"meta":14,"style":14},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[91,77744,77745,77750,77755,77760,77764],{"__ignoreMap":14},[94,77746,77747],{"class":96,"line":97},[94,77748,77749],{"class":104},"const obj = {\n",[94,77751,77752],{"class":96,"line":15},[94,77753,77754],{"class":104},"   uname: 'pink老师',\n",[94,77756,77757],{"class":96,"line":1160},[94,77758,77759],{"class":104},"   age: 18,\n",[94,77761,77762],{"class":96,"line":1175},[94,77763,1546],{"class":104},[94,77765,77766],{"class":96,"line":1181},[94,77767,77768],{"class":104},"const { uname, age } = obj\n",[40,77770,77771],{},"上方代码这样写等价于：",[40,77773,77774],{},"const uname等价于obj.uname",[40,77776,77777],{},"变量名可以重新改名：",[40,77779,77780],{},"const uname='red老师'",[40,77782,77783],{},"const user={",[40,77785,77786],{},"  uname:'pink老师',",[40,77788,77789],{},"  age:18",[40,77791,1051],{},[40,77793,77794],{},"const {uname,age}=user",[40,77796,77797],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[40,77799,77800],{},"const {旧变量名：新变量名}=对象",[40,77802,77803],{},"const {uname:username,age}=user",[21980,77805,77807],{"id":77806},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[40,77809,77810],{},[1443,77811],{"alt":14,"src":77812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[21980,77814,77816],{"id":77815},"_4623-多级对象解构","4.6.2.3 多级对象解构",[40,77818,77819],{},[1443,77820],{"alt":14,"src":77821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[85,77823,77825],{"className":53044,"code":77824,"language":53046,"meta":14,"style":14},"  \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",[91,77826,77827,77835,77840,77845,77850,77855,77860,77865,77870,77875,77879,77884,77889],{"__ignoreMap":14},[94,77828,77829,77831,77833],{"class":96,"line":97},[94,77830,52121],{"class":104},[94,77832,51790],{"class":51277},[94,77834,51284],{"class":104},[94,77836,77837],{"class":96,"line":15},[94,77838,77839],{"class":104},"    const pig = {\n",[94,77841,77842],{"class":96,"line":1160},[94,77843,77844],{"class":104},"      name: '佩奇',\n",[94,77846,77847],{"class":96,"line":1175},[94,77848,77849],{"class":104},"      family: {\n",[94,77851,77852],{"class":96,"line":1181},[94,77853,77854],{"class":104},"        mother: '猪妈妈',\n",[94,77856,77857],{"class":96,"line":1195},[94,77858,77859],{"class":104},"        father: '猪爸爸',\n",[94,77861,77862],{"class":96,"line":1201},[94,77863,77864],{"class":104},"        sister: '乔治'\n",[94,77866,77867],{"class":96,"line":1292},[94,77868,77869],{"class":104},"      },\n",[94,77871,77872],{"class":96,"line":1298},[94,77873,77874],{"class":104},"      age: 6\n",[94,77876,77877],{"class":96,"line":1310},[94,77878,2168],{"class":104},[94,77880,77881],{"class":96,"line":1593},[94,77882,77883],{"class":104},"    \u002F\u002F 多级对象解构\n",[94,77885,77886],{"class":96,"line":1598},[94,77887,77888],{"class":104},"    const { name, family: { mother, father, sister }, age } = pig\n",[94,77890,77891,77893,77895],{"class":96,"line":1604},[94,77892,52394],{"class":104},[94,77894,51790],{"class":51277},[94,77896,51284],{"class":104},[40,77898,77899],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[85,77901,77904],{"className":77902,"code":77903,"language":76424,"meta":14,"style":14},"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",[91,77905,77906,77911,77922,77934,77946,77955,77959,77970,77982,77992,77997,78001,78011,78022,78031,78035,78039,78050,78061,78070,78074,78079],{"__ignoreMap":14},[94,77907,77908],{"class":96,"line":97},[94,77909,77910],{"class":163},"    \u002F\u002F 这是后台传递过来的数据\n",[94,77912,77913,77915,77918,77920],{"class":96,"line":15},[94,77914,11203],{"class":100},[94,77916,77917],{"class":104}," msg ",[94,77919,150],{"class":100},[94,77921,15554],{"class":104},[94,77923,77924,77927,77929,77932],{"class":96,"line":1160},[94,77925,77926],{"class":209},"      \"code\"",[94,77928,964],{"class":100},[94,77930,77931],{"class":153}," 200",[94,77933,31449],{"class":104},[94,77935,77936,77939,77941,77944],{"class":96,"line":1175},[94,77937,77938],{"class":209},"      \"msg\"",[94,77940,964],{"class":100},[94,77942,77943],{"class":209}," \"获取新闻列表成功\"",[94,77945,31449],{"class":104},[94,77947,77948,77951,77953],{"class":96,"line":1181},[94,77949,77950],{"class":209},"      \"data\"",[94,77952,964],{"class":100},[94,77954,55424],{"class":104},[94,77956,77957],{"class":96,"line":1195},[94,77958,2491],{"class":104},[94,77960,77961,77964,77966,77968],{"class":96,"line":1201},[94,77962,77963],{"class":209},"          \"id\"",[94,77965,964],{"class":100},[94,77967,25101],{"class":153},[94,77969,31449],{"class":104},[94,77971,77972,77975,77977,77980],{"class":96,"line":1292},[94,77973,77974],{"class":209},"          \"title\"",[94,77976,964],{"class":100},[94,77978,77979],{"class":209}," \"5G商用自己，三大运用商收入下降\"",[94,77981,31449],{"class":104},[94,77983,77984,77987,77989],{"class":96,"line":1298},[94,77985,77986],{"class":209},"          \"count\"",[94,77988,964],{"class":100},[94,77990,77991],{"class":153}," 58\n",[94,77993,77994],{"class":96,"line":1310},[94,77995,77996],{"class":104},"        },\n",[94,77998,77999],{"class":96,"line":1593},[94,78000,2491],{"class":104},[94,78002,78003,78005,78007,78009],{"class":96,"line":1598},[94,78004,77963],{"class":209},[94,78006,964],{"class":100},[94,78008,14737],{"class":153},[94,78010,31449],{"class":104},[94,78012,78013,78015,78017,78020],{"class":96,"line":1604},[94,78014,77974],{"class":209},[94,78016,964],{"class":100},[94,78018,78019],{"class":209}," \"国际媒体头条速览\"",[94,78021,31449],{"class":104},[94,78023,78024,78026,78028],{"class":96,"line":1609},[94,78025,77986],{"class":209},[94,78027,964],{"class":100},[94,78029,78030],{"class":153}," 56\n",[94,78032,78033],{"class":96,"line":1623},[94,78034,77996],{"class":104},[94,78036,78037],{"class":96,"line":1628},[94,78038,2491],{"class":104},[94,78040,78041,78043,78045,78048],{"class":96,"line":1634},[94,78042,77963],{"class":209},[94,78044,964],{"class":100},[94,78046,78047],{"class":153}," 3",[94,78049,31449],{"class":104},[94,78051,78052,78054,78056,78059],{"class":96,"line":1655},[94,78053,77974],{"class":209},[94,78055,964],{"class":100},[94,78057,78058],{"class":209}," \"乌克兰和俄罗斯持续冲突\"",[94,78060,31449],{"class":104},[94,78062,78063,78065,78067],{"class":96,"line":1660},[94,78064,77986],{"class":209},[94,78066,964],{"class":100},[94,78068,78069],{"class":153}," 1669\n",[94,78071,78072],{"class":96,"line":1674},[94,78073,77996],{"class":104},[94,78075,78076],{"class":96,"line":1679},[94,78077,78078],{"class":104},"      ]\n",[94,78080,78081],{"class":96,"line":1708},[94,78082,2168],{"class":104},[40,78084,78085],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[40,78087,78088],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[40,78090,78091],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[40,78093,78094],{},"function({data}) {",[40,78096,78097],{},"console.log(data)",[40,78099,1051],{},[40,78101,78102],{},"render(msg)",[40,78104,78105],{},"实参传递给形参的时候解构了",[40,78107,78108],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[40,78110,78111],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[40,78113,78114],{},"function render({data:mydata}) {",[40,78116,78117],{},"  console.log(data)",[40,78119,1051],{},[65,78121,78123],{"id":78122},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[40,78125,78126],{},"有两种情况：一个是数组结构，一个是立即执行函数",[48,78128,78129],{},[51,78130,78131],{},"如果对一个数组进行遍历，有两种方式：",[40,78133,78134],{},"①法1",[40,78136,78137],{},"const arr=[1,2,3]",[40,78139,78140],{},"arr.map(function(item,index) {",[40,78142,78143],{},"  console.log(item)",[40,78145,52441],{},[40,78147,78148],{},[1443,78149],{"alt":14,"src":78150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[40,78152,78153],{},"②法2",[40,78155,78156],{},"const str='pink'",[40,78158,78159],{},"[1,2,3].map(function(item,index) {",[40,78161,78162],{},"console.log(item)",[40,78164,52441],{},[40,78166,78167],{},[1443,78168],{"alt":14,"src":78169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[40,78171,78172],{},"此时会报错",[40,78174,78175],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[40,78177,78162],{},[40,78179,52441],{},[40,78181,78182],{},"内部会当成这样处理，所以我们用分号进行隔开",[35,78184,78186],{"id":78185},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[40,78188,78189],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[40,78191,78192],{},"可以理解为加强版的for循环",[40,78194,78195],{},[1443,78196],{"alt":14,"src":78197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[40,78199,78200],{},"里边不写return，不返回数组，只遍历不返回",[40,78202,78203],{},"map是返回数组",[40,78205,78206],{},"forEach主要用于遍历数组对象",[85,78208,78210],{"className":53044,"code":78209,"language":53046,"meta":14,"style":14},"  \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",[91,78211,78212,78220,78225,78230,78235,78240,78244,78249],{"__ignoreMap":14},[94,78213,78214,78216,78218],{"class":96,"line":97},[94,78215,52121],{"class":104},[94,78217,51790],{"class":51277},[94,78219,51284],{"class":104},[94,78221,78222],{"class":96,"line":15},[94,78223,78224],{"class":104},"    const arr = ['red', 'green', 'pink']\n",[94,78226,78227],{"class":96,"line":1160},[94,78228,78229],{"class":104},"    const result = arr.forEach(function (item, index) {\n",[94,78231,78232],{"class":96,"line":1175},[94,78233,78234],{"class":104},"      console.log(item)\n",[94,78236,78237],{"class":96,"line":1181},[94,78238,78239],{"class":104},"      console.log(index)\n",[94,78241,78242],{"class":96,"line":1195},[94,78243,33444],{"class":104},[94,78245,78246],{"class":96,"line":1201},[94,78247,78248],{"class":104},"    console.log(result)\n",[94,78250,78251,78253,78255],{"class":96,"line":1292},[94,78252,52394],{"class":104},[94,78254,51790],{"class":51277},[94,78256,51284],{"class":104},[40,78258,78259],{},[1443,78260],{"alt":14,"src":78261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[35,78263,78265],{"id":78264},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[40,78267,78268],{},[1443,78269],{"alt":14,"src":78270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[40,78272,78273],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[85,78275,78277],{"className":53044,"code":78276,"language":53046,"meta":14,"style":14},"\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",[91,78278,78279,78287,78295,78300,78305,78309,78313,78318,78322,78327,78335],{"__ignoreMap":14},[94,78280,78281,78283,78285],{"class":96,"line":97},[94,78282,1015],{"class":104},[94,78284,51777],{"class":51277},[94,78286,51284],{"class":104},[94,78288,78289,78291,78293],{"class":96,"line":15},[94,78290,52121],{"class":104},[94,78292,51790],{"class":51277},[94,78294,51284],{"class":104},[94,78296,78297],{"class":96,"line":1160},[94,78298,78299],{"class":104},"    const arr = [10, 20, 30]\n",[94,78301,78302],{"class":96,"line":1175},[94,78303,78304],{"class":104},"    const newArr = arr.filter(function (item, index) {\n",[94,78306,78307],{"class":96,"line":1181},[94,78308,78234],{"class":104},[94,78310,78311],{"class":96,"line":1195},[94,78312,78239],{"class":104},[94,78314,78315],{"class":96,"line":1201},[94,78316,78317],{"class":104},"      return item >= 20\n",[94,78319,78320],{"class":96,"line":1292},[94,78321,33444],{"class":104},[94,78323,78324],{"class":96,"line":1298},[94,78325,78326],{"class":104},"    console.log(newArr)\n",[94,78328,78329,78331,78333],{"class":96,"line":1310},[94,78330,52394],{"class":104},[94,78332,51790],{"class":51277},[94,78334,51284],{"class":104},[94,78336,78337,78339,78341],{"class":96,"line":1593},[94,78338,51762],{"class":104},[94,78340,51777],{"class":51277},[94,78342,51284],{"class":104},[40,78344,78345],{},"这个也可以写成箭头函数：",[85,78347,78349],{"className":50610,"code":78348,"language":50612,"meta":14,"style":14},"const newArr = arr.filter(item => item >= 20)\n",[91,78350,78351],{"__ignoreMap":14},[94,78352,78353],{"class":96,"line":97},[94,78354,78348],{"class":104},[35,78356,78358],{"id":78357},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[40,78360,78361],{},[1443,78362],{"alt":14,"src":78363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[40,78365,78366],{},"步骤：",[40,78368,78369],{},"①：渲染页面模块",[1112,78371,78372,78375],{},[51,78373,78374],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[51,78376,78377],{},"用forEach+字符串的形式",[40,78379,78380],{},"②：点击不同需求，显示不同页面内容",[1112,78382,78383,78386,78389,78392,78395],{},[51,78384,78385],{},"点击采取事件委托方式 .filter",[51,78387,78388],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[51,78390,78391],{},"筛选条件是根据点击的 data-index 来判断",[51,78393,78394],{},"可以使用对象解构，把事件对象解构",[51,78396,78397],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[85,78399,78401],{"className":50610,"code":78400,"language":50612,"meta":14,"style":14},"\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",[91,78402,78403,78413,78427,78431,78439,78453,78473,78485,78493,78499,78509,78519,78529,78533,78537,78543,78556,78568,78578,78590,78594,78598,78605,78618,78630,78647,78665,78678,78682,78686,78698,78708,78712,78716,78723,78764,78791,78801,78805,78809,78817,78829,78833,78837,78845,78857,78869,78880,78884,78888,78897,78909,78920,78924,78928,78937,78949,78961,78965,78969,78976,78986,78998,79010,79025,79029,79033,79041,79057,79067,79077,79087,79099,79103,79107,79117,79128,79138,79142,79150,79158,79162,79170,79185,79211,79236,79261,79280,79288,79302,79307,79312,79317,79322,79327,79335,79343,79348,79359,79364,79374,79384,79394,79404,79408,79412,79421,79430,79439,79448,79452,79456,79465,79474,79483,79492,79496,79500,79509,79518,79527,79536,79540,79544,79553,79562,79571,79580,79584,79588,79597,79606,79615,79624,79628,79632,79641,79650,79659,79668,79672,79676,79685,79694,79702,79711,79715,79719,79723,79728,79740,79745,79757,79761,79778,79806,79815,79820,79830,79840,79849,79854,79859,79863,79868,79885,79889,79894,79902,79907,79934,79939,79959,79964,79976,79981,79986,79991,80002,80016,80053,80071,80104,80121,80145,80149,80154,80160,80164,80168,80172,80180,80188,80192],{"__ignoreMap":14},[94,78404,78405,78407,78409,78411],{"class":96,"line":97},[94,78406,51274],{"class":104},[94,78408,51278],{"class":51277},[94,78410,51281],{"class":1944},[94,78412,51284],{"class":104},[94,78414,78415,78417,78419,78421,78423,78425],{"class":96,"line":15},[94,78416,1015],{"class":104},[94,78418,50612],{"class":51277},[94,78420,51293],{"class":1944},[94,78422,150],{"class":104},[94,78424,51298],{"class":209},[94,78426,51284],{"class":104},[94,78428,78429],{"class":96,"line":1160},[94,78430,2381],{"emptyLinePlaceholder":20},[94,78432,78433,78435,78437],{"class":96,"line":1175},[94,78434,1015],{"class":104},[94,78436,51311],{"class":51277},[94,78438,51284],{"class":104},[94,78440,78441,78443,78445,78447,78449,78451],{"class":96,"line":1181},[94,78442,52121],{"class":104},[94,78444,51321],{"class":51277},[94,78446,51324],{"class":1944},[94,78448,150],{"class":104},[94,78450,51329],{"class":209},[94,78452,51284],{"class":104},[94,78454,78455,78457,78459,78461,78463,78465,78467,78469,78471],{"class":96,"line":1195},[94,78456,52121],{"class":104},[94,78458,51321],{"class":51277},[94,78460,14902],{"class":1944},[94,78462,150],{"class":104},[94,78464,51368],{"class":209},[94,78466,51348],{"class":1944},[94,78468,150],{"class":104},[94,78470,51375],{"class":209},[94,78472,51284],{"class":104},[94,78474,78475,78477,78479,78481,78483],{"class":96,"line":1201},[94,78476,52121],{"class":104},[94,78478,51384],{"class":51277},[94,78480,51387],{"class":104},[94,78482,51384],{"class":51277},[94,78484,51284],{"class":104},[94,78486,78487,78489,78491],{"class":96,"line":1292},[94,78488,52121],{"class":104},[94,78490,5108],{"class":51277},[94,78492,51284],{"class":104},[94,78494,78495,78497],{"class":96,"line":1298},[94,78496,6385],{"class":51277},[94,78498,15554],{"class":104},[94,78500,78501,78503,78505,78507],{"class":96,"line":1310},[94,78502,54672],{"class":153},[94,78504,51414],{"class":104},[94,78506,296],{"class":153},[94,78508,1271],{"class":104},[94,78510,78511,78513,78515,78517],{"class":96,"line":1593},[94,78512,54683],{"class":153},[94,78514,51414],{"class":104},[94,78516,296],{"class":153},[94,78518,1271],{"class":104},[94,78520,78521,78523,78525,78527],{"class":96,"line":1598},[94,78522,72573],{"class":153},[94,78524,51414],{"class":104},[94,78526,60482],{"class":153},[94,78528,1271],{"class":104},[94,78530,78531],{"class":96,"line":1604},[94,78532,2168],{"class":104},[94,78534,78535],{"class":96,"line":1609},[94,78536,2381],{"emptyLinePlaceholder":20},[94,78538,78539,78541],{"class":96,"line":1623},[94,78540,62100],{"class":1944},[94,78542,15554],{"class":104},[94,78544,78545,78547,78549,78552,78554],{"class":96,"line":1628},[94,78546,54748],{"class":153},[94,78548,51414],{"class":104},[94,78550,78551],{"class":153},"990",[94,78553,51469],{"class":100},[94,78555,1271],{"class":104},[94,78557,78558,78560,78562,78564,78566],{"class":96,"line":1634},[94,78559,54683],{"class":153},[94,78561,51414],{"class":104},[94,78563,296],{"class":153},[94,78565,51533],{"class":153},[94,78567,1271],{"class":104},[94,78569,78570,78572,78574,78576],{"class":96,"line":1655},[94,78571,54986],{"class":153},[94,78573,51414],{"class":104},[94,78575,51454],{"class":153},[94,78577,1271],{"class":104},[94,78579,78580,78583,78585,78588],{"class":96,"line":1660},[94,78581,78582],{"class":153},"      flex-wrap",[94,78584,51414],{"class":104},[94,78586,78587],{"class":153},"wrap",[94,78589,1271],{"class":104},[94,78591,78592],{"class":96,"line":1674},[94,78593,2168],{"class":104},[94,78595,78596],{"class":96,"line":1679},[94,78597,2381],{"emptyLinePlaceholder":20},[94,78599,78600,78603],{"class":96,"line":1708},[94,78601,78602],{"class":1944},"    .item",[94,78604,15554],{"class":104},[94,78606,78607,78609,78611,78614,78616],{"class":96,"line":1713},[94,78608,54748],{"class":153},[94,78610,51414],{"class":104},[94,78612,78613],{"class":153},"240",[94,78615,51469],{"class":100},[94,78617,1271],{"class":104},[94,78619,78620,78622,78624,78626,78628],{"class":96,"line":1730},[94,78621,61977],{"class":153},[94,78623,51414],{"class":104},[94,78625,551],{"class":153},[94,78627,51469],{"class":100},[94,78629,1271],{"class":104},[94,78631,78632,78634,78636,78638,78640,78643,78645],{"class":96,"line":1735},[94,78633,54672],{"class":153},[94,78635,51414],{"class":104},[94,78637,805],{"class":153},[94,78639,51469],{"class":100},[94,78641,78642],{"class":153}," 30",[94,78644,51469],{"class":100},[94,78646,1271],{"class":104},[94,78648,78649,78651,78653,78655,78658,78661,78663],{"class":96,"line":1740},[94,78650,61837],{"class":153},[94,78652,51414],{"class":104},[94,78654,28104],{"class":153},[94,78656,78657],{"class":153}," ease",[94,78659,78660],{"class":153}," .5",[94,78662,800],{"class":100},[94,78664,1271],{"class":104},[94,78666,78667,78670,78672,78674,78676],{"class":96,"line":1745},[94,78668,78669],{"class":153},"      margin-bottom",[94,78671,51414],{"class":104},[94,78673,805],{"class":153},[94,78675,51469],{"class":100},[94,78677,1271],{"class":104},[94,78679,78680],{"class":96,"line":1759},[94,78681,2168],{"class":104},[94,78683,78684],{"class":96,"line":1764},[94,78685,2381],{"emptyLinePlaceholder":20},[94,78687,78688,78691,78693,78696],{"class":96,"line":2558},[94,78689,78690],{"class":1944},"    .item:nth-child",[94,78692,105],{"class":104},[94,78694,78695],{"class":153},"4n",[94,78697,12424],{"class":104},[94,78699,78700,78702,78704,78706],{"class":96,"line":2572},[94,78701,61977],{"class":153},[94,78703,51414],{"class":104},[94,78705,296],{"class":153},[94,78707,1271],{"class":104},[94,78709,78710],{"class":96,"line":2580},[94,78711,2168],{"class":104},[94,78713,78714],{"class":96,"line":2585},[94,78715,2381],{"emptyLinePlaceholder":20},[94,78717,78718,78721],{"class":96,"line":2591},[94,78719,78720],{"class":1944},"    .item:hover",[94,78722,15554],{"class":104},[94,78724,78725,78728,78730,78732,78734,78736,78738,78740,78742,78745,78747,78749,78751,78753,78755,78757,78759,78762],{"class":96,"line":2597},[94,78726,78727],{"class":153},"      box-shadow",[94,78729,51414],{"class":104},[94,78731,296],{"class":153},[94,78733,51469],{"class":100},[94,78735,4074],{"class":153},[94,78737,51469],{"class":100},[94,78739,2129],{"class":153},[94,78741,51469],{"class":100},[94,78743,78744],{"class":153}," rgba",[94,78746,105],{"class":104},[94,78748,296],{"class":153},[94,78750,12417],{"class":104},[94,78752,296],{"class":153},[94,78754,12417],{"class":104},[94,78756,296],{"class":153},[94,78758,12417],{"class":104},[94,78760,78761],{"class":153},".2",[94,78763,2700],{"class":104},[94,78765,78766,78769,78771,78774,78776,78778,78780,78783,78785,78787,78789],{"class":96,"line":2602},[94,78767,78768],{"class":153},"      transform",[94,78770,51414],{"class":104},[94,78772,78773],{"class":153},"translate3d",[94,78775,105],{"class":104},[94,78777,296],{"class":153},[94,78779,12417],{"class":104},[94,78781,78782],{"class":153},"-4",[94,78784,51469],{"class":100},[94,78786,12417],{"class":104},[94,78788,296],{"class":153},[94,78790,2700],{"class":104},[94,78792,78793,78795,78797,78799],{"class":96,"line":7930},[94,78794,62002],{"class":153},[94,78796,51414],{"class":104},[94,78798,62007],{"class":153},[94,78800,1271],{"class":104},[94,78802,78803],{"class":96,"line":7954},[94,78804,2168],{"class":104},[94,78806,78807],{"class":96,"line":7959},[94,78808,2381],{"emptyLinePlaceholder":20},[94,78810,78811,78813,78815],{"class":96,"line":7965},[94,78812,78602],{"class":1944},[94,78814,55592],{"class":51277},[94,78816,15554],{"class":104},[94,78818,78819,78821,78823,78825,78827],{"class":96,"line":7992},[94,78820,54748],{"class":153},[94,78822,51414],{"class":104},[94,78824,416],{"class":153},[94,78826,433],{"class":100},[94,78828,1271],{"class":104},[94,78830,78831],{"class":96,"line":7997},[94,78832,2168],{"class":104},[94,78834,78835],{"class":96,"line":8003},[94,78836,2381],{"emptyLinePlaceholder":20},[94,78838,78839,78841,78843],{"class":96,"line":8015},[94,78840,78602],{"class":1944},[94,78842,62281],{"class":1944},[94,78844,15554],{"class":104},[94,78846,78847,78849,78851,78853,78855],{"class":96,"line":8027},[94,78848,54899],{"class":153},[94,78850,51414],{"class":104},[94,78852,755],{"class":153},[94,78854,51469],{"class":100},[94,78856,1271],{"class":104},[94,78858,78859,78861,78863,78865,78867],{"class":96,"line":8039},[94,78860,78669],{"class":153},[94,78862,51414],{"class":104},[94,78864,551],{"class":153},[94,78866,51469],{"class":100},[94,78868,1271],{"class":104},[94,78870,78871,78873,78875,78878],{"class":96,"line":9698},[94,78872,57393],{"class":153},[94,78874,51414],{"class":104},[94,78876,78877],{"class":153},"#666",[94,78879,1271],{"class":104},[94,78881,78882],{"class":96,"line":9723},[94,78883,2168],{"class":104},[94,78885,78886],{"class":96,"line":9746},[94,78887,2381],{"emptyLinePlaceholder":20},[94,78889,78890,78892,78895],{"class":96,"line":9770},[94,78891,78602],{"class":1944},[94,78893,78894],{"class":1944}," .price",[94,78896,15554],{"class":104},[94,78898,78899,78901,78903,78905,78907],{"class":96,"line":9775},[94,78900,54899],{"class":153},[94,78902,51414],{"class":104},[94,78904,855],{"class":153},[94,78906,51469],{"class":100},[94,78908,1271],{"class":104},[94,78910,78911,78913,78915,78918],{"class":96,"line":9780},[94,78912,57393],{"class":153},[94,78914,51414],{"class":104},[94,78916,78917],{"class":153},"firebrick",[94,78919,1271],{"class":104},[94,78921,78922],{"class":96,"line":9785},[94,78923,2168],{"class":104},[94,78925,78926],{"class":96,"line":9794},[94,78927,2381],{"emptyLinePlaceholder":20},[94,78929,78930,78932,78935],{"class":96,"line":9799},[94,78931,78602],{"class":1944},[94,78933,78934],{"class":1944}," .price::before",[94,78936,15554],{"class":104},[94,78938,78939,78942,78944,78947],{"class":96,"line":9805},[94,78940,78941],{"class":153},"      content",[94,78943,51414],{"class":104},[94,78945,78946],{"class":209},"'￥'",[94,78948,1271],{"class":104},[94,78950,78951,78953,78955,78957,78959],{"class":96,"line":9826},[94,78952,54899],{"class":153},[94,78954,51414],{"class":104},[94,78956,654],{"class":153},[94,78958,51469],{"class":100},[94,78960,1271],{"class":104},[94,78962,78963],{"class":96,"line":9832},[94,78964,2168],{"class":104},[94,78966,78967],{"class":96,"line":9846},[94,78968,2381],{"emptyLinePlaceholder":20},[94,78970,78971,78974],{"class":96,"line":9852},[94,78972,78973],{"class":1944},"    .filter",[94,78975,15554],{"class":104},[94,78977,78978,78980,78982,78984],{"class":96,"line":9879},[94,78979,54986],{"class":153},[94,78981,51414],{"class":104},[94,78983,51454],{"class":153},[94,78985,1271],{"class":104},[94,78987,78988,78990,78992,78994,78996],{"class":96,"line":9888},[94,78989,54748],{"class":153},[94,78991,51414],{"class":104},[94,78993,78551],{"class":153},[94,78995,51469],{"class":100},[94,78997,1271],{"class":104},[94,78999,79000,79002,79004,79006,79008],{"class":96,"line":9894},[94,79001,54683],{"class":153},[94,79003,51414],{"class":104},[94,79005,296],{"class":153},[94,79007,51533],{"class":153},[94,79009,1271],{"class":104},[94,79011,79012,79014,79016,79018,79020,79022],{"class":96,"line":9902},[94,79013,54672],{"class":153},[94,79015,51414],{"class":104},[94,79017,761],{"class":153},[94,79019,51469],{"class":100},[94,79021,78642],{"class":153},[94,79023,79024],{"class":100},"px\n",[94,79026,79027],{"class":96,"line":9907},[94,79028,2168],{"class":104},[94,79030,79031],{"class":96,"line":16586},[94,79032,2381],{"emptyLinePlaceholder":20},[94,79034,79035,79037,79039],{"class":96,"line":16592},[94,79036,78973],{"class":1944},[94,79038,1379],{"class":51277},[94,79040,15554],{"class":104},[94,79042,79043,79045,79047,79049,79051,79053,79055],{"class":96,"line":16615},[94,79044,54672],{"class":153},[94,79046,51414],{"class":104},[94,79048,551],{"class":153},[94,79050,51469],{"class":100},[94,79052,8932],{"class":153},[94,79054,51469],{"class":100},[94,79056,1271],{"class":104},[94,79058,79059,79061,79063,79065],{"class":96,"line":16621},[94,79060,61698],{"class":153},[94,79062,51414],{"class":104},[94,79064,61795],{"class":153},[94,79066,1271],{"class":104},[94,79068,79069,79071,79073,79075],{"class":96,"line":16644},[94,79070,57393],{"class":153},[94,79072,51414],{"class":104},[94,79074,78877],{"class":153},[94,79076,1271],{"class":104},[94,79078,79079,79081,79083,79085],{"class":96,"line":16658},[94,79080,63947],{"class":153},[94,79082,51414],{"class":104},[94,79084,54714],{"class":153},[94,79086,1271],{"class":104},[94,79088,79089,79091,79093,79095,79097],{"class":96,"line":16678},[94,79090,61727],{"class":153},[94,79092,51414],{"class":104},[94,79094,805],{"class":153},[94,79096,51469],{"class":100},[94,79098,1271],{"class":104},[94,79100,79101],{"class":96,"line":16684},[94,79102,2168],{"class":104},[94,79104,79105],{"class":96,"line":16695},[94,79106,2381],{"emptyLinePlaceholder":20},[94,79108,79109,79111,79113,79115],{"class":96,"line":16718},[94,79110,78973],{"class":1944},[94,79112,1379],{"class":51277},[94,79114,61877],{"class":1944},[94,79116,15554],{"class":104},[94,79118,79119,79121,79123,79126],{"class":96,"line":16740},[94,79120,54861],{"class":153},[94,79122,51414],{"class":104},[94,79124,79125],{"class":153},"#05943c",[94,79127,1271],{"class":104},[94,79129,79130,79132,79134,79136],{"class":96,"line":16745},[94,79131,57393],{"class":153},[94,79133,51414],{"class":104},[94,79135,60819],{"class":153},[94,79137,1271],{"class":104},[94,79139,79140],{"class":96,"line":16751},[94,79141,2168],{"class":104},[94,79143,79144,79146,79148],{"class":96,"line":16765},[94,79145,52394],{"class":104},[94,79147,5108],{"class":51277},[94,79149,51284],{"class":104},[94,79151,79152,79154,79156],{"class":96,"line":16778},[94,79153,51762],{"class":104},[94,79155,51311],{"class":51277},[94,79157,51284],{"class":104},[94,79159,79160],{"class":96,"line":16783},[94,79161,2381],{"emptyLinePlaceholder":20},[94,79163,79164,79166,79168],{"class":96,"line":16797},[94,79165,1015],{"class":104},[94,79167,51777],{"class":51277},[94,79169,51284],{"class":104},[94,79171,79172,79174,79176,79178,79180,79183],{"class":96,"line":16802},[94,79173,52121],{"class":104},[94,79175,51588],{"class":51277},[94,79177,53463],{"class":1944},[94,79179,150],{"class":104},[94,79181,79182],{"class":209},"\"filter\"",[94,79184,51284],{"class":104},[94,79186,79187,79189,79191,79193,79195,79197,79200,79202,79204,79207,79209],{"class":96,"line":16808},[94,79188,51318],{"class":104},[94,79190,343],{"class":51277},[94,79192,61034],{"class":1944},[94,79194,150],{"class":104},[94,79196,61039],{"class":209},[94,79198,79199],{"class":1944}," data-index",[94,79201,150],{"class":104},[94,79203,3659],{"class":209},[94,79205,79206],{"class":104},">0-100元\u003C\u002F",[94,79208,343],{"class":51277},[94,79210,51284],{"class":104},[94,79212,79213,79215,79217,79219,79221,79223,79225,79227,79229,79232,79234],{"class":96,"line":16813},[94,79214,51318],{"class":104},[94,79216,343],{"class":51277},[94,79218,61034],{"class":1944},[94,79220,150],{"class":104},[94,79222,61039],{"class":209},[94,79224,79199],{"class":1944},[94,79226,150],{"class":104},[94,79228,3682],{"class":209},[94,79230,79231],{"class":104},">100-300元\u003C\u002F",[94,79233,343],{"class":51277},[94,79235,51284],{"class":104},[94,79237,79238,79240,79242,79244,79246,79248,79250,79252,79254,79257,79259],{"class":96,"line":16827},[94,79239,51318],{"class":104},[94,79241,343],{"class":51277},[94,79243,61034],{"class":1944},[94,79245,150],{"class":104},[94,79247,61039],{"class":209},[94,79249,79199],{"class":1944},[94,79251,150],{"class":104},[94,79253,3695],{"class":209},[94,79255,79256],{"class":104},">300元以上\u003C\u002F",[94,79258,343],{"class":51277},[94,79260,51284],{"class":104},[94,79262,79263,79265,79267,79269,79271,79273,79276,79278],{"class":96,"line":16832},[94,79264,51318],{"class":104},[94,79266,343],{"class":51277},[94,79268,61034],{"class":1944},[94,79270,150],{"class":104},[94,79272,61039],{"class":209},[94,79274,79275],{"class":104},">全部区间\u003C\u002F",[94,79277,343],{"class":51277},[94,79279,51284],{"class":104},[94,79281,79282,79284,79286],{"class":96,"line":16837},[94,79283,52394],{"class":104},[94,79285,51588],{"class":51277},[94,79287,51284],{"class":104},[94,79289,79290,79292,79294,79296,79298,79300],{"class":96,"line":16851},[94,79291,52121],{"class":104},[94,79293,51588],{"class":51277},[94,79295,53463],{"class":1944},[94,79297,150],{"class":104},[94,79299,62585],{"class":209},[94,79301,51284],{"class":104},[94,79303,79304],{"class":96,"line":16863},[94,79305,79306],{"class":163},"    \u003C!-- \u003Cdiv class=\"item\">\n",[94,79308,79309],{"class":96,"line":16868},[94,79310,79311],{"class":163},"      \u003Cimg src=\"\" alt=\"\">\n",[94,79313,79314],{"class":96,"line":16881},[94,79315,79316],{"class":163},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[94,79318,79319],{"class":96,"line":16886},[94,79320,79321],{"class":163},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[94,79323,79324],{"class":96,"line":16891},[94,79325,79326],{"class":163},"    \u003C\u002Fdiv> -->\n",[94,79328,79329,79331,79333],{"class":96,"line":16896},[94,79330,52394],{"class":104},[94,79332,51588],{"class":51277},[94,79334,51284],{"class":104},[94,79336,79337,79339,79341],{"class":96,"line":16909},[94,79338,52121],{"class":104},[94,79340,51790],{"class":51277},[94,79342,51284],{"class":104},[94,79344,79345],{"class":96,"line":16914},[94,79346,79347],{"class":163},"    \u002F\u002F 2. 初始化数据\n",[94,79349,79350,79352,79355,79357],{"class":96,"line":32616},[94,79351,11203],{"class":100},[94,79353,79354],{"class":153}," goodsList",[94,79356,13546],{"class":100},[94,79358,55424],{"class":104},[94,79360,79361],{"class":96,"line":32622},[94,79362,79363],{"class":104},"      {\n",[94,79365,79366,79369,79372],{"class":96,"line":32628},[94,79367,79368],{"class":104},"        id: ",[94,79370,79371],{"class":209},"'4001172'",[94,79373,31449],{"class":104},[94,79375,79376,79379,79382],{"class":96,"line":32634},[94,79377,79378],{"class":104},"        name: ",[94,79380,79381],{"class":209},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[94,79383,31449],{"class":104},[94,79385,79386,79389,79392],{"class":96,"line":32640},[94,79387,79388],{"class":104},"        price: ",[94,79390,79391],{"class":209},"'289.00'",[94,79393,31449],{"class":104},[94,79395,79396,79399,79402],{"class":96,"line":32651},[94,79397,79398],{"class":104},"        picture: ",[94,79400,79401],{"class":209},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[94,79403,31449],{"class":104},[94,79405,79406],{"class":96,"line":32657},[94,79407,77869],{"class":104},[94,79409,79410],{"class":96,"line":32677},[94,79411,79363],{"class":104},[94,79413,79414,79416,79419],{"class":96,"line":32683},[94,79415,79368],{"class":104},[94,79417,79418],{"class":209},"'4001594'",[94,79420,31449],{"class":104},[94,79422,79423,79425,79428],{"class":96,"line":32694},[94,79424,79378],{"class":104},[94,79426,79427],{"class":209},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[94,79429,31449],{"class":104},[94,79431,79432,79434,79437],{"class":96,"line":32700},[94,79433,79388],{"class":104},[94,79435,79436],{"class":209},"'288.00'",[94,79438,31449],{"class":104},[94,79440,79441,79443,79446],{"class":96,"line":32706},[94,79442,79398],{"class":104},[94,79444,79445],{"class":209},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[94,79447,31449],{"class":104},[94,79449,79450],{"class":96,"line":32712},[94,79451,77869],{"class":104},[94,79453,79454],{"class":96,"line":32718},[94,79455,79363],{"class":104},[94,79457,79458,79460,79463],{"class":96,"line":32724},[94,79459,79368],{"class":104},[94,79461,79462],{"class":209},"'4001009'",[94,79464,31449],{"class":104},[94,79466,79467,79469,79472],{"class":96,"line":32730},[94,79468,79378],{"class":104},[94,79470,79471],{"class":209},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[94,79473,31449],{"class":104},[94,79475,79476,79478,79481],{"class":96,"line":32736},[94,79477,79388],{"class":104},[94,79479,79480],{"class":209},"'109.00'",[94,79482,31449],{"class":104},[94,79484,79485,79487,79490],{"class":96,"line":32756},[94,79486,79398],{"class":104},[94,79488,79489],{"class":209},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[94,79491,31449],{"class":104},[94,79493,79494],{"class":96,"line":32762},[94,79495,77869],{"class":104},[94,79497,79498],{"class":96,"line":32778},[94,79499,79363],{"class":104},[94,79501,79502,79504,79507],{"class":96,"line":32784},[94,79503,79368],{"class":104},[94,79505,79506],{"class":209},"'4001874'",[94,79508,31449],{"class":104},[94,79510,79511,79513,79516],{"class":96,"line":32798},[94,79512,79378],{"class":104},[94,79514,79515],{"class":209},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[94,79517,31449],{"class":104},[94,79519,79520,79522,79525],{"class":96,"line":32804},[94,79521,79388],{"class":104},[94,79523,79524],{"class":209},"'488.00'",[94,79526,31449],{"class":104},[94,79528,79529,79531,79534],{"class":96,"line":32819},[94,79530,79398],{"class":104},[94,79532,79533],{"class":209},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[94,79535,31449],{"class":104},[94,79537,79538],{"class":96,"line":32825},[94,79539,77869],{"class":104},[94,79541,79542],{"class":96,"line":32834},[94,79543,79363],{"class":104},[94,79545,79546,79548,79551],{"class":96,"line":32840},[94,79547,79368],{"class":104},[94,79549,79550],{"class":209},"'4001649'",[94,79552,31449],{"class":104},[94,79554,79555,79557,79560],{"class":96,"line":32849},[94,79556,79378],{"class":104},[94,79558,79559],{"class":209},"'大师监制龙泉青瓷茶叶罐'",[94,79561,31449],{"class":104},[94,79563,79564,79566,79569],{"class":96,"line":32855},[94,79565,79388],{"class":104},[94,79567,79568],{"class":209},"'139.00'",[94,79570,31449],{"class":104},[94,79572,79573,79575,79578],{"class":96,"line":32861},[94,79574,79398],{"class":104},[94,79576,79577],{"class":209},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[94,79579,31449],{"class":104},[94,79581,79582],{"class":96,"line":32870},[94,79583,77869],{"class":104},[94,79585,79586],{"class":96,"line":32876},[94,79587,79363],{"class":104},[94,79589,79590,79592,79595],{"class":96,"line":32887},[94,79591,79368],{"class":104},[94,79593,79594],{"class":209},"'3997185'",[94,79596,31449],{"class":104},[94,79598,79599,79601,79604],{"class":96,"line":32893},[94,79600,79378],{"class":104},[94,79602,79603],{"class":209},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[94,79605,31449],{"class":104},[94,79607,79608,79610,79613],{"class":96,"line":32912},[94,79609,79388],{"class":104},[94,79611,79612],{"class":209},"'108.00'",[94,79614,31449],{"class":104},[94,79616,79617,79619,79622],{"class":96,"line":32918},[94,79618,79398],{"class":104},[94,79620,79621],{"class":209},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[94,79623,31449],{"class":104},[94,79625,79626],{"class":96,"line":32929},[94,79627,77869],{"class":104},[94,79629,79630],{"class":96,"line":32935},[94,79631,79363],{"class":104},[94,79633,79634,79636,79639],{"class":96,"line":32955},[94,79635,79368],{"class":104},[94,79637,79638],{"class":209},"'3997403'",[94,79640,31449],{"class":104},[94,79642,79643,79645,79648],{"class":96,"line":32971},[94,79644,79378],{"class":104},[94,79646,79647],{"class":209},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[94,79649,31449],{"class":104},[94,79651,79652,79654,79657],{"class":96,"line":32977},[94,79653,79388],{"class":104},[94,79655,79656],{"class":209},"'100.00'",[94,79658,31449],{"class":104},[94,79660,79661,79663,79666],{"class":96,"line":32991},[94,79662,79398],{"class":104},[94,79664,79665],{"class":209},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[94,79667,31449],{"class":104},[94,79669,79670],{"class":96,"line":32997},[94,79671,77869],{"class":104},[94,79673,79674],{"class":96,"line":33003},[94,79675,79363],{"class":104},[94,79677,79678,79680,79683],{"class":96,"line":33014},[94,79679,79368],{"class":104},[94,79681,79682],{"class":209},"'3998274'",[94,79684,31449],{"class":104},[94,79686,79687,79689,79692],{"class":96,"line":33020},[94,79688,79378],{"class":104},[94,79690,79691],{"class":209},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[94,79693,31449],{"class":104},[94,79695,79696,79698,79700],{"class":96,"line":33026},[94,79697,79388],{"class":104},[94,79699,79568],{"class":209},[94,79701,31449],{"class":104},[94,79703,79704,79706,79709],{"class":96,"line":33036},[94,79705,79398],{"class":104},[94,79707,79708],{"class":209},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[94,79710,31449],{"class":104},[94,79712,79713],{"class":96,"line":33042},[94,79714,77869],{"class":104},[94,79716,79717],{"class":96,"line":33053},[94,79718,53086],{"class":104},[94,79720,79721],{"class":96,"line":33059},[94,79722,2381],{"emptyLinePlaceholder":20},[94,79724,79725],{"class":96,"line":33069},[94,79726,79727],{"class":163},"    \u002F\u002F 1.渲染函数\n",[94,79729,79730,79732,79734,79736,79738],{"class":96,"line":33074},[94,79731,70061],{"class":100},[94,79733,70064],{"class":1944},[94,79735,105],{"class":104},[94,79737,3861],{"class":5198},[94,79739,12424],{"class":104},[94,79741,79742],{"class":96,"line":33080},[94,79743,79744],{"class":163},"      \u002F\u002F 声明空字符串\n",[94,79746,79747,79750,79753,79755],{"class":96,"line":33129},[94,79748,79749],{"class":100},"      let",[94,79751,79752],{"class":104}," str ",[94,79754,150],{"class":100},[94,79756,70081],{"class":209},[94,79758,79759],{"class":96,"line":33176},[94,79760,70086],{"class":163},[94,79762,79763,79765,79768,79770,79773,79776],{"class":96,"line":33181},[94,79764,57984],{"class":104},[94,79766,79767],{"class":1944},"forEach",[94,79769,105],{"class":104},[94,79771,79772],{"class":5198},"item",[94,79774,79775],{"class":100}," =>",[94,79777,15554],{"class":104},[94,79779,79780,79782,79785,79788,79790,79793,79795,79798,79801,79803],{"class":96,"line":33187},[94,79781,61247],{"class":100},[94,79783,79784],{"class":104}," { ",[94,79786,79787],{"class":153},"name",[94,79789,12417],{"class":104},[94,79791,79792],{"class":153},"price",[94,79794,12417],{"class":104},[94,79796,79797],{"class":153},"picture",[94,79799,79800],{"class":104}," } ",[94,79802,150],{"class":100},[94,79804,79805],{"class":104}," item\n",[94,79807,79808,79811,79813],{"class":96,"line":33206},[94,79809,79810],{"class":104},"        str ",[94,79812,9459],{"class":100},[94,79814,70145],{"class":209},[94,79816,79817],{"class":96,"line":33212},[94,79818,79819],{"class":209},"          \u003Cdiv class=\"item\">\n",[94,79821,79822,79825,79827],{"class":96,"line":33232},[94,79823,79824],{"class":209},"            \u003Cimg src=\"${",[94,79826,79797],{"class":104},[94,79828,79829],{"class":209},"}\" alt=\"\">\n",[94,79831,79832,79835,79837],{"class":96,"line":33238},[94,79833,79834],{"class":209},"            \u003Cp class=\"name\">${",[94,79836,79787],{"class":104},[94,79838,79839],{"class":209},"}\u003C\u002Fp>\n",[94,79841,79842,79845,79847],{"class":96,"line":33244},[94,79843,79844],{"class":209},"            \u003Cp class=\"price\">${",[94,79846,79792],{"class":104},[94,79848,79839],{"class":209},[94,79850,79851],{"class":96,"line":33254},[94,79852,79853],{"class":209},"          \u003C\u002Fdiv>\n",[94,79855,79856],{"class":96,"line":33259},[94,79857,79858],{"class":209},"        `\n",[94,79860,79861],{"class":96,"line":33265},[94,79862,64792],{"class":104},[94,79864,79865],{"class":96,"line":33281},[94,79866,79867],{"class":163},"      \u002F\u002F 追加给List\n",[94,79869,79870,79872,79874,79876,79879,79881,79883],{"class":96,"line":33326},[94,79871,55748],{"class":104},[94,79873,54376],{"class":1944},[94,79875,105],{"class":104},[94,79877,79878],{"class":209},"'.list'",[94,79880,74226],{"class":104},[94,79882,150],{"class":100},[94,79884,73962],{"class":104},[94,79886,79887],{"class":96,"line":33332},[94,79888,2168],{"class":104},[94,79890,79891],{"class":96,"line":33338},[94,79892,79893],{"class":163},"    \u002F\u002F 页面一打开就需要渲染\n",[94,79895,79896,79899],{"class":96,"line":33344},[94,79897,79898],{"class":1944},"    render",[94,79900,79901],{"class":104},"(goodsList)\n",[94,79903,79904],{"class":96,"line":33355},[94,79905,79906],{"class":163},"    \u002F\u002F 2.过滤筛选\n",[94,79908,79909,79911,79913,79915,79918,79920,79922,79924,79926,79928,79930,79932],{"class":96,"line":33361},[94,79910,52384],{"class":104},[94,79912,54376],{"class":1944},[94,79914,105],{"class":104},[94,79916,79917],{"class":209},"'.filter'",[94,79919,30809],{"class":104},[94,79921,57790],{"class":1944},[94,79923,105],{"class":104},[94,79925,57795],{"class":209},[94,79927,12417],{"class":104},[94,79929,179],{"class":5198},[94,79931,79775],{"class":100},[94,79933,15554],{"class":104},[94,79935,79936],{"class":96,"line":33367},[94,79937,79938],{"class":163},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[94,79940,79941,79943,79945,79948,79950,79952,79954,79956],{"class":96,"line":33373},[94,79942,58205],{"class":100},[94,79944,79784],{"class":104},[94,79946,79947],{"class":153},"tagName",[94,79949,12417],{"class":104},[94,79951,31520],{"class":153},[94,79953,79800],{"class":104},[94,79955,150],{"class":100},[94,79957,79958],{"class":104}," e.target\n",[94,79960,79961],{"class":96,"line":33391},[94,79962,79963],{"class":163},"      \u002F\u002F 判断\n",[94,79965,79966,79968,79970,79972,79974],{"class":96,"line":33405},[94,79967,54457],{"class":100},[94,79969,67011],{"class":104},[94,79971,54463],{"class":100},[94,79973,68233],{"class":209},[94,79975,12424],{"class":104},[94,79977,79978],{"class":96,"line":33414},[94,79979,79980],{"class":163},"        \u002F\u002F console.log(11)\n",[94,79982,79983],{"class":96,"line":33423},[94,79984,79985],{"class":163},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[94,79987,79988],{"class":96,"line":33432},[94,79989,79990],{"class":163},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[94,79992,79993,79995,79997,79999],{"class":96,"line":33441},[94,79994,51807],{"class":100},[94,79996,51810],{"class":104},[94,79998,150],{"class":100},[94,80000,80001],{"class":104}," goodsList\n",[94,80003,80004,80006,80009,80011,80014],{"class":96,"line":33447},[94,80005,2478],{"class":100},[94,80007,80008],{"class":104}," (dataset.index ",[94,80010,54463],{"class":100},[94,80012,80013],{"class":209}," '1'",[94,80015,12424],{"class":104},[94,80017,80018,80021,80023,80026,80029,80031,80033,80035,80038,80040,80042,80045,80047,80049,80051],{"class":96,"line":33453},[94,80019,80020],{"class":104},"          arr ",[94,80022,150],{"class":100},[94,80024,80025],{"class":104}," goodsList.",[94,80027,80028],{"class":1944},"filter",[94,80030,105],{"class":104},[94,80032,79772],{"class":5198},[94,80034,79775],{"class":100},[94,80036,80037],{"class":104}," item.price ",[94,80039,1691],{"class":100},[94,80041,4074],{"class":153},[94,80043,80044],{"class":100}," &&",[94,80046,80037],{"class":104},[94,80048,1569],{"class":100},[94,80050,5736],{"class":153},[94,80052,111],{"class":104},[94,80054,80055,80058,80060,80062,80064,80066,80069],{"class":96,"line":33461},[94,80056,80057],{"class":104},"        } ",[94,80059,1682],{"class":100},[94,80061,1685],{"class":100},[94,80063,80008],{"class":104},[94,80065,54463],{"class":100},[94,80067,80068],{"class":209}," '2'",[94,80070,12424],{"class":104},[94,80072,80073,80075,80077,80079,80081,80083,80085,80087,80089,80091,80093,80095,80097,80099,80102],{"class":96,"line":33466},[94,80074,80020],{"class":104},[94,80076,150],{"class":100},[94,80078,80025],{"class":104},[94,80080,80028],{"class":1944},[94,80082,105],{"class":104},[94,80084,79772],{"class":5198},[94,80086,79775],{"class":100},[94,80088,80037],{"class":104},[94,80090,1691],{"class":100},[94,80092,5736],{"class":153},[94,80094,80044],{"class":100},[94,80096,80037],{"class":104},[94,80098,1569],{"class":100},[94,80100,80101],{"class":153}," 300",[94,80103,111],{"class":104},[94,80105,80106,80108,80110,80112,80114,80116,80119],{"class":96,"line":33472},[94,80107,80057],{"class":104},[94,80109,1682],{"class":100},[94,80111,1685],{"class":100},[94,80113,80008],{"class":104},[94,80115,54463],{"class":100},[94,80117,80118],{"class":209}," '3'",[94,80120,12424],{"class":104},[94,80122,80123,80125,80127,80129,80131,80133,80135,80137,80139,80141,80143],{"class":96,"line":33483},[94,80124,80020],{"class":104},[94,80126,150],{"class":100},[94,80128,80025],{"class":104},[94,80130,80028],{"class":1944},[94,80132,105],{"class":104},[94,80134,79772],{"class":5198},[94,80136,79775],{"class":100},[94,80138,80037],{"class":104},[94,80140,1691],{"class":100},[94,80142,80101],{"class":153},[94,80144,111],{"class":104},[94,80146,80147],{"class":96,"line":33489},[94,80148,2510],{"class":104},[94,80150,80151],{"class":96,"line":33509},[94,80152,80153],{"class":163},"        \u002F\u002F 渲染函数\n",[94,80155,80156,80158],{"class":96,"line":33515},[94,80157,70385],{"class":1944},[94,80159,52389],{"class":104},[94,80161,80162],{"class":96,"line":33521},[94,80163,52375],{"class":104},[94,80165,80166],{"class":96,"line":33527},[94,80167,2381],{"emptyLinePlaceholder":20},[94,80169,80170],{"class":96,"line":33544},[94,80171,33444],{"class":104},[94,80173,80174,80176,80178],{"class":96,"line":33550},[94,80175,52394],{"class":104},[94,80177,51790],{"class":51277},[94,80179,51284],{"class":104},[94,80181,80182,80184,80186],{"class":96,"line":33556},[94,80183,51762],{"class":104},[94,80185,51777],{"class":51277},[94,80187,51284],{"class":104},[94,80189,80190],{"class":96,"line":33562},[94,80191,2381],{"emptyLinePlaceholder":20},[94,80193,80194,80196,80198],{"class":96,"line":33568},[94,80195,51762],{"class":104},[94,80197,50612],{"class":51277},[94,80199,51284],{"class":104},[35,80201,80203],{"id":80202},"_410-深入了解对象","4.10 深入了解对象",[65,80205,80207],{"id":80206},"_4101-创建对象","4.10.1 创建对象",[40,80209,80210],{},[1443,80211],{"alt":14,"src":80212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[40,80214,80215],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[65,80217,80219],{"id":80218},"_4102-构造函数","4.10.2 构造函数",[40,80221,80222,80225],{},[254,80223,80224],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[40,80227,80228,80231],{},[254,80229,80230],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[85,80233,80235],{"className":50610,"code":80234,"language":50612,"meta":14,"style":14},"\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",[91,80236,80237,80245,80250,80271,80284,80296,80308,80312,80317,80344,80349,80376],{"__ignoreMap":14},[94,80238,80239,80241,80243],{"class":96,"line":97},[94,80240,1015],{"class":104},[94,80242,51790],{"class":51277},[94,80244,51284],{"class":104},[94,80246,80247],{"class":96,"line":15},[94,80248,80249],{"class":163},"\u002F\u002F例：\n",[94,80251,80252,80254,80257,80259,80261,80263,80265,80267,80269],{"class":96,"line":1160},[94,80253,54426],{"class":100},[94,80255,80256],{"class":1944}," Pig",[94,80258,105],{"class":104},[94,80260,79787],{"class":5198},[94,80262,483],{"class":104},[94,80264,70198],{"class":5198},[94,80266,483],{"class":104},[94,80268,70215],{"class":5198},[94,80270,12424],{"class":104},[94,80272,80273,80276,80279,80281],{"class":96,"line":1175},[94,80274,80275],{"class":153},"    this",[94,80277,80278],{"class":104},".name",[94,80280,150],{"class":100},[94,80282,80283],{"class":104},"name\n",[94,80285,80286,80288,80291,80293],{"class":96,"line":1181},[94,80287,80275],{"class":153},[94,80289,80290],{"class":104},".age",[94,80292,150],{"class":100},[94,80294,80295],{"class":104},"age\n",[94,80297,80298,80300,80303,80305],{"class":96,"line":1195},[94,80299,80275],{"class":153},[94,80301,80302],{"class":104},".gender",[94,80304,150],{"class":100},[94,80306,80307],{"class":104},"gender    \n",[94,80309,80310],{"class":96,"line":1201},[94,80311,1546],{"class":104},[94,80313,80314],{"class":96,"line":1292},[94,80315,80316],{"class":163},"\u002F\u002F创建佩奇对象\n",[94,80318,80319,80321,80324,80326,80328,80330,80333,80335,80337,80339,80342],{"class":96,"line":1298},[94,80320,6774],{"class":100},[94,80322,80323],{"class":153}," Peppa",[94,80325,11699],{"class":100},[94,80327,80256],{"class":1944},[94,80329,105],{"class":104},[94,80331,80332],{"class":209},"'佩奇'",[94,80334,483],{"class":104},[94,80336,449],{"class":153},[94,80338,483],{"class":104},[94,80340,80341],{"class":209},"'女'",[94,80343,111],{"class":104},[94,80345,80346],{"class":96,"line":1310},[94,80347,80348],{"class":163},"\u002F\u002F创建乔治对象\n",[94,80350,80351,80353,80356,80358,80360,80362,80365,80367,80369,80371,80374],{"class":96,"line":1593},[94,80352,6774],{"class":100},[94,80354,80355],{"class":153}," George",[94,80357,11699],{"class":100},[94,80359,80256],{"class":1944},[94,80361,105],{"class":104},[94,80363,80364],{"class":209},"'乔治'",[94,80366,483],{"class":104},[94,80368,176],{"class":153},[94,80370,483],{"class":104},[94,80372,80373],{"class":209},"'男'",[94,80375,111],{"class":104},[94,80377,80378,80380,80382],{"class":96,"line":1598},[94,80379,51762],{"class":104},[94,80381,51790],{"class":51277},[94,80383,51284],{"class":104},[40,80385,80386],{},[1443,80387],{"alt":14,"src":80388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[40,80390,80391],{},[1443,80392],{"alt":14,"src":80393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[40,80395,80396],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[40,80398,80399],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[40,80401,80402],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[40,80404,80405],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[40,80407,80408],{},"这里用等号是因为：对象.属性=值",[40,80410,80411],{},"①利用对象字面量创建对象",[40,80413,80414],{},"const o={",[40,80416,80417],{},"name:'pink'",[40,80419,80420],{},"} ②利用new Object创建对象",[40,80422,80423],{},"const o=new Object({name:'pink'})",[40,80425,80426],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[40,80428,80429],{},"构造函数创建对象的执行过程：",[40,80431,80432],{},[1443,80433],{"alt":14,"src":80434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[65,80436,80438],{"id":80437},"_4103-实例成员","4.10.3 实例成员",[40,80440,80441],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[48,80443,80444,80447,80450],{},[51,80445,80446],{},"实例对象的属性和方法即为实例成员",[51,80448,80449],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[51,80451,80452],{},"构造函数创建的实例对象彼此独立互不影响",[65,80454,80456],{"id":80455},"_4104-静态成员","4.10.4 静态成员",[40,80458,80459],{},[1443,80460],{"alt":14,"src":80461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[40,80463,80464],{},"静态成员有Date.now() Math.PI Math.random()",[40,80466,80467],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[40,80469,80470],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[40,80472,80473],{},"function Pig(name) n {",[40,80475,80476],{},"this.name=name",[40,80478,1051],{},[40,80480,80481],{},"Pig.eyes=2",[40,80483,80484],{},"Pig.sayHai=function () { console.log(this) }",[40,80486,80487],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[40,80489,80490],{},"console.log(Pig.eyes) \u002F\u002F2",[40,80492,11314],{},[48,80494,80495,80498,80501,80504,80507],{},[51,80496,80497],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[51,80499,80500],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[51,80502,80503],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[51,80505,80506],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[51,80508,80509],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[40,80511,80512],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[65,80514,80516],{"id":80515},"_4105-内置构造函数","4.10.5 内置构造函数",[40,80518,80519],{},"内置构造函数包含：",[40,80521,80522],{},[1443,80523],{"alt":14,"src":80524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[40,80526,80527],{},[1443,80528],{"alt":14,"src":80529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[40,80531,80532],{},"这些基本数据类型，js对他们进行了包装",[51790,80534,80535],{},"\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",[21980,80537,80539],{"id":80538},"_41051-object","4.10.5.1 Object",[40,80541,80542],{},"Object 是内置的构造函数，用于创建普通对象",[40,80544,80545],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[85,80547,80549],{"className":50610,"code":80548,"language":50612,"meta":14,"style":14},"const user=new Object({name:'小明',age:15})\n",[91,80550,80551],{"__ignoreMap":14},[94,80552,80553],{"class":96,"line":97},[94,80554,80548],{"class":104},[40,80556,80557],{},"三个常用的静态方法：",[22892,80559,80561],{"id":80560},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[40,80563,80564],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[40,80566,80567],{},[1443,80568],{"alt":14,"src":80569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[40,80571,80572],{},[1443,80573],{"alt":14,"src":80574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[85,80576,80578],{"className":53044,"code":80577,"language":53046,"meta":14,"style":14},"\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",[91,80579,80580,80588,80596,80601,80606,80611,80616,80621,80626,80634],{"__ignoreMap":14},[94,80581,80582,80584,80586],{"class":96,"line":97},[94,80583,1015],{"class":104},[94,80585,51777],{"class":51277},[94,80587,51284],{"class":104},[94,80589,80590,80592,80594],{"class":96,"line":15},[94,80591,52121],{"class":104},[94,80593,51790],{"class":51277},[94,80595,51284],{"class":104},[94,80597,80598],{"class":96,"line":1160},[94,80599,80600],{"class":104},"    const o = { name: 'pink', age: 6 }\n",[94,80602,80603],{"class":96,"line":1175},[94,80604,80605],{"class":104},"    \u002F\u002F 获得所有属性名\n",[94,80607,80608],{"class":96,"line":1181},[94,80609,80610],{"class":104},"    const arr = Object.keys(o)\n",[94,80612,80613],{"class":96,"line":1195},[94,80614,80615],{"class":104},"    console.log(arr)\n",[94,80617,80618],{"class":96,"line":1201},[94,80619,80620],{"class":104},"    \u002F\u002F 获得所有属性值\n",[94,80622,80623],{"class":96,"line":1292},[94,80624,80625],{"class":104},"    console.log(Object.values(o))\n",[94,80627,80628,80630,80632],{"class":96,"line":1298},[94,80629,52394],{"class":104},[94,80631,51790],{"class":51277},[94,80633,51284],{"class":104},[94,80635,80636,80638,80640],{"class":96,"line":1310},[94,80637,51762],{"class":104},[94,80639,51777],{"class":51277},[94,80641,51284],{"class":104},[22892,80643,80645],{"id":80644},"_410512-object-assign","4.10.5.1.2 Object. assign",[40,80647,80648],{},"Object.assign(oo,o)",[40,80650,80651],{},"后的东西添加给前 是追加",[40,80653,80654],{},[1443,80655],{"alt":14,"src":80656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[40,80658,80659],{},[1443,80660],{"alt":14,"src":80661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[85,80663,80665],{"className":53044,"code":80664,"language":53046,"meta":14,"style":14},"\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",[91,80666,80667,80675,80683,80687,80691,80695,80699,80703,80707,80712,80717,80722,80727,80732,80740],{"__ignoreMap":14},[94,80668,80669,80671,80673],{"class":96,"line":97},[94,80670,1015],{"class":104},[94,80672,51777],{"class":51277},[94,80674,51284],{"class":104},[94,80676,80677,80679,80681],{"class":96,"line":15},[94,80678,52121],{"class":104},[94,80680,51790],{"class":51277},[94,80682,51284],{"class":104},[94,80684,80685],{"class":96,"line":1160},[94,80686,80600],{"class":104},[94,80688,80689],{"class":96,"line":1175},[94,80690,80605],{"class":104},[94,80692,80693],{"class":96,"line":1181},[94,80694,80610],{"class":104},[94,80696,80697],{"class":96,"line":1195},[94,80698,80615],{"class":104},[94,80700,80701],{"class":96,"line":1201},[94,80702,80620],{"class":104},[94,80704,80705],{"class":96,"line":1292},[94,80706,80625],{"class":104},[94,80708,80709],{"class":96,"line":1298},[94,80710,80711],{"class":104},"    const oo = {}\n",[94,80713,80714],{"class":96,"line":1310},[94,80715,80716],{"class":104},"    Object.assign(oo, o)\n",[94,80718,80719],{"class":96,"line":1593},[94,80720,80721],{"class":104},"    console.log(oo)\n",[94,80723,80724],{"class":96,"line":1598},[94,80725,80726],{"class":104},"    Object.assign(o, { gender: '女' })\n",[94,80728,80729],{"class":96,"line":1604},[94,80730,80731],{"class":104},"    console.log(o)\n",[94,80733,80734,80736,80738],{"class":96,"line":1609},[94,80735,52394],{"class":104},[94,80737,51790],{"class":51277},[94,80739,51284],{"class":104},[94,80741,80742,80744,80746],{"class":96,"line":1623},[94,80743,51762],{"class":104},[94,80745,51777],{"class":51277},[94,80747,51284],{"class":104},[40,80749,80750],{},[1443,80751],{"alt":14,"src":80752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[21980,80754,80756],{"id":80755},"_41052-array","4.10.5.2 Array",[40,80758,80759],{},"Array 是内置的构造函数，用于创建数组",[40,80761,80762],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[85,80764,80766],{"className":50610,"code":80765,"language":50612,"meta":14,"style":14},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[91,80767,80768,80773],{"__ignoreMap":14},[94,80769,80770],{"class":96,"line":97},[94,80771,80772],{"class":104},"const arr=new Array(3,5)\n",[94,80774,80775],{"class":96,"line":15},[94,80776,80777],{"class":104},"console.log(arr)  \u002F\u002F[3,5]\n",[40,80779,80780],{},"Array的实例方法，这个方法是实例成员",[40,80782,80783],{},[1443,80784],{"alt":14,"src":80785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22892,80787,80789],{"id":80788},"_410521-reduce","4.10.5.2.1 reduce",[40,80791,80792],{},[1443,80793],{"alt":14,"src":80794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[85,80796,80798],{"className":53044,"code":80797,"language":53046,"meta":14,"style":14},"\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",[91,80799,80800,80808,80816,80821,80826,80831,80836,80840,80845,80850,80855,80859,80864,80869,80873,80878,80883,80888,80896],{"__ignoreMap":14},[94,80801,80802,80804,80806],{"class":96,"line":97},[94,80803,1015],{"class":104},[94,80805,51777],{"class":51277},[94,80807,51284],{"class":104},[94,80809,80810,80812,80814],{"class":96,"line":15},[94,80811,52121],{"class":104},[94,80813,51790],{"class":51277},[94,80815,51284],{"class":104},[94,80817,80818],{"class":96,"line":1160},[94,80819,80820],{"class":104},"    const arr = [1, 5, 8]\n",[94,80822,80823],{"class":96,"line":1175},[94,80824,80825],{"class":104},"    \u002F\u002F 1.没有初始值\n",[94,80827,80828],{"class":96,"line":1181},[94,80829,80830],{"class":104},"    const total = arr.reduce(function (prev, current) {\n",[94,80832,80833],{"class":96,"line":1195},[94,80834,80835],{"class":104},"      return prev + current\n",[94,80837,80838],{"class":96,"line":1201},[94,80839,33444],{"class":104},[94,80841,80842],{"class":96,"line":1292},[94,80843,80844],{"class":104},"    console.log(total)   \u002F\u002F14\n",[94,80846,80847],{"class":96,"line":1298},[94,80848,80849],{"class":104},"    \u002F\u002F 2.有初始值\n",[94,80851,80852],{"class":96,"line":1310},[94,80853,80854],{"class":104},"    const total1 = arr.reduce(function (prev, current) {\n",[94,80856,80857],{"class":96,"line":1593},[94,80858,80835],{"class":104},[94,80860,80861],{"class":96,"line":1598},[94,80862,80863],{"class":104},"    }, 10)\n",[94,80865,80866],{"class":96,"line":1604},[94,80867,80868],{"class":104},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[94,80870,80871],{"class":96,"line":1609},[94,80872,2381],{"emptyLinePlaceholder":20},[94,80874,80875],{"class":96,"line":1623},[94,80876,80877],{"class":104},"    \u002F\u002F 3.箭头函数写法\n",[94,80879,80880],{"class":96,"line":1628},[94,80881,80882],{"class":104},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[94,80884,80885],{"class":96,"line":1634},[94,80886,80887],{"class":104},"    console.log(total2)   \u002F\u002F24\n",[94,80889,80890,80892,80894],{"class":96,"line":1655},[94,80891,52394],{"class":104},[94,80893,51790],{"class":51277},[94,80895,51284],{"class":104},[94,80897,80898,80900,80902],{"class":96,"line":1660},[94,80899,51762],{"class":104},[94,80901,51777],{"class":51277},[94,80903,51284],{"class":104},[40,80905,80906],{},"执行过程：",[48,80908,80909,80912,80915],{},[51,80910,80911],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[51,80913,80914],{},"每一次循环，把返回值给作为下一次循环的上一次值",[51,80916,80917],{},"如果有起始值，则起始值作为上一次值",[85,80919,80921],{"className":53044,"code":80920,"language":53046,"meta":14,"style":14},"\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",[91,80922,80923,80931,80939,80943,80947,80951,80955,80959,80963,80968,80973,80978,80983,80988,80992,80996,81000,81004,81008,81012,81017,81021,81026,81030,81035,81040,81044,81048,81052,81060],{"__ignoreMap":14},[94,80924,80925,80927,80929],{"class":96,"line":97},[94,80926,1015],{"class":104},[94,80928,51777],{"class":51277},[94,80930,51284],{"class":104},[94,80932,80933,80935,80937],{"class":96,"line":15},[94,80934,52121],{"class":104},[94,80936,51790],{"class":51277},[94,80938,51284],{"class":104},[94,80940,80941],{"class":96,"line":1160},[94,80942,80820],{"class":104},[94,80944,80945],{"class":96,"line":1175},[94,80946,80825],{"class":104},[94,80948,80949],{"class":96,"line":1181},[94,80950,80830],{"class":104},[94,80952,80953],{"class":96,"line":1195},[94,80954,80835],{"class":104},[94,80956,80957],{"class":96,"line":1201},[94,80958,33444],{"class":104},[94,80960,80961],{"class":96,"line":1292},[94,80962,80844],{"class":104},[94,80964,80965],{"class":96,"line":1298},[94,80966,80967],{"class":104},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[94,80969,80970],{"class":96,"line":1310},[94,80971,80972],{"class":104},"    \u002F\u002F     1              5                    6\n",[94,80974,80975],{"class":96,"line":1593},[94,80976,80977],{"class":104},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[94,80979,80980],{"class":96,"line":1598},[94,80981,80982],{"class":104},"    \u002F\u002F     6              8                    14\n",[94,80984,80985],{"class":96,"line":1604},[94,80986,80987],{"class":104},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[94,80989,80990],{"class":96,"line":1609},[94,80991,80849],{"class":104},[94,80993,80994],{"class":96,"line":1623},[94,80995,80854],{"class":104},[94,80997,80998],{"class":96,"line":1628},[94,80999,80835],{"class":104},[94,81001,81002],{"class":96,"line":1634},[94,81003,80863],{"class":104},[94,81005,81006],{"class":96,"line":1655},[94,81007,80868],{"class":104},[94,81009,81010],{"class":96,"line":1660},[94,81011,80967],{"class":104},[94,81013,81014],{"class":96,"line":1674},[94,81015,81016],{"class":104},"    \u002F\u002F     10             1                     11\n",[94,81018,81019],{"class":96,"line":1679},[94,81020,80977],{"class":104},[94,81022,81023],{"class":96,"line":1708},[94,81024,81025],{"class":104},"    \u002F\u002F     11             5                    16\n",[94,81027,81028],{"class":96,"line":1713},[94,81029,80977],{"class":104},[94,81031,81032],{"class":96,"line":1730},[94,81033,81034],{"class":104},"    \u002F\u002F     16             8                    24\n",[94,81036,81037],{"class":96,"line":1735},[94,81038,81039],{"class":104},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[94,81041,81042],{"class":96,"line":1740},[94,81043,80877],{"class":104},[94,81045,81046],{"class":96,"line":1745},[94,81047,80882],{"class":104},[94,81049,81050],{"class":96,"line":1759},[94,81051,80887],{"class":104},[94,81053,81054,81056,81058],{"class":96,"line":1764},[94,81055,52394],{"class":104},[94,81057,51790],{"class":51277},[94,81059,51284],{"class":104},[94,81061,81062,81064,81066],{"class":96,"line":2558},[94,81063,51762],{"class":104},[94,81065,51777],{"class":51277},[94,81067,51284],{"class":104},[22892,81069,81071],{"id":81070},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[40,81073,81074],{},[1443,81075],{"alt":14,"src":81076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[85,81078,81080],{"className":53044,"code":81079,"language":53046,"meta":14,"style":14},"\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",[91,81081,81082,81090,81098,81103,81108,81113,81118,81122,81127,81132,81137,81142,81147,81152,81156,81161,81165,81170,81178],{"__ignoreMap":14},[94,81083,81084,81086,81088],{"class":96,"line":97},[94,81085,1015],{"class":104},[94,81087,51777],{"class":51277},[94,81089,51284],{"class":104},[94,81091,81092,81094,81096],{"class":96,"line":15},[94,81093,52121],{"class":104},[94,81095,51790],{"class":51277},[94,81097,51284],{"class":104},[94,81099,81100],{"class":96,"line":1160},[94,81101,81102],{"class":104},"    const arr = [\n",[94,81104,81105],{"class":96,"line":1175},[94,81106,81107],{"class":104},"      { name: '张三', salary: 10000 },\n",[94,81109,81110],{"class":96,"line":1181},[94,81111,81112],{"class":104},"      { name: '李四', salary: 10000 },\n",[94,81114,81115],{"class":96,"line":1195},[94,81116,81117],{"class":104},"      { name: '王五', salary: 10000 }\n",[94,81119,81120],{"class":96,"line":1201},[94,81121,53086],{"class":104},[94,81123,81124],{"class":96,"line":1292},[94,81125,81126],{"class":104},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[94,81128,81129],{"class":96,"line":1298},[94,81130,81131],{"class":104},"    \u002F\u002F prev是累计值\n",[94,81133,81134],{"class":96,"line":1310},[94,81135,81136],{"class":104},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[94,81138,81139],{"class":96,"line":1593},[94,81140,81141],{"class":104},"    console.log(total)\n",[94,81143,81144],{"class":96,"line":1598},[94,81145,81146],{"class":104},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[94,81148,81149],{"class":96,"line":1604},[94,81150,81151],{"class":104},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[94,81153,81154],{"class":96,"line":1609},[94,81155,81146],{"class":104},[94,81157,81158],{"class":96,"line":1623},[94,81159,81160],{"class":104},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[94,81162,81163],{"class":96,"line":1628},[94,81164,81146],{"class":104},[94,81166,81167],{"class":96,"line":1634},[94,81168,81169],{"class":104},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[94,81171,81172,81174,81176],{"class":96,"line":1655},[94,81173,52394],{"class":104},[94,81175,51790],{"class":51277},[94,81177,51284],{"class":104},[94,81179,81180,81182,81184],{"class":96,"line":1660},[94,81181,51762],{"class":104},[94,81183,51777],{"class":51277},[94,81185,51284],{"class":104},[22892,81187,81189],{"id":81188},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[40,81191,81192],{},[1443,81193],{"alt":14,"src":81194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[40,81196,81197],{},[1443,81198],{"alt":14,"src":81199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[48,81201,81202],{},[51,81203,81204],{},"find()",[40,81206,81207],{},"循环查找，找到第一个就ok",[40,81209,81210],{},[343,81211,81214],{"href":81212,"rel":81213},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23847],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[85,81216,81218],{"className":50610,"code":81217,"language":50612,"meta":14,"style":14},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[91,81219,81220,81225,81230],{"__ignoreMap":14},[94,81221,81222],{"class":96,"line":97},[94,81223,81224],{"class":104},"const array1 = [5, 12, 8, 130, 44]\n",[94,81226,81227],{"class":96,"line":15},[94,81228,81229],{"class":104},"const found = array1.find((element) => element > 10)\n",[94,81231,81232],{"class":96,"line":1160},[94,81233,81234],{"class":104},"console.log(found)  \u002F\u002F12\n",[40,81236,81237,81239,81240,81245,81246,81249,81250,81252,81253,81258,81259,81261,81262,81264,81265,81267,81268],{},[91,81238,81204],{}," 方法是一个",[343,81241,81244],{"href":81242,"rel":81243},"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",[23847],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[91,81247,81248],{},"callbackFn"," 函数，直到 ",[91,81251,81248],{}," 返回一个",[343,81254,81257],{"href":81255,"rel":81256},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23847],"真值","。然后 ",[91,81260,81204],{}," 返回该元素并停止迭代数组。如果 ",[91,81263,81248],{}," 从未返回真值，则 ",[91,81266,81204],{}," 返回 ",[91,81269,81270],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[85,81272,81274],{"className":53044,"code":81273,"language":53046,"meta":14,"style":14},"\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",[91,81275,81276,81284,81292,81297,81302,81307,81311,81316,81321,81325,81330,81335,81339,81343,81348,81353,81357,81361,81366,81371,81376,81381,81386,81390,81395,81400,81405,81410,81414,81419,81427],{"__ignoreMap":14},[94,81277,81278,81280,81282],{"class":96,"line":97},[94,81279,1015],{"class":104},[94,81281,51777],{"class":51277},[94,81283,51284],{"class":104},[94,81285,81286,81288,81290],{"class":96,"line":15},[94,81287,52121],{"class":104},[94,81289,51790],{"class":51277},[94,81291,51284],{"class":104},[94,81293,81294],{"class":96,"line":1160},[94,81295,81296],{"class":104},"    const arr = ['red', 'blue', 'green']\n",[94,81298,81299],{"class":96,"line":1175},[94,81300,81301],{"class":104},"    const found = arr.find(item => item === 'pink')\n",[94,81303,81304],{"class":96,"line":1181},[94,81305,81306],{"class":104},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[94,81308,81309],{"class":96,"line":1195},[94,81310,2381],{"emptyLinePlaceholder":20},[94,81312,81313],{"class":96,"line":1201},[94,81314,81315],{"class":104},"    \u002F\u002F 使用场景，用于查找数据\n",[94,81317,81318],{"class":96,"line":1292},[94,81319,81320],{"class":104},"    const arr1 = [\n",[94,81322,81323],{"class":96,"line":1298},[94,81324,79363],{"class":104},[94,81326,81327],{"class":96,"line":1310},[94,81328,81329],{"class":104},"        name: '小米',\n",[94,81331,81332],{"class":96,"line":1593},[94,81333,81334],{"class":104},"        price: 1999\n",[94,81336,81337],{"class":96,"line":1598},[94,81338,77869],{"class":104},[94,81340,81341],{"class":96,"line":1604},[94,81342,79363],{"class":104},[94,81344,81345],{"class":96,"line":1609},[94,81346,81347],{"class":104},"        name: '华为',\n",[94,81349,81350],{"class":96,"line":1623},[94,81351,81352],{"class":104},"        price: 3999\n",[94,81354,81355],{"class":96,"line":1628},[94,81356,52375],{"class":104},[94,81358,81359],{"class":96,"line":1634},[94,81360,53086],{"class":104},[94,81362,81363],{"class":96,"line":1655},[94,81364,81365],{"class":104},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[94,81367,81368],{"class":96,"line":1660},[94,81369,81370],{"class":104},"    \u002F\u002F const found1 = arr1.find(item => {\n",[94,81372,81373],{"class":96,"line":1674},[94,81374,81375],{"class":104},"    \u002F\u002F   if (item.name === '小米') {\n",[94,81377,81378],{"class":96,"line":1679},[94,81379,81380],{"class":104},"    \u002F\u002F     return item\n",[94,81382,81383],{"class":96,"line":1708},[94,81384,81385],{"class":104},"    \u002F\u002F   }\n",[94,81387,81388],{"class":96,"line":1713},[94,81389,63267],{"class":104},[94,81391,81392],{"class":96,"line":1730},[94,81393,81394],{"class":104},"    \u002F\u002F 另一种写法\n",[94,81396,81397],{"class":96,"line":1735},[94,81398,81399],{"class":104},"    const found1 = arr1.find(item => {\n",[94,81401,81402],{"class":96,"line":1740},[94,81403,81404],{"class":104},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[94,81406,81407],{"class":96,"line":1745},[94,81408,81409],{"class":104},"      return item.name = '小米'\n",[94,81411,81412],{"class":96,"line":1759},[94,81413,33444],{"class":104},[94,81415,81416],{"class":96,"line":1764},[94,81417,81418],{"class":104},"    console.log(found1)\n",[94,81420,81421,81423,81425],{"class":96,"line":2558},[94,81422,52394],{"class":104},[94,81424,51790],{"class":51277},[94,81426,51284],{"class":104},[94,81428,81429,81431,81433],{"class":96,"line":2572},[94,81430,51762],{"class":104},[94,81432,51777],{"class":51277},[94,81434,51284],{"class":104},[40,81436,81437],{},[1443,81438],{"alt":14,"src":81439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[40,81441,81442],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[48,81444,81445],{"start":15},[51,81446,81447],{},"every()返回的是布尔值",[40,81449,81450],{},[343,81451,81454],{"href":81452,"rel":81453},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23847],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[40,81456,81457],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[40,81459,81460],{},"some是只有有一个就没问题",[40,81462,81463],{},"every是必须全是才行",[85,81465,81469],{"className":81466,"code":81467,"language":81468,"meta":14,"style":14},"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",[91,81470,81471,81487,81501,81505,81514],{"__ignoreMap":14},[94,81472,81473,81475,81478,81480,81482,81485],{"class":96,"line":97},[94,81474,54426],{"class":100},[94,81476,81477],{"class":104}," isBigEnough(element, ",[94,81479,74035],{"class":100},[94,81481,12417],{"class":104},[94,81483,81484],{"class":100},"array",[94,81486,12424],{"class":104},[94,81488,81489,81492,81495,81497,81499],{"class":96,"line":15},[94,81490,81491],{"class":100},"  return",[94,81493,81494],{"class":104}," element ",[94,81496,1691],{"class":100},[94,81498,2019],{"class":153},[94,81500,1271],{"class":104},[94,81502,81503],{"class":96,"line":1160},[94,81504,1546],{"class":104},[94,81506,81507,81510,81512],{"class":96,"line":1175},[94,81508,81509],{"class":104},"[12, 5, 8, 130, 44].every(isBigEnough); ",[94,81511,33312],{"class":100},[94,81513,54493],{"class":104},[94,81515,81516,81519,81521],{"class":96,"line":1181},[94,81517,81518],{"class":104},"[12, 54, 18, 130, 44].every(isBigEnough); ",[94,81520,33312],{"class":100},[94,81522,57917],{"class":104},[85,81524,81526],{"className":53044,"code":81525,"language":53046,"meta":14,"style":14},"\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",[91,81527,81528,81536,81544,81549,81553,81558,81563,81571],{"__ignoreMap":14},[94,81529,81530,81532,81534],{"class":96,"line":97},[94,81531,1015],{"class":104},[94,81533,51777],{"class":51277},[94,81535,51284],{"class":104},[94,81537,81538,81540,81542],{"class":96,"line":15},[94,81539,52121],{"class":104},[94,81541,51790],{"class":51277},[94,81543,51284],{"class":104},[94,81545,81546],{"class":96,"line":1160},[94,81547,81548],{"class":104},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[94,81550,81551],{"class":96,"line":1175},[94,81552,78299],{"class":104},[94,81554,81555],{"class":96,"line":1181},[94,81556,81557],{"class":104},"    const flag = arr.every(item => item >= 10)\n",[94,81559,81560],{"class":96,"line":1195},[94,81561,81562],{"class":104},"    console.log(flag)    \u002F\u002Ftrue\n",[94,81564,81565,81567,81569],{"class":96,"line":1201},[94,81566,52394],{"class":104},[94,81568,51790],{"class":51277},[94,81570,51284],{"class":104},[94,81572,81573,81575,81577],{"class":96,"line":1292},[94,81574,51762],{"class":104},[94,81576,51777],{"class":51277},[94,81578,51284],{"class":104},[85,81580,81582],{"className":53044,"code":81581,"language":53046,"meta":14,"style":14},"\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",[91,81583,81584,81592,81600,81604,81609,81614,81619,81627],{"__ignoreMap":14},[94,81585,81586,81588,81590],{"class":96,"line":97},[94,81587,1015],{"class":104},[94,81589,51777],{"class":51277},[94,81591,51284],{"class":104},[94,81593,81594,81596,81598],{"class":96,"line":15},[94,81595,52121],{"class":104},[94,81597,51790],{"class":51277},[94,81599,51284],{"class":104},[94,81601,81602],{"class":96,"line":1160},[94,81603,81548],{"class":104},[94,81605,81606],{"class":96,"line":1175},[94,81607,81608],{"class":104},"    const arr = [10, 0, 5]\n",[94,81610,81611],{"class":96,"line":1181},[94,81612,81613],{"class":104},"    const flag = arr.some(item => item >= 10)\n",[94,81615,81616],{"class":96,"line":1195},[94,81617,81618],{"class":104},"    console.log(flag)   \u002F\u002Ftrue\n",[94,81620,81621,81623,81625],{"class":96,"line":1201},[94,81622,52394],{"class":104},[94,81624,51790],{"class":51277},[94,81626,51284],{"class":104},[94,81628,81629,81631,81633],{"class":96,"line":1292},[94,81630,51762],{"class":104},[94,81632,51777],{"class":51277},[94,81634,51284],{"class":104},[22892,81636,81638],{"id":81637},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[40,81640,81641],{},[1443,81642],{"alt":14,"src":81643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[85,81645,81647],{"className":50610,"code":81646,"language":50612,"meta":14,"style":14},"\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",[91,81648,81649,81659,81673,81677,81685,81699,81719,81731,81739,81746,81758,81770,81782,81794,81804,81814,81818,81826,81834,81838,81846,81858,81866,81888,81893,81898,81931,81939,81947,81951],{"__ignoreMap":14},[94,81650,81651,81653,81655,81657],{"class":96,"line":97},[94,81652,51274],{"class":104},[94,81654,51278],{"class":51277},[94,81656,51281],{"class":1944},[94,81658,51284],{"class":104},[94,81660,81661,81663,81665,81667,81669,81671],{"class":96,"line":15},[94,81662,1015],{"class":104},[94,81664,50612],{"class":51277},[94,81666,51293],{"class":1944},[94,81668,150],{"class":104},[94,81670,51298],{"class":209},[94,81672,51284],{"class":104},[94,81674,81675],{"class":96,"line":1160},[94,81676,2381],{"emptyLinePlaceholder":20},[94,81678,81679,81681,81683],{"class":96,"line":1175},[94,81680,1015],{"class":104},[94,81682,51311],{"class":51277},[94,81684,51284],{"class":104},[94,81686,81687,81689,81691,81693,81695,81697],{"class":96,"line":1181},[94,81688,52121],{"class":104},[94,81690,51321],{"class":51277},[94,81692,51324],{"class":1944},[94,81694,150],{"class":104},[94,81696,51329],{"class":209},[94,81698,51284],{"class":104},[94,81700,81701,81703,81705,81707,81709,81711,81713,81715,81717],{"class":96,"line":1195},[94,81702,52121],{"class":104},[94,81704,51321],{"class":51277},[94,81706,14902],{"class":1944},[94,81708,150],{"class":104},[94,81710,51368],{"class":209},[94,81712,51348],{"class":1944},[94,81714,150],{"class":104},[94,81716,51375],{"class":209},[94,81718,51284],{"class":104},[94,81720,81721,81723,81725,81727,81729],{"class":96,"line":1201},[94,81722,52121],{"class":104},[94,81724,51384],{"class":51277},[94,81726,51387],{"class":104},[94,81728,51384],{"class":51277},[94,81730,51284],{"class":104},[94,81732,81733,81735,81737],{"class":96,"line":1292},[94,81734,52121],{"class":104},[94,81736,5108],{"class":51277},[94,81738,51284],{"class":104},[94,81740,81741,81744],{"class":96,"line":1298},[94,81742,81743],{"class":51277},"    div",[94,81745,15554],{"class":104},[94,81747,81748,81750,81752,81754,81756],{"class":96,"line":1310},[94,81749,54748],{"class":153},[94,81751,51414],{"class":104},[94,81753,1703],{"class":153},[94,81755,51469],{"class":100},[94,81757,1271],{"class":104},[94,81759,81760,81762,81764,81766,81768],{"class":96,"line":1593},[94,81761,54762],{"class":153},[94,81763,51414],{"class":104},[94,81765,506],{"class":153},[94,81767,51469],{"class":100},[94,81769,1271],{"class":104},[94,81771,81772,81774,81776,81778,81780],{"class":96,"line":1598},[94,81773,57336],{"class":153},[94,81775,51414],{"class":104},[94,81777,506],{"class":153},[94,81779,51469],{"class":100},[94,81781,1271],{"class":104},[94,81783,81784,81786,81788,81790,81792],{"class":96,"line":1604},[94,81785,65110],{"class":153},[94,81787,51414],{"class":104},[94,81789,603],{"class":153},[94,81791,51469],{"class":100},[94,81793,1271],{"class":104},[94,81795,81796,81798,81800,81802],{"class":96,"line":1609},[94,81797,57263],{"class":153},[94,81799,51414],{"class":104},[94,81801,51569],{"class":153},[94,81803,1271],{"class":104},[94,81805,81806,81808,81810,81812],{"class":96,"line":1623},[94,81807,54861],{"class":153},[94,81809,51414],{"class":104},[94,81811,51622],{"class":153},[94,81813,1271],{"class":104},[94,81815,81816],{"class":96,"line":1628},[94,81817,2168],{"class":104},[94,81819,81820,81822,81824],{"class":96,"line":1634},[94,81821,52394],{"class":104},[94,81823,5108],{"class":51277},[94,81825,51284],{"class":104},[94,81827,81828,81830,81832],{"class":96,"line":1655},[94,81829,51762],{"class":104},[94,81831,51311],{"class":51277},[94,81833,51284],{"class":104},[94,81835,81836],{"class":96,"line":1660},[94,81837,2381],{"emptyLinePlaceholder":20},[94,81839,81840,81842,81844],{"class":96,"line":1674},[94,81841,1015],{"class":104},[94,81843,51777],{"class":51277},[94,81845,51284],{"class":104},[94,81847,81848,81850,81852,81854,81856],{"class":96,"line":1679},[94,81849,52121],{"class":104},[94,81851,51588],{"class":51277},[94,81853,55291],{"class":104},[94,81855,51588],{"class":51277},[94,81857,51284],{"class":104},[94,81859,81860,81862,81864],{"class":96,"line":1708},[94,81861,52121],{"class":104},[94,81863,51790],{"class":51277},[94,81865,51284],{"class":104},[94,81867,81868,81870,81873,81875,81878,81881,81883,81886],{"class":96,"line":1713},[94,81869,11203],{"class":100},[94,81871,81872],{"class":153}," spec",[94,81874,13546],{"class":100},[94,81876,81877],{"class":104}," { size: ",[94,81879,81880],{"class":209},"'40cm*40cm'",[94,81882,55441],{"class":104},[94,81884,81885],{"class":209},"'黑色'",[94,81887,55581],{"class":104},[94,81889,81890],{"class":96,"line":1730},[94,81891,81892],{"class":163},"    \u002F\u002F const arr = Object.values(spec)\n",[94,81894,81895],{"class":96,"line":1735},[94,81896,81897],{"class":163},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[94,81899,81900,81902,81904,81906,81909,81911,81913,81916,81919,81922,81924,81926,81929],{"class":96,"line":1740},[94,81901,52384],{"class":104},[94,81903,54376],{"class":1944},[94,81905,105],{"class":104},[94,81907,81908],{"class":209},"'div'",[94,81910,74226],{"class":104},[94,81912,150],{"class":100},[94,81914,81915],{"class":104}," Object.",[94,81917,81918],{"class":1944},"values",[94,81920,81921],{"class":104},"(spec).",[94,81923,74200],{"class":1944},[94,81925,105],{"class":104},[94,81927,81928],{"class":209},"'\u002F'",[94,81930,111],{"class":104},[94,81932,81933,81935,81937],{"class":96,"line":1745},[94,81934,52394],{"class":104},[94,81936,51790],{"class":51277},[94,81938,51284],{"class":104},[94,81940,81941,81943,81945],{"class":96,"line":1759},[94,81942,51762],{"class":104},[94,81944,51777],{"class":51277},[94,81946,51284],{"class":104},[94,81948,81949],{"class":96,"line":1764},[94,81950,2381],{"emptyLinePlaceholder":20},[94,81952,81953,81955,81957],{"class":96,"line":2558},[94,81954,51762],{"class":104},[94,81956,50612],{"class":51277},[94,81958,51284],{"class":104},[40,81960,81961],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22892,81963,81965],{"id":81964},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[40,81967,81968],{},"静态方法，将伪数组转换为真数组",[40,81970,81971],{},[1443,81972],{"alt":14,"src":81973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[85,81975,81977],{"className":53044,"code":81976,"language":53046,"meta":14,"style":14},"\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",[91,81978,81979,81987,81995,82007,82019,82031,82039,82047,82052,82057,82062,82067,82075],{"__ignoreMap":14},[94,81980,81981,81983,81985],{"class":96,"line":97},[94,81982,1015],{"class":104},[94,81984,51777],{"class":51277},[94,81986,51284],{"class":104},[94,81988,81989,81991,81993],{"class":96,"line":15},[94,81990,52121],{"class":104},[94,81992,1112],{"class":51277},[94,81994,51284],{"class":104},[94,81996,81997,81999,82001,82003,82005],{"class":96,"line":1160},[94,81998,51318],{"class":104},[94,82000,51],{"class":51277},[94,82002,55291],{"class":104},[94,82004,51],{"class":51277},[94,82006,51284],{"class":104},[94,82008,82009,82011,82013,82015,82017],{"class":96,"line":1175},[94,82010,51318],{"class":104},[94,82012,51],{"class":51277},[94,82014,55291],{"class":104},[94,82016,51],{"class":51277},[94,82018,51284],{"class":104},[94,82020,82021,82023,82025,82027,82029],{"class":96,"line":1181},[94,82022,51318],{"class":104},[94,82024,51],{"class":51277},[94,82026,55291],{"class":104},[94,82028,51],{"class":51277},[94,82030,51284],{"class":104},[94,82032,82033,82035,82037],{"class":96,"line":1195},[94,82034,52394],{"class":104},[94,82036,1112],{"class":51277},[94,82038,51284],{"class":104},[94,82040,82041,82043,82045],{"class":96,"line":1201},[94,82042,52121],{"class":104},[94,82044,51790],{"class":51277},[94,82046,51284],{"class":104},[94,82048,82049],{"class":96,"line":1292},[94,82050,82051],{"class":104},"    const lis = document.querySelectorAll('li')\n",[94,82053,82054],{"class":96,"line":1298},[94,82055,82056],{"class":104},"    const liss = Array.from(lis)\n",[94,82058,82059],{"class":96,"line":1310},[94,82060,82061],{"class":104},"    liss.pop()\n",[94,82063,82064],{"class":96,"line":1593},[94,82065,82066],{"class":104},"    console.log(liss)\n",[94,82068,82069,82071,82073],{"class":96,"line":1598},[94,82070,52394],{"class":104},[94,82072,51790],{"class":51277},[94,82074,51284],{"class":104},[94,82076,82077,82079,82081],{"class":96,"line":1604},[94,82078,51762],{"class":104},[94,82080,51777],{"class":51277},[94,82082,51284],{"class":104},[40,82084,82085],{},[1443,82086],{"alt":14,"src":82087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[21980,82089,82091],{"id":82090},"_41053-string","4.10.5.3 String",[40,82093,82094],{},[1443,82095],{"alt":14,"src":82096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22892,82098,82100],{"id":82099},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[85,82102,82104],{"className":53044,"code":82103,"language":53046,"meta":14,"style":14},"\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",[91,82105,82106,82114,82122,82127,82132,82137,82141,82146,82151,82156,82164],{"__ignoreMap":14},[94,82107,82108,82110,82112],{"class":96,"line":97},[94,82109,1015],{"class":104},[94,82111,51777],{"class":51277},[94,82113,51284],{"class":104},[94,82115,82116,82118,82120],{"class":96,"line":15},[94,82117,52121],{"class":104},[94,82119,51790],{"class":51277},[94,82121,51284],{"class":104},[94,82123,82124],{"class":96,"line":1160},[94,82125,82126],{"class":104},"    \u002F\u002F 把字符串转化为数组\n",[94,82128,82129],{"class":96,"line":1175},[94,82130,82131],{"class":104},"    const str = 'pink,red'\n",[94,82133,82134],{"class":96,"line":1181},[94,82135,82136],{"class":104},"    const arr = str.split(',')\n",[94,82138,82139],{"class":96,"line":1195},[94,82140,80615],{"class":104},[94,82142,82143],{"class":96,"line":1201},[94,82144,82145],{"class":104},"    const str1 = '2025-8-25'\n",[94,82147,82148],{"class":96,"line":1292},[94,82149,82150],{"class":104},"    const arr1 = str1.split('-')\n",[94,82152,82153],{"class":96,"line":1298},[94,82154,82155],{"class":104},"    console.log(arr1)\n",[94,82157,82158,82160,82162],{"class":96,"line":1310},[94,82159,52394],{"class":104},[94,82161,51790],{"class":51277},[94,82163,51284],{"class":104},[94,82165,82166,82168,82170],{"class":96,"line":1593},[94,82167,51762],{"class":104},[94,82169,51777],{"class":51277},[94,82171,51284],{"class":104},[22892,82173,82175],{"id":82174},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[40,82177,5163],{},[40,82179,82180],{},"substring(indexStart)",[40,82182,82183],{},"substring(indexStart, indexEnd)",[1112,82185,82186,82197,82209,82219],{},[51,82187,82188,82189,82192,82193,82196],{},"如果省略了 ",[91,82190,82191],{},"indexEnd","，则 ",[91,82194,82195],{},"substring()"," 提取字符直到字符串的末尾",[51,82198,82199,82200,82203,82204,82192,82206,82208],{},"如果 ",[91,82201,82202],{},"indexStart"," 等于 ",[91,82205,82191],{},[91,82207,82195],{}," 返回一个空字符串",[51,82210,82199,82211,82213,82214,82192,82216,82218],{},[91,82212,82202],{}," 大于 ",[91,82215,82191],{},[91,82217,82195],{}," 的效果就像交换了这两个参数一样",[51,82220,82221],{},"结束的索引号不包含想要截取的部分",[85,82223,82225],{"className":81466,"code":82224,"language":81468,"meta":14,"style":14},"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",[91,82226,82227,82239,82243,82277,82307,82311,82342,82346,82373,82403,82433,82437,82468],{"__ignoreMap":14},[94,82228,82229,82232,82234,82237],{"class":96,"line":97},[94,82230,82231],{"class":104},"const anyString ",[94,82233,150],{"class":100},[94,82235,82236],{"class":209}," \"Mozilla\"",[94,82238,1271],{"class":104},[94,82240,82241],{"class":96,"line":15},[94,82242,2381],{"emptyLinePlaceholder":20},[94,82244,82245,82248,82250,82252,82254,82257,82259,82262,82264,82266,82268,82270,82272,82274],{"class":96,"line":1160},[94,82246,82247],{"class":153},"console",[94,82249,663],{"class":104},[94,82251,58224],{"class":153},[94,82253,105],{"class":104},[94,82255,82256],{"class":153},"anyString",[94,82258,663],{"class":104},[94,82260,82261],{"class":153},"substring",[94,82263,105],{"class":104},[94,82265,296],{"class":153},[94,82267,12417],{"class":104},[94,82269,322],{"class":153},[94,82271,75230],{"class":104},[94,82273,33312],{"class":100},[94,82275,82276],{"class":209}," 'M'\n",[94,82278,82279,82281,82283,82285,82287,82289,82291,82293,82295,82297,82299,82301,82303,82305],{"class":96,"line":1175},[94,82280,82247],{"class":153},[94,82282,663],{"class":104},[94,82284,58224],{"class":153},[94,82286,105],{"class":104},[94,82288,82256],{"class":153},[94,82290,663],{"class":104},[94,82292,82261],{"class":153},[94,82294,105],{"class":104},[94,82296,322],{"class":153},[94,82298,12417],{"class":104},[94,82300,296],{"class":153},[94,82302,75230],{"class":104},[94,82304,33312],{"class":100},[94,82306,82276],{"class":209},[94,82308,82309],{"class":96,"line":1181},[94,82310,2381],{"emptyLinePlaceholder":20},[94,82312,82313,82315,82317,82319,82321,82323,82325,82327,82329,82331,82333,82335,82337,82339],{"class":96,"line":1195},[94,82314,82247],{"class":153},[94,82316,663],{"class":104},[94,82318,58224],{"class":153},[94,82320,105],{"class":104},[94,82322,82256],{"class":153},[94,82324,663],{"class":104},[94,82326,82261],{"class":153},[94,82328,105],{"class":104},[94,82330,296],{"class":153},[94,82332,12417],{"class":104},[94,82334,449],{"class":153},[94,82336,75230],{"class":104},[94,82338,33312],{"class":100},[94,82340,82341],{"class":209}," 'Mozill'\n",[94,82343,82344],{"class":96,"line":1201},[94,82345,2381],{"emptyLinePlaceholder":20},[94,82347,82348,82350,82352,82354,82356,82358,82360,82362,82364,82366,82368,82370],{"class":96,"line":1292},[94,82349,82247],{"class":153},[94,82351,663],{"class":104},[94,82353,58224],{"class":153},[94,82355,105],{"class":104},[94,82357,82256],{"class":153},[94,82359,663],{"class":104},[94,82361,82261],{"class":153},[94,82363,105],{"class":104},[94,82365,398],{"class":153},[94,82367,75230],{"class":104},[94,82369,33312],{"class":100},[94,82371,82372],{"class":209}," 'lla'\n",[94,82374,82375,82377,82379,82381,82383,82385,82387,82389,82391,82393,82395,82397,82399,82401],{"class":96,"line":1298},[94,82376,82247],{"class":153},[94,82378,663],{"class":104},[94,82380,58224],{"class":153},[94,82382,105],{"class":104},[94,82384,82256],{"class":153},[94,82386,663],{"class":104},[94,82388,82261],{"class":153},[94,82390,105],{"class":104},[94,82392,398],{"class":153},[94,82394,12417],{"class":104},[94,82396,474],{"class":153},[94,82398,75286],{"class":104},[94,82400,33312],{"class":100},[94,82402,82372],{"class":209},[94,82404,82405,82407,82409,82411,82413,82415,82417,82419,82421,82423,82425,82427,82429,82431],{"class":96,"line":1310},[94,82406,82247],{"class":153},[94,82408,663],{"class":104},[94,82410,58224],{"class":153},[94,82412,105],{"class":104},[94,82414,82256],{"class":153},[94,82416,663],{"class":104},[94,82418,82261],{"class":153},[94,82420,105],{"class":104},[94,82422,474],{"class":153},[94,82424,12417],{"class":104},[94,82426,398],{"class":153},[94,82428,75230],{"class":104},[94,82430,33312],{"class":100},[94,82432,82372],{"class":209},[94,82434,82435],{"class":96,"line":1593},[94,82436,2381],{"emptyLinePlaceholder":20},[94,82438,82439,82441,82443,82445,82447,82449,82451,82453,82455,82457,82459,82461,82463,82465],{"class":96,"line":1598},[94,82440,82247],{"class":153},[94,82442,663],{"class":104},[94,82444,58224],{"class":153},[94,82446,105],{"class":104},[94,82448,82256],{"class":153},[94,82450,663],{"class":104},[94,82452,82261],{"class":153},[94,82454,105],{"class":104},[94,82456,296],{"class":153},[94,82458,12417],{"class":104},[94,82460,474],{"class":153},[94,82462,75230],{"class":104},[94,82464,33312],{"class":100},[94,82466,82467],{"class":209}," 'Mozilla'\n",[94,82469,82470,82472,82474,82476,82478,82480,82482,82484,82486,82488,82490,82492,82494,82496],{"class":96,"line":1604},[94,82471,82247],{"class":153},[94,82473,663],{"class":104},[94,82475,58224],{"class":153},[94,82477,105],{"class":104},[94,82479,82256],{"class":153},[94,82481,663],{"class":104},[94,82483,82261],{"class":153},[94,82485,105],{"class":104},[94,82487,296],{"class":153},[94,82489,12417],{"class":104},[94,82491,551],{"class":153},[94,82493,75230],{"class":104},[94,82495,33312],{"class":100},[94,82497,82467],{"class":209},[22892,82499,82501],{"id":82500},"_410533-startswith","4.10.5.3.3 startsWith",[40,82503,82504,82507,82508,82513,82514,82516,82517],{},[91,82505,82506],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[254,82509,82510],{},[91,82511,82512],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[91,82515,1343],{}," 或 ",[91,82518,65997],{},[85,82520,82522],{"className":77472,"code":82521,"language":77474,"meta":14,"style":14},"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",[91,82523,82524,82536,82555,82560,82580],{"__ignoreMap":14},[94,82525,82526,82528,82531,82533],{"class":96,"line":97},[94,82527,6774],{"class":100},[94,82529,82530],{"class":104}," str1 ",[94,82532,150],{"class":100},[94,82534,82535],{"class":209}," \"Saturday night plans\"\n",[94,82537,82538,82540,82542,82545,82548,82550,82553],{"class":96,"line":15},[94,82539,77509],{"class":104},[94,82541,58224],{"class":1944},[94,82543,82544],{"class":104},"(str1.",[94,82546,82547],{"class":1944},"startsWith",[94,82549,105],{"class":104},[94,82551,82552],{"class":209},"\"Sat\"",[94,82554,30480],{"class":104},[94,82556,82557],{"class":96,"line":1160},[94,82558,82559],{"class":163},"\u002F\u002F Expected output: true\n",[94,82561,82562,82564,82566,82568,82570,82572,82574,82576,82578],{"class":96,"line":1175},[94,82563,77509],{"class":104},[94,82565,58224],{"class":1944},[94,82567,82544],{"class":104},[94,82569,82547],{"class":1944},[94,82571,105],{"class":104},[94,82573,82552],{"class":209},[94,82575,12417],{"class":104},[94,82577,176],{"class":153},[94,82579,30480],{"class":104},[94,82581,82582],{"class":96,"line":1181},[94,82583,82584],{"class":163},"\u002F\u002F Expected output: false\n",[85,82586,82588],{"className":50610,"code":82587,"language":50612,"meta":14,"style":14},"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",[91,82589,82590,82595,82600,82604,82609,82614],{"__ignoreMap":14},[94,82591,82592],{"class":96,"line":97},[94,82593,82594],{"class":104},"startsWith(searchString)\n",[94,82596,82597],{"class":96,"line":15},[94,82598,82599],{"class":104},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[94,82601,82602],{"class":96,"line":1160},[94,82603,2381],{"emptyLinePlaceholder":20},[94,82605,82606],{"class":96,"line":1175},[94,82607,82608],{"class":104},"const str3 = 'pink老师上课中'\n",[94,82610,82611],{"class":96,"line":1181},[94,82612,82613],{"class":104},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[94,82615,82616],{"class":96,"line":1195},[94,82617,82618],{"class":104},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22892,82620,82622],{"id":82621},"_410534-includes","4.10.5.3.4 includes",[40,82624,82625],{},"includes(searchString) includes(searchString, position)",[48,82627,82628],{},[51,82629,82630],{},"searchString:",[40,82632,82633,82634,82636,82637,82642,82643,82648,82649,21482,82652,82655,82656,82659],{},"一个要在 ",[91,82635,1280],{}," 中查找的字符串。",[343,82638,82641],{"href":82639,"rel":82640},"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",[23847],"不能是正则表达式","。所有非正则表达式的值都会被",[343,82644,82647],{"href":82645,"rel":82646},"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",[23847],"强制转换为字符串","，因此如果该参数被省略或传入 ",[91,82650,82651],{},"undefined",[91,82653,82654],{},"includes()"," 方法会在字符串中搜索 ",[91,82657,82658],{},"\"undefined\"","，这通常不是你想要的",[48,82661,82662],{"start":15},[51,82663,82664,964],{},[91,82665,82666],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[40,82668,82669,82670,82673,82674],{},"在字符串中开始搜索 ",[91,82671,82672],{},"searchString"," 的位置。默认值为 ",[91,82675,296],{},[48,82677,82678],{"start":1160},[51,82679,82680],{},"返回值：",[40,82682,82683,82684,82686,82687,82691,82692],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[91,82685,82672],{}," 为空字符串的情况），则返回 ",[254,82688,82689],{},[91,82690,1343],{}," ，否则返回 ",[254,82693,82694],{},[91,82695,65997],{},[48,82697,82698],{"start":1175},[51,82699,82700],{},"异常：",[40,82702,82199,82703,13777,82705,82709],{},[91,82704,82672],{},[343,82706,82708],{"href":82639,"rel":82707},[23847],"是一个正则表达式","，则会抛出",[40,82711,82712],{},"只要是有就是true，不需要非得以谁开头结尾",[85,82714,82716],{"className":77472,"code":82715,"language":77474,"meta":14,"style":14},"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",[91,82717,82718,82729,82752,82771,82791,82813,82832],{"__ignoreMap":14},[94,82719,82720,82722,82724,82726],{"class":96,"line":97},[94,82721,6774],{"class":100},[94,82723,79752],{"class":104},[94,82725,150],{"class":100},[94,82727,82728],{"class":209}," \"To be, or not to be, that is the question.\"\n",[94,82730,82731,82733,82735,82738,82741,82743,82746,82749],{"class":96,"line":15},[94,82732,77509],{"class":104},[94,82734,58224],{"class":1944},[94,82736,82737],{"class":104},"(str.",[94,82739,82740],{"class":1944},"includes",[94,82742,105],{"class":104},[94,82744,82745],{"class":209},"\"To be\"",[94,82747,82748],{"class":104},"))",[94,82750,82751],{"class":163},"  \u002F\u002F true\n",[94,82753,82754,82756,82758,82760,82762,82764,82767,82769],{"class":96,"line":1160},[94,82755,77509],{"class":104},[94,82757,58224],{"class":1944},[94,82759,82737],{"class":104},[94,82761,82740],{"class":1944},[94,82763,105],{"class":104},[94,82765,82766],{"class":209},"\"question\"",[94,82768,82748],{"class":104},[94,82770,82751],{"class":163},[94,82772,82773,82775,82777,82779,82781,82783,82786,82788],{"class":96,"line":1175},[94,82774,77509],{"class":104},[94,82776,58224],{"class":1944},[94,82778,82737],{"class":104},[94,82780,82740],{"class":1944},[94,82782,105],{"class":104},[94,82784,82785],{"class":209},"\"nonexistent\"",[94,82787,82748],{"class":104},[94,82789,82790],{"class":163},"  \u002F\u002F false\n",[94,82792,82793,82795,82797,82799,82801,82803,82805,82807,82809,82811],{"class":96,"line":1181},[94,82794,77509],{"class":104},[94,82796,58224],{"class":1944},[94,82798,82737],{"class":104},[94,82800,82740],{"class":1944},[94,82802,105],{"class":104},[94,82804,82745],{"class":209},[94,82806,12417],{"class":104},[94,82808,322],{"class":153},[94,82810,82748],{"class":104},[94,82812,82790],{"class":163},[94,82814,82815,82817,82819,82821,82823,82825,82828,82830],{"class":96,"line":1195},[94,82816,77509],{"class":104},[94,82818,58224],{"class":1944},[94,82820,82737],{"class":104},[94,82822,82740],{"class":1944},[94,82824,105],{"class":104},[94,82826,82827],{"class":209},"\"TO BE\"",[94,82829,82748],{"class":104},[94,82831,82790],{"class":163},[94,82833,82834,82836,82838,82840,82842,82844,82846,82848],{"class":96,"line":1201},[94,82835,77509],{"class":104},[94,82837,58224],{"class":1944},[94,82839,82737],{"class":104},[94,82841,82740],{"class":1944},[94,82843,105],{"class":104},[94,82845,7634],{"class":209},[94,82847,82748],{"class":104},[94,82849,82751],{"class":163},[22892,82851,82853],{"id":82852},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[85,82855,82857],{"className":53044,"code":82856,"language":53046,"meta":14,"style":14},"\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",[91,82858,82859,82867,82875,82880,82885,82890,82895,82900,82908],{"__ignoreMap":14},[94,82860,82861,82863,82865],{"class":96,"line":97},[94,82862,1015],{"class":104},[94,82864,51777],{"class":51277},[94,82866,51284],{"class":104},[94,82868,82869,82871,82873],{"class":96,"line":15},[94,82870,52121],{"class":104},[94,82872,51790],{"class":51277},[94,82874,51284],{"class":104},[94,82876,82877],{"class":96,"line":1160},[94,82878,82879],{"class":104},"    const num = 10\n",[94,82881,82882],{"class":96,"line":1175},[94,82883,82884],{"class":104},"    \u002F\u002F 强制转换\n",[94,82886,82887],{"class":96,"line":1181},[94,82888,82889],{"class":104},"    console.log(String(num))\n",[94,82891,82892],{"class":96,"line":1195},[94,82893,82894],{"class":104},"    \u002F\u002F toString()方法转换\n",[94,82896,82897],{"class":96,"line":1201},[94,82898,82899],{"class":104},"    console.log(num.toString())\n",[94,82901,82902,82904,82906],{"class":96,"line":1292},[94,82903,52394],{"class":104},[94,82905,51790],{"class":51277},[94,82907,51284],{"class":104},[94,82909,82910,82912,82914],{"class":96,"line":1298},[94,82911,51762],{"class":104},[94,82913,51777],{"class":51277},[94,82915,51284],{"class":104},[22892,82917,82919],{"id":82918},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[40,82921,82922],{},[1443,82923],{"alt":14,"src":82924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[85,82926,82928],{"className":50610,"code":82927,"language":50612,"meta":14,"style":14},"\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",[91,82929,82930,82940,82954,82958,82966,82980,83000,83012,83020,83024,83032,83044,83052,83064,83069,83074,83079,83126,83142,83150,83158,83162],{"__ignoreMap":14},[94,82931,82932,82934,82936,82938],{"class":96,"line":97},[94,82933,51274],{"class":104},[94,82935,51278],{"class":51277},[94,82937,51281],{"class":1944},[94,82939,51284],{"class":104},[94,82941,82942,82944,82946,82948,82950,82952],{"class":96,"line":15},[94,82943,1015],{"class":104},[94,82945,50612],{"class":51277},[94,82947,51293],{"class":1944},[94,82949,150],{"class":104},[94,82951,51298],{"class":209},[94,82953,51284],{"class":104},[94,82955,82956],{"class":96,"line":1160},[94,82957,2381],{"emptyLinePlaceholder":20},[94,82959,82960,82962,82964],{"class":96,"line":1175},[94,82961,1015],{"class":104},[94,82963,51311],{"class":51277},[94,82965,51284],{"class":104},[94,82967,82968,82970,82972,82974,82976,82978],{"class":96,"line":1181},[94,82969,52121],{"class":104},[94,82971,51321],{"class":51277},[94,82973,51324],{"class":1944},[94,82975,150],{"class":104},[94,82977,51329],{"class":209},[94,82979,51284],{"class":104},[94,82981,82982,82984,82986,82988,82990,82992,82994,82996,82998],{"class":96,"line":1195},[94,82983,52121],{"class":104},[94,82985,51321],{"class":51277},[94,82987,14902],{"class":1944},[94,82989,150],{"class":104},[94,82991,51368],{"class":209},[94,82993,51348],{"class":1944},[94,82995,150],{"class":104},[94,82997,51375],{"class":209},[94,82999,51284],{"class":104},[94,83001,83002,83004,83006,83008,83010],{"class":96,"line":1201},[94,83003,52121],{"class":104},[94,83005,51384],{"class":51277},[94,83007,51387],{"class":104},[94,83009,51384],{"class":51277},[94,83011,51284],{"class":104},[94,83013,83014,83016,83018],{"class":96,"line":1292},[94,83015,51762],{"class":104},[94,83017,51311],{"class":51277},[94,83019,51284],{"class":104},[94,83021,83022],{"class":96,"line":1298},[94,83023,2381],{"emptyLinePlaceholder":20},[94,83025,83026,83028,83030],{"class":96,"line":1310},[94,83027,1015],{"class":104},[94,83029,51777],{"class":51277},[94,83031,51284],{"class":104},[94,83033,83034,83036,83038,83040,83042],{"class":96,"line":1593},[94,83035,52121],{"class":104},[94,83037,51588],{"class":51277},[94,83039,55291],{"class":104},[94,83041,51588],{"class":51277},[94,83043,51284],{"class":104},[94,83045,83046,83048,83050],{"class":96,"line":1598},[94,83047,52121],{"class":104},[94,83049,51790],{"class":51277},[94,83051,51284],{"class":104},[94,83053,83054,83056,83059,83061],{"class":96,"line":1604},[94,83055,11203],{"class":100},[94,83057,83058],{"class":153}," gift",[94,83060,13546],{"class":100},[94,83062,83063],{"class":209}," '50g的茶叶，清洗球'\n",[94,83065,83066],{"class":96,"line":1609},[94,83067,83068],{"class":163},"    \u002F\u002F 1.把字符串拆分为数组\n",[94,83070,83071],{"class":96,"line":1623},[94,83072,83073],{"class":163},"    \u002F\u002F console.log(gift.split(','))\n",[94,83075,83076],{"class":96,"line":1628},[94,83077,83078],{"class":163},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[94,83080,83081,83083,83085,83087,83090,83093,83095,83098,83100,83102,83104,83106,83108,83111,83113,83116,83118,83120,83122,83124],{"class":96,"line":1634},[94,83082,11203],{"class":100},[94,83084,73896],{"class":153},[94,83086,13546],{"class":100},[94,83088,83089],{"class":104}," gift.",[94,83091,83092],{"class":1944},"split",[94,83094,105],{"class":104},[94,83096,83097],{"class":209},"'，'",[94,83099,30809],{"class":104},[94,83101,74021],{"class":1944},[94,83103,105],{"class":104},[94,83105,79772],{"class":5198},[94,83107,79775],{"class":100},[94,83109,83110],{"class":209}," `\u003Cspan>【赠品】${",[94,83112,79772],{"class":104},[94,83114,83115],{"class":209},"}\u003C\u002Fspan>\u003Cbr>`",[94,83117,30809],{"class":104},[94,83119,74200],{"class":1944},[94,83121,105],{"class":104},[94,83123,74205],{"class":209},[94,83125,111],{"class":104},[94,83127,83128,83130,83132,83134,83136,83138,83140],{"class":96,"line":1655},[94,83129,52384],{"class":104},[94,83131,54376],{"class":1944},[94,83133,105],{"class":104},[94,83135,81908],{"class":209},[94,83137,74226],{"class":104},[94,83139,150],{"class":100},[94,83141,73962],{"class":104},[94,83143,83144,83146,83148],{"class":96,"line":1660},[94,83145,52394],{"class":104},[94,83147,51790],{"class":51277},[94,83149,51284],{"class":104},[94,83151,83152,83154,83156],{"class":96,"line":1674},[94,83153,51762],{"class":104},[94,83155,51777],{"class":51277},[94,83157,51284],{"class":104},[94,83159,83160],{"class":96,"line":1679},[94,83161,2381],{"emptyLinePlaceholder":20},[94,83163,83164,83166,83168],{"class":96,"line":1708},[94,83165,51762],{"class":104},[94,83167,50612],{"class":51277},[94,83169,51284],{"class":104},[21980,83171,83173],{"id":83172},"_41054-number","4.10.5.4 Number",[40,83175,83176],{},[1443,83177],{"alt":14,"src":83178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[40,83180,83181],{},"整数也可以进行toFixed来保留小数",[40,83183,83184],{},"比如：",[40,83186,83187],{},"const price=10",[40,83189,83190],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[21980,83192,83194],{"id":83193},"_41055-购物车展示","4.10.5.5 购物车展示",[40,83196,83197],{},[1443,83198],{"alt":14,"src":83199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[85,83201,83203],{"className":50610,"code":83202,"language":50612,"meta":14,"style":14},"\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",[91,83204,83205,83215,83229,83233,83241,83255,83275,83287,83295,83301,83311,83321,83331,83335,83339,83345,83357,83371,83375,83379,83385,83397,83413,83423,83439,83443,83447,83453,83463,83473,83477,83481,83489,83501,83513,83525,83529,83533,83541,83553,83557,83561,83572,83582,83594,83606,83616,83620,83624,83632,83641,83653,83663,83673,83677,83681,83689,83698,83705,83715,83727,83731,83735,83744,83754,83765,83777,83789,83793,83797,83806,83816,83827,83831,83835,83841,83853,83865,83875,83885,83903,83915,83919,83923,83932,83944,83954,83964,83976,83980,83988,83996,84000,84008,84022,84030,84044,84072,84080,84088,84098,84102,84110,84118,84127,84135,84144,84154,84158,84162,84170,84178,84187,84195,84203,84216,84220,84224,84232,84240,84249,84257,84265,84280,84284,84288,84296,84304,84313,84321,84329,84343,84351,84355,84359,84364,84390,84395,84432,84437,84460,84465,84519,84524,84560,84564,84570,84575,84584,84598,84607,84626,84635,84645,84650,84655,84668,84673,84727,84753,84761,84769,84773],{"__ignoreMap":14},[94,83206,83207,83209,83211,83213],{"class":96,"line":97},[94,83208,51274],{"class":104},[94,83210,51278],{"class":51277},[94,83212,51281],{"class":1944},[94,83214,51284],{"class":104},[94,83216,83217,83219,83221,83223,83225,83227],{"class":96,"line":15},[94,83218,1015],{"class":104},[94,83220,50612],{"class":51277},[94,83222,51293],{"class":1944},[94,83224,150],{"class":104},[94,83226,51298],{"class":209},[94,83228,51284],{"class":104},[94,83230,83231],{"class":96,"line":1160},[94,83232,2381],{"emptyLinePlaceholder":20},[94,83234,83235,83237,83239],{"class":96,"line":1175},[94,83236,1015],{"class":104},[94,83238,51311],{"class":51277},[94,83240,51284],{"class":104},[94,83242,83243,83245,83247,83249,83251,83253],{"class":96,"line":1181},[94,83244,52121],{"class":104},[94,83246,51321],{"class":51277},[94,83248,51324],{"class":1944},[94,83250,150],{"class":104},[94,83252,51329],{"class":209},[94,83254,51284],{"class":104},[94,83256,83257,83259,83261,83263,83265,83267,83269,83271,83273],{"class":96,"line":1195},[94,83258,52121],{"class":104},[94,83260,51321],{"class":51277},[94,83262,14902],{"class":1944},[94,83264,150],{"class":104},[94,83266,51368],{"class":209},[94,83268,51348],{"class":1944},[94,83270,150],{"class":104},[94,83272,51375],{"class":209},[94,83274,51284],{"class":104},[94,83276,83277,83279,83281,83283,83285],{"class":96,"line":1201},[94,83278,52121],{"class":104},[94,83280,51384],{"class":51277},[94,83282,51387],{"class":104},[94,83284,51384],{"class":51277},[94,83286,51284],{"class":104},[94,83288,83289,83291,83293],{"class":96,"line":1292},[94,83290,52121],{"class":104},[94,83292,5108],{"class":51277},[94,83294,51284],{"class":104},[94,83296,83297,83299],{"class":96,"line":1298},[94,83298,6385],{"class":51277},[94,83300,15554],{"class":104},[94,83302,83303,83305,83307,83309],{"class":96,"line":1310},[94,83304,54672],{"class":153},[94,83306,51414],{"class":104},[94,83308,296],{"class":153},[94,83310,1271],{"class":104},[94,83312,83313,83315,83317,83319],{"class":96,"line":1593},[94,83314,54683],{"class":153},[94,83316,51414],{"class":104},[94,83318,296],{"class":153},[94,83320,1271],{"class":104},[94,83322,83323,83325,83327,83329],{"class":96,"line":1598},[94,83324,72573],{"class":153},[94,83326,51414],{"class":104},[94,83328,60482],{"class":153},[94,83330,1271],{"class":104},[94,83332,83333],{"class":96,"line":1604},[94,83334,2168],{"class":104},[94,83336,83337],{"class":96,"line":1609},[94,83338,2381],{"emptyLinePlaceholder":20},[94,83340,83341,83343],{"class":96,"line":1623},[94,83342,62100],{"class":1944},[94,83344,15554],{"class":104},[94,83346,83347,83349,83351,83353,83355],{"class":96,"line":1628},[94,83348,54748],{"class":153},[94,83350,51414],{"class":104},[94,83352,78551],{"class":153},[94,83354,51469],{"class":100},[94,83356,1271],{"class":104},[94,83358,83359,83361,83363,83365,83367,83369],{"class":96,"line":1634},[94,83360,54683],{"class":153},[94,83362,51414],{"class":104},[94,83364,416],{"class":153},[94,83366,51469],{"class":100},[94,83368,51533],{"class":153},[94,83370,1271],{"class":104},[94,83372,83373],{"class":96,"line":1655},[94,83374,2168],{"class":104},[94,83376,83377],{"class":96,"line":1660},[94,83378,2381],{"emptyLinePlaceholder":20},[94,83380,83381,83383],{"class":96,"line":1674},[94,83382,78602],{"class":1944},[94,83384,15554],{"class":104},[94,83386,83387,83389,83391,83393,83395],{"class":96,"line":1679},[94,83388,54672],{"class":153},[94,83390,51414],{"class":104},[94,83392,680],{"class":153},[94,83394,51469],{"class":100},[94,83396,1271],{"class":104},[94,83398,83399,83401,83403,83405,83407,83409,83411],{"class":96,"line":1708},[94,83400,61837],{"class":153},[94,83402,51414],{"class":104},[94,83404,28104],{"class":153},[94,83406,78657],{"class":153},[94,83408,78660],{"class":153},[94,83410,800],{"class":100},[94,83412,1271],{"class":104},[94,83414,83415,83417,83419,83421],{"class":96,"line":1713},[94,83416,54986],{"class":153},[94,83418,51414],{"class":104},[94,83420,51454],{"class":153},[94,83422,1271],{"class":104},[94,83424,83425,83427,83429,83431,83433,83435,83437],{"class":96,"line":1730},[94,83426,61954],{"class":153},[94,83428,51414],{"class":104},[94,83430,322],{"class":153},[94,83432,51469],{"class":100},[94,83434,51498],{"class":153},[94,83436,62221],{"class":153},[94,83438,1271],{"class":104},[94,83440,83441],{"class":96,"line":1735},[94,83442,2168],{"class":104},[94,83444,83445],{"class":96,"line":1740},[94,83446,2381],{"emptyLinePlaceholder":20},[94,83448,83449,83451],{"class":96,"line":1745},[94,83450,78720],{"class":1944},[94,83452,15554],{"class":104},[94,83454,83455,83457,83459,83461],{"class":96,"line":1759},[94,83456,62002],{"class":153},[94,83458,51414],{"class":104},[94,83460,62007],{"class":153},[94,83462,1271],{"class":104},[94,83464,83465,83467,83469,83471],{"class":96,"line":1764},[94,83466,54861],{"class":153},[94,83468,51414],{"class":104},[94,83470,61795],{"class":153},[94,83472,1271],{"class":104},[94,83474,83475],{"class":96,"line":2558},[94,83476,2168],{"class":104},[94,83478,83479],{"class":96,"line":2572},[94,83480,2381],{"emptyLinePlaceholder":20},[94,83482,83483,83485,83487],{"class":96,"line":2580},[94,83484,78602],{"class":1944},[94,83486,55592],{"class":51277},[94,83488,15554],{"class":104},[94,83490,83491,83493,83495,83497,83499],{"class":96,"line":2585},[94,83492,54748],{"class":153},[94,83494,51414],{"class":104},[94,83496,717],{"class":153},[94,83498,51469],{"class":100},[94,83500,1271],{"class":104},[94,83502,83503,83505,83507,83509,83511],{"class":96,"line":2591},[94,83504,54762],{"class":153},[94,83506,51414],{"class":104},[94,83508,717],{"class":153},[94,83510,51469],{"class":100},[94,83512,1271],{"class":104},[94,83514,83515,83517,83519,83521,83523],{"class":96,"line":2597},[94,83516,61727],{"class":153},[94,83518,51414],{"class":104},[94,83520,424],{"class":153},[94,83522,51469],{"class":100},[94,83524,1271],{"class":104},[94,83526,83527],{"class":96,"line":2602},[94,83528,2168],{"class":104},[94,83530,83531],{"class":96,"line":7930},[94,83532,2381],{"emptyLinePlaceholder":20},[94,83534,83535,83537,83539],{"class":96,"line":7954},[94,83536,78602],{"class":1944},[94,83538,62281],{"class":1944},[94,83540,15554],{"class":104},[94,83542,83543,83545,83547,83549,83551],{"class":96,"line":7959},[94,83544,54748],{"class":153},[94,83546,51414],{"class":104},[94,83548,1703],{"class":153},[94,83550,51469],{"class":100},[94,83552,1271],{"class":104},[94,83554,83555],{"class":96,"line":7965},[94,83556,2168],{"class":104},[94,83558,83559],{"class":96,"line":7992},[94,83560,2381],{"emptyLinePlaceholder":20},[94,83562,83563,83565,83567,83570],{"class":96,"line":7997},[94,83564,78602],{"class":1944},[94,83566,62281],{"class":1944},[94,83568,83569],{"class":1944}," .tag",[94,83571,15554],{"class":104},[94,83573,83574,83576,83578,83580],{"class":96,"line":8003},[94,83575,54986],{"class":153},[94,83577,51414],{"class":104},[94,83579,60846],{"class":153},[94,83581,1271],{"class":104},[94,83583,83584,83586,83588,83590,83592],{"class":96,"line":8015},[94,83585,54672],{"class":153},[94,83587,51414],{"class":104},[94,83589,182],{"class":153},[94,83591,51469],{"class":100},[94,83593,1271],{"class":104},[94,83595,83596,83598,83600,83602,83604],{"class":96,"line":8027},[94,83597,54899],{"class":153},[94,83599,51414],{"class":104},[94,83601,603],{"class":153},[94,83603,51469],{"class":100},[94,83605,1271],{"class":104},[94,83607,83608,83610,83612,83614],{"class":96,"line":8039},[94,83609,57393],{"class":153},[94,83611,51414],{"class":104},[94,83613,62047],{"class":153},[94,83615,1271],{"class":104},[94,83617,83618],{"class":96,"line":9698},[94,83619,2168],{"class":104},[94,83621,83622],{"class":96,"line":9723},[94,83623,2381],{"emptyLinePlaceholder":20},[94,83625,83626,83628,83630],{"class":96,"line":9746},[94,83627,78602],{"class":1944},[94,83629,78894],{"class":1944},[94,83631,31449],{"class":104},[94,83633,83634,83636,83639],{"class":96,"line":9770},[94,83635,78602],{"class":1944},[94,83637,83638],{"class":1944}," .sub-total",[94,83640,15554],{"class":104},[94,83642,83643,83645,83647,83649,83651],{"class":96,"line":9775},[94,83644,54899],{"class":153},[94,83646,51414],{"class":104},[94,83648,755],{"class":153},[94,83650,51469],{"class":100},[94,83652,1271],{"class":104},[94,83654,83655,83657,83659,83661],{"class":96,"line":9780},[94,83656,57393],{"class":153},[94,83658,51414],{"class":104},[94,83660,78917],{"class":153},[94,83662,1271],{"class":104},[94,83664,83665,83667,83669,83671],{"class":96,"line":9785},[94,83666,61814],{"class":153},[94,83668,51414],{"class":104},[94,83670,322],{"class":153},[94,83672,1271],{"class":104},[94,83674,83675],{"class":96,"line":9794},[94,83676,2168],{"class":104},[94,83678,83679],{"class":96,"line":9799},[94,83680,2381],{"emptyLinePlaceholder":20},[94,83682,83683,83685,83687],{"class":96,"line":9805},[94,83684,78602],{"class":1944},[94,83686,78934],{"class":1944},[94,83688,31449],{"class":104},[94,83690,83691,83693,83696],{"class":96,"line":9826},[94,83692,78602],{"class":1944},[94,83694,83695],{"class":1944}," .sub-total::before",[94,83697,31449],{"class":104},[94,83699,83700,83703],{"class":96,"line":9832},[94,83701,83702],{"class":1944},"    .amount::before",[94,83704,15554],{"class":104},[94,83706,83707,83709,83711,83713],{"class":96,"line":9846},[94,83708,78941],{"class":153},[94,83710,51414],{"class":104},[94,83712,78946],{"class":209},[94,83714,1271],{"class":104},[94,83716,83717,83719,83721,83723,83725],{"class":96,"line":9852},[94,83718,54899],{"class":153},[94,83720,51414],{"class":104},[94,83722,603],{"class":153},[94,83724,51469],{"class":100},[94,83726,1271],{"class":104},[94,83728,83729],{"class":96,"line":9879},[94,83730,2168],{"class":104},[94,83732,83733],{"class":96,"line":9888},[94,83734,2381],{"emptyLinePlaceholder":20},[94,83736,83737,83739,83742],{"class":96,"line":9894},[94,83738,78602],{"class":1944},[94,83740,83741],{"class":1944}," .spec",[94,83743,15554],{"class":104},[94,83745,83746,83748,83750,83752],{"class":96,"line":9902},[94,83747,61814],{"class":153},[94,83749,51414],{"class":104},[94,83751,182],{"class":153},[94,83753,1271],{"class":104},[94,83755,83756,83758,83760,83763],{"class":96,"line":9907},[94,83757,57393],{"class":153},[94,83759,51414],{"class":104},[94,83761,83762],{"class":153},"#888",[94,83764,1271],{"class":104},[94,83766,83767,83769,83771,83773,83775],{"class":96,"line":16586},[94,83768,54899],{"class":153},[94,83770,51414],{"class":104},[94,83772,654],{"class":153},[94,83774,51469],{"class":100},[94,83776,1271],{"class":104},[94,83778,83779,83781,83783,83785,83787],{"class":96,"line":16592},[94,83780,61977],{"class":153},[94,83782,51414],{"class":104},[94,83784,805],{"class":153},[94,83786,51469],{"class":100},[94,83788,1271],{"class":104},[94,83790,83791],{"class":96,"line":16615},[94,83792,2168],{"class":104},[94,83794,83795],{"class":96,"line":16621},[94,83796,2381],{"emptyLinePlaceholder":20},[94,83798,83799,83801,83804],{"class":96,"line":16644},[94,83800,78602],{"class":1944},[94,83802,83803],{"class":1944}," .count",[94,83805,15554],{"class":104},[94,83807,83808,83810,83812,83814],{"class":96,"line":16658},[94,83809,61814],{"class":153},[94,83811,51414],{"class":104},[94,83813,322],{"class":153},[94,83815,1271],{"class":104},[94,83817,83818,83820,83822,83825],{"class":96,"line":16678},[94,83819,57393],{"class":153},[94,83821,51414],{"class":104},[94,83823,83824],{"class":153},"#aaa",[94,83826,1271],{"class":104},[94,83828,83829],{"class":96,"line":16684},[94,83830,2168],{"class":104},[94,83832,83833],{"class":96,"line":16695},[94,83834,2381],{"emptyLinePlaceholder":20},[94,83836,83837,83839],{"class":96,"line":16718},[94,83838,72452],{"class":1944},[94,83840,15554],{"class":104},[94,83842,83843,83845,83847,83849,83851],{"class":96,"line":16740},[94,83844,54748],{"class":153},[94,83846,51414],{"class":104},[94,83848,78551],{"class":153},[94,83850,51469],{"class":100},[94,83852,1271],{"class":104},[94,83854,83855,83857,83859,83861,83863],{"class":96,"line":16745},[94,83856,54683],{"class":153},[94,83858,51414],{"class":104},[94,83860,296],{"class":153},[94,83862,51533],{"class":153},[94,83864,1271],{"class":104},[94,83866,83867,83869,83871,83873],{"class":96,"line":16751},[94,83868,54986],{"class":153},[94,83870,51414],{"class":104},[94,83872,51454],{"class":153},[94,83874,1271],{"class":104},[94,83876,83877,83879,83881,83883],{"class":96,"line":16765},[94,83878,54997],{"class":153},[94,83880,51414],{"class":104},[94,83882,51557],{"class":153},[94,83884,1271],{"class":104},[94,83886,83887,83890,83892,83894,83896,83898,83901],{"class":96,"line":16778},[94,83888,83889],{"class":153},"      border-top",[94,83891,51414],{"class":104},[94,83893,322],{"class":153},[94,83895,51469],{"class":100},[94,83897,51498],{"class":153},[94,83899,83900],{"class":153}," #4e4e4e",[94,83902,1271],{"class":104},[94,83904,83905,83907,83909,83911,83913],{"class":96,"line":16783},[94,83906,54672],{"class":153},[94,83908,51414],{"class":104},[94,83910,805],{"class":153},[94,83912,51469],{"class":100},[94,83914,1271],{"class":104},[94,83916,83917],{"class":96,"line":16797},[94,83918,2168],{"class":104},[94,83920,83921],{"class":96,"line":16802},[94,83922,2381],{"emptyLinePlaceholder":20},[94,83924,83925,83927,83930],{"class":96,"line":16808},[94,83926,72452],{"class":1944},[94,83928,83929],{"class":1944}," .amount",[94,83931,15554],{"class":104},[94,83933,83934,83936,83938,83940,83942],{"class":96,"line":16813},[94,83935,54899],{"class":153},[94,83937,51414],{"class":104},[94,83939,755],{"class":153},[94,83941,51469],{"class":100},[94,83943,1271],{"class":104},[94,83945,83946,83948,83950,83952],{"class":96,"line":16827},[94,83947,57393],{"class":153},[94,83949,51414],{"class":104},[94,83951,78917],{"class":153},[94,83953,1271],{"class":104},[94,83955,83956,83958,83960,83962],{"class":96,"line":16832},[94,83957,62311],{"class":153},[94,83959,51414],{"class":104},[94,83961,51466],{"class":153},[94,83963,1271],{"class":104},[94,83965,83966,83968,83970,83972,83974],{"class":96,"line":16837},[94,83967,61727],{"class":153},[94,83969,51414],{"class":104},[94,83971,761],{"class":153},[94,83973,51469],{"class":100},[94,83975,1271],{"class":104},[94,83977,83978],{"class":96,"line":16851},[94,83979,2168],{"class":104},[94,83981,83982,83984,83986],{"class":96,"line":16863},[94,83983,52394],{"class":104},[94,83985,5108],{"class":51277},[94,83987,51284],{"class":104},[94,83989,83990,83992,83994],{"class":96,"line":16868},[94,83991,51762],{"class":104},[94,83993,51311],{"class":51277},[94,83995,51284],{"class":104},[94,83997,83998],{"class":96,"line":16881},[94,83999,2381],{"emptyLinePlaceholder":20},[94,84001,84002,84004,84006],{"class":96,"line":16886},[94,84003,1015],{"class":104},[94,84005,51777],{"class":51277},[94,84007,51284],{"class":104},[94,84009,84010,84012,84014,84016,84018,84020],{"class":96,"line":16891},[94,84011,52121],{"class":104},[94,84013,51588],{"class":51277},[94,84015,53463],{"class":1944},[94,84017,150],{"class":104},[94,84019,62585],{"class":209},[94,84021,51284],{"class":104},[94,84023,84024,84026,84028],{"class":96,"line":16896},[94,84025,52394],{"class":104},[94,84027,51588],{"class":51277},[94,84029,51284],{"class":104},[94,84031,84032,84034,84036,84038,84040,84042],{"class":96,"line":16909},[94,84033,52121],{"class":104},[94,84035,51588],{"class":51277},[94,84037,53463],{"class":1944},[94,84039,150],{"class":104},[94,84041,62557],{"class":209},[94,84043,51284],{"class":104},[94,84045,84046,84048,84050,84053,84055,84057,84059,84062,84064,84066,84068,84070],{"class":96,"line":16914},[94,84047,51318],{"class":104},[94,84049,51588],{"class":51277},[94,84051,84052],{"class":104},">合计：\u003C",[94,84054,94],{"class":51277},[94,84056,53463],{"class":1944},[94,84058,150],{"class":104},[94,84060,84061],{"class":209},"\"amount\"",[94,84063,55291],{"class":104},[94,84065,94],{"class":51277},[94,84067,55291],{"class":104},[94,84069,51588],{"class":51277},[94,84071,51284],{"class":104},[94,84073,84074,84076,84078],{"class":96,"line":32616},[94,84075,52394],{"class":104},[94,84077,51588],{"class":51277},[94,84079,51284],{"class":104},[94,84081,84082,84084,84086],{"class":96,"line":32622},[94,84083,52121],{"class":104},[94,84085,51790],{"class":51277},[94,84087,51284],{"class":104},[94,84089,84090,84092,84094,84096],{"class":96,"line":32628},[94,84091,11203],{"class":100},[94,84093,79354],{"class":153},[94,84095,13546],{"class":100},[94,84097,55424],{"class":104},[94,84099,84100],{"class":96,"line":32634},[94,84101,79363],{"class":104},[94,84103,84104,84106,84108],{"class":96,"line":32640},[94,84105,79368],{"class":104},[94,84107,79371],{"class":209},[94,84109,31449],{"class":104},[94,84111,84112,84114,84116],{"class":96,"line":32651},[94,84113,79378],{"class":104},[94,84115,79381],{"class":209},[94,84117,31449],{"class":104},[94,84119,84120,84122,84125],{"class":96,"line":32657},[94,84121,79388],{"class":104},[94,84123,84124],{"class":153},"289.9",[94,84126,31449],{"class":104},[94,84128,84129,84131,84133],{"class":96,"line":32677},[94,84130,79398],{"class":104},[94,84132,79401],{"class":209},[94,84134,31449],{"class":104},[94,84136,84137,84140,84142],{"class":96,"line":32683},[94,84138,84139],{"class":104},"        count: ",[94,84141,182],{"class":153},[94,84143,31449],{"class":104},[94,84145,84146,84149,84152],{"class":96,"line":32694},[94,84147,84148],{"class":104},"        spec: { color: ",[94,84150,84151],{"class":209},"'白色'",[94,84153,55581],{"class":104},[94,84155,84156],{"class":96,"line":32700},[94,84157,77869],{"class":104},[94,84159,84160],{"class":96,"line":32706},[94,84161,79363],{"class":104},[94,84163,84164,84166,84168],{"class":96,"line":32712},[94,84165,79368],{"class":104},[94,84167,79462],{"class":209},[94,84169,31449],{"class":104},[94,84171,84172,84174,84176],{"class":96,"line":32718},[94,84173,79378],{"class":104},[94,84175,79471],{"class":209},[94,84177,31449],{"class":104},[94,84179,84180,84182,84185],{"class":96,"line":32724},[94,84181,79388],{"class":104},[94,84183,84184],{"class":153},"109.8",[94,84186,31449],{"class":104},[94,84188,84189,84191,84193],{"class":96,"line":32730},[94,84190,79398],{"class":104},[94,84192,79489],{"class":209},[94,84194,31449],{"class":104},[94,84196,84197,84199,84201],{"class":96,"line":32736},[94,84198,84139],{"class":104},[94,84200,176],{"class":153},[94,84202,31449],{"class":104},[94,84204,84205,84208,84210,84212,84214],{"class":96,"line":32756},[94,84206,84207],{"class":104},"        spec: { size: ",[94,84209,81880],{"class":209},[94,84211,55441],{"class":104},[94,84213,81885],{"class":209},[94,84215,55581],{"class":104},[94,84217,84218],{"class":96,"line":32762},[94,84219,77869],{"class":104},[94,84221,84222],{"class":96,"line":32778},[94,84223,79363],{"class":104},[94,84225,84226,84228,84230],{"class":96,"line":32784},[94,84227,79368],{"class":104},[94,84229,79506],{"class":209},[94,84231,31449],{"class":104},[94,84233,84234,84236,84238],{"class":96,"line":32798},[94,84235,79378],{"class":104},[94,84237,79515],{"class":209},[94,84239,31449],{"class":104},[94,84241,84242,84244,84247],{"class":96,"line":32804},[94,84243,79388],{"class":104},[94,84245,84246],{"class":153},"488",[94,84248,31449],{"class":104},[94,84250,84251,84253,84255],{"class":96,"line":32819},[94,84252,79398],{"class":104},[94,84254,79533],{"class":209},[94,84256,31449],{"class":104},[94,84258,84259,84261,84263],{"class":96,"line":32825},[94,84260,84139],{"class":104},[94,84262,322],{"class":153},[94,84264,31449],{"class":104},[94,84266,84267,84269,84272,84275,84278],{"class":96,"line":32834},[94,84268,84148],{"class":104},[94,84270,84271],{"class":209},"'青色'",[94,84273,84274],{"class":104},", sum: ",[94,84276,84277],{"class":209},"'一大四小'",[94,84279,55581],{"class":104},[94,84281,84282],{"class":96,"line":32840},[94,84283,77869],{"class":104},[94,84285,84286],{"class":96,"line":32849},[94,84287,79363],{"class":104},[94,84289,84290,84292,84294],{"class":96,"line":32855},[94,84291,79368],{"class":104},[94,84293,79550],{"class":209},[94,84295,31449],{"class":104},[94,84297,84298,84300,84302],{"class":96,"line":32861},[94,84299,79378],{"class":104},[94,84301,79559],{"class":209},[94,84303,31449],{"class":104},[94,84305,84306,84308,84311],{"class":96,"line":32870},[94,84307,79388],{"class":104},[94,84309,84310],{"class":153},"139",[94,84312,31449],{"class":104},[94,84314,84315,84317,84319],{"class":96,"line":32876},[94,84316,79398],{"class":104},[94,84318,79577],{"class":209},[94,84320,31449],{"class":104},[94,84322,84323,84325,84327],{"class":96,"line":32887},[94,84324,84139],{"class":104},[94,84326,322],{"class":153},[94,84328,31449],{"class":104},[94,84330,84331,84333,84336,84338,84341],{"class":96,"line":32893},[94,84332,84207],{"class":104},[94,84334,84335],{"class":209},"'小号'",[94,84337,55441],{"class":104},[94,84339,84340],{"class":209},"'紫色'",[94,84342,55447],{"class":104},[94,84344,84345,84348],{"class":96,"line":32912},[94,84346,84347],{"class":104},"        gift: ",[94,84349,84350],{"class":209},"'50g茶叶,清洗球'\n",[94,84352,84353],{"class":96,"line":32918},[94,84354,52375],{"class":104},[94,84356,84357],{"class":96,"line":32929},[94,84358,53086],{"class":104},[94,84360,84361],{"class":96,"line":32935},[94,84362,84363],{"class":163},"    \u002F\u002F  1.根据数据渲染页面\n",[94,84365,84366,84368,84370,84372,84374,84376,84378,84380,84382,84384,84386,84388],{"class":96,"line":32955},[94,84367,52384],{"class":104},[94,84369,54376],{"class":1944},[94,84371,105],{"class":104},[94,84373,79878],{"class":209},[94,84375,74226],{"class":104},[94,84377,150],{"class":100},[94,84379,80025],{"class":104},[94,84381,74021],{"class":1944},[94,84383,105],{"class":104},[94,84385,79772],{"class":5198},[94,84387,79775],{"class":100},[94,84389,15554],{"class":104},[94,84391,84392],{"class":96,"line":32971},[94,84393,84394],{"class":163},"      \u002F\u002F 对象解构\n",[94,84396,84397,84399,84401,84403,84405,84407,84409,84412,84414,84416,84418,84421,84423,84426,84428,84430],{"class":96,"line":32977},[94,84398,58205],{"class":100},[94,84400,79784],{"class":104},[94,84402,79797],{"class":153},[94,84404,12417],{"class":104},[94,84406,79787],{"class":153},[94,84408,12417],{"class":104},[94,84410,84411],{"class":153},"count",[94,84413,12417],{"class":104},[94,84415,79792],{"class":153},[94,84417,12417],{"class":104},[94,84419,84420],{"class":153},"spec",[94,84422,12417],{"class":104},[94,84424,84425],{"class":153},"gift",[94,84427,79800],{"class":104},[94,84429,150],{"class":100},[94,84431,79805],{"class":104},[94,84433,84434],{"class":96,"line":32991},[94,84435,84436],{"class":163},"      \u002F\u002F 规格文字模块处理\n",[94,84438,84439,84441,84444,84446,84448,84450,84452,84454,84456,84458],{"class":96,"line":32997},[94,84440,58205],{"class":100},[94,84442,84443],{"class":153}," text",[94,84445,13546],{"class":100},[94,84447,81915],{"class":104},[94,84449,81918],{"class":1944},[94,84451,81921],{"class":104},[94,84453,74200],{"class":1944},[94,84455,105],{"class":104},[94,84457,81928],{"class":209},[94,84459,111],{"class":104},[94,84461,84462],{"class":96,"line":33003},[94,84463,84464],{"class":163},"      \u002F\u002F 处理赠品模块\n",[94,84466,84467,84469,84471,84473,84476,84478,84480,84482,84484,84487,84489,84491,84493,84495,84497,84500,84502,84505,84507,84509,84511,84513,84515,84517],{"class":96,"line":33014},[94,84468,58205],{"class":100},[94,84470,73896],{"class":153},[94,84472,13546],{"class":100},[94,84474,84475],{"class":104}," gift ",[94,84477,1091],{"class":100},[94,84479,83089],{"class":104},[94,84481,83092],{"class":1944},[94,84483,105],{"class":104},[94,84485,84486],{"class":209},"','",[94,84488,30809],{"class":104},[94,84490,74021],{"class":1944},[94,84492,105],{"class":104},[94,84494,79772],{"class":5198},[94,84496,79775],{"class":100},[94,84498,84499],{"class":209}," `\u003Cspan class=\"tag\">【赠品】${",[94,84501,79772],{"class":104},[94,84503,84504],{"class":209},"}\u003C\u002Fspan>`",[94,84506,30809],{"class":104},[94,84508,74200],{"class":1944},[94,84510,105],{"class":104},[94,84512,74205],{"class":209},[94,84514,13696],{"class":104},[94,84516,964],{"class":100},[94,84518,70081],{"class":209},[94,84520,84521],{"class":96,"line":33020},[94,84522,84523],{"class":163},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[94,84525,84526,84528,84531,84533,84536,84538,84540,84542,84545,84547,84549,84551,84554,84556,84558],{"class":96,"line":33026},[94,84527,58205],{"class":100},[94,84529,84530],{"class":153}," subtotal",[94,84532,13546],{"class":100},[94,84534,84535],{"class":104}," ((price ",[94,84537,560],{"class":100},[94,84539,5736],{"class":153},[94,84541,6500],{"class":100},[94,84543,84544],{"class":104}," count) ",[94,84546,689],{"class":100},[94,84548,5736],{"class":153},[94,84550,30809],{"class":104},[94,84552,84553],{"class":1944},"toFixed",[94,84555,105],{"class":104},[94,84557,182],{"class":153},[94,84559,111],{"class":104},[94,84561,84562],{"class":96,"line":33036},[94,84563,2381],{"emptyLinePlaceholder":20},[94,84565,84566,84568],{"class":96,"line":33042},[94,84567,73959],{"class":100},[94,84569,70145],{"class":209},[94,84571,84572],{"class":96,"line":33053},[94,84573,84574],{"class":209},"        \u003Cdiv class=\"item\">\n",[94,84576,84577,84580,84582],{"class":96,"line":33059},[94,84578,84579],{"class":209},"          \u003Cimg src=\"${",[94,84581,79797],{"class":104},[94,84583,79829],{"class":209},[94,84585,84586,84589,84591,84594,84596],{"class":96,"line":33069},[94,84587,84588],{"class":209},"          \u003Cp class=\"name\">${",[94,84590,79787],{"class":104},[94,84592,84593],{"class":209},"}${",[94,84595,1280],{"class":104},[94,84597,79839],{"class":209},[94,84599,84600,84603,84605],{"class":96,"line":33074},[94,84601,84602],{"class":209},"          \u003Cp class=\"spec\">${",[94,84604,5169],{"class":104},[94,84606,79839],{"class":209},[94,84608,84609,84612,84614,84616,84618,84620,84622,84624],{"class":96,"line":33080},[94,84610,84611],{"class":209},"          \u003Cp class=\"price\">${",[94,84613,79792],{"class":104},[94,84615,663],{"class":209},[94,84617,84553],{"class":1944},[94,84619,105],{"class":209},[94,84621,182],{"class":153},[94,84623,534],{"class":209},[94,84625,79839],{"class":209},[94,84627,84628,84631,84633],{"class":96,"line":33129},[94,84629,84630],{"class":209},"          \u003Cp class=\"count\">x${",[94,84632,84411],{"class":104},[94,84634,79839],{"class":209},[94,84636,84637,84640,84643],{"class":96,"line":33176},[94,84638,84639],{"class":209},"          \u003Cp class=\"sub-total\">${",[94,84641,84642],{"class":104},"subtotal",[94,84644,79839],{"class":209},[94,84646,84647],{"class":96,"line":33181},[94,84648,84649],{"class":209},"        \u003C\u002Fdiv> \n",[94,84651,84652],{"class":96,"line":33187},[94,84653,84654],{"class":209},"             `\n",[94,84656,84657,84660,84662,84664,84666],{"class":96,"line":33206},[94,84658,84659],{"class":104},"    }).",[94,84661,74200],{"class":1944},[94,84663,105],{"class":104},[94,84665,74205],{"class":209},[94,84667,111],{"class":104},[94,84669,84670],{"class":96,"line":33212},[94,84671,84672],{"class":163},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[94,84674,84675,84677,84679,84681,84683,84686,84688,84691,84693,84695,84697,84700,84703,84705,84708,84710,84712,84714,84717,84719,84721,84723,84725],{"class":96,"line":33232},[94,84676,11203],{"class":100},[94,84678,62762],{"class":153},[94,84680,13546],{"class":100},[94,84682,80025],{"class":104},[94,84684,84685],{"class":1944},"reduce",[94,84687,2357],{"class":104},[94,84689,84690],{"class":5198},"prev",[94,84692,12417],{"class":104},[94,84694,79772],{"class":5198},[94,84696,13696],{"class":104},[94,84698,84699],{"class":100},"=>",[94,84701,84702],{"class":104}," prev ",[94,84704,586],{"class":100},[94,84706,84707],{"class":104}," (item.price ",[94,84709,560],{"class":100},[94,84711,5736],{"class":153},[94,84713,6500],{"class":100},[94,84715,84716],{"class":104}," item.count) ",[94,84718,689],{"class":100},[94,84720,5736],{"class":153},[94,84722,12417],{"class":104},[94,84724,296],{"class":153},[94,84726,111],{"class":104},[94,84728,84729,84731,84733,84735,84738,84740,84742,84745,84747,84749,84751],{"class":96,"line":33238},[94,84730,52384],{"class":104},[94,84732,54376],{"class":1944},[94,84734,105],{"class":104},[94,84736,84737],{"class":209},"'.amount'",[94,84739,74226],{"class":104},[94,84741,150],{"class":100},[94,84743,84744],{"class":104}," total.",[94,84746,84553],{"class":1944},[94,84748,105],{"class":104},[94,84750,182],{"class":153},[94,84752,111],{"class":104},[94,84754,84755,84757,84759],{"class":96,"line":33244},[94,84756,52394],{"class":104},[94,84758,51790],{"class":51277},[94,84760,51284],{"class":104},[94,84762,84763,84765,84767],{"class":96,"line":33254},[94,84764,51762],{"class":104},[94,84766,51777],{"class":51277},[94,84768,51284],{"class":104},[94,84770,84771],{"class":96,"line":33259},[94,84772,2381],{"emptyLinePlaceholder":20},[94,84774,84775,84777,84779],{"class":96,"line":33265},[94,84776,51762],{"class":104},[94,84778,50612],{"class":51277},[94,84780,51284],{"class":104},[35,84782,84784],{"id":84783},"_411-编程思想","4.11 编程思想",[65,84786,84788],{"id":84787},"_4111-面向过程介绍","4.11.1 面向过程介绍",[40,84790,84791,84794],{},[254,84792,84793],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[40,84796,84797],{},"调用就可以了",[40,84799,84800],{},[1443,84801],{"alt":14,"src":84802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[65,84804,84806],{"id":84805},"_4112-面向对象","4.11.2 面向对象",[40,84808,84809],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[40,84811,84812],{},[1443,84813],{"alt":14,"src":84814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[40,84816,84817],{},"面向对象的特性：",[1112,84819,84820,84823,84826],{},[51,84821,84822],{},"封装性",[51,84824,84825],{},"继承性",[51,84827,84828],{},"多态性",[65,84830,84832],{"id":84831},"_4113-两者比较","4.11.3 两者比较",[40,84834,84835],{},[1443,84836],{"alt":14,"src":84837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[35,84839,84841],{"id":84840},"_412-构造函数回顾","4.12 构造函数回顾",[40,84843,84844],{},[1443,84845],{"alt":14,"src":84846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[40,84848,84849],{},[1443,84850],{"alt":14,"src":84851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[40,84853,84854],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[40,84856,84857],{},[1443,84858],{"alt":14,"src":84859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[35,84861,84863],{"id":84862},"_413-原型","4.13 原型",[65,84865,84867],{"id":84866},"_4131-原型对象的认识","4.13.1 原型对象的认识",[40,84869,84870],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[40,84872,84873],{},[1443,84874],{"alt":14,"src":84875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[40,84877,84878],{},[1443,84879],{"alt":14,"src":84880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[40,84882,84883],{},"原型是构造函数的属性，它也是一个对象",[40,84885,84886],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[40,84888,84889],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[85,84891,84893],{"className":53044,"code":84892,"language":53046,"meta":14,"style":14},"\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",[91,84894,84895,84903,84908,84916,84921,84926,84931,84936,84941,84945,84949,84953,84958,84963,84967,84972,84977,84982,84987,84992,84996,85004],{"__ignoreMap":14},[94,84896,84897,84899,84901],{"class":96,"line":97},[94,84898,1015],{"class":104},[94,84900,51777],{"class":51277},[94,84902,51284],{"class":104},[94,84904,84905],{"class":96,"line":15},[94,84906,84907],{"class":163},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[94,84909,84910,84912,84914],{"class":96,"line":1160},[94,84911,52121],{"class":104},[94,84913,51790],{"class":51277},[94,84915,51284],{"class":104},[94,84917,84918],{"class":96,"line":1175},[94,84919,84920],{"class":104},"    function Star(uname, age) {\n",[94,84922,84923],{"class":96,"line":1181},[94,84924,84925],{"class":104},"      this.uname = uname,\n",[94,84927,84928],{"class":96,"line":1195},[94,84929,84930],{"class":104},"        this.age = age\n",[94,84932,84933],{"class":96,"line":1201},[94,84934,84935],{"class":104},"      \u002F\u002F this.sing = function () {\n",[94,84937,84938],{"class":96,"line":1292},[94,84939,84940],{"class":104},"      \u002F\u002F   console.log('唱歌')\n",[94,84942,84943],{"class":96,"line":1298},[94,84944,2381],{"emptyLinePlaceholder":20},[94,84946,84947],{"class":96,"line":1310},[94,84948,60014],{"class":104},[94,84950,84951],{"class":96,"line":1593},[94,84952,2168],{"class":104},[94,84954,84955],{"class":96,"line":1598},[94,84956,84957],{"class":104},"    Star.prototype.sing = function () {\n",[94,84959,84960],{"class":96,"line":1604},[94,84961,84962],{"class":104},"      console.log('唱歌')\n",[94,84964,84965],{"class":96,"line":1609},[94,84966,2168],{"class":104},[94,84968,84969],{"class":96,"line":1623},[94,84970,84971],{"class":104},"    \u002F\u002F console.dir(Star.prototype)\n",[94,84973,84974],{"class":96,"line":1628},[94,84975,84976],{"class":104},"    const pink = new Star('pink', 18)\n",[94,84978,84979],{"class":96,"line":1634},[94,84980,84981],{"class":104},"    const red = new Star('red', 20)\n",[94,84983,84984],{"class":96,"line":1655},[94,84985,84986],{"class":104},"    pink.sing()\n",[94,84988,84989],{"class":96,"line":1660},[94,84990,84991],{"class":104},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[94,84993,84994],{"class":96,"line":1674},[94,84995,2381],{"emptyLinePlaceholder":20},[94,84997,84998,85000,85002],{"class":96,"line":1679},[94,84999,52394],{"class":104},[94,85001,51790],{"class":51277},[94,85003,51284],{"class":104},[94,85005,85006,85008,85010],{"class":96,"line":1708},[94,85007,51762],{"class":104},[94,85009,51777],{"class":51277},[94,85011,51284],{"class":104},[40,85013,85014],{},[1443,85015],{"alt":14,"src":85016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[85,85018,85020],{"className":53044,"code":85019,"language":53046,"meta":14,"style":14},"\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",[91,85021,85022,85030,85038,85043,85048,85053,85058,85062,85067,85072,85077,85081,85086,85090,85094,85099,85103,85111],{"__ignoreMap":14},[94,85023,85024,85026,85028],{"class":96,"line":97},[94,85025,1015],{"class":104},[94,85027,51777],{"class":51277},[94,85029,51284],{"class":104},[94,85031,85032,85034,85036],{"class":96,"line":15},[94,85033,52121],{"class":104},[94,85035,51790],{"class":51277},[94,85037,51284],{"class":104},[94,85039,85040],{"class":96,"line":1160},[94,85041,85042],{"class":104},"    let that\n",[94,85044,85045],{"class":96,"line":1175},[94,85046,85047],{"class":104},"    function Star(uname) {\n",[94,85049,85050],{"class":96,"line":1181},[94,85051,85052],{"class":104},"      this.uname = uname\n",[94,85054,85055],{"class":96,"line":1195},[94,85056,85057],{"class":104},"      that = this\n",[94,85059,85060],{"class":96,"line":1201},[94,85061,2168],{"class":104},[94,85063,85064],{"class":96,"line":1292},[94,85065,85066],{"class":104},"    \u002F\u002F 实例对象是 ldh\n",[94,85068,85069],{"class":96,"line":1298},[94,85070,85071],{"class":104},"    const ldh = new Star('刘德华')\n",[94,85073,85074],{"class":96,"line":1310},[94,85075,85076],{"class":104},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[94,85078,85079],{"class":96,"line":1593},[94,85080,2381],{"emptyLinePlaceholder":20},[94,85082,85083],{"class":96,"line":1598},[94,85084,85085],{"class":104},"    Star.sing = function () {\n",[94,85087,85088],{"class":96,"line":1604},[94,85089,84962],{"class":104},[94,85091,85092],{"class":96,"line":1609},[94,85093,2168],{"class":104},[94,85095,85096],{"class":96,"line":1623},[94,85097,85098],{"class":104},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[94,85100,85101],{"class":96,"line":1628},[94,85102,2381],{"emptyLinePlaceholder":20},[94,85104,85105,85107,85109],{"class":96,"line":1634},[94,85106,52394],{"class":104},[94,85108,51790],{"class":51277},[94,85110,51284],{"class":104},[94,85112,85113,85115,85117],{"class":96,"line":1655},[94,85114,51762],{"class":104},[94,85116,51777],{"class":51277},[94,85118,51284],{"class":104},[40,85120,85121],{},"构造函数的this指向的是实例对象；",[40,85123,85124],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[65,85126,85128],{"id":85127},"_4132-数组扩展方法","4.13.2 数组扩展方法",[40,85130,85131],{},[1443,85132],{"alt":14,"src":85133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[85,85135,85137],{"className":53044,"code":85136,"language":53046,"meta":14,"style":14},"\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",[91,85138,85139,85147,85155,85160,85165,85170,85175,85180,85185,85190,85195,85200,85205,85209,85214,85219,85224,85229,85233,85238,85243,85248,85253,85257,85262,85267,85272,85277,85281,85286,85290,85298],{"__ignoreMap":14},[94,85140,85141,85143,85145],{"class":96,"line":97},[94,85142,1015],{"class":104},[94,85144,51777],{"class":51277},[94,85146,51284],{"class":104},[94,85148,85149,85151,85153],{"class":96,"line":15},[94,85150,52121],{"class":104},[94,85152,51790],{"class":51277},[94,85154,51284],{"class":104},[94,85156,85157],{"class":96,"line":1160},[94,85158,85159],{"class":104},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[94,85161,85162],{"class":96,"line":1175},[94,85163,85164],{"class":104},"    const arr = [1, 2, 3]\n",[94,85166,85167],{"class":96,"line":1181},[94,85168,85169],{"class":104},"    \u002F\u002F 自己定义数组的扩展方法\n",[94,85171,85172],{"class":96,"line":1195},[94,85173,85174],{"class":104},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[94,85176,85177],{"class":96,"line":1201},[94,85178,85179],{"class":104},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[94,85181,85182],{"class":96,"line":1292},[94,85183,85184],{"class":104},"    \u002F\u002F ①.最大值\n",[94,85186,85187],{"class":96,"line":1298},[94,85188,85189],{"class":104},"    Array.prototype.max = function () {\n",[94,85191,85192],{"class":96,"line":1310},[94,85193,85194],{"class":104},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[94,85196,85197],{"class":96,"line":1593},[94,85198,85199],{"class":104},"      return Math.max(...this)\n",[94,85201,85202],{"class":96,"line":1598},[94,85203,85204],{"class":104},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[94,85206,85207],{"class":96,"line":1604},[94,85208,2168],{"class":104},[94,85210,85211],{"class":96,"line":1609},[94,85212,85213],{"class":104},"    console.log(arr.max())\n",[94,85215,85216],{"class":96,"line":1623},[94,85217,85218],{"class":104},"    \u002F\u002F ②最小值\n",[94,85220,85221],{"class":96,"line":1628},[94,85222,85223],{"class":104},"    Array.prototype.min = function () {\n",[94,85225,85226],{"class":96,"line":1634},[94,85227,85228],{"class":104},"      return Math.min(...this)\n",[94,85230,85231],{"class":96,"line":1655},[94,85232,2168],{"class":104},[94,85234,85235],{"class":96,"line":1660},[94,85236,85237],{"class":104},"    console.log(arr.min())\n",[94,85239,85240],{"class":96,"line":1674},[94,85241,85242],{"class":104},"    \u002F\u002F③求和\n",[94,85244,85245],{"class":96,"line":1679},[94,85246,85247],{"class":104},"    Array.prototype.sum = function () {\n",[94,85249,85250],{"class":96,"line":1708},[94,85251,85252],{"class":104},"      return this.reduce((prev, current) => prev + current, 0)\n",[94,85254,85255],{"class":96,"line":1713},[94,85256,2168],{"class":104},[94,85258,85259],{"class":96,"line":1730},[94,85260,85261],{"class":104},"    console.log(arr.sum())\n",[94,85263,85264],{"class":96,"line":1735},[94,85265,85266],{"class":104},"    \u002F\u002F ③排序\n",[94,85268,85269],{"class":96,"line":1740},[94,85270,85271],{"class":104},"    Array.prototype.rever = function () {\n",[94,85273,85274],{"class":96,"line":1745},[94,85275,85276],{"class":104},"      return this.reverse()\n",[94,85278,85279],{"class":96,"line":1759},[94,85280,2168],{"class":104},[94,85282,85283],{"class":96,"line":1764},[94,85284,85285],{"class":104},"    console.log(arr.rever())\n",[94,85287,85288],{"class":96,"line":2558},[94,85289,2381],{"emptyLinePlaceholder":20},[94,85291,85292,85294,85296],{"class":96,"line":2572},[94,85293,52394],{"class":104},[94,85295,51790],{"class":51277},[94,85297,51284],{"class":104},[94,85299,85300,85302,85304],{"class":96,"line":2580},[94,85301,51762],{"class":104},[94,85303,51777],{"class":51277},[94,85305,51284],{"class":104},[40,85307,85308],{},[1443,85309],{"alt":14,"src":85310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[65,85312,85314],{"id":85313},"_4133-constructor-属性","4.13.3 constructor 属性",[40,85316,85317],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[40,85319,85320],{},[1443,85321],{"alt":14,"src":85322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[85,85324,85326],{"className":53044,"code":85325,"language":53046,"meta":14,"style":14},"\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",[91,85327,85328,85336,85344,85349,85354,85358,85363,85368,85373,85381],{"__ignoreMap":14},[94,85329,85330,85332,85334],{"class":96,"line":97},[94,85331,1015],{"class":104},[94,85333,51777],{"class":51277},[94,85335,51284],{"class":104},[94,85337,85338,85340,85342],{"class":96,"line":15},[94,85339,52121],{"class":104},[94,85341,51790],{"class":51277},[94,85343,51284],{"class":104},[94,85345,85346],{"class":96,"line":1160},[94,85347,85348],{"class":104},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[94,85350,85351],{"class":96,"line":1175},[94,85352,85353],{"class":104},"    function Star() {\n",[94,85355,85356],{"class":96,"line":1181},[94,85357,2168],{"class":104},[94,85359,85360],{"class":96,"line":1195},[94,85361,85362],{"class":104},"    const ldh = new Star()\n",[94,85364,85365],{"class":96,"line":1201},[94,85366,85367],{"class":104},"    console.log(Star.prototype)\n",[94,85369,85370],{"class":96,"line":1292},[94,85371,85372],{"class":104},"    console.log(Star.prototype.constructor === Star)\n",[94,85374,85375,85377,85379],{"class":96,"line":1298},[94,85376,52394],{"class":104},[94,85378,51790],{"class":51277},[94,85380,51284],{"class":104},[94,85382,85383,85385,85387],{"class":96,"line":1310},[94,85384,51762],{"class":104},[94,85386,51777],{"class":51277},[94,85388,51284],{"class":104},[40,85390,85391],{},[1443,85392],{"alt":14,"src":85393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[40,85395,85396],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[85,85398,85400],{"className":53044,"code":85399,"language":53046,"meta":14,"style":14},"  \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",[91,85401,85402,85410,85414,85418,85422,85427,85432,85437,85441,85446,85451,85456,85461,85466,85471,85475,85479,85484,85489,85494,85498,85503,85508,85512,85516,85520],{"__ignoreMap":14},[94,85403,85404,85406,85408],{"class":96,"line":97},[94,85405,52121],{"class":104},[94,85407,51790],{"class":51277},[94,85409,51284],{"class":104},[94,85411,85412],{"class":96,"line":15},[94,85413,85348],{"class":104},[94,85415,85416],{"class":96,"line":1160},[94,85417,85353],{"class":104},[94,85419,85420],{"class":96,"line":1175},[94,85421,2168],{"class":104},[94,85423,85424],{"class":96,"line":1181},[94,85425,85426],{"class":104},"    \u002F\u002F const ldh = new Star()\n",[94,85428,85429],{"class":96,"line":1195},[94,85430,85431],{"class":104},"    \u002F\u002F console.log(Star.prototype)\n",[94,85433,85434],{"class":96,"line":1201},[94,85435,85436],{"class":104},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[94,85438,85439],{"class":96,"line":1292},[94,85440,2381],{"emptyLinePlaceholder":20},[94,85442,85443],{"class":96,"line":1298},[94,85444,85445],{"class":104},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[94,85447,85448],{"class":96,"line":1310},[94,85449,85450],{"class":104},"    \u002F\u002F Star.prototype.sing = function () {\n",[94,85452,85453],{"class":96,"line":1593},[94,85454,85455],{"class":104},"    \u002F\u002F   console.log('唱歌')\n",[94,85457,85458],{"class":96,"line":1598},[94,85459,85460],{"class":104},"    \u002F\u002F }\n",[94,85462,85463],{"class":96,"line":1604},[94,85464,85465],{"class":104},"    \u002F\u002F Star.prototype.dance = function () {\n",[94,85467,85468],{"class":96,"line":1609},[94,85469,85470],{"class":104},"    \u002F\u002F   console.log('跳舞')\n",[94,85472,85473],{"class":96,"line":1623},[94,85474,85460],{"class":104},[94,85476,85477],{"class":96,"line":1628},[94,85478,85367],{"class":104},[94,85480,85481],{"class":96,"line":1634},[94,85482,85483],{"class":104},"    Star.prototype = {\n",[94,85485,85486],{"class":96,"line":1655},[94,85487,85488],{"class":104},"      sing: function () {\n",[94,85490,85491],{"class":96,"line":1660},[94,85492,85493],{"class":104},"        console.log('唱歌')\n",[94,85495,85496],{"class":96,"line":1674},[94,85497,77869],{"class":104},[94,85499,85500],{"class":96,"line":1679},[94,85501,85502],{"class":104},"      dance: function () {\n",[94,85504,85505],{"class":96,"line":1708},[94,85506,85507],{"class":104},"        console.log('跳舞')\n",[94,85509,85510],{"class":96,"line":1713},[94,85511,52375],{"class":104},[94,85513,85514],{"class":96,"line":1730},[94,85515,2168],{"class":104},[94,85517,85518],{"class":96,"line":1735},[94,85519,85367],{"class":104},[94,85521,85522,85524,85526],{"class":96,"line":1740},[94,85523,52394],{"class":104},[94,85525,51790],{"class":51277},[94,85527,51284],{"class":104},[40,85529,85530],{},"进行输出结果后会发现：",[40,85532,85533],{},[1443,85534],{"alt":14,"src":85535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[40,85537,85538],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[40,85540,85541],{},"所以，要重新指回创造这个原型对象的构造函数",[85,85543,85545],{"className":71190,"code":85544,"language":71192,"meta":14,"style":14},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[91,85546,85547,85561,85566,85571,85582,85595,85600,85611,85625,85629],{"__ignoreMap":14},[94,85548,85549,85552,85554,85557,85559],{"class":96,"line":97},[94,85550,85551],{"class":153},"Star",[94,85553,663],{"class":104},[94,85555,85556],{"class":153},"prototype",[94,85558,13546],{"class":100},[94,85560,15554],{"class":104},[94,85562,85563],{"class":96,"line":15},[94,85564,85565],{"class":163},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[94,85567,85568],{"class":96,"line":1160},[94,85569,85570],{"class":104},"  constructor: Star,\n",[94,85572,85573,85576,85578,85580],{"class":96,"line":1175},[94,85574,85575],{"class":1944},"  sing",[94,85577,51414],{"class":104},[94,85579,54426],{"class":100},[94,85581,54429],{"class":104},[94,85583,85584,85586,85588,85590,85593],{"class":96,"line":1181},[94,85585,73730],{"class":104},[94,85587,58224],{"class":1944},[94,85589,105],{"class":104},[94,85591,85592],{"class":209},"'唱歌'",[94,85594,111],{"class":104},[94,85596,85597],{"class":96,"line":1195},[94,85598,85599],{"class":104},"   },\n",[94,85601,85602,85605,85607,85609],{"class":96,"line":1201},[94,85603,85604],{"class":1944},"   dance",[94,85606,51414],{"class":104},[94,85608,54426],{"class":100},[94,85610,54429],{"class":104},[94,85612,85613,85616,85618,85620,85623],{"class":96,"line":1292},[94,85614,85615],{"class":104},"     console.",[94,85617,58224],{"class":1944},[94,85619,105],{"class":104},[94,85621,85622],{"class":209},"'跳舞'",[94,85624,111],{"class":104},[94,85626,85627],{"class":96,"line":1298},[94,85628,4290],{"class":104},[94,85630,85631],{"class":96,"line":1310},[94,85632,1546],{"class":104},[40,85634,85635],{},[1443,85636],{"alt":14,"src":85637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[40,85639,85640],{},"总结1：",[40,85642,85643],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[40,85645,85646],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[40,85648,85649],{},"constructor指的是他的来源",[40,85651,85652],{},[1443,85653],{"alt":14,"src":85654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[40,85656,85657],{},[1443,85658],{"alt":14,"src":85659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[40,85661,85662],{},"总结2：",[40,85664,85665],{},[1443,85666],{"alt":14,"src":85667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[40,85669,85670],{},[1443,85671],{"alt":14,"src":85672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[40,85674,85675],{},[1443,85676],{"alt":14,"src":85677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[65,85679,85681],{"id":85680},"_4134-对象原型","4.13.4 对象原型",[40,85683,85684],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[40,85686,85687],{},"对象原型就是__proto__这个属性",[40,85689,85690],{},[1443,85691],{"alt":14,"src":85692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[40,85694,85695],{},[1443,85696],{"alt":14,"src":85697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[40,85699,85700],{},[1443,85701],{"alt":14,"src":85702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[40,85704,85705],{},[1443,85706],{"alt":14,"src":85707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[85,85709,85711],{"className":53044,"code":85710,"language":53046,"meta":14,"style":14},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[91,85712,85713,85721,85729,85733,85737,85741,85746,85754],{"__ignoreMap":14},[94,85714,85715,85717,85719],{"class":96,"line":97},[94,85716,1015],{"class":104},[94,85718,51777],{"class":51277},[94,85720,51284],{"class":104},[94,85722,85723,85725,85727],{"class":96,"line":15},[94,85724,52121],{"class":104},[94,85726,51790],{"class":51277},[94,85728,51284],{"class":104},[94,85730,85731],{"class":96,"line":1160},[94,85732,85353],{"class":104},[94,85734,85735],{"class":96,"line":1175},[94,85736,2168],{"class":104},[94,85738,85739],{"class":96,"line":1181},[94,85740,85362],{"class":104},[94,85742,85743],{"class":96,"line":1195},[94,85744,85745],{"class":104},"    console.log(ldh)\n",[94,85747,85748,85750,85752],{"class":96,"line":1201},[94,85749,52394],{"class":104},[94,85751,51790],{"class":51277},[94,85753,51284],{"class":104},[94,85755,85756,85758,85760],{"class":96,"line":1292},[94,85757,51762],{"class":104},[94,85759,51777],{"class":51277},[94,85761,51284],{"class":104},[40,85763,85764],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[40,85766,85767],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[40,85769,85770],{},[1443,85771],{"alt":14,"src":85772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[40,85774,85775],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[40,85777,85778],{},"对象原型指向原型对象",[40,85780,85781],{},[1443,85782],{"alt":14,"src":85783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[40,85785,85786],{},[1443,85787],{"alt":14,"src":85788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[40,85790,85791],{},[1443,85792],{"alt":14,"src":85793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[65,85795,85797],{"id":85796},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[40,85799,85800],{},[1443,85801],{"alt":14,"src":85802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[48,85804,85805,85808,85811,85814],{},[51,85806,85807],{},"构造函数通过new的形式实例化得到实例对象",[51,85809,85810],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[51,85812,85813],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[51,85815,85816],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[40,85818,85819],{},[1443,85820],{"alt":14,"src":85821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[40,85823,85824],{},"题目梳理：",[40,85826,85827],{},[1443,85828],{"alt":14,"src":85829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[65,85831,85833],{"id":85832},"_4136-原型继承","4.13.6 原型继承",[40,85835,85836],{},[1443,85837],{"alt":14,"src":85838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[40,85840,85841],{},[1443,85842],{"alt":14,"src":85843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[40,85845,85846],{},[1443,85847],{"alt":14,"src":85848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[40,85850,85851],{},[1443,85852],{"alt":14,"src":85853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[40,85855,85856],{},[1443,85857],{"alt":14,"src":85858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[40,85860,85861],{},[1443,85862],{"alt":14,"src":85863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[40,85865,85866],{},[1443,85867],{"alt":14,"src":85868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[40,85870,85871],{},[1443,85872],{"alt":14,"src":85873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[40,85875,85876],{},"回顾：构造函数每次new得到对象都是不同的",[65,85878,85880],{"id":85879},"_4137-原型链","4.13.7 原型链",[40,85882,85883],{},[1443,85884],{"alt":14,"src":85885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[40,85887,85888],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[40,85890,85891],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[40,85893,85894],{},"大哥是Object",[40,85896,85897],{},[1443,85898],{"alt":14,"src":85899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[40,85901,85902],{},[1443,85903],{"alt":14,"src":85904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[40,85906,85907],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[40,85909,85910],{},"万物皆对象",[65,85912,85914],{"id":85913},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[40,85916,85917],{},"模态框",[40,85919,85920],{},"以后遇见这个效果直接使用这个就行",[40,85922,85923],{},[1443,85924],{"alt":14,"src":85925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[40,85927,85928],{},[1443,85929],{"alt":14,"src":85930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[40,85932,85933],{},[1443,85934],{"alt":14,"src":85935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[40,85937,85938],{},[1443,85939],{"alt":14,"src":85940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[40,85942,85943],{},"补充知识点：",[48,85945,85946],{},[51,85947,85948],{},"append()",[40,85950,85951],{},[1443,85952],{"alt":14,"src":85953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[85,85955,85957],{"className":50610,"code":85956,"language":50612,"meta":14,"style":14},"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",[91,85958,85959,85964,85969,85974,85978,85982,85986,85991,85996,86001,86005],{"__ignoreMap":14},[94,85960,85961],{"class":96,"line":97},[94,85962,85963],{"class":104},"append(param1)\n",[94,85965,85966],{"class":96,"line":15},[94,85967,85968],{"class":104},"append(param1, param2)\n",[94,85970,85971],{"class":96,"line":1160},[94,85972,85973],{"class":104},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[94,85975,85976],{"class":96,"line":1175},[94,85977,2381],{"emptyLinePlaceholder":20},[94,85979,85980],{"class":96,"line":1181},[94,85981,2381],{"emptyLinePlaceholder":20},[94,85983,85984],{"class":96,"line":1195},[94,85985,2381],{"emptyLinePlaceholder":20},[94,85987,85988],{"class":96,"line":1201},[94,85989,85990],{"class":104},"let div = document.createElement(\"div\");\n",[94,85992,85993],{"class":96,"line":1292},[94,85994,85995],{"class":104},"let p = document.createElement(\"p\");\n",[94,85997,85998],{"class":96,"line":1298},[94,85999,86000],{"class":104},"div.append(p);\n",[94,86002,86003],{"class":96,"line":1310},[94,86004,2381],{"emptyLinePlaceholder":20},[94,86006,86007,86010,86012],{"class":96,"line":1593},[94,86008,86009],{"class":104},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[94,86011,40],{"class":51277},[94,86013,86014],{"class":104},"> ]\n",[48,86016,86017],{"start":15},[51,86018,86019],{},"remove()",[40,86021,86022],{},"自己删自己",[40,86024,86025],{},[1443,86026],{"alt":14,"src":86027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[85,86029,86031],{"className":50610,"code":86030,"language":50612,"meta":14,"style":14},"\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",[91,86032,86033,86043,86057,86061,86069,86083,86103,86115,86123,86130,86142,86155,86190,86202,86213,86225,86237,86249,86276,86286,86290,86294,86303,86315,86329,86339,86351,86355,86359,86369,86380,86390,86400,86413,86426,86436,86440,86444,86453,86463,86475,86479,86483,86492,86502,86512,86524,86528,86532,86542,86558,86569,86579,86589,86601,86613,86625,86629,86633,86646,86657,86661,86669,86677,86681,86689,86709,86729,86737,86742,86768,86773,86778,86797,86802,86814,86819,86830,86840,86850,86855,86860,86864,86869,86874,86879,86899,86904,86924,86929,86943,86948,86953,86958,86974,86978,86983,87012,87017,87022,87027,87038,87042,87046,87050,87055,87080,87085,87110,87115,87124,87128,87133,87158,87162,87187,87191,87200,87204,87209,87227,87237,87241,87249,87257,87261],{"__ignoreMap":14},[94,86034,86035,86037,86039,86041],{"class":96,"line":97},[94,86036,51274],{"class":104},[94,86038,51278],{"class":51277},[94,86040,51281],{"class":1944},[94,86042,51284],{"class":104},[94,86044,86045,86047,86049,86051,86053,86055],{"class":96,"line":15},[94,86046,1015],{"class":104},[94,86048,50612],{"class":51277},[94,86050,51293],{"class":1944},[94,86052,150],{"class":104},[94,86054,51298],{"class":209},[94,86056,51284],{"class":104},[94,86058,86059],{"class":96,"line":1160},[94,86060,2381],{"emptyLinePlaceholder":20},[94,86062,86063,86065,86067],{"class":96,"line":1175},[94,86064,1015],{"class":104},[94,86066,51311],{"class":51277},[94,86068,51284],{"class":104},[94,86070,86071,86073,86075,86077,86079,86081],{"class":96,"line":1181},[94,86072,52121],{"class":104},[94,86074,51321],{"class":51277},[94,86076,51324],{"class":1944},[94,86078,150],{"class":104},[94,86080,51329],{"class":209},[94,86082,51284],{"class":104},[94,86084,86085,86087,86089,86091,86093,86095,86097,86099,86101],{"class":96,"line":1195},[94,86086,52121],{"class":104},[94,86088,51321],{"class":51277},[94,86090,14902],{"class":1944},[94,86092,150],{"class":104},[94,86094,51368],{"class":209},[94,86096,51348],{"class":1944},[94,86098,150],{"class":104},[94,86100,51375],{"class":209},[94,86102,51284],{"class":104},[94,86104,86105,86107,86109,86111,86113],{"class":96,"line":1201},[94,86106,52121],{"class":104},[94,86108,51384],{"class":51277},[94,86110,51387],{"class":104},[94,86112,51384],{"class":51277},[94,86114,51284],{"class":104},[94,86116,86117,86119,86121],{"class":96,"line":1292},[94,86118,52121],{"class":104},[94,86120,5108],{"class":51277},[94,86122,51284],{"class":104},[94,86124,86125,86128],{"class":96,"line":1298},[94,86126,86127],{"class":1944},"    .modal",[94,86129,15554],{"class":104},[94,86131,86132,86134,86136,86138,86140],{"class":96,"line":1310},[94,86133,54748],{"class":153},[94,86135,51414],{"class":104},[94,86137,3954],{"class":153},[94,86139,51469],{"class":100},[94,86141,1271],{"class":104},[94,86143,86144,86147,86149,86151,86153],{"class":96,"line":1593},[94,86145,86146],{"class":153},"      min-height",[94,86148,51414],{"class":104},[94,86150,416],{"class":153},[94,86152,51469],{"class":100},[94,86154,1271],{"class":104},[94,86156,86157,86159,86161,86163,86165,86167,86169,86171,86173,86175,86177,86179,86181,86183,86185,86188],{"class":96,"line":1598},[94,86158,78727],{"class":153},[94,86160,51414],{"class":104},[94,86162,296],{"class":153},[94,86164,4074],{"class":153},[94,86166,2019],{"class":153},[94,86168,51469],{"class":100},[94,86170,78744],{"class":153},[94,86172,105],{"class":104},[94,86174,296],{"class":153},[94,86176,12417],{"class":104},[94,86178,296],{"class":153},[94,86180,12417],{"class":104},[94,86182,296],{"class":153},[94,86184,12417],{"class":104},[94,86186,86187],{"class":153},"0.1",[94,86189,2700],{"class":104},[94,86191,86192,86194,86196,86198,86200],{"class":96,"line":1604},[94,86193,55111],{"class":153},[94,86195,51414],{"class":104},[94,86197,398],{"class":153},[94,86199,51469],{"class":100},[94,86201,1271],{"class":104},[94,86203,86204,86206,86208,86211],{"class":96,"line":1609},[94,86205,54736],{"class":153},[94,86207,51414],{"class":104},[94,86209,86210],{"class":153},"fixed",[94,86212,1271],{"class":104},[94,86214,86215,86218,86220,86223],{"class":96,"line":1623},[94,86216,86217],{"class":153},"      z-index",[94,86219,51414],{"class":104},[94,86221,86222],{"class":153},"999",[94,86224,1271],{"class":104},[94,86226,86227,86229,86231,86233,86235],{"class":96,"line":1628},[94,86228,54815],{"class":153},[94,86230,51414],{"class":104},[94,86232,761],{"class":153},[94,86234,433],{"class":100},[94,86236,1271],{"class":104},[94,86238,86239,86241,86243,86245,86247],{"class":96,"line":1634},[94,86240,54924],{"class":153},[94,86242,51414],{"class":104},[94,86244,761],{"class":153},[94,86246,433],{"class":100},[94,86248,1271],{"class":104},[94,86250,86251,86253,86255,86257,86259,86262,86264,86266,86268,86270,86272,86274],{"class":96,"line":1655},[94,86252,78768],{"class":153},[94,86254,51414],{"class":104},[94,86256,78773],{"class":153},[94,86258,105],{"class":104},[94,86260,86261],{"class":153},"-50",[94,86263,433],{"class":100},[94,86265,12417],{"class":104},[94,86267,86261],{"class":153},[94,86269,433],{"class":100},[94,86271,12417],{"class":104},[94,86273,296],{"class":153},[94,86275,2700],{"class":104},[94,86277,86278,86280,86282,86284],{"class":96,"line":1660},[94,86279,54861],{"class":153},[94,86281,51414],{"class":104},[94,86283,60819],{"class":153},[94,86285,1271],{"class":104},[94,86287,86288],{"class":96,"line":1674},[94,86289,2168],{"class":104},[94,86291,86292],{"class":96,"line":1679},[94,86293,2381],{"emptyLinePlaceholder":20},[94,86295,86296,86298,86301],{"class":96,"line":1708},[94,86297,86127],{"class":1944},[94,86299,86300],{"class":1944}," .header",[94,86302,15554],{"class":104},[94,86304,86305,86307,86309,86311,86313],{"class":96,"line":1713},[94,86306,57336],{"class":153},[94,86308,51414],{"class":104},[94,86310,506],{"class":153},[94,86312,51469],{"class":100},[94,86314,1271],{"class":104},[94,86316,86317,86319,86321,86323,86325,86327],{"class":96,"line":1730},[94,86318,54672],{"class":153},[94,86320,51414],{"class":104},[94,86322,296],{"class":153},[94,86324,2019],{"class":153},[94,86326,51469],{"class":100},[94,86328,1271],{"class":104},[94,86330,86331,86333,86335,86337],{"class":96,"line":1735},[94,86332,54736],{"class":153},[94,86334,51414],{"class":104},[94,86336,54741],{"class":153},[94,86338,1271],{"class":104},[94,86340,86341,86343,86345,86347,86349],{"class":96,"line":1740},[94,86342,54899],{"class":153},[94,86344,51414],{"class":104},[94,86346,805],{"class":153},[94,86348,51469],{"class":100},[94,86350,1271],{"class":104},[94,86352,86353],{"class":96,"line":1745},[94,86354,2168],{"class":104},[94,86356,86357],{"class":96,"line":1759},[94,86358,2381],{"emptyLinePlaceholder":20},[94,86360,86361,86363,86365,86367],{"class":96,"line":1764},[94,86362,86127],{"class":1944},[94,86364,86300],{"class":1944},[94,86366,3013],{"class":51277},[94,86368,15554],{"class":104},[94,86370,86371,86374,86376,86378],{"class":96,"line":2558},[94,86372,86373],{"class":153},"      font-style",[94,86375,51414],{"class":104},[94,86377,63818],{"class":153},[94,86379,1271],{"class":104},[94,86381,86382,86384,86386,86388],{"class":96,"line":2572},[94,86383,57393],{"class":153},[94,86385,51414],{"class":104},[94,86387,62047],{"class":153},[94,86389,1271],{"class":104},[94,86391,86392,86394,86396,86398],{"class":96,"line":2580},[94,86393,54736],{"class":153},[94,86395,51414],{"class":104},[94,86397,54808],{"class":153},[94,86399,1271],{"class":104},[94,86401,86402,86405,86407,86409,86411],{"class":96,"line":2585},[94,86403,86404],{"class":153},"      right",[94,86406,51414],{"class":104},[94,86408,680],{"class":153},[94,86410,51469],{"class":100},[94,86412,1271],{"class":104},[94,86414,86415,86417,86419,86422,86424],{"class":96,"line":2591},[94,86416,54924],{"class":153},[94,86418,51414],{"class":104},[94,86420,86421],{"class":153},"-2",[94,86423,51469],{"class":100},[94,86425,1271],{"class":104},[94,86427,86428,86430,86432,86434],{"class":96,"line":2597},[94,86429,62002],{"class":153},[94,86431,51414],{"class":104},[94,86433,62007],{"class":153},[94,86435,1271],{"class":104},[94,86437,86438],{"class":96,"line":2602},[94,86439,2168],{"class":104},[94,86441,86442],{"class":96,"line":7930},[94,86443,2381],{"emptyLinePlaceholder":20},[94,86445,86446,86448,86451],{"class":96,"line":7954},[94,86447,86127],{"class":1944},[94,86449,86450],{"class":1944}," .body",[94,86452,15554],{"class":104},[94,86454,86455,86457,86459,86461],{"class":96,"line":7959},[94,86456,57263],{"class":153},[94,86458,51414],{"class":104},[94,86460,51569],{"class":153},[94,86462,1271],{"class":104},[94,86464,86465,86467,86469,86471,86473],{"class":96,"line":7965},[94,86466,54672],{"class":153},[94,86468,51414],{"class":104},[94,86470,551],{"class":153},[94,86472,51469],{"class":100},[94,86474,1271],{"class":104},[94,86476,86477],{"class":96,"line":7992},[94,86478,2168],{"class":104},[94,86480,86481],{"class":96,"line":7997},[94,86482,2381],{"emptyLinePlaceholder":20},[94,86484,86485,86487,86490],{"class":96,"line":8003},[94,86486,86127],{"class":1944},[94,86488,86489],{"class":1944}," .footer",[94,86491,15554],{"class":104},[94,86493,86494,86496,86498,86500],{"class":96,"line":8015},[94,86495,54986],{"class":153},[94,86497,51414],{"class":104},[94,86499,51454],{"class":153},[94,86501,1271],{"class":104},[94,86503,86504,86506,86508,86510],{"class":96,"line":8027},[94,86505,54997],{"class":153},[94,86507,51414],{"class":104},[94,86509,51557],{"class":153},[94,86511,1271],{"class":104},[94,86513,86514,86516,86518,86520,86522],{"class":96,"line":8039},[94,86515,54672],{"class":153},[94,86517,51414],{"class":104},[94,86519,551],{"class":153},[94,86521,51469],{"class":100},[94,86523,1271],{"class":104},[94,86525,86526],{"class":96,"line":9698},[94,86527,2168],{"class":104},[94,86529,86530],{"class":96,"line":9723},[94,86531,2381],{"emptyLinePlaceholder":20},[94,86533,86534,86536,86538,86540],{"class":96,"line":9746},[94,86535,86127],{"class":1944},[94,86537,86489],{"class":1944},[94,86539,1379],{"class":51277},[94,86541,15554],{"class":104},[94,86543,86544,86546,86548,86550,86552,86554,86556],{"class":96,"line":9770},[94,86545,54672],{"class":153},[94,86547,51414],{"class":104},[94,86549,176],{"class":153},[94,86551,51469],{"class":100},[94,86553,2064],{"class":153},[94,86555,51469],{"class":100},[94,86557,1271],{"class":104},[94,86559,86560,86562,86564,86567],{"class":96,"line":9775},[94,86561,61698],{"class":153},[94,86563,51414],{"class":104},[94,86565,86566],{"class":153},"#ccc",[94,86568,1271],{"class":104},[94,86570,86571,86573,86575,86577],{"class":96,"line":9780},[94,86572,63947],{"class":153},[94,86574,51414],{"class":104},[94,86576,54714],{"class":153},[94,86578,1271],{"class":104},[94,86580,86581,86583,86585,86587],{"class":96,"line":9785},[94,86582,57393],{"class":153},[94,86584,51414],{"class":104},[94,86586,60819],{"class":153},[94,86588,1271],{"class":104},[94,86590,86591,86593,86595,86597,86599],{"class":96,"line":9794},[94,86592,55111],{"class":153},[94,86594,51414],{"class":104},[94,86596,182],{"class":153},[94,86598,51469],{"class":100},[94,86600,1271],{"class":104},[94,86602,86603,86605,86607,86609,86611],{"class":96,"line":9799},[94,86604,61727],{"class":153},[94,86606,51414],{"class":104},[94,86608,551],{"class":153},[94,86610,51469],{"class":100},[94,86612,1271],{"class":104},[94,86614,86615,86617,86619,86621,86623],{"class":96,"line":9805},[94,86616,54899],{"class":153},[94,86618,51414],{"class":104},[94,86620,654],{"class":153},[94,86622,51469],{"class":100},[94,86624,1271],{"class":104},[94,86626,86627],{"class":96,"line":9826},[94,86628,2168],{"class":104},[94,86630,86631],{"class":96,"line":9832},[94,86632,2381],{"emptyLinePlaceholder":20},[94,86634,86635,86637,86639,86641,86644],{"class":96,"line":9846},[94,86636,86127],{"class":1944},[94,86638,86489],{"class":1944},[94,86640,1379],{"class":51277},[94,86642,86643],{"class":1944},".submit",[94,86645,15554],{"class":104},[94,86647,86648,86650,86652,86655],{"class":96,"line":9852},[94,86649,54861],{"class":153},[94,86651,51414],{"class":104},[94,86653,86654],{"class":153},"#369",[94,86656,1271],{"class":104},[94,86658,86659],{"class":96,"line":9879},[94,86660,2168],{"class":104},[94,86662,86663,86665,86667],{"class":96,"line":9888},[94,86664,52394],{"class":104},[94,86666,5108],{"class":51277},[94,86668,51284],{"class":104},[94,86670,86671,86673,86675],{"class":96,"line":9894},[94,86672,51762],{"class":104},[94,86674,51311],{"class":51277},[94,86676,51284],{"class":104},[94,86678,86679],{"class":96,"line":9902},[94,86680,2381],{"emptyLinePlaceholder":20},[94,86682,86683,86685,86687],{"class":96,"line":9907},[94,86684,1015],{"class":104},[94,86686,51777],{"class":51277},[94,86688,51284],{"class":104},[94,86690,86691,86693,86695,86697,86699,86702,86705,86707],{"class":96,"line":16586},[94,86692,52121],{"class":104},[94,86694,53864],{"class":51277},[94,86696,14941],{"class":1944},[94,86698,150],{"class":104},[94,86700,86701],{"class":209},"\"delete\"",[94,86703,86704],{"class":104},">删除\u003C\u002F",[94,86706,53864],{"class":51277},[94,86708,51284],{"class":104},[94,86710,86711,86713,86715,86717,86719,86722,86725,86727],{"class":96,"line":16592},[94,86712,52121],{"class":104},[94,86714,53864],{"class":51277},[94,86716,14941],{"class":1944},[94,86718,150],{"class":104},[94,86720,86721],{"class":209},"\"login\"",[94,86723,86724],{"class":104},">登录\u003C\u002F",[94,86726,53864],{"class":51277},[94,86728,51284],{"class":104},[94,86730,86731,86733,86735],{"class":96,"line":16615},[94,86732,52121],{"class":104},[94,86734,51790],{"class":51277},[94,86736,51284],{"class":104},[94,86738,86739],{"class":96,"line":16621},[94,86740,86741],{"class":163},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[94,86743,86744,86746,86749,86751,86753,86755,86757,86759,86762,86764,86766],{"class":96,"line":16644},[94,86745,70061],{"class":100},[94,86747,86748],{"class":1944}," Modal",[94,86750,105],{"class":104},[94,86752,51384],{"class":5198},[94,86754,13546],{"class":100},[94,86756,69907],{"class":209},[94,86758,12417],{"class":104},[94,86760,86761],{"class":5198},"message",[94,86763,13546],{"class":100},[94,86765,69907],{"class":209},[94,86767,12424],{"class":104},[94,86769,86770],{"class":96,"line":16658},[94,86771,86772],{"class":163},"      \u002F\u002F 创建Model 模态框盒子\n",[94,86774,86775],{"class":96,"line":16678},[94,86776,86777],{"class":163},"      \u002F\u002F 1.1 创建div标签\n",[94,86779,86780,86782,86785,86787,86789,86791,86793,86795],{"class":96,"line":16684},[94,86781,70028],{"class":153},[94,86783,86784],{"class":104},".modalBox ",[94,86786,150],{"class":100},[94,86788,54373],{"class":104},[94,86790,70128],{"class":1944},[94,86792,105],{"class":104},[94,86794,81908],{"class":209},[94,86796,111],{"class":104},[94,86798,86799],{"class":96,"line":16695},[94,86800,86801],{"class":163},"      \u002F\u002F 1.2 给div 添加类名为model\n",[94,86803,86804,86806,86809,86811],{"class":96,"line":16718},[94,86805,70028],{"class":153},[94,86807,86808],{"class":104},".modalBox.className ",[94,86810,150],{"class":100},[94,86812,86813],{"class":209}," 'modal'\n",[94,86815,86816],{"class":96,"line":16740},[94,86817,86818],{"class":163},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[94,86820,86821,86823,86826,86828],{"class":96,"line":16745},[94,86822,70028],{"class":153},[94,86824,86825],{"class":104},".modalBox.innerHTML ",[94,86827,150],{"class":100},[94,86829,70145],{"class":209},[94,86831,86832,86835,86837],{"class":96,"line":16751},[94,86833,86834],{"class":209},"        \u003Cdiv class=\"header\">${",[94,86836,51384],{"class":104},[94,86838,86839],{"class":209},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[94,86841,86842,86845,86847],{"class":96,"line":16765},[94,86843,86844],{"class":209},"        \u003Cdiv class=\"body\">${",[94,86846,86761],{"class":104},[94,86848,86849],{"class":209},"}\u003C\u002Fdiv>\n",[94,86851,86852],{"class":96,"line":16778},[94,86853,86854],{"class":209},"      `\n",[94,86856,86857],{"class":96,"line":16783},[94,86858,86859],{"class":163},"      \u002F\u002F console.log(this.modalBox)\n",[94,86861,86862],{"class":96,"line":16797},[94,86863,2168],{"class":104},[94,86865,86866],{"class":96,"line":16802},[94,86867,86868],{"class":163},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[94,86870,86871],{"class":96,"line":16808},[94,86872,86873],{"class":163},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[94,86875,86876],{"class":96,"line":16813},[94,86877,86878],{"class":163},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[94,86880,86881,86884,86886,86888,86890,86893,86895,86897],{"class":96,"line":16827},[94,86882,86883],{"class":153},"    Modal",[94,86885,663],{"class":104},[94,86887,85556],{"class":153},[94,86889,663],{"class":104},[94,86891,86892],{"class":1944},"open",[94,86894,13546],{"class":100},[94,86896,58895],{"class":100},[94,86898,54429],{"class":104},[94,86900,86901],{"class":96,"line":16832},[94,86902,86903],{"class":163},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[94,86905,86906,86908,86911,86913,86915,86917,86919,86922],{"class":96,"line":16837},[94,86907,58205],{"class":100},[94,86909,86910],{"class":153}," box",[94,86912,13546],{"class":100},[94,86914,54373],{"class":104},[94,86916,54376],{"class":1944},[94,86918,105],{"class":104},[94,86920,86921],{"class":209},"'.modal'",[94,86923,111],{"class":104},[94,86925,86926],{"class":96,"line":16851},[94,86927,86928],{"class":163},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[94,86930,86931,86934,86936,86939,86941],{"class":96,"line":16863},[94,86932,86933],{"class":104},"      box ",[94,86935,1696],{"class":100},[94,86937,86938],{"class":104}," box.",[94,86940,56983],{"class":1944},[94,86942,1957],{"class":104},[94,86944,86945],{"class":96,"line":16868},[94,86946,86947],{"class":163},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[94,86949,86950],{"class":96,"line":16881},[94,86951,86952],{"class":163},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[94,86954,86955],{"class":96,"line":16886},[94,86956,86957],{"class":163},"      \u002F\u002F append可以增加对象\n",[94,86959,86960,86963,86966,86968,86971],{"class":96,"line":16891},[94,86961,86962],{"class":104},"      document.body.",[94,86964,86965],{"class":1944},"append",[94,86967,105],{"class":104},[94,86969,86970],{"class":153},"this",[94,86972,86973],{"class":104},".modalBox)\n",[94,86975,86976],{"class":96,"line":16896},[94,86977,2381],{"emptyLinePlaceholder":20},[94,86979,86980],{"class":96,"line":16909},[94,86981,86982],{"class":163},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[94,86984,86985,86987,86990,86992,86994,86997,86999,87001,87003,87005,87008,87010],{"class":96,"line":16914},[94,86986,70028],{"class":153},[94,86988,86989],{"class":104},".modalBox.",[94,86991,54376],{"class":1944},[94,86993,105],{"class":104},[94,86995,86996],{"class":209},"'i'",[94,86998,30809],{"class":104},[94,87000,57790],{"class":1944},[94,87002,105],{"class":104},[94,87004,57795],{"class":209},[94,87006,87007],{"class":104},", () ",[94,87009,84699],{"class":100},[94,87011,15554],{"class":104},[94,87013,87014],{"class":96,"line":32616},[94,87015,87016],{"class":163},"        \u002F\u002F 这个地方需要用到箭头函数\n",[94,87018,87019],{"class":96,"line":32622},[94,87020,87021],{"class":163},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[94,87023,87024],{"class":96,"line":32628},[94,87025,87026],{"class":163},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[94,87028,87029,87031,87033,87036],{"class":96,"line":32634},[94,87030,64703],{"class":153},[94,87032,663],{"class":104},[94,87034,87035],{"class":1944},"close",[94,87037,1957],{"class":104},[94,87039,87040],{"class":96,"line":32640},[94,87041,64792],{"class":104},[94,87043,87044],{"class":96,"line":32651},[94,87045,2168],{"class":104},[94,87047,87048],{"class":96,"line":32657},[94,87049,2381],{"emptyLinePlaceholder":20},[94,87051,87052],{"class":96,"line":32677},[94,87053,87054],{"class":163},"    \u002F\u002F 测试一下 点击 删除按钮\n",[94,87056,87057,87059,87061,87063,87066,87068,87070,87072,87074,87076,87078],{"class":96,"line":32683},[94,87058,52384],{"class":104},[94,87060,54376],{"class":1944},[94,87062,105],{"class":104},[94,87064,87065],{"class":209},"'#delete'",[94,87067,30809],{"class":104},[94,87069,57790],{"class":1944},[94,87071,105],{"class":104},[94,87073,57795],{"class":209},[94,87075,87007],{"class":104},[94,87077,84699],{"class":100},[94,87079,15554],{"class":104},[94,87081,87082],{"class":96,"line":32694},[94,87083,87084],{"class":163},"      \u002F\u002F 先调用Model构造函数\n",[94,87086,87087,87089,87092,87094,87096,87098,87100,87103,87105,87108],{"class":96,"line":32700},[94,87088,58205],{"class":100},[94,87090,87091],{"class":153}," del",[94,87093,13546],{"class":100},[94,87095,11560],{"class":100},[94,87097,86748],{"class":1944},[94,87099,105],{"class":104},[94,87101,87102],{"class":209},"'温馨的提示'",[94,87104,12417],{"class":104},[94,87106,87107],{"class":209},"'您没有删除权限操作'",[94,87109,111],{"class":104},[94,87111,87112],{"class":96,"line":32706},[94,87113,87114],{"class":163},"      \u002F\u002F 实例对象调用open方法\n",[94,87116,87117,87120,87122],{"class":96,"line":32712},[94,87118,87119],{"class":104},"      del.",[94,87121,86892],{"class":1944},[94,87123,1957],{"class":104},[94,87125,87126],{"class":96,"line":32718},[94,87127,33444],{"class":104},[94,87129,87130],{"class":96,"line":32724},[94,87131,87132],{"class":163},"    \u002F\u002F 测试一下 点击 登录按钮\n",[94,87134,87135,87137,87139,87141,87144,87146,87148,87150,87152,87154,87156],{"class":96,"line":32730},[94,87136,52384],{"class":104},[94,87138,54376],{"class":1944},[94,87140,105],{"class":104},[94,87142,87143],{"class":209},"'#login'",[94,87145,30809],{"class":104},[94,87147,57790],{"class":1944},[94,87149,105],{"class":104},[94,87151,57795],{"class":209},[94,87153,87007],{"class":104},[94,87155,84699],{"class":100},[94,87157,15554],{"class":104},[94,87159,87160],{"class":96,"line":32736},[94,87161,87084],{"class":163},[94,87163,87164,87166,87169,87171,87173,87175,87177,87180,87182,87185],{"class":96,"line":32756},[94,87165,58205],{"class":100},[94,87167,87168],{"class":153}," log",[94,87170,13546],{"class":100},[94,87172,11560],{"class":100},[94,87174,86748],{"class":1944},[94,87176,105],{"class":104},[94,87178,87179],{"class":209},"'友情提示'",[94,87181,12417],{"class":104},[94,87183,87184],{"class":209},"'您还没有登录呢'",[94,87186,111],{"class":104},[94,87188,87189],{"class":96,"line":32762},[94,87190,87114],{"class":163},[94,87192,87193,87196,87198],{"class":96,"line":32778},[94,87194,87195],{"class":104},"      log.",[94,87197,86892],{"class":1944},[94,87199,1957],{"class":104},[94,87201,87202],{"class":96,"line":32784},[94,87203,33444],{"class":104},[94,87205,87206],{"class":96,"line":32798},[94,87207,87208],{"class":163},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[94,87210,87211,87213,87215,87217,87219,87221,87223,87225],{"class":96,"line":32804},[94,87212,86883],{"class":153},[94,87214,663],{"class":104},[94,87216,85556],{"class":153},[94,87218,663],{"class":104},[94,87220,87035],{"class":1944},[94,87222,13546],{"class":100},[94,87224,58895],{"class":100},[94,87226,54429],{"class":104},[94,87228,87229,87231,87233,87235],{"class":96,"line":32819},[94,87230,70028],{"class":153},[94,87232,86989],{"class":104},[94,87234,56983],{"class":1944},[94,87236,1957],{"class":104},[94,87238,87239],{"class":96,"line":32825},[94,87240,2168],{"class":104},[94,87242,87243,87245,87247],{"class":96,"line":32834},[94,87244,52394],{"class":104},[94,87246,51790],{"class":51277},[94,87248,51284],{"class":104},[94,87250,87251,87253,87255],{"class":96,"line":32840},[94,87252,51762],{"class":104},[94,87254,51777],{"class":51277},[94,87256,51284],{"class":104},[94,87258,87259],{"class":96,"line":32849},[94,87260,2381],{"emptyLinePlaceholder":20},[94,87262,87263,87265,87267],{"class":96,"line":32855},[94,87264,51762],{"class":104},[94,87266,50612],{"class":51277},[94,87268,51284],{"class":104},[40,87270,87271],{},[1443,87272],{"alt":14,"src":87273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[35,87275,87277],{"id":87276},"_414-深浅拷贝","4.14 深浅拷贝",[65,87279,87281],{"id":87280},"_4141-浅拷贝","4.14.1 浅拷贝",[40,87283,87284],{},[1443,87285],{"alt":14,"src":87286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[40,87288,87289],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[40,87291,87292],{},[1443,87293],{"alt":14,"src":87294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[40,87296,87297],{},[1443,87298],{"alt":14,"src":87299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[40,87301,87302],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[40,87304,87305],{},[1443,87306],{"alt":14,"src":87307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[40,87309,11314],{},[40,87311,87312],{},[1443,87313],{"alt":14,"src":87314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[65,87316,87318],{"id":87317},"_4142-深拷贝","4.14.2 深拷贝",[40,87320,87321],{},"深拷贝：拷贝的是对象，不是地址",[40,87323,87324],{},"常用的三种方法：",[48,87326,87327,87330,87333],{},[51,87328,87329],{},"通过递归实现深拷贝",[51,87331,87332],{},"lodash\u002FcloneDeep",[51,87334,87335],{},"通过JSON.stringify()实现",[21980,87337,87339],{"id":87338},"_41421-递归函数","4.14.2.1 递归函数",[40,87341,87342],{},[1443,87343],{"alt":14,"src":87344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[48,87346,87347],{},[51,87348,87349],{},"死递归占溢出：",[85,87351,87353],{"className":53044,"code":87352,"language":53046,"meta":14,"style":14},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[91,87354,87355,87363,87371,87375,87380,87384,87389,87397],{"__ignoreMap":14},[94,87356,87357,87359,87361],{"class":96,"line":97},[94,87358,1015],{"class":104},[94,87360,51777],{"class":51277},[94,87362,51284],{"class":104},[94,87364,87365,87367,87369],{"class":96,"line":15},[94,87366,52121],{"class":104},[94,87368,51790],{"class":51277},[94,87370,51284],{"class":104},[94,87372,87373],{"class":96,"line":1160},[94,87374,77120],{"class":104},[94,87376,87377],{"class":96,"line":1175},[94,87378,87379],{"class":104},"      fn()\n",[94,87381,87382],{"class":96,"line":1181},[94,87383,2168],{"class":104},[94,87385,87386],{"class":96,"line":1195},[94,87387,87388],{"class":104},"    fn()\n",[94,87390,87391,87393,87395],{"class":96,"line":1201},[94,87392,52394],{"class":104},[94,87394,51790],{"class":51277},[94,87396,51284],{"class":104},[94,87398,87399,87401,87403],{"class":96,"line":1292},[94,87400,51762],{"class":104},[94,87402,51777],{"class":51277},[94,87404,51284],{"class":104},[48,87406,87407],{"start":15},[51,87408,87409],{},"递归函数要加判断条件：",[40,87411,87412],{},[1443,87413],{"alt":14,"src":87414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[48,87416,87417],{"start":1160},[51,87418,87419],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[85,87421,87423],{"className":50610,"code":87422,"language":50612,"meta":14,"style":14},"\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",[91,87424,87425,87435,87449,87453,87461,87475,87495,87507,87515,87519,87527,87539,87547,87555,87580,87592,87596,87603,87611,87619,87623],{"__ignoreMap":14},[94,87426,87427,87429,87431,87433],{"class":96,"line":97},[94,87428,51274],{"class":104},[94,87430,51278],{"class":51277},[94,87432,51281],{"class":1944},[94,87434,51284],{"class":104},[94,87436,87437,87439,87441,87443,87445,87447],{"class":96,"line":15},[94,87438,1015],{"class":104},[94,87440,50612],{"class":51277},[94,87442,51293],{"class":1944},[94,87444,150],{"class":104},[94,87446,51298],{"class":209},[94,87448,51284],{"class":104},[94,87450,87451],{"class":96,"line":1160},[94,87452,2381],{"emptyLinePlaceholder":20},[94,87454,87455,87457,87459],{"class":96,"line":1175},[94,87456,1015],{"class":104},[94,87458,51311],{"class":51277},[94,87460,51284],{"class":104},[94,87462,87463,87465,87467,87469,87471,87473],{"class":96,"line":1181},[94,87464,52121],{"class":104},[94,87466,51321],{"class":51277},[94,87468,51324],{"class":1944},[94,87470,150],{"class":104},[94,87472,51329],{"class":209},[94,87474,51284],{"class":104},[94,87476,87477,87479,87481,87483,87485,87487,87489,87491,87493],{"class":96,"line":1195},[94,87478,52121],{"class":104},[94,87480,51321],{"class":51277},[94,87482,14902],{"class":1944},[94,87484,150],{"class":104},[94,87486,51368],{"class":209},[94,87488,51348],{"class":1944},[94,87490,150],{"class":104},[94,87492,51375],{"class":209},[94,87494,51284],{"class":104},[94,87496,87497,87499,87501,87503,87505],{"class":96,"line":1201},[94,87498,52121],{"class":104},[94,87500,51384],{"class":51277},[94,87502,51387],{"class":104},[94,87504,51384],{"class":51277},[94,87506,51284],{"class":104},[94,87508,87509,87511,87513],{"class":96,"line":1292},[94,87510,51762],{"class":104},[94,87512,51311],{"class":51277},[94,87514,51284],{"class":104},[94,87516,87517],{"class":96,"line":1298},[94,87518,2381],{"emptyLinePlaceholder":20},[94,87520,87521,87523,87525],{"class":96,"line":1310},[94,87522,1015],{"class":104},[94,87524,51777],{"class":51277},[94,87526,51284],{"class":104},[94,87528,87529,87531,87533,87535,87537],{"class":96,"line":1593},[94,87530,52121],{"class":104},[94,87532,51588],{"class":51277},[94,87534,55291],{"class":104},[94,87536,51588],{"class":51277},[94,87538,51284],{"class":104},[94,87540,87541,87543,87545],{"class":96,"line":1598},[94,87542,52121],{"class":104},[94,87544,51790],{"class":51277},[94,87546,51284],{"class":104},[94,87548,87549,87551,87553],{"class":96,"line":1604},[94,87550,70061],{"class":100},[94,87552,73750],{"class":1944},[94,87554,10835],{"class":104},[94,87556,87557,87559,87561,87563,87565,87567,87569,87571,87573,87575,87578],{"class":96,"line":1609},[94,87558,55748],{"class":104},[94,87560,54376],{"class":1944},[94,87562,105],{"class":104},[94,87564,81908],{"class":209},[94,87566,74226],{"class":104},[94,87568,150],{"class":100},[94,87570,11560],{"class":100},[94,87572,73766],{"class":1944},[94,87574,17243],{"class":104},[94,87576,87577],{"class":1944},"toLocaleString",[94,87579,1957],{"class":104},[94,87581,87582,87585,87588,87590],{"class":96,"line":1623},[94,87583,87584],{"class":1944},"      setTimeout",[94,87586,87587],{"class":104},"(getTime, ",[94,87589,6392],{"class":153},[94,87591,111],{"class":104},[94,87593,87594],{"class":96,"line":1628},[94,87595,2168],{"class":104},[94,87597,87598,87601],{"class":96,"line":1634},[94,87599,87600],{"class":1944},"    getTime",[94,87602,1957],{"class":104},[94,87604,87605,87607,87609],{"class":96,"line":1655},[94,87606,52394],{"class":104},[94,87608,51790],{"class":51277},[94,87610,51284],{"class":104},[94,87612,87613,87615,87617],{"class":96,"line":1660},[94,87614,51762],{"class":104},[94,87616,51777],{"class":51277},[94,87618,51284],{"class":104},[94,87620,87621],{"class":96,"line":1674},[94,87622,2381],{"emptyLinePlaceholder":20},[94,87624,87625,87627,87629],{"class":96,"line":1679},[94,87626,51762],{"class":104},[94,87628,50612],{"class":51277},[94,87630,51284],{"class":104},[40,87632,87633],{},[1443,87634],{"alt":14,"src":87635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[48,87637,87638],{"start":1175},[51,87639,87329],{},[40,87641,87642],{},[1443,87643],{"alt":14,"src":87644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[40,87646,87647],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[40,87649,39172],{},[40,87651,87652],{},"这个是简易版的递归函数深拷贝",[40,87654,87655],{},"一定要注意先数组再对象，因为万物皆可对象",[85,87657,87659],{"className":50610,"code":87658,"language":50612,"meta":14,"style":14},"\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",[91,87660,87661,87671,87685,87689,87697,87711,87731,87743,87751,87755,87763,87771,87781,87790,87798,87814,87818,87826,87830,87834,87846,87851,87870,87886,87891,87896,87901,87916,87921,87926,87935,87943,87960,87968,87974,87982,87987,87992,88001,88005,88009,88013,88024,88033,88043,88057,88067,88075,88083,88091,88095],{"__ignoreMap":14},[94,87662,87663,87665,87667,87669],{"class":96,"line":97},[94,87664,51274],{"class":104},[94,87666,51278],{"class":51277},[94,87668,51281],{"class":1944},[94,87670,51284],{"class":104},[94,87672,87673,87675,87677,87679,87681,87683],{"class":96,"line":15},[94,87674,1015],{"class":104},[94,87676,50612],{"class":51277},[94,87678,51293],{"class":1944},[94,87680,150],{"class":104},[94,87682,51298],{"class":209},[94,87684,51284],{"class":104},[94,87686,87687],{"class":96,"line":1160},[94,87688,2381],{"emptyLinePlaceholder":20},[94,87690,87691,87693,87695],{"class":96,"line":1175},[94,87692,1015],{"class":104},[94,87694,51311],{"class":51277},[94,87696,51284],{"class":104},[94,87698,87699,87701,87703,87705,87707,87709],{"class":96,"line":1181},[94,87700,52121],{"class":104},[94,87702,51321],{"class":51277},[94,87704,51324],{"class":1944},[94,87706,150],{"class":104},[94,87708,51329],{"class":209},[94,87710,51284],{"class":104},[94,87712,87713,87715,87717,87719,87721,87723,87725,87727,87729],{"class":96,"line":1195},[94,87714,52121],{"class":104},[94,87716,51321],{"class":51277},[94,87718,14902],{"class":1944},[94,87720,150],{"class":104},[94,87722,51368],{"class":209},[94,87724,51348],{"class":1944},[94,87726,150],{"class":104},[94,87728,51375],{"class":209},[94,87730,51284],{"class":104},[94,87732,87733,87735,87737,87739,87741],{"class":96,"line":1201},[94,87734,52121],{"class":104},[94,87736,51384],{"class":51277},[94,87738,51387],{"class":104},[94,87740,51384],{"class":51277},[94,87742,51284],{"class":104},[94,87744,87745,87747,87749],{"class":96,"line":1292},[94,87746,51762],{"class":104},[94,87748,51311],{"class":51277},[94,87750,51284],{"class":104},[94,87752,87753],{"class":96,"line":1298},[94,87754,2381],{"emptyLinePlaceholder":20},[94,87756,87757,87759,87761],{"class":96,"line":1310},[94,87758,1015],{"class":104},[94,87760,51777],{"class":51277},[94,87762,51284],{"class":104},[94,87764,87765,87767,87769],{"class":96,"line":1593},[94,87766,52121],{"class":104},[94,87768,51790],{"class":51277},[94,87770,51284],{"class":104},[94,87772,87773,87775,87777,87779],{"class":96,"line":1598},[94,87774,11203],{"class":100},[94,87776,69948],{"class":153},[94,87778,13546],{"class":100},[94,87780,15554],{"class":104},[94,87782,87783,87785,87788],{"class":96,"line":1604},[94,87784,71593],{"class":104},[94,87786,87787],{"class":209},"'pink'",[94,87789,31449],{"class":104},[94,87791,87792,87794,87796],{"class":96,"line":1609},[94,87793,71603],{"class":104},[94,87795,755],{"class":153},[94,87797,31449],{"class":104},[94,87799,87800,87803,87806,87808,87811],{"class":96,"line":1623},[94,87801,87802],{"class":104},"      hobby: [",[94,87804,87805],{"class":209},"'乒乓球'",[94,87807,12417],{"class":104},[94,87809,87810],{"class":209},"'足球'",[94,87812,87813],{"class":104},"],\n",[94,87815,87816],{"class":96,"line":1628},[94,87817,77849],{"class":104},[94,87819,87820,87823],{"class":96,"line":1634},[94,87821,87822],{"class":104},"        baby: ",[94,87824,87825],{"class":209},"'小pink'\n",[94,87827,87828],{"class":96,"line":1655},[94,87829,52375],{"class":104},[94,87831,87832],{"class":96,"line":1660},[94,87833,2168],{"class":104},[94,87835,87836,87838,87841,87843],{"class":96,"line":1674},[94,87837,11203],{"class":100},[94,87839,87840],{"class":153}," o",[94,87842,13546],{"class":100},[94,87844,87845],{"class":104}," {}\n",[94,87847,87848],{"class":96,"line":1679},[94,87849,87850],{"class":163},"    \u002F\u002F 拷贝函数\n",[94,87852,87853,87855,87858,87860,87863,87865,87868],{"class":96,"line":1708},[94,87854,70061],{"class":100},[94,87856,87857],{"class":1944}," deepCopy",[94,87859,105],{"class":104},[94,87861,87862],{"class":5198},"newObj",[94,87864,12417],{"class":104},[94,87866,87867],{"class":5198},"oldObj",[94,87869,12424],{"class":104},[94,87871,87872,87874,87876,87878,87881,87883],{"class":96,"line":1713},[94,87873,52261],{"class":100},[94,87875,1639],{"class":104},[94,87877,51824],{"class":100},[94,87879,87880],{"class":104}," k ",[94,87882,26026],{"class":100},[94,87884,87885],{"class":104}," oldObj) {\n",[94,87887,87888],{"class":96,"line":1730},[94,87889,87890],{"class":163},"        \u002F\u002F 处理数组的问题\n",[94,87892,87893],{"class":96,"line":1735},[94,87894,87895],{"class":163},"        \u002F\u002F 判断是否属于数组\n",[94,87897,87898],{"class":96,"line":1740},[94,87899,87900],{"class":163},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[94,87902,87903,87905,87908,87911,87914],{"class":96,"line":1745},[94,87904,2478],{"class":100},[94,87906,87907],{"class":104}," (oldObj[k] ",[94,87909,87910],{"class":100},"instanceof",[94,87912,87913],{"class":1944}," Array",[94,87915,12424],{"class":104},[94,87917,87918],{"class":96,"line":1759},[94,87919,87920],{"class":163},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[94,87922,87923],{"class":96,"line":1764},[94,87924,87925],{"class":163},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[94,87927,87928,87931,87933],{"class":96,"line":2558},[94,87929,87930],{"class":104},"          newObj[k] ",[94,87932,150],{"class":100},[94,87934,51815],{"class":104},[94,87936,87937,87940],{"class":96,"line":2572},[94,87938,87939],{"class":1944},"          deepCopy",[94,87941,87942],{"class":104},"(newObj[k], oldObj[k])\n",[94,87944,87945,87947,87949,87951,87953,87955,87958],{"class":96,"line":2580},[94,87946,80057],{"class":104},[94,87948,1682],{"class":100},[94,87950,1685],{"class":100},[94,87952,87907],{"class":104},[94,87954,87910],{"class":100},[94,87956,87957],{"class":1944}," Object",[94,87959,12424],{"class":104},[94,87961,87962,87964,87966],{"class":96,"line":2585},[94,87963,87930],{"class":104},[94,87965,150],{"class":100},[94,87967,87845],{"class":104},[94,87969,87970,87972],{"class":96,"line":2591},[94,87971,87939],{"class":1944},[94,87973,87942],{"class":104},[94,87975,87976,87978,87980],{"class":96,"line":2597},[94,87977,80057],{"class":104},[94,87979,1682],{"class":100},[94,87981,15554],{"class":104},[94,87983,87984],{"class":96,"line":2602},[94,87985,87986],{"class":163},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[94,87988,87989],{"class":96,"line":7930},[94,87990,87991],{"class":163},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[94,87993,87994,87996,87998],{"class":96,"line":7954},[94,87995,87930],{"class":104},[94,87997,150],{"class":100},[94,87999,88000],{"class":104}," oldObj[k]\n",[94,88002,88003],{"class":96,"line":7959},[94,88004,2510],{"class":104},[94,88006,88007],{"class":96,"line":7965},[94,88008,52375],{"class":104},[94,88010,88011],{"class":96,"line":7992},[94,88012,2168],{"class":104},[94,88014,88015,88018,88021],{"class":96,"line":7997},[94,88016,88017],{"class":1944},"    deepCopy",[94,88019,88020],{"class":104},"(o, obj) ",[94,88022,88023],{"class":163},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[94,88025,88026,88028,88030],{"class":96,"line":8003},[94,88027,73730],{"class":104},[94,88029,58224],{"class":1944},[94,88031,88032],{"class":104},"(o)\n",[94,88034,88035,88038,88040],{"class":96,"line":8015},[94,88036,88037],{"class":104},"    o.age ",[94,88039,150],{"class":100},[94,88041,88042],{"class":153}," 20\n",[94,88044,88045,88048,88050,88052,88054],{"class":96,"line":8027},[94,88046,88047],{"class":104},"    o.hobby[",[94,88049,296],{"class":153},[94,88051,4424],{"class":104},[94,88053,150],{"class":100},[94,88055,88056],{"class":209}," '篮球'\n",[94,88058,88059,88062,88064],{"class":96,"line":8039},[94,88060,88061],{"class":104},"    o.family ",[94,88063,150],{"class":100},[94,88065,88066],{"class":209}," '老pink'\n",[94,88068,88069,88071,88073],{"class":96,"line":9698},[94,88070,73730],{"class":104},[94,88072,58224],{"class":1944},[94,88074,70013],{"class":104},[94,88076,88077,88079,88081],{"class":96,"line":9723},[94,88078,52394],{"class":104},[94,88080,51790],{"class":51277},[94,88082,51284],{"class":104},[94,88084,88085,88087,88089],{"class":96,"line":9746},[94,88086,51762],{"class":104},[94,88088,51777],{"class":51277},[94,88090,51284],{"class":104},[94,88092,88093],{"class":96,"line":9770},[94,88094,2381],{"emptyLinePlaceholder":20},[94,88096,88097,88099,88101],{"class":96,"line":9775},[94,88098,51762],{"class":104},[94,88100,50612],{"class":51277},[94,88102,51284],{"class":104},[40,88104,88105],{},[1443,88106],{"alt":14,"src":88107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[21980,88109,88111,88112],{"id":88110},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[254,88113,88114],{},"js库lodash里面cloneDeep内部实现了深拷贝",[40,88116,88117],{},[343,88118,88119],{"href":88119,"rel":88120},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23847],[40,88122,88123],{},"lodash里边的方法都要加上一个下划线_",[40,88125,88126],{},"_.cloneDeep()",[85,88128,88130],{"className":50610,"code":88129,"language":50612,"meta":14,"style":14},"\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",[91,88131,88132,88142,88156,88160,88168,88182,88202,88214,88222,88226,88234,88239,88258,88266,88276,88284,88292,88304,88308,88314,88318,88322,88338,88346,88355,88363,88371,88379,88383],{"__ignoreMap":14},[94,88133,88134,88136,88138,88140],{"class":96,"line":97},[94,88135,51274],{"class":104},[94,88137,51278],{"class":51277},[94,88139,51281],{"class":1944},[94,88141,51284],{"class":104},[94,88143,88144,88146,88148,88150,88152,88154],{"class":96,"line":15},[94,88145,1015],{"class":104},[94,88147,50612],{"class":51277},[94,88149,51293],{"class":1944},[94,88151,150],{"class":104},[94,88153,51298],{"class":209},[94,88155,51284],{"class":104},[94,88157,88158],{"class":96,"line":1160},[94,88159,2381],{"emptyLinePlaceholder":20},[94,88161,88162,88164,88166],{"class":96,"line":1175},[94,88163,1015],{"class":104},[94,88165,51311],{"class":51277},[94,88167,51284],{"class":104},[94,88169,88170,88172,88174,88176,88178,88180],{"class":96,"line":1181},[94,88171,52121],{"class":104},[94,88173,51321],{"class":51277},[94,88175,51324],{"class":1944},[94,88177,150],{"class":104},[94,88179,51329],{"class":209},[94,88181,51284],{"class":104},[94,88183,88184,88186,88188,88190,88192,88194,88196,88198,88200],{"class":96,"line":1195},[94,88185,52121],{"class":104},[94,88187,51321],{"class":51277},[94,88189,14902],{"class":1944},[94,88191,150],{"class":104},[94,88193,51368],{"class":209},[94,88195,51348],{"class":1944},[94,88197,150],{"class":104},[94,88199,51375],{"class":209},[94,88201,51284],{"class":104},[94,88203,88204,88206,88208,88210,88212],{"class":96,"line":1201},[94,88205,52121],{"class":104},[94,88207,51384],{"class":51277},[94,88209,51387],{"class":104},[94,88211,51384],{"class":51277},[94,88213,51284],{"class":104},[94,88215,88216,88218,88220],{"class":96,"line":1292},[94,88217,51762],{"class":104},[94,88219,51311],{"class":51277},[94,88221,51284],{"class":104},[94,88223,88224],{"class":96,"line":1298},[94,88225,2381],{"emptyLinePlaceholder":20},[94,88227,88228,88230,88232],{"class":96,"line":1310},[94,88229,1015],{"class":104},[94,88231,51777],{"class":51277},[94,88233,51284],{"class":104},[94,88235,88236],{"class":96,"line":1593},[94,88237,88238],{"class":163},"  \u003C!-- 先引用这个库 -->\n",[94,88240,88241,88243,88245,88247,88249,88252,88254,88256],{"class":96,"line":1598},[94,88242,52121],{"class":104},[94,88244,51790],{"class":51277},[94,88246,55216],{"class":1944},[94,88248,150],{"class":104},[94,88250,88251],{"class":209},"\"lodash.min.js\"",[94,88253,55291],{"class":104},[94,88255,51790],{"class":51277},[94,88257,51284],{"class":104},[94,88259,88260,88262,88264],{"class":96,"line":1604},[94,88261,52121],{"class":104},[94,88263,51790],{"class":51277},[94,88265,51284],{"class":104},[94,88267,88268,88270,88272,88274],{"class":96,"line":1609},[94,88269,11203],{"class":100},[94,88271,69948],{"class":153},[94,88273,13546],{"class":100},[94,88275,15554],{"class":104},[94,88277,88278,88280,88282],{"class":96,"line":1623},[94,88279,71593],{"class":104},[94,88281,87787],{"class":209},[94,88283,31449],{"class":104},[94,88285,88286,88288,88290],{"class":96,"line":1628},[94,88287,71603],{"class":104},[94,88289,755],{"class":153},[94,88291,31449],{"class":104},[94,88293,88294,88296,88298,88300,88302],{"class":96,"line":1634},[94,88295,87802],{"class":104},[94,88297,87805],{"class":209},[94,88299,12417],{"class":104},[94,88301,87810],{"class":209},[94,88303,87813],{"class":104},[94,88305,88306],{"class":96,"line":1655},[94,88307,77849],{"class":104},[94,88309,88310,88312],{"class":96,"line":1660},[94,88311,87822],{"class":104},[94,88313,87825],{"class":209},[94,88315,88316],{"class":96,"line":1674},[94,88317,52375],{"class":104},[94,88319,88320],{"class":96,"line":1679},[94,88321,2168],{"class":104},[94,88323,88324,88326,88328,88330,88333,88336],{"class":96,"line":1708},[94,88325,11203],{"class":100},[94,88327,87840],{"class":153},[94,88329,13546],{"class":100},[94,88331,88332],{"class":104}," _.",[94,88334,88335],{"class":1944},"cloneDeep",[94,88337,70013],{"class":104},[94,88339,88340,88342,88344],{"class":96,"line":1713},[94,88341,73730],{"class":104},[94,88343,58224],{"class":1944},[94,88345,88032],{"class":104},[94,88347,88348,88351,88353],{"class":96,"line":1730},[94,88349,88350],{"class":104},"    o.family.baby ",[94,88352,150],{"class":100},[94,88354,88066],{"class":209},[94,88356,88357,88359,88361],{"class":96,"line":1735},[94,88358,73730],{"class":104},[94,88360,58224],{"class":1944},[94,88362,70013],{"class":104},[94,88364,88365,88367,88369],{"class":96,"line":1740},[94,88366,52394],{"class":104},[94,88368,51790],{"class":51277},[94,88370,51284],{"class":104},[94,88372,88373,88375,88377],{"class":96,"line":1745},[94,88374,51762],{"class":104},[94,88376,51777],{"class":51277},[94,88378,51284],{"class":104},[94,88380,88381],{"class":96,"line":1759},[94,88382,2381],{"emptyLinePlaceholder":20},[94,88384,88385,88387,88389],{"class":96,"line":1764},[94,88386,51762],{"class":104},[94,88388,50612],{"class":51277},[94,88390,51284],{"class":104},[40,88392,88393],{},[1443,88394],{"alt":14,"src":88395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[21980,88397,88399],{"id":88398},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[85,88401,88403],{"className":50610,"code":88402,"language":50612,"meta":14,"style":14},"\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",[91,88404,88405,88415,88429,88433,88441,88455,88475,88487,88495,88499,88507,88515,88525,88533,88541,88553,88557,88563,88567,88571,88576,88581,88586,88612,88620,88629,88637,88645,88653,88657],{"__ignoreMap":14},[94,88406,88407,88409,88411,88413],{"class":96,"line":97},[94,88408,51274],{"class":104},[94,88410,51278],{"class":51277},[94,88412,51281],{"class":1944},[94,88414,51284],{"class":104},[94,88416,88417,88419,88421,88423,88425,88427],{"class":96,"line":15},[94,88418,1015],{"class":104},[94,88420,50612],{"class":51277},[94,88422,51293],{"class":1944},[94,88424,150],{"class":104},[94,88426,51298],{"class":209},[94,88428,51284],{"class":104},[94,88430,88431],{"class":96,"line":1160},[94,88432,2381],{"emptyLinePlaceholder":20},[94,88434,88435,88437,88439],{"class":96,"line":1175},[94,88436,1015],{"class":104},[94,88438,51311],{"class":51277},[94,88440,51284],{"class":104},[94,88442,88443,88445,88447,88449,88451,88453],{"class":96,"line":1181},[94,88444,52121],{"class":104},[94,88446,51321],{"class":51277},[94,88448,51324],{"class":1944},[94,88450,150],{"class":104},[94,88452,51329],{"class":209},[94,88454,51284],{"class":104},[94,88456,88457,88459,88461,88463,88465,88467,88469,88471,88473],{"class":96,"line":1195},[94,88458,52121],{"class":104},[94,88460,51321],{"class":51277},[94,88462,14902],{"class":1944},[94,88464,150],{"class":104},[94,88466,51368],{"class":209},[94,88468,51348],{"class":1944},[94,88470,150],{"class":104},[94,88472,51375],{"class":209},[94,88474,51284],{"class":104},[94,88476,88477,88479,88481,88483,88485],{"class":96,"line":1201},[94,88478,52121],{"class":104},[94,88480,51384],{"class":51277},[94,88482,51387],{"class":104},[94,88484,51384],{"class":51277},[94,88486,51284],{"class":104},[94,88488,88489,88491,88493],{"class":96,"line":1292},[94,88490,51762],{"class":104},[94,88492,51311],{"class":51277},[94,88494,51284],{"class":104},[94,88496,88497],{"class":96,"line":1298},[94,88498,2381],{"emptyLinePlaceholder":20},[94,88500,88501,88503,88505],{"class":96,"line":1310},[94,88502,1015],{"class":104},[94,88504,51777],{"class":51277},[94,88506,51284],{"class":104},[94,88508,88509,88511,88513],{"class":96,"line":1593},[94,88510,52121],{"class":104},[94,88512,51790],{"class":51277},[94,88514,51284],{"class":104},[94,88516,88517,88519,88521,88523],{"class":96,"line":1598},[94,88518,11203],{"class":100},[94,88520,69948],{"class":153},[94,88522,13546],{"class":100},[94,88524,15554],{"class":104},[94,88526,88527,88529,88531],{"class":96,"line":1604},[94,88528,71593],{"class":104},[94,88530,87787],{"class":209},[94,88532,31449],{"class":104},[94,88534,88535,88537,88539],{"class":96,"line":1609},[94,88536,71603],{"class":104},[94,88538,755],{"class":153},[94,88540,31449],{"class":104},[94,88542,88543,88545,88547,88549,88551],{"class":96,"line":1623},[94,88544,87802],{"class":104},[94,88546,87805],{"class":209},[94,88548,12417],{"class":104},[94,88550,87810],{"class":209},[94,88552,87813],{"class":104},[94,88554,88555],{"class":96,"line":1628},[94,88556,77849],{"class":104},[94,88558,88559,88561],{"class":96,"line":1634},[94,88560,87822],{"class":104},[94,88562,87825],{"class":209},[94,88564,88565],{"class":96,"line":1655},[94,88566,52375],{"class":104},[94,88568,88569],{"class":96,"line":1660},[94,88570,2168],{"class":104},[94,88572,88573],{"class":96,"line":1674},[94,88574,88575],{"class":163},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[94,88577,88578],{"class":96,"line":1679},[94,88579,88580],{"class":163},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[94,88582,88583],{"class":96,"line":1708},[94,88584,88585],{"class":163},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[94,88587,88588,88590,88592,88594,88597,88599,88602,88604,88606,88608,88610],{"class":96,"line":1713},[94,88589,11203],{"class":100},[94,88591,87840],{"class":153},[94,88593,13546],{"class":100},[94,88595,88596],{"class":153}," JSON",[94,88598,663],{"class":104},[94,88600,88601],{"class":1944},"parse",[94,88603,105],{"class":104},[94,88605,71641],{"class":153},[94,88607,663],{"class":104},[94,88609,71646],{"class":1944},[94,88611,71649],{"class":104},[94,88613,88614,88616,88618],{"class":96,"line":1730},[94,88615,73730],{"class":104},[94,88617,58224],{"class":1944},[94,88619,88032],{"class":104},[94,88621,88622,88624,88626],{"class":96,"line":1735},[94,88623,88350],{"class":104},[94,88625,150],{"class":100},[94,88627,88628],{"class":209}," '123'\n",[94,88630,88631,88633,88635],{"class":96,"line":1740},[94,88632,73730],{"class":104},[94,88634,58224],{"class":1944},[94,88636,70013],{"class":104},[94,88638,88639,88641,88643],{"class":96,"line":1745},[94,88640,52394],{"class":104},[94,88642,51790],{"class":51277},[94,88644,51284],{"class":104},[94,88646,88647,88649,88651],{"class":96,"line":1759},[94,88648,51762],{"class":104},[94,88650,51777],{"class":51277},[94,88652,51284],{"class":104},[94,88654,88655],{"class":96,"line":1764},[94,88656,2381],{"emptyLinePlaceholder":20},[94,88658,88659,88661,88663],{"class":96,"line":2558},[94,88660,51762],{"class":104},[94,88662,50612],{"class":51277},[94,88664,51284],{"class":104},[40,88666,88667],{},[1443,88668],{"alt":14,"src":88669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[35,88671,88673],{"id":88672},"_415-异常处理","4.15 异常处理",[48,88675,88676],{},[51,88677,88678],{},"throw抛异常",[40,88680,88681],{},[1443,88682],{"alt":14,"src":88683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[48,88685,88686],{"start":15},[51,88687,88688],{},"try\u002Fcatch 捕获错误信息",[40,88690,88691],{},[1443,88692],{"alt":14,"src":88693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[85,88695,88697],{"className":50610,"code":88696,"language":50612,"meta":14,"style":14},"\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",[91,88698,88699,88709,88723,88727,88735,88749,88769,88781,88789,88793,88801,88813,88821,88830,88837,88842,88861,88870,88881,88886,88896,88901,88906,88911,88928,88932,88937,88944,88956,88960,88972,88976,88980,88985,88990,88997,89005,89013,89017],{"__ignoreMap":14},[94,88700,88701,88703,88705,88707],{"class":96,"line":97},[94,88702,51274],{"class":104},[94,88704,51278],{"class":51277},[94,88706,51281],{"class":1944},[94,88708,51284],{"class":104},[94,88710,88711,88713,88715,88717,88719,88721],{"class":96,"line":15},[94,88712,1015],{"class":104},[94,88714,50612],{"class":51277},[94,88716,51293],{"class":1944},[94,88718,150],{"class":104},[94,88720,51298],{"class":209},[94,88722,51284],{"class":104},[94,88724,88725],{"class":96,"line":1160},[94,88726,2381],{"emptyLinePlaceholder":20},[94,88728,88729,88731,88733],{"class":96,"line":1175},[94,88730,1015],{"class":104},[94,88732,51311],{"class":51277},[94,88734,51284],{"class":104},[94,88736,88737,88739,88741,88743,88745,88747],{"class":96,"line":1181},[94,88738,52121],{"class":104},[94,88740,51321],{"class":51277},[94,88742,51324],{"class":1944},[94,88744,150],{"class":104},[94,88746,51329],{"class":209},[94,88748,51284],{"class":104},[94,88750,88751,88753,88755,88757,88759,88761,88763,88765,88767],{"class":96,"line":1195},[94,88752,52121],{"class":104},[94,88754,51321],{"class":51277},[94,88756,14902],{"class":1944},[94,88758,150],{"class":104},[94,88760,51368],{"class":209},[94,88762,51348],{"class":1944},[94,88764,150],{"class":104},[94,88766,51375],{"class":209},[94,88768,51284],{"class":104},[94,88770,88771,88773,88775,88777,88779],{"class":96,"line":1201},[94,88772,52121],{"class":104},[94,88774,51384],{"class":51277},[94,88776,51387],{"class":104},[94,88778,51384],{"class":51277},[94,88780,51284],{"class":104},[94,88782,88783,88785,88787],{"class":96,"line":1292},[94,88784,51762],{"class":104},[94,88786,51311],{"class":51277},[94,88788,51284],{"class":104},[94,88790,88791],{"class":96,"line":1298},[94,88792,2381],{"emptyLinePlaceholder":20},[94,88794,88795,88797,88799],{"class":96,"line":1310},[94,88796,1015],{"class":104},[94,88798,51777],{"class":51277},[94,88800,51284],{"class":104},[94,88802,88803,88805,88807,88809,88811],{"class":96,"line":1593},[94,88804,52121],{"class":104},[94,88806,40],{"class":51277},[94,88808,53471],{"class":104},[94,88810,40],{"class":51277},[94,88812,51284],{"class":104},[94,88814,88815,88817,88819],{"class":96,"line":1598},[94,88816,52121],{"class":104},[94,88818,51790],{"class":51277},[94,88820,51284],{"class":104},[94,88822,88823,88825,88828],{"class":96,"line":1604},[94,88824,70061],{"class":100},[94,88826,88827],{"class":1944}," fn",[94,88829,10835],{"class":104},[94,88831,88832,88835],{"class":96,"line":1609},[94,88833,88834],{"class":100},"      try",[94,88836,15554],{"class":104},[94,88838,88839],{"class":96,"line":1623},[94,88840,88841],{"class":163},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[94,88843,88844,88846,88848,88850,88852,88854,88856,88859],{"class":96,"line":1628},[94,88845,61247],{"class":100},[94,88847,6807],{"class":153},[94,88849,13546],{"class":100},[94,88851,54373],{"class":104},[94,88853,54376],{"class":1944},[94,88855,105],{"class":104},[94,88857,88858],{"class":209},"'.p'",[94,88860,111],{"class":104},[94,88862,88863,88866,88868],{"class":96,"line":1634},[94,88864,88865],{"class":104},"        p.style.color ",[94,88867,150],{"class":100},[94,88869,67028],{"class":209},[94,88871,88872,88875,88878],{"class":96,"line":1655},[94,88873,88874],{"class":104},"      } ",[94,88876,88877],{"class":100},"catch",[94,88879,88880],{"class":104}," (err) {\n",[94,88882,88883],{"class":96,"line":1660},[94,88884,88885],{"class":163},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[94,88887,88888,88891,88893],{"class":96,"line":1674},[94,88889,88890],{"class":104},"        console.",[94,88892,58224],{"class":1944},[94,88894,88895],{"class":104},"(err.message)\n",[94,88897,88898],{"class":96,"line":1679},[94,88899,88900],{"class":163},"        \u002F\u002F 想要中断程序，需要加return\n",[94,88902,88903],{"class":96,"line":1708},[94,88904,88905],{"class":163},"        \u002F\u002F return\n",[94,88907,88908],{"class":96,"line":1713},[94,88909,88910],{"class":163},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[94,88912,88913,88916,88918,88921,88923,88926],{"class":96,"line":1730},[94,88914,88915],{"class":100},"        throw",[94,88917,11560],{"class":100},[94,88919,88920],{"class":1944}," Error",[94,88922,105],{"class":104},[94,88924,88925],{"class":209},"'你看看，选择器错误了吧'",[94,88927,111],{"class":104},[94,88929,88930],{"class":96,"line":1735},[94,88931,52375],{"class":104},[94,88933,88934],{"class":96,"line":1740},[94,88935,88936],{"class":163},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[94,88938,88939,88942],{"class":96,"line":1745},[94,88940,88941],{"class":100},"      finally",[94,88943,15554],{"class":104},[94,88945,88946,88949,88951,88954],{"class":96,"line":1759},[94,88947,88948],{"class":1944},"        alert",[94,88950,105],{"class":104},[94,88952,88953],{"class":209},"'弹出对话框'",[94,88955,111],{"class":104},[94,88957,88958],{"class":96,"line":1764},[94,88959,52375],{"class":104},[94,88961,88962,88964,88966,88968,88970],{"class":96,"line":2558},[94,88963,58221],{"class":104},[94,88965,58224],{"class":1944},[94,88967,105],{"class":104},[94,88969,577],{"class":153},[94,88971,111],{"class":104},[94,88973,88974],{"class":96,"line":2572},[94,88975,2381],{"emptyLinePlaceholder":20},[94,88977,88978],{"class":96,"line":2580},[94,88979,2168],{"class":104},[94,88981,88982],{"class":96,"line":2585},[94,88983,88984],{"class":163},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[94,88986,88987],{"class":96,"line":2591},[94,88988,88989],{"class":163},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[94,88991,88992,88995],{"class":96,"line":2597},[94,88993,88994],{"class":1944},"    fn",[94,88996,1957],{"class":104},[94,88998,88999,89001,89003],{"class":96,"line":2602},[94,89000,52394],{"class":104},[94,89002,51790],{"class":51277},[94,89004,51284],{"class":104},[94,89006,89007,89009,89011],{"class":96,"line":7930},[94,89008,51762],{"class":104},[94,89010,51777],{"class":51277},[94,89012,51284],{"class":104},[94,89014,89015],{"class":96,"line":7954},[94,89016,2381],{"emptyLinePlaceholder":20},[94,89018,89019,89021,89023],{"class":96,"line":7959},[94,89020,51762],{"class":104},[94,89022,50612],{"class":51277},[94,89024,51284],{"class":104},[40,89026,89027],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[48,89029,89030],{"start":1160},[51,89031,89032],{},"debugger",[40,89034,89035],{},[1443,89036],{"alt":14,"src":89037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[40,89039,89040],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[35,89042,89044],{"id":89043},"_416-处理this","4.16 处理this",[65,89046,89048],{"id":89047},"_4161-this的指向","4.16.1 this的指向",[48,89050,89051],{},[51,89052,89053],{},"普通函数的this",[40,89055,89056],{},[1443,89057],{"alt":14,"src":89058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[48,89060,89061],{"start":15},[51,89062,89063],{},"箭头函数的this",[40,89065,89066],{},[1443,89067],{"alt":14,"src":89068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[40,89070,89071],{},[1443,89072],{"alt":14,"src":89073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[40,89075,89076],{},[1443,89077],{"alt":14,"src":89078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[65,89080,89082],{"id":89081},"_4162-this的改变","4.16.2 this的改变",[40,89084,89085],{},"call() apply() bind()",[48,89087,89088],{},[51,89089,89090],{},"call()",[40,89092,89093],{},[1443,89094],{"alt":14,"src":89095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[40,89097,89098],{},"两个作用：①调用函数；②改变this指向",[85,89100,89102],{"className":53044,"code":89101,"language":53046,"meta":14,"style":14},"\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",[91,89103,89104,89112,89120,89124,89129,89133,89138,89143,89148,89152,89157,89165],{"__ignoreMap":14},[94,89105,89106,89108,89110],{"class":96,"line":97},[94,89107,1015],{"class":104},[94,89109,51777],{"class":51277},[94,89111,51284],{"class":104},[94,89113,89114,89116,89118],{"class":96,"line":15},[94,89115,52121],{"class":104},[94,89117,51790],{"class":51277},[94,89119,51284],{"class":104},[94,89121,89122],{"class":96,"line":1160},[94,89123,71500],{"class":104},[94,89125,89126],{"class":96,"line":1175},[94,89127,89128],{"class":104},"      uname: 'pink'\n",[94,89130,89131],{"class":96,"line":1181},[94,89132,2168],{"class":104},[94,89134,89135],{"class":96,"line":1195},[94,89136,89137],{"class":104},"    function fn(x, y) {\n",[94,89139,89140],{"class":96,"line":1201},[94,89141,89142],{"class":104},"      console.log(this)  \u002F\u002Fwindow\n",[94,89144,89145],{"class":96,"line":1292},[94,89146,89147],{"class":104},"      console.log(x + y)\n",[94,89149,89150],{"class":96,"line":1298},[94,89151,2168],{"class":104},[94,89153,89154],{"class":96,"line":1310},[94,89155,89156],{"class":104},"    fn.call(obj, 1, 2)\n",[94,89158,89159,89161,89163],{"class":96,"line":1593},[94,89160,52394],{"class":104},[94,89162,51790],{"class":51277},[94,89164,51284],{"class":104},[94,89166,89167,89169,89171],{"class":96,"line":1598},[94,89168,51762],{"class":104},[94,89170,51777],{"class":51277},[94,89172,51284],{"class":104},[40,89174,89175],{},[1443,89176],{"alt":14,"src":89177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[48,89179,89180],{"start":15},[51,89181,89182],{},"apply()",[40,89184,89185],{},[1443,89186],{"alt":14,"src":89187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[40,89189,89098],{},[40,89191,89192],{},"call传递的是普通参数，而apply必须传递的是数组",[85,89194,89196],{"className":50610,"code":89195,"language":50612,"meta":14,"style":14},"\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",[91,89197,89198,89208,89222,89226,89234,89248,89268,89280,89288,89292,89300,89308,89318,89325,89329,89334,89350,89362,89376,89380,89385,89404,89409,89413,89418,89423,89431,89436,89458,89463,89479,89495,89507,89511,89516,89535,89543,89551,89555],{"__ignoreMap":14},[94,89199,89200,89202,89204,89206],{"class":96,"line":97},[94,89201,51274],{"class":104},[94,89203,51278],{"class":51277},[94,89205,51281],{"class":1944},[94,89207,51284],{"class":104},[94,89209,89210,89212,89214,89216,89218,89220],{"class":96,"line":15},[94,89211,1015],{"class":104},[94,89213,50612],{"class":51277},[94,89215,51293],{"class":1944},[94,89217,150],{"class":104},[94,89219,51298],{"class":209},[94,89221,51284],{"class":104},[94,89223,89224],{"class":96,"line":1160},[94,89225,2381],{"emptyLinePlaceholder":20},[94,89227,89228,89230,89232],{"class":96,"line":1175},[94,89229,1015],{"class":104},[94,89231,51311],{"class":51277},[94,89233,51284],{"class":104},[94,89235,89236,89238,89240,89242,89244,89246],{"class":96,"line":1181},[94,89237,52121],{"class":104},[94,89239,51321],{"class":51277},[94,89241,51324],{"class":1944},[94,89243,150],{"class":104},[94,89245,51329],{"class":209},[94,89247,51284],{"class":104},[94,89249,89250,89252,89254,89256,89258,89260,89262,89264,89266],{"class":96,"line":1195},[94,89251,52121],{"class":104},[94,89253,51321],{"class":51277},[94,89255,14902],{"class":1944},[94,89257,150],{"class":104},[94,89259,51368],{"class":209},[94,89261,51348],{"class":1944},[94,89263,150],{"class":104},[94,89265,51375],{"class":209},[94,89267,51284],{"class":104},[94,89269,89270,89272,89274,89276,89278],{"class":96,"line":1201},[94,89271,52121],{"class":104},[94,89273,51384],{"class":51277},[94,89275,51387],{"class":104},[94,89277,51384],{"class":51277},[94,89279,51284],{"class":104},[94,89281,89282,89284,89286],{"class":96,"line":1292},[94,89283,51762],{"class":104},[94,89285,51311],{"class":51277},[94,89287,51284],{"class":104},[94,89289,89290],{"class":96,"line":1298},[94,89291,2381],{"emptyLinePlaceholder":20},[94,89293,89294,89296,89298],{"class":96,"line":1310},[94,89295,1015],{"class":104},[94,89297,51777],{"class":51277},[94,89299,51284],{"class":104},[94,89301,89302,89304,89306],{"class":96,"line":1593},[94,89303,52121],{"class":104},[94,89305,51790],{"class":51277},[94,89307,51284],{"class":104},[94,89309,89310,89312,89314,89316],{"class":96,"line":1598},[94,89311,11203],{"class":100},[94,89313,69948],{"class":153},[94,89315,13546],{"class":100},[94,89317,15554],{"class":104},[94,89319,89320,89322],{"class":96,"line":1604},[94,89321,71603],{"class":104},[94,89323,89324],{"class":153},"18\n",[94,89326,89327],{"class":96,"line":1609},[94,89328,2168],{"class":104},[94,89330,89331],{"class":96,"line":1623},[94,89332,89333],{"class":163},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[94,89335,89336,89338,89340,89342,89344,89346,89348],{"class":96,"line":1628},[94,89337,70061],{"class":100},[94,89339,88827],{"class":1944},[94,89341,105],{"class":104},[94,89343,925],{"class":5198},[94,89345,12417],{"class":104},[94,89347,950],{"class":5198},[94,89349,12424],{"class":104},[94,89351,89352,89354,89356,89358,89360],{"class":96,"line":1634},[94,89353,58221],{"class":104},[94,89355,58224],{"class":1944},[94,89357,105],{"class":104},[94,89359,86970],{"class":153},[94,89361,111],{"class":104},[94,89363,89364,89366,89368,89371,89373],{"class":96,"line":1655},[94,89365,58221],{"class":104},[94,89367,58224],{"class":1944},[94,89369,89370],{"class":104},"(x ",[94,89372,586],{"class":100},[94,89374,89375],{"class":104}," y)\n",[94,89377,89378],{"class":96,"line":1660},[94,89379,2168],{"class":104},[94,89381,89382],{"class":96,"line":1674},[94,89383,89384],{"class":163},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[94,89386,89387,89390,89393,89396,89398,89400,89402],{"class":96,"line":1679},[94,89388,89389],{"class":104},"    fn.",[94,89391,89392],{"class":1944},"apply",[94,89394,89395],{"class":104},"(obj, [",[94,89397,322],{"class":153},[94,89399,12417],{"class":104},[94,89401,182],{"class":153},[94,89403,4638],{"class":104},[94,89405,89406],{"class":96,"line":1708},[94,89407,89408],{"class":163},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[94,89410,89411],{"class":96,"line":1713},[94,89412,2381],{"emptyLinePlaceholder":20},[94,89414,89415],{"class":96,"line":1730},[94,89416,89417],{"class":163},"    \u002F\u002F 使用场景：求数组最大值\n",[94,89419,89420],{"class":96,"line":1735},[94,89421,89422],{"class":163},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[94,89424,89425,89428],{"class":96,"line":1740},[94,89426,89427],{"class":163},"    \u002F\u002F console.log(max)",[94,89429,89430],{"class":163},"   \u002F\u002F3\n",[94,89432,89433],{"class":96,"line":1745},[94,89434,89435],{"class":163},"    \u002F\u002F 指向空或者Math都是可以的\n",[94,89437,89438,89440,89442,89444,89446,89448,89450,89452,89454,89456],{"class":96,"line":1759},[94,89439,11203],{"class":100},[94,89441,57672],{"class":153},[94,89443,13546],{"class":100},[94,89445,52203],{"class":104},[94,89447,416],{"class":153},[94,89449,12417],{"class":104},[94,89451,609],{"class":153},[94,89453,12417],{"class":104},[94,89455,640],{"class":153},[94,89457,33229],{"class":104},[94,89459,89460],{"class":96,"line":1764},[94,89461,89462],{"class":163},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[94,89464,89465,89467,89469,89471,89474,89476],{"class":96,"line":2558},[94,89466,11203],{"class":100},[94,89468,5933],{"class":153},[94,89470,13546],{"class":100},[94,89472,89473],{"class":104}," Math.max.",[94,89475,89392],{"class":1944},[94,89477,89478],{"class":104},"(Math, arr)\n",[94,89480,89481,89483,89486,89488,89491,89493],{"class":96,"line":2572},[94,89482,11203],{"class":100},[94,89484,89485],{"class":153}," min",[94,89487,13546],{"class":100},[94,89489,89490],{"class":104}," Math.min.",[94,89492,89392],{"class":1944},[94,89494,89478],{"class":104},[94,89496,89497,89499,89501,89504],{"class":96,"line":2580},[94,89498,73730],{"class":104},[94,89500,58224],{"class":1944},[94,89502,89503],{"class":104},"(max, min)     ",[94,89505,89506],{"class":163},"\u002F\u002F100,4\n",[94,89508,89509],{"class":96,"line":2585},[94,89510,2381],{"emptyLinePlaceholder":20},[94,89512,89513],{"class":96,"line":2591},[94,89514,89515],{"class":163},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[94,89517,89518,89520,89522,89525,89527,89529,89532],{"class":96,"line":2597},[94,89519,73730],{"class":104},[94,89521,58224],{"class":1944},[94,89523,89524],{"class":104},"(Max.",[94,89526,5997],{"class":1944},[94,89528,105],{"class":104},[94,89530,89531],{"class":100},"...",[94,89533,89534],{"class":104},"arr))\n",[94,89536,89537,89539,89541],{"class":96,"line":2602},[94,89538,52394],{"class":104},[94,89540,51790],{"class":51277},[94,89542,51284],{"class":104},[94,89544,89545,89547,89549],{"class":96,"line":7930},[94,89546,51762],{"class":104},[94,89548,51777],{"class":51277},[94,89550,51284],{"class":104},[94,89552,89553],{"class":96,"line":7954},[94,89554,2381],{"emptyLinePlaceholder":20},[94,89556,89557,89559,89561],{"class":96,"line":7959},[94,89558,51762],{"class":104},[94,89560,50612],{"class":51277},[94,89562,51284],{"class":104},[40,89564,89565],{},[1443,89566],{"alt":14,"src":89567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[48,89569,89570],{"start":1160},[51,89571,89572],{},"bind()",[40,89574,89575],{},[1443,89576],{"alt":14,"src":89577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[40,89579,89580],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[40,89582,89583],{},"bind的语法跟call很相似",[85,89585,89587],{"className":53044,"code":89586,"language":53046,"meta":14,"style":14},"\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",[91,89588,89589,89597,89605,89609,89614,89618,89622,89627,89631,89636,89641,89646,89651,89656,89661,89666,89670,89678],{"__ignoreMap":14},[94,89590,89591,89593,89595],{"class":96,"line":97},[94,89592,1015],{"class":104},[94,89594,51777],{"class":51277},[94,89596,51284],{"class":104},[94,89598,89599,89601,89603],{"class":96,"line":15},[94,89600,52121],{"class":104},[94,89602,51790],{"class":51277},[94,89604,51284],{"class":104},[94,89606,89607],{"class":96,"line":1160},[94,89608,71500],{"class":104},[94,89610,89611],{"class":96,"line":1175},[94,89612,89613],{"class":104},"      age: 18\n",[94,89615,89616],{"class":96,"line":1181},[94,89617,2168],{"class":104},[94,89619,89620],{"class":96,"line":1195},[94,89621,77120],{"class":104},[94,89623,89624],{"class":96,"line":1201},[94,89625,89626],{"class":104},"      console.log(this)\n",[94,89628,89629],{"class":96,"line":1292},[94,89630,2168],{"class":104},[94,89632,89633],{"class":96,"line":1298},[94,89634,89635],{"class":104},"    \u002F\u002F 1.bind 不会调用函数\n",[94,89637,89638],{"class":96,"line":1310},[94,89639,89640],{"class":104},"    \u002F\u002F 2.bind能改变this的指向\n",[94,89642,89643],{"class":96,"line":1593},[94,89644,89645],{"class":104},"    fn.bind()\n",[94,89647,89648],{"class":96,"line":1598},[94,89649,89650],{"class":104},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[94,89652,89653],{"class":96,"line":1604},[94,89654,89655],{"class":104},"    const fun = fn.bind(obj)\n",[94,89657,89658],{"class":96,"line":1609},[94,89659,89660],{"class":104},"    \u002F\u002F console.log(fun)\n",[94,89662,89663],{"class":96,"line":1623},[94,89664,89665],{"class":104},"    \u002F\u002F 调用,查看this的指向\n",[94,89667,89668],{"class":96,"line":1628},[94,89669,52628],{"class":104},[94,89671,89672,89674,89676],{"class":96,"line":1634},[94,89673,52394],{"class":104},[94,89675,51790],{"class":51277},[94,89677,51284],{"class":104},[94,89679,89680,89682,89684],{"class":96,"line":1655},[94,89681,51762],{"class":104},[94,89683,51777],{"class":51277},[94,89685,51284],{"class":104},[40,89687,89688],{},[1443,89689],{"alt":14,"src":89690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[48,89692,89693],{"start":1175},[51,89694,89695],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[85,89697,89699],{"className":53044,"code":89698,"language":53046,"meta":14,"style":14},"\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",[91,89700,89701,89709,89722,89730,89735,89739,89744,89749,89754,89759,89764,89769,89774,89779,89783,89791],{"__ignoreMap":14},[94,89702,89703,89705,89707],{"class":96,"line":97},[94,89704,1015],{"class":104},[94,89706,51777],{"class":51277},[94,89708,51284],{"class":104},[94,89710,89711,89713,89715,89718,89720],{"class":96,"line":15},[94,89712,52121],{"class":104},[94,89714,53864],{"class":51277},[94,89716,89717],{"class":104},">禁用\u003C\u002F",[94,89719,53864],{"class":51277},[94,89721,51284],{"class":104},[94,89723,89724,89726,89728],{"class":96,"line":1160},[94,89725,52121],{"class":104},[94,89727,51790],{"class":51277},[94,89729,51284],{"class":104},[94,89731,89732],{"class":96,"line":1175},[94,89733,89734],{"class":104},"    const btn = document.querySelector('button')\n",[94,89736,89737],{"class":96,"line":1181},[94,89738,58993],{"class":104},[94,89740,89741],{"class":96,"line":1195},[94,89742,89743],{"class":104},"      this.disabled = true\n",[94,89745,89746],{"class":96,"line":1201},[94,89747,89748],{"class":104},"      \u002F\u002F 定时器是window进行调用的\n",[94,89750,89751],{"class":96,"line":1292},[94,89752,89753],{"class":104},"      setTimeout(function () {\n",[94,89755,89756],{"class":96,"line":1298},[94,89757,89758],{"class":104},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[94,89760,89761],{"class":96,"line":1310},[94,89762,89763],{"class":104},"        this.disabled = false\n",[94,89765,89766],{"class":96,"line":1593},[94,89767,89768],{"class":104},"      }.bind(this), 2000)\n",[94,89770,89771],{"class":96,"line":1598},[94,89772,89773],{"class":104},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[94,89775,89776],{"class":96,"line":1604},[94,89777,89778],{"class":104},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[94,89780,89781],{"class":96,"line":1609},[94,89782,33444],{"class":104},[94,89784,89785,89787,89789],{"class":96,"line":1623},[94,89786,52394],{"class":104},[94,89788,51790],{"class":51277},[94,89790,51284],{"class":104},[94,89792,89793,89795,89797],{"class":96,"line":1628},[94,89794,51762],{"class":104},[94,89796,51777],{"class":51277},[94,89798,51284],{"class":104},[48,89800,89801],{"start":1181},[51,89802,21935],{},[40,89804,89805],{},[1443,89806],{"alt":14,"src":89807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[35,89809,89811],{"id":89810},"_417-性能优化","4.17 性能优化",[65,89813,89815],{"id":89814},"_4171-防抖","4.17.1 防抖",[40,89817,89818],{},[1443,89819],{"alt":14,"src":89820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[40,89822,89823],{},[254,89824,89825],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[40,89827,89828],{},"防抖实现方式：",[1112,89830,89831],{},[51,89832,89833],{},"lodash 提供了防抖处理",[40,89835,89836],{},"_.debounce(func,[wait=0],[options={}])",[40,89838,89839],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[85,89841,89843],{"className":50610,"code":89842,"language":50612,"meta":14,"style":14},"\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",[91,89844,89845,89855,89869,89873,89881,89895,89915,89927,89935,89941,89951,89963,89975,89986,89998,90008,90018,90031,90035,90043,90051,90055,90063,90081,90099,90107,90126,90136,90145,90156,90161,90165,90170,90175,90180,90205,90213,90221,90225],{"__ignoreMap":14},[94,89846,89847,89849,89851,89853],{"class":96,"line":97},[94,89848,51274],{"class":104},[94,89850,51278],{"class":51277},[94,89852,51281],{"class":1944},[94,89854,51284],{"class":104},[94,89856,89857,89859,89861,89863,89865,89867],{"class":96,"line":15},[94,89858,1015],{"class":104},[94,89860,50612],{"class":51277},[94,89862,51293],{"class":1944},[94,89864,150],{"class":104},[94,89866,51298],{"class":209},[94,89868,51284],{"class":104},[94,89870,89871],{"class":96,"line":1160},[94,89872,2381],{"emptyLinePlaceholder":20},[94,89874,89875,89877,89879],{"class":96,"line":1175},[94,89876,1015],{"class":104},[94,89878,51311],{"class":51277},[94,89880,51284],{"class":104},[94,89882,89883,89885,89887,89889,89891,89893],{"class":96,"line":1181},[94,89884,52121],{"class":104},[94,89886,51321],{"class":51277},[94,89888,51324],{"class":1944},[94,89890,150],{"class":104},[94,89892,51329],{"class":209},[94,89894,51284],{"class":104},[94,89896,89897,89899,89901,89903,89905,89907,89909,89911,89913],{"class":96,"line":1195},[94,89898,52121],{"class":104},[94,89900,51321],{"class":51277},[94,89902,14902],{"class":1944},[94,89904,150],{"class":104},[94,89906,51368],{"class":209},[94,89908,51348],{"class":1944},[94,89910,150],{"class":104},[94,89912,51375],{"class":209},[94,89914,51284],{"class":104},[94,89916,89917,89919,89921,89923,89925],{"class":96,"line":1201},[94,89918,52121],{"class":104},[94,89920,51384],{"class":51277},[94,89922,51387],{"class":104},[94,89924,51384],{"class":51277},[94,89926,51284],{"class":104},[94,89928,89929,89931,89933],{"class":96,"line":1292},[94,89930,52121],{"class":104},[94,89932,5108],{"class":51277},[94,89934,51284],{"class":104},[94,89936,89937,89939],{"class":96,"line":1298},[94,89938,54729],{"class":1944},[94,89940,15554],{"class":104},[94,89942,89943,89945,89947,89949],{"class":96,"line":1310},[94,89944,72573],{"class":153},[94,89946,51414],{"class":104},[94,89948,60482],{"class":153},[94,89950,1271],{"class":104},[94,89952,89953,89955,89957,89959,89961],{"class":96,"line":1593},[94,89954,54748],{"class":153},[94,89956,51414],{"class":104},[94,89958,1703],{"class":153},[94,89960,51469],{"class":100},[94,89962,1271],{"class":104},[94,89964,89965,89967,89969,89971,89973],{"class":96,"line":1598},[94,89966,54762],{"class":153},[94,89968,51414],{"class":104},[94,89970,1703],{"class":153},[94,89972,51469],{"class":100},[94,89974,1271],{"class":104},[94,89976,89977,89979,89981,89984],{"class":96,"line":1604},[94,89978,54861],{"class":153},[94,89980,51414],{"class":104},[94,89982,89983],{"class":153},"gray",[94,89985,1271],{"class":104},[94,89987,89988,89990,89992,89994,89996],{"class":96,"line":1609},[94,89989,54899],{"class":153},[94,89991,51414],{"class":104},[94,89993,930],{"class":153},[94,89995,51469],{"class":100},[94,89997,1271],{"class":104},[94,89999,90000,90002,90004,90006],{"class":96,"line":1623},[94,90001,57393],{"class":153},[94,90003,51414],{"class":104},[94,90005,60819],{"class":153},[94,90007,1271],{"class":104},[94,90009,90010,90012,90014,90016],{"class":96,"line":1628},[94,90011,57263],{"class":153},[94,90013,51414],{"class":104},[94,90015,51569],{"class":153},[94,90017,1271],{"class":104},[94,90019,90020,90023,90025,90027,90029],{"class":96,"line":1634},[94,90021,90022],{"class":153},"      padding-top",[94,90024,51414],{"class":104},[94,90026,424],{"class":153},[94,90028,51469],{"class":100},[94,90030,1271],{"class":104},[94,90032,90033],{"class":96,"line":1655},[94,90034,2168],{"class":104},[94,90036,90037,90039,90041],{"class":96,"line":1660},[94,90038,52394],{"class":104},[94,90040,5108],{"class":51277},[94,90042,51284],{"class":104},[94,90044,90045,90047,90049],{"class":96,"line":1674},[94,90046,51762],{"class":104},[94,90048,51311],{"class":51277},[94,90050,51284],{"class":104},[94,90052,90053],{"class":96,"line":1679},[94,90054,2381],{"emptyLinePlaceholder":20},[94,90056,90057,90059,90061],{"class":96,"line":1708},[94,90058,1015],{"class":104},[94,90060,51777],{"class":51277},[94,90062,51284],{"class":104},[94,90064,90065,90067,90069,90071,90073,90075,90077,90079],{"class":96,"line":1713},[94,90066,52121],{"class":104},[94,90068,51588],{"class":51277},[94,90070,53463],{"class":1944},[94,90072,150],{"class":104},[94,90074,53468],{"class":209},[94,90076,55291],{"class":104},[94,90078,51588],{"class":51277},[94,90080,51284],{"class":104},[94,90082,90083,90085,90087,90089,90091,90093,90095,90097],{"class":96,"line":1730},[94,90084,52121],{"class":104},[94,90086,51790],{"class":51277},[94,90088,55216],{"class":1944},[94,90090,150],{"class":104},[94,90092,88251],{"class":209},[94,90094,55291],{"class":104},[94,90096,51790],{"class":51277},[94,90098,51284],{"class":104},[94,90100,90101,90103,90105],{"class":96,"line":1735},[94,90102,52121],{"class":104},[94,90104,51790],{"class":51277},[94,90106,51284],{"class":104},[94,90108,90109,90111,90113,90115,90117,90119,90121,90124],{"class":96,"line":1740},[94,90110,11203],{"class":100},[94,90112,86910],{"class":153},[94,90114,13546],{"class":100},[94,90116,54373],{"class":104},[94,90118,54376],{"class":1944},[94,90120,105],{"class":104},[94,90122,90123],{"class":209},"'.box'",[94,90125,111],{"class":104},[94,90127,90128,90130,90132,90134],{"class":96,"line":1745},[94,90129,52196],{"class":100},[94,90131,9420],{"class":104},[94,90133,150],{"class":100},[94,90135,47316],{"class":153},[94,90137,90138,90140,90143],{"class":96,"line":1759},[94,90139,70061],{"class":100},[94,90141,90142],{"class":1944}," mouseMove",[94,90144,10835],{"class":104},[94,90146,90147,90150,90152,90154],{"class":96,"line":1764},[94,90148,90149],{"class":104},"      box.innerHTML ",[94,90151,150],{"class":100},[94,90153,3013],{"class":104},[94,90155,2683],{"class":100},[94,90157,90158],{"class":96,"line":2558},[94,90159,90160],{"class":163},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[94,90162,90163],{"class":96,"line":2572},[94,90164,2168],{"class":104},[94,90166,90167],{"class":96,"line":2580},[94,90168,90169],{"class":163},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[94,90171,90172],{"class":96,"line":2585},[94,90173,90174],{"class":163},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[94,90176,90177],{"class":96,"line":2591},[94,90178,90179],{"class":163},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[94,90181,90182,90185,90187,90189,90192,90195,90198,90201,90203],{"class":96,"line":2597},[94,90183,90184],{"class":104},"    box.",[94,90186,57790],{"class":1944},[94,90188,105],{"class":104},[94,90190,90191],{"class":209},"'mousemove'",[94,90193,90194],{"class":104},", _.",[94,90196,90197],{"class":1944},"debounce",[94,90199,90200],{"class":104},"(mouseMove, ",[94,90202,65051],{"class":153},[94,90204,30480],{"class":104},[94,90206,90207,90209,90211],{"class":96,"line":2602},[94,90208,52394],{"class":104},[94,90210,51790],{"class":51277},[94,90212,51284],{"class":104},[94,90214,90215,90217,90219],{"class":96,"line":7930},[94,90216,51762],{"class":104},[94,90218,51777],{"class":51277},[94,90220,51284],{"class":104},[94,90222,90223],{"class":96,"line":7954},[94,90224,2381],{"emptyLinePlaceholder":20},[94,90226,90227,90229,90231],{"class":96,"line":7959},[94,90228,51762],{"class":104},[94,90230,50612],{"class":51277},[94,90232,51284],{"class":104},[1112,90234,90235],{},[51,90236,90237],{},"手写一个防抖函数来处理",[40,90239,90240],{},"防抖的核心就是利用定时器来实现的：",[40,90242,90243],{},"①声明一个定时器变量",[40,90245,90246],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[40,90248,90249],{},"③如果没有定时器则开启定时器，记得存到变量里面",[85,90251,90253],{"className":50610,"code":90252,"language":50612,"meta":14,"style":14},"\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",[91,90254,90255,90265,90279,90283,90291,90305,90325,90337,90345,90351,90361,90373,90385,90395,90407,90417,90427,90439,90443,90451,90459,90463,90471,90489,90507,90515,90533,90543,90551,90561,90565,90569,90573,90578,90583,90588,90593,90598,90603,90621,90628,90633,90641,90646,90659,90675,90685,90690,90694,90698,90718,90722,90727,90732,90737,90742,90750,90758,90762],{"__ignoreMap":14},[94,90256,90257,90259,90261,90263],{"class":96,"line":97},[94,90258,51274],{"class":104},[94,90260,51278],{"class":51277},[94,90262,51281],{"class":1944},[94,90264,51284],{"class":104},[94,90266,90267,90269,90271,90273,90275,90277],{"class":96,"line":15},[94,90268,1015],{"class":104},[94,90270,50612],{"class":51277},[94,90272,51293],{"class":1944},[94,90274,150],{"class":104},[94,90276,51298],{"class":209},[94,90278,51284],{"class":104},[94,90280,90281],{"class":96,"line":1160},[94,90282,2381],{"emptyLinePlaceholder":20},[94,90284,90285,90287,90289],{"class":96,"line":1175},[94,90286,1015],{"class":104},[94,90288,51311],{"class":51277},[94,90290,51284],{"class":104},[94,90292,90293,90295,90297,90299,90301,90303],{"class":96,"line":1181},[94,90294,52121],{"class":104},[94,90296,51321],{"class":51277},[94,90298,51324],{"class":1944},[94,90300,150],{"class":104},[94,90302,51329],{"class":209},[94,90304,51284],{"class":104},[94,90306,90307,90309,90311,90313,90315,90317,90319,90321,90323],{"class":96,"line":1195},[94,90308,52121],{"class":104},[94,90310,51321],{"class":51277},[94,90312,14902],{"class":1944},[94,90314,150],{"class":104},[94,90316,51368],{"class":209},[94,90318,51348],{"class":1944},[94,90320,150],{"class":104},[94,90322,51375],{"class":209},[94,90324,51284],{"class":104},[94,90326,90327,90329,90331,90333,90335],{"class":96,"line":1201},[94,90328,52121],{"class":104},[94,90330,51384],{"class":51277},[94,90332,51387],{"class":104},[94,90334,51384],{"class":51277},[94,90336,51284],{"class":104},[94,90338,90339,90341,90343],{"class":96,"line":1292},[94,90340,52121],{"class":104},[94,90342,5108],{"class":51277},[94,90344,51284],{"class":104},[94,90346,90347,90349],{"class":96,"line":1298},[94,90348,54729],{"class":1944},[94,90350,15554],{"class":104},[94,90352,90353,90355,90357,90359],{"class":96,"line":1310},[94,90354,72573],{"class":153},[94,90356,51414],{"class":104},[94,90358,60482],{"class":153},[94,90360,1271],{"class":104},[94,90362,90363,90365,90367,90369,90371],{"class":96,"line":1593},[94,90364,54748],{"class":153},[94,90366,51414],{"class":104},[94,90368,1703],{"class":153},[94,90370,51469],{"class":100},[94,90372,1271],{"class":104},[94,90374,90375,90377,90379,90381,90383],{"class":96,"line":1598},[94,90376,54762],{"class":153},[94,90378,51414],{"class":104},[94,90380,1703],{"class":153},[94,90382,51469],{"class":100},[94,90384,1271],{"class":104},[94,90386,90387,90389,90391,90393],{"class":96,"line":1604},[94,90388,54861],{"class":153},[94,90390,51414],{"class":104},[94,90392,89983],{"class":153},[94,90394,1271],{"class":104},[94,90396,90397,90399,90401,90403,90405],{"class":96,"line":1609},[94,90398,54899],{"class":153},[94,90400,51414],{"class":104},[94,90402,930],{"class":153},[94,90404,51469],{"class":100},[94,90406,1271],{"class":104},[94,90408,90409,90411,90413,90415],{"class":96,"line":1623},[94,90410,57393],{"class":153},[94,90412,51414],{"class":104},[94,90414,60819],{"class":153},[94,90416,1271],{"class":104},[94,90418,90419,90421,90423,90425],{"class":96,"line":1628},[94,90420,57263],{"class":153},[94,90422,51414],{"class":104},[94,90424,51569],{"class":153},[94,90426,1271],{"class":104},[94,90428,90429,90431,90433,90435,90437],{"class":96,"line":1634},[94,90430,90022],{"class":153},[94,90432,51414],{"class":104},[94,90434,424],{"class":153},[94,90436,51469],{"class":100},[94,90438,1271],{"class":104},[94,90440,90441],{"class":96,"line":1655},[94,90442,2168],{"class":104},[94,90444,90445,90447,90449],{"class":96,"line":1660},[94,90446,52394],{"class":104},[94,90448,5108],{"class":51277},[94,90450,51284],{"class":104},[94,90452,90453,90455,90457],{"class":96,"line":1674},[94,90454,51762],{"class":104},[94,90456,51311],{"class":51277},[94,90458,51284],{"class":104},[94,90460,90461],{"class":96,"line":1679},[94,90462,2381],{"emptyLinePlaceholder":20},[94,90464,90465,90467,90469],{"class":96,"line":1708},[94,90466,1015],{"class":104},[94,90468,51777],{"class":51277},[94,90470,51284],{"class":104},[94,90472,90473,90475,90477,90479,90481,90483,90485,90487],{"class":96,"line":1713},[94,90474,52121],{"class":104},[94,90476,51588],{"class":51277},[94,90478,53463],{"class":1944},[94,90480,150],{"class":104},[94,90482,53468],{"class":209},[94,90484,55291],{"class":104},[94,90486,51588],{"class":51277},[94,90488,51284],{"class":104},[94,90490,90491,90493,90495,90497,90499,90501,90503,90505],{"class":96,"line":1730},[94,90492,52121],{"class":104},[94,90494,51790],{"class":51277},[94,90496,55216],{"class":1944},[94,90498,150],{"class":104},[94,90500,88251],{"class":209},[94,90502,55291],{"class":104},[94,90504,51790],{"class":51277},[94,90506,51284],{"class":104},[94,90508,90509,90511,90513],{"class":96,"line":1735},[94,90510,52121],{"class":104},[94,90512,51790],{"class":51277},[94,90514,51284],{"class":104},[94,90516,90517,90519,90521,90523,90525,90527,90529,90531],{"class":96,"line":1740},[94,90518,11203],{"class":100},[94,90520,86910],{"class":153},[94,90522,13546],{"class":100},[94,90524,54373],{"class":104},[94,90526,54376],{"class":1944},[94,90528,105],{"class":104},[94,90530,90123],{"class":209},[94,90532,111],{"class":104},[94,90534,90535,90537,90539,90541],{"class":96,"line":1745},[94,90536,52196],{"class":100},[94,90538,9420],{"class":104},[94,90540,150],{"class":100},[94,90542,47316],{"class":153},[94,90544,90545,90547,90549],{"class":96,"line":1759},[94,90546,70061],{"class":100},[94,90548,90142],{"class":1944},[94,90550,10835],{"class":104},[94,90552,90553,90555,90557,90559],{"class":96,"line":1764},[94,90554,90149],{"class":104},[94,90556,150],{"class":100},[94,90558,3013],{"class":104},[94,90560,2683],{"class":100},[94,90562,90563],{"class":96,"line":2558},[94,90564,90160],{"class":163},[94,90566,90567],{"class":96,"line":2572},[94,90568,2168],{"class":104},[94,90570,90571],{"class":96,"line":2580},[94,90572,90169],{"class":163},[94,90574,90575],{"class":96,"line":2585},[94,90576,90577],{"class":163},"    \u002F\u002F 手写防抖函数\n",[94,90579,90580],{"class":96,"line":2591},[94,90581,90582],{"class":163},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[94,90584,90585],{"class":96,"line":2597},[94,90586,90587],{"class":163},"    \u002F\u002F 1.声明定时器变量\n",[94,90589,90590],{"class":96,"line":2602},[94,90591,90592],{"class":163},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[94,90594,90595],{"class":96,"line":7930},[94,90596,90597],{"class":163},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[94,90599,90600],{"class":96,"line":7954},[94,90601,90602],{"class":163},"    \u002F\u002F 4.定时器里面写函数调用\n",[94,90604,90605,90607,90610,90612,90615,90617,90619],{"class":96,"line":7959},[94,90606,70061],{"class":100},[94,90608,90609],{"class":1944}," debounce",[94,90611,105],{"class":104},[94,90613,90614],{"class":5198},"fn",[94,90616,12417],{"class":104},[94,90618,825],{"class":5198},[94,90620,12424],{"class":104},[94,90622,90623,90625],{"class":96,"line":7965},[94,90624,79749],{"class":100},[94,90626,90627],{"class":104}," timer\n",[94,90629,90630],{"class":96,"line":7992},[94,90631,90632],{"class":163},"      \u002F\u002F return 返回一个匿名函数\n",[94,90634,90635,90637,90639],{"class":96,"line":7997},[94,90636,73959],{"class":100},[94,90638,58895],{"class":100},[94,90640,54429],{"class":104},[94,90642,90643],{"class":96,"line":8003},[94,90644,90645],{"class":163},"        \u002F\u002F 这里边写第二三四步\n",[94,90647,90648,90650,90653,90656],{"class":96,"line":8015},[94,90649,2478],{"class":100},[94,90651,90652],{"class":104}," (timer) ",[94,90654,90655],{"class":1944},"clearTimeout",[94,90657,90658],{"class":104},"(timer)\n",[94,90660,90661,90664,90666,90669,90671,90673],{"class":96,"line":8027},[94,90662,90663],{"class":104},"        timer ",[94,90665,150],{"class":100},[94,90667,90668],{"class":1944}," setTimeout",[94,90670,105],{"class":104},[94,90672,54426],{"class":100},[94,90674,54429],{"class":104},[94,90676,90677,90680,90682],{"class":96,"line":8039},[94,90678,90679],{"class":1944},"          fn",[94,90681,13032],{"class":104},[94,90683,90684],{"class":163},"\u002F\u002F加小括号调用fn }, t)\n",[94,90686,90687],{"class":96,"line":9698},[94,90688,90689],{"class":104},"        }, t)\n",[94,90691,90692],{"class":96,"line":9723},[94,90693,52375],{"class":104},[94,90695,90696],{"class":96,"line":9746},[94,90697,2168],{"class":104},[94,90699,90700,90702,90704,90706,90708,90710,90712,90714,90716],{"class":96,"line":9770},[94,90701,90184],{"class":104},[94,90703,57790],{"class":1944},[94,90705,105],{"class":104},[94,90707,90191],{"class":209},[94,90709,12417],{"class":104},[94,90711,90197],{"class":1944},[94,90713,90200],{"class":104},[94,90715,65051],{"class":153},[94,90717,30480],{"class":104},[94,90719,90720],{"class":96,"line":9775},[94,90721,2381],{"emptyLinePlaceholder":20},[94,90723,90724],{"class":96,"line":9780},[94,90725,90726],{"class":163},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[94,90728,90729],{"class":96,"line":9785},[94,90730,90731],{"class":163},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[94,90733,90734],{"class":96,"line":9794},[94,90735,90736],{"class":163},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[94,90738,90739],{"class":96,"line":9799},[94,90740,90741],{"class":163},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[94,90743,90744,90746,90748],{"class":96,"line":9805},[94,90745,52394],{"class":104},[94,90747,51790],{"class":51277},[94,90749,51284],{"class":104},[94,90751,90752,90754,90756],{"class":96,"line":9826},[94,90753,51762],{"class":104},[94,90755,51777],{"class":51277},[94,90757,51284],{"class":104},[94,90759,90760],{"class":96,"line":9832},[94,90761,2381],{"emptyLinePlaceholder":20},[94,90763,90764,90766,90768],{"class":96,"line":9846},[94,90765,51762],{"class":104},[94,90767,50612],{"class":51277},[94,90769,51284],{"class":104},[65,90771,90773],{"id":90772},"_4172-节流","4.17.2 节流",[40,90775,90776],{},[1443,90777],{"alt":14,"src":90778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[40,90780,90781],{},[1443,90782],{"alt":14,"src":90783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[40,90785,90786],{},[254,90787,90788],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[40,90790,90791],{},"实现方式：",[1112,90793,90794],{},[51,90795,90796],{},"lodash 提供的节流函数来处理",[40,90798,90799],{},"_.throttle(func,[wait=0],[options=])",[40,90801,90802],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[85,90804,90806],{"className":50610,"code":90805,"language":50612,"meta":14,"style":14},"\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",[91,90807,90808,90818,90832,90836,90844,90858,90878,90890,90898,90904,90914,90926,90938,90948,90960,90970,90980,90992,90996,91004,91012,91016,91024,91042,91060,91068,91086,91096,91104,91114,91118,91122,91126,91131,91136,91157,91165,91173,91177],{"__ignoreMap":14},[94,90809,90810,90812,90814,90816],{"class":96,"line":97},[94,90811,51274],{"class":104},[94,90813,51278],{"class":51277},[94,90815,51281],{"class":1944},[94,90817,51284],{"class":104},[94,90819,90820,90822,90824,90826,90828,90830],{"class":96,"line":15},[94,90821,1015],{"class":104},[94,90823,50612],{"class":51277},[94,90825,51293],{"class":1944},[94,90827,150],{"class":104},[94,90829,51298],{"class":209},[94,90831,51284],{"class":104},[94,90833,90834],{"class":96,"line":1160},[94,90835,2381],{"emptyLinePlaceholder":20},[94,90837,90838,90840,90842],{"class":96,"line":1175},[94,90839,1015],{"class":104},[94,90841,51311],{"class":51277},[94,90843,51284],{"class":104},[94,90845,90846,90848,90850,90852,90854,90856],{"class":96,"line":1181},[94,90847,52121],{"class":104},[94,90849,51321],{"class":51277},[94,90851,51324],{"class":1944},[94,90853,150],{"class":104},[94,90855,51329],{"class":209},[94,90857,51284],{"class":104},[94,90859,90860,90862,90864,90866,90868,90870,90872,90874,90876],{"class":96,"line":1195},[94,90861,52121],{"class":104},[94,90863,51321],{"class":51277},[94,90865,14902],{"class":1944},[94,90867,150],{"class":104},[94,90869,51368],{"class":209},[94,90871,51348],{"class":1944},[94,90873,150],{"class":104},[94,90875,51375],{"class":209},[94,90877,51284],{"class":104},[94,90879,90880,90882,90884,90886,90888],{"class":96,"line":1201},[94,90881,52121],{"class":104},[94,90883,51384],{"class":51277},[94,90885,51387],{"class":104},[94,90887,51384],{"class":51277},[94,90889,51284],{"class":104},[94,90891,90892,90894,90896],{"class":96,"line":1292},[94,90893,52121],{"class":104},[94,90895,5108],{"class":51277},[94,90897,51284],{"class":104},[94,90899,90900,90902],{"class":96,"line":1298},[94,90901,54729],{"class":1944},[94,90903,15554],{"class":104},[94,90905,90906,90908,90910,90912],{"class":96,"line":1310},[94,90907,72573],{"class":153},[94,90909,51414],{"class":104},[94,90911,60482],{"class":153},[94,90913,1271],{"class":104},[94,90915,90916,90918,90920,90922,90924],{"class":96,"line":1593},[94,90917,54748],{"class":153},[94,90919,51414],{"class":104},[94,90921,1703],{"class":153},[94,90923,51469],{"class":100},[94,90925,1271],{"class":104},[94,90927,90928,90930,90932,90934,90936],{"class":96,"line":1598},[94,90929,54762],{"class":153},[94,90931,51414],{"class":104},[94,90933,1703],{"class":153},[94,90935,51469],{"class":100},[94,90937,1271],{"class":104},[94,90939,90940,90942,90944,90946],{"class":96,"line":1604},[94,90941,54861],{"class":153},[94,90943,51414],{"class":104},[94,90945,89983],{"class":153},[94,90947,1271],{"class":104},[94,90949,90950,90952,90954,90956,90958],{"class":96,"line":1609},[94,90951,54899],{"class":153},[94,90953,51414],{"class":104},[94,90955,930],{"class":153},[94,90957,51469],{"class":100},[94,90959,1271],{"class":104},[94,90961,90962,90964,90966,90968],{"class":96,"line":1623},[94,90963,57393],{"class":153},[94,90965,51414],{"class":104},[94,90967,60819],{"class":153},[94,90969,1271],{"class":104},[94,90971,90972,90974,90976,90978],{"class":96,"line":1628},[94,90973,57263],{"class":153},[94,90975,51414],{"class":104},[94,90977,51569],{"class":153},[94,90979,1271],{"class":104},[94,90981,90982,90984,90986,90988,90990],{"class":96,"line":1634},[94,90983,90022],{"class":153},[94,90985,51414],{"class":104},[94,90987,424],{"class":153},[94,90989,51469],{"class":100},[94,90991,1271],{"class":104},[94,90993,90994],{"class":96,"line":1655},[94,90995,2168],{"class":104},[94,90997,90998,91000,91002],{"class":96,"line":1660},[94,90999,52394],{"class":104},[94,91001,5108],{"class":51277},[94,91003,51284],{"class":104},[94,91005,91006,91008,91010],{"class":96,"line":1674},[94,91007,51762],{"class":104},[94,91009,51311],{"class":51277},[94,91011,51284],{"class":104},[94,91013,91014],{"class":96,"line":1679},[94,91015,2381],{"emptyLinePlaceholder":20},[94,91017,91018,91020,91022],{"class":96,"line":1708},[94,91019,1015],{"class":104},[94,91021,51777],{"class":51277},[94,91023,51284],{"class":104},[94,91025,91026,91028,91030,91032,91034,91036,91038,91040],{"class":96,"line":1713},[94,91027,52121],{"class":104},[94,91029,51588],{"class":51277},[94,91031,53463],{"class":1944},[94,91033,150],{"class":104},[94,91035,53468],{"class":209},[94,91037,55291],{"class":104},[94,91039,51588],{"class":51277},[94,91041,51284],{"class":104},[94,91043,91044,91046,91048,91050,91052,91054,91056,91058],{"class":96,"line":1730},[94,91045,52121],{"class":104},[94,91047,51790],{"class":51277},[94,91049,55216],{"class":1944},[94,91051,150],{"class":104},[94,91053,88251],{"class":209},[94,91055,55291],{"class":104},[94,91057,51790],{"class":51277},[94,91059,51284],{"class":104},[94,91061,91062,91064,91066],{"class":96,"line":1735},[94,91063,52121],{"class":104},[94,91065,51790],{"class":51277},[94,91067,51284],{"class":104},[94,91069,91070,91072,91074,91076,91078,91080,91082,91084],{"class":96,"line":1740},[94,91071,11203],{"class":100},[94,91073,86910],{"class":153},[94,91075,13546],{"class":100},[94,91077,54373],{"class":104},[94,91079,54376],{"class":1944},[94,91081,105],{"class":104},[94,91083,90123],{"class":209},[94,91085,111],{"class":104},[94,91087,91088,91090,91092,91094],{"class":96,"line":1745},[94,91089,52196],{"class":100},[94,91091,9420],{"class":104},[94,91093,150],{"class":100},[94,91095,47316],{"class":153},[94,91097,91098,91100,91102],{"class":96,"line":1759},[94,91099,70061],{"class":100},[94,91101,90142],{"class":1944},[94,91103,10835],{"class":104},[94,91105,91106,91108,91110,91112],{"class":96,"line":1764},[94,91107,90149],{"class":104},[94,91109,150],{"class":100},[94,91111,3013],{"class":104},[94,91113,2683],{"class":100},[94,91115,91116],{"class":96,"line":2558},[94,91117,90160],{"class":163},[94,91119,91120],{"class":96,"line":2572},[94,91121,2168],{"class":104},[94,91123,91124],{"class":96,"line":2580},[94,91125,90169],{"class":163},[94,91127,91128],{"class":96,"line":2585},[94,91129,91130],{"class":163},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[94,91132,91133],{"class":96,"line":2591},[94,91134,91135],{"class":163},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[94,91137,91138,91140,91142,91144,91146,91148,91151,91153,91155],{"class":96,"line":2597},[94,91139,90184],{"class":104},[94,91141,57790],{"class":1944},[94,91143,105],{"class":104},[94,91145,90191],{"class":209},[94,91147,90194],{"class":104},[94,91149,91150],{"class":1944},"throttle",[94,91152,90200],{"class":104},[94,91154,65051],{"class":153},[94,91156,30480],{"class":104},[94,91158,91159,91161,91163],{"class":96,"line":2602},[94,91160,52394],{"class":104},[94,91162,51790],{"class":51277},[94,91164,51284],{"class":104},[94,91166,91167,91169,91171],{"class":96,"line":7930},[94,91168,51762],{"class":104},[94,91170,51777],{"class":51277},[94,91172,51284],{"class":104},[94,91174,91175],{"class":96,"line":7954},[94,91176,2381],{"emptyLinePlaceholder":20},[94,91178,91179,91181,91183],{"class":96,"line":7959},[94,91180,51762],{"class":104},[94,91182,50612],{"class":51277},[94,91184,51284],{"class":104},[1112,91186,91187],{},[51,91188,91189],{},"手写一个节流函数来处理",[40,91191,70929],{},[40,91193,90243],{},[40,91195,91196],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[40,91198,91199],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[85,91201,91203],{"className":50610,"code":91202,"language":50612,"meta":14,"style":14},"\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",[91,91204,91205,91215,91229,91233,91241,91255,91275,91287,91295,91301,91311,91323,91335,91345,91357,91367,91377,91389,91393,91401,91409,91413,91421,91439,91457,91465,91483,91493,91501,91511,91515,91519,91523,91528,91533,91538,91543,91548,91553,91570,91576,91584,91595,91610,91617,91622,91627,91637,91642,91647,91652,91656,91660,91664,91684,91692,91700,91704],{"__ignoreMap":14},[94,91206,91207,91209,91211,91213],{"class":96,"line":97},[94,91208,51274],{"class":104},[94,91210,51278],{"class":51277},[94,91212,51281],{"class":1944},[94,91214,51284],{"class":104},[94,91216,91217,91219,91221,91223,91225,91227],{"class":96,"line":15},[94,91218,1015],{"class":104},[94,91220,50612],{"class":51277},[94,91222,51293],{"class":1944},[94,91224,150],{"class":104},[94,91226,51298],{"class":209},[94,91228,51284],{"class":104},[94,91230,91231],{"class":96,"line":1160},[94,91232,2381],{"emptyLinePlaceholder":20},[94,91234,91235,91237,91239],{"class":96,"line":1175},[94,91236,1015],{"class":104},[94,91238,51311],{"class":51277},[94,91240,51284],{"class":104},[94,91242,91243,91245,91247,91249,91251,91253],{"class":96,"line":1181},[94,91244,52121],{"class":104},[94,91246,51321],{"class":51277},[94,91248,51324],{"class":1944},[94,91250,150],{"class":104},[94,91252,51329],{"class":209},[94,91254,51284],{"class":104},[94,91256,91257,91259,91261,91263,91265,91267,91269,91271,91273],{"class":96,"line":1195},[94,91258,52121],{"class":104},[94,91260,51321],{"class":51277},[94,91262,14902],{"class":1944},[94,91264,150],{"class":104},[94,91266,51368],{"class":209},[94,91268,51348],{"class":1944},[94,91270,150],{"class":104},[94,91272,51375],{"class":209},[94,91274,51284],{"class":104},[94,91276,91277,91279,91281,91283,91285],{"class":96,"line":1201},[94,91278,52121],{"class":104},[94,91280,51384],{"class":51277},[94,91282,51387],{"class":104},[94,91284,51384],{"class":51277},[94,91286,51284],{"class":104},[94,91288,91289,91291,91293],{"class":96,"line":1292},[94,91290,52121],{"class":104},[94,91292,5108],{"class":51277},[94,91294,51284],{"class":104},[94,91296,91297,91299],{"class":96,"line":1298},[94,91298,54729],{"class":1944},[94,91300,15554],{"class":104},[94,91302,91303,91305,91307,91309],{"class":96,"line":1310},[94,91304,72573],{"class":153},[94,91306,51414],{"class":104},[94,91308,60482],{"class":153},[94,91310,1271],{"class":104},[94,91312,91313,91315,91317,91319,91321],{"class":96,"line":1593},[94,91314,54748],{"class":153},[94,91316,51414],{"class":104},[94,91318,1703],{"class":153},[94,91320,51469],{"class":100},[94,91322,1271],{"class":104},[94,91324,91325,91327,91329,91331,91333],{"class":96,"line":1598},[94,91326,54762],{"class":153},[94,91328,51414],{"class":104},[94,91330,1703],{"class":153},[94,91332,51469],{"class":100},[94,91334,1271],{"class":104},[94,91336,91337,91339,91341,91343],{"class":96,"line":1604},[94,91338,54861],{"class":153},[94,91340,51414],{"class":104},[94,91342,89983],{"class":153},[94,91344,1271],{"class":104},[94,91346,91347,91349,91351,91353,91355],{"class":96,"line":1609},[94,91348,54899],{"class":153},[94,91350,51414],{"class":104},[94,91352,930],{"class":153},[94,91354,51469],{"class":100},[94,91356,1271],{"class":104},[94,91358,91359,91361,91363,91365],{"class":96,"line":1623},[94,91360,57393],{"class":153},[94,91362,51414],{"class":104},[94,91364,60819],{"class":153},[94,91366,1271],{"class":104},[94,91368,91369,91371,91373,91375],{"class":96,"line":1628},[94,91370,57263],{"class":153},[94,91372,51414],{"class":104},[94,91374,51569],{"class":153},[94,91376,1271],{"class":104},[94,91378,91379,91381,91383,91385,91387],{"class":96,"line":1634},[94,91380,90022],{"class":153},[94,91382,51414],{"class":104},[94,91384,424],{"class":153},[94,91386,51469],{"class":100},[94,91388,1271],{"class":104},[94,91390,91391],{"class":96,"line":1655},[94,91392,2168],{"class":104},[94,91394,91395,91397,91399],{"class":96,"line":1660},[94,91396,52394],{"class":104},[94,91398,5108],{"class":51277},[94,91400,51284],{"class":104},[94,91402,91403,91405,91407],{"class":96,"line":1674},[94,91404,51762],{"class":104},[94,91406,51311],{"class":51277},[94,91408,51284],{"class":104},[94,91410,91411],{"class":96,"line":1679},[94,91412,2381],{"emptyLinePlaceholder":20},[94,91414,91415,91417,91419],{"class":96,"line":1708},[94,91416,1015],{"class":104},[94,91418,51777],{"class":51277},[94,91420,51284],{"class":104},[94,91422,91423,91425,91427,91429,91431,91433,91435,91437],{"class":96,"line":1713},[94,91424,52121],{"class":104},[94,91426,51588],{"class":51277},[94,91428,53463],{"class":1944},[94,91430,150],{"class":104},[94,91432,53468],{"class":209},[94,91434,55291],{"class":104},[94,91436,51588],{"class":51277},[94,91438,51284],{"class":104},[94,91440,91441,91443,91445,91447,91449,91451,91453,91455],{"class":96,"line":1730},[94,91442,52121],{"class":104},[94,91444,51790],{"class":51277},[94,91446,55216],{"class":1944},[94,91448,150],{"class":104},[94,91450,88251],{"class":209},[94,91452,55291],{"class":104},[94,91454,51790],{"class":51277},[94,91456,51284],{"class":104},[94,91458,91459,91461,91463],{"class":96,"line":1735},[94,91460,52121],{"class":104},[94,91462,51790],{"class":51277},[94,91464,51284],{"class":104},[94,91466,91467,91469,91471,91473,91475,91477,91479,91481],{"class":96,"line":1740},[94,91468,11203],{"class":100},[94,91470,86910],{"class":153},[94,91472,13546],{"class":100},[94,91474,54373],{"class":104},[94,91476,54376],{"class":1944},[94,91478,105],{"class":104},[94,91480,90123],{"class":209},[94,91482,111],{"class":104},[94,91484,91485,91487,91489,91491],{"class":96,"line":1745},[94,91486,52196],{"class":100},[94,91488,9420],{"class":104},[94,91490,150],{"class":100},[94,91492,47316],{"class":153},[94,91494,91495,91497,91499],{"class":96,"line":1759},[94,91496,70061],{"class":100},[94,91498,90142],{"class":1944},[94,91500,10835],{"class":104},[94,91502,91503,91505,91507,91509],{"class":96,"line":1764},[94,91504,90149],{"class":104},[94,91506,150],{"class":100},[94,91508,3013],{"class":104},[94,91510,2683],{"class":100},[94,91512,91513],{"class":96,"line":2558},[94,91514,90160],{"class":163},[94,91516,91517],{"class":96,"line":2572},[94,91518,2168],{"class":104},[94,91520,91521],{"class":96,"line":2580},[94,91522,90169],{"class":163},[94,91524,91525],{"class":96,"line":2585},[94,91526,91527],{"class":163},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[94,91529,91530],{"class":96,"line":2591},[94,91531,91532],{"class":163},"    \u002F\u002F 1.声明一个定时器变量\n",[94,91534,91535],{"class":96,"line":2597},[94,91536,91537],{"class":163},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[94,91539,91540],{"class":96,"line":2602},[94,91541,91542],{"class":163},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[94,91544,91545],{"class":96,"line":7930},[94,91546,91547],{"class":163},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[94,91549,91550],{"class":96,"line":7954},[94,91551,91552],{"class":163},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[94,91554,91555,91557,91560,91562,91564,91566,91568],{"class":96,"line":7959},[94,91556,70061],{"class":100},[94,91558,91559],{"class":1944}," throttle",[94,91561,105],{"class":104},[94,91563,90614],{"class":5198},[94,91565,12417],{"class":104},[94,91567,825],{"class":5198},[94,91569,12424],{"class":104},[94,91571,91572,91574],{"class":96,"line":7965},[94,91573,79749],{"class":100},[94,91575,90627],{"class":104},[94,91577,91578,91580,91582],{"class":96,"line":7992},[94,91579,73959],{"class":100},[94,91581,58895],{"class":100},[94,91583,54429],{"class":104},[94,91585,91586,91588,91590,91592],{"class":96,"line":7997},[94,91587,2478],{"class":100},[94,91589,1639],{"class":104},[94,91591,331],{"class":100},[94,91593,91594],{"class":104},"timer) {\n",[94,91596,91597,91600,91602,91604,91606,91608],{"class":96,"line":8003},[94,91598,91599],{"class":104},"          timer ",[94,91601,150],{"class":100},[94,91603,90668],{"class":1944},[94,91605,105],{"class":104},[94,91607,54426],{"class":100},[94,91609,54429],{"class":104},[94,91611,91612,91615],{"class":96,"line":8015},[94,91613,91614],{"class":1944},"            fn",[94,91616,1957],{"class":104},[94,91618,91619],{"class":96,"line":8027},[94,91620,91621],{"class":163},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[94,91623,91624],{"class":96,"line":8039},[94,91625,91626],{"class":163},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[94,91628,91629,91632,91634],{"class":96,"line":9698},[94,91630,91631],{"class":104},"            timer ",[94,91633,150],{"class":100},[94,91635,91636],{"class":153}," null\n",[94,91638,91639],{"class":96,"line":9723},[94,91640,91641],{"class":163},"            \u002F\u002F 不能用clearTimeout(timer)\n",[94,91643,91644],{"class":96,"line":9746},[94,91645,91646],{"class":163},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[94,91648,91649],{"class":96,"line":9770},[94,91650,91651],{"class":104},"          }, t)\n",[94,91653,91654],{"class":96,"line":9775},[94,91655,2510],{"class":104},[94,91657,91658],{"class":96,"line":9780},[94,91659,52375],{"class":104},[94,91661,91662],{"class":96,"line":9785},[94,91663,2168],{"class":104},[94,91665,91666,91668,91670,91672,91674,91676,91678,91680,91682],{"class":96,"line":9794},[94,91667,90184],{"class":104},[94,91669,57790],{"class":1944},[94,91671,105],{"class":104},[94,91673,90191],{"class":209},[94,91675,12417],{"class":104},[94,91677,91150],{"class":1944},[94,91679,90200],{"class":104},[94,91681,65051],{"class":153},[94,91683,30480],{"class":104},[94,91685,91686,91688,91690],{"class":96,"line":9799},[94,91687,52394],{"class":104},[94,91689,51790],{"class":51277},[94,91691,51284],{"class":104},[94,91693,91694,91696,91698],{"class":96,"line":9805},[94,91695,51762],{"class":104},[94,91697,51777],{"class":51277},[94,91699,51284],{"class":104},[94,91701,91702],{"class":96,"line":9826},[94,91703,2381],{"emptyLinePlaceholder":20},[94,91705,91706,91708,91710],{"class":96,"line":9832},[94,91707,51762],{"class":104},[94,91709,50612],{"class":51277},[94,91711,51284],{"class":104},[65,91713,91715],{"id":91714},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[85,91717,91719],{"className":53044,"code":91718,"language":53046,"meta":14,"style":14},"\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",[91,91720,91721,91729,91737,91742,91747,91752,91757,91761,91769],{"__ignoreMap":14},[94,91722,91723,91725,91727],{"class":96,"line":97},[94,91724,1015],{"class":104},[94,91726,51777],{"class":51277},[94,91728,51284],{"class":104},[94,91730,91731,91733,91735],{"class":96,"line":15},[94,91732,52121],{"class":104},[94,91734,51790],{"class":51277},[94,91736,51284],{"class":104},[94,91738,91739],{"class":96,"line":1160},[94,91740,91741],{"class":104},"    let timer = null\n",[94,91743,91744],{"class":96,"line":1175},[94,91745,91746],{"class":104},"    timer = setTimeout(() => {\n",[94,91748,91749],{"class":96,"line":1181},[94,91750,91751],{"class":104},"      clearTimeout(timer)\n",[94,91753,91754],{"class":96,"line":1195},[94,91755,91756],{"class":104},"      console.log(timer)\n",[94,91758,91759],{"class":96,"line":1201},[94,91760,60202],{"class":104},[94,91762,91763,91765,91767],{"class":96,"line":1292},[94,91764,52394],{"class":104},[94,91766,51790],{"class":51277},[94,91768,51284],{"class":104},[94,91770,91771,91773,91775],{"class":96,"line":1298},[94,91772,51762],{"class":104},[94,91774,51777],{"class":51277},[94,91776,51284],{"class":104},[40,91778,91779],{},"输出为1",[40,91781,91782],{},"在开启的定时器里边写清除定时器",[40,91784,91785],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[65,91787,91789],{"id":91788},"_4174-节流综合案例","4.17.4 节流综合案例",[40,91791,91792],{},"页面打开，可以记录上一次的视频播放位置",[40,91794,91795],{},[1443,91796],{"alt":14,"src":91797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[40,91799,91800],{},[1443,91801],{"alt":14,"src":91802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[85,91804,91806],{"className":50610,"code":91805,"language":50612,"meta":14,"style":14},"\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",[91,91807,91808,91818,91832,91836,91844,91858,91878,91898,91920,91933,91941,91947,91957,91967,91977,91981,91985,91992,92005,92017,92021,92025,92035,92047,92061,92065,92069,92076,92086,92099,92111,92121,92131,92147,92159,92163,92167,92175,92185,92197,92207,92217,92227,92231,92235,92245,92256,92260,92268,92276,92280,92288,92303,92318,92333,92354,92362,92370,92385,92407,92415,92430,92456,92482,92508,92516,92524,92543,92551,92556,92575,92580,92598,92603,92608,92616,92621,92635,92643,92648,92665,92669,92674,92696,92700,92708,92716,92720],{"__ignoreMap":14},[94,91809,91810,91812,91814,91816],{"class":96,"line":97},[94,91811,51274],{"class":104},[94,91813,51278],{"class":51277},[94,91815,51281],{"class":1944},[94,91817,51284],{"class":104},[94,91819,91820,91822,91824,91826,91828,91830],{"class":96,"line":15},[94,91821,1015],{"class":104},[94,91823,50612],{"class":51277},[94,91825,51293],{"class":1944},[94,91827,150],{"class":104},[94,91829,51298],{"class":209},[94,91831,51284],{"class":104},[94,91833,91834],{"class":96,"line":1160},[94,91835,2381],{"emptyLinePlaceholder":20},[94,91837,91838,91840,91842],{"class":96,"line":1175},[94,91839,1015],{"class":104},[94,91841,51311],{"class":51277},[94,91843,51284],{"class":104},[94,91845,91846,91848,91850,91852,91854,91856],{"class":96,"line":1181},[94,91847,52121],{"class":104},[94,91849,51321],{"class":51277},[94,91851,51324],{"class":1944},[94,91853,150],{"class":104},[94,91855,51329],{"class":209},[94,91857,59104],{"class":104},[94,91859,91860,91862,91864,91866,91868,91870,91872,91874,91876],{"class":96,"line":1195},[94,91861,52121],{"class":104},[94,91863,51321],{"class":51277},[94,91865,51340],{"class":1944},[94,91867,150],{"class":104},[94,91869,51345],{"class":209},[94,91871,51348],{"class":1944},[94,91873,150],{"class":104},[94,91875,51353],{"class":209},[94,91877,59104],{"class":104},[94,91879,91880,91882,91884,91886,91888,91890,91892,91894,91896],{"class":96,"line":1201},[94,91881,52121],{"class":104},[94,91883,51321],{"class":51277},[94,91885,14902],{"class":1944},[94,91887,150],{"class":104},[94,91889,51368],{"class":209},[94,91891,51348],{"class":1944},[94,91893,150],{"class":104},[94,91895,51375],{"class":209},[94,91897,59104],{"class":104},[94,91899,91900,91902,91904,91906,91908,91911,91913,91915,91918],{"class":96,"line":1292},[94,91901,52121],{"class":104},[94,91903,51321],{"class":51277},[94,91905,14902],{"class":1944},[94,91907,150],{"class":104},[94,91909,91910],{"class":209},"\"referrer\"",[94,91912,51348],{"class":1944},[94,91914,150],{"class":104},[94,91916,91917],{"class":209},"\"never\"",[94,91919,59104],{"class":104},[94,91921,91922,91924,91926,91929,91931],{"class":96,"line":1298},[94,91923,52121],{"class":104},[94,91925,51384],{"class":51277},[94,91927,91928],{"class":104},">综合案例\u003C\u002F",[94,91930,51384],{"class":51277},[94,91932,51284],{"class":104},[94,91934,91935,91937,91939],{"class":96,"line":1310},[94,91936,52121],{"class":104},[94,91938,5108],{"class":51277},[94,91940,51284],{"class":104},[94,91942,91943,91945],{"class":96,"line":1593},[94,91944,6385],{"class":51277},[94,91946,15554],{"class":104},[94,91948,91949,91951,91953,91955],{"class":96,"line":1598},[94,91950,54672],{"class":153},[94,91952,51414],{"class":104},[94,91954,296],{"class":153},[94,91956,1271],{"class":104},[94,91958,91959,91961,91963,91965],{"class":96,"line":1604},[94,91960,54683],{"class":153},[94,91962,51414],{"class":104},[94,91964,296],{"class":153},[94,91966,1271],{"class":104},[94,91968,91969,91971,91973,91975],{"class":96,"line":1609},[94,91970,72573],{"class":153},[94,91972,51414],{"class":104},[94,91974,60482],{"class":153},[94,91976,1271],{"class":104},[94,91978,91979],{"class":96,"line":1623},[94,91980,2168],{"class":104},[94,91982,91983],{"class":96,"line":1628},[94,91984,2381],{"emptyLinePlaceholder":20},[94,91986,91987,91990],{"class":96,"line":1634},[94,91988,91989],{"class":1944},"    .container",[94,91991,15554],{"class":104},[94,91993,91994,91996,91998,92001,92003],{"class":96,"line":1655},[94,91995,54748],{"class":153},[94,91997,51414],{"class":104},[94,91999,92000],{"class":153},"1200",[94,92002,51469],{"class":100},[94,92004,1271],{"class":104},[94,92006,92007,92009,92011,92013,92015],{"class":96,"line":1660},[94,92008,54683],{"class":153},[94,92010,51414],{"class":104},[94,92012,296],{"class":153},[94,92014,51533],{"class":153},[94,92016,1271],{"class":104},[94,92018,92019],{"class":96,"line":1674},[94,92020,2168],{"class":104},[94,92022,92023],{"class":96,"line":1679},[94,92024,2381],{"emptyLinePlaceholder":20},[94,92026,92027,92030,92033],{"class":96,"line":1708},[94,92028,92029],{"class":1944},"    .video",[94,92031,92032],{"class":51277}," video",[94,92034,15554],{"class":104},[94,92036,92037,92039,92041,92043,92045],{"class":96,"line":1713},[94,92038,54748],{"class":153},[94,92040,51414],{"class":104},[94,92042,416],{"class":153},[94,92044,433],{"class":100},[94,92046,1271],{"class":104},[94,92048,92049,92051,92053,92055,92057,92059],{"class":96,"line":1730},[94,92050,54672],{"class":153},[94,92052,51414],{"class":104},[94,92054,805],{"class":153},[94,92056,51469],{"class":100},[94,92058,4074],{"class":153},[94,92060,1271],{"class":104},[94,92062,92063],{"class":96,"line":1735},[94,92064,2168],{"class":104},[94,92066,92067],{"class":96,"line":1740},[94,92068,2381],{"emptyLinePlaceholder":20},[94,92070,92071,92074],{"class":96,"line":1745},[94,92072,92073],{"class":1944},"    .elevator",[94,92075,15554],{"class":104},[94,92077,92078,92080,92082,92084],{"class":96,"line":1759},[94,92079,54736],{"class":153},[94,92081,51414],{"class":104},[94,92083,86210],{"class":153},[94,92085,1271],{"class":104},[94,92087,92088,92090,92092,92095,92097],{"class":96,"line":1764},[94,92089,54924],{"class":153},[94,92091,51414],{"class":104},[94,92093,92094],{"class":153},"280",[94,92096,51469],{"class":100},[94,92098,1271],{"class":104},[94,92100,92101,92103,92105,92107,92109],{"class":96,"line":2558},[94,92102,86404],{"class":153},[94,92104,51414],{"class":104},[94,92106,805],{"class":153},[94,92108,51469],{"class":100},[94,92110,1271],{"class":104},[94,92112,92113,92115,92117,92119],{"class":96,"line":2572},[94,92114,86217],{"class":153},[94,92116,51414],{"class":104},[94,92118,86222],{"class":153},[94,92120,1271],{"class":104},[94,92122,92123,92125,92127,92129],{"class":96,"line":2580},[94,92124,61698],{"class":153},[94,92126,51414],{"class":104},[94,92128,60819],{"class":153},[94,92130,1271],{"class":104},[94,92132,92133,92135,92137,92139,92141,92143,92145],{"class":96,"line":2585},[94,92134,61954],{"class":153},[94,92136,51414],{"class":104},[94,92138,322],{"class":153},[94,92140,51469],{"class":100},[94,92142,51498],{"class":153},[94,92144,62221],{"class":153},[94,92146,1271],{"class":104},[94,92148,92149,92151,92153,92155,92157],{"class":96,"line":2591},[94,92150,54748],{"class":153},[94,92152,51414],{"class":104},[94,92154,1012],{"class":153},[94,92156,51469],{"class":100},[94,92158,1271],{"class":104},[94,92160,92161],{"class":96,"line":2597},[94,92162,2168],{"class":104},[94,92164,92165],{"class":96,"line":2602},[94,92166,2381],{"emptyLinePlaceholder":20},[94,92168,92169,92171,92173],{"class":96,"line":7930},[94,92170,92073],{"class":1944},[94,92172,1379],{"class":51277},[94,92174,15554],{"class":104},[94,92176,92177,92179,92181,92183],{"class":96,"line":7954},[94,92178,54986],{"class":153},[94,92180,51414],{"class":104},[94,92182,60846],{"class":153},[94,92184,1271],{"class":104},[94,92186,92187,92189,92191,92193,92195],{"class":96,"line":7959},[94,92188,54672],{"class":153},[94,92190,51414],{"class":104},[94,92192,551],{"class":153},[94,92194,51469],{"class":100},[94,92196,1271],{"class":104},[94,92198,92199,92201,92203,92205],{"class":96,"line":7965},[94,92200,63947],{"class":153},[94,92202,51414],{"class":104},[94,92204,54714],{"class":153},[94,92206,1271],{"class":104},[94,92208,92209,92211,92213,92215],{"class":96,"line":7992},[94,92210,57263],{"class":153},[94,92212,51414],{"class":104},[94,92214,51569],{"class":153},[94,92216,1271],{"class":104},[94,92218,92219,92221,92223,92225],{"class":96,"line":7997},[94,92220,57393],{"class":153},[94,92222,51414],{"class":104},[94,92224,62047],{"class":153},[94,92226,1271],{"class":104},[94,92228,92229],{"class":96,"line":8003},[94,92230,2168],{"class":104},[94,92232,92233],{"class":96,"line":8015},[94,92234,2381],{"emptyLinePlaceholder":20},[94,92236,92237,92239,92241,92243],{"class":96,"line":8027},[94,92238,92073],{"class":1944},[94,92240,1379],{"class":51277},[94,92242,64001],{"class":1944},[94,92244,15554],{"class":104},[94,92246,92247,92249,92251,92254],{"class":96,"line":8039},[94,92248,57393],{"class":153},[94,92250,51414],{"class":104},[94,92252,92253],{"class":153},"#1286ff",[94,92255,1271],{"class":104},[94,92257,92258],{"class":96,"line":9698},[94,92259,2168],{"class":104},[94,92261,92262,92264,92266],{"class":96,"line":9723},[94,92263,52394],{"class":104},[94,92265,5108],{"class":51277},[94,92267,51284],{"class":104},[94,92269,92270,92272,92274],{"class":96,"line":9746},[94,92271,51762],{"class":104},[94,92273,51311],{"class":51277},[94,92275,51284],{"class":104},[94,92277,92278],{"class":96,"line":9770},[94,92279,2381],{"emptyLinePlaceholder":20},[94,92281,92282,92284,92286],{"class":96,"line":9775},[94,92283,1015],{"class":104},[94,92285,51777],{"class":51277},[94,92287,51284],{"class":104},[94,92289,92290,92292,92294,92296,92298,92301],{"class":96,"line":9780},[94,92291,52121],{"class":104},[94,92293,51588],{"class":51277},[94,92295,53463],{"class":1944},[94,92297,150],{"class":104},[94,92299,92300],{"class":209},"\"container\"",[94,92302,51284],{"class":104},[94,92304,92305,92307,92309,92311,92313,92316],{"class":96,"line":9785},[94,92306,51318],{"class":104},[94,92308,51588],{"class":51277},[94,92310,53463],{"class":1944},[94,92312,150],{"class":104},[94,92314,92315],{"class":209},"\"header\"",[94,92317,51284],{"class":104},[94,92319,92320,92322,92324,92326,92328,92331],{"class":96,"line":9794},[94,92321,55211],{"class":104},[94,92323,343],{"class":51277},[94,92325,61034],{"class":1944},[94,92327,150],{"class":104},[94,92329,92330],{"class":209},"\"http:\u002F\u002Fpip.itcast.cn\"",[94,92332,51284],{"class":104},[94,92334,92335,92337,92339,92341,92343,92346,92348,92350,92352],{"class":96,"line":9799},[94,92336,55279],{"class":104},[94,92338,1443],{"class":51277},[94,92340,55216],{"class":1944},[94,92342,150],{"class":104},[94,92344,92345],{"class":209},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[94,92347,55224],{"class":1944},[94,92349,150],{"class":104},[94,92351,7634],{"class":209},[94,92353,59104],{"class":104},[94,92355,92356,92358,92360],{"class":96,"line":9805},[94,92357,55384],{"class":104},[94,92359,343],{"class":51277},[94,92361,51284],{"class":104},[94,92363,92364,92366,92368],{"class":96,"line":9826},[94,92365,51753],{"class":104},[94,92367,51588],{"class":51277},[94,92369,51284],{"class":104},[94,92371,92372,92374,92376,92378,92380,92383],{"class":96,"line":9832},[94,92373,51318],{"class":104},[94,92375,51588],{"class":51277},[94,92377,53463],{"class":1944},[94,92379,150],{"class":104},[94,92381,92382],{"class":209},"\"video\"",[94,92384,51284],{"class":104},[94,92386,92387,92389,92391,92393,92395,92398,92401,92403,92405],{"class":96,"line":9846},[94,92388,55211],{"class":104},[94,92390,28166],{"class":51277},[94,92392,55216],{"class":1944},[94,92394,150],{"class":104},[94,92396,92397],{"class":209},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[94,92399,92400],{"class":1944}," controls",[94,92402,55291],{"class":104},[94,92404,28166],{"class":51277},[94,92406,51284],{"class":104},[94,92408,92409,92411,92413],{"class":96,"line":9852},[94,92410,51753],{"class":104},[94,92412,51588],{"class":51277},[94,92414,51284],{"class":104},[94,92416,92417,92419,92421,92423,92425,92428],{"class":96,"line":9879},[94,92418,51318],{"class":104},[94,92420,51588],{"class":51277},[94,92422,53463],{"class":1944},[94,92424,150],{"class":104},[94,92426,92427],{"class":209},"\"elevator\"",[94,92429,51284],{"class":104},[94,92431,92432,92434,92436,92438,92440,92442,92445,92447,92449,92452,92454],{"class":96,"line":9888},[94,92433,55211],{"class":104},[94,92435,343],{"class":51277},[94,92437,61034],{"class":1944},[94,92439,150],{"class":104},[94,92441,64213],{"class":209},[94,92443,92444],{"class":1944}," data-ref",[94,92446,150],{"class":104},[94,92448,92382],{"class":209},[94,92450,92451],{"class":104},">视频介绍\u003C\u002F",[94,92453,343],{"class":51277},[94,92455,51284],{"class":104},[94,92457,92458,92460,92462,92464,92466,92468,92470,92472,92475,92478,92480],{"class":96,"line":9894},[94,92459,55211],{"class":104},[94,92461,343],{"class":51277},[94,92463,61034],{"class":1944},[94,92465,150],{"class":104},[94,92467,64213],{"class":209},[94,92469,92444],{"class":1944},[94,92471,150],{"class":104},[94,92473,92474],{"class":209},"\"intro\"",[94,92476,92477],{"class":104},">课程简介\u003C\u002F",[94,92479,343],{"class":51277},[94,92481,51284],{"class":104},[94,92483,92484,92486,92488,92490,92492,92494,92496,92498,92501,92504,92506],{"class":96,"line":9902},[94,92485,55211],{"class":104},[94,92487,343],{"class":51277},[94,92489,61034],{"class":1944},[94,92491,150],{"class":104},[94,92493,64213],{"class":209},[94,92495,92444],{"class":1944},[94,92497,150],{"class":104},[94,92499,92500],{"class":209},"\"outline\"",[94,92502,92503],{"class":104},">评论列表\u003C\u002F",[94,92505,343],{"class":51277},[94,92507,51284],{"class":104},[94,92509,92510,92512,92514],{"class":96,"line":9907},[94,92511,51753],{"class":104},[94,92513,51588],{"class":51277},[94,92515,51284],{"class":104},[94,92517,92518,92520,92522],{"class":96,"line":16586},[94,92519,52394],{"class":104},[94,92521,51588],{"class":51277},[94,92523,51284],{"class":104},[94,92525,92526,92528,92530,92532,92534,92537,92539,92541],{"class":96,"line":16592},[94,92527,52121],{"class":104},[94,92529,51790],{"class":51277},[94,92531,55216],{"class":1944},[94,92533,150],{"class":104},[94,92535,92536],{"class":209},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[94,92538,55291],{"class":104},[94,92540,51790],{"class":51277},[94,92542,51284],{"class":104},[94,92544,92545,92547,92549],{"class":96,"line":16615},[94,92546,52121],{"class":104},[94,92548,51790],{"class":51277},[94,92550,51284],{"class":104},[94,92552,92553],{"class":96,"line":16621},[94,92554,92555],{"class":163},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[94,92557,92558,92560,92562,92564,92566,92568,92570,92573],{"class":96,"line":16644},[94,92559,11203],{"class":100},[94,92561,92032],{"class":153},[94,92563,13546],{"class":100},[94,92565,54373],{"class":104},[94,92567,54376],{"class":1944},[94,92569,105],{"class":104},[94,92571,92572],{"class":209},"'video'",[94,92574,111],{"class":104},[94,92576,92577],{"class":96,"line":16658},[94,92578,92579],{"class":163},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[94,92581,92582,92585,92587,92589,92591,92594,92596],{"class":96,"line":16678},[94,92583,92584],{"class":104},"    video.ontimeupdate ",[94,92586,150],{"class":100},[94,92588,88332],{"class":104},[94,92590,91150],{"class":1944},[94,92592,92593],{"class":104},"(() ",[94,92595,84699],{"class":100},[94,92597,15554],{"class":104},[94,92599,92600],{"class":96,"line":16684},[94,92601,92602],{"class":163},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[94,92604,92605],{"class":96,"line":16695},[94,92606,92607],{"class":163},"      \u002F\u002F 控制台输出当前的时间\n",[94,92609,92610,92613],{"class":96,"line":16718},[94,92611,92612],{"class":163},"      \u002F\u002F console.log(video.currentTime)",[94,92614,92615],{"class":163},"  \u002F\u002F获得当前的视频时间\n",[94,92617,92618],{"class":96,"line":16740},[94,92619,92620],{"class":163},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[94,92622,92623,92625,92627,92629,92632],{"class":96,"line":16745},[94,92624,74660],{"class":104},[94,92626,71631],{"class":1944},[94,92628,105],{"class":104},[94,92630,92631],{"class":209},"'currentTime'",[94,92633,92634],{"class":104},", video.currentTime)\n",[94,92636,92637,92639,92641],{"class":96,"line":16751},[94,92638,54512],{"class":104},[94,92640,6392],{"class":153},[94,92642,111],{"class":104},[94,92644,92645],{"class":96,"line":16765},[94,92646,92647],{"class":163},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[94,92649,92650,92653,92656,92658,92661,92663],{"class":96,"line":16778},[94,92651,92652],{"class":104},"    video.",[94,92654,92655],{"class":1944},"onloadeddata",[94,92657,13546],{"class":100},[94,92659,92660],{"class":104}," () ",[94,92662,84699],{"class":100},[94,92664,15554],{"class":104},[94,92666,92667],{"class":96,"line":16783},[94,92668,59989],{"class":163},[94,92670,92671],{"class":96,"line":16797},[94,92672,92673],{"class":163},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[94,92675,92676,92679,92681,92684,92686,92688,92690,92692,92694],{"class":96,"line":16802},[94,92677,92678],{"class":104},"      video.currentTime ",[94,92680,150],{"class":100},[94,92682,92683],{"class":104}," localStorage.",[94,92685,71662],{"class":1944},[94,92687,105],{"class":104},[94,92689,92631],{"class":209},[94,92691,13696],{"class":104},[94,92693,71334],{"class":100},[94,92695,47316],{"class":153},[94,92697,92698],{"class":96,"line":16808},[94,92699,2168],{"class":104},[94,92701,92702,92704,92706],{"class":96,"line":16813},[94,92703,52394],{"class":104},[94,92705,51790],{"class":51277},[94,92707,51284],{"class":104},[94,92709,92710,92712,92714],{"class":96,"line":16827},[94,92711,51762],{"class":104},[94,92713,51777],{"class":51277},[94,92715,51284],{"class":104},[94,92717,92718],{"class":96,"line":16832},[94,92719,2381],{"emptyLinePlaceholder":20},[94,92721,92722,92724,92726],{"class":96,"line":16837},[94,92723,51762],{"class":104},[94,92725,50612],{"class":51277},[94,92727,51284],{"class":104},[5108,92729,92730],{},"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":14,"searchDepth":15,"depth":15,"links":92732},[92733,92738,92742,92743,92744,92749,92754,92755,92756,92757,92764,92769,92770,92780,92784,92785,92789],{"id":76668,"depth":15,"text":76669,"children":92734},[92735,92736,92737],{"id":76672,"depth":1160,"text":76673},{"id":76697,"depth":1160,"text":76698},{"id":76709,"depth":1160,"text":76710},{"id":76721,"depth":15,"text":76722,"children":92739},[92740,92741],{"id":76725,"depth":1160,"text":76726},{"id":76740,"depth":1160,"text":76741},{"id":76792,"depth":15,"text":76793},{"id":76836,"depth":15,"text":76837},{"id":76853,"depth":15,"text":76854,"children":92745},[92746,92747,92748],{"id":76857,"depth":1160,"text":76858},{"id":76870,"depth":1160,"text":76871},{"id":76975,"depth":1160,"text":76976},{"id":77264,"depth":15,"text":77265,"children":92750},[92751,92752,92753],{"id":77268,"depth":1160,"text":77269},{"id":77711,"depth":1160,"text":77712},{"id":78122,"depth":1160,"text":78123},{"id":78185,"depth":15,"text":78186},{"id":78264,"depth":15,"text":78265},{"id":78357,"depth":15,"text":78358},{"id":80202,"depth":15,"text":80203,"children":92758},[92759,92760,92761,92762,92763],{"id":80206,"depth":1160,"text":80207},{"id":80218,"depth":1160,"text":80219},{"id":80437,"depth":1160,"text":80438},{"id":80455,"depth":1160,"text":80456},{"id":80515,"depth":1160,"text":80516},{"id":84783,"depth":15,"text":84784,"children":92765},[92766,92767,92768],{"id":84787,"depth":1160,"text":84788},{"id":84805,"depth":1160,"text":84806},{"id":84831,"depth":1160,"text":84832},{"id":84840,"depth":15,"text":84841},{"id":84862,"depth":15,"text":84863,"children":92771},[92772,92773,92774,92775,92776,92777,92778,92779],{"id":84866,"depth":1160,"text":84867},{"id":85127,"depth":1160,"text":85128},{"id":85313,"depth":1160,"text":85314},{"id":85680,"depth":1160,"text":85681},{"id":85796,"depth":1160,"text":85797},{"id":85832,"depth":1160,"text":85833},{"id":85879,"depth":1160,"text":85880},{"id":85913,"depth":1160,"text":85914},{"id":87276,"depth":15,"text":87277,"children":92781},[92782,92783],{"id":87280,"depth":1160,"text":87281},{"id":87317,"depth":1160,"text":87318},{"id":88672,"depth":15,"text":88673},{"id":89043,"depth":15,"text":89044,"children":92786},[92787,92788],{"id":89047,"depth":1160,"text":89048},{"id":89081,"depth":1160,"text":89082},{"id":89810,"depth":15,"text":89811,"children":92790},[92791,92792,92793,92794],{"id":89814,"depth":1160,"text":89815},{"id":90772,"depth":1160,"text":90773},{"id":91714,"depth":1160,"text":91715},{"id":91788,"depth":1160,"text":91789},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76657,"description":17},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92801,"title":92802,"body":92803,"description":92814,"extension":18,"meta":92815,"navigation":20,"path":92817,"seo":92818,"stem":92819,"__hash__":92820},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92804,"toc":92812},[92805],[40,92806,92807,92808],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[343,92809,92810],{"href":92810,"rel":92811},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23847],{"title":14,"searchDepth":15,"depth":15,"links":92813},[],"三件套第三套学习",{"category":92816},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92802,"description":92814},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92822,"title":92823,"body":92824,"description":17,"extension":18,"meta":92929,"navigation":20,"path":92930,"seo":92931,"stem":92932,"__hash__":92933},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92825,"toc":92924},[92826,92833,92836,92839,92842,92846,92855,92858,92861,92865,92874,92877,92881,92884,92904,92907,92921],[40,92827,92828],{},[343,92829,92832],{"href":92830,"rel":92831},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23847],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92834,92823],{"id":92835},"_1安装",[40,92837,92838],{},"numpy是科学计算基础库,底层是C语言",[40,92840,92841],{},"三种方式：",[35,92843,92845],{"id":92844},"_11-通过pip安装","1.1 通过pip安装",[85,92847,92849],{"className":30361,"code":92848,"language":30363,"meta":14,"style":14},"pip install numpy\n",[91,92850,92851],{"__ignoreMap":14},[94,92852,92853],{"class":96,"line":97},[94,92854,92848],{"class":104},[40,92856,92857],{},"首选方式，自动处理依赖项",[40,92859,92860],{},"在提示系统命令符中使用cmd",[35,92862,92864],{"id":92863},"_12-通过anaconda安装","1.2 通过Anaconda安装",[85,92866,92868],{"className":30361,"code":92867,"language":30363,"meta":14,"style":14},"conda install numpy\n",[91,92869,92870],{"__ignoreMap":14},[94,92871,92872],{"class":96,"line":97},[94,92873,92867],{"class":104},[40,92875,92876],{},"自动解决环境依赖",[35,92878,92880],{"id":92879},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[40,92882,92883],{},"对于Debian\u002FUbuntu",[85,92885,92887],{"className":30361,"code":92886,"language":30363,"meta":14,"style":14},"sudo apt-get install python3-numpy\n",[91,92888,92889],{"__ignoreMap":14},[94,92890,92891,92894,92896,92899,92901],{"class":96,"line":97},[94,92892,92893],{"class":104},"sudo apt",[94,92895,637],{"class":100},[94,92897,92898],{"class":104},"get install python3",[94,92900,637],{"class":100},[94,92902,92903],{"class":104},"numpy\n",[40,92905,92906],{},"对于Fedora:",[85,92908,92910],{"className":30361,"code":92909,"language":30363,"meta":14,"style":14},"sudo dnf install python3-numpy\n",[91,92911,92912],{"__ignoreMap":14},[94,92913,92914,92917,92919],{"class":96,"line":97},[94,92915,92916],{"class":104},"sudo dnf install python3",[94,92918,637],{"class":100},[94,92920,92903],{"class":104},[5108,92922,92923],{},"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":14,"searchDepth":15,"depth":15,"links":92925},[92926,92927,92928],{"id":92844,"depth":15,"text":92845},{"id":92863,"depth":15,"text":92864},{"id":92879,"depth":15,"text":92880},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92823,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92935,"title":92936,"body":92937,"description":17,"extension":18,"meta":93050,"navigation":20,"path":93051,"seo":93052,"stem":93053,"__hash__":93054},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92938,"toc":93048},[92939,92942,92945,92948,92951,92954,92957,92960,92963,92966,93042,93045],[10,92940,92936],{"id":92941},"_10算数函数",[40,92943,92944],{},"加减乘除运算跟python基础语法没区别",[40,92946,92947],{},"除了python那种方法外还可以使用函数",[40,92949,92950],{},"加：np.add(a,b)",[40,92952,92953],{},"减：np.subtract(a,b)",[40,92955,92956],{},"乘：np.multiply(a,b)",[40,92958,92959],{},"除：np.divide(a,b) == a\u002Fb",[40,92961,92962],{},"取余：np.mod(a,b) == a%b",[40,92964,92965],{},"必须会的用法：",[85,92967,92969],{"className":30361,"code":92968,"language":30363,"meta":14,"style":14},"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",[91,92970,92971,92993,93014,93024,93037],{"__ignoreMap":14},[94,92972,92973,92975,92977,92980,92982,92985,92987,92989,92991],{"class":96,"line":97},[94,92974,343],{"class":104},[94,92976,150],{"class":100},[94,92978,92979],{"class":104},"np.arange(",[94,92981,525],{"class":153},[94,92983,92984],{"class":104},").reshape(",[94,92986,176],{"class":153},[94,92988,483],{"class":104},[94,92990,176],{"class":153},[94,92992,111],{"class":104},[94,92994,92995,92997,92999,93002,93004,93006,93008,93010,93012],{"class":96,"line":15},[94,92996,368],{"class":104},[94,92998,150],{"class":100},[94,93000,93001],{"class":104},"np.array([",[94,93003,551],{"class":153},[94,93005,483],{"class":104},[94,93007,551],{"class":153},[94,93009,483],{"class":104},[94,93011,551],{"class":153},[94,93013,4638],{"class":104},[94,93015,93016,93019,93021],{"class":96,"line":1160},[94,93017,93018],{"class":104},"result",[94,93020,150],{"class":100},[94,93022,93023],{"class":104},"np.empty_like(a)\n",[94,93025,93026,93029,93032,93034],{"class":96,"line":1175},[94,93027,93028],{"class":104},"np.add(a,b,",[94,93030,93031],{"class":5198},"out",[94,93033,150],{"class":100},[94,93035,93036],{"class":104},"result)\n",[94,93038,93039],{"class":96,"line":1181},[94,93040,93041],{"class":104},"result\n",[40,93043,93044],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5108,93046,93047],{},"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":14,"searchDepth":15,"depth":15,"links":93049},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92936,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93056,"title":93057,"body":93058,"description":17,"extension":18,"meta":93820,"navigation":20,"path":93821,"seo":93822,"stem":93823,"__hash__":93824},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93059,"toc":93807},[93060,93063,93066,93069,93073,93112,93116,93160,93220,93224,93227,93266,93269,93314,93318,93354,93358,93427,93431,93495,93499,93502,93505,93508,93511,93547,93551,93591,93595,93667,93670,93674,93737,93741,93804],[10,93061,93057],{"id":93062},"_11统计函数",[40,93064,93065],{},"sum max min mean",[40,93067,93068],{},"这些有axis参数，可以指定方向",[35,93070,93072],{"id":93071},"_111-sum求和函数","11.1 sum()求和函数",[85,93074,93076],{"className":30361,"code":93075,"language":30363,"meta":14,"style":14},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[91,93077,93078,93083,93104],{"__ignoreMap":14},[94,93079,93080],{"class":96,"line":97},[94,93081,93082],{"class":163},"#创建一维数组\n",[94,93084,93085,93087,93089,93092,93094,93096,93098,93100,93102],{"class":96,"line":15},[94,93086,343],{"class":104},[94,93088,150],{"class":100},[94,93090,93091],{"class":104},"np.random.randint(",[94,93093,322],{"class":153},[94,93095,483],{"class":104},[94,93097,416],{"class":153},[94,93099,483],{"class":104},[94,93101,805],{"class":153},[94,93103,111],{"class":104},[94,93105,93106,93109],{"class":96,"line":1160},[94,93107,93108],{"class":104},"np.sum(a)",[94,93110,93111],{"class":163},"#求和\n",[35,93113,93115],{"id":93114},"_112-max求最大值函数","11.2 max()求最大值函数",[85,93117,93119],{"className":30361,"code":93118,"language":30363,"meta":14,"style":14},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[91,93120,93121,93125,93145,93150,93155],{"__ignoreMap":14},[94,93122,93123],{"class":96,"line":97},[94,93124,93082],{"class":163},[94,93126,93127,93129,93131,93133,93135,93137,93139,93141,93143],{"class":96,"line":15},[94,93128,343],{"class":104},[94,93130,150],{"class":100},[94,93132,93091],{"class":104},[94,93134,322],{"class":153},[94,93136,483],{"class":104},[94,93138,416],{"class":153},[94,93140,483],{"class":104},[94,93142,805],{"class":153},[94,93144,111],{"class":104},[94,93146,93147],{"class":96,"line":1160},[94,93148,93149],{"class":104},"np.max(a)\n",[94,93151,93152],{"class":96,"line":1175},[94,93153,93154],{"class":163},"#最大索引(求最大元素的索引)arg\n",[94,93156,93157],{"class":96,"line":1181},[94,93158,93159],{"class":104},"np.argmax(a)\n",[85,93161,93163],{"className":30361,"code":93162,"language":30363,"meta":14,"style":14},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[91,93164,93165,93186,93206,93210],{"__ignoreMap":14},[94,93166,93167,93169,93171,93174,93176,93178,93180,93182,93184],{"class":96,"line":97},[94,93168,10901],{"class":104},[94,93170,150],{"class":100},[94,93172,93173],{"class":104}," np.array([",[94,93175,322],{"class":153},[94,93177,12417],{"class":104},[94,93179,424],{"class":153},[94,93181,12417],{"class":104},[94,93183,176],{"class":153},[94,93185,4638],{"class":104},[94,93187,93188,93190,93192,93194,93196,93198,93200,93202,93204],{"class":96,"line":15},[94,93189,10927],{"class":104},[94,93191,150],{"class":100},[94,93193,93173],{"class":104},[94,93195,176],{"class":153},[94,93197,12417],{"class":104},[94,93199,182],{"class":153},[94,93201,12417],{"class":104},[94,93203,398],{"class":153},[94,93205,4638],{"class":104},[94,93207,93208],{"class":96,"line":1160},[94,93209,2381],{"emptyLinePlaceholder":20},[94,93211,93212,93214,93217],{"class":96,"line":1175},[94,93213,30398],{"class":153},[94,93215,93216],{"class":104},"(np.maximum(a, b))   ",[94,93218,93219],{"class":163},"# [3 5 4]，每个位置上取较大值\n",[35,93221,93223],{"id":93222},"_113-mean求平均值函数","11.3 mean()求平均值函数",[40,93225,93226],{},"①一维数组：",[85,93228,93230],{"className":30361,"code":93229,"language":30363,"meta":14,"style":14},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[91,93231,93232,93236,93256,93261],{"__ignoreMap":14},[94,93233,93234],{"class":96,"line":97},[94,93235,93082],{"class":163},[94,93237,93238,93240,93242,93244,93246,93248,93250,93252,93254],{"class":96,"line":15},[94,93239,343],{"class":104},[94,93241,150],{"class":100},[94,93243,93091],{"class":104},[94,93245,322],{"class":153},[94,93247,483],{"class":104},[94,93249,416],{"class":153},[94,93251,483],{"class":104},[94,93253,805],{"class":153},[94,93255,111],{"class":104},[94,93257,93258],{"class":96,"line":1160},[94,93259,93260],{"class":163},"#求平均值\n",[94,93262,93263],{"class":96,"line":1175},[94,93264,93265],{"class":104},"np.mean(a)\n",[40,93267,93268],{},"②二维数组",[85,93270,93272],{"className":30361,"code":93271,"language":30363,"meta":14,"style":14},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[91,93273,93274,93279,93304,93309],{"__ignoreMap":14},[94,93275,93276],{"class":96,"line":97},[94,93277,93278],{"class":163},"#二维数组\n",[94,93280,93281,93284,93286,93288,93290,93292,93294,93296,93298,93300,93302],{"class":96,"line":15},[94,93282,93283],{"class":104},"aa",[94,93285,150],{"class":100},[94,93287,92979],{"class":104},[94,93289,322],{"class":153},[94,93291,483],{"class":104},[94,93293,628],{"class":153},[94,93295,92984],{"class":104},[94,93297,176],{"class":153},[94,93299,483],{"class":104},[94,93301,398],{"class":153},[94,93303,111],{"class":104},[94,93305,93306],{"class":96,"line":1160},[94,93307,93308],{"class":163},"#对数组中的所有数求平均\n",[94,93310,93311],{"class":96,"line":1175},[94,93312,93313],{"class":104},"np.mean(aa)\n",[35,93315,93317],{"id":93316},"_114-median求中位数函数","11.4 median()求中位数函数",[85,93319,93321],{"className":30361,"code":93320,"language":30363,"meta":14,"style":14},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[91,93322,93323,93328,93344,93349],{"__ignoreMap":14},[94,93324,93325],{"class":96,"line":97},[94,93326,93327],{"class":163},"#求中位数\n",[94,93329,93330,93332,93334,93336,93338,93340,93342],{"class":96,"line":15},[94,93331,368],{"class":104},[94,93333,150],{"class":100},[94,93335,92979],{"class":104},[94,93337,322],{"class":153},[94,93339,483],{"class":104},[94,93341,551],{"class":153},[94,93343,111],{"class":104},[94,93345,93346],{"class":96,"line":1160},[94,93347,93348],{"class":104},"np.median(b)\n",[94,93350,93351],{"class":96,"line":1175},[94,93352,93353],{"class":163},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[35,93355,93357],{"id":93356},"_115-power求幂运算函数","11.5 power()求幂运算函数",[85,93359,93361],{"className":30361,"code":93360,"language":30363,"meta":14,"style":14},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[91,93362,93363,93379,93384,93389,93398,93403,93412],{"__ignoreMap":14},[94,93364,93365,93367,93369,93371,93373,93375,93377],{"class":96,"line":97},[94,93366,368],{"class":104},[94,93368,150],{"class":100},[94,93370,92979],{"class":104},[94,93372,322],{"class":153},[94,93374,483],{"class":104},[94,93376,551],{"class":153},[94,93378,111],{"class":104},[94,93380,93381],{"class":96,"line":15},[94,93382,93383],{"class":163},"#幂运算\n",[94,93385,93386],{"class":96,"line":1160},[94,93387,93388],{"class":163},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[94,93390,93391,93394,93396],{"class":96,"line":1175},[94,93392,93393],{"class":104},"np.power(b,",[94,93395,182],{"class":153},[94,93397,111],{"class":104},[94,93399,93400],{"class":96,"line":1181},[94,93401,93402],{"class":163},"#或者以下代码，将数据存储起来\n",[94,93404,93405,93407,93409],{"class":96,"line":1195},[94,93406,950],{"class":104},[94,93408,150],{"class":100},[94,93410,93411],{"class":104},"np.empty_like(b)\n",[94,93413,93414,93416,93418,93420,93422,93424],{"class":96,"line":1201},[94,93415,93393],{"class":104},[94,93417,182],{"class":153},[94,93419,483],{"class":104},[94,93421,93031],{"class":5198},[94,93423,150],{"class":100},[94,93425,93426],{"class":104},"y)\n",[35,93428,93430],{"id":93429},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[85,93432,93434],{"className":30361,"code":93433,"language":30363,"meta":14,"style":14},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[91,93435,93436,93452,93457,93462,93466,93484],{"__ignoreMap":14},[94,93437,93438,93440,93442,93444,93446,93448,93450],{"class":96,"line":97},[94,93439,368],{"class":104},[94,93441,150],{"class":100},[94,93443,92979],{"class":104},[94,93445,322],{"class":153},[94,93447,483],{"class":104},[94,93449,551],{"class":153},[94,93451,111],{"class":104},[94,93453,93454],{"class":96,"line":15},[94,93455,93456],{"class":163},"#开方\n",[94,93458,93459],{"class":96,"line":1160},[94,93460,93461],{"class":104},"np.sqrt(b)\n",[94,93463,93464],{"class":96,"line":1175},[94,93465,93402],{"class":163},[94,93467,93468,93470,93472,93475,93478,93480,93482],{"class":96,"line":1181},[94,93469,950],{"class":104},[94,93471,150],{"class":100},[94,93473,93474],{"class":104},"np.empty_like(b,",[94,93476,93477],{"class":5198},"dtype",[94,93479,150],{"class":100},[94,93481,144],{"class":153},[94,93483,111],{"class":104},[94,93485,93486,93489,93491,93493],{"class":96,"line":1195},[94,93487,93488],{"class":104},"np.sqrt(b,",[94,93490,93031],{"class":5198},[94,93492,150],{"class":100},[94,93494,93426],{"class":104},[35,93496,93498],{"id":93497},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[40,93500,93501],{},"对数组中的元素累计求和，可指定轴",[40,93503,93504],{},"#累计求和的意思是：",[40,93506,93507],{},"a = np.array([1, 2, 3, 4])",[40,93509,93510],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[85,93512,93514],{"className":30361,"code":93513,"language":30363,"meta":14,"style":14},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[91,93515,93516,93532,93537,93542],{"__ignoreMap":14},[94,93517,93518,93520,93522,93524,93526,93528,93530],{"class":96,"line":97},[94,93519,368],{"class":104},[94,93521,150],{"class":100},[94,93523,92979],{"class":104},[94,93525,322],{"class":153},[94,93527,483],{"class":104},[94,93529,551],{"class":153},[94,93531,111],{"class":104},[94,93533,93534],{"class":96,"line":15},[94,93535,93536],{"class":104},"np.cumsum(b)\n",[94,93538,93539],{"class":96,"line":1160},[94,93540,93541],{"class":163},"#结果：\n",[94,93543,93544],{"class":96,"line":1175},[94,93545,93546],{"class":163},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[35,93548,93550],{"id":93549},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[85,93552,93554],{"className":30361,"code":93553,"language":30363,"meta":14,"style":14},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[91,93555,93556,93572,93577,93582,93586],{"__ignoreMap":14},[94,93557,93558,93560,93562,93564,93566,93568,93570],{"class":96,"line":97},[94,93559,368],{"class":104},[94,93561,150],{"class":100},[94,93563,92979],{"class":104},[94,93565,322],{"class":153},[94,93567,483],{"class":104},[94,93569,551],{"class":153},[94,93571,111],{"class":104},[94,93573,93574],{"class":96,"line":15},[94,93575,93576],{"class":163},"#对数组中的元素累计求积，可指定轴\n",[94,93578,93579],{"class":96,"line":1160},[94,93580,93581],{"class":104},"np.cumprod(b)\n",[94,93583,93584],{"class":96,"line":1175},[94,93585,93541],{"class":163},[94,93587,93588],{"class":96,"line":1181},[94,93589,93590],{"class":163},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[35,93592,93594],{"id":93593},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[85,93596,93598],{"className":30361,"code":93597,"language":30363,"meta":14,"style":14},"#删除数组中的重复数据，并对数据进行排序\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",[91,93599,93600,93605,93653,93658,93662],{"__ignoreMap":14},[94,93601,93602],{"class":96,"line":97},[94,93603,93604],{"class":163},"#删除数组中的重复数据，并对数据进行排序\n",[94,93606,93607,93609,93611,93613,93615,93617,93619,93621,93623,93625,93627,93629,93631,93633,93635,93637,93639,93641,93643,93645,93647,93649,93651],{"class":96,"line":15},[94,93608,343],{"class":104},[94,93610,150],{"class":100},[94,93612,93001],{"class":104},[94,93614,322],{"class":153},[94,93616,483],{"class":104},[94,93618,182],{"class":153},[94,93620,483],{"class":104},[94,93622,176],{"class":153},[94,93624,483],{"class":104},[94,93626,603],{"class":153},[94,93628,483],{"class":104},[94,93630,176],{"class":153},[94,93632,483],{"class":104},[94,93634,551],{"class":153},[94,93636,483],{"class":104},[94,93638,302],{"class":153},[94,93640,483],{"class":104},[94,93642,296],{"class":153},[94,93644,483],{"class":104},[94,93646,880],{"class":153},[94,93648,483],{"class":104},[94,93650,398],{"class":153},[94,93652,4638],{"class":104},[94,93654,93655],{"class":96,"line":1160},[94,93656,93657],{"class":104},"np.unique(a)\n",[94,93659,93660],{"class":96,"line":1175},[94,93661,93541],{"class":163},[94,93663,93664],{"class":96,"line":1181},[94,93665,93666],{"class":163},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[40,93668,93669],{},"升序形式排序",[35,93671,93673],{"id":93672},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[85,93675,93677],{"className":30361,"code":93676,"language":30363,"meta":14,"style":14},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[91,93678,93679,93727,93732],{"__ignoreMap":14},[94,93680,93681,93683,93685,93687,93689,93691,93693,93695,93697,93699,93701,93703,93705,93707,93709,93711,93713,93715,93717,93719,93721,93723,93725],{"class":96,"line":97},[94,93682,343],{"class":104},[94,93684,150],{"class":100},[94,93686,93001],{"class":104},[94,93688,322],{"class":153},[94,93690,483],{"class":104},[94,93692,182],{"class":153},[94,93694,483],{"class":104},[94,93696,176],{"class":153},[94,93698,483],{"class":104},[94,93700,603],{"class":153},[94,93702,483],{"class":104},[94,93704,176],{"class":153},[94,93706,483],{"class":104},[94,93708,551],{"class":153},[94,93710,483],{"class":104},[94,93712,302],{"class":153},[94,93714,483],{"class":104},[94,93716,296],{"class":153},[94,93718,483],{"class":104},[94,93720,880],{"class":153},[94,93722,483],{"class":104},[94,93724,398],{"class":153},[94,93726,4638],{"class":104},[94,93728,93729],{"class":96,"line":15},[94,93730,93731],{"class":163},"#返回数组中非零元素的索引\n",[94,93733,93734],{"class":96,"line":1160},[94,93735,93736],{"class":104},"np.nonzero(a)\n",[35,93738,93740],{"id":93739},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[85,93742,93744],{"className":30361,"code":93743,"language":30363,"meta":14,"style":14},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[91,93745,93746,93794,93799],{"__ignoreMap":14},[94,93747,93748,93750,93752,93754,93756,93758,93760,93762,93764,93766,93768,93770,93772,93774,93776,93778,93780,93782,93784,93786,93788,93790,93792],{"class":96,"line":97},[94,93749,343],{"class":104},[94,93751,150],{"class":100},[94,93753,93001],{"class":104},[94,93755,322],{"class":153},[94,93757,483],{"class":104},[94,93759,182],{"class":153},[94,93761,483],{"class":104},[94,93763,176],{"class":153},[94,93765,483],{"class":104},[94,93767,603],{"class":153},[94,93769,483],{"class":104},[94,93771,176],{"class":153},[94,93773,483],{"class":104},[94,93775,551],{"class":153},[94,93777,483],{"class":104},[94,93779,302],{"class":153},[94,93781,483],{"class":104},[94,93783,296],{"class":153},[94,93785,483],{"class":104},[94,93787,880],{"class":153},[94,93789,483],{"class":104},[94,93791,398],{"class":153},[94,93793,4638],{"class":104},[94,93795,93796],{"class":96,"line":15},[94,93797,93798],{"class":163},"#计算一组数中最大值与最小值的差，可指定轴\n",[94,93800,93801],{"class":96,"line":1160},[94,93802,93803],{"class":104},"np.ptp(a)\n",[5108,93805,93806],{},"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":14,"searchDepth":15,"depth":15,"links":93808},[93809,93810,93811,93812,93813,93814,93815,93816,93817,93818,93819],{"id":93071,"depth":15,"text":93072},{"id":93114,"depth":15,"text":93115},{"id":93222,"depth":15,"text":93223},{"id":93316,"depth":15,"text":93317},{"id":93356,"depth":15,"text":93357},{"id":93429,"depth":15,"text":93430},{"id":93497,"depth":15,"text":93498},{"id":93549,"depth":15,"text":93550},{"id":93593,"depth":15,"text":93594},{"id":93672,"depth":15,"text":93673},{"id":93739,"depth":15,"text":93740},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93057,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93826,"title":93827,"body":93828,"description":17,"extension":18,"meta":94483,"navigation":20,"path":94484,"seo":94485,"stem":94486,"__hash__":94487},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93829,"toc":94471},[93830,93833,93837,93840,94056,94060,94063,94272,94276,94342,94347,94351,94354,94357,94395,94399,94402,94407,94411,94414,94417,94422,94426,94429,94433,94436,94439,94444,94448,94451,94454,94459,94463,94468],[10,93831,93827],{"id":93832},"_12其他常用函数",[35,93834,93836],{"id":93835},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[40,93838,93839],{},"将数组的数据按照行列复制扩展",[85,93841,93843],{"className":30361,"code":93842,"language":30363,"meta":14,"style":14},"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",[91,93844,93845,93861,93870,93874,93879,93884,93897,93901,93906,93911,93916,93920,93925,93949,93961,93965,93969,93974,93979,93984,93989,93993,94006,94010,94014,94019,94024,94029,94034,94039,94043,94047,94052],{"__ignoreMap":14},[94,93846,93847,93849,93851,93853,93855,93857,93859],{"class":96,"line":97},[94,93848,343],{"class":104},[94,93850,150],{"class":100},[94,93852,92979],{"class":104},[94,93854,322],{"class":153},[94,93856,483],{"class":104},[94,93858,424],{"class":153},[94,93860,111],{"class":104},[94,93862,93863,93866,93868],{"class":96,"line":15},[94,93864,93865],{"class":104},"np.tile(a,",[94,93867,182],{"class":153},[94,93869,111],{"class":104},[94,93871,93872],{"class":96,"line":1160},[94,93873,93541],{"class":163},[94,93875,93876],{"class":96,"line":1175},[94,93877,93878],{"class":163},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[94,93880,93881],{"class":96,"line":1181},[94,93882,93883],{"class":163},"#行复制两次，列复制三次\n",[94,93885,93886,93889,93891,93893,93895],{"class":96,"line":1195},[94,93887,93888],{"class":104},"np.tile(a,(",[94,93890,182],{"class":153},[94,93892,483],{"class":104},[94,93894,176],{"class":153},[94,93896,30480],{"class":104},[94,93898,93899],{"class":96,"line":1201},[94,93900,93541],{"class":163},[94,93902,93903],{"class":96,"line":1292},[94,93904,93905],{"class":209},"'''\n",[94,93907,93908],{"class":96,"line":1298},[94,93909,93910],{"class":209},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[94,93912,93913],{"class":96,"line":1310},[94,93914,93915],{"class":209},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[94,93917,93918],{"class":96,"line":1593},[94,93919,93905],{"class":209},[94,93921,93922],{"class":96,"line":1598},[94,93923,93924],{"class":163},"#创建二维数组\n",[94,93926,93927,93929,93931,93933,93935,93937,93939,93941,93943,93945,93947],{"class":96,"line":1604},[94,93928,93283],{"class":104},[94,93930,150],{"class":100},[94,93932,92979],{"class":104},[94,93934,322],{"class":153},[94,93936,483],{"class":104},[94,93938,628],{"class":153},[94,93940,92984],{"class":104},[94,93942,398],{"class":153},[94,93944,483],{"class":104},[94,93946,176],{"class":153},[94,93948,111],{"class":104},[94,93950,93951,93954,93956,93958],{"class":96,"line":1609},[94,93952,93953],{"class":104},"np.tile(aa,",[94,93955,182],{"class":153},[94,93957,534],{"class":104},[94,93959,93960],{"class":163},"#一个数的时候就是行\n",[94,93962,93963],{"class":96,"line":1623},[94,93964,93541],{"class":163},[94,93966,93967],{"class":96,"line":1628},[94,93968,93905],{"class":209},[94,93970,93971],{"class":96,"line":1634},[94,93972,93973],{"class":209},"array([[ 1,  2,  3,  1,  2,  3],\n",[94,93975,93976],{"class":96,"line":1655},[94,93977,93978],{"class":209},"       [ 4,  5,  6,  4,  5,  6],\n",[94,93980,93981],{"class":96,"line":1660},[94,93982,93983],{"class":209},"       [ 7,  8,  9,  7,  8,  9],\n",[94,93985,93986],{"class":96,"line":1674},[94,93987,93988],{"class":209},"       [10, 11, 12, 10, 11, 12]])\n",[94,93990,93991],{"class":96,"line":1679},[94,93992,93905],{"class":209},[94,93994,93995,93998,94000,94002,94004],{"class":96,"line":1708},[94,93996,93997],{"class":104},"np.tile(aa,(",[94,93999,182],{"class":153},[94,94001,483],{"class":104},[94,94003,176],{"class":153},[94,94005,30480],{"class":104},[94,94007,94008],{"class":96,"line":1713},[94,94009,93541],{"class":163},[94,94011,94012],{"class":96,"line":1730},[94,94013,93905],{"class":209},[94,94015,94016],{"class":96,"line":1735},[94,94017,94018],{"class":209},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[94,94020,94021],{"class":96,"line":1740},[94,94022,94023],{"class":209},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[94,94025,94026],{"class":96,"line":1745},[94,94027,94028],{"class":209},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[94,94030,94031],{"class":96,"line":1759},[94,94032,94033],{"class":209},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[94,94035,94036],{"class":96,"line":1764},[94,94037,94038],{"class":209},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[94,94040,94041],{"class":96,"line":2558},[94,94042,94023],{"class":209},[94,94044,94045],{"class":96,"line":2572},[94,94046,94028],{"class":209},[94,94048,94049],{"class":96,"line":2580},[94,94050,94051],{"class":209},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[94,94053,94054],{"class":96,"line":2585},[94,94055,93905],{"class":209},[35,94057,94059],{"id":94058},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[40,94061,94062],{},"repeat()将数组中的每个元素重复若干次",[85,94064,94066],{"className":30361,"code":94065,"language":30363,"meta":14,"style":14},"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",[91,94067,94068,94084,94093,94097,94102,94126,94131,94140,94144,94149,94153,94158,94174,94178,94182,94187,94192,94197,94201,94206,94210,94215,94220,94224,94240,94244,94248,94253,94258,94263,94268],{"__ignoreMap":14},[94,94069,94070,94072,94074,94076,94078,94080,94082],{"class":96,"line":97},[94,94071,343],{"class":104},[94,94073,150],{"class":100},[94,94075,92979],{"class":104},[94,94077,322],{"class":153},[94,94079,483],{"class":104},[94,94081,424],{"class":153},[94,94083,111],{"class":104},[94,94085,94086,94089,94091],{"class":96,"line":15},[94,94087,94088],{"class":104},"np.repeat(a,",[94,94090,176],{"class":153},[94,94092,111],{"class":104},[94,94094,94095],{"class":96,"line":1160},[94,94096,93541],{"class":163},[94,94098,94099],{"class":96,"line":1175},[94,94100,94101],{"class":163},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[94,94103,94104,94106,94108,94110,94112,94114,94116,94118,94120,94122,94124],{"class":96,"line":1181},[94,94105,93283],{"class":104},[94,94107,150],{"class":100},[94,94109,92979],{"class":104},[94,94111,322],{"class":153},[94,94113,483],{"class":104},[94,94115,628],{"class":153},[94,94117,92984],{"class":104},[94,94119,398],{"class":153},[94,94121,483],{"class":104},[94,94123,176],{"class":153},[94,94125,111],{"class":104},[94,94127,94128],{"class":96,"line":1195},[94,94129,94130],{"class":163},"#这个重复之后二维变成一维\n",[94,94132,94133,94136,94138],{"class":96,"line":1201},[94,94134,94135],{"class":104},"np.repeat(aa,",[94,94137,182],{"class":153},[94,94139,111],{"class":104},[94,94141,94142],{"class":96,"line":1292},[94,94143,93905],{"class":209},[94,94145,94146],{"class":96,"line":1298},[94,94147,94148],{"class":209},"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",[94,94150,94151],{"class":96,"line":1310},[94,94152,93905],{"class":209},[94,94154,94155],{"class":96,"line":1593},[94,94156,94157],{"class":163},"#指定axis\n",[94,94159,94160,94162,94164,94166,94168,94170,94172],{"class":96,"line":1598},[94,94161,94135],{"class":104},[94,94163,182],{"class":153},[94,94165,483],{"class":104},[94,94167,47497],{"class":5198},[94,94169,150],{"class":100},[94,94171,296],{"class":153},[94,94173,111],{"class":104},[94,94175,94176],{"class":96,"line":1604},[94,94177,93541],{"class":163},[94,94179,94180],{"class":96,"line":1609},[94,94181,93905],{"class":209},[94,94183,94184],{"class":96,"line":1623},[94,94185,94186],{"class":209},"array([[ 1,  2,  3],\n",[94,94188,94189],{"class":96,"line":1628},[94,94190,94191],{"class":209},"       [ 1,  2,  3],\n",[94,94193,94194],{"class":96,"line":1634},[94,94195,94196],{"class":209},"       [ 4,  5,  6],\n",[94,94198,94199],{"class":96,"line":1655},[94,94200,94196],{"class":209},[94,94202,94203],{"class":96,"line":1660},[94,94204,94205],{"class":209},"       [ 7,  8,  9],\n",[94,94207,94208],{"class":96,"line":1674},[94,94209,94205],{"class":209},[94,94211,94212],{"class":96,"line":1679},[94,94213,94214],{"class":209},"       [10, 11, 12],\n",[94,94216,94217],{"class":96,"line":1708},[94,94218,94219],{"class":209},"       [10, 11, 12]])\n",[94,94221,94222],{"class":96,"line":1713},[94,94223,93905],{"class":209},[94,94225,94226,94228,94230,94232,94234,94236,94238],{"class":96,"line":1730},[94,94227,94135],{"class":104},[94,94229,182],{"class":153},[94,94231,483],{"class":104},[94,94233,47497],{"class":5198},[94,94235,150],{"class":100},[94,94237,322],{"class":153},[94,94239,111],{"class":104},[94,94241,94242],{"class":96,"line":1735},[94,94243,93541],{"class":163},[94,94245,94246],{"class":96,"line":1740},[94,94247,93905],{"class":209},[94,94249,94250],{"class":96,"line":1745},[94,94251,94252],{"class":209},"array([[ 1,  1,  2,  2,  3,  3],\n",[94,94254,94255],{"class":96,"line":1759},[94,94256,94257],{"class":209},"       [ 4,  4,  5,  5,  6,  6],\n",[94,94259,94260],{"class":96,"line":1764},[94,94261,94262],{"class":209},"       [ 7,  7,  8,  8,  9,  9],\n",[94,94264,94265],{"class":96,"line":2558},[94,94266,94267],{"class":209},"       [10, 10, 11, 11, 12, 12]])\n",[94,94269,94270],{"class":96,"line":2572},[94,94271,93905],{"class":209},[35,94273,94275],{"id":94274},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[85,94277,94279],{"className":30361,"code":94278,"language":30363,"meta":14,"style":14},"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",[91,94280,94281,94297,94302,94314,94318,94323,94333,94337],{"__ignoreMap":14},[94,94282,94283,94285,94287,94289,94291,94293,94295],{"class":96,"line":97},[94,94284,343],{"class":104},[94,94286,150],{"class":100},[94,94288,92979],{"class":104},[94,94290,322],{"class":153},[94,94292,483],{"class":104},[94,94294,424],{"class":153},[94,94296,111],{"class":104},[94,94298,94299],{"class":96,"line":15},[94,94300,94301],{"class":163},"#array([，2，3，4])\n",[94,94303,94304,94307,94309,94311],{"class":96,"line":1160},[94,94305,94306],{"class":104},"np.roll(a,",[94,94308,182],{"class":153},[94,94310,534],{"class":104},[94,94312,94313],{"class":163},"#传正数向后调多少位，传负数向前调多少位\n",[94,94315,94316],{"class":96,"line":1175},[94,94317,93541],{"class":163},[94,94319,94320],{"class":96,"line":1181},[94,94321,94322],{"class":163},"#array([3, 4, 1, 2])\n",[94,94324,94325,94327,94329,94331],{"class":96,"line":1195},[94,94326,94306],{"class":104},[94,94328,637],{"class":100},[94,94330,322],{"class":153},[94,94332,111],{"class":104},[94,94334,94335],{"class":96,"line":1201},[94,94336,93541],{"class":163},[94,94338,94339],{"class":96,"line":1292},[94,94340,94341],{"class":163},"#array([2, 3, 4, 1])\n",[40,94343,94344],{},[1443,94345],{"alt":14,"src":94346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[35,94348,94350],{"id":94349},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[40,94352,94353],{},"resize()重新调整数组的大小",[40,94355,94356],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[85,94358,94360],{"className":30361,"code":94359,"language":30363,"meta":14,"style":14},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[91,94361,94362,94367,94380],{"__ignoreMap":14},[94,94363,94364],{"class":96,"line":97},[94,94365,94366],{"class":163},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[94,94368,94369,94372,94374,94376,94378],{"class":96,"line":15},[94,94370,94371],{"class":104},"np.resize(aa,(",[94,94373,182],{"class":153},[94,94375,483],{"class":104},[94,94377,449],{"class":153},[94,94379,30480],{"class":104},[94,94381,94382,94384,94386,94388,94390,94392],{"class":96,"line":1160},[94,94383,94371],{"class":104},[94,94385,182],{"class":153},[94,94387,483],{"class":104},[94,94389,525],{"class":153},[94,94391,82748],{"class":104},[94,94393,94394],{"class":163},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[35,94396,94398],{"id":94397},"_125-placeput函数","12.5 place()\u002Fput()函数",[40,94400,94401],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[40,94403,94404],{},[1443,94405],{"alt":14,"src":94406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[35,94408,94410],{"id":94409},"_126-保存加载文件","12.6 保存加载文件",[40,94412,94413],{},"savetxt():将数据保存到txt文件中",[40,94415,94416],{},"loadtxt():从文件加载数据",[40,94418,94419],{},[1443,94420],{"alt":14,"src":94421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[35,94423,94425],{"id":94424},"_127-genfromtxt函数","12.7 genfromtxt()函数",[40,94427,94428],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[35,94430,94432],{"id":94431},"_128-anyall函数","12.8 any()\u002Fall()函数",[40,94434,94435],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[40,94437,94438],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[40,94440,94441],{},[1443,94442],{"alt":14,"src":94443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[35,94445,94447],{"id":94446},"_129-where语句","12.9 where语句",[40,94449,94450],{},"np.where(条件,x,y)",[40,94452,94453],{},"如果条件为True,对应值为x,否则对应值为y",[40,94455,94456],{},[1443,94457],{"alt":14,"src":94458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[35,94460,94462],{"id":94461},"_1210-dot矩阵","12.10 dot()矩阵",[40,94464,94465],{},[1443,94466],{"alt":14,"src":94467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5108,94469,94470],{},"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":14,"searchDepth":15,"depth":15,"links":94472},[94473,94474,94475,94476,94477,94478,94479,94480,94481,94482],{"id":93835,"depth":15,"text":93836},{"id":94058,"depth":15,"text":94059},{"id":94274,"depth":15,"text":94275},{"id":94349,"depth":15,"text":94350},{"id":94397,"depth":15,"text":94398},{"id":94409,"depth":15,"text":94410},{"id":94424,"depth":15,"text":94425},{"id":94431,"depth":15,"text":94432},{"id":94446,"depth":15,"text":94447},{"id":94461,"depth":15,"text":94462},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93827,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94489,"title":94490,"body":94491,"description":17,"extension":18,"meta":94844,"navigation":20,"path":94845,"seo":94846,"stem":94847,"__hash__":94848},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94492,"toc":94842},[94493,94496,94499,94502,94505,94508,94573,94575,94839],[10,94494,94490],{"id":94495},"_13数组排序",[40,94497,94498],{},"排序主要用到的方法是np.sort和np.argsort",[40,94500,94501],{},"其中np.sort()对数组直接排序",[40,94503,94504],{},"而np.argsort()是返回排序后的原始索引",[40,94506,94507],{},"①一维数组",[85,94509,94511],{"className":30361,"code":94510,"language":30363,"meta":14,"style":14},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[91,94512,94513,94517,94557,94565],{"__ignoreMap":14},[94,94514,94515],{"class":96,"line":97},[94,94516,93082],{"class":163},[94,94518,94519,94521,94523,94525,94527,94529,94531,94533,94535,94537,94539,94541,94543,94545,94547,94549,94551,94553,94555],{"class":96,"line":15},[94,94520,343],{"class":104},[94,94522,150],{"class":100},[94,94524,93001],{"class":104},[94,94526,176],{"class":153},[94,94528,483],{"class":104},[94,94530,603],{"class":153},[94,94532,483],{"class":104},[94,94534,500],{"class":153},[94,94536,483],{"class":104},[94,94538,880],{"class":153},[94,94540,483],{"class":104},[94,94542,384],{"class":153},[94,94544,483],{"class":104},[94,94546,998],{"class":153},[94,94548,483],{"class":104},[94,94550,449],{"class":153},[94,94552,483],{"class":104},[94,94554,551],{"class":153},[94,94556,4638],{"class":104},[94,94558,94559,94562],{"class":96,"line":1160},[94,94560,94561],{"class":104},"np.sort(a)",[94,94563,94564],{"class":163},"#升序排序\n",[94,94566,94567,94570],{"class":96,"line":1175},[94,94568,94569],{"class":104},"np.argsort(a)",[94,94571,94572],{"class":163},"#按照元素大小来索引排序\n",[40,94574,93268],{},[85,94576,94578],{"className":30361,"code":94577,"language":30363,"meta":14,"style":14},"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",[91,94579,94580,94592,94618,94623,94627,94632,94637,94642,94647,94651,94659,94663,94668,94673,94678,94683,94687,94692,94705,94709,94714,94719,94724,94729,94733,94738,94750,94754,94758,94762,94766,94770,94774,94779,94794,94799,94808,94813,94817,94821,94826,94830,94835],{"__ignoreMap":14},[94,94581,94582,94585,94587,94589],{"class":96,"line":97},[94,94583,94584],{"class":104},"np.random.seed(",[94,94586,296],{"class":153},[94,94588,534],{"class":104},[94,94590,94591],{"class":163},"#保证每次值一样\n",[94,94593,94594,94596,94598,94600,94602,94604,94606,94608,94610,94612,94614,94616],{"class":96,"line":15},[94,94595,93283],{"class":104},[94,94597,150],{"class":100},[94,94599,93091],{"class":104},[94,94601,416],{"class":153},[94,94603,483],{"class":104},[94,94605,31479],{"class":5198},[94,94607,150],{"class":100},[94,94609,105],{"class":104},[94,94611,398],{"class":153},[94,94613,483],{"class":104},[94,94615,449],{"class":153},[94,94617,30480],{"class":104},[94,94619,94620],{"class":96,"line":1160},[94,94621,94622],{"class":163},"#原数组：\n",[94,94624,94625],{"class":96,"line":1175},[94,94626,93905],{"class":209},[94,94628,94629],{"class":96,"line":1181},[94,94630,94631],{"class":209},"array([[44, 47, 64, 67, 67,  9],\n",[94,94633,94634],{"class":96,"line":1195},[94,94635,94636],{"class":209},"       [83, 21, 36, 87, 70, 88],\n",[94,94638,94639],{"class":96,"line":1201},[94,94640,94641],{"class":209},"       [88, 12, 58, 65, 39, 87],\n",[94,94643,94644],{"class":96,"line":1292},[94,94645,94646],{"class":209},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[94,94648,94649],{"class":96,"line":1298},[94,94650,93905],{"class":209},[94,94652,94653,94656],{"class":96,"line":1310},[94,94654,94655],{"class":104},"np.sort(aa)",[94,94657,94658],{"class":163},"#每行进行了排序\n",[94,94660,94661],{"class":96,"line":1593},[94,94662,93905],{"class":209},[94,94664,94665],{"class":96,"line":1598},[94,94666,94667],{"class":209},"array([[ 9, 44, 47, 64, 67, 67],\n",[94,94669,94670],{"class":96,"line":1604},[94,94671,94672],{"class":209},"       [21, 36, 70, 83, 87, 88],\n",[94,94674,94675],{"class":96,"line":1609},[94,94676,94677],{"class":209},"       [12, 39, 58, 65, 87, 88],\n",[94,94679,94680],{"class":96,"line":1623},[94,94681,94682],{"class":209},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[94,94684,94685],{"class":96,"line":1628},[94,94686,93905],{"class":209},[94,94688,94689],{"class":96,"line":1634},[94,94690,94691],{"class":163},"#axis=0时\n",[94,94693,94694,94697,94699,94701,94703],{"class":96,"line":1655},[94,94695,94696],{"class":104},"np.sort(aa,",[94,94698,47497],{"class":5198},[94,94700,150],{"class":100},[94,94702,296],{"class":153},[94,94704,111],{"class":104},[94,94706,94707],{"class":96,"line":1660},[94,94708,93905],{"class":209},[94,94710,94711],{"class":96,"line":1674},[94,94712,94713],{"class":209},"array([[44, 12, 36, 37, 25,  9],\n",[94,94715,94716],{"class":96,"line":1679},[94,94717,94718],{"class":209},"       [46, 21, 58, 65, 39, 77],\n",[94,94720,94721],{"class":96,"line":1708},[94,94722,94723],{"class":209},"       [83, 47, 64, 67, 67, 87],\n",[94,94725,94726],{"class":96,"line":1713},[94,94727,94728],{"class":209},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[94,94730,94731],{"class":96,"line":1730},[94,94732,93905],{"class":209},[94,94734,94735],{"class":96,"line":1735},[94,94736,94737],{"class":163},"#axis=1时,为默认值\n",[94,94739,94740,94742,94744,94746,94748],{"class":96,"line":1740},[94,94741,94696],{"class":104},[94,94743,47497],{"class":5198},[94,94745,150],{"class":100},[94,94747,322],{"class":153},[94,94749,111],{"class":104},[94,94751,94752],{"class":96,"line":1745},[94,94753,93905],{"class":209},[94,94755,94756],{"class":96,"line":1759},[94,94757,94667],{"class":209},[94,94759,94760],{"class":96,"line":1764},[94,94761,94672],{"class":209},[94,94763,94764],{"class":96,"line":2558},[94,94765,94677],{"class":209},[94,94767,94768],{"class":96,"line":2572},[94,94769,94682],{"class":209},[94,94771,94772],{"class":96,"line":2580},[94,94773,93905],{"class":209},[94,94775,94776],{"class":96,"line":2585},[94,94777,94778],{"class":163},"#按最后一列排序\n",[94,94780,94781,94783,94785,94788,94790,94792],{"class":96,"line":2591},[94,94782,368],{"class":104},[94,94784,150],{"class":100},[94,94786,94787],{"class":104},"aa[:,",[94,94789,637],{"class":100},[94,94791,322],{"class":153},[94,94793,33229],{"class":104},[94,94795,94796],{"class":96,"line":2597},[94,94797,94798],{"class":163},"#获取最后一列排好序的索引\n",[94,94800,94801,94803,94805],{"class":96,"line":2602},[94,94802,74035],{"class":104},[94,94804,150],{"class":100},[94,94806,94807],{"class":104},"np.argsort(b)\n",[94,94809,94810],{"class":96,"line":7930},[94,94811,94812],{"class":104},"aa[index]\n",[94,94814,94815],{"class":96,"line":7954},[94,94816,93905],{"class":209},[94,94818,94819],{"class":96,"line":7959},[94,94820,94631],{"class":209},[94,94822,94823],{"class":96,"line":7965},[94,94824,94825],{"class":209},"       [46, 88, 81, 37, 25, 77],\n",[94,94827,94828],{"class":96,"line":7992},[94,94829,94641],{"class":209},[94,94831,94832],{"class":96,"line":7997},[94,94833,94834],{"class":209},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[94,94836,94837],{"class":96,"line":8003},[94,94838,93905],{"class":209},[5108,94840,94841],{},"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":14,"searchDepth":15,"depth":15,"links":94843},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94490,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94850,"title":94851,"body":94852,"description":17,"extension":18,"meta":94882,"navigation":20,"path":94883,"seo":94884,"stem":94885,"__hash__":94886},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94853,"toc":94880},[94854,94857,94860,94863,94866,94869,94872,94875],[10,94855,94851],{"id":94856},"_14广播机制",[40,94858,94859],{},"广播的规则：",[40,94861,94862],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[40,94864,94865],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[40,94867,94868],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[40,94870,94871],{},"3.如果没有维度形状为1，则会引发异常",[40,94873,94874],{},"也就是只有维度或者个数为1才可以进行广播操作",[40,94876,94877],{},[1443,94878],{"alt":14,"src":94879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":14,"searchDepth":15,"depth":15,"links":94881},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94851,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94888,"title":94889,"body":94890,"description":17,"extension":18,"meta":94988,"navigation":20,"path":94989,"seo":94990,"stem":94991,"__hash__":94992},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94891,"toc":94986},[94892,94895,94898,94983],[10,94893,94889],{"id":94894},"_15比较掩码",[40,94896,94897],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[85,94899,94901],{"className":30361,"code":94900,"language":30363,"meta":14,"style":14},"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",[91,94902,94903,94949,94960,94974,94978],{"__ignoreMap":14},[94,94904,94905,94907,94909,94912,94914,94916,94918,94920,94922,94924,94926,94928,94930,94932,94934,94936,94938,94940,94942,94944,94946],{"class":96,"line":97},[94,94906,343],{"class":104},[94,94908,150],{"class":100},[94,94910,94911],{"class":104},"np.array([[",[94,94913,322],{"class":153},[94,94915,483],{"class":104},[94,94917,182],{"class":153},[94,94919,483],{"class":104},[94,94921,176],{"class":153},[94,94923,48013],{"class":104},[94,94925,577],{"class":153},[94,94927,483],{"class":104},[94,94929,603],{"class":153},[94,94931,483],{"class":104},[94,94933,628],{"class":153},[94,94935,48013],{"class":104},[94,94937,830],{"class":153},[94,94939,483],{"class":104},[94,94941,855],{"class":153},[94,94943,483],{"class":104},[94,94945,880],{"class":153},[94,94947,94948],{"class":104},"]])\n",[94,94950,94951,94953,94955,94957],{"class":96,"line":15},[94,94952,343],{"class":104},[94,94954,1015],{"class":100},[94,94956,805],{"class":153},[94,94958,94959],{"class":163},"#结果是一个由True,False组成的数组\n",[94,94961,94962,94965,94967,94969,94971],{"class":96,"line":1160},[94,94963,94964],{"class":104},"a[a",[94,94966,1015],{"class":100},[94,94968,805],{"class":153},[94,94970,1045],{"class":104},[94,94972,94973],{"class":163},"#小于20的元素会存到这个数组中\n",[94,94975,94976],{"class":96,"line":1175},[94,94977,93541],{"class":163},[94,94979,94980],{"class":96,"line":1181},[94,94981,94982],{"class":163},"#array([ 1,  2,  3, 11, 12, 13])\n",[5108,94984,94985],{},"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":14,"searchDepth":15,"depth":15,"links":94987},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94889,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":94994,"title":94995,"body":94996,"description":17,"extension":18,"meta":95088,"navigation":20,"path":95089,"seo":95090,"stem":95091,"__hash__":95092},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":94997,"toc":95086},[94998,95001,95004,95007,95010,95013,95078,95083],[10,94999,94995],{"id":95000},"_16魔法命令time",[40,95002,95003],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[40,95005,95006],{},"%:行模式",[40,95008,95009],{},"%%:单元格模式",[40,95011,95012],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[85,95014,95016],{"className":30361,"code":95015,"language":30363,"meta":14,"style":14},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[91,95017,95018,95023,95030,95035,95044,95057,95061,95069],{"__ignoreMap":14},[94,95019,95020],{"class":96,"line":97},[94,95021,95022],{"class":163},"#程序执行时间\n",[94,95024,95025,95027],{"class":96,"line":15},[94,95026,30375],{"class":100},[94,95028,95029],{"class":104}," time \n",[94,95031,95032],{"class":96,"line":1160},[94,95033,95034],{"class":163},"#获取时间\n",[94,95036,95037,95040,95042],{"class":96,"line":1175},[94,95038,95039],{"class":104},"start",[94,95041,150],{"class":100},[94,95043,32401],{"class":104},[94,95045,95046,95049,95052,95054],{"class":96,"line":1181},[94,95047,95048],{"class":104},"time.sleep(",[94,95050,95051],{"class":153},"0.4",[94,95053,534],{"class":104},[94,95055,95056],{"class":163},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[94,95058,95059],{"class":96,"line":1195},[94,95060,95034],{"class":163},[94,95062,95063,95065,95067],{"class":96,"line":1201},[94,95064,45784],{"class":104},[94,95066,150],{"class":100},[94,95068,32401],{"class":104},[94,95070,95071,95073,95075],{"class":96,"line":1292},[94,95072,45784],{"class":104},[94,95074,637],{"class":100},[94,95076,95077],{"class":104},"start\n",[40,95079,95080],{},[1443,95081],{"alt":14,"src":95082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5108,95084,95085],{},"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":14,"searchDepth":15,"depth":15,"links":95087},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":94995,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95094,"title":95095,"body":95096,"description":17,"extension":18,"meta":95131,"navigation":20,"path":95132,"seo":95133,"stem":95134,"__hash__":95135},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95097,"toc":95129},[95098,95101,95104,95107,95110,95113,95116,95119,95124],[10,95099,95095],{"id":95100},"_17魔法命令timeit",[40,95102,95103],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[40,95105,95106],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[40,95108,95109],{},"单元格模式：",[40,95111,95112],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[40,95114,95115],{},"初始化语句执行次数由轮数来决定",[40,95117,95118],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[40,95120,95121],{},[1443,95122],{"alt":14,"src":95123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[40,95125,95126],{},[1443,95127],{"alt":14,"src":95128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":14,"searchDepth":15,"depth":15,"links":95130},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95095,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95137,"title":95138,"body":95139,"description":17,"extension":18,"meta":95157,"navigation":20,"path":95158,"seo":95159,"stem":95160,"__hash__":95161},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95140,"toc":95155},[95141,95144,95147,95150],[10,95142,95138],{"id":95143},"_18魔法命令writefile和run",[40,95145,95146],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[40,95148,95149],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[40,95151,95152],{},[1443,95153],{"alt":14,"src":95154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":14,"searchDepth":15,"depth":15,"links":95156},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95138,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95163,"title":95164,"body":95165,"description":17,"extension":18,"meta":95218,"navigation":20,"path":95219,"seo":95220,"stem":95221,"__hash__":95222},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95166,"toc":95216},[95167,95170,95173,95175,95178,95181,95186,95189,95192,95195,95198,95201,95204,95207,95210,95213],[10,95168,95164],{"id":95169},"_19魔法命令memit",[40,95171,95172],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[40,95174,24582],{},[40,95176,95177],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[40,95179,95180],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[40,95182,95183],{},[1443,95184],{"alt":14,"src":95185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[40,95187,95188],{},"补充：",[40,95190,95191],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[40,95193,95194],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[40,95196,95197],{},"解决方法：",[40,95199,95200],{},"1.cmd",[40,95202,95203],{},"2.依次输入以下代码：",[40,95205,95206],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[40,95208,95209],{},"pip install --upgrade ipython",[40,95211,95212],{},"#升级 memory_profiler 和 setuptools",[40,95214,95215],{},"pip install --upgrade memory_profiler setuptools",{"title":14,"searchDepth":15,"depth":15,"links":95217},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95164,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95224,"title":95225,"body":95226,"description":17,"extension":18,"meta":96872,"navigation":20,"path":96873,"seo":96874,"stem":96875,"__hash__":96876},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95227,"toc":96842},[95228,95231,95235,95239,95300,95303,95308,95312,95317,95322,95327,95332,95335,95340,95344,95348,95381,95384,95387,95390,95442,95445,95481,95484,95526,95530,95551,95553,95590,95592,95597,95599,95604,95608,95611,95639,95643,95647,95700,95704,95796,95800,95804,95807,95812,95816,95841,95846,95850,95853,95856,95859,95862,95865,95868,95871,95883,95887,95891,95894,95926,95929,95952,95955,95981,95984,96010,96013,96047,96050,96112,96116,96119,96123,96126,96152,96155,96158,96163,96166,96235,96237,96242,96303,96306,96317,96323,96328,96332,96335,96348,96352,96367,96369,96392,96394,96420,96423,96426,96429,96477,96479,96484,96488,96492,96519,96523,96550,96553,96558,96563,96653,96657,96715,96720,96723,96726,96768,96772,96828,96833,96836,96839],[10,95229,95225],{"id":95230},"_2创建数组",[35,95232,95234],{"id":95233},"_21-array函数创建数组","2.1 array()函数创建数组",[65,95236,95238],{"id":95237},"_221-函数语句","2.2.1 函数语句",[85,95240,95242],{"className":30361,"code":95241,"language":30363,"meta":14,"style":14},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[91,95243,95244],{"__ignoreMap":14},[94,95245,95246,95249,95252,95254,95256,95258,95260,95262,95265,95267,95270,95272,95275,95277,95279,95281,95284,95286,95289,95291,95294,95296,95298],{"class":96,"line":97},[94,95247,95248],{"class":104},"numpy.array(",[94,95250,95251],{"class":153},"object",[94,95253,12417],{"class":104},[94,95255,93477],{"class":5198},[94,95257,13546],{"class":100},[94,95259,38916],{"class":153},[94,95261,12417],{"class":104},[94,95263,95264],{"class":5198},"copy",[94,95266,13546],{"class":100},[94,95268,95269],{"class":153}," True",[94,95271,12417],{"class":104},[94,95273,95274],{"class":5198},"order",[94,95276,13546],{"class":100},[94,95278,38916],{"class":153},[94,95280,12417],{"class":104},[94,95282,95283],{"class":5198},"subok",[94,95285,13546],{"class":100},[94,95287,95288],{"class":153}," False",[94,95290,12417],{"class":104},[94,95292,95293],{"class":5198},"ndmin",[94,95295,13546],{"class":100},[94,95297,4074],{"class":153},[94,95299,111],{"class":104},[40,95301,95302],{},"参数：",[40,95304,95305],{},[1443,95306],{"alt":14,"src":95307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[65,95309,95311],{"id":95310},"_222-实例","2.2.2 实例",[40,95313,95314],{},[1443,95315],{"alt":14,"src":95316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[40,95318,95319],{},[1443,95320],{"alt":14,"src":95321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[40,95323,95324],{},[1443,95325],{"alt":14,"src":95326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[40,95328,95329],{},[1443,95330],{"alt":14,"src":95331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[40,95333,95334],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[40,95336,95337],{},[1443,95338],{"alt":14,"src":95339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[35,95341,95343],{"id":95342},"_22-随机数创建数组","2.2 随机数创建数组",[65,95345,95347],{"id":95346},"_221-random语句","2.2.1 random语句",[85,95349,95351],{"className":30361,"code":95350,"language":30363,"meta":14,"style":14},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[91,95352,95353,95358,95363,95371,95376],{"__ignoreMap":14},[94,95354,95355],{"class":96,"line":97},[94,95356,95357],{"class":163},"#random.random()\n",[94,95359,95360],{"class":96,"line":15},[94,95361,95362],{"class":163},"#确定随机种子,就是每次运行结果是相同的\n",[94,95364,95365,95367,95369],{"class":96,"line":1160},[94,95366,94584],{"class":104},[94,95368,296],{"class":153},[94,95370,111],{"class":104},[94,95372,95373],{"class":96,"line":1175},[94,95374,95375],{"class":104},"np.random.random()\n",[94,95377,95378],{"class":96,"line":1181},[94,95379,95380],{"class":163},"#生成一个随机的数目\n",[40,95382,95383],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[40,95385,95386],{},"可以指定数组形状 size",[40,95388,95389],{},"①生成一维数组",[85,95391,95393],{"className":30361,"code":95392,"language":30363,"meta":14,"style":14},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[91,95394,95395,95400,95413,95418,95434],{"__ignoreMap":14},[94,95396,95397],{"class":96,"line":97},[94,95398,95399],{"class":163},"#random.random(size())\n",[94,95401,95402,95405,95407,95409,95411],{"class":96,"line":15},[94,95403,95404],{"class":104},"np.random.random(",[94,95406,31479],{"class":5198},[94,95408,150],{"class":100},[94,95410,424],{"class":153},[94,95412,111],{"class":104},[94,95414,95415],{"class":96,"line":1160},[94,95416,95417],{"class":163},"#生成一位的五个元素\n",[94,95419,95420,95422,95424,95426,95428,95430,95432],{"class":96,"line":1175},[94,95421,343],{"class":104},[94,95423,150],{"class":100},[94,95425,95404],{"class":104},[94,95427,31479],{"class":5198},[94,95429,150],{"class":100},[94,95431,398],{"class":153},[94,95433,111],{"class":104},[94,95435,95436,95439],{"class":96,"line":1181},[94,95437,95438],{"class":104},"a.shape ",[94,95440,95441],{"class":163},"#输出数组形状\n",[40,95443,95444],{},"②生成二维数组",[85,95446,95448],{"className":30361,"code":95447,"language":30363,"meta":14,"style":14},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[91,95449,95450,95454,95476],{"__ignoreMap":14},[94,95451,95452],{"class":96,"line":97},[94,95453,93278],{"class":163},[94,95455,95456,95458,95460,95462,95464,95466,95468,95470,95472,95474],{"class":96,"line":15},[94,95457,93283],{"class":104},[94,95459,150],{"class":100},[94,95461,95404],{"class":104},[94,95463,31479],{"class":5198},[94,95465,150],{"class":100},[94,95467,105],{"class":104},[94,95469,398],{"class":153},[94,95471,483],{"class":104},[94,95473,424],{"class":153},[94,95475,30480],{"class":104},[94,95477,95478],{"class":96,"line":1160},[94,95479,95480],{"class":163},"#生成四行五列的数组\n",[40,95482,95483],{},"③生成三维数组",[85,95485,95487],{"className":30361,"code":95486,"language":30363,"meta":14,"style":14},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[91,95488,95489,95494,95521],{"__ignoreMap":14},[94,95490,95491],{"class":96,"line":97},[94,95492,95493],{"class":163},"#三维数组\n",[94,95495,95496,95499,95501,95503,95505,95507,95509,95511,95513,95515,95517,95519],{"class":96,"line":15},[94,95497,95498],{"class":104},"aaa",[94,95500,150],{"class":100},[94,95502,95404],{"class":104},[94,95504,31479],{"class":5198},[94,95506,150],{"class":100},[94,95508,105],{"class":104},[94,95510,182],{"class":153},[94,95512,483],{"class":104},[94,95514,176],{"class":153},[94,95516,483],{"class":104},[94,95518,398],{"class":153},[94,95520,30480],{"class":104},[94,95522,95523],{"class":96,"line":1160},[94,95524,95525],{"class":104},"aaa.shape\n",[65,95527,95529],{"id":95528},"_222-randint语句","2.2.2 randint语句",[85,95531,95533],{"className":30361,"code":95532,"language":30363,"meta":14,"style":14},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[91,95534,95535,95540],{"__ignoreMap":14},[94,95536,95537],{"class":96,"line":97},[94,95538,95539],{"class":163},"#生成随机的整数 random.randint(low,high,size)\n",[94,95541,95542,95544,95546,95548],{"class":96,"line":15},[94,95543,93091],{"class":104},[94,95545,424],{"class":153},[94,95547,13696],{"class":104},[94,95549,95550],{"class":163},"#0~5中的随机一个数\n",[40,95552,95389],{},[85,95554,95556],{"className":30361,"code":95555,"language":30363,"meta":14,"style":14},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[91,95557,95558,95563,95585],{"__ignoreMap":14},[94,95559,95560],{"class":96,"line":97},[94,95561,95562],{"class":163},"#一维\n",[94,95564,95565,95567,95569,95571,95573,95575,95577,95579,95581,95583],{"class":96,"line":15},[94,95566,93091],{"class":104},[94,95568,322],{"class":153},[94,95570,483],{"class":104},[94,95572,577],{"class":153},[94,95574,483],{"class":104},[94,95576,31479],{"class":5198},[94,95578,150],{"class":100},[94,95580,105],{"class":104},[94,95582,551],{"class":153},[94,95584,30480],{"class":104},[94,95586,95587],{"class":96,"line":1160},[94,95588,95589],{"class":163},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[40,95591,95444],{},[40,95593,95594],{},[1443,95595],{"alt":14,"src":95596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[40,95598,95483],{},[40,95600,95601],{},[1443,95602],{"alt":14,"src":95603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[65,95605,95607],{"id":95606},"_222-rand语句","2.2.2 rand语句",[40,95609,95610],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[85,95612,95614],{"className":30361,"code":95613,"language":30363,"meta":14,"style":14},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[91,95615,95616,95629,95634],{"__ignoreMap":14},[94,95617,95618,95621,95623,95625,95627],{"class":96,"line":97},[94,95619,95620],{"class":104},"np.random.rand(",[94,95622,416],{"class":153},[94,95624,483],{"class":104},[94,95626,551],{"class":153},[94,95628,111],{"class":104},[94,95630,95631],{"class":96,"line":15},[94,95632,95633],{"class":163},"#第一个参数100：行数，表示有100个样本\n",[94,95635,95636],{"class":96,"line":1160},[94,95637,95638],{"class":163},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[35,95640,95642],{"id":95641},"_23-arange创建数组","2.3 arange()创建数组",[65,95644,95646],{"id":95645},"_231-函数语句","2.3.1 函数语句",[85,95648,95650],{"className":30361,"code":95649,"language":30363,"meta":14,"style":14},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[91,95651,95652,95666,95671,95676,95681,95686,95691,95696],{"__ignoreMap":14},[94,95653,95654,95657,95659,95661,95664],{"class":96,"line":97},[94,95655,95656],{"class":104},"numpy.arange([start,] stop[, step], ",[94,95658,93477],{"class":5198},[94,95660,150],{"class":100},[94,95662,95663],{"class":153},"None",[94,95665,111],{"class":104},[94,95667,95668],{"class":96,"line":15},[94,95669,95670],{"class":163},"#参数\n",[94,95672,95673],{"class":96,"line":1160},[94,95674,95675],{"class":209},"\"\"\"\n",[94,95677,95678],{"class":96,"line":1175},[94,95679,95680],{"class":209},"start:起始值，可选，默认从 0 开始。\n",[94,95682,95683],{"class":96,"line":1181},[94,95684,95685],{"class":209},"stop:结束值（不包含该值）。\n",[94,95687,95688],{"class":96,"line":1195},[94,95689,95690],{"class":209},"step:步长，可选，默认是 1。可以为浮点数。\n",[94,95692,95693],{"class":96,"line":1201},[94,95694,95695],{"class":209},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[94,95697,95698],{"class":96,"line":1292},[94,95699,95675],{"class":209},[65,95701,95703],{"id":95702},"_232-实例","2.3.2 实例",[85,95705,95707],{"className":30361,"code":95706,"language":30363,"meta":14,"style":14},"#创建一维数组\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",[91,95708,95709,95713,95737,95742,95747,95751,95774,95778,95782,95787,95792],{"__ignoreMap":14},[94,95710,95711],{"class":96,"line":97},[94,95712,93082],{"class":163},[94,95714,95715,95717,95719,95721,95723,95725,95727,95729,95731,95733,95735],{"class":96,"line":15},[94,95716,92979],{"class":104},[94,95718,322],{"class":153},[94,95720,483],{"class":104},[94,95722,830],{"class":153},[94,95724,483],{"class":104},[94,95726,322],{"class":153},[94,95728,483],{"class":104},[94,95730,93477],{"class":5198},[94,95732,150],{"class":100},[94,95734,108],{"class":153},[94,95736,111],{"class":104},[94,95738,95739],{"class":96,"line":1160},[94,95740,95741],{"class":163},"#输出结果：\n",[94,95743,95744],{"class":96,"line":1175},[94,95745,95746],{"class":163},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[94,95748,95749],{"class":96,"line":1181},[94,95750,93924],{"class":163},[94,95752,95753,95756,95758,95760,95762,95765,95767,95769,95771],{"class":96,"line":1195},[94,95754,95755],{"class":104},"np.array([np.arange(",[94,95757,322],{"class":153},[94,95759,483],{"class":104},[94,95761,398],{"class":153},[94,95763,95764],{"class":104},"),np.arange(",[94,95766,398],{"class":153},[94,95768,483],{"class":104},[94,95770,474],{"class":153},[94,95772,95773],{"class":104},")])\n",[94,95775,95776],{"class":96,"line":1201},[94,95777,93541],{"class":163},[94,95779,95780],{"class":96,"line":1292},[94,95781,95675],{"class":209},[94,95783,95784],{"class":96,"line":1298},[94,95785,95786],{"class":209},"array([[1, 2, 3],\n",[94,95788,95789],{"class":96,"line":1310},[94,95790,95791],{"class":209},"       [4, 5, 6]])\n",[94,95793,95794],{"class":96,"line":1593},[94,95795,95675],{"class":209},[35,95797,95799],{"id":95798},"_24-生态分布","2.4 生态分布",[65,95801,95803],{"id":95802},"_241-标准正态分布","2.4.1 标准正态分布",[40,95805,95806],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[40,95808,95809],{},[1443,95810],{"alt":14,"src":95811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[65,95813,95815],{"id":95814},"_242-常规正态分布","2.4.2 常规正态分布",[85,95817,95819],{"className":30361,"code":95818,"language":30363,"meta":14,"style":14},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[91,95820,95821,95826,95831,95836],{"__ignoreMap":14},[94,95822,95823],{"class":96,"line":97},[94,95824,95825],{"class":104},"random.normal(loc,scale,size)也可以生成正态分布\n",[94,95827,95828],{"class":96,"line":15},[94,95829,95830],{"class":163},"#loc:期望\n",[94,95832,95833],{"class":96,"line":1160},[94,95834,95835],{"class":163},"#scale:方差\n",[94,95837,95838],{"class":96,"line":1175},[94,95839,95840],{"class":163},"#size:用于确定是几维的数列\n",[40,95842,95843],{},[1443,95844],{"alt":14,"src":95845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[35,95847,95849],{"id":95848},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[40,95851,95852],{},"ndim:秩，维度个数",[40,95854,95855],{},"size:数组元素的个数",[40,95857,95858],{},"shape:数组的形状",[40,95860,95861],{},"dtype:数组元素的类型",[40,95863,95864],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[40,95866,95867],{},"他们都是属性，通过数组.属性的形式来确定",[40,95869,95870],{},"如果需要输出多个可以通过以下方式：",[85,95872,95874],{"className":30361,"code":95873,"language":30363,"meta":14,"style":14},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[91,95875,95876],{"__ignoreMap":14},[94,95877,95878,95880],{"class":96,"line":97},[94,95879,30398],{"class":153},[94,95881,95882],{"class":104},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[35,95884,95886],{"id":95885},"_26-其他方式创建数组","2.6 其他方式创建数组",[65,95888,95890],{"id":95889},"_261-zeros创建数组","2.6.1 zeros()创建数组",[40,95892,95893],{},"①创建一维数组",[85,95895,95897],{"className":30361,"code":95896,"language":30363,"meta":14,"style":14},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[91,95898,95899,95908,95912,95917,95922],{"__ignoreMap":14},[94,95900,95901,95904,95906],{"class":96,"line":97},[94,95902,95903],{"class":104},"np.zeros(",[94,95905,551],{"class":153},[94,95907,111],{"class":104},[94,95909,95910],{"class":96,"line":15},[94,95911,95675],{"class":209},[94,95913,95914],{"class":96,"line":1160},[94,95915,95916],{"class":209},"输出结果：\n",[94,95918,95919],{"class":96,"line":1175},[94,95920,95921],{"class":209},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[94,95923,95924],{"class":96,"line":1181},[94,95925,95675],{"class":209},[40,95927,95928],{},"上方代码等价于：",[85,95930,95932],{"className":30361,"code":95931,"language":30363,"meta":14,"style":14},"np.zeros(shape=(10))#创建10个元素的0数组\n",[91,95933,95934],{"__ignoreMap":14},[94,95935,95936,95938,95941,95943,95945,95947,95949],{"class":96,"line":97},[94,95937,95903],{"class":104},[94,95939,95940],{"class":5198},"shape",[94,95942,150],{"class":100},[94,95944,105],{"class":104},[94,95946,551],{"class":153},[94,95948,82748],{"class":104},[94,95950,95951],{"class":163},"#创建10个元素的0数组\n",[40,95953,95954],{},"也可以指定类型",[85,95956,95958],{"className":30361,"code":95957,"language":30363,"meta":14,"style":14},"#指定类型\nnp.zeros(5,dtype=int)\n",[91,95959,95960,95965],{"__ignoreMap":14},[94,95961,95962],{"class":96,"line":97},[94,95963,95964],{"class":163},"#指定类型\n",[94,95966,95967,95969,95971,95973,95975,95977,95979],{"class":96,"line":15},[94,95968,95903],{"class":104},[94,95970,424],{"class":153},[94,95972,483],{"class":104},[94,95974,93477],{"class":5198},[94,95976,150],{"class":100},[94,95978,108],{"class":153},[94,95980,111],{"class":104},[40,95982,95983],{},"②创建二维数组",[85,95985,95987],{"className":30361,"code":95986,"language":30363,"meta":14,"style":14},"np.zeros((3,4),dtype=int)\n",[91,95988,95989],{"__ignoreMap":14},[94,95990,95991,95994,95996,95998,96000,96002,96004,96006,96008],{"class":96,"line":97},[94,95992,95993],{"class":104},"np.zeros((",[94,95995,176],{"class":153},[94,95997,483],{"class":104},[94,95999,398],{"class":153},[94,96001,42239],{"class":104},[94,96003,93477],{"class":5198},[94,96005,150],{"class":100},[94,96007,108],{"class":153},[94,96009,111],{"class":104},[40,96011,96012],{},"③创建三维数组",[85,96014,96016],{"className":30361,"code":96015,"language":30363,"meta":14,"style":14},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[91,96017,96018,96023],{"__ignoreMap":14},[94,96019,96020],{"class":96,"line":97},[94,96021,96022],{"class":163},"#创建三维数组\n",[94,96024,96025,96027,96029,96031,96033,96035,96037,96039,96041,96043,96045],{"class":96,"line":15},[94,96026,95993],{"class":104},[94,96028,176],{"class":153},[94,96030,483],{"class":104},[94,96032,398],{"class":153},[94,96034,483],{"class":104},[94,96036,424],{"class":153},[94,96038,42239],{"class":104},[94,96040,93477],{"class":5198},[94,96042,150],{"class":100},[94,96044,108],{"class":153},[94,96046,111],{"class":104},[40,96048,96049],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[85,96051,96053],{"className":30361,"code":96052,"language":30363,"meta":14,"style":14},"#使用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",[91,96054,96055,96060,96075,96080,96085,96107],{"__ignoreMap":14},[94,96056,96057],{"class":96,"line":97},[94,96058,96059],{"class":163},"#使用zeros_like将创建的一维数组变成全0的数组\n",[94,96061,96062,96064,96066,96068,96070,96072],{"class":96,"line":15},[94,96063,343],{"class":104},[94,96065,150],{"class":100},[94,96067,92979],{"class":104},[94,96069,398],{"class":153},[94,96071,534],{"class":104},[94,96073,96074],{"class":163},"#这个得到的结果：一维数组0，1，2，3\n",[94,96076,96077],{"class":96,"line":1160},[94,96078,96079],{"class":104},"np.zeros_like(a)\n",[94,96081,96082],{"class":96,"line":1175},[94,96083,96084],{"class":163},"#使用zeros_like将创建的二维数组变成全0的数组\n",[94,96086,96087,96089,96091,96093,96095,96097,96099,96101,96103,96105],{"class":96,"line":1181},[94,96088,93283],{"class":104},[94,96090,150],{"class":100},[94,96092,95404],{"class":104},[94,96094,31479],{"class":5198},[94,96096,150],{"class":100},[94,96098,105],{"class":104},[94,96100,398],{"class":153},[94,96102,483],{"class":104},[94,96104,424],{"class":153},[94,96106,30480],{"class":104},[94,96108,96109],{"class":96,"line":1195},[94,96110,96111],{"class":104},"np.zeros_like(aa)\n",[65,96113,96115],{"id":96114},"_262-ones创建数组","2.6.2 ones()创建数组",[40,96117,96118],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[65,96120,96122],{"id":96121},"_263-empty创建数组","2.6.3 empty()创建数组",[40,96124,96125],{},"①empty()用法",[85,96127,96129],{"className":30361,"code":96128,"language":30363,"meta":14,"style":14},"numpy.empty(shape,dtype=float,order='c')\n",[91,96130,96131],{"__ignoreMap":14},[94,96132,96133,96136,96138,96140,96142,96144,96146,96148,96150],{"class":96,"line":97},[94,96134,96135],{"class":104},"numpy.empty(shape,",[94,96137,93477],{"class":5198},[94,96139,150],{"class":100},[94,96141,144],{"class":153},[94,96143,483],{"class":104},[94,96145,95274],{"class":5198},[94,96147,150],{"class":100},[94,96149,76005],{"class":209},[94,96151,111],{"class":104},[40,96153,96154],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[40,96156,96157],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[40,96159,96160],{},[1443,96161],{"alt":14,"src":96162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[40,96164,96165],{},"②empty()用法",[85,96167,96169],{"className":30361,"code":96168,"language":30363,"meta":14,"style":14},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[91,96170,96171,96192,96204,96225,96230],{"__ignoreMap":14},[94,96172,96173,96175,96177,96180,96182,96184,96186,96188,96190],{"class":96,"line":97},[94,96174,950],{"class":104},[94,96176,150],{"class":100},[94,96178,96179],{"class":104},"np.empty(",[94,96181,551],{"class":153},[94,96183,483],{"class":104},[94,96185,93477],{"class":5198},[94,96187,150],{"class":100},[94,96189,108],{"class":153},[94,96191,111],{"class":104},[94,96193,96194,96196,96198,96200,96202],{"class":96,"line":15},[94,96195,925],{"class":104},[94,96197,150],{"class":100},[94,96199,92979],{"class":104},[94,96201,424],{"class":153},[94,96203,111],{"class":104},[94,96205,96206,96209,96211,96214,96216,96218,96221,96223],{"class":96,"line":1160},[94,96207,96208],{"class":104},"np.add(",[94,96210,182],{"class":153},[94,96212,96213],{"class":104},",x,",[94,96215,93031],{"class":5198},[94,96217,150],{"class":100},[94,96219,96220],{"class":104},"y[:",[94,96222,424],{"class":153},[94,96224,4638],{"class":104},[94,96226,96227],{"class":96,"line":1175},[94,96228,96229],{"class":163},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[94,96231,96232],{"class":96,"line":1181},[94,96233,96234],{"class":104},"y\n",[40,96236,11496],{},[40,96238,96239],{},[1443,96240],{"alt":14,"src":96241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[85,96243,96245],{"className":30361,"code":96244,"language":30363,"meta":14,"style":14},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[91,96246,96247,96263,96283,96298],{"__ignoreMap":14},[94,96248,96249,96251,96253,96255,96257,96259,96261],{"class":96,"line":97},[94,96250,925],{"class":104},[94,96252,150],{"class":100},[94,96254,92979],{"class":104},[94,96256,322],{"class":153},[94,96258,483],{"class":104},[94,96260,449],{"class":153},[94,96262,111],{"class":104},[94,96264,96265,96267,96269,96271,96273,96275,96277,96279,96281],{"class":96,"line":15},[94,96266,950],{"class":104},[94,96268,150],{"class":100},[94,96270,96179],{"class":104},[94,96272,424],{"class":153},[94,96274,483],{"class":104},[94,96276,93477],{"class":5198},[94,96278,150],{"class":100},[94,96280,108],{"class":153},[94,96282,111],{"class":104},[94,96284,96285,96288,96290,96292,96294,96296],{"class":96,"line":1160},[94,96286,96287],{"class":104},"np.add(x,",[94,96289,182],{"class":153},[94,96291,483],{"class":104},[94,96293,93031],{"class":5198},[94,96295,150],{"class":100},[94,96297,93426],{"class":104},[94,96299,96300],{"class":96,"line":1175},[94,96301,96302],{"class":163},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[40,96304,96305],{},"③empty_like()",[40,96307,96308],{},[254,96309,96310,96311,96316],{},"创建一个",[254,96312,96313],{},[254,96314,96315],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[40,96318,96319,96322],{},[91,96320,96321],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[40,96324,96325],{},[1443,96326],{"alt":14,"src":96327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[65,96329,96331],{"id":96330},"_264-用法","2.6.4 ？？用法",[40,96333,96334],{},"当想查看一个函数的参数时，可以通过？？来实现",[85,96336,96338],{"className":30361,"code":96337,"language":30363,"meta":14,"style":14},"np.full??\n",[91,96339,96340],{"__ignoreMap":14},[94,96341,96342,96345],{"class":96,"line":97},[94,96343,96344],{"class":104},"np.full",[94,96346,96347],{"class":77380},"??\n",[65,96349,96351],{"id":96350},"_265-full创建数组","2.6.5 full()创建数组",[85,96353,96355],{"className":30361,"code":96354,"language":30363,"meta":14,"style":14},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[91,96356,96357,96362],{"__ignoreMap":14},[94,96358,96359],{"class":96,"line":97},[94,96360,96361],{"class":104},"full(shape,fill_value)\n",[94,96363,96364],{"class":96,"line":15},[94,96365,96366],{"class":104},"创建全为某个指定值的数组\n",[40,96368,94507],{},[85,96370,96372],{"className":30361,"code":96371,"language":30363,"meta":14,"style":14},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[91,96373,96374,96379],{"__ignoreMap":14},[94,96375,96376],{"class":96,"line":97},[94,96377,96378],{"class":163},"#创建一个一维数组,以20进行填充\n",[94,96380,96381,96384,96386,96388,96390],{"class":96,"line":15},[94,96382,96383],{"class":104},"np.full(",[94,96385,551],{"class":153},[94,96387,483],{"class":104},[94,96389,805],{"class":153},[94,96391,111],{"class":104},[40,96393,93268],{},[85,96395,96397],{"className":30361,"code":96396,"language":30363,"meta":14,"style":14},"#创建二维数组\nnp.full((3,5),11)\n",[91,96398,96399,96403],{"__ignoreMap":14},[94,96400,96401],{"class":96,"line":97},[94,96402,93924],{"class":163},[94,96404,96405,96408,96410,96412,96414,96416,96418],{"class":96,"line":15},[94,96406,96407],{"class":104},"np.full((",[94,96409,176],{"class":153},[94,96411,483],{"class":104},[94,96413,424],{"class":153},[94,96415,42239],{"class":104},[94,96417,577],{"class":153},[94,96419,111],{"class":104},[40,96421,96422],{},"③full_like用法",[40,96424,96425],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[40,96427,96428],{},"这里是指定填充而已",[85,96430,96432],{"className":30361,"code":96431,"language":30363,"meta":14,"style":14},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[91,96433,96434,96439,96463,96468],{"__ignoreMap":14},[94,96435,96436],{"class":96,"line":97},[94,96437,96438],{"class":163},"#创建一个指定形状数组\n",[94,96440,96441,96443,96445,96447,96449,96451,96453,96455,96457,96459,96461],{"class":96,"line":15},[94,96442,343],{"class":104},[94,96444,150],{"class":100},[94,96446,92979],{"class":104},[94,96448,322],{"class":153},[94,96450,483],{"class":104},[94,96452,430],{"class":153},[94,96454,92984],{"class":104},[94,96456,398],{"class":153},[94,96458,483],{"class":104},[94,96460,525],{"class":153},[94,96462,111],{"class":104},[94,96464,96465],{"class":96,"line":1160},[94,96466,96467],{"class":163},"#进行指定填充\n",[94,96469,96470,96473,96475],{"class":96,"line":1175},[94,96471,96472],{"class":104},"np.full_like(a,",[94,96474,551],{"class":153},[94,96476,111],{"class":104},[40,96478,11496],{},[40,96480,96481],{},[1443,96482],{"alt":14,"src":96483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[65,96485,96487],{"id":96486},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[21980,96489,96491],{"id":96490},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[85,96493,96495],{"className":30361,"code":96494,"language":30363,"meta":14,"style":14},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[91,96496,96497,96514],{"__ignoreMap":14},[94,96498,96499,96502,96504,96506,96508,96510,96512],{"class":96,"line":97},[94,96500,96501],{"class":104},"np.eye(",[94,96503,398],{"class":153},[94,96505,483],{"class":104},[94,96507,93477],{"class":5198},[94,96509,150],{"class":100},[94,96511,108],{"class":153},[94,96513,111],{"class":104},[94,96515,96516],{"class":96,"line":15},[94,96517,96518],{"class":163},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[21980,96520,96522],{"id":96521},"_2662-法2identity","2.6.6.2 法2：identity()",[85,96524,96526],{"className":30361,"code":96525,"language":30363,"meta":14,"style":14},"#identity()\nnp.identity(5,dtype=int)\n",[91,96527,96528,96533],{"__ignoreMap":14},[94,96529,96530],{"class":96,"line":97},[94,96531,96532],{"class":163},"#identity()\n",[94,96534,96535,96538,96540,96542,96544,96546,96548],{"class":96,"line":15},[94,96536,96537],{"class":104},"np.identity(",[94,96539,424],{"class":153},[94,96541,483],{"class":104},[94,96543,93477],{"class":5198},[94,96545,150],{"class":100},[94,96547,108],{"class":153},[94,96549,111],{"class":104},[40,96551,96552],{},"两个函数是有区别的",[40,96554,96555],{},[1443,96556],{"alt":14,"src":96557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[40,96559,96560],{},[1443,96561],{"alt":14,"src":96562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[85,96564,96566],{"className":30361,"code":96565,"language":30363,"meta":14,"style":14},"# 创建一个 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",[91,96567,96568,96573,96585,96590,96595,96600,96605,96609,96614,96634,96638,96643,96648],{"__ignoreMap":14},[94,96569,96570],{"class":96,"line":97},[94,96571,96572],{"class":163},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[94,96574,96575,96577,96579,96581,96583],{"class":96,"line":15},[94,96576,96501],{"class":104},[94,96578,176],{"class":153},[94,96580,12417],{"class":104},[94,96582,398],{"class":153},[94,96584,111],{"class":104},[94,96586,96587],{"class":96,"line":1160},[94,96588,96589],{"class":163},"# 输出:\n",[94,96591,96592],{"class":96,"line":1175},[94,96593,96594],{"class":163},"# [[1. 0. 0. 0.]\n",[94,96596,96597],{"class":96,"line":1181},[94,96598,96599],{"class":163},"#  [0. 1. 0. 0.]\n",[94,96601,96602],{"class":96,"line":1195},[94,96603,96604],{"class":163},"#  [0. 0. 1. 0.]]\n",[94,96606,96607],{"class":96,"line":1201},[94,96608,2381],{"emptyLinePlaceholder":20},[94,96610,96611],{"class":96,"line":1292},[94,96612,96613],{"class":163},"# 对角线向上偏移1\n",[94,96615,96616,96618,96620,96622,96624,96626,96628,96630,96632],{"class":96,"line":1298},[94,96617,96501],{"class":104},[94,96619,176],{"class":153},[94,96621,12417],{"class":104},[94,96623,398],{"class":153},[94,96625,12417],{"class":104},[94,96627,598],{"class":5198},[94,96629,150],{"class":100},[94,96631,322],{"class":153},[94,96633,111],{"class":104},[94,96635,96636],{"class":96,"line":1310},[94,96637,96589],{"class":163},[94,96639,96640],{"class":96,"line":1593},[94,96641,96642],{"class":163},"# [[0. 1. 0. 0.]\n",[94,96644,96645],{"class":96,"line":1598},[94,96646,96647],{"class":163},"#  [0. 0. 1. 0.]\n",[94,96649,96650],{"class":96,"line":1604},[94,96651,96652],{"class":163},"#  [0. 0. 0. 1.]]\n",[65,96654,96656],{"id":96655},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[85,96658,96660],{"className":30361,"code":96659,"language":30363,"meta":14,"style":14},"#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",[91,96661,96662,96667,96671,96676,96681,96686,96691,96696,96701,96706,96711],{"__ignoreMap":14},[94,96663,96664],{"class":96,"line":97},[94,96665,96666],{"class":163},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[94,96668,96669],{"class":96,"line":15},[94,96670,95675],{"class":209},[94,96672,96673],{"class":96,"line":1160},[94,96674,96675],{"class":209},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[94,96677,96678],{"class":96,"line":1175},[94,96679,96680],{"class":209},"参数介绍：\n",[94,96682,96683],{"class":96,"line":1181},[94,96684,96685],{"class":209},"start：序列的起始值\n",[94,96687,96688],{"class":96,"line":1195},[94,96689,96690],{"class":209},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[94,96692,96693],{"class":96,"line":1201},[94,96694,96695],{"class":209},"num：要生长的等步长的样本数量，默认为50\n",[94,96697,96698],{"class":96,"line":1292},[94,96699,96700],{"class":209},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[94,96702,96703],{"class":96,"line":1298},[94,96704,96705],{"class":209},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[94,96707,96708],{"class":96,"line":1310},[94,96709,96710],{"class":209},"dtype：ndarry的数据类型\n",[94,96712,96713],{"class":96,"line":1593},[94,96714,95675],{"class":209},[40,96716,96717],{},[1443,96718],{"alt":14,"src":96719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[40,96721,96722],{},"这里num=是可以省略的",[40,96724,96725],{},"也就是下方两行代码结果是一模一样的",[85,96727,96729],{"className":30361,"code":96728,"language":30363,"meta":14,"style":14},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[91,96730,96731,96748],{"__ignoreMap":14},[94,96732,96733,96736,96738,96740,96742,96744,96746],{"class":96,"line":97},[94,96734,96735],{"class":104},"np.linspace(",[94,96737,322],{"class":153},[94,96739,483],{"class":104},[94,96741,424],{"class":153},[94,96743,483],{"class":104},[94,96745,424],{"class":153},[94,96747,111],{"class":104},[94,96749,96750,96752,96754,96756,96758,96760,96762,96764,96766],{"class":96,"line":15},[94,96751,96735],{"class":104},[94,96753,322],{"class":153},[94,96755,483],{"class":104},[94,96757,424],{"class":153},[94,96759,483],{"class":104},[94,96761,1646],{"class":5198},[94,96763,150],{"class":100},[94,96765,424],{"class":153},[94,96767,111],{"class":104},[65,96769,96771],{"id":96770},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[85,96773,96775],{"className":30361,"code":96774,"language":30363,"meta":14,"style":14},"#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",[91,96776,96777,96782,96786,96791,96796,96801,96806,96810,96815,96820,96824],{"__ignoreMap":14},[94,96778,96779],{"class":96,"line":97},[94,96780,96781],{"class":163},"#logspace函数用于创建一个等比数列，格式如下：\n",[94,96783,96784],{"class":96,"line":15},[94,96785,95675],{"class":209},[94,96787,96788],{"class":96,"line":1160},[94,96789,96790],{"class":209},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[94,96792,96793],{"class":96,"line":1175},[94,96794,96795],{"class":209},"参数为：\n",[94,96797,96798],{"class":96,"line":1181},[94,96799,96800],{"class":209},"start:序列的起始位置为：base**start\n",[94,96802,96803],{"class":96,"line":1195},[94,96804,96805],{"class":209},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[94,96807,96808],{"class":96,"line":1201},[94,96809,96695],{"class":209},[94,96811,96812],{"class":96,"line":1292},[94,96813,96814],{"class":209},"endpoint：是否包含 stop 这个值，默认是 True\n",[94,96816,96817],{"class":96,"line":1298},[94,96818,96819],{"class":209},"base：对数的底数，默认是 10（常见对数）\n",[94,96821,96822],{"class":96,"line":1310},[94,96823,96710],{"class":209},[94,96825,96826],{"class":96,"line":1593},[94,96827,95675],{"class":209},[40,96829,96830],{},[1443,96831],{"alt":14,"src":96832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[40,96834,96835],{},"logspace()函数中的num参数也是可以不写num=的",[40,96837,96838],{},"endpoint是不可以省略的",[5108,96840,96841],{},"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":14,"searchDepth":15,"depth":15,"links":96843},[96844,96848,96853,96857,96861,96862],{"id":95233,"depth":15,"text":95234,"children":96845},[96846,96847],{"id":95237,"depth":1160,"text":95238},{"id":95310,"depth":1160,"text":95311},{"id":95342,"depth":15,"text":95343,"children":96849},[96850,96851,96852],{"id":95346,"depth":1160,"text":95347},{"id":95528,"depth":1160,"text":95529},{"id":95606,"depth":1160,"text":95607},{"id":95641,"depth":15,"text":95642,"children":96854},[96855,96856],{"id":95645,"depth":1160,"text":95646},{"id":95702,"depth":1160,"text":95703},{"id":95798,"depth":15,"text":95799,"children":96858},[96859,96860],{"id":95802,"depth":1160,"text":95803},{"id":95814,"depth":1160,"text":95815},{"id":95848,"depth":15,"text":95849},{"id":95885,"depth":15,"text":95886,"children":96863},[96864,96865,96866,96867,96868,96869,96870,96871],{"id":95889,"depth":1160,"text":95890},{"id":96114,"depth":1160,"text":96115},{"id":96121,"depth":1160,"text":96122},{"id":96330,"depth":1160,"text":96331},{"id":96350,"depth":1160,"text":96351},{"id":96486,"depth":1160,"text":96487},{"id":96655,"depth":1160,"text":96656},{"id":96770,"depth":1160,"text":96771},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95225,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96878,"title":96879,"body":96880,"description":17,"extension":18,"meta":96973,"navigation":20,"path":96974,"seo":96975,"stem":96976,"__hash__":96977},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96881,"toc":96971},[96882,96885,96888,96891,96894,96897,96900,96903,96906,96909,96912,96915,96917,96920,96923,96928,96931,96934,96968],[10,96883,96879],{"id":96884},"_20魔法命令mprun",[40,96886,96887],{},"逐行分析数据内存的使用情况",[40,96889,96890],{},"语法格式：",[40,96892,96893],{},"%mprun -f 模块名.函数名 模块名.函数名()",[40,96895,96896],{},"分析结果列如下：",[40,96898,96899],{},"Line行号",[40,96901,96902],{},"Mem usage内存使用大小",[40,96904,96905],{},"increment内存增量",[40,96907,96908],{},"Line content代码内容",[40,96910,96911],{},"补充说明：",[40,96913,96914],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[40,96916,95180],{},[40,96918,96919],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[40,96921,96922],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[40,96924,96925],{},[1443,96926],{"alt":14,"src":96927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[40,96929,96930],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[40,96932,96933],{},"这时候需要重新加载模块",[85,96935,96937],{"className":30361,"code":96936,"language":30363,"meta":14,"style":14},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[91,96938,96939,96944,96951,96956],{"__ignoreMap":14},[94,96940,96941],{"class":96,"line":97},[94,96942,96943],{"class":163},"#重新加载模块\n",[94,96945,96946,96948],{"class":96,"line":15},[94,96947,30375],{"class":100},[94,96949,96950],{"class":104}," importlib\n",[94,96952,96953],{"class":96,"line":1160},[94,96954,96955],{"class":104},"importlib.reload(mprun_test)\n",[94,96957,96958,96960,96963,96965],{"class":96,"line":1175},[94,96959,433],{"class":100},[94,96961,96962],{"class":104},"mprun ",[94,96964,637],{"class":100},[94,96966,96967],{"class":104},"f mprun_test.fun_test mprun_test.fun_test()\n",[5108,96969,96970],{},"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":14,"searchDepth":15,"depth":15,"links":96972},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96879,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96979,"title":96980,"body":96981,"description":17,"extension":18,"meta":96998,"navigation":20,"path":96999,"seo":97000,"stem":97001,"__hash__":97002},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":96982,"toc":96996},[96983,96986,96991],[10,96984,96980],{"id":96985},"_3一维数组的索引和切片",[40,96987,96988],{},[1443,96989],{"alt":14,"src":96990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[40,96992,96993],{},[1443,96994],{"alt":14,"src":96995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":14,"searchDepth":15,"depth":15,"links":96997},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":96980,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97004,"title":97005,"body":97006,"description":17,"extension":18,"meta":97489,"navigation":20,"path":97490,"seo":97491,"stem":97492,"__hash__":97493},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97007,"toc":97487},[97008,97011,97014,97019,97052,97055,97093,97096,97130,97133,97238,97241,97278,97281,97382,97385,97436,97439,97481,97484],[10,97009,97005],{"id":97010},"_4二维数组的索引与切片",[40,97012,97013],{},"①获取指定单个元素",[40,97015,97016],{},[1443,97017],{"alt":14,"src":97018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[85,97020,97022],{"className":30361,"code":97021,"language":30363,"meta":14,"style":14},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[91,97023,97024,97029,97034,97039],{"__ignoreMap":14},[94,97025,97026],{"class":96,"line":97},[94,97027,97028],{"class":163},"#获取元素9\n",[94,97030,97031],{"class":96,"line":15},[94,97032,97033],{"class":163},"#先获取所在行，再获取所在列\n",[94,97035,97036],{"class":96,"line":1160},[94,97037,97038],{"class":163},"#数组[行索引号，列索引号]\n",[94,97040,97041,97044,97046,97048,97050],{"class":96,"line":1175},[94,97042,97043],{"class":104},"a[",[94,97045,322],{"class":153},[94,97047,483],{"class":104},[94,97049,182],{"class":153},[94,97051,33229],{"class":104},[40,97053,97054],{},"②获取整行元素",[85,97056,97058],{"className":30361,"code":97057,"language":30363,"meta":14,"style":14},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[91,97059,97060,97065,97070,97078,97083],{"__ignoreMap":14},[94,97061,97062],{"class":96,"line":97},[94,97063,97064],{"class":163},"#获取整行 数组[行索引号]\n",[94,97066,97067],{"class":96,"line":15},[94,97068,97069],{"class":163},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[94,97071,97072,97074,97076],{"class":96,"line":1160},[94,97073,97043],{"class":104},[94,97075,182],{"class":153},[94,97077,33229],{"class":104},[94,97079,97080],{"class":96,"line":1175},[94,97081,97082],{"class":163},"#也可以负索引获取一行\n",[94,97084,97085,97087,97089,97091],{"class":96,"line":1181},[94,97086,97043],{"class":104},[94,97088,637],{"class":100},[94,97090,322],{"class":153},[94,97092,33229],{"class":104},[40,97094,97095],{},"③获取整列元素",[85,97097,97099],{"className":30361,"code":97098,"language":30363,"meta":14,"style":14},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[91,97100,97101,97106,97115,97120],{"__ignoreMap":14},[94,97102,97103],{"class":96,"line":97},[94,97104,97105],{"class":163},"#获取整列 数组名[:,列索引]\n",[94,97107,97108,97111,97113],{"class":96,"line":15},[94,97109,97110],{"class":104},"a[:,",[94,97112,182],{"class":153},[94,97114,33229],{"class":104},[94,97116,97117],{"class":96,"line":1160},[94,97118,97119],{"class":163},"#也可以负索引获取一列\n",[94,97121,97122,97124,97126,97128],{"class":96,"line":1175},[94,97123,97110],{"class":104},[94,97125,637],{"class":100},[94,97127,322],{"class":153},[94,97129,33229],{"class":104},[40,97131,97132],{},"④部分行部分列的元素",[85,97134,97136],{"className":30361,"code":97135,"language":30363,"meta":14,"style":14},"#部分行部分列 数组名[行切片，列切片]\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",[91,97137,97138,97143,97153,97157,97161,97166,97171,97175,97187,97191,97195,97200,97205,97210,97215,97219,97224],{"__ignoreMap":14},[94,97139,97140],{"class":96,"line":97},[94,97141,97142],{"class":163},"#部分行部分列 数组名[行切片，列切片]\n",[94,97144,97145,97148,97150],{"class":96,"line":15},[94,97146,97147],{"class":104},"a[:",[94,97149,182],{"class":153},[94,97151,97152],{"class":104},",:]\n",[94,97154,97155],{"class":96,"line":1160},[94,97156,93541],{"class":163},[94,97158,97159],{"class":96,"line":1175},[94,97160,93905],{"class":209},[94,97162,97163],{"class":96,"line":1181},[94,97164,97165],{"class":209},"array([[ 1,  2,  3,  4,  5,  6],\n",[94,97167,97168],{"class":96,"line":1195},[94,97169,97170],{"class":209},"       [ 7,  8,  9, 10, 11, 12]])\n",[94,97172,97173],{"class":96,"line":1201},[94,97174,93905],{"class":209},[94,97176,97177,97179,97181,97183,97185],{"class":96,"line":1292},[94,97178,97110],{"class":104},[94,97180,322],{"class":153},[94,97182,964],{"class":104},[94,97184,398],{"class":153},[94,97186,33229],{"class":104},[94,97188,97189],{"class":96,"line":1298},[94,97190,93541],{"class":163},[94,97192,97193],{"class":96,"line":1310},[94,97194,93905],{"class":209},[94,97196,97197],{"class":96,"line":1593},[94,97198,97199],{"class":209},"array([[ 2,  3,  4],\n",[94,97201,97202],{"class":96,"line":1598},[94,97203,97204],{"class":209},"       [ 8,  9, 10],\n",[94,97206,97207],{"class":96,"line":1604},[94,97208,97209],{"class":209},"       [14, 15, 16],\n",[94,97211,97212],{"class":96,"line":1609},[94,97213,97214],{"class":209},"       [20, 21, 22]])\n",[94,97216,97217],{"class":96,"line":1623},[94,97218,93905],{"class":209},[94,97220,97221],{"class":96,"line":1628},[94,97222,97223],{"class":163},"#对列行同时进行切片，使用了step参数\n",[94,97225,97226,97229,97231,97234,97236],{"class":96,"line":1634},[94,97227,97228],{"class":104},"a[::",[94,97230,182],{"class":153},[94,97232,97233],{"class":104},",::",[94,97235,182],{"class":153},[94,97237,33229],{"class":104},[40,97239,97240],{},"⑤同时获取两个元素",[85,97242,97244],{"className":30361,"code":97243,"language":30363,"meta":14,"style":14},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[91,97245,97246,97251,97256],{"__ignoreMap":14},[94,97247,97248],{"class":96,"line":97},[94,97249,97250],{"class":163},"#同时获取第三行第二列，第四行第一列\n",[94,97252,97253],{"class":96,"line":15},[94,97254,97255],{"class":163},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[94,97257,97258,97261,97263,97265,97267,97269,97271,97273,97275],{"class":96,"line":1160},[94,97259,97260],{"class":104},"a[(",[94,97262,182],{"class":153},[94,97264,483],{"class":104},[94,97266,176],{"class":153},[94,97268,42230],{"class":104},[94,97270,322],{"class":153},[94,97272,483],{"class":104},[94,97274,296],{"class":153},[94,97276,97277],{"class":104},")]\n",[40,97279,97280],{},"⑥切片，对行进行反向获取",[85,97282,97284],{"className":30361,"code":97283,"language":30363,"meta":14,"style":14},"#切片 对所有行进行反向获取\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",[91,97285,97286,97291,97301,97305,97309,97314,97319,97324,97329,97333,97338,97354,97358,97363,97368,97373,97378],{"__ignoreMap":14},[94,97287,97288],{"class":96,"line":97},[94,97289,97290],{"class":163},"#切片 对所有行进行反向获取\n",[94,97292,97293,97295,97297,97299],{"class":96,"line":15},[94,97294,97228],{"class":104},[94,97296,637],{"class":100},[94,97298,322],{"class":153},[94,97300,33229],{"class":104},[94,97302,97303],{"class":96,"line":1160},[94,97304,93541],{"class":163},[94,97306,97307],{"class":96,"line":1175},[94,97308,93905],{"class":209},[94,97310,97311],{"class":96,"line":1181},[94,97312,97313],{"class":209},"array([[19, 20, 21, 22, 23, 24],\n",[94,97315,97316],{"class":96,"line":1195},[94,97317,97318],{"class":209},"       [13, 14, 15, 16, 17, 18],\n",[94,97320,97321],{"class":96,"line":1201},[94,97322,97323],{"class":209},"       [ 7,  8,  9, 10, 11, 12],\n",[94,97325,97326],{"class":96,"line":1292},[94,97327,97328],{"class":209},"       [ 1,  2,  3,  4,  5,  6]])\n",[94,97330,97331],{"class":96,"line":1298},[94,97332,93905],{"class":209},[94,97334,97335],{"class":96,"line":1310},[94,97336,97337],{"class":163},"#对行列都进行反向切片获取\n",[94,97339,97340,97342,97344,97346,97348,97350,97352],{"class":96,"line":1593},[94,97341,97228],{"class":104},[94,97343,637],{"class":100},[94,97345,322],{"class":153},[94,97347,97233],{"class":104},[94,97349,637],{"class":100},[94,97351,322],{"class":153},[94,97353,33229],{"class":104},[94,97355,97356],{"class":96,"line":1598},[94,97357,93905],{"class":209},[94,97359,97360],{"class":96,"line":1604},[94,97361,97362],{"class":209},"array([[24, 23, 22, 21, 20, 19],\n",[94,97364,97365],{"class":96,"line":1609},[94,97366,97367],{"class":209},"       [18, 17, 16, 15, 14, 13],\n",[94,97369,97370],{"class":96,"line":1623},[94,97371,97372],{"class":209},"       [12, 11, 10,  9,  8,  7],\n",[94,97374,97375],{"class":96,"line":1628},[94,97376,97377],{"class":209},"       [ 6,  5,  4,  3,  2,  1]])\n",[94,97379,97380],{"class":96,"line":1634},[94,97381,93905],{"class":209},[40,97383,97384],{},"⑦修改元素",[85,97386,97388],{"className":30361,"code":97387,"language":30363,"meta":14,"style":14},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[91,97389,97390,97395,97413,97418],{"__ignoreMap":14},[94,97391,97392],{"class":96,"line":97},[94,97393,97394],{"class":163},"#获取前两行和前两列\n",[94,97396,97397,97400,97402,97404,97406,97409,97411],{"class":96,"line":15},[94,97398,97399],{"class":104},"sub_a",[94,97401,150],{"class":100},[94,97403,97147],{"class":104},[94,97405,182],{"class":153},[94,97407,97408],{"class":104},",:",[94,97410,182],{"class":153},[94,97412,33229],{"class":104},[94,97414,97415],{"class":96,"line":1160},[94,97416,97417],{"class":163},"#修改sub_a第一个元素的值\n",[94,97419,97420,97423,97425,97427,97429,97431,97433],{"class":96,"line":1175},[94,97421,97422],{"class":104},"sub_a[",[94,97424,296],{"class":153},[94,97426,483],{"class":104},[94,97428,296],{"class":153},[94,97430,1045],{"class":104},[94,97432,150],{"class":100},[94,97434,97435],{"class":153},"100\n",[40,97437,97438],{},"⑧数组复制copy()",[85,97440,97442],{"className":30361,"code":97441,"language":30363,"meta":14,"style":14},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[91,97443,97444,97449,97459,97464],{"__ignoreMap":14},[94,97445,97446],{"class":96,"line":97},[94,97447,97448],{"class":163},"#数组复制\n",[94,97450,97451,97454,97456],{"class":96,"line":15},[94,97452,97453],{"class":104},"copy_a",[94,97455,150],{"class":100},[94,97457,97458],{"class":104},"np.copy(sub_a)\n",[94,97460,97461],{"class":96,"line":1160},[94,97462,97463],{"class":163},"#修改copy_a后不影响原数组\n",[94,97465,97466,97469,97471,97473,97475,97477,97479],{"class":96,"line":1175},[94,97467,97468],{"class":104},"copy_a[",[94,97470,296],{"class":153},[94,97472,483],{"class":104},[94,97474,296],{"class":153},[94,97476,1045],{"class":104},[94,97478,150],{"class":100},[94,97480,97435],{"class":153},[40,97482,97483],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5108,97485,97486],{},"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":14,"searchDepth":15,"depth":15,"links":97488},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97005,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97495,"title":97496,"body":97497,"description":17,"extension":18,"meta":97989,"navigation":20,"path":97990,"seo":97991,"stem":97992,"__hash__":97993},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97498,"toc":97981},[97499,97502,97506,97509,97512,97565,97568,97593,97596,97615,97635,97638,97654,97658,97704,97708,97750,97754,97757,97760,97763,97766,97769,97831,97891,97895,97898,97955,97959,97964,97973,97978],[10,97500,97496],{"id":97501},"_5改变数组的维度",[35,97503,97505],{"id":97504},"_51-使用reshape","5.1 使用reshape()",[40,97507,97508],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[40,97510,97511],{},"①一维数组转换为二维数组",[85,97513,97515],{"className":30361,"code":97514,"language":30363,"meta":14,"style":14},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[91,97516,97517,97533,97538,97543,97548],{"__ignoreMap":14},[94,97518,97519,97521,97523,97525,97527,97529,97531],{"class":96,"line":97},[94,97520,343],{"class":104},[94,97522,150],{"class":100},[94,97524,92979],{"class":104},[94,97526,322],{"class":153},[94,97528,483],{"class":104},[94,97530,628],{"class":153},[94,97532,111],{"class":104},[94,97534,97535],{"class":96,"line":15},[94,97536,97537],{"class":163},"#将一维数组进行转换\n",[94,97539,97540],{"class":96,"line":1160},[94,97541,97542],{"class":163},"#注意点：元素个数不可以变\n",[94,97544,97545],{"class":96,"line":1175},[94,97546,97547],{"class":163},"#转换维度要保持一致，不一致就异常！！！\n",[94,97549,97550,97552,97554,97557,97559,97561,97563],{"class":96,"line":1181},[94,97551,93283],{"class":104},[94,97553,150],{"class":100},[94,97555,97556],{"class":104},"a.reshape(",[94,97558,182],{"class":153},[94,97560,483],{"class":104},[94,97562,449],{"class":153},[94,97564,111],{"class":104},[40,97566,97567],{},"②一维数组转换为三维数组",[85,97569,97571],{"className":30361,"code":97570,"language":30363,"meta":14,"style":14},"aaa=a.reshape(2,3,2)\n",[91,97572,97573],{"__ignoreMap":14},[94,97574,97575,97577,97579,97581,97583,97585,97587,97589,97591],{"class":96,"line":97},[94,97576,95498],{"class":104},[94,97578,150],{"class":100},[94,97580,97556],{"class":104},[94,97582,182],{"class":153},[94,97584,483],{"class":104},[94,97586,176],{"class":153},[94,97588,483],{"class":104},[94,97590,182],{"class":153},[94,97592,111],{"class":104},[40,97594,97595],{},"③二维数组转化为一维数组",[85,97597,97599],{"className":30361,"code":97598,"language":30363,"meta":14,"style":14},"#知道元素个数：\naa.reshape(12)\n",[91,97600,97601,97606],{"__ignoreMap":14},[94,97602,97603],{"class":96,"line":97},[94,97604,97605],{"class":163},"#知道元素个数：\n",[94,97607,97608,97611,97613],{"class":96,"line":15},[94,97609,97610],{"class":104},"aa.reshape(",[94,97612,603],{"class":153},[94,97614,111],{"class":104},[85,97616,97618],{"className":30361,"code":97617,"language":30363,"meta":14,"style":14},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[91,97619,97620,97625],{"__ignoreMap":14},[94,97621,97622],{"class":96,"line":97},[94,97623,97624],{"class":163},"#不知道元素个数，参数传递-1\n",[94,97626,97627,97629,97631,97633],{"class":96,"line":15},[94,97628,97610],{"class":104},[94,97630,637],{"class":100},[94,97632,322],{"class":153},[94,97634,111],{"class":104},[40,97636,97637],{},"④三维数组转换为一维数组",[85,97639,97641],{"className":30361,"code":97640,"language":30363,"meta":14,"style":14},"aaa.reshape(-1)\n",[91,97642,97643],{"__ignoreMap":14},[94,97644,97645,97648,97650,97652],{"class":96,"line":97},[94,97646,97647],{"class":104},"aaa.reshape(",[94,97649,637],{"class":100},[94,97651,322],{"class":153},[94,97653,111],{"class":104},[35,97655,97657],{"id":97656},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[85,97659,97661],{"className":30361,"code":97660,"language":30363,"meta":14,"style":14},"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",[91,97662,97663,97690,97695,97699],{"__ignoreMap":14},[94,97664,97665,97667,97669,97671,97673,97675,97677,97679,97681,97683,97685,97687],{"class":96,"line":97},[94,97666,93283],{"class":104},[94,97668,150],{"class":100},[94,97670,92979],{"class":104},[94,97672,322],{"class":153},[94,97674,483],{"class":104},[94,97676,628],{"class":153},[94,97678,92984],{"class":104},[94,97680,182],{"class":153},[94,97682,483],{"class":104},[94,97684,449],{"class":153},[94,97686,534],{"class":104},[94,97688,97689],{"class":163},"#转换为2行6列的数组\n",[94,97691,97692],{"class":96,"line":15},[94,97693,97694],{"class":104},"aa.revel()\n",[94,97696,97697],{"class":96,"line":1160},[94,97698,93541],{"class":163},[94,97700,97701],{"class":96,"line":1175},[94,97702,97703],{"class":163},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[35,97705,97707],{"id":97706},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[85,97709,97711],{"className":30361,"code":97710,"language":30363,"meta":14,"style":14},"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",[91,97712,97713,97737,97742,97746],{"__ignoreMap":14},[94,97714,97715,97717,97719,97721,97723,97725,97727,97729,97731,97733,97735],{"class":96,"line":97},[94,97716,93283],{"class":104},[94,97718,150],{"class":100},[94,97720,92979],{"class":104},[94,97722,322],{"class":153},[94,97724,483],{"class":104},[94,97726,628],{"class":153},[94,97728,92984],{"class":104},[94,97730,182],{"class":153},[94,97732,483],{"class":104},[94,97734,449],{"class":153},[94,97736,111],{"class":104},[94,97738,97739],{"class":96,"line":15},[94,97740,97741],{"class":104},"aa.flatten()\n",[94,97743,97744],{"class":96,"line":1160},[94,97745,93541],{"class":163},[94,97747,97748],{"class":96,"line":1175},[94,97749,97703],{"class":163},[35,97751,97753],{"id":97752},"_54-使用resize","5.4 使用resize()",[40,97755,97756],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[40,97758,97759],{},"通过resize方法可以改变数组的维度",[40,97761,97762],{},"#resize修改数组维度",[40,97764,97765],{},"#以元组的形式指定形状",[40,97767,97768],{},"#改变的是原数组",[85,97770,97772],{"className":30361,"code":97771,"language":30363,"meta":14,"style":14},"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",[91,97773,97774,97790,97810,97823,97827],{"__ignoreMap":14},[94,97775,97776,97778,97780,97782,97784,97786,97788],{"class":96,"line":97},[94,97777,343],{"class":104},[94,97779,150],{"class":100},[94,97781,92979],{"class":104},[94,97783,322],{"class":153},[94,97785,483],{"class":104},[94,97787,628],{"class":153},[94,97789,111],{"class":104},[94,97791,97792,97795,97797,97799,97801,97803,97805,97807],{"class":96,"line":15},[94,97793,97794],{"class":104},"a.shape",[94,97796,150],{"class":100},[94,97798,105],{"class":104},[94,97800,182],{"class":153},[94,97802,483],{"class":104},[94,97804,449],{"class":153},[94,97806,534],{"class":104},[94,97808,97809],{"class":163},"#改变了原数组\n",[94,97811,97812,97814,97816,97819,97821],{"class":96,"line":1160},[94,97813,343],{"class":104},[94,97815,150],{"class":100},[94,97817,97818],{"class":104},"resize((",[94,97820,603],{"class":153},[94,97822,30480],{"class":104},[94,97824,97825],{"class":96,"line":1175},[94,97826,93541],{"class":163},[94,97828,97829],{"class":96,"line":1181},[94,97830,97703],{"class":163},[85,97832,97834],{"className":30361,"code":97833,"language":30363,"meta":14,"style":14},"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",[91,97835,97836,97849,97853,97857,97862,97867,97872,97877,97882,97887],{"__ignoreMap":14},[94,97837,97838,97841,97843,97845,97847],{"class":96,"line":97},[94,97839,97840],{"class":104},"a.resize((",[94,97842,449],{"class":153},[94,97844,483],{"class":104},[94,97846,182],{"class":153},[94,97848,30480],{"class":104},[94,97850,97851],{"class":96,"line":15},[94,97852,93541],{"class":163},[94,97854,97855],{"class":96,"line":1160},[94,97856,93905],{"class":209},[94,97858,97859],{"class":96,"line":1175},[94,97860,97861],{"class":209},"array([[ 1,  2],\n",[94,97863,97864],{"class":96,"line":1181},[94,97865,97866],{"class":209},"       [ 3,  4],\n",[94,97868,97869],{"class":96,"line":1195},[94,97870,97871],{"class":209},"       [ 5,  6],\n",[94,97873,97874],{"class":96,"line":1201},[94,97875,97876],{"class":209},"       [ 7,  8],\n",[94,97878,97879],{"class":96,"line":1292},[94,97880,97881],{"class":209},"       [ 9, 10],\n",[94,97883,97884],{"class":96,"line":1298},[94,97885,97886],{"class":209},"       [11, 12]])\n",[94,97888,97889],{"class":96,"line":1310},[94,97890,93905],{"class":209},[35,97892,97894],{"id":97893},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[40,97896,97897],{},"改变了原数组",[85,97899,97901],{"className":30361,"code":97900,"language":30363,"meta":14,"style":14},"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",[91,97902,97903,97919,97935,97939,97943,97947,97951],{"__ignoreMap":14},[94,97904,97905,97907,97909,97911,97913,97915,97917],{"class":96,"line":97},[94,97906,343],{"class":104},[94,97908,150],{"class":100},[94,97910,92979],{"class":104},[94,97912,322],{"class":153},[94,97914,483],{"class":104},[94,97916,628],{"class":153},[94,97918,111],{"class":104},[94,97920,97921,97923,97925,97927,97929,97931,97933],{"class":96,"line":15},[94,97922,97794],{"class":104},[94,97924,150],{"class":100},[94,97926,105],{"class":104},[94,97928,182],{"class":153},[94,97930,483],{"class":104},[94,97932,449],{"class":153},[94,97934,111],{"class":104},[94,97936,97937],{"class":96,"line":1160},[94,97938,93541],{"class":163},[94,97940,97941],{"class":96,"line":1175},[94,97942,93905],{"class":209},[94,97944,97945],{"class":96,"line":1181},[94,97946,97165],{"class":209},[94,97948,97949],{"class":96,"line":1195},[94,97950,97170],{"class":209},[94,97952,97953],{"class":96,"line":1201},[94,97954,93905],{"class":209},[35,97956,97958],{"id":97957},"_56-重要比较","5.6 重要比较：",[40,97960,97961],{},[1443,97962],{"alt":14,"src":97963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[40,97965,97966,97967,97969,97970,97972],{},"口诀：NumPy 函数要么用 ",[91,97968,95940],{},"，要么用 ",[91,97971,31479],{},"，创建结构用 shape，造数据用 size",[40,97974,97975],{},[1443,97976],{"alt":14,"src":97977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5108,97979,97980],{},"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":14,"searchDepth":15,"depth":15,"links":97982},[97983,97984,97985,97986,97987,97988],{"id":97504,"depth":15,"text":97505},{"id":97656,"depth":15,"text":97657},{"id":97706,"depth":15,"text":97707},{"id":97752,"depth":15,"text":97753},{"id":97893,"depth":15,"text":97894},{"id":97957,"depth":15,"text":97958},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97496,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":97995,"title":97996,"body":97997,"description":17,"extension":18,"meta":99069,"navigation":20,"path":99070,"seo":99071,"stem":99072,"__hash__":99073},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":97998,"toc":99063},[97999,98002,98006,98009,98012,98015,98080,98083,98123,98126,98208,98211,98216,98238,98240,98245,98250,98253,98256,98411,98414,98616,98620,98623,98626,98694,98696,98701,98704,98707,98787,98791,98794,98796,98869,98871,98876,98878,98958,98962,98965,98968,98971,98974,98977,98980,99060],[10,98000,97996],{"id":98001},"_6数组的拼接",[35,98003,98005],{"id":98004},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[40,98007,98008],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[40,98010,98011],{},"函数内部传两个数列构成的数列或者元组",[40,98013,98014],{},"①一维数组的拼接",[85,98016,98018],{"className":30361,"code":98017,"language":30363,"meta":14,"style":14},"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",[91,98019,98020,98040,98060,98065,98070,98075],{"__ignoreMap":14},[94,98021,98022,98024,98026,98028,98030,98032,98034,98036,98038],{"class":96,"line":97},[94,98023,343],{"class":104},[94,98025,150],{"class":100},[94,98027,93001],{"class":104},[94,98029,322],{"class":153},[94,98031,483],{"class":104},[94,98033,182],{"class":153},[94,98035,483],{"class":104},[94,98037,176],{"class":153},[94,98039,4638],{"class":104},[94,98041,98042,98044,98046,98048,98050,98052,98054,98056,98058],{"class":96,"line":15},[94,98043,368],{"class":104},[94,98045,150],{"class":100},[94,98047,93001],{"class":104},[94,98049,398],{"class":153},[94,98051,483],{"class":104},[94,98053,424],{"class":153},[94,98055,483],{"class":104},[94,98057,449],{"class":153},[94,98059,4638],{"class":104},[94,98061,98062],{"class":96,"line":1160},[94,98063,98064],{"class":163},"#调用concatenate进行数组拼接\n",[94,98066,98067],{"class":96,"line":1175},[94,98068,98069],{"class":104},"np.concatenate((a,b))\n",[94,98071,98072],{"class":96,"line":1181},[94,98073,98074],{"class":163},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[94,98076,98077],{"class":96,"line":1195},[94,98078,98079],{"class":163},"#np.concatenate([a,b])\n",[40,98081,98082],{},"②一维多个数组拼接",[85,98084,98086],{"className":30361,"code":98085,"language":30363,"meta":14,"style":14},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[91,98087,98088,98093,98113,98118],{"__ignoreMap":14},[94,98089,98090],{"class":96,"line":97},[94,98091,98092],{"class":163},"#也可以多个数组进行拼接\n",[94,98094,98095,98097,98099,98101,98103,98105,98107,98109,98111],{"class":96,"line":15},[94,98096,393],{"class":104},[94,98098,150],{"class":100},[94,98100,93001],{"class":104},[94,98102,551],{"class":153},[94,98104,483],{"class":104},[94,98106,577],{"class":153},[94,98108,483],{"class":104},[94,98110,628],{"class":153},[94,98112,4638],{"class":104},[94,98114,98115],{"class":96,"line":1160},[94,98116,98117],{"class":104},"c\n",[94,98119,98120],{"class":96,"line":1175},[94,98121,98122],{"class":104},"np.concatenate((a,b,c))\n",[40,98124,98125],{},"③二维数组拼接",[85,98127,98129],{"className":30361,"code":98128,"language":30363,"meta":14,"style":14},"#二维数组使用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",[91,98130,98131,98136,98160,98185,98190,98195],{"__ignoreMap":14},[94,98132,98133],{"class":96,"line":97},[94,98134,98135],{"class":163},"#二维数组使用concatenate进行拼接\n",[94,98137,98138,98140,98142,98144,98146,98148,98150,98152,98154,98156,98158],{"class":96,"line":15},[94,98139,93283],{"class":104},[94,98141,150],{"class":100},[94,98143,92979],{"class":104},[94,98145,322],{"class":153},[94,98147,483],{"class":104},[94,98149,628],{"class":153},[94,98151,92984],{"class":104},[94,98153,176],{"class":153},[94,98155,483],{"class":104},[94,98157,398],{"class":153},[94,98159,111],{"class":104},[94,98161,98162,98165,98167,98169,98171,98173,98175,98177,98179,98181,98183],{"class":96,"line":1160},[94,98163,98164],{"class":104},"bb",[94,98166,150],{"class":100},[94,98168,92979],{"class":104},[94,98170,442],{"class":153},[94,98172,483],{"class":104},[94,98174,747],{"class":153},[94,98176,92984],{"class":104},[94,98178,176],{"class":153},[94,98180,483],{"class":104},[94,98182,398],{"class":153},[94,98184,111],{"class":104},[94,98186,98187],{"class":96,"line":1175},[94,98188,98189],{"class":163},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[94,98191,98192],{"class":96,"line":1181},[94,98193,98194],{"class":163},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[94,98196,98197,98200,98202,98204,98206],{"class":96,"line":1195},[94,98198,98199],{"class":104},"np.concatenate((aa,bb),",[94,98201,47497],{"class":5198},[94,98203,150],{"class":100},[94,98205,296],{"class":153},[94,98207,111],{"class":104},[40,98209,98210],{},"结果：",[40,98212,98213],{},[1443,98214],{"alt":14,"src":98215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[85,98217,98219],{"className":30361,"code":98218,"language":30363,"meta":14,"style":14},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[91,98220,98221,98226],{"__ignoreMap":14},[94,98222,98223],{"class":96,"line":97},[94,98224,98225],{"class":163},"#指定axis为1进行拼接\n",[94,98227,98228,98230,98232,98234,98236],{"class":96,"line":15},[94,98229,98199],{"class":104},[94,98231,47497],{"class":5198},[94,98233,150],{"class":100},[94,98235,322],{"class":153},[94,98237,111],{"class":104},[40,98239,98210],{},[40,98241,98242],{},[1443,98243],{"alt":14,"src":98244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[40,98246,98247],{},[254,98248,98249],{},"二维数组总结：0竖着方向，1横着方向",[40,98251,98252],{},"④三维数组拼接",[40,98254,98255],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[85,98257,98259],{"className":30361,"code":98258,"language":30363,"meta":14,"style":14},"#两个三行六列\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",[91,98260,98261,98266,98294,98324,98329,98346,98351,98356,98361,98378,98383,98388,98393,98406],{"__ignoreMap":14},[94,98262,98263],{"class":96,"line":97},[94,98264,98265],{"class":163},"#两个三行六列\n",[94,98267,98268,98270,98272,98274,98276,98278,98280,98282,98284,98286,98288,98290,98292],{"class":96,"line":15},[94,98269,95498],{"class":104},[94,98271,150],{"class":100},[94,98273,92979],{"class":104},[94,98275,322],{"class":153},[94,98277,483],{"class":104},[94,98279,430],{"class":153},[94,98281,92984],{"class":104},[94,98283,182],{"class":153},[94,98285,483],{"class":104},[94,98287,176],{"class":153},[94,98289,483],{"class":104},[94,98291,449],{"class":153},[94,98293,111],{"class":104},[94,98295,98296,98299,98301,98303,98305,98307,98310,98312,98314,98316,98318,98320,98322],{"class":96,"line":1160},[94,98297,98298],{"class":104},"bbb",[94,98300,150],{"class":100},[94,98302,92979],{"class":104},[94,98304,442],{"class":153},[94,98306,483],{"class":104},[94,98308,98309],{"class":153},"137",[94,98311,92984],{"class":104},[94,98313,182],{"class":153},[94,98315,483],{"class":104},[94,98317,176],{"class":153},[94,98319,483],{"class":104},[94,98321,449],{"class":153},[94,98323,111],{"class":104},[94,98325,98326],{"class":96,"line":1175},[94,98327,98328],{"class":163},"#axis=0\n",[94,98330,98331,98333,98335,98338,98340,98342,98344],{"class":96,"line":1181},[94,98332,800],{"class":104},[94,98334,150],{"class":100},[94,98336,98337],{"class":104},"np.concatenate((aaa,bbb),",[94,98339,47497],{"class":5198},[94,98341,150],{"class":100},[94,98343,296],{"class":153},[94,98345,111],{"class":104},[94,98347,98348],{"class":96,"line":1195},[94,98349,98350],{"class":104},"s.shape\n",[94,98352,98353],{"class":96,"line":1201},[94,98354,98355],{"class":163},"#输出：(4,3,6)\n",[94,98357,98358],{"class":96,"line":1292},[94,98359,98360],{"class":163},"#axis=1\n",[94,98362,98363,98366,98368,98370,98372,98374,98376],{"class":96,"line":1298},[94,98364,98365],{"class":104},"ss",[94,98367,150],{"class":100},[94,98369,98337],{"class":104},[94,98371,47497],{"class":5198},[94,98373,150],{"class":100},[94,98375,322],{"class":153},[94,98377,111],{"class":104},[94,98379,98380],{"class":96,"line":1310},[94,98381,98382],{"class":104},"ss.shape\n",[94,98384,98385],{"class":96,"line":1593},[94,98386,98387],{"class":163},"#输出：(2,6,6)\n",[94,98389,98390],{"class":96,"line":1598},[94,98391,98392],{"class":163},"#axis=2\n",[94,98394,98395,98397,98399,98401,98403],{"class":96,"line":1604},[94,98396,98337],{"class":104},[94,98398,47497],{"class":5198},[94,98400,150],{"class":100},[94,98402,182],{"class":153},[94,98404,98405],{"class":104},").shape\n",[94,98407,98408],{"class":96,"line":1609},[94,98409,98410],{"class":163},"#输出：（2，3，12）\n",[40,98412,98413],{},"⑤四维数组拼接",[85,98415,98417],{"className":30361,"code":98416,"language":30363,"meta":14,"style":14},"#两个三行六列\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",[91,98418,98419,98423,98451,98479,98504,98530,98534,98547,98552,98556,98568,98573,98577,98589,98594,98599,98611],{"__ignoreMap":14},[94,98420,98421],{"class":96,"line":97},[94,98422,98265],{"class":163},[94,98424,98425,98427,98429,98431,98433,98435,98437,98439,98441,98443,98445,98447,98449],{"class":96,"line":15},[94,98426,95498],{"class":104},[94,98428,150],{"class":100},[94,98430,92979],{"class":104},[94,98432,322],{"class":153},[94,98434,483],{"class":104},[94,98436,430],{"class":153},[94,98438,92984],{"class":104},[94,98440,182],{"class":153},[94,98442,483],{"class":104},[94,98444,176],{"class":153},[94,98446,483],{"class":104},[94,98448,449],{"class":153},[94,98450,111],{"class":104},[94,98452,98453,98455,98457,98459,98461,98463,98465,98467,98469,98471,98473,98475,98477],{"class":96,"line":1160},[94,98454,98298],{"class":104},[94,98456,150],{"class":100},[94,98458,92979],{"class":104},[94,98460,442],{"class":153},[94,98462,483],{"class":104},[94,98464,98309],{"class":153},[94,98466,92984],{"class":104},[94,98468,182],{"class":153},[94,98470,483],{"class":104},[94,98472,176],{"class":153},[94,98474,483],{"class":104},[94,98476,449],{"class":153},[94,98478,111],{"class":104},[94,98480,98481,98484,98486,98488,98490,98492,98494,98496,98498,98500,98502],{"class":96,"line":1175},[94,98482,98483],{"class":104},"aaaa",[94,98485,150],{"class":100},[94,98487,97647],{"class":104},[94,98489,182],{"class":153},[94,98491,483],{"class":104},[94,98493,176],{"class":153},[94,98495,483],{"class":104},[94,98497,176],{"class":153},[94,98499,483],{"class":104},[94,98501,182],{"class":153},[94,98503,111],{"class":104},[94,98505,98506,98509,98511,98514,98516,98518,98520,98522,98524,98526,98528],{"class":96,"line":1181},[94,98507,98508],{"class":104},"bbbb",[94,98510,150],{"class":100},[94,98512,98513],{"class":104},"bbb.reshape(",[94,98515,182],{"class":153},[94,98517,483],{"class":104},[94,98519,176],{"class":153},[94,98521,483],{"class":104},[94,98523,176],{"class":153},[94,98525,483],{"class":104},[94,98527,182],{"class":153},[94,98529,111],{"class":104},[94,98531,98532],{"class":96,"line":1195},[94,98533,98328],{"class":163},[94,98535,98536,98539,98541,98543,98545],{"class":96,"line":1201},[94,98537,98538],{"class":104},"np.concatenate((aaaa,bbbb),",[94,98540,47497],{"class":5198},[94,98542,150],{"class":100},[94,98544,296],{"class":153},[94,98546,98405],{"class":104},[94,98548,98549],{"class":96,"line":1292},[94,98550,98551],{"class":163},"#结果：（4，3，3，2）\n",[94,98553,98554],{"class":96,"line":1298},[94,98555,98360],{"class":163},[94,98557,98558,98560,98562,98564,98566],{"class":96,"line":1310},[94,98559,98538],{"class":104},[94,98561,47497],{"class":5198},[94,98563,150],{"class":100},[94,98565,322],{"class":153},[94,98567,98405],{"class":104},[94,98569,98570],{"class":96,"line":1593},[94,98571,98572],{"class":163},"#结果：（2，6，3，2）\n",[94,98574,98575],{"class":96,"line":1598},[94,98576,98392],{"class":163},[94,98578,98579,98581,98583,98585,98587],{"class":96,"line":1604},[94,98580,98538],{"class":104},[94,98582,47497],{"class":5198},[94,98584,150],{"class":100},[94,98586,182],{"class":153},[94,98588,98405],{"class":104},[94,98590,98591],{"class":96,"line":1609},[94,98592,98593],{"class":163},"#结果：（2，3，6，2）\n",[94,98595,98596],{"class":96,"line":1623},[94,98597,98598],{"class":163},"#axis=3\n",[94,98600,98601,98603,98605,98607,98609],{"class":96,"line":1628},[94,98602,98538],{"class":104},[94,98604,47497],{"class":5198},[94,98606,150],{"class":100},[94,98608,176],{"class":153},[94,98610,98405],{"class":104},[94,98612,98613],{"class":96,"line":1634},[94,98614,98615],{"class":163},"#结果：（2，3，3，4）\n",[35,98617,98619],{"id":98618},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[40,98621,98622],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[40,98624,98625],{},"①二维数组",[85,98627,98629],{"className":30361,"code":98628,"language":30363,"meta":14,"style":14},"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",[91,98630,98631,98655,98679,98684,98689],{"__ignoreMap":14},[94,98632,98633,98635,98637,98639,98641,98643,98645,98647,98649,98651,98653],{"class":96,"line":97},[94,98634,93283],{"class":104},[94,98636,150],{"class":100},[94,98638,92979],{"class":104},[94,98640,322],{"class":153},[94,98642,483],{"class":104},[94,98644,628],{"class":153},[94,98646,92984],{"class":104},[94,98648,176],{"class":153},[94,98650,483],{"class":104},[94,98652,398],{"class":153},[94,98654,111],{"class":104},[94,98656,98657,98659,98661,98663,98665,98667,98669,98671,98673,98675,98677],{"class":96,"line":15},[94,98658,98164],{"class":104},[94,98660,150],{"class":100},[94,98662,92979],{"class":104},[94,98664,442],{"class":153},[94,98666,483],{"class":104},[94,98668,747],{"class":153},[94,98670,92984],{"class":104},[94,98672,176],{"class":153},[94,98674,483],{"class":104},[94,98676,398],{"class":153},[94,98678,111],{"class":104},[94,98680,98681],{"class":96,"line":1160},[94,98682,98683],{"class":104},"np.hstack((aa,bb))\n",[94,98685,98686],{"class":96,"line":1175},[94,98687,98688],{"class":163},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[94,98690,98691],{"class":96,"line":1181},[94,98692,98693],{"class":163},"#np.hstack([aa,bb])\n",[40,98695,98210],{},[40,98697,98698],{},[1443,98699],{"alt":14,"src":98700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[40,98702,98703],{},"等效于concatenate()函数中axis=1时的情况",[40,98705,98706],{},"②三维数组",[85,98708,98710],{"className":30361,"code":98709,"language":30363,"meta":14,"style":14},"#两个三行六列\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",[91,98711,98712,98716,98744,98772,98777,98782],{"__ignoreMap":14},[94,98713,98714],{"class":96,"line":97},[94,98715,98265],{"class":163},[94,98717,98718,98720,98722,98724,98726,98728,98730,98732,98734,98736,98738,98740,98742],{"class":96,"line":15},[94,98719,95498],{"class":104},[94,98721,150],{"class":100},[94,98723,92979],{"class":104},[94,98725,322],{"class":153},[94,98727,483],{"class":104},[94,98729,430],{"class":153},[94,98731,92984],{"class":104},[94,98733,182],{"class":153},[94,98735,483],{"class":104},[94,98737,176],{"class":153},[94,98739,483],{"class":104},[94,98741,449],{"class":153},[94,98743,111],{"class":104},[94,98745,98746,98748,98750,98752,98754,98756,98758,98760,98762,98764,98766,98768,98770],{"class":96,"line":1160},[94,98747,98298],{"class":104},[94,98749,150],{"class":100},[94,98751,92979],{"class":104},[94,98753,442],{"class":153},[94,98755,483],{"class":104},[94,98757,98309],{"class":153},[94,98759,92984],{"class":104},[94,98761,182],{"class":153},[94,98763,483],{"class":104},[94,98765,176],{"class":153},[94,98767,483],{"class":104},[94,98769,449],{"class":153},[94,98771,111],{"class":104},[94,98773,98774],{"class":96,"line":1175},[94,98775,98776],{"class":163},"#使用hstack\n",[94,98778,98779],{"class":96,"line":1181},[94,98780,98781],{"class":104},"np.hstack((aaa,bbb)).shape\n",[94,98783,98784],{"class":96,"line":1195},[94,98785,98786],{"class":163},"#输出：（2，6，6）\n",[35,98788,98790],{"id":98789},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[40,98792,98793],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[40,98795,98625],{},[85,98797,98799],{"className":30361,"code":98798,"language":30363,"meta":14,"style":14},"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",[91,98800,98801,98825,98849,98854,98859,98864],{"__ignoreMap":14},[94,98802,98803,98805,98807,98809,98811,98813,98815,98817,98819,98821,98823],{"class":96,"line":97},[94,98804,93283],{"class":104},[94,98806,150],{"class":100},[94,98808,92979],{"class":104},[94,98810,322],{"class":153},[94,98812,483],{"class":104},[94,98814,628],{"class":153},[94,98816,92984],{"class":104},[94,98818,176],{"class":153},[94,98820,483],{"class":104},[94,98822,398],{"class":153},[94,98824,111],{"class":104},[94,98826,98827,98829,98831,98833,98835,98837,98839,98841,98843,98845,98847],{"class":96,"line":15},[94,98828,98164],{"class":104},[94,98830,150],{"class":100},[94,98832,92979],{"class":104},[94,98834,442],{"class":153},[94,98836,483],{"class":104},[94,98838,747],{"class":153},[94,98840,92984],{"class":104},[94,98842,176],{"class":153},[94,98844,483],{"class":104},[94,98846,398],{"class":153},[94,98848,111],{"class":104},[94,98850,98851],{"class":96,"line":1160},[94,98852,98853],{"class":163},"#vstack 垂直方向进行堆叠\n",[94,98855,98856],{"class":96,"line":1175},[94,98857,98858],{"class":104},"np.vstack((aa,bb))\n",[94,98860,98861],{"class":96,"line":1181},[94,98862,98863],{"class":163},"#与hstack传的参数类似，等价于：\n",[94,98865,98866],{"class":96,"line":1195},[94,98867,98868],{"class":104},"np.vstack([aa,bb])\n",[40,98870,98210],{},[40,98872,98873],{},[1443,98874],{"alt":14,"src":98875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[40,98877,98706],{},[85,98879,98881],{"className":30361,"code":98880,"language":30363,"meta":14,"style":14},"#两个三行六列\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",[91,98882,98883,98887,98915,98943,98948,98953],{"__ignoreMap":14},[94,98884,98885],{"class":96,"line":97},[94,98886,98265],{"class":163},[94,98888,98889,98891,98893,98895,98897,98899,98901,98903,98905,98907,98909,98911,98913],{"class":96,"line":15},[94,98890,95498],{"class":104},[94,98892,150],{"class":100},[94,98894,92979],{"class":104},[94,98896,322],{"class":153},[94,98898,483],{"class":104},[94,98900,430],{"class":153},[94,98902,92984],{"class":104},[94,98904,182],{"class":153},[94,98906,483],{"class":104},[94,98908,176],{"class":153},[94,98910,483],{"class":104},[94,98912,449],{"class":153},[94,98914,111],{"class":104},[94,98916,98917,98919,98921,98923,98925,98927,98929,98931,98933,98935,98937,98939,98941],{"class":96,"line":1160},[94,98918,98298],{"class":104},[94,98920,150],{"class":100},[94,98922,92979],{"class":104},[94,98924,442],{"class":153},[94,98926,483],{"class":104},[94,98928,98309],{"class":153},[94,98930,92984],{"class":104},[94,98932,182],{"class":153},[94,98934,483],{"class":104},[94,98936,176],{"class":153},[94,98938,483],{"class":104},[94,98940,449],{"class":153},[94,98942,111],{"class":104},[94,98944,98945],{"class":96,"line":1175},[94,98946,98947],{"class":163},"#使用vstack\n",[94,98949,98950],{"class":96,"line":1181},[94,98951,98952],{"class":104},"np.vstack((aaa,bbb)).shape\n",[94,98954,98955],{"class":96,"line":1195},[94,98956,98957],{"class":163},"#输出：（4，3，6）\n",[35,98959,98961],{"id":98960},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[40,98963,98964],{},"该方法是三维数组特有的方法",[40,98966,98967],{},"也就是说",[40,98969,98970],{},"一维数组拼接方法用：concatenate()",[40,98972,98973],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[40,98975,98976],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[40,98978,98979],{},"四维数组及多维数组只能用concatenate进行拼接",[85,98981,98983],{"className":30361,"code":98982,"language":30363,"meta":14,"style":14},"#两个三行六列\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",[91,98984,98985,98989,99017,99045,99050,99055],{"__ignoreMap":14},[94,98986,98987],{"class":96,"line":97},[94,98988,98265],{"class":163},[94,98990,98991,98993,98995,98997,98999,99001,99003,99005,99007,99009,99011,99013,99015],{"class":96,"line":15},[94,98992,95498],{"class":104},[94,98994,150],{"class":100},[94,98996,92979],{"class":104},[94,98998,322],{"class":153},[94,99000,483],{"class":104},[94,99002,430],{"class":153},[94,99004,92984],{"class":104},[94,99006,182],{"class":153},[94,99008,483],{"class":104},[94,99010,176],{"class":153},[94,99012,483],{"class":104},[94,99014,449],{"class":153},[94,99016,111],{"class":104},[94,99018,99019,99021,99023,99025,99027,99029,99031,99033,99035,99037,99039,99041,99043],{"class":96,"line":1160},[94,99020,98298],{"class":104},[94,99022,150],{"class":100},[94,99024,92979],{"class":104},[94,99026,442],{"class":153},[94,99028,483],{"class":104},[94,99030,98309],{"class":153},[94,99032,92984],{"class":104},[94,99034,182],{"class":153},[94,99036,483],{"class":104},[94,99038,176],{"class":153},[94,99040,483],{"class":104},[94,99042,449],{"class":153},[94,99044,111],{"class":104},[94,99046,99047],{"class":96,"line":1175},[94,99048,99049],{"class":163},"#使用dstack\n",[94,99051,99052],{"class":96,"line":1181},[94,99053,99054],{"class":104},"np.dstack((aaa,bbb)).shape\n",[94,99056,99057],{"class":96,"line":1195},[94,99058,99059],{"class":163},"#结果：（2，3，12）\n",[5108,99061,99062],{},"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":14,"searchDepth":15,"depth":15,"links":99064},[99065,99066,99067,99068],{"id":98004,"depth":15,"text":98005},{"id":98618,"depth":15,"text":98619},{"id":98789,"depth":15,"text":98790},{"id":98960,"depth":15,"text":98961},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":97996,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99075,"title":99076,"body":99077,"description":17,"extension":18,"meta":99352,"navigation":20,"path":99353,"seo":99354,"stem":99355,"__hash__":99356},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99078,"toc":99350},[99079,99082,99085,99179,99182,99185,99188,99191,99194,99197,99200,99203,99347],[10,99080,99076],{"id":99081},"_7数组转置",[40,99083,99084],{},"使用transpose()函数",[85,99086,99088],{"className":30361,"code":99087,"language":30363,"meta":14,"style":14},"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",[91,99089,99090,99100,99124,99129,99134,99139,99144,99152,99156,99160,99165,99170,99175],{"__ignoreMap":14},[94,99091,99092,99094,99096,99098],{"class":96,"line":97},[94,99093,30375],{"class":100},[94,99095,31363],{"class":104},[94,99097,31366],{"class":100},[94,99099,31369],{"class":104},[94,99101,99102,99104,99106,99108,99110,99112,99114,99116,99118,99120,99122],{"class":96,"line":15},[94,99103,343],{"class":104},[94,99105,150],{"class":100},[94,99107,31700],{"class":104},[94,99109,322],{"class":153},[94,99111,483],{"class":104},[94,99113,628],{"class":153},[94,99115,92984],{"class":104},[94,99117,398],{"class":153},[94,99119,483],{"class":104},[94,99121,176],{"class":153},[94,99123,111],{"class":104},[94,99125,99126],{"class":96,"line":1160},[94,99127,99128],{"class":163},"#二维数组转置\n",[94,99130,99131],{"class":96,"line":1175},[94,99132,99133],{"class":163},"#调用transpose()函数\n",[94,99135,99136],{"class":96,"line":1181},[94,99137,99138],{"class":104},"a.transpose()\n",[94,99140,99141],{"class":96,"line":1195},[94,99142,99143],{"class":163},"#对于二维数组也可以采用.T来实现\n",[94,99145,99146,99149],{"class":96,"line":1201},[94,99147,99148],{"class":104},"a.T",[94,99150,99151],{"class":163},"#与上述代码一样\n",[94,99153,99154],{"class":96,"line":1292},[94,99155,93541],{"class":163},[94,99157,99158],{"class":96,"line":1298},[94,99159,93905],{"class":209},[94,99161,99162],{"class":96,"line":1310},[94,99163,99164],{"class":209},"array([[ 1,  4,  7, 10],\n",[94,99166,99167],{"class":96,"line":1593},[94,99168,99169],{"class":209},"       [ 2,  5,  8, 11],\n",[94,99171,99172],{"class":96,"line":1598},[94,99173,99174],{"class":209},"       [ 3,  6,  9, 12]])\n",[94,99176,99177],{"class":96,"line":1604},[94,99178,93905],{"class":209},[40,99180,99181],{},"也可以使用np.transpose()的形式",[40,99183,99184],{},"#多维数组进行转置 np.transpose()",[40,99186,99187],{},"#对二维数组也可以使用np.transpose()进行转置",[40,99189,99190],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[40,99192,99193],{},"第二个参数，维度可以理解为用axis中的数来理解",[40,99195,99196],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[40,99198,99199],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[40,99201,99202],{},"四维及以上的数组也是一样的道理",[85,99204,99206],{"className":30361,"code":99205,"language":30363,"meta":14,"style":14},"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",[91,99207,99208,99236,99241,99246,99251,99269,99274,99306,99311,99316,99321,99342],{"__ignoreMap":14},[94,99209,99210,99212,99214,99216,99218,99220,99222,99224,99226,99228,99230,99232,99234],{"class":96,"line":97},[94,99211,925],{"class":104},[94,99213,150],{"class":100},[94,99215,92979],{"class":104},[94,99217,322],{"class":153},[94,99219,483],{"class":104},[94,99221,430],{"class":153},[94,99223,92984],{"class":104},[94,99225,176],{"class":153},[94,99227,483],{"class":104},[94,99229,449],{"class":153},[94,99231,483],{"class":104},[94,99233,182],{"class":153},[94,99235,111],{"class":104},[94,99237,99238],{"class":96,"line":15},[94,99239,99240],{"class":104},"x.shape\n",[94,99242,99243],{"class":96,"line":1160},[94,99244,99245],{"class":163},"#结果：（3,6,2）\n",[94,99247,99248],{"class":96,"line":1175},[94,99249,99250],{"class":163},"#使用np.transpose()进行转置 变为(2,6,3)\n",[94,99252,99253,99256,99258,99260,99262,99264,99266],{"class":96,"line":1181},[94,99254,99255],{"class":104},"np.transpose(x,(",[94,99257,182],{"class":153},[94,99259,483],{"class":104},[94,99261,322],{"class":153},[94,99263,483],{"class":104},[94,99265,296],{"class":153},[94,99267,99268],{"class":104},")).shape\n",[94,99270,99271],{"class":96,"line":1195},[94,99272,99273],{"class":163},"#结果：(2,6,3)\n",[94,99275,99276,99278,99280,99282,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302,99304],{"class":96,"line":1201},[94,99277,98483],{"class":104},[94,99279,150],{"class":100},[94,99281,92979],{"class":104},[94,99283,322],{"class":153},[94,99285,483],{"class":104},[94,99287,430],{"class":153},[94,99289,92984],{"class":104},[94,99291,176],{"class":153},[94,99293,483],{"class":104},[94,99295,182],{"class":153},[94,99297,483],{"class":104},[94,99299,322],{"class":153},[94,99301,483],{"class":104},[94,99303,449],{"class":153},[94,99305,111],{"class":104},[94,99307,99308],{"class":96,"line":1292},[94,99309,99310],{"class":104},"aaaa.shape\n",[94,99312,99313],{"class":96,"line":1298},[94,99314,99315],{"class":163},"#结果：（3，2，1，6）\n",[94,99317,99318],{"class":96,"line":1310},[94,99319,99320],{"class":163},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[94,99322,99323,99326,99328,99330,99332,99334,99336,99338,99340],{"class":96,"line":1593},[94,99324,99325],{"class":104},"np.transpose(aaaa,(",[94,99327,322],{"class":153},[94,99329,483],{"class":104},[94,99331,182],{"class":153},[94,99333,483],{"class":104},[94,99335,296],{"class":153},[94,99337,483],{"class":104},[94,99339,176],{"class":153},[94,99341,99268],{"class":104},[94,99343,99344],{"class":96,"line":1598},[94,99345,99346],{"class":163},"#结果：(2,1,3,6)\n",[5108,99348,99349],{},"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":14,"searchDepth":15,"depth":15,"links":99351},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99076,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99358,"title":99359,"body":99360,"description":17,"extension":18,"meta":100094,"navigation":20,"path":100095,"seo":100096,"stem":100097,"__hash__":100098},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99361,"toc":100092},[99362,99365,99368,99371,99374,99377,99380,99383,99386,99495,99498,99501,100089],[10,99363,99359],{"id":99364},"_8数组分割",[40,99366,99367],{},"split分割",[40,99369,99370],{},"numpy.split(ary,indics_or_sections,axis)",[40,99372,99373],{},"解释：",[40,99375,99376],{},"ary:被分割的数组",[40,99378,99379],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[40,99381,99382],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[40,99384,99385],{},"①一维数组的分割",[85,99387,99389],{"className":30361,"code":99388,"language":30363,"meta":14,"style":14},"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",[91,99390,99391,99407,99412,99421,99425,99430,99438,99442,99447,99452,99465,99469,99474,99486,99490],{"__ignoreMap":14},[94,99392,99393,99395,99397,99399,99401,99403,99405],{"class":96,"line":97},[94,99394,343],{"class":104},[94,99396,150],{"class":100},[94,99398,92979],{"class":104},[94,99400,322],{"class":153},[94,99402,483],{"class":104},[94,99404,525],{"class":153},[94,99406,111],{"class":104},[94,99408,99409],{"class":96,"line":15},[94,99410,99411],{"class":163},"#如果传入整数，必须能够平分，否则会报错\n",[94,99413,99414,99417,99419],{"class":96,"line":1160},[94,99415,99416],{"class":104},"np.split(a,",[94,99418,182],{"class":153},[94,99420,111],{"class":104},[94,99422,99423],{"class":96,"line":1175},[94,99424,93541],{"class":163},[94,99426,99427],{"class":96,"line":1181},[94,99428,99429],{"class":163},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[94,99431,99432,99434,99436],{"class":96,"line":1195},[94,99433,99416],{"class":104},[94,99435,398],{"class":153},[94,99437,111],{"class":104},[94,99439,99440],{"class":96,"line":1201},[94,99441,93541],{"class":163},[94,99443,99444],{"class":96,"line":1292},[94,99445,99446],{"class":163},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[94,99448,99449],{"class":96,"line":1298},[94,99450,99451],{"class":163},"#传入数组\n",[94,99453,99454,99457,99459,99461,99463],{"class":96,"line":1310},[94,99455,99456],{"class":104},"np.split(a,[",[94,99458,176],{"class":153},[94,99460,483],{"class":104},[94,99462,424],{"class":153},[94,99464,4638],{"class":104},[94,99466,99467],{"class":96,"line":1593},[94,99468,93541],{"class":163},[94,99470,99471],{"class":96,"line":1598},[94,99472,99473],{"class":163},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[94,99475,99476,99478,99480,99482,99484],{"class":96,"line":1604},[94,99477,99456],{"class":104},[94,99479,424],{"class":153},[94,99481,483],{"class":104},[94,99483,474],{"class":153},[94,99485,4638],{"class":104},[94,99487,99488],{"class":96,"line":1609},[94,99489,93541],{"class":163},[94,99491,99492],{"class":96,"line":1623},[94,99493,99494],{"class":163},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[40,99496,99497],{},"②二维数组的分割",[40,99499,99500],{},"使用split()",[85,99502,99504],{"className":30361,"code":99503,"language":30363,"meta":14,"style":14},"#二维数组分割\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",[91,99505,99506,99511,99535,99540,99549,99553,99557,99562,99567,99572,99577,99582,99587,99592,99596,99609,99613,99617,99621,99625,99629,99634,99639,99644,99648,99653,99669,99673,99677,99682,99687,99692,99697,99702,99707,99712,99717,99722,99727,99732,99737,99742,99747,99752,99757,99762,99767,99771,99775,99795,99799,99803,99808,99813,99818,99823,99828,99833,99838,99843,99848,99853,99858,99863,99868,99873,99878,99883,99888,99893,99897,99902,99911,99915,99919,99923,99927,99931,99935,99939,99943,99947,99956,99960,99964,99968,99972,99976,99980,99984,99988,99992,99996,100000,100004,100008,100012,100016,100020,100024,100028,100032,100036,100040,100053,100057,100061,100065,100069,100073,100077,100081,100085],{"__ignoreMap":14},[94,99507,99508],{"class":96,"line":97},[94,99509,99510],{"class":163},"#二维数组分割\n",[94,99512,99513,99515,99517,99519,99521,99523,99525,99527,99529,99531,99533],{"class":96,"line":15},[94,99514,93283],{"class":104},[94,99516,150],{"class":100},[94,99518,92979],{"class":104},[94,99520,322],{"class":153},[94,99522,483],{"class":104},[94,99524,430],{"class":153},[94,99526,92984],{"class":104},[94,99528,449],{"class":153},[94,99530,483],{"class":104},[94,99532,449],{"class":153},[94,99534,111],{"class":104},[94,99536,99537],{"class":96,"line":1160},[94,99538,99539],{"class":163},"#默认axis=0  传入整数平均分,按行来的\n",[94,99541,99542,99545,99547],{"class":96,"line":1175},[94,99543,99544],{"class":104},"np.split(aa,",[94,99546,176],{"class":153},[94,99548,111],{"class":104},[94,99550,99551],{"class":96,"line":1181},[94,99552,95741],{"class":163},[94,99554,99555],{"class":96,"line":1195},[94,99556,93905],{"class":209},[94,99558,99559],{"class":96,"line":1201},[94,99560,99561],{"class":209},"[array([[ 1,  2,  3,  4,  5,  6],\n",[94,99563,99564],{"class":96,"line":1292},[94,99565,99566],{"class":209},"        [ 7,  8,  9, 10, 11, 12]]),\n",[94,99568,99569],{"class":96,"line":1298},[94,99570,99571],{"class":209}," array([[13, 14, 15, 16, 17, 18],\n",[94,99573,99574],{"class":96,"line":1310},[94,99575,99576],{"class":209},"        [19, 20, 21, 22, 23, 24]]),\n",[94,99578,99579],{"class":96,"line":1593},[94,99580,99581],{"class":209}," array([[25, 26, 27, 28, 29, 30],\n",[94,99583,99584],{"class":96,"line":1598},[94,99585,99586],{"class":209},"        [31, 32, 33, 34, 35, 36]])]\n",[94,99588,99589],{"class":96,"line":1604},[94,99590,99591],{"class":209}," '''\n",[94,99593,99594],{"class":96,"line":1609},[94,99595,99451],{"class":163},[94,99597,99598,99601,99603,99605,99607],{"class":96,"line":1623},[94,99599,99600],{"class":104},"np.split(aa,[",[94,99602,182],{"class":153},[94,99604,483],{"class":104},[94,99606,424],{"class":153},[94,99608,4638],{"class":104},[94,99610,99611],{"class":96,"line":1628},[94,99612,95741],{"class":163},[94,99614,99615],{"class":96,"line":1634},[94,99616,93905],{"class":209},[94,99618,99619],{"class":96,"line":1655},[94,99620,99561],{"class":209},[94,99622,99623],{"class":96,"line":1660},[94,99624,99566],{"class":209},[94,99626,99627],{"class":96,"line":1674},[94,99628,99571],{"class":209},[94,99630,99631],{"class":96,"line":1679},[94,99632,99633],{"class":209},"        [19, 20, 21, 22, 23, 24],\n",[94,99635,99636],{"class":96,"line":1708},[94,99637,99638],{"class":209},"        [25, 26, 27, 28, 29, 30]]),\n",[94,99640,99641],{"class":96,"line":1713},[94,99642,99643],{"class":209}," array([[31, 32, 33, 34, 35, 36]])]\n",[94,99645,99646],{"class":96,"line":1730},[94,99647,93905],{"class":209},[94,99649,99650],{"class":96,"line":1735},[94,99651,99652],{"class":163},"#axis=1 按照列来分\n",[94,99654,99655,99657,99659,99661,99663,99665,99667],{"class":96,"line":1740},[94,99656,99544],{"class":104},[94,99658,176],{"class":153},[94,99660,483],{"class":104},[94,99662,47497],{"class":5198},[94,99664,150],{"class":100},[94,99666,322],{"class":153},[94,99668,111],{"class":104},[94,99670,99671],{"class":96,"line":1745},[94,99672,95741],{"class":163},[94,99674,99675],{"class":96,"line":1759},[94,99676,93905],{"class":209},[94,99678,99679],{"class":96,"line":1764},[94,99680,99681],{"class":209},"[array([[ 1,  2],\n",[94,99683,99684],{"class":96,"line":2558},[94,99685,99686],{"class":209},"        [ 7,  8],\n",[94,99688,99689],{"class":96,"line":2572},[94,99690,99691],{"class":209},"        [13, 14],\n",[94,99693,99694],{"class":96,"line":2580},[94,99695,99696],{"class":209},"        [19, 20],\n",[94,99698,99699],{"class":96,"line":2585},[94,99700,99701],{"class":209},"        [25, 26],\n",[94,99703,99704],{"class":96,"line":2591},[94,99705,99706],{"class":209},"        [31, 32]]),\n",[94,99708,99709],{"class":96,"line":2597},[94,99710,99711],{"class":209}," array([[ 3,  4],\n",[94,99713,99714],{"class":96,"line":2602},[94,99715,99716],{"class":209},"        [ 9, 10],\n",[94,99718,99719],{"class":96,"line":7930},[94,99720,99721],{"class":209},"        [15, 16],\n",[94,99723,99724],{"class":96,"line":7954},[94,99725,99726],{"class":209},"        [21, 22],\n",[94,99728,99729],{"class":96,"line":7959},[94,99730,99731],{"class":209},"        [27, 28],\n",[94,99733,99734],{"class":96,"line":7965},[94,99735,99736],{"class":209},"        [33, 34]]),\n",[94,99738,99739],{"class":96,"line":7992},[94,99740,99741],{"class":209}," array([[ 5,  6],\n",[94,99743,99744],{"class":96,"line":7997},[94,99745,99746],{"class":209},"        [11, 12],\n",[94,99748,99749],{"class":96,"line":8003},[94,99750,99751],{"class":209},"        [17, 18],\n",[94,99753,99754],{"class":96,"line":8015},[94,99755,99756],{"class":209},"        [23, 24],\n",[94,99758,99759],{"class":96,"line":8027},[94,99760,99761],{"class":209},"        [29, 30],\n",[94,99763,99764],{"class":96,"line":8039},[94,99765,99766],{"class":209},"        [35, 36]])]\n",[94,99768,99769],{"class":96,"line":9698},[94,99770,99591],{"class":209},[94,99772,99773],{"class":96,"line":9723},[94,99774,99451],{"class":163},[94,99776,99777,99779,99781,99783,99785,99787,99789,99791,99793],{"class":96,"line":9746},[94,99778,99600],{"class":104},[94,99780,322],{"class":153},[94,99782,483],{"class":104},[94,99784,182],{"class":153},[94,99786,41592],{"class":104},[94,99788,47497],{"class":5198},[94,99790,150],{"class":100},[94,99792,322],{"class":153},[94,99794,111],{"class":104},[94,99796,99797],{"class":96,"line":9770},[94,99798,93541],{"class":163},[94,99800,99801],{"class":96,"line":9775},[94,99802,93905],{"class":209},[94,99804,99805],{"class":96,"line":9780},[94,99806,99807],{"class":209},"[array([[ 1],\n",[94,99809,99810],{"class":96,"line":9785},[94,99811,99812],{"class":209},"        [ 7],\n",[94,99814,99815],{"class":96,"line":9794},[94,99816,99817],{"class":209},"        [13],\n",[94,99819,99820],{"class":96,"line":9799},[94,99821,99822],{"class":209},"        [19],\n",[94,99824,99825],{"class":96,"line":9805},[94,99826,99827],{"class":209},"        [25],\n",[94,99829,99830],{"class":96,"line":9826},[94,99831,99832],{"class":209},"        [31]]),\n",[94,99834,99835],{"class":96,"line":9832},[94,99836,99837],{"class":209}," array([[ 2],\n",[94,99839,99840],{"class":96,"line":9846},[94,99841,99842],{"class":209},"        [ 8],\n",[94,99844,99845],{"class":96,"line":9852},[94,99846,99847],{"class":209},"        [14],\n",[94,99849,99850],{"class":96,"line":9879},[94,99851,99852],{"class":209},"        [20],\n",[94,99854,99855],{"class":96,"line":9888},[94,99856,99857],{"class":209},"        [26],\n",[94,99859,99860],{"class":96,"line":9894},[94,99861,99862],{"class":209},"        [32]]),\n",[94,99864,99865],{"class":96,"line":9902},[94,99866,99867],{"class":209}," array([[ 3,  4,  5,  6],\n",[94,99869,99870],{"class":96,"line":9907},[94,99871,99872],{"class":209},"        [ 9, 10, 11, 12],\n",[94,99874,99875],{"class":96,"line":16586},[94,99876,99877],{"class":209},"        [15, 16, 17, 18],\n",[94,99879,99880],{"class":96,"line":16592},[94,99881,99882],{"class":209},"        [21, 22, 23, 24],\n",[94,99884,99885],{"class":96,"line":16615},[94,99886,99887],{"class":209},"        [27, 28, 29, 30],\n",[94,99889,99890],{"class":96,"line":16621},[94,99891,99892],{"class":209},"        [33, 34, 35, 36]])]\n",[94,99894,99895],{"class":96,"line":16644},[94,99896,93905],{"class":209},[94,99898,99899],{"class":96,"line":16658},[94,99900,99901],{"class":163},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[94,99903,99904,99907,99909],{"class":96,"line":16678},[94,99905,99906],{"class":104},"np.vsplit(aa,",[94,99908,176],{"class":153},[94,99910,111],{"class":104},[94,99912,99913],{"class":96,"line":16684},[94,99914,93541],{"class":163},[94,99916,99917],{"class":96,"line":16695},[94,99918,93905],{"class":209},[94,99920,99921],{"class":96,"line":16718},[94,99922,99561],{"class":209},[94,99924,99925],{"class":96,"line":16740},[94,99926,99566],{"class":209},[94,99928,99929],{"class":96,"line":16745},[94,99930,99571],{"class":209},[94,99932,99933],{"class":96,"line":16751},[94,99934,99576],{"class":209},[94,99936,99937],{"class":96,"line":16765},[94,99938,99581],{"class":209},[94,99940,99941],{"class":96,"line":16778},[94,99942,99586],{"class":209},[94,99944,99945],{"class":96,"line":16783},[94,99946,93905],{"class":209},[94,99948,99949,99952,99954],{"class":96,"line":16797},[94,99950,99951],{"class":104},"np.hsplit(aa,",[94,99953,176],{"class":153},[94,99955,111],{"class":104},[94,99957,99958],{"class":96,"line":16802},[94,99959,93541],{"class":163},[94,99961,99962],{"class":96,"line":16808},[94,99963,93905],{"class":209},[94,99965,99966],{"class":96,"line":16813},[94,99967,99681],{"class":209},[94,99969,99970],{"class":96,"line":16827},[94,99971,99686],{"class":209},[94,99973,99974],{"class":96,"line":16832},[94,99975,99691],{"class":209},[94,99977,99978],{"class":96,"line":16837},[94,99979,99696],{"class":209},[94,99981,99982],{"class":96,"line":16851},[94,99983,99701],{"class":209},[94,99985,99986],{"class":96,"line":16863},[94,99987,99706],{"class":209},[94,99989,99990],{"class":96,"line":16868},[94,99991,99711],{"class":209},[94,99993,99994],{"class":96,"line":16881},[94,99995,99716],{"class":209},[94,99997,99998],{"class":96,"line":16886},[94,99999,99721],{"class":209},[94,100001,100002],{"class":96,"line":16891},[94,100003,99726],{"class":209},[94,100005,100006],{"class":96,"line":16896},[94,100007,99731],{"class":209},[94,100009,100010],{"class":96,"line":16909},[94,100011,99736],{"class":209},[94,100013,100014],{"class":96,"line":16914},[94,100015,99741],{"class":209},[94,100017,100018],{"class":96,"line":32616},[94,100019,99746],{"class":209},[94,100021,100022],{"class":96,"line":32622},[94,100023,99751],{"class":209},[94,100025,100026],{"class":96,"line":32628},[94,100027,99756],{"class":209},[94,100029,100030],{"class":96,"line":32634},[94,100031,99761],{"class":209},[94,100033,100034],{"class":96,"line":32640},[94,100035,99766],{"class":209},[94,100037,100038],{"class":96,"line":32651},[94,100039,93905],{"class":209},[94,100041,100042,100045,100047,100049,100051],{"class":96,"line":32657},[94,100043,100044],{"class":104},"np.vsplit(aa,[",[94,100046,182],{"class":153},[94,100048,483],{"class":104},[94,100050,424],{"class":153},[94,100052,4638],{"class":104},[94,100054,100055],{"class":96,"line":32677},[94,100056,93541],{"class":163},[94,100058,100059],{"class":96,"line":32683},[94,100060,93905],{"class":209},[94,100062,100063],{"class":96,"line":32694},[94,100064,99561],{"class":209},[94,100066,100067],{"class":96,"line":32700},[94,100068,99566],{"class":209},[94,100070,100071],{"class":96,"line":32706},[94,100072,99571],{"class":209},[94,100074,100075],{"class":96,"line":32712},[94,100076,99633],{"class":209},[94,100078,100079],{"class":96,"line":32718},[94,100080,99638],{"class":209},[94,100082,100083],{"class":96,"line":32724},[94,100084,99643],{"class":209},[94,100086,100087],{"class":96,"line":32730},[94,100088,99591],{"class":209},[5108,100090,100091],{},"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":14,"searchDepth":15,"depth":15,"links":100093},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99359,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100100,"title":100101,"body":100102,"description":17,"extension":18,"meta":100596,"navigation":20,"path":100597,"seo":100598,"stem":100599,"__hash__":100600},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100103,"toc":100587},[100104,100107,100110,100135,100139,100198,100250,100254,100256,100292,100346,100348,100386,100457,100461,100466,100470,100473,100506,100509,100513,100516,100519,100522,100525,100530,100534,100537,100540,100543,100546,100551,100555,100560,100563,100584],[10,100105,100101],{"id":100106},"_9数学函数",[40,100108,100109],{},"补充回顾：python的列表推导式",[85,100111,100113],{"className":30361,"code":100112,"language":30363,"meta":14,"style":14},"[1\u002Fi for i in a]\n",[91,100114,100115],{"__ignoreMap":14},[94,100116,100117,100119,100121,100123,100126,100128,100130,100132],{"class":96,"line":97},[94,100118,995],{"class":104},[94,100120,322],{"class":153},[94,100122,689],{"class":100},[94,100124,100125],{"class":104},"i ",[94,100127,3006],{"class":100},[94,100129,9420],{"class":104},[94,100131,26026],{"class":100},[94,100133,100134],{"class":104}," a]\n",[35,100136,100138],{"id":100137},"_91-求倒数","9.1 求倒数",[85,100140,100142],{"className":30361,"code":100141,"language":30363,"meta":14,"style":14},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[91,100143,100144,100149,100177,100189],{"__ignoreMap":14},[94,100145,100146],{"class":96,"line":97},[94,100147,100148],{"class":163},"#数组求倒数\n",[94,100150,100151,100153,100155,100157,100159,100161,100163,100165,100167,100169,100171,100173,100175],{"class":96,"line":15},[94,100152,343],{"class":104},[94,100154,150],{"class":100},[94,100156,995],{"class":104},[94,100158,322],{"class":153},[94,100160,483],{"class":104},[94,100162,182],{"class":153},[94,100164,483],{"class":104},[94,100166,176],{"class":153},[94,100168,483],{"class":104},[94,100170,398],{"class":153},[94,100172,483],{"class":104},[94,100174,424],{"class":153},[94,100176,33229],{"class":104},[94,100178,100179,100181,100183,100186],{"class":96,"line":1160},[94,100180,368],{"class":104},[94,100182,150],{"class":100},[94,100184,100185],{"class":104},"np.array(a)",[94,100187,100188],{"class":163},"#将列表转换为数组\n",[94,100190,100191,100193,100195],{"class":96,"line":1175},[94,100192,322],{"class":153},[94,100194,689],{"class":100},[94,100196,100197],{"class":104},"b\n",[85,100199,100201],{"className":30361,"code":100200,"language":30363,"meta":14,"style":14},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[91,100202,100203,100231,100240,100245],{"__ignoreMap":14},[94,100204,100205,100207,100209,100211,100213,100215,100217,100219,100221,100223,100225,100227,100229],{"class":96,"line":97},[94,100206,343],{"class":104},[94,100208,150],{"class":100},[94,100210,995],{"class":104},[94,100212,322],{"class":153},[94,100214,483],{"class":104},[94,100216,182],{"class":153},[94,100218,483],{"class":104},[94,100220,176],{"class":153},[94,100222,483],{"class":104},[94,100224,398],{"class":153},[94,100226,483],{"class":104},[94,100228,424],{"class":153},[94,100230,33229],{"class":104},[94,100232,100233,100235,100237],{"class":96,"line":15},[94,100234,368],{"class":104},[94,100236,150],{"class":100},[94,100238,100239],{"class":104},"np.array(a)\n",[94,100241,100242],{"class":96,"line":1160},[94,100243,100244],{"class":163},"#调用numpy中的函数reciprocal()\n",[94,100246,100247],{"class":96,"line":1175},[94,100248,100249],{"class":104},"np.reciprocal(b)\n",[35,100251,100253],{"id":100252},"_92-求平方","9.2 求平方",[40,100255,94507],{},[85,100257,100259],{"className":30361,"code":100258,"language":30363,"meta":14,"style":14},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[91,100260,100261,100266,100271,100287],{"__ignoreMap":14},[94,100262,100263],{"class":96,"line":97},[94,100264,100265],{"class":163},"#square()，求平方\n",[94,100267,100268],{"class":96,"line":15},[94,100269,100270],{"class":163},"#一维数组\n",[94,100272,100273,100275,100277,100279,100281,100283,100285],{"class":96,"line":1160},[94,100274,343],{"class":104},[94,100276,150],{"class":100},[94,100278,92979],{"class":104},[94,100280,322],{"class":153},[94,100282,483],{"class":104},[94,100284,551],{"class":153},[94,100286,111],{"class":104},[94,100288,100289],{"class":96,"line":1175},[94,100290,100291],{"class":104},"np.square(a)\n",[85,100293,100295],{"className":30361,"code":100294,"language":30363,"meta":14,"style":14},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[91,100296,100297,100302,100307,100328],{"__ignoreMap":14},[94,100298,100299],{"class":96,"line":97},[94,100300,100301],{"class":163},"#或者通过循环遍历的形式来计算\n",[94,100303,100304],{"class":96,"line":15},[94,100305,100306],{"class":163},"#这是一个列表\n",[94,100308,100309,100312,100314,100316,100318,100320,100322,100325],{"class":96,"line":1160},[94,100310,100311],{"class":104},"[i",[94,100313,560],{"class":100},[94,100315,100125],{"class":104},[94,100317,3006],{"class":100},[94,100319,9420],{"class":104},[94,100321,26026],{"class":100},[94,100323,100324],{"class":104}," a]",[94,100326,100327],{"class":163},"#这个求完之后在数列当中\n",[94,100329,100330,100333,100335,100337,100339,100341,100343],{"class":96,"line":1175},[94,100331,100332],{"class":104},"np.array([i",[94,100334,560],{"class":100},[94,100336,100125],{"class":104},[94,100338,3006],{"class":100},[94,100340,9420],{"class":104},[94,100342,26026],{"class":100},[94,100344,100345],{"class":104}," a])\n",[40,100347,93268],{},[85,100349,100351],{"className":30361,"code":100350,"language":30363,"meta":14,"style":14},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[91,100352,100353,100357,100381],{"__ignoreMap":14},[94,100354,100355],{"class":96,"line":97},[94,100356,93278],{"class":163},[94,100358,100359,100361,100363,100365,100367,100369,100371,100373,100375,100377,100379],{"class":96,"line":15},[94,100360,93283],{"class":104},[94,100362,150],{"class":100},[94,100364,92979],{"class":104},[94,100366,322],{"class":153},[94,100368,483],{"class":104},[94,100370,628],{"class":153},[94,100372,92984],{"class":104},[94,100374,398],{"class":153},[94,100376,483],{"class":104},[94,100378,176],{"class":153},[94,100380,111],{"class":104},[94,100382,100383],{"class":96,"line":1160},[94,100384,100385],{"class":104},"np.square(aa)\n",[85,100387,100389],{"className":30361,"code":100388,"language":30363,"meta":14,"style":14},"#传统的方式\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",[91,100390,100391,100396,100405,100421,100437,100452],{"__ignoreMap":14},[94,100392,100393],{"class":96,"line":97},[94,100394,100395],{"class":163},"#传统的方式\n",[94,100397,100398,100400,100402],{"class":96,"line":15},[94,100399,98164],{"class":104},[94,100401,150],{"class":100},[94,100403,100404],{"class":104},"np.empty_like(aa)\n",[94,100406,100407,100409,100411,100413,100415,100417,100419],{"class":96,"line":1160},[94,100408,3006],{"class":100},[94,100410,9420],{"class":104},[94,100412,26026],{"class":100},[94,100414,32426],{"class":153},[94,100416,105],{"class":104},[94,100418,398],{"class":153},[94,100420,30769],{"class":104},[94,100422,100423,100425,100427,100429,100431,100433,100435],{"class":96,"line":1175},[94,100424,3182],{"class":100},[94,100426,9482],{"class":104},[94,100428,26026],{"class":100},[94,100430,32426],{"class":153},[94,100432,105],{"class":104},[94,100434,176],{"class":153},[94,100436,30769],{"class":104},[94,100438,100439,100442,100444,100447,100449],{"class":96,"line":1181},[94,100440,100441],{"class":104},"        bb[i,j]",[94,100443,150],{"class":100},[94,100445,100446],{"class":104},"aa[i,j]",[94,100448,560],{"class":100},[94,100450,100451],{"class":104},"aa[i,j]\n",[94,100453,100454],{"class":96,"line":1195},[94,100455,100456],{"class":104},"bb\n",[35,100458,100460],{"id":100459},"_93-求各元素的符号","9.3 求各元素的符号",[40,100462,100463],{},[1443,100464],{"alt":14,"src":100465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[35,100467,100469],{"id":100468},"_94-modf函数","9.4 modf函数",[40,100471,100472],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[85,100474,100476],{"className":30361,"code":100475,"language":30363,"meta":14,"style":14},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[91,100477,100478,100501],{"__ignoreMap":14},[94,100479,100480,100482,100484,100486,100488,100490,100492,100494,100496,100499],{"class":96,"line":97},[94,100481,343],{"class":104},[94,100483,150],{"class":100},[94,100485,92979],{"class":104},[94,100487,637],{"class":100},[94,100489,551],{"class":153},[94,100491,483],{"class":104},[94,100493,551],{"class":153},[94,100495,483],{"class":104},[94,100497,100498],{"class":153},"0.3",[94,100500,111],{"class":104},[94,100502,100503],{"class":96,"line":15},[94,100504,100505],{"class":104},"np.modf(a)\n",[40,100507,100508],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[35,100510,100512],{"id":100511},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[40,100514,100515],{},"np.cell()",[40,100517,100518],{},"np.floor()",[40,100520,100521],{},"np.rint()",[40,100523,100524],{},"对各元素分别向上取整、向下取整、四舍五入",[40,100526,100527],{},[1443,100528],{"alt":14,"src":100529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[35,100531,100533],{"id":100532},"_96-around函数","9.6 around()函数",[40,100535,100536],{},"around()函数也可以实现对数的小数位数进行操作",[40,100538,100539],{},"其中的参数：",[40,100541,100542],{},"1.要传的数组",[40,100544,100545],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[40,100547,100548],{},[1443,100549],{"alt":14,"src":100550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[35,100552,100554],{"id":100553},"_97-三角函数","9.7 三角函数",[40,100556,100557],{},[1443,100558],{"alt":14,"src":100559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[40,100561,100562],{},"引入图像模块非常重要",[85,100564,100566],{"className":30361,"code":100565,"language":30363,"meta":14,"style":14},"from matplotlib import pyplot as plt\n",[91,100567,100568],{"__ignoreMap":14},[94,100569,100570,100572,100575,100577,100580,100582],{"class":96,"line":97},[94,100571,30720],{"class":100},[94,100573,100574],{"class":104}," matplotlib ",[94,100576,30375],{"class":100},[94,100578,100579],{"class":104}," pyplot ",[94,100581,31366],{"class":100},[94,100583,31420],{"class":104},[5108,100585,100586],{},"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":14,"searchDepth":15,"depth":15,"links":100588},[100589,100590,100591,100592,100593,100594,100595],{"id":100137,"depth":15,"text":100138},{"id":100252,"depth":15,"text":100253},{"id":100459,"depth":15,"text":100460},{"id":100468,"depth":15,"text":100469},{"id":100511,"depth":15,"text":100512},{"id":100532,"depth":15,"text":100533},{"id":100553,"depth":15,"text":100554},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100101,"description":17},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100602,"title":100603,"body":100604,"description":17,"extension":18,"meta":100608,"navigation":20,"path":100609,"seo":100610,"stem":100611,"__hash__":100612},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100605,"toc":100606},[],{"title":14,"searchDepth":15,"depth":15,"links":100607},[],{"category":50397},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100603,"description":17},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100614,"title":100615,"body":100616,"description":14,"extension":18,"meta":102624,"navigation":20,"path":102625,"seo":102626,"stem":102627,"__hash__":102628},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100617,"toc":102600},[100618,100621,100625,100628,100631,100637,100640,100663,100666,100700,100703,100744,100748,100751,100844,100847,100891,100894,100911,100914,100928,100931,100934,100979,100982,101019,101023,101026,101032,101037,101057,101061,101064,101130,101133,101151,101155,101158,101187,101197,101203,101207,101210,101216,101227,101231,101234,101264,101267,101547,101550,101553,101564,101567,101570,101592,101599,101602,101620,101623,101626,101640,101648,101651,101677,101683,101686,101689,101699,101711,101731,101740,101760,101770,101794,101807,101821,101826,101867,101884,101909,101921,101941,101947,101992,102011,102028,102041,102057,102064,102076,102085,102120,102141,102166,102179,102203,102218,102243,102246,102267,102276,102279,102290,102294,102297,102303,102315,102322,102326,102329,102341,102344,102358,102361,102371,102381,102384,102424,102427,102431,102437,102440,102454,102458,102461,102494,102498,102501,102524,102532,102535,102541,102547,102550,102553,102581,102585,102588,102594,102597],[10,100619,100615],{"id":100620},"_1环境安装与第一个-mujoco-程序",[35,100622,100624],{"id":100623},"_1目标说明","1.目标说明",[40,100626,100627],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[40,100629,100630],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[85,100632,100635],{"className":100633,"code":100634,"language":5169,"meta":14},[5167],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[91,100636,100634],{"__ignoreMap":14},[40,100638,100639],{},"需要掌握:",[48,100641,100642,100645,100648,100653,100658],{},[51,100643,100644],{},"Fedora 44 下 MuJoCo 的系统依赖",[51,100646,100647],{},"Python 虚拟环境创建",[51,100649,100650],{},[91,100651,100652],{},"mujoco.MjModel",[51,100654,100655],{},[91,100656,100657],{},"mujoco.MjData",[51,100659,100660],{},[91,100661,100662],{},"mujoco.mj_step(model, data)",[40,100664,100665],{},"MuJoCo 中最重要的两个对象:",[242,100667,100668,100678],{},[245,100669,100670],{},[248,100671,100672,100675],{},[251,100673,100674],{"align":23718},"对象",[251,100676,100677],{"align":23718},"含义",[289,100679,100680,100690],{},[248,100681,100682,100687],{},[294,100683,100684],{"align":23718},[91,100685,100686],{},"MjModel",[294,100688,100689],{"align":23718},"模型结构，来自 XML，基本不随时间变化",[248,100691,100692,100697],{},[294,100693,100694],{"align":23718},[91,100695,100696],{},"MjData",[294,100698,100699],{"align":23718},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[40,100701,100702],{},"可以先用一个类比理解：",[242,100704,100705,100715],{},[245,100706,100707],{},[248,100708,100709,100712],{},[251,100710,100711],{"align":23718},"类比",[251,100713,100714],{"align":23718},"MuJoCo 对象",[289,100716,100717,100726,100735],{},[248,100718,100719,100722],{},[294,100720,100721],{"align":23718},"游戏地图和角色配置",[294,100723,100724],{"align":23718},[91,100725,100686],{},[248,100727,100728,100731],{},[294,100729,100730],{"align":23718},"游戏运行到当前帧的状态",[294,100732,100733],{"align":23718},[91,100734,100696],{},[248,100736,100737,100740],{},[294,100738,100739],{"align":23718},"前进一帧",[294,100741,100742],{"align":23718},[91,100743,100662],{},[35,100745,100747],{"id":100746},"_2环境与依赖安装","2.环境与依赖安装",[40,100749,100750],{},"Fedora 44 系统依赖:",[85,100752,100754],{"className":23804,"code":100753,"language":23806,"meta":14,"style":14},"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",[91,100755,100756,100768,100781,100794,100804,100814,100833],{"__ignoreMap":14},[94,100757,100758,100760,100762,100764,100766],{"class":96,"line":97},[94,100759,24559],{"class":1944},[94,100761,26298],{"class":209},[94,100763,23816],{"class":209},[94,100765,26383],{"class":153},[94,100767,24661],{"class":153},[94,100769,100770,100773,100776,100779],{"class":96,"line":15},[94,100771,100772],{"class":209},"  python3",[94,100774,100775],{"class":209}," python3-pip",[94,100777,100778],{"class":209}," python3-virtualenv",[94,100780,24661],{"class":153},[94,100782,100783,100786,100789,100792],{"class":96,"line":1160},[94,100784,100785],{"class":209},"  mesa-libGL",[94,100787,100788],{"class":209}," mesa-libGLU",[94,100790,100791],{"class":209}," mesa-dri-drivers",[94,100793,24661],{"class":153},[94,100795,100796,100799,100802],{"class":96,"line":1175},[94,100797,100798],{"class":209},"  libglvnd-glx",[94,100800,100801],{"class":209}," libglvnd-opengl",[94,100803,24661],{"class":153},[94,100805,100806,100809,100812],{"class":96,"line":1181},[94,100807,100808],{"class":209},"  glfw",[94,100810,100811],{"class":209}," glfw-devel",[94,100813,24661],{"class":153},[94,100815,100816,100819,100822,100825,100828,100831],{"class":96,"line":1195},[94,100817,100818],{"class":209},"  libX11",[94,100820,100821],{"class":209}," libXcursor",[94,100823,100824],{"class":209}," libXi",[94,100826,100827],{"class":209}," libXinerama",[94,100829,100830],{"class":209}," libXrandr",[94,100832,24661],{"class":153},[94,100834,100835,100838,100841],{"class":96,"line":1201},[94,100836,100837],{"class":209},"  gcc",[94,100839,100840],{"class":209}," gcc-c++",[94,100842,100843],{"class":209}," make\n",[40,100845,100846],{},"创建 Python 环境:",[85,100848,100850],{"className":23804,"code":100849,"language":23806,"meta":14,"style":14},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[91,100851,100852,100866,100874],{"__ignoreMap":14},[94,100853,100854,100857,100860,100863],{"class":96,"line":97},[94,100855,100856],{"class":1944},"python3",[94,100858,100859],{"class":153}," -m",[94,100861,100862],{"class":209}," venv",[94,100864,100865],{"class":209}," .venv\n",[94,100867,100868,100871],{"class":96,"line":15},[94,100869,100870],{"class":153},"source",[94,100872,100873],{"class":209}," .venv\u002Fbin\u002Factivate\n",[94,100875,100876,100878,100880,100883,100885,100888],{"class":96,"line":1160},[94,100877,30363],{"class":1944},[94,100879,100859],{"class":153},[94,100881,100882],{"class":209}," pip",[94,100884,23816],{"class":209},[94,100886,100887],{"class":153}," --upgrade",[94,100889,100890],{"class":209}," pip\n",[40,100892,100893],{},"pip 安装:",[85,100895,100897],{"className":23804,"code":100896,"language":23806,"meta":14,"style":14},"pip install \"mujoco>=2.3\" numpy\n",[91,100898,100899],{"__ignoreMap":14},[94,100900,100901,100903,100905,100908],{"class":96,"line":97},[94,100902,23813],{"class":1944},[94,100904,23816],{"class":209},[94,100906,100907],{"class":209}," \"mujoco>=2.3\"",[94,100909,100910],{"class":209}," numpy\n",[40,100912,100913],{},"安装完成后，先做最小检查：",[85,100915,100917],{"className":23804,"code":100916,"language":23806,"meta":14,"style":14},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[91,100918,100919],{"__ignoreMap":14},[94,100920,100921,100923,100925],{"class":96,"line":97},[94,100922,30363],{"class":1944},[94,100924,30341],{"class":153},[94,100926,100927],{"class":209}," \"import mujoco; print(mujoco.__version__)\"\n",[40,100929,100930],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[40,100932,100933],{},"conda 安装:",[85,100935,100937],{"className":23804,"code":100936,"language":23806,"meta":14,"style":14},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[91,100938,100939,100959,100969],{"__ignoreMap":14},[94,100940,100941,100943,100945,100947,100950,100953,100956],{"class":96,"line":97},[94,100942,30313],{"class":1944},[94,100944,29159],{"class":209},[94,100946,25098],{"class":153},[94,100948,100949],{"class":209}," mujoco-study",[94,100951,100952],{"class":209}," python=",[94,100954,100955],{"class":153},"3.10",[94,100957,100958],{"class":153}," -y\n",[94,100960,100961,100963,100966],{"class":96,"line":15},[94,100962,30313],{"class":1944},[94,100964,100965],{"class":209}," activate",[94,100967,100968],{"class":209}," mujoco-study\n",[94,100970,100971,100973,100975,100977],{"class":96,"line":1160},[94,100972,23813],{"class":1944},[94,100974,23816],{"class":209},[94,100976,100907],{"class":209},[94,100978,100910],{"class":209},[40,100980,100981],{},"版本冲突说明:",[48,100983,100984,100990,101000,101009],{},[51,100985,100986,100987,28368],{},"不要安装 ",[91,100988,100989],{},"mujoco-py",[51,100991,100992,100993,100995,100996,100999],{},"如果旧项目里同时安装了 ",[91,100994,100989],{}," 和 ",[91,100997,100998],{},"mujoco","，建议新建干净虚拟环境。",[51,101001,101002,101005,101006,28368],{},[91,101003,101004],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[91,101007,101008],{},"~\u002F.mujoco\u002Fmujoco210",[51,101010,101011,101012,82516,101015,101018],{},"离屏渲染可能涉及 OpenGL 后端，",[91,101013,101014],{},"MUJOCO_GL=egl",[91,101016,101017],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[35,101020,101022],{"id":101021},"_3核心概念解释","3.核心概念解释",[40,101024,101025],{},"MuJoCo 的基本执行流程:",[85,101027,101030],{"className":101028,"code":101029,"language":5169,"meta":14},[5167],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[91,101031,101029],{"__ignoreMap":14},[40,101033,101034,101036],{},[91,101035,100686],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[40,101038,101039,101041,101042,317,101045,317,101048,317,101051,317,101054,28368],{},[91,101040,100696],{}," 存放仿真运行时状态，例如 ",[91,101043,101044],{},"data.time",[91,101046,101047],{},"data.qpos",[91,101049,101050],{},"data.qvel",[91,101052,101053],{},"data.ctrl",[91,101055,101056],{},"data.xpos",[65,101058,101060],{"id":101059},"xml-是什么","XML 是什么",[40,101062,101063],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[85,101065,101067],{"className":53044,"code":101066,"language":53046,"meta":14,"style":14},"\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",[91,101068,101069,101091,101122],{"__ignoreMap":14},[94,101070,101071,101073,101075,101077,101079,101081,101084,101086,101089],{"class":96,"line":97},[94,101072,1015],{"class":104},[94,101074,51777],{"class":51277},[94,101076,14902],{"class":1944},[94,101078,150],{"class":104},[94,101080,53468],{"class":209},[94,101082,101083],{"class":1944}," pos",[94,101085,150],{"class":104},[94,101087,101088],{"class":209},"\"0 0 1\"",[94,101090,51284],{"class":104},[94,101092,101093,101095,101098,101100,101102,101105,101107,101109,101111,101114,101116,101119],{"class":96,"line":15},[94,101094,52121],{"class":104},[94,101096,101097],{"class":51277},"geom",[94,101099,14902],{"class":1944},[94,101101,150],{"class":104},[94,101103,101104],{"class":209},"\"box_geom\"",[94,101106,53801],{"class":1944},[94,101108,150],{"class":104},[94,101110,53468],{"class":209},[94,101112,101113],{"class":1944}," size",[94,101115,150],{"class":104},[94,101117,101118],{"class":209},"\"0.1 0.1 0.1\"",[94,101120,101121],{"class":104},"\u002F>\n",[94,101123,101124,101126,101128],{"class":96,"line":1160},[94,101125,51762],{"class":104},[94,101127,51777],{"class":51277},[94,101129,51284],{"class":104},[40,101131,101132],{},"这段意思是：",[48,101134,101135,101141,101148],{},[51,101136,101137,101138,101140],{},"创建一个叫 ",[91,101139,53691],{}," 的刚体。",[51,101142,101143,101144,101147],{},"它初始放在 ",[91,101145,101146],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[51,101149,101150],{},"它里面有一个盒子形状的几何体。",[65,101152,101154],{"id":101153},"timestep-是什么","timestep 是什么",[40,101156,101157],{},"XML 里的：",[85,101159,101161],{"className":53044,"code":101160,"language":53046,"meta":14,"style":14},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[91,101162,101163],{"__ignoreMap":14},[94,101164,101165,101167,101169,101172,101174,101177,101180,101182,101185],{"class":96,"line":97},[94,101166,1015],{"class":104},[94,101168,69143],{"class":51277},[94,101170,101171],{"class":1944}," timestep",[94,101173,150],{"class":104},[94,101175,101176],{"class":209},"\"0.01\"",[94,101178,101179],{"class":1944}," gravity",[94,101181,150],{"class":104},[94,101183,101184],{"class":209},"\"0 0 -9.81\"",[94,101186,101121],{"class":104},[40,101188,101189,101190,101193,101194,101196],{},"表示每调用一次 ",[91,101191,101192],{},"mj_step","，仿真时间前进 ",[91,101195,38969],{}," 秒。循环 100 次，大约就是 1 秒：",[85,101198,101201],{"className":101199,"code":101200,"language":5169,"meta":14},[5167],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[91,101202,101200],{"__ignoreMap":14},[65,101204,101206],{"id":101205},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[40,101208,101209],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[85,101211,101214],{"className":101212,"code":101213,"language":5169,"meta":14},[5167],"x y z qw qx qy qz\n",[91,101215,101213],{"__ignoreMap":14},[40,101217,101218,101219,101222,101223,101226],{},"表示一个自由刚体的位置和姿态。其中 ",[91,101220,101221],{},"x y z"," 是位置，",[91,101224,101225],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[35,101228,101230],{"id":101229},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[40,101232,101233],{},"新建文件:",[85,101235,101237],{"className":23804,"code":101236,"language":23806,"meta":14,"style":14},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[91,101238,101239,101249,101256],{"__ignoreMap":14},[94,101240,101241,101244,101246],{"class":96,"line":97},[94,101242,101243],{"class":1944},"mkdir",[94,101245,29199],{"class":153},[94,101247,101248],{"class":209}," mujoco_tutorial\n",[94,101250,101251,101254],{"class":96,"line":15},[94,101252,101253],{"class":153},"cd",[94,101255,101248],{"class":209},[94,101257,101258,101261],{"class":96,"line":1160},[94,101259,101260],{"class":1944},"touch",[94,101262,101263],{"class":209}," ch1_first_sim.py\n",[40,101265,101266],{},"写入:",[85,101268,101270],{"className":30361,"code":101269,"language":30363,"meta":14,"style":14},"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",[91,101271,101272,101279,101283,101287,101297,101302,101307,101311,101316,101321,101325,101330,101335,101340,101345,101350,101355,101359,101363,101367,101380,101394,101404,101408,101420,101432,101444,101456,101468,101472,101489,101494,101498,101509,101520,101524,101528,101542],{"__ignoreMap":14},[94,101273,101274,101276],{"class":96,"line":97},[94,101275,30375],{"class":100},[94,101277,101278],{"class":104}," mujoco\n",[94,101280,101281],{"class":96,"line":15},[94,101282,2381],{"emptyLinePlaceholder":20},[94,101284,101285],{"class":96,"line":1160},[94,101286,2381],{"emptyLinePlaceholder":20},[94,101288,101289,101292,101294],{"class":96,"line":1175},[94,101290,101291],{"class":153},"XML",[94,101293,13546],{"class":100},[94,101295,101296],{"class":209}," \"\"\"\n",[94,101298,101299],{"class":96,"line":1181},[94,101300,101301],{"class":209},"\u003Cmujoco model=\"first_sim\">\n",[94,101303,101304],{"class":96,"line":1195},[94,101305,101306],{"class":209},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[94,101308,101309],{"class":96,"line":1201},[94,101310,2381],{"emptyLinePlaceholder":20},[94,101312,101313],{"class":96,"line":1292},[94,101314,101315],{"class":209},"  \u003Cworldbody>\n",[94,101317,101318],{"class":96,"line":1298},[94,101319,101320],{"class":209},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[94,101322,101323],{"class":96,"line":1310},[94,101324,2381],{"emptyLinePlaceholder":20},[94,101326,101327],{"class":96,"line":1593},[94,101328,101329],{"class":209},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[94,101331,101332],{"class":96,"line":1598},[94,101333,101334],{"class":209},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[94,101336,101337],{"class":96,"line":1604},[94,101338,101339],{"class":209},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[94,101341,101342],{"class":96,"line":1609},[94,101343,101344],{"class":209},"    \u003C\u002Fbody>\n",[94,101346,101347],{"class":96,"line":1623},[94,101348,101349],{"class":209},"  \u003C\u002Fworldbody>\n",[94,101351,101352],{"class":96,"line":1628},[94,101353,101354],{"class":209},"\u003C\u002Fmujoco>\n",[94,101356,101357],{"class":96,"line":1634},[94,101358,95675],{"class":209},[94,101360,101361],{"class":96,"line":1655},[94,101362,2381],{"emptyLinePlaceholder":20},[94,101364,101365],{"class":96,"line":1660},[94,101366,2381],{"emptyLinePlaceholder":20},[94,101368,101369,101371,101373,101376,101378],{"class":96,"line":1674},[94,101370,31930],{"class":100},[94,101372,1954],{"class":1944},[94,101374,101375],{"class":104},"() -> ",[94,101377,95663],{"class":153},[94,101379,3720],{"class":104},[94,101381,101382,101385,101387,101390,101392],{"class":96,"line":1679},[94,101383,101384],{"class":104},"    model ",[94,101386,150],{"class":100},[94,101388,101389],{"class":104}," mujoco.MjModel.from_xml_string(",[94,101391,101291],{"class":153},[94,101393,111],{"class":104},[94,101395,101396,101399,101401],{"class":96,"line":1708},[94,101397,101398],{"class":104},"    data ",[94,101400,150],{"class":100},[94,101402,101403],{"class":104}," mujoco.MjData(model)\n",[94,101405,101406],{"class":96,"line":1713},[94,101407,2381],{"emptyLinePlaceholder":20},[94,101409,101410,101412,101414,101417],{"class":96,"line":1730},[94,101411,31282],{"class":153},[94,101413,105],{"class":104},[94,101415,101416],{"class":209},"\"nq:\"",[94,101418,101419],{"class":104},", model.nq)\n",[94,101421,101422,101424,101426,101429],{"class":96,"line":1735},[94,101423,31282],{"class":153},[94,101425,105],{"class":104},[94,101427,101428],{"class":209},"\"nv:\"",[94,101430,101431],{"class":104},", model.nv)\n",[94,101433,101434,101436,101438,101441],{"class":96,"line":1740},[94,101435,31282],{"class":153},[94,101437,105],{"class":104},[94,101439,101440],{"class":209},"\"nu:\"",[94,101442,101443],{"class":104},", model.nu)\n",[94,101445,101446,101448,101450,101453],{"class":96,"line":1745},[94,101447,31282],{"class":153},[94,101449,105],{"class":104},[94,101451,101452],{"class":209},"\"initial time:\"",[94,101454,101455],{"class":104},", data.time)\n",[94,101457,101458,101460,101462,101465],{"class":96,"line":1759},[94,101459,31282],{"class":153},[94,101461,105],{"class":104},[94,101463,101464],{"class":209},"\"initial qpos:\"",[94,101466,101467],{"class":104},", data.qpos.copy())\n",[94,101469,101470],{"class":96,"line":1764},[94,101471,2381],{"emptyLinePlaceholder":20},[94,101473,101474,101476,101479,101481,101483,101485,101487],{"class":96,"line":2558},[94,101475,3182],{"class":100},[94,101477,101478],{"class":104}," _ ",[94,101480,26026],{"class":100},[94,101482,32426],{"class":153},[94,101484,105],{"class":104},[94,101486,416],{"class":153},[94,101488,30769],{"class":104},[94,101490,101491],{"class":96,"line":2572},[94,101492,101493],{"class":104},"        mujoco.mj_step(model, data)\n",[94,101495,101496],{"class":96,"line":2580},[94,101497,2381],{"emptyLinePlaceholder":20},[94,101499,101500,101502,101504,101507],{"class":96,"line":2585},[94,101501,31282],{"class":153},[94,101503,105],{"class":104},[94,101505,101506],{"class":209},"\"final time:\"",[94,101508,101455],{"class":104},[94,101510,101511,101513,101515,101518],{"class":96,"line":2591},[94,101512,31282],{"class":153},[94,101514,105],{"class":104},[94,101516,101517],{"class":209},"\"final qpos:\"",[94,101519,101467],{"class":104},[94,101521,101522],{"class":96,"line":2597},[94,101523,2381],{"emptyLinePlaceholder":20},[94,101525,101526],{"class":96,"line":2602},[94,101527,2381],{"emptyLinePlaceholder":20},[94,101529,101530,101532,101534,101537,101540],{"class":96,"line":7930},[94,101531,1512],{"class":100},[94,101533,31203],{"class":153},[94,101535,101536],{"class":100}," ==",[94,101538,101539],{"class":209}," \"__main__\"",[94,101541,3720],{"class":104},[94,101543,101544],{"class":96,"line":7954},[94,101545,101546],{"class":104},"    main()\n",[65,101548,101549],{"id":101549},"代码逐段解释",[40,101551,101552],{},"导入库：",[85,101554,101556],{"className":30361,"code":101555,"language":30363,"meta":14,"style":14},"import mujoco\n",[91,101557,101558],{"__ignoreMap":14},[94,101559,101560,101562],{"class":96,"line":97},[94,101561,30375],{"class":100},[94,101563,101278],{"class":104},[40,101565,101566],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[40,101568,101569],{},"定义 XML：",[85,101571,101573],{"className":30361,"code":101572,"language":30363,"meta":14,"style":14},"XML = \"\"\"\n...\n\"\"\"\n",[91,101574,101575,101583,101588],{"__ignoreMap":14},[94,101576,101577,101579,101581],{"class":96,"line":97},[94,101578,101291],{"class":153},[94,101580,13546],{"class":100},[94,101582,101296],{"class":209},[94,101584,101585],{"class":96,"line":15},[94,101586,101587],{"class":209},"...\n",[94,101589,101590],{"class":96,"line":1160},[94,101591,95675],{"class":209},[40,101593,101594,101595,101598],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[91,101596,101597],{},"freejoint"," 的方块。",[40,101600,101601],{},"编译模型：",[85,101603,101605],{"className":30361,"code":101604,"language":30363,"meta":14,"style":14},"model = mujoco.MjModel.from_xml_string(XML)\n",[91,101606,101607],{"__ignoreMap":14},[94,101608,101609,101612,101614,101616,101618],{"class":96,"line":97},[94,101610,101611],{"class":104},"model ",[94,101613,150],{"class":100},[94,101615,101389],{"class":104},[94,101617,101291],{"class":153},[94,101619,111],{"class":104},[40,101621,101622],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[40,101624,101625],{},"创建数据：",[85,101627,101629],{"className":30361,"code":101628,"language":30363,"meta":14,"style":14},"data = mujoco.MjData(model)\n",[91,101630,101631],{"__ignoreMap":14},[94,101632,101633,101636,101638],{"class":96,"line":97},[94,101634,101635],{"class":104},"data ",[94,101637,150],{"class":100},[94,101639,101403],{"class":104},[40,101641,101642,101644,101645,101647],{},[91,101643,33384],{}," 会保存仿真当前状态。刚创建时，时间是 ",[91,101646,296],{},"，方块还在初始位置。",[40,101649,101650],{},"推进仿真：",[85,101652,101654],{"className":30361,"code":101653,"language":30363,"meta":14,"style":14},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[91,101655,101656,101672],{"__ignoreMap":14},[94,101657,101658,101660,101662,101664,101666,101668,101670],{"class":96,"line":97},[94,101659,3006],{"class":100},[94,101661,101478],{"class":104},[94,101663,26026],{"class":100},[94,101665,32426],{"class":153},[94,101667,105],{"class":104},[94,101669,416],{"class":153},[94,101671,30769],{"class":104},[94,101673,101674],{"class":96,"line":15},[94,101675,101676],{"class":104},"    mujoco.mj_step(model, data)\n",[40,101678,101679,101680,101682],{},"每次 ",[91,101681,101192],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[65,101684,101685],{"id":101685},"代码逐行细讲",[40,101687,101688],{},"下面把完整代码按新手视角拆开讲。",[85,101690,101691],{"className":30361,"code":101555,"language":30363,"meta":14,"style":14},[91,101692,101693],{"__ignoreMap":14},[94,101694,101695,101697],{"class":96,"line":97},[94,101696,30375],{"class":100},[94,101698,101278],{"class":104},[40,101700,101701,101703,101704,317,101706,317,101708,28368],{},[91,101702,30375],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[91,101705,100652],{},[91,101707,100657],{},[91,101709,101710],{},"mujoco.mj_step",[85,101712,101713],{"className":30361,"code":101572,"language":30363,"meta":14,"style":14},[91,101714,101715,101723,101727],{"__ignoreMap":14},[94,101716,101717,101719,101721],{"class":96,"line":97},[94,101718,101291],{"class":153},[94,101720,13546],{"class":100},[94,101722,101296],{"class":209},[94,101724,101725],{"class":96,"line":15},[94,101726,101587],{"class":209},[94,101728,101729],{"class":96,"line":1160},[94,101730,95675],{"class":209},[40,101732,101733,101735,101736,101739],{},[91,101734,101291],{}," 是一个变量名。右边的三引号 ",[91,101737,101738],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[85,101741,101742],{"className":53044,"code":101301,"language":53046,"meta":14,"style":14},[91,101743,101744],{"__ignoreMap":14},[94,101745,101746,101748,101750,101753,101755,101758],{"class":96,"line":97},[94,101747,1015],{"class":104},[94,101749,100998],{"class":51277},[94,101751,101752],{"class":1944}," model",[94,101754,150],{"class":104},[94,101756,101757],{"class":209},"\"first_sim\"",[94,101759,51284],{"class":104},[40,101761,101762,101763,101766,101767,28368],{},"这是 XML 的根标签。",[91,101764,101765],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[91,101768,101769],{},"first_sim",[85,101771,101772],{"className":53044,"code":101160,"language":53046,"meta":14,"style":14},[91,101773,101774],{"__ignoreMap":14},[94,101775,101776,101778,101780,101782,101784,101786,101788,101790,101792],{"class":96,"line":97},[94,101777,1015],{"class":104},[94,101779,69143],{"class":51277},[94,101781,101171],{"class":1944},[94,101783,150],{"class":104},[94,101785,101176],{"class":209},[94,101787,101179],{"class":1944},[94,101789,150],{"class":104},[94,101791,101184],{"class":209},[94,101793,101121],{"class":104},[40,101795,101796,101798,101799,101802,101803,101806],{},[91,101797,69143],{}," 用来设置仿真参数。",[91,101800,101801],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[91,101804,101805],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[85,101808,101810],{"className":53044,"code":101809,"language":53046,"meta":14,"style":14},"\u003Cworldbody>\n",[91,101811,101812],{"__ignoreMap":14},[94,101813,101814,101816,101819],{"class":96,"line":97},[94,101815,1015],{"class":104},[94,101817,101818],{"class":51277},"worldbody",[94,101820,51284],{"class":104},[40,101822,101823,101825],{},[91,101824,101818],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[85,101827,101829],{"className":53044,"code":101828,"language":53046,"meta":14,"style":14},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[91,101830,101831],{"__ignoreMap":14},[94,101832,101833,101835,101837,101839,101841,101844,101846,101848,101851,101853,101855,101858,101860,101862,101865],{"class":96,"line":97},[94,101834,1015],{"class":104},[94,101836,101097],{"class":51277},[94,101838,14902],{"class":1944},[94,101840,150],{"class":104},[94,101842,101843],{"class":209},"\"floor\"",[94,101845,53801],{"class":1944},[94,101847,150],{"class":104},[94,101849,101850],{"class":209},"\"plane\"",[94,101852,101113],{"class":1944},[94,101854,150],{"class":104},[94,101856,101857],{"class":209},"\"2 2 0.1\"",[94,101859,78744],{"class":1944},[94,101861,150],{"class":104},[94,101863,101864],{"class":209},"\"0.8 0.8 0.8 1\"",[94,101866,101121],{"class":104},[40,101868,101869,101870,101872,101873,101876,101877,101880,101881,101883],{},"这行创建地面。",[91,101871,101097],{}," 是几何体。",[91,101874,101875],{},"name=\"floor\""," 是名字。",[91,101878,101879],{},"type=\"plane\""," 表示平面。",[91,101882,55087],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[85,101885,101887],{"className":53044,"code":101886,"language":53046,"meta":14,"style":14},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[91,101888,101889],{"__ignoreMap":14},[94,101890,101891,101893,101895,101897,101899,101901,101903,101905,101907],{"class":96,"line":97},[94,101892,1015],{"class":104},[94,101894,51777],{"class":51277},[94,101896,14902],{"class":1944},[94,101898,150],{"class":104},[94,101900,53468],{"class":209},[94,101902,101083],{"class":1944},[94,101904,150],{"class":104},[94,101906,101088],{"class":209},[94,101908,51284],{"class":104},[40,101910,101911,101912,28368,101914,101917,101918,101920],{},"这行创建一个刚体，名字叫 ",[91,101913,53691],{},[91,101915,101916],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[91,101919,101146],{},"，也就是离地面 1 米高。",[85,101922,101924],{"className":53044,"code":101923,"language":53046,"meta":14,"style":14},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[91,101925,101926],{"__ignoreMap":14},[94,101927,101928,101930,101932,101934,101936,101939],{"class":96,"line":97},[94,101929,1015],{"class":104},[94,101931,101597],{"class":51277},[94,101933,14902],{"class":1944},[94,101935,150],{"class":104},[94,101937,101938],{"class":209},"\"box_free\"",[94,101940,101121],{"class":104},[40,101942,101943,101944,101946],{},"这行很重要。",[91,101945,101597],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[85,101948,101950],{"className":53044,"code":101949,"language":53046,"meta":14,"style":14},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[91,101951,101952],{"__ignoreMap":14},[94,101953,101954,101956,101958,101960,101962,101964,101966,101968,101970,101972,101974,101976,101979,101981,101983,101985,101987,101990],{"class":96,"line":97},[94,101955,1015],{"class":104},[94,101957,101097],{"class":51277},[94,101959,14902],{"class":1944},[94,101961,150],{"class":104},[94,101963,101104],{"class":209},[94,101965,53801],{"class":1944},[94,101967,150],{"class":104},[94,101969,53468],{"class":209},[94,101971,101113],{"class":1944},[94,101973,150],{"class":104},[94,101975,101118],{"class":209},[94,101977,101978],{"class":1944}," mass",[94,101980,150],{"class":104},[94,101982,3659],{"class":209},[94,101984,78744],{"class":1944},[94,101986,150],{"class":104},[94,101988,101989],{"class":209},"\"1 0 0 1\"",[94,101991,101121],{"class":104},[40,101993,101994,101995,101998,101999,102002,102003,102006,102007,102010],{},"这行给 box body 添加一个盒子形状。",[91,101996,101997],{},"type=\"box\""," 表示形状是盒子。",[91,102000,102001],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[91,102004,102005],{},"mass=\"1\""," 表示质量是 1。",[91,102008,102009],{},"rgba=\"1 0 0 1\""," 表示红色。",[85,102012,102014],{"className":30361,"code":102013,"language":30363,"meta":14,"style":14},"def main() -> None:\n",[91,102015,102016],{"__ignoreMap":14},[94,102017,102018,102020,102022,102024,102026],{"class":96,"line":97},[94,102019,31930],{"class":100},[94,102021,1954],{"class":1944},[94,102023,101375],{"class":104},[94,102025,95663],{"class":153},[94,102027,3720],{"class":104},[40,102029,102030,102032,102033,102036,102037,102040],{},[91,102031,31930],{}," 用来定义函数。这里定义了一个叫 ",[91,102034,102035],{},"main"," 的函数。",[91,102038,102039],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[85,102042,102043],{"className":30361,"code":101604,"language":30363,"meta":14,"style":14},[91,102044,102045],{"__ignoreMap":14},[94,102046,102047,102049,102051,102053,102055],{"class":96,"line":97},[94,102048,101611],{"class":104},[94,102050,150],{"class":100},[94,102052,101389],{"class":104},[94,102054,101291],{"class":153},[94,102056,111],{"class":104},[40,102058,102059,102060,102063],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[91,102061,102062],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[85,102065,102066],{"className":30361,"code":101628,"language":30363,"meta":14,"style":14},[91,102067,102068],{"__ignoreMap":14},[94,102069,102070,102072,102074],{"class":96,"line":97},[94,102071,101635],{"class":104},[94,102073,150],{"class":100},[94,102075,101403],{"class":104},[40,102077,102078,102079,102081,102082,102084],{},"这行创建仿真数据。",[91,102080,33384],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[91,102083,33384],{}," 都会变化。",[85,102086,102088],{"className":30361,"code":102087,"language":30363,"meta":14,"style":14},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[91,102089,102090,102100,102110],{"__ignoreMap":14},[94,102091,102092,102094,102096,102098],{"class":96,"line":97},[94,102093,30398],{"class":153},[94,102095,105],{"class":104},[94,102097,101416],{"class":209},[94,102099,101419],{"class":104},[94,102101,102102,102104,102106,102108],{"class":96,"line":15},[94,102103,30398],{"class":153},[94,102105,105],{"class":104},[94,102107,101428],{"class":209},[94,102109,101431],{"class":104},[94,102111,102112,102114,102116,102118],{"class":96,"line":1160},[94,102113,30398],{"class":153},[94,102115,105],{"class":104},[94,102117,101440],{"class":209},[94,102119,101443],{"class":104},[40,102121,102122,102124,102125,102128,102129,102132,102133,102136,102137,102140],{},[91,102123,30398],{}," 用来输出信息。",[91,102126,102127],{},"model.nq"," 是位置变量数量，",[91,102130,102131],{},"model.nv"," 是速度变量数量，",[91,102134,102135],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[91,102138,102139],{},"nu"," 是 0。",[85,102142,102144],{"className":30361,"code":102143,"language":30363,"meta":14,"style":14},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[91,102145,102146,102156],{"__ignoreMap":14},[94,102147,102148,102150,102152,102154],{"class":96,"line":97},[94,102149,30398],{"class":153},[94,102151,105],{"class":104},[94,102153,101452],{"class":209},[94,102155,101455],{"class":104},[94,102157,102158,102160,102162,102164],{"class":96,"line":15},[94,102159,30398],{"class":153},[94,102161,105],{"class":104},[94,102163,101464],{"class":209},[94,102165,101467],{"class":104},[40,102167,102168,102169,102171,102172,102174,102175,102178],{},"这里打印初始时间和初始位置。",[91,102170,101044],{}," 一开始是 0。",[91,102173,101047],{}," 是位置数组。",[91,102176,102177],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[85,102180,102181],{"className":30361,"code":101653,"language":30363,"meta":14,"style":14},[91,102182,102183,102199],{"__ignoreMap":14},[94,102184,102185,102187,102189,102191,102193,102195,102197],{"class":96,"line":97},[94,102186,3006],{"class":100},[94,102188,101478],{"class":104},[94,102190,26026],{"class":100},[94,102192,32426],{"class":153},[94,102194,105],{"class":104},[94,102196,416],{"class":153},[94,102198,30769],{"class":104},[94,102200,102201],{"class":96,"line":15},[94,102202,101676],{"class":104},[40,102204,102205,102207,102208,102211,102212,102214,102215,102217],{},[91,102206,3006],{}," 是循环。",[91,102209,102210],{},"range(100)"," 表示循环 100 次。",[91,102213,1097],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[91,102216,101192],{},"，仿真就前进一步。",[85,102219,102221],{"className":30361,"code":102220,"language":30363,"meta":14,"style":14},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[91,102222,102223,102233],{"__ignoreMap":14},[94,102224,102225,102227,102229,102231],{"class":96,"line":97},[94,102226,30398],{"class":153},[94,102228,105],{"class":104},[94,102230,101506],{"class":209},[94,102232,101455],{"class":104},[94,102234,102235,102237,102239,102241],{"class":96,"line":15},[94,102236,30398],{"class":153},[94,102238,105],{"class":104},[94,102240,101517],{"class":209},[94,102242,101467],{"class":104},[40,102244,102245],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[85,102247,102249],{"className":30361,"code":102248,"language":30363,"meta":14,"style":14},"if __name__ == \"__main__\":\n    main()\n",[91,102250,102251,102263],{"__ignoreMap":14},[94,102252,102253,102255,102257,102259,102261],{"class":96,"line":97},[94,102254,1512],{"class":100},[94,102256,31203],{"class":153},[94,102258,101536],{"class":100},[94,102260,101539],{"class":209},[94,102262,3720],{"class":104},[94,102264,102265],{"class":96,"line":15},[94,102266,101546],{"class":104},[40,102268,102269,102270,102273,102274,28368],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[91,102271,102272],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[91,102275,102272],{},[40,102277,102278],{},"运行:",[85,102280,102282],{"className":23804,"code":102281,"language":23806,"meta":14,"style":14},"python ch1_first_sim.py\n",[91,102283,102284],{"__ignoreMap":14},[94,102285,102286,102288],{"class":96,"line":97},[94,102287,30363],{"class":1944},[94,102289,101263],{"class":209},[35,102291,102293],{"id":102292},"_5运行结果说明","5.运行结果说明",[40,102295,102296],{},"你应该看到类似输出:",[85,102298,102301],{"className":102299,"code":102300,"language":5169,"meta":14},[5167],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[91,102302,102300],{"__ignoreMap":14},[40,102304,102305,102307,102308,102311,102312,28368],{},[91,102306,101597],{}," 有 7 个位置变量: ",[91,102309,102310],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[91,102313,102314],{},"vx vy vz wx wy wz",[40,102316,102317,102318,102321],{},"你还会看到 ",[91,102319,102320],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[35,102323,102325],{"id":102324},"_6验证步骤","6.验证步骤",[40,102327,102328],{},"确认版本:",[85,102330,102331],{"className":23804,"code":100916,"language":23806,"meta":14,"style":14},[91,102332,102333],{"__ignoreMap":14},[94,102334,102335,102337,102339],{"class":96,"line":97},[94,102336,30363],{"class":1944},[94,102338,30341],{"class":153},[94,102340,100927],{"class":209},[40,102342,102343],{},"确认导入的是官方 bindings:",[85,102345,102347],{"className":23804,"code":102346,"language":23806,"meta":14,"style":14},"python -c \"import mujoco; print(mujoco)\"\n",[91,102348,102349],{"__ignoreMap":14},[94,102350,102351,102353,102355],{"class":96,"line":97},[94,102352,30363],{"class":1944},[94,102354,30341],{"class":153},[94,102356,102357],{"class":209}," \"import mujoco; print(mujoco)\"\n",[40,102359,102360],{},"运行程序:",[85,102362,102363],{"className":23804,"code":102281,"language":23806,"meta":14,"style":14},[91,102364,102365],{"__ignoreMap":14},[94,102366,102367,102369],{"class":96,"line":97},[94,102368,30363],{"class":1944},[94,102370,101263],{"class":209},[40,102372,102373,102374,102377,102378,28368],{},"检查 ",[91,102375,102376],{},"final time"," 是否约等于 ",[91,102379,102380],{},"1.0",[40,102382,102383],{},"再做几个小实验：",[48,102385,102386,102396,102404,102417],{},[51,102387,102388,102389,102391,102392,102395],{},"把 ",[91,102390,101916],{}," 改成 ",[91,102393,102394],{},"pos=\"0 0 2\"","，观察初始高度变化。",[51,102397,102388,102398,102391,102400,102403],{},[91,102399,101805],{},[91,102401,102402],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[51,102405,102388,102406,102391,102408,102411,102412,102414,102415,28368],{},[91,102407,101801],{},[91,102409,102410],{},"timestep=\"0.005\"","，观察 100 步后的 ",[91,102413,102376],{}," 是否变成约 ",[91,102416,35312],{},[51,102418,102419,102420,102423],{},"删除 ",[91,102421,102422],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[40,102425,102426],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[35,102428,102430],{"id":102429},"_7常见错误与解决方案","7.常见错误与解决方案",[65,102432,102434],{"id":102433},"modulenotfounderror-no-module-named-mujoco",[91,102435,102436],{},"ModuleNotFoundError: No module named 'mujoco'",[40,102438,102439],{},"解决:",[85,102441,102443],{"className":23804,"code":102442,"language":23806,"meta":14,"style":14},"pip install \"mujoco>=2.3\"\n",[91,102444,102445],{"__ignoreMap":14},[94,102446,102447,102449,102451],{"class":96,"line":97},[94,102448,23813],{"class":1944},[94,102450,23816],{"class":209},[94,102452,102453],{"class":209}," \"mujoco>=2.3\"\n",[65,102455,102457],{"id":102456},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[40,102459,102460],{},"先安装系统依赖:",[85,102462,102464],{"className":23804,"code":102463,"language":23806,"meta":14,"style":14},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[91,102465,102466],{"__ignoreMap":14},[94,102467,102468,102470,102472,102474,102476,102479,102481,102484,102486,102489,102491],{"class":96,"line":97},[94,102469,24559],{"class":1944},[94,102471,26298],{"class":209},[94,102473,23816],{"class":209},[94,102475,26383],{"class":153},[94,102477,102478],{"class":209}," mesa-libGL",[94,102480,100791],{"class":209},[94,102482,102483],{"class":209}," glfw",[94,102485,100811],{"class":209},[94,102487,102488],{"class":209}," libX11",[94,102490,100824],{"class":209},[94,102492,102493],{"class":209}," libXrandr\n",[65,102495,102497],{"id":102496},"xml-解析失败","XML 解析失败",[40,102499,102500],{},"检查:",[48,102502,102503,102506,102509,102515],{},[51,102504,102505],{},"标签是否闭合",[51,102507,102508],{},"属性是否带引号",[51,102510,102511,102512],{},"根节点是否是 ",[91,102513,102514],{},"\u003Cmujoco>",[51,102516,102517,102519,102520,102523],{},[91,102518,51777],{}," 是否放在 ",[91,102521,102522],{},"\u003Cworldbody>"," 内部",[65,102525,102527,102529,102530],{"id":102526},"final-time-不是严格等于-10",[91,102528,102376],{}," 不是严格等于 ",[91,102531,102380],{},[40,102533,102534],{},"这通常不是错误。浮点数计算可能得到：",[85,102536,102539],{"className":102537,"code":102538,"language":5169,"meta":14},[5167],"1.0000000000000007\n",[91,102540,102538],{"__ignoreMap":14},[40,102542,102543,102544,102546],{},"只要接近 ",[91,102545,102380],{}," 就正常。",[65,102548,102549],{"id":102549},"方块没有掉下来",[40,102551,102552],{},"检查：",[48,102554,102555,102561,102567,102572],{},[51,102556,102557,102558],{},"方块 body 里是否有 ",[91,102559,102560],{},"\u003Cfreejoint\u002F>",[51,102562,102563,102564],{},"重力是否是 ",[91,102565,102566],{},"0 0 -9.81",[51,102568,102569,102570],{},"是否真的调用了 ",[91,102571,100662],{},[51,102573,102574,102575,102577,102578],{},"你看的是否是 ",[91,102576,102320],{},"，不是 ",[91,102579,102580],{},"initial qpos",[35,102582,102584],{"id":102583},"_8本章小结","8.本章小结",[40,102586,102587],{},"本章你已经完成了 MuJoCo 的最小闭环：",[85,102589,102592],{"className":102590,"code":102591,"language":5169,"meta":14},[5167],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[91,102593,102591],{"__ignoreMap":14},[40,102595,102596],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5108,102598,102599],{},"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":14,"searchDepth":15,"depth":15,"links":102601},[102602,102603,102604,102609,102613,102614,102615,102623],{"id":100623,"depth":15,"text":100624},{"id":100746,"depth":15,"text":100747},{"id":101021,"depth":15,"text":101022,"children":102605},[102606,102607,102608],{"id":101059,"depth":1160,"text":101060},{"id":101153,"depth":1160,"text":101154},{"id":101205,"depth":1160,"text":101206},{"id":101229,"depth":15,"text":101230,"children":102610},[102611,102612],{"id":101549,"depth":1160,"text":101549},{"id":101685,"depth":1160,"text":101685},{"id":102292,"depth":15,"text":102293},{"id":102324,"depth":15,"text":102325},{"id":102429,"depth":15,"text":102430,"children":102616},[102617,102618,102619,102620,102622],{"id":102433,"depth":1160,"text":102436},{"id":102456,"depth":1160,"text":102457},{"id":102496,"depth":1160,"text":102497},{"id":102526,"depth":1160,"text":102621},"final time 不是严格等于 1.0",{"id":102549,"depth":1160,"text":102549},{"id":102583,"depth":15,"text":102584},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100615,"description":14},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102630,"title":102631,"body":102632,"description":14,"extension":18,"meta":104288,"navigation":20,"path":104289,"seo":104290,"stem":104291,"__hash__":104292},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102633,"toc":104264},[102634,102637,102639,102642,102645,102662,102757,102760,102766,102768,102770,102794,102797,102811,102814,102855,102857,102870,102872,102875,102923,102935,102938,102941,102947,102960,103027,103030,103049,103052,103055,103061,103063,103072,103075,103079,103088,103170,103179,103183,103189,103203,103213,103215,103545,103548,103560,103562,103573,103575,103578,103596,103599,103602,103620,103631,103634,103649,103659,103661,103682,103699,103719,103725,103765,103781,103797,103803,103806,103830,103846,103851,103881,103898,103923,103926,103941,103950,103965,103974,103989,103996,103998,104008,104021,104028,104031,104070,104077,104079,104131,104133,104139,104142,104149,104156,104159,104161,104179,104182,104185,104219,104231,104233,104236,104258,104261],[10,102635,102631],{"id":102636},"_2xml-与-mjcf-物理建模基础",[35,102638,100624],{"id":100623},[40,102640,102641],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[40,102643,102644],{},"本章结束后，你应该能看懂一个简单模型里：",[48,102646,102647,102650,102653,102656,102659],{},[51,102648,102649],{},"地面在哪里。",[51,102651,102652],{},"物体初始位置在哪里。",[51,102654,102655],{},"几何体是什么形状。",[51,102657,102658],{},"哪些 body 可以自由运动。",[51,102660,102661],{},"如何用名字在 Python 里找到 XML 中的对象。",[242,102663,102664,102674],{},[245,102665,102666],{},[248,102667,102668,102671],{},[251,102669,102670],{"align":23718},"标签",[251,102672,102673],{"align":23718},"作用",[289,102675,102676,102685,102695,102704,102714,102724,102737,102747],{},[248,102677,102678,102682],{},[294,102679,102680],{"align":23718},[91,102681,102514],{},[294,102683,102684],{"align":23718},"根节点",[248,102686,102687,102692],{},[294,102688,102689],{"align":23718},[91,102690,102691],{},"\u003Coption>",[294,102693,102694],{"align":23718},"仿真参数",[248,102696,102697,102701],{},[294,102698,102699],{"align":23718},[91,102700,102522],{},[294,102702,102703],{"align":23718},"世界中的物体",[248,102705,102706,102711],{},[294,102707,102708],{"align":23718},[91,102709,102710],{},"\u003Cbody>",[294,102712,102713],{"align":23718},"刚体",[248,102715,102716,102721],{},[294,102717,102718],{"align":23718},[91,102719,102720],{},"\u003Cgeom>",[294,102722,102723],{"align":23718},"几何体、碰撞体、可视体",[248,102725,102726,102734],{},[294,102727,102728,24961,102731],{"align":23718},[91,102729,102730],{},"\u003Cjoint>",[91,102732,102733],{},"\u003Cfreejoint>",[294,102735,102736],{"align":23718},"关节",[248,102738,102739,102744],{},[294,102740,102741],{"align":23718},[91,102742,102743],{},"\u003Csite>",[294,102745,102746],{"align":23718},"标记点",[248,102748,102749,102754],{},[294,102750,102751],{"align":23718},[91,102752,102753],{},"\u003Cactuator>",[294,102755,102756],{"align":23718},"控制器",[40,102758,102759],{},"初学时可以先记住：",[85,102761,102764],{"className":102762,"code":102763,"language":5169,"meta":14},[5167],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[91,102765,102763],{"__ignoreMap":14},[35,102767,100747],{"id":100746},[40,102769,100750],{},[85,102771,102773],{"className":23804,"code":102772,"language":23806,"meta":14,"style":14},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[91,102774,102775],{"__ignoreMap":14},[94,102776,102777,102779,102781,102783,102785,102787,102789,102791],{"class":96,"line":97},[94,102778,24559],{"class":1944},[94,102780,26298],{"class":209},[94,102782,23816],{"class":209},[94,102784,26383],{"class":153},[94,102786,102478],{"class":209},[94,102788,100791],{"class":209},[94,102790,102483],{"class":209},[94,102792,102793],{"class":209}," glfw-devel\n",[40,102795,102796],{},"pip:",[85,102798,102799],{"className":23804,"code":100896,"language":23806,"meta":14,"style":14},[91,102800,102801],{"__ignoreMap":14},[94,102802,102803,102805,102807,102809],{"class":96,"line":97},[94,102804,23813],{"class":1944},[94,102806,23816],{"class":209},[94,102808,100907],{"class":209},[94,102810,100910],{"class":209},[40,102812,102813],{},"conda:",[85,102815,102817],{"className":23804,"code":102816,"language":23806,"meta":14,"style":14},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[91,102818,102819,102836,102845],{"__ignoreMap":14},[94,102820,102821,102823,102825,102827,102830,102832,102834],{"class":96,"line":97},[94,102822,30313],{"class":1944},[94,102824,29159],{"class":209},[94,102826,25098],{"class":153},[94,102828,102829],{"class":209}," mujoco-xml",[94,102831,100952],{"class":209},[94,102833,100955],{"class":153},[94,102835,100958],{"class":153},[94,102837,102838,102840,102842],{"class":96,"line":15},[94,102839,30313],{"class":1944},[94,102841,100965],{"class":209},[94,102843,102844],{"class":209}," mujoco-xml\n",[94,102846,102847,102849,102851,102853],{"class":96,"line":1160},[94,102848,23813],{"class":1944},[94,102850,23816],{"class":209},[94,102852,100907],{"class":209},[94,102854,100910],{"class":209},[40,102856,100981],{},[48,102858,102859,102862,102867],{},[51,102860,102861],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[51,102863,102864,102865,28368],{},"本章使用基础标签，适用于 ",[91,102866,101004],{},[51,102868,102869],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[35,102871,101022],{"id":101021},[40,102873,102874],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[85,102876,102878],{"className":53044,"code":102877,"language":53046,"meta":14,"style":14},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[91,102879,102880,102894,102902,102907,102915],{"__ignoreMap":14},[94,102881,102882,102884,102886,102888,102890,102892],{"class":96,"line":97},[94,102883,1015],{"class":104},[94,102885,100998],{"class":51277},[94,102887,101752],{"class":1944},[94,102889,150],{"class":104},[94,102891,62656],{"class":209},[94,102893,51284],{"class":104},[94,102895,102896,102898,102900],{"class":96,"line":15},[94,102897,52121],{"class":104},[94,102899,101818],{"class":51277},[94,102901,51284],{"class":104},[94,102903,102904],{"class":96,"line":1160},[94,102905,102906],{"class":104},"    ...\n",[94,102908,102909,102911,102913],{"class":96,"line":1175},[94,102910,52394],{"class":104},[94,102912,101818],{"class":51277},[94,102914,51284],{"class":104},[94,102916,102917,102919,102921],{"class":96,"line":1181},[94,102918,51762],{"class":104},[94,102920,100998],{"class":51277},[94,102922,51284],{"class":104},[40,102924,102925,102927,102928,102930,102931,102934],{},[91,102926,51777],{}," 表示刚体。",[91,102929,101097],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[91,102932,102933],{},"joint"," 表示刚体相对父刚体如何运动。",[65,102936,102937],{"id":102937},"层级结构非常重要",[40,102939,102940],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[85,102942,102945],{"className":102943,"code":102944,"language":5169,"meta":14},[5167],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[91,102946,102944],{"__ignoreMap":14},[40,102948,102949,100995,102952,102955,102956,102959],{},[91,102950,102951],{},"red_box_geom",[91,102953,102954],{},"box_center"," 都属于 ",[91,102957,102958],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[85,102961,102963],{"className":53044,"code":102962,"language":53046,"meta":14,"style":14},"\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",[91,102964,102965,102985,102999,103019],{"__ignoreMap":14},[94,102966,102967,102969,102971,102973,102975,102977,102979,102981,102983],{"class":96,"line":97},[94,102968,1015],{"class":104},[94,102970,51777],{"class":51277},[94,102972,14902],{"class":1944},[94,102974,150],{"class":104},[94,102976,53468],{"class":209},[94,102978,101083],{"class":1944},[94,102980,150],{"class":104},[94,102982,101088],{"class":209},[94,102984,51284],{"class":104},[94,102986,102987,102989,102991,102993,102995,102997],{"class":96,"line":15},[94,102988,52121],{"class":104},[94,102990,101597],{"class":51277},[94,102992,14902],{"class":1944},[94,102994,150],{"class":104},[94,102996,101938],{"class":209},[94,102998,101121],{"class":104},[94,103000,103001,103003,103005,103007,103009,103011,103013,103015,103017],{"class":96,"line":1160},[94,103002,52121],{"class":104},[94,103004,101097],{"class":51277},[94,103006,53801],{"class":1944},[94,103008,150],{"class":104},[94,103010,53468],{"class":209},[94,103012,101113],{"class":1944},[94,103014,150],{"class":104},[94,103016,101118],{"class":209},[94,103018,101121],{"class":104},[94,103020,103021,103023,103025],{"class":96,"line":1175},[94,103022,51762],{"class":104},[94,103024,51777],{"class":51277},[94,103026,51284],{"class":104},[40,103028,103029],{},"含义:",[48,103031,103032,103038,103043,103046],{},[51,103033,103034,103035,103037],{},"创建名为 ",[91,103036,53691],{}," 的刚体",[51,103039,103040,103041],{},"初始位置在世界坐标 ",[91,103042,101146],{},[51,103044,103045],{},"它有一个自由关节",[51,103047,103048],{},"它有一个盒子几何体",[65,103050,103051],{"id":103051},"坐标怎么理解",[40,103053,103054],{},"MuJoCo 默认使用三维坐标：",[85,103056,103059],{"className":103057,"code":103058,"language":5169,"meta":14},[5167],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[91,103060,103058],{"__ignoreMap":14},[40,103062,14615],{},[85,103064,103066],{"className":53044,"code":103065,"language":53046,"meta":14,"style":14},"pos=\"0 0 1\"\n",[91,103067,103068],{"__ignoreMap":14},[94,103069,103070],{"class":96,"line":97},[94,103071,103065],{"class":104},[40,103073,103074],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[65,103076,103078],{"id":103077},"geom-的-size-怎么理解","geom 的 size 怎么理解",[40,103080,103081,103082,82507,103085,103087],{},"不同 ",[91,103083,103084],{},"type",[91,103086,31479],{}," 含义不同：",[242,103089,103090,103105],{},[245,103091,103092],{},[248,103093,103094,103098,103103],{},[251,103095,103096],{"align":23718},[91,103097,103084],{},[251,103099,103100,103102],{"align":23718},[91,103101,31479],{}," 示例",[251,103104,100677],{"align":23718},[289,103106,103107,103121,103136,103155],{},[248,103108,103109,103113,103118],{},[294,103110,103111],{"align":23718},[91,103112,53691],{},[294,103114,103115],{"align":23718},[91,103116,103117],{},"size=\"0.1 0.2 0.3\"",[294,103119,103120],{"align":23718},"x\u002Fy\u002Fz 半边长，不是完整长度",[248,103122,103123,103128,103133],{},[294,103124,103125],{"align":23718},[91,103126,103127],{},"sphere",[294,103129,103130],{"align":23718},[91,103131,103132],{},"size=\"0.1\"",[294,103134,103135],{"align":23718},"球半径",[248,103137,103138,103143,103148],{},[294,103139,103140],{"align":23718},[91,103141,103142],{},"capsule",[294,103144,103145],{"align":23718},[91,103146,103147],{},"size=\"0.03\"",[294,103149,103150,103151,103154],{"align":23718},"胶囊半径，长度常用 ",[91,103152,103153],{},"fromto"," 指定",[248,103156,103157,103162,103167],{},[294,103158,103159],{"align":23718},[91,103160,103161],{},"plane",[294,103163,103164],{"align":23718},[91,103165,103166],{},"size=\"3 3 0.1\"",[294,103168,103169],{"align":23718},"可视平面大小，通常当地面",[40,103171,103172,103173,103175,103176,103178],{},"最容易踩坑的是 box：",[91,103174,102001],{}," 表示边长大约是 ",[91,103177,32020],{},"，因为 MuJoCo 用的是半边长。",[65,103180,103182],{"id":103181},"site-是什么","site 是什么",[40,103184,103185,103188],{},[91,103186,103187],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[48,103190,103191,103194,103197,103200],{},[51,103192,103193],{},"标记机械臂末端。",[51,103195,103196],{},"标记目标位置。",[51,103198,103199],{},"放传感器或相机参考点。",[51,103201,103202],{},"在 Python 中读取某个关键点的世界坐标。",[40,103204,103205,103206,100995,103209,103212],{},"在后面的 Reacher 任务中，",[91,103207,103208],{},"tip",[91,103210,103211],{},"target"," 就会用 site 表示。",[35,103214,101230],{"id":101229},[85,103216,103218],{"className":30361,"code":103217,"language":30363,"meta":14,"style":14},"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",[91,103219,103220,103226,103236,103240,103244,103252,103257,103261,103265,103269,103274,103278,103283,103288,103293,103298,103302,103306,103310,103314,103318,103322,103334,103346,103354,103358,103373,103388,103392,103405,103420,103433,103446,103450,103466,103470,103474,103485,103497,103509,103521,103525,103529,103541],{"__ignoreMap":14},[94,103221,103222,103224],{"class":96,"line":97},[94,103223,30375],{"class":100},[94,103225,101278],{"class":104},[94,103227,103228,103230,103232,103234],{"class":96,"line":15},[94,103229,30375],{"class":100},[94,103231,31363],{"class":104},[94,103233,31366],{"class":100},[94,103235,31369],{"class":104},[94,103237,103238],{"class":96,"line":1160},[94,103239,2381],{"emptyLinePlaceholder":20},[94,103241,103242],{"class":96,"line":1175},[94,103243,2381],{"emptyLinePlaceholder":20},[94,103245,103246,103248,103250],{"class":96,"line":1181},[94,103247,101291],{"class":153},[94,103249,13546],{"class":100},[94,103251,101296],{"class":209},[94,103253,103254],{"class":96,"line":1195},[94,103255,103256],{"class":209},"\u003Cmujoco model=\"xml_basic\">\n",[94,103258,103259],{"class":96,"line":1201},[94,103260,101306],{"class":209},[94,103262,103263],{"class":96,"line":1292},[94,103264,2381],{"emptyLinePlaceholder":20},[94,103266,103267],{"class":96,"line":1298},[94,103268,101315],{"class":209},[94,103270,103271],{"class":96,"line":1310},[94,103272,103273],{"class":209},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[94,103275,103276],{"class":96,"line":1593},[94,103277,2381],{"emptyLinePlaceholder":20},[94,103279,103280],{"class":96,"line":1598},[94,103281,103282],{"class":209},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[94,103284,103285],{"class":96,"line":1604},[94,103286,103287],{"class":209},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[94,103289,103290],{"class":96,"line":1609},[94,103291,103292],{"class":209},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[94,103294,103295],{"class":96,"line":1623},[94,103296,103297],{"class":209},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[94,103299,103300],{"class":96,"line":1628},[94,103301,101344],{"class":209},[94,103303,103304],{"class":96,"line":1634},[94,103305,101349],{"class":209},[94,103307,103308],{"class":96,"line":1655},[94,103309,101354],{"class":209},[94,103311,103312],{"class":96,"line":1660},[94,103313,95675],{"class":209},[94,103315,103316],{"class":96,"line":1674},[94,103317,2381],{"emptyLinePlaceholder":20},[94,103319,103320],{"class":96,"line":1679},[94,103321,2381],{"emptyLinePlaceholder":20},[94,103323,103324,103326,103328,103330,103332],{"class":96,"line":1708},[94,103325,31930],{"class":100},[94,103327,1954],{"class":1944},[94,103329,101375],{"class":104},[94,103331,95663],{"class":153},[94,103333,3720],{"class":104},[94,103335,103336,103338,103340,103342,103344],{"class":96,"line":1713},[94,103337,101384],{"class":104},[94,103339,150],{"class":100},[94,103341,101389],{"class":104},[94,103343,101291],{"class":153},[94,103345,111],{"class":104},[94,103347,103348,103350,103352],{"class":96,"line":1730},[94,103349,101398],{"class":104},[94,103351,150],{"class":100},[94,103353,101403],{"class":104},[94,103355,103356],{"class":96,"line":1735},[94,103357,2381],{"emptyLinePlaceholder":20},[94,103359,103360,103363,103365,103368,103371],{"class":96,"line":1740},[94,103361,103362],{"class":104},"    box_body_id ",[94,103364,150],{"class":100},[94,103366,103367],{"class":104}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[94,103369,103370],{"class":209},"\"red_box\"",[94,103372,111],{"class":104},[94,103374,103375,103378,103380,103383,103386],{"class":96,"line":1745},[94,103376,103377],{"class":104},"    site_id ",[94,103379,150],{"class":100},[94,103381,103382],{"class":104}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[94,103384,103385],{"class":209},"\"box_center\"",[94,103387,111],{"class":104},[94,103389,103390],{"class":96,"line":1759},[94,103391,2381],{"emptyLinePlaceholder":20},[94,103393,103394,103396,103399,103401,103403],{"class":96,"line":1764},[94,103395,3082],{"class":100},[94,103397,103398],{"class":104}," box_body_id ",[94,103400,1015],{"class":100},[94,103402,4074],{"class":153},[94,103404,3720],{"class":104},[94,103406,103407,103410,103413,103415,103418],{"class":96,"line":2558},[94,103408,103409],{"class":100},"        raise",[94,103411,103412],{"class":153}," RuntimeError",[94,103414,105],{"class":104},[94,103416,103417],{"class":209},"\"body red_box not found\"",[94,103419,111],{"class":104},[94,103421,103422,103424,103427,103429,103431],{"class":96,"line":2572},[94,103423,3082],{"class":100},[94,103425,103426],{"class":104}," site_id ",[94,103428,1015],{"class":100},[94,103430,4074],{"class":153},[94,103432,3720],{"class":104},[94,103434,103435,103437,103439,103441,103444],{"class":96,"line":2580},[94,103436,103409],{"class":100},[94,103438,103412],{"class":153},[94,103440,105],{"class":104},[94,103442,103443],{"class":209},"\"site box_center not found\"",[94,103445,111],{"class":104},[94,103447,103448],{"class":96,"line":2585},[94,103449,2381],{"emptyLinePlaceholder":20},[94,103451,103452,103454,103456,103458,103460,103462,103464],{"class":96,"line":2591},[94,103453,3182],{"class":100},[94,103455,101478],{"class":104},[94,103457,26026],{"class":100},[94,103459,32426],{"class":153},[94,103461,105],{"class":104},[94,103463,1703],{"class":153},[94,103465,30769],{"class":104},[94,103467,103468],{"class":96,"line":2597},[94,103469,101493],{"class":104},[94,103471,103472],{"class":96,"line":2602},[94,103473,2381],{"emptyLinePlaceholder":20},[94,103475,103476,103478,103480,103483],{"class":96,"line":7930},[94,103477,31282],{"class":153},[94,103479,105],{"class":104},[94,103481,103482],{"class":209},"\"simulation time:\"",[94,103484,101455],{"class":104},[94,103486,103487,103489,103491,103494],{"class":96,"line":7954},[94,103488,31282],{"class":153},[94,103490,105],{"class":104},[94,103492,103493],{"class":209},"\"box body position:\"",[94,103495,103496],{"class":104},", data.xpos[box_body_id].copy())\n",[94,103498,103499,103501,103503,103506],{"class":96,"line":7959},[94,103500,31282],{"class":153},[94,103502,105],{"class":104},[94,103504,103505],{"class":209},"\"site position:\"",[94,103507,103508],{"class":104},", data.site_xpos[site_id].copy())\n",[94,103510,103511,103513,103515,103518],{"class":96,"line":7965},[94,103512,31282],{"class":153},[94,103514,105],{"class":104},[94,103516,103517],{"class":209},"\"box qpos:\"",[94,103519,103520],{"class":104},", np.array(data.qpos))\n",[94,103522,103523],{"class":96,"line":7992},[94,103524,2381],{"emptyLinePlaceholder":20},[94,103526,103527],{"class":96,"line":7997},[94,103528,2381],{"emptyLinePlaceholder":20},[94,103530,103531,103533,103535,103537,103539],{"class":96,"line":8003},[94,103532,1512],{"class":100},[94,103534,31203],{"class":153},[94,103536,101536],{"class":100},[94,103538,101539],{"class":209},[94,103540,3720],{"class":104},[94,103542,103543],{"class":96,"line":8015},[94,103544,101546],{"class":104},[40,103546,103547],{},"保存为：",[85,103549,103551],{"className":23804,"code":103550,"language":23806,"meta":14,"style":14},"touch ch2_xml_basic.py\n",[91,103552,103553],{"__ignoreMap":14},[94,103554,103555,103557],{"class":96,"line":97},[94,103556,101260],{"class":1944},[94,103558,103559],{"class":209}," ch2_xml_basic.py\n",[40,103561,102278],{},[85,103563,103565],{"className":23804,"code":103564,"language":23806,"meta":14,"style":14},"python ch2_xml_basic.py\n",[91,103566,103567],{"__ignoreMap":14},[94,103568,103569,103571],{"class":96,"line":97},[94,103570,30363],{"class":1944},[94,103572,103559],{"class":209},[65,103574,101549],{"id":101549},[40,103576,103577],{},"用名字查找 body：",[85,103579,103581],{"className":30361,"code":103580,"language":30363,"meta":14,"style":14},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[91,103582,103583],{"__ignoreMap":14},[94,103584,103585,103588,103590,103592,103594],{"class":96,"line":97},[94,103586,103587],{"class":104},"box_body_id ",[94,103589,150],{"class":100},[94,103591,103367],{"class":104},[94,103593,103370],{"class":209},[94,103595,111],{"class":104},[40,103597,103598],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[40,103600,103601],{},"用名字查找 site：",[85,103603,103605],{"className":30361,"code":103604,"language":30363,"meta":14,"style":14},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[91,103606,103607],{"__ignoreMap":14},[94,103608,103609,103612,103614,103616,103618],{"class":96,"line":97},[94,103610,103611],{"class":104},"site_id ",[94,103613,150],{"class":100},[94,103615,103382],{"class":104},[94,103617,103385],{"class":209},[94,103619,111],{"class":104},[40,103621,103622,103623,103626,103627,103630],{},"注意第二个参数是对象类型。查 body 就用 ",[91,103624,103625],{},"mjOBJ_BODY","，查 site 就用 ",[91,103628,103629],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[40,103632,103633],{},"读取世界坐标：",[85,103635,103637],{"className":30361,"code":103636,"language":30363,"meta":14,"style":14},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[91,103638,103639,103644],{"__ignoreMap":14},[94,103640,103641],{"class":96,"line":97},[94,103642,103643],{"class":104},"data.xpos[box_body_id]\n",[94,103645,103646],{"class":96,"line":15},[94,103647,103648],{"class":104},"data.site_xpos[site_id]\n",[40,103650,103651,103654,103655,103658],{},[91,103652,103653],{},"xpos"," 是 body 的世界坐标，",[91,103656,103657],{},"site_xpos"," 是 site 的世界坐标。",[65,103660,101685],{"id":101685},[85,103662,103664],{"className":30361,"code":103663,"language":30363,"meta":14,"style":14},"import mujoco\nimport numpy as np\n",[91,103665,103666,103672],{"__ignoreMap":14},[94,103667,103668,103670],{"class":96,"line":97},[94,103669,30375],{"class":100},[94,103671,101278],{"class":104},[94,103673,103674,103676,103678,103680],{"class":96,"line":15},[94,103675,30375],{"class":100},[94,103677,31363],{"class":104},[94,103679,31366],{"class":100},[94,103681,31369],{"class":104},[40,103683,103684,103685,103688,103689,103692,103693,317,103696,28368],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[91,103686,103687],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[91,103690,103691],{},"as np"," 是习惯写法，后面就可以写 ",[91,103694,103695],{},"np.array(...)",[91,103697,103698],{},"np.round(...)",[85,103700,103701],{"className":30361,"code":101572,"language":30363,"meta":14,"style":14},[91,103702,103703,103711,103715],{"__ignoreMap":14},[94,103704,103705,103707,103709],{"class":96,"line":97},[94,103706,101291],{"class":153},[94,103708,13546],{"class":100},[94,103710,101296],{"class":209},[94,103712,103713],{"class":96,"line":15},[94,103714,101587],{"class":209},[94,103716,103717],{"class":96,"line":1160},[94,103718,95675],{"class":209},[40,103720,103721,103722,28368],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[91,103723,103724],{},"mujoco.MjModel.from_xml_string(XML)",[85,103726,103728],{"className":53044,"code":103727,"language":53046,"meta":14,"style":14},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[91,103729,103730],{"__ignoreMap":14},[94,103731,103732,103734,103736,103738,103740,103742,103744,103746,103749,103751,103753,103756,103758,103760,103763],{"class":96,"line":97},[94,103733,1015],{"class":104},[94,103735,103187],{"class":51277},[94,103737,14902],{"class":1944},[94,103739,150],{"class":104},[94,103741,103385],{"class":209},[94,103743,101083],{"class":1944},[94,103745,150],{"class":104},[94,103747,103748],{"class":209},"\"0 0 0\"",[94,103750,101113],{"class":1944},[94,103752,150],{"class":104},[94,103754,103755],{"class":209},"\"0.03\"",[94,103757,78744],{"class":1944},[94,103759,150],{"class":104},[94,103761,103762],{"class":209},"\"0 1 0 1\"",[94,103764,101121],{"class":104},[40,103766,103767,103769,103770,103773,103774,103776,103777,103780],{},[91,103768,103187],{}," 是标记点。",[91,103771,103772],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[91,103775,103147],{}," 表示显示出来的小球大小。",[91,103778,103779],{},"rgba=\"0 1 0 1\""," 表示绿色。",[85,103782,103783],{"className":30361,"code":103580,"language":30363,"meta":14,"style":14},[91,103784,103785],{"__ignoreMap":14},[94,103786,103787,103789,103791,103793,103795],{"class":96,"line":97},[94,103788,103587],{"class":104},[94,103790,150],{"class":100},[94,103792,103367],{"class":104},[94,103794,103370],{"class":209},[94,103796,111],{"class":104},[40,103798,103799,103800,103802],{},"这行的作用是：根据名字 ",[91,103801,103370],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[40,103804,103805],{},"拆开看：",[48,103807,103808,103814,103819,103825],{},[51,103809,103810,103813],{},[91,103811,103812],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[51,103815,103816,103818],{},[91,103817,102062],{}," 是被查询的模型。",[51,103820,103821,103824],{},[91,103822,103823],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[51,103826,103827,103829],{},[91,103828,103370],{}," 是 XML 里写的名字。",[85,103831,103832],{"className":30361,"code":103604,"language":30363,"meta":14,"style":14},[91,103833,103834],{"__ignoreMap":14},[94,103835,103836,103838,103840,103842,103844],{"class":96,"line":97},[94,103837,103611],{"class":104},[94,103839,150],{"class":100},[94,103841,103382],{"class":104},[94,103843,103385],{"class":209},[94,103845,111],{"class":104},[40,103847,103848,103849,28368],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[91,103850,103385],{},[85,103852,103854],{"className":30361,"code":103853,"language":30363,"meta":14,"style":14},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[91,103855,103856,103868],{"__ignoreMap":14},[94,103857,103858,103860,103862,103864,103866],{"class":96,"line":97},[94,103859,1512],{"class":100},[94,103861,103398],{"class":104},[94,103863,1015],{"class":100},[94,103865,4074],{"class":153},[94,103867,3720],{"class":104},[94,103869,103870,103873,103875,103877,103879],{"class":96,"line":15},[94,103871,103872],{"class":100},"    raise",[94,103874,103412],{"class":153},[94,103876,105],{"class":104},[94,103878,103417],{"class":209},[94,103880,111],{"class":104},[40,103882,103883,103885,103886,103889,103890,103893,103894,103897],{},[91,103884,1512],{}," 是条件判断。",[91,103887,103888],{},"mj_name2id"," 找不到对象时会返回 ",[91,103891,103892],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[91,103895,103896],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[85,103899,103901],{"className":30361,"code":103900,"language":30363,"meta":14,"style":14},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[91,103902,103903,103919],{"__ignoreMap":14},[94,103904,103905,103907,103909,103911,103913,103915,103917],{"class":96,"line":97},[94,103906,3006],{"class":100},[94,103908,101478],{"class":104},[94,103910,26026],{"class":100},[94,103912,32426],{"class":153},[94,103914,105],{"class":104},[94,103916,1703],{"class":153},[94,103918,30769],{"class":104},[94,103920,103921],{"class":96,"line":15},[94,103922,101676],{"class":104},[40,103924,103925],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[85,103927,103929],{"className":30361,"code":103928,"language":30363,"meta":14,"style":14},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[91,103930,103931],{"__ignoreMap":14},[94,103932,103933,103935,103937,103939],{"class":96,"line":97},[94,103934,30398],{"class":153},[94,103936,105],{"class":104},[94,103938,103493],{"class":209},[94,103940,103496],{"class":104},[40,103942,103943,103945,103946,103949],{},[91,103944,101056],{}," 保存所有 body 的世界坐标。",[91,103947,103948],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[85,103951,103953],{"className":30361,"code":103952,"language":30363,"meta":14,"style":14},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[91,103954,103955],{"__ignoreMap":14},[94,103956,103957,103959,103961,103963],{"class":96,"line":97},[94,103958,30398],{"class":153},[94,103960,105],{"class":104},[94,103962,103505],{"class":209},[94,103964,103508],{"class":104},[40,103966,103967,103970,103971,103973],{},[91,103968,103969],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[91,103972,102954],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[85,103975,103977],{"className":30361,"code":103976,"language":30363,"meta":14,"style":14},"print(\"box qpos:\", np.array(data.qpos))\n",[91,103978,103979],{"__ignoreMap":14},[94,103980,103981,103983,103985,103987],{"class":96,"line":97},[94,103982,30398],{"class":153},[94,103984,105],{"class":104},[94,103986,103517],{"class":209},[94,103988,103520],{"class":104},[40,103990,103991,103992,103995],{},"这里打印广义位置数组。",[91,103993,103994],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[35,103997,102293],{"id":102292},[40,103999,104000,104001,104004,104005,28368],{},"程序会输出 ",[91,104002,104003],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[91,104006,104007],{},"qpos",[40,104009,104010,104012,104013,104016,104017,104020],{},[91,104011,103948],{}," 是 body 的世界坐标位置。",[91,104014,104015],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[91,104018,104019],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[40,104022,82199,104023,82507,104025,104027],{},[91,104024,102954],{},[91,104026,103772],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[40,104029,104030],{},"如果你把 site 改成：",[85,104032,104034],{"className":53044,"code":104033,"language":53046,"meta":14,"style":14},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[91,104035,104036],{"__ignoreMap":14},[94,104037,104038,104040,104042,104044,104046,104049,104051,104053,104056,104058,104060,104062,104064,104066,104068],{"class":96,"line":97},[94,104039,1015],{"class":104},[94,104041,103187],{"class":51277},[94,104043,14902],{"class":1944},[94,104045,150],{"class":104},[94,104047,104048],{"class":209},"\"box_top\"",[94,104050,101083],{"class":1944},[94,104052,150],{"class":104},[94,104054,104055],{"class":209},"\"0 0 0.15\"",[94,104057,101113],{"class":1944},[94,104059,150],{"class":104},[94,104061,103755],{"class":209},[94,104063,78744],{"class":1944},[94,104065,150],{"class":104},[94,104067,103762],{"class":209},[94,104069,101121],{"class":104},[40,104071,104072,104073,104076],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[91,104074,104075],{},"site position"," 就会比 body position 的 z 坐标更高。",[35,104078,102325],{"id":102324},[48,104080,104081,104090,104093,104100,104106,104117],{},[51,104082,102388,104083,104085,104086,102391,104088,28368],{},[91,104084,102958],{}," 的初始高度从 ",[91,104087,322],{},[91,104089,182],{},[51,104091,104092],{},"重新运行程序。",[51,104094,104095,104096,104099],{},"观察 ",[91,104097,104098],{},"box qpos"," 和最终位置是否变化。",[51,104101,104102,104103,104105],{},"故意把 ",[91,104104,103187],{}," 名称改错，确认程序能报错。",[51,104107,102388,104108,104110,104111,102391,104113,104116],{},[91,104109,101097],{}," 的颜色 ",[91,104112,102009],{},[91,104114,104115],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[51,104118,102388,104119,82507,104121,102391,104124,104127,104128,104130],{},[91,104120,102954],{},[91,104122,104123],{},"pos",[91,104125,104126],{},"0 0 0.2","，观察 ",[91,104129,104075],{}," 如何变化。",[35,104132,102430],{"id":102429},[65,104134,104136],{"id":104135},"xml-error-schema-violation",[91,104137,104138],{},"XML Error: Schema violation",[40,104140,104141],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[65,104143,104145,81267,104147],{"id":104144},"mj_name2id-返回-1",[91,104146,103888],{},[91,104148,103892],{},[40,104150,104151,104152,104155],{},"说明名字没有找到。检查 XML 中 ",[91,104153,104154],{},"name=\"...\"","，并确认对象类型正确。",[65,104157,104158],{"id":104158},"物体不下落",[40,104160,102500],{},[48,104162,104163,104168,104173],{},[51,104164,104165,104166],{},"body 是否有 ",[91,104167,101597],{},[51,104169,104170,104171],{},"gravity 是否为 ",[91,104172,102566],{},[51,104174,104175,104176,104178],{},"body 是否被固定在 ",[91,104177,101818],{}," 中",[65,104180,104181],{"id":104181},"坐标看起来不符合预期",[40,104183,104184],{},"先区分两种坐标：",[242,104186,104187,104196],{},[245,104188,104189],{},[248,104190,104191,104194],{},[251,104192,104193],{"align":23718},"坐标",[251,104195,100677],{"align":23718},[289,104197,104198,104208],{},[248,104199,104200,104205],{},[294,104201,104202,104203],{"align":23718},"XML 里的 ",[91,104204,104123],{},[294,104206,104207],{"align":23718},"相对父 body 的局部坐标",[248,104209,104210,104216],{},[294,104211,104212,24961,104214],{"align":23718},[91,104213,101056],{},[91,104215,103969],{},[294,104217,104218],{"align":23718},"仿真更新后的世界坐标",[40,104220,104221,104222,104224,104225,82516,104228,104230],{},"如果你修改了 ",[91,104223,101047],{},"，但还没调用 ",[91,104226,104227],{},"mj_forward",[91,104229,101192],{},"，世界坐标可能还没有更新。",[35,104232,102584],{"id":102583},[40,104234,104235],{},"MJCF 建模先掌握四件事：",[48,104237,104238,104243,104248,104253],{},[51,104239,104240,104242],{},[91,104241,51777],{}," 表示刚体层级。",[51,104244,104245,104247],{},[91,104246,101097],{}," 表示形状、碰撞和质量。",[51,104249,104250,104252],{},[91,104251,102933],{}," 决定 body 能不能动、怎么动。",[51,104254,104255,104257],{},[91,104256,103187],{}," 用来标记关键点，方便 Python 读取位置。",[40,104259,104260],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5108,104262,104263],{},"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":14,"searchDepth":15,"depth":15,"links":104265},[104266,104267,104268,104274,104278,104279,104280,104287],{"id":100623,"depth":15,"text":100624},{"id":100746,"depth":15,"text":100747},{"id":101021,"depth":15,"text":101022,"children":104269},[104270,104271,104272,104273],{"id":102937,"depth":1160,"text":102937},{"id":103051,"depth":1160,"text":103051},{"id":103077,"depth":1160,"text":103078},{"id":103181,"depth":1160,"text":103182},{"id":101229,"depth":15,"text":101230,"children":104275},[104276,104277],{"id":101549,"depth":1160,"text":101549},{"id":101685,"depth":1160,"text":101685},{"id":102292,"depth":15,"text":102293},{"id":102324,"depth":15,"text":102325},{"id":102429,"depth":15,"text":102430,"children":104281},[104282,104283,104285,104286],{"id":104135,"depth":1160,"text":104138},{"id":104144,"depth":1160,"text":104284},"mj_name2id 返回 -1",{"id":104158,"depth":1160,"text":104158},{"id":104181,"depth":1160,"text":104181},{"id":102583,"depth":15,"text":102584},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102631,"description":14},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104294,"title":104295,"body":104296,"description":14,"extension":18,"meta":105791,"navigation":20,"path":105792,"seo":105793,"stem":105794,"__hash__":105795},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104297,"toc":105763},[104298,104301,104303,104306,104309,104347,104350,104356,104359,104361,104363,104390,104392,104406,104408,104449,104451,104475,104477,104480,104489,104498,104501,104510,104518,104527,104530,104540,104543,104595,104602,104608,104616,104664,104667,104686,104689,104697,104701,104710,104743,104745,105093,105095,105107,105109,105120,105122,105125,105146,105152,105155,105180,105190,105193,105201,105204,105207,105228,105239,105241,105261,105264,105285,105294,105313,105319,105344,105347,105361,105368,105392,105395,105403,105412,105428,105440,105448,105457,105459,105462,105486,105491,105494,105516,105518,105557,105559,105566,105568,105576,105579,105582,105594,105635,105642,105653,105660,105663,105712,105715,105718,105724,105726,105731,105757,105760],[10,104299,104295],{"id":104300},"_3python-控制接口读取状态与推进仿真",[35,104302,100624],{"id":100623},[40,104304,104305],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[40,104307,104308],{},"你将学习:",[48,104310,104311,104316,104321,104325,104330,104341],{},[51,104312,104313],{},[91,104314,104315],{},"MjModel.from_xml_string",[51,104317,104318],{},[91,104319,104320],{},"MjData(model)",[51,104322,104323],{},[91,104324,101192],{},[51,104326,104327],{},[91,104328,104329],{},"mj_resetData",[51,104331,104332,104333,317,104335,317,104338],{},"读取 ",[91,104334,104007],{},[91,104336,104337],{},"qvel",[91,104339,104340],{},"ctrl",[51,104342,104343,104344],{},"使用 ",[91,104345,104346],{},"model.opt.timestep",[40,104348,104349],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[85,104351,104354],{"className":104352,"code":104353,"language":5169,"meta":14},[5167],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[91,104355,104353],{"__ignoreMap":14},[40,104357,104358],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[35,104360,100747],{"id":100746},[40,104362,100750],{},[85,104364,104366],{"className":23804,"code":104365,"language":23806,"meta":14,"style":14},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[91,104367,104368],{"__ignoreMap":14},[94,104369,104370,104372,104374,104376,104378,104381,104383,104385,104387],{"class":96,"line":97},[94,104371,24559],{"class":1944},[94,104373,26298],{"class":209},[94,104375,23816],{"class":209},[94,104377,26383],{"class":153},[94,104379,104380],{"class":209}," python3",[94,104382,100775],{"class":209},[94,104384,102478],{"class":209},[94,104386,100791],{"class":209},[94,104388,104389],{"class":209}," glfw\n",[40,104391,102796],{},[85,104393,104394],{"className":23804,"code":100896,"language":23806,"meta":14,"style":14},[91,104395,104396],{"__ignoreMap":14},[94,104397,104398,104400,104402,104404],{"class":96,"line":97},[94,104399,23813],{"class":1944},[94,104401,23816],{"class":209},[94,104403,100907],{"class":209},[94,104405,100910],{"class":209},[40,104407,102813],{},[85,104409,104411],{"className":23804,"code":104410,"language":23806,"meta":14,"style":14},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[91,104412,104413,104430,104439],{"__ignoreMap":14},[94,104414,104415,104417,104419,104421,104424,104426,104428],{"class":96,"line":97},[94,104416,30313],{"class":1944},[94,104418,29159],{"class":209},[94,104420,25098],{"class":153},[94,104422,104423],{"class":209}," mujoco-python-api",[94,104425,100952],{"class":209},[94,104427,100955],{"class":153},[94,104429,100958],{"class":153},[94,104431,104432,104434,104436],{"class":96,"line":15},[94,104433,30313],{"class":1944},[94,104435,100965],{"class":209},[94,104437,104438],{"class":209}," mujoco-python-api\n",[94,104440,104441,104443,104445,104447],{"class":96,"line":1160},[94,104442,23813],{"class":1944},[94,104444,23816],{"class":209},[94,104446,100907],{"class":209},[94,104448,100910],{"class":209},[40,104450,100981],{},[48,104452,104453,104460,104469],{},[51,104454,104455,100995,104457,104459],{},[91,104456,100652],{},[91,104458,100657],{}," 是官方 Python bindings 的类名。",[51,104461,104462,104463,104466,104467,28368],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[91,104464,104465],{},"mjModel"," 在 Python 中是 ",[91,104468,100686],{},[51,104470,104471,104472,28368],{},"不要使用 ",[91,104473,104474],{},"sim = mujoco_py.MjSim(...)",[35,104476,101022],{"id":101021},[40,104478,104479],{},"仿真推进核心代码:",[85,104481,104483],{"className":30361,"code":104482,"language":30363,"meta":14,"style":14},"mujoco.mj_step(model, data)\n",[91,104484,104485],{"__ignoreMap":14},[94,104486,104487],{"class":96,"line":97},[94,104488,104482],{"class":104},[40,104490,104491,104492,317,104494,317,104496,28368],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[91,104493,101047],{},[91,104495,101050],{},[91,104497,101044],{},[40,104499,104500],{},"重置仿真:",[85,104502,104504],{"className":30361,"code":104503,"language":30363,"meta":14,"style":14},"mujoco.mj_resetData(model, data)\n",[91,104505,104506],{"__ignoreMap":14},[94,104507,104508],{"class":96,"line":97},[94,104509,104503],{"class":104},[40,104511,104512,104513,82516,104515,104517],{},"如果手动修改了 ",[91,104514,101047],{},[91,104516,101050],{},"，通常应调用:",[85,104519,104521],{"className":30361,"code":104520,"language":30363,"meta":14,"style":14},"mujoco.mj_forward(model, data)\n",[91,104522,104523],{"__ignoreMap":14},[94,104524,104525],{"class":96,"line":97},[94,104526,104520],{"class":104},[40,104528,104529],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[65,104531,104533,317,104535,317,104537,104539],{"id":104532},"qposqvelctrl-是什么",[91,104534,104007],{},[91,104536,104337],{},[91,104538,104340],{}," 是什么",[40,104541,104542],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[242,104544,104545,104557],{},[245,104546,104547],{},[248,104548,104549,104552,104554],{},[251,104550,104551],{"align":23718},"字段",[251,104553,100677],{"align":23718},[251,104555,104556],{"align":23718},"谁来修改",[289,104558,104559,104571,104583],{},[248,104560,104561,104565,104568],{},[294,104562,104563],{"align":23718},[91,104564,101047],{},[294,104566,104567],{"align":23718},"广义位置，例如小车位置、关节角、自由物体位置姿态",[294,104569,104570],{"align":23718},"MuJoCo 更新，也可以手动设置初始状态",[248,104572,104573,104577,104580],{},[294,104574,104575],{"align":23718},[91,104576,101050],{},[294,104578,104579],{"align":23718},"广义速度，例如小车速度、关节角速度",[294,104581,104582],{"align":23718},"MuJoCo 更新，也可以手动清零",[248,104584,104585,104589,104592],{},[294,104586,104587],{"align":23718},[91,104588,101053],{},[294,104590,104591],{"align":23718},"actuator 的控制输入",[294,104593,104594],{"align":23718},"主要由你的控制代码写入",[40,104596,9007,104597,100995,104599,104601],{},[91,104598,104007],{},[91,104600,104337],{}," 不一定同维。自由刚体就是典型例子：",[85,104603,104606],{"className":104604,"code":104605,"language":5169,"meta":14},[5167],"freejoint: qpos 7 维，qvel 6 维\n",[91,104607,104605],{"__ignoreMap":14},[65,104609,104611,100995,104613,104615],{"id":104610},"mj_step-和-mj_forward-的区别",[91,104612,101192],{},[91,104614,104227],{}," 的区别",[242,104617,104618,104631],{},[245,104619,104620],{},[248,104621,104622,104625,104628],{},[251,104623,104624],{"align":23718},"函数",[251,104626,104627],{"align":23718},"是否推进时间",[251,104629,104630],{"align":23718},"什么时候用",[289,104632,104633,104646],{},[248,104634,104635,104640,104643],{},[294,104636,104637],{"align":23718},[91,104638,104639],{},"mj_step(model, data)",[294,104641,104642],{"align":23718},"是",[294,104644,104645],{"align":23718},"正常仿真循环，每调用一次前进一步",[248,104647,104648,104653,104656],{},[294,104649,104650],{"align":23718},[91,104651,104652],{},"mj_forward(model, data)",[294,104654,104655],{"align":23718},"否",[294,104657,104658,104659,317,104661,104663],{"align":23718},"手动改了 ",[91,104660,104007],{},[91,104662,104337],{}," 后，刷新派生量",[40,104665,104666],{},"例如你写：",[85,104668,104670],{"className":30361,"code":104669,"language":30363,"meta":14,"style":14},"data.qpos[2] = 2.0\n",[91,104671,104672],{"__ignoreMap":14},[94,104673,104674,104677,104679,104681,104683],{"class":96,"line":97},[94,104675,104676],{"class":104},"data.qpos[",[94,104678,182],{"class":153},[94,104680,4424],{"class":104},[94,104682,150],{"class":100},[94,104684,104685],{"class":153}," 2.0\n",[40,104687,104688],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[85,104690,104691],{"className":30361,"code":104520,"language":30363,"meta":14,"style":14},[91,104692,104693],{"__ignoreMap":14},[94,104694,104695],{"class":96,"line":97},[94,104696,104520],{"class":104},[65,104698,104700],{"id":104699},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[40,104702,104703,104706,104707,104709],{},[91,104704,104705],{},"mujoco.mj_resetData(model, data)"," 会把 ",[91,104708,33384],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[85,104711,104713],{"className":30361,"code":104712,"language":30363,"meta":14,"style":14},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[91,104714,104715,104719,104729,104739],{"__ignoreMap":14},[94,104716,104717],{"class":96,"line":97},[94,104718,104503],{"class":104},[94,104720,104721,104724,104726],{"class":96,"line":15},[94,104722,104723],{"class":104},"data.qpos[:] ",[94,104725,150],{"class":100},[94,104727,104728],{"class":104}," random_qpos\n",[94,104730,104731,104734,104736],{"class":96,"line":1160},[94,104732,104733],{"class":104},"data.qvel[:] ",[94,104735,150],{"class":100},[94,104737,104738],{"class":153}," 0.0\n",[94,104740,104741],{"class":96,"line":1175},[94,104742,104520],{"class":104},[35,104744,101230],{"id":101229},[85,104746,104748],{"className":30361,"code":104747,"language":30363,"meta":14,"style":14},"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",[91,104749,104750,104756,104766,104770,104774,104782,104787,104791,104795,104799,104804,104808,104813,104818,104823,104827,104831,104835,104839,104843,104847,104866,104873,104885,104896,104912,104928,104932,104936,104948,104960,104968,104972,104983,104987,105003,105007,105011,105020,105024,105029,105038,105042,105055,105060,105069,105073,105077,105089],{"__ignoreMap":14},[94,104751,104752,104754],{"class":96,"line":97},[94,104753,30375],{"class":100},[94,104755,101278],{"class":104},[94,104757,104758,104760,104762,104764],{"class":96,"line":15},[94,104759,30375],{"class":100},[94,104761,31363],{"class":104},[94,104763,31366],{"class":100},[94,104765,31369],{"class":104},[94,104767,104768],{"class":96,"line":1160},[94,104769,2381],{"emptyLinePlaceholder":20},[94,104771,104772],{"class":96,"line":1175},[94,104773,2381],{"emptyLinePlaceholder":20},[94,104775,104776,104778,104780],{"class":96,"line":1181},[94,104777,101291],{"class":153},[94,104779,13546],{"class":100},[94,104781,101296],{"class":209},[94,104783,104784],{"class":96,"line":1195},[94,104785,104786],{"class":209},"\u003Cmujoco model=\"state_api\">\n",[94,104788,104789],{"class":96,"line":1201},[94,104790,101306],{"class":209},[94,104792,104793],{"class":96,"line":1292},[94,104794,2381],{"emptyLinePlaceholder":20},[94,104796,104797],{"class":96,"line":1298},[94,104798,101315],{"class":209},[94,104800,104801],{"class":96,"line":1310},[94,104802,104803],{"class":209},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[94,104805,104806],{"class":96,"line":1593},[94,104807,2381],{"emptyLinePlaceholder":20},[94,104809,104810],{"class":96,"line":1598},[94,104811,104812],{"class":209},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[94,104814,104815],{"class":96,"line":1604},[94,104816,104817],{"class":209},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[94,104819,104820],{"class":96,"line":1609},[94,104821,104822],{"class":209},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[94,104824,104825],{"class":96,"line":1623},[94,104826,101344],{"class":209},[94,104828,104829],{"class":96,"line":1628},[94,104830,101349],{"class":209},[94,104832,104833],{"class":96,"line":1634},[94,104834,101354],{"class":209},[94,104836,104837],{"class":96,"line":1655},[94,104838,95675],{"class":209},[94,104840,104841],{"class":96,"line":1660},[94,104842,2381],{"emptyLinePlaceholder":20},[94,104844,104845],{"class":96,"line":1674},[94,104846,2381],{"emptyLinePlaceholder":20},[94,104848,104849,104851,104854,104857,104859,104862,104864],{"class":96,"line":1679},[94,104850,31930],{"class":100},[94,104852,104853],{"class":1944}," print_state",[94,104855,104856],{"class":104},"(prefix: ",[94,104858,1280],{"class":153},[94,104860,104861],{"class":104},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[94,104863,95663],{"class":153},[94,104865,3720],{"class":104},[94,104867,104868,104870],{"class":96,"line":1708},[94,104869,31282],{"class":153},[94,104871,104872],{"class":104},"(prefix)\n",[94,104874,104875,104877,104879,104882],{"class":96,"line":1713},[94,104876,31282],{"class":153},[94,104878,105],{"class":104},[94,104880,104881],{"class":209},"\"  timestep:\"",[94,104883,104884],{"class":104},", model.opt.timestep)\n",[94,104886,104887,104889,104891,104894],{"class":96,"line":1730},[94,104888,31282],{"class":153},[94,104890,105],{"class":104},[94,104892,104893],{"class":209},"\"  time:\"",[94,104895,101455],{"class":104},[94,104897,104898,104900,104902,104905,104908,104910],{"class":96,"line":1735},[94,104899,31282],{"class":153},[94,104901,105],{"class":104},[94,104903,104904],{"class":209},"\"  qpos:\"",[94,104906,104907],{"class":104},", np.round(data.qpos.copy(), ",[94,104909,398],{"class":153},[94,104911,30480],{"class":104},[94,104913,104914,104916,104918,104921,104924,104926],{"class":96,"line":1740},[94,104915,31282],{"class":153},[94,104917,105],{"class":104},[94,104919,104920],{"class":209},"\"  qvel:\"",[94,104922,104923],{"class":104},", np.round(data.qvel.copy(), ",[94,104925,398],{"class":153},[94,104927,30480],{"class":104},[94,104929,104930],{"class":96,"line":1745},[94,104931,2381],{"emptyLinePlaceholder":20},[94,104933,104934],{"class":96,"line":1759},[94,104935,2381],{"emptyLinePlaceholder":20},[94,104937,104938,104940,104942,104944,104946],{"class":96,"line":1764},[94,104939,31930],{"class":100},[94,104941,1954],{"class":1944},[94,104943,101375],{"class":104},[94,104945,95663],{"class":153},[94,104947,3720],{"class":104},[94,104949,104950,104952,104954,104956,104958],{"class":96,"line":2558},[94,104951,101384],{"class":104},[94,104953,150],{"class":100},[94,104955,101389],{"class":104},[94,104957,101291],{"class":153},[94,104959,111],{"class":104},[94,104961,104962,104964,104966],{"class":96,"line":2572},[94,104963,101398],{"class":104},[94,104965,150],{"class":100},[94,104967,101403],{"class":104},[94,104969,104970],{"class":96,"line":2580},[94,104971,2381],{"emptyLinePlaceholder":20},[94,104973,104974,104977,104980],{"class":96,"line":2585},[94,104975,104976],{"class":104},"    print_state(",[94,104978,104979],{"class":209},"\"initial\"",[94,104981,104982],{"class":104},", model, data)\n",[94,104984,104985],{"class":96,"line":2591},[94,104986,2381],{"emptyLinePlaceholder":20},[94,104988,104989,104991,104993,104995,104997,104999,105001],{"class":96,"line":2597},[94,104990,3182],{"class":100},[94,104992,101478],{"class":104},[94,104994,26026],{"class":100},[94,104996,32426],{"class":153},[94,104998,105],{"class":104},[94,105000,761],{"class":153},[94,105002,30769],{"class":104},[94,105004,105005],{"class":96,"line":2602},[94,105006,101493],{"class":104},[94,105008,105009],{"class":96,"line":7930},[94,105010,2381],{"emptyLinePlaceholder":20},[94,105012,105013,105015,105018],{"class":96,"line":7954},[94,105014,104976],{"class":104},[94,105016,105017],{"class":209},"\"after 50 steps\"",[94,105019,104982],{"class":104},[94,105021,105022],{"class":96,"line":7959},[94,105023,2381],{"emptyLinePlaceholder":20},[94,105025,105026],{"class":96,"line":7965},[94,105027,105028],{"class":104},"    mujoco.mj_resetData(model, data)\n",[94,105030,105031,105033,105036],{"class":96,"line":7992},[94,105032,104976],{"class":104},[94,105034,105035],{"class":209},"\"after reset\"",[94,105037,104982],{"class":104},[94,105039,105040],{"class":96,"line":7997},[94,105041,2381],{"emptyLinePlaceholder":20},[94,105043,105044,105047,105049,105051,105053],{"class":96,"line":8003},[94,105045,105046],{"class":104},"    data.qpos[",[94,105048,182],{"class":153},[94,105050,4424],{"class":104},[94,105052,150],{"class":100},[94,105054,104685],{"class":153},[94,105056,105057],{"class":96,"line":8015},[94,105058,105059],{"class":104},"    mujoco.mj_forward(model, data)\n",[94,105061,105062,105064,105067],{"class":96,"line":8027},[94,105063,104976],{"class":104},[94,105065,105066],{"class":209},"\"after manual qpos edit\"",[94,105068,104982],{"class":104},[94,105070,105071],{"class":96,"line":8039},[94,105072,2381],{"emptyLinePlaceholder":20},[94,105074,105075],{"class":96,"line":9698},[94,105076,2381],{"emptyLinePlaceholder":20},[94,105078,105079,105081,105083,105085,105087],{"class":96,"line":9723},[94,105080,1512],{"class":100},[94,105082,31203],{"class":153},[94,105084,101536],{"class":100},[94,105086,101539],{"class":209},[94,105088,3720],{"class":104},[94,105090,105091],{"class":96,"line":9746},[94,105092,101546],{"class":104},[40,105094,103547],{},[85,105096,105098],{"className":23804,"code":105097,"language":23806,"meta":14,"style":14},"touch ch3_python_state.py\n",[91,105099,105100],{"__ignoreMap":14},[94,105101,105102,105104],{"class":96,"line":97},[94,105103,101260],{"class":1944},[94,105105,105106],{"class":209}," ch3_python_state.py\n",[40,105108,102278],{},[85,105110,105112],{"className":23804,"code":105111,"language":23806,"meta":14,"style":14},"python ch3_python_state.py\n",[91,105113,105114],{"__ignoreMap":14},[94,105115,105116,105118],{"class":96,"line":97},[94,105117,30363],{"class":1944},[94,105119,105106],{"class":209},[65,105121,101549],{"id":101549},[40,105123,105124],{},"打印状态的函数：",[85,105126,105128],{"className":30361,"code":105127,"language":30363,"meta":14,"style":14},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[91,105129,105130],{"__ignoreMap":14},[94,105131,105132,105134,105136,105138,105140,105142,105144],{"class":96,"line":97},[94,105133,31930],{"class":100},[94,105135,104853],{"class":1944},[94,105137,104856],{"class":104},[94,105139,1280],{"class":153},[94,105141,104861],{"class":104},[94,105143,95663],{"class":153},[94,105145,3720],{"class":104},[40,105147,105148,105149,105151],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[91,105150,33384],{}," 里发生了什么。",[40,105153,105154],{},"推进 50 步：",[85,105156,105158],{"className":30361,"code":105157,"language":30363,"meta":14,"style":14},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[91,105159,105160,105176],{"__ignoreMap":14},[94,105161,105162,105164,105166,105168,105170,105172,105174],{"class":96,"line":97},[94,105163,3006],{"class":100},[94,105165,101478],{"class":104},[94,105167,26026],{"class":100},[94,105169,32426],{"class":153},[94,105171,105],{"class":104},[94,105173,761],{"class":153},[94,105175,30769],{"class":104},[94,105177,105178],{"class":96,"line":15},[94,105179,101676],{"class":104},[40,105181,105182,105183,105186,105187,105189],{},"由于 ",[91,105184,105185],{},"timestep=0.01","，所以 50 步后时间约为 ",[91,105188,35312],{}," 秒。",[40,105191,105192],{},"重置：",[85,105194,105195],{"className":30361,"code":104503,"language":30363,"meta":14,"style":14},[91,105196,105197],{"__ignoreMap":14},[94,105198,105199],{"class":96,"line":97},[94,105200,104503],{"class":104},[40,105202,105203],{},"这会把时间、位置、速度恢复到初始状态。",[40,105205,105206],{},"手动改高度：",[85,105208,105210],{"className":30361,"code":105209,"language":30363,"meta":14,"style":14},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[91,105211,105212,105224],{"__ignoreMap":14},[94,105213,105214,105216,105218,105220,105222],{"class":96,"line":97},[94,105215,104676],{"class":104},[94,105217,182],{"class":153},[94,105219,4424],{"class":104},[94,105221,150],{"class":100},[94,105223,104685],{"class":153},[94,105225,105226],{"class":96,"line":15},[94,105227,104520],{"class":104},[40,105229,105230,105231,105234,105235,105238],{},"这个例子里 ",[91,105232,105233],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[91,105236,105237],{},"2.0"," 表示把小球放到更高的位置。",[65,105240,101685],{"id":101685},[85,105242,105243],{"className":30361,"code":105127,"language":30363,"meta":14,"style":14},[91,105244,105245],{"__ignoreMap":14},[94,105246,105247,105249,105251,105253,105255,105257,105259],{"class":96,"line":97},[94,105248,31930],{"class":100},[94,105250,104853],{"class":1944},[94,105252,104856],{"class":104},[94,105254,1280],{"class":153},[94,105256,104861],{"class":104},[94,105258,95663],{"class":153},[94,105260,3720],{"class":104},[40,105262,105263],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[48,105265,105266,105275,105280],{},[51,105267,105268,105271,105272,105274],{},[91,105269,105270],{},"prefix","：一段文字，比如 ",[91,105273,104979],{},"，用来说明现在打印的是哪个阶段。",[51,105276,105277,105279],{},[91,105278,102062],{},"：MuJoCo 模型。",[51,105281,105282,105284],{},[91,105283,33384],{},"：MuJoCo 当前状态。",[40,105286,105287,317,105290,105293],{},[91,105288,105289],{},"prefix: str",[91,105291,105292],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[85,105295,105297],{"className":30361,"code":105296,"language":30363,"meta":14,"style":14},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[91,105298,105299],{"__ignoreMap":14},[94,105300,105301,105303,105305,105307,105309,105311],{"class":96,"line":97},[94,105302,30398],{"class":153},[94,105304,105],{"class":104},[94,105306,104904],{"class":209},[94,105308,104907],{"class":104},[94,105310,398],{"class":153},[94,105312,30480],{"class":104},[40,105314,105315,105318],{},[91,105316,105317],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[85,105320,105322],{"className":30361,"code":105321,"language":30363,"meta":14,"style":14},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[91,105323,105324,105336],{"__ignoreMap":14},[94,105325,105326,105328,105330,105332,105334],{"class":96,"line":97},[94,105327,101611],{"class":104},[94,105329,150],{"class":100},[94,105331,101389],{"class":104},[94,105333,101291],{"class":153},[94,105335,111],{"class":104},[94,105337,105338,105340,105342],{"class":96,"line":15},[94,105339,101635],{"class":104},[94,105341,150],{"class":100},[94,105343,101403],{"class":104},[40,105345,105346],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[85,105348,105350],{"className":30361,"code":105349,"language":30363,"meta":14,"style":14},"print_state(\"initial\", model, data)\n",[91,105351,105352],{"__ignoreMap":14},[94,105353,105354,105357,105359],{"class":96,"line":97},[94,105355,105356],{"class":104},"print_state(",[94,105358,104979],{"class":209},[94,105360,104982],{"class":104},[40,105362,105363,105364,105367],{},"调用刚才定义的 ",[91,105365,105366],{},"print_state"," 函数，打印初始状态。",[85,105369,105370],{"className":30361,"code":105157,"language":30363,"meta":14,"style":14},[91,105371,105372,105388],{"__ignoreMap":14},[94,105373,105374,105376,105378,105380,105382,105384,105386],{"class":96,"line":97},[94,105375,3006],{"class":100},[94,105377,101478],{"class":104},[94,105379,26026],{"class":100},[94,105381,32426],{"class":153},[94,105383,105],{"class":104},[94,105385,761],{"class":153},[94,105387,30769],{"class":104},[94,105389,105390],{"class":96,"line":15},[94,105391,101676],{"class":104},[40,105393,105394],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[85,105396,105397],{"className":30361,"code":104503,"language":30363,"meta":14,"style":14},[91,105398,105399],{"__ignoreMap":14},[94,105400,105401],{"class":96,"line":97},[94,105402,104503],{"class":104},[40,105404,105405,105406,105408,105409,105411],{},"重置 ",[91,105407,33384],{},"。注意它不会重新创建 ",[91,105410,102062],{},"，因为模型结构没有变，只是状态回到初始值。",[85,105413,105414],{"className":30361,"code":104669,"language":30363,"meta":14,"style":14},[91,105415,105416],{"__ignoreMap":14},[94,105417,105418,105420,105422,105424,105426],{"class":96,"line":97},[94,105419,104676],{"class":104},[94,105421,182],{"class":153},[94,105423,4424],{"class":104},[94,105425,150],{"class":100},[94,105427,104685],{"class":153},[40,105429,105430,105431,317,105434,317,105437,105439],{},"这行是“手动改状态”。在 freejoint 中，",[91,105432,105433],{},"qpos[0]",[91,105435,105436],{},"qpos[1]",[91,105438,105233],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[85,105441,105442],{"className":30361,"code":104520,"language":30363,"meta":14,"style":14},[91,105443,105444],{"__ignoreMap":14},[94,105445,105446],{"class":96,"line":97},[94,105447,104520],{"class":104},[40,105449,105450,105451,105453,105454,105456],{},"手动改完 ",[91,105452,104007],{}," 后，调用 ",[91,105455,104227],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[35,105458,102293],{"id":102292},[40,105460,105461],{},"你会看到:",[48,105463,105464,105469,105474,105477],{},[51,105465,105466,105467],{},"初始时间为 ",[91,105468,296],{},[51,105470,105471,105472],{},"50 步后时间约为 ",[91,105473,35312],{},[51,105475,105476],{},"reset 后状态恢复",[51,105478,105479,105480,105483,105484],{},"手动修改 ",[91,105481,105482],{},"data.qpos[2]"," 后，小球高度变为 ",[91,105485,105237],{},[40,105487,105488,105490],{},[91,105489,105233],{}," 在这个例子中表示自由刚体的 z 坐标。",[40,105492,105493],{},"输出里可以重点看三件事：",[48,105495,105496,105504,105509],{},[51,105497,105498,105500,105501,105503],{},[91,105499,2368],{}," 是否随着 ",[91,105502,101192],{}," 增加。",[51,105505,105506,105508],{},[91,105507,104007],{}," 的 z 坐标是否因为下落而变化。",[51,105510,105511,105513,105514,28368],{},[91,105512,104329],{}," 后时间是否回到 ",[91,105515,296],{},[35,105517,102325],{"id":102324},[48,105519,105520,105526,105532,105538,105541,105550],{},[51,105521,105522,105523,28368],{},"修改 timestep 为 ",[91,105524,105525],{},"0.005",[51,105527,105528,105529,28368],{},"重新运行，检查 50 步后时间是否约为 ",[91,105530,105531],{},"0.25",[51,105533,105534,105535,28368],{},"修改重力为 ",[91,105536,105537],{},"0 0 -1.0",[51,105539,105540],{},"观察小球下降速度是否变慢。",[51,105542,102388,105543,102391,105546,105549],{},[91,105544,105545],{},"data.qpos[2] = 2.0",[91,105547,105548],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[51,105551,105552,105553,105556],{},"注释掉 ",[91,105554,105555],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[35,105558,102430],{"id":102429},[65,105560,105562,105563,105565],{"id":105561},"修改-dataqpos-后位置没有更新","修改 ",[91,105564,101047],{}," 后位置没有更新",[40,105567,102439],{},[85,105569,105570],{"className":30361,"code":104520,"language":30363,"meta":14,"style":14},[91,105571,105572],{"__ignoreMap":14},[94,105573,105574],{"class":96,"line":97},[94,105575,104520],{"class":104},[65,105577,105578],{"id":105578},"数组维度看不懂",[40,105580,105581],{},"打印模型维度:",[85,105583,105585],{"className":30361,"code":105584,"language":30363,"meta":14,"style":14},"print(model.nq, model.nv, model.nu)\n",[91,105586,105587],{"__ignoreMap":14},[94,105588,105589,105591],{"class":96,"line":97},[94,105590,30398],{"class":153},[94,105592,105593],{"class":104},"(model.nq, model.nv, model.nu)\n",[242,105595,105596,105604],{},[245,105597,105598],{},[248,105599,105600,105602],{},[251,105601,104551],{"align":23718},[251,105603,100677],{"align":23718},[289,105605,105606,105616,105626],{},[248,105607,105608,105613],{},[294,105609,105610],{"align":23718},[91,105611,105612],{},"nq",[294,105614,105615],{"align":23718},"位置变量数量",[248,105617,105618,105623],{},[294,105619,105620],{"align":23718},[91,105621,105622],{},"nv",[294,105624,105625],{"align":23718},"速度变量数量",[248,105627,105628,105632],{},[294,105629,105630],{"align":23718},[91,105631,102139],{},[294,105633,105634],{"align":23718},"控制输入数量",[65,105636,105638,105639,105641],{"id":105637},"误以为-qpos-一定等于关节数","误以为 ",[91,105640,104007],{}," 一定等于关节数",[40,105643,105644,105645,82507,105647,105649,105650,105652],{},"不是。例如 ",[91,105646,101597],{},[91,105648,104007],{}," 是 7 维，但 ",[91,105651,104337],{}," 是 6 维。",[65,105654,105656,105657,105659],{"id":105655},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[91,105658,104007],{}," 的第几位",[40,105661,105662],{},"初学时可以先打印：",[85,105664,105666],{"className":30361,"code":105665,"language":30363,"meta":14,"style":14},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[91,105667,105668,105678,105688,105700],{"__ignoreMap":14},[94,105669,105670,105672,105674,105676],{"class":96,"line":97},[94,105671,30398],{"class":153},[94,105673,105],{"class":104},[94,105675,101416],{"class":209},[94,105677,101419],{"class":104},[94,105679,105680,105682,105684,105686],{"class":96,"line":15},[94,105681,30398],{"class":153},[94,105683,105],{"class":104},[94,105685,101428],{"class":209},[94,105687,101431],{"class":104},[94,105689,105690,105692,105694,105697],{"class":96,"line":1160},[94,105691,30398],{"class":153},[94,105693,105],{"class":104},[94,105695,105696],{"class":209},"\"qpos:\"",[94,105698,105699],{"class":104},", data.qpos)\n",[94,105701,105702,105704,105706,105709],{"class":96,"line":1175},[94,105703,30398],{"class":153},[94,105705,105],{"class":104},[94,105707,105708],{"class":209},"\"qvel:\"",[94,105710,105711],{"class":104},", data.qvel)\n",[40,105713,105714],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[65,105716,105717],{"id":105717},"仿真结果每次都一样",[40,105719,105720,105721,105723],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[91,105722,104007],{},"、目标点或控制输入。",[35,105725,102584],{"id":102583},[40,105727,105728,105729,24601],{},"Python 控制 MuJoCo 的核心就是读写 ",[91,105730,33384],{},[48,105732,105733,105741,105746,105751],{},[51,105734,105735,105736,100995,105738,105740],{},"用 ",[91,105737,101047],{},[91,105739,101050],{}," 读取状态。",[51,105742,105735,105743,105745],{},[91,105744,101053],{}," 写入控制。",[51,105747,105735,105748,105750],{},[91,105749,101192],{}," 推进时间。",[51,105752,105753,105754,105756],{},"手动改状态后用 ",[91,105755,104227],{}," 刷新派生量。",[40,105758,105759],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5108,105761,105762],{},"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":14,"searchDepth":15,"depth":15,"links":105764},[105765,105766,105767,105774,105778,105779,105780,105790],{"id":100623,"depth":15,"text":100624},{"id":100746,"depth":15,"text":100747},{"id":101021,"depth":15,"text":101022,"children":105768},[105769,105771,105773],{"id":104532,"depth":1160,"text":105770},"qpos、qvel、ctrl 是什么",{"id":104610,"depth":1160,"text":105772},"mj_step 和 mj_forward 的区别",{"id":104699,"depth":1160,"text":104700},{"id":101229,"depth":15,"text":101230,"children":105775},[105776,105777],{"id":101549,"depth":1160,"text":101549},{"id":101685,"depth":1160,"text":101685},{"id":102292,"depth":15,"text":102293},{"id":102324,"depth":15,"text":102325},{"id":102429,"depth":15,"text":102430,"children":105781},[105782,105784,105785,105787,105789],{"id":105561,"depth":1160,"text":105783},"修改 data.qpos 后位置没有更新",{"id":105578,"depth":1160,"text":105578},{"id":105637,"depth":1160,"text":105786},"误以为 qpos 一定等于关节数",{"id":105655,"depth":1160,"text":105788},"不知道某个元素在 qpos 的第几位",{"id":105717,"depth":1160,"text":105717},{"id":102583,"depth":15,"text":102584},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104295,"description":14},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105797,"title":105798,"body":105799,"description":14,"extension":18,"meta":107489,"navigation":20,"path":107490,"seo":107491,"stem":107492,"__hash__":107493},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105800,"toc":107465},[105801,105804,105806,105809,105811,105836,105839,105858,105861,105863,105865,105889,105891,105905,105907,105948,105950,105974,105976,105979,106013,106015,106028,106031,106099,106108,106112,106115,106149,106155,106158,106162,106201,106204,106224,106228,106271,106273,106302,106305,106311,106314,106316,106710,106712,106724,106726,106737,106739,106742,106771,106779,106782,106817,106820,106822,106830,106833,106835,106846,106856,106876,106879,106915,106927,106975,106994,107036,107049,107077,107082,107103,107113,107131,107134,107168,107171,107191,107194,107213,107219,107221,107224,107230,107236,107246,107249,107255,107264,107266,107312,107314,107320,107326,107329,107332,107352,107355,107361,107367,107369,107392,107395,107398,107407,107410,107448,107450,107453,107459,107462],[10,105802,105798],{"id":105803},"_4关节actuator-与力控制",[35,105805,100624],{"id":100623},[40,105807,105808],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[40,105810,104308],{},[48,105812,105813,105819,105824,105828,105833],{},[51,105814,105815,105818],{},[91,105816,105817],{},"hinge"," 关节",[51,105820,105821],{},[91,105822,105823],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[51,105825,105826],{},[91,105827,101053],{},[51,105829,105830],{},[91,105831,105832],{},"ctrlrange",[51,105834,105835],{},"读取关节角和角速度",[40,105837,105838],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[85,105840,105842],{"className":30361,"code":105841,"language":30363,"meta":14,"style":14},"data.ctrl[0] = ...\n",[91,105843,105844],{"__ignoreMap":14},[94,105845,105846,105849,105851,105853,105855],{"class":96,"line":97},[94,105847,105848],{"class":104},"data.ctrl[",[94,105850,296],{"class":153},[94,105852,4424],{"class":104},[94,105854,150],{"class":100},[94,105856,105857],{"class":153}," ...\n",[40,105859,105860],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[35,105862,100747],{"id":100746},[40,105864,100750],{},[85,105866,105867],{"className":23804,"code":104365,"language":23806,"meta":14,"style":14},[91,105868,105869],{"__ignoreMap":14},[94,105870,105871,105873,105875,105877,105879,105881,105883,105885,105887],{"class":96,"line":97},[94,105872,24559],{"class":1944},[94,105874,26298],{"class":209},[94,105876,23816],{"class":209},[94,105878,26383],{"class":153},[94,105880,104380],{"class":209},[94,105882,100775],{"class":209},[94,105884,102478],{"class":209},[94,105886,100791],{"class":209},[94,105888,104389],{"class":209},[40,105890,102796],{},[85,105892,105893],{"className":23804,"code":100896,"language":23806,"meta":14,"style":14},[91,105894,105895],{"__ignoreMap":14},[94,105896,105897,105899,105901,105903],{"class":96,"line":97},[94,105898,23813],{"class":1944},[94,105900,23816],{"class":209},[94,105902,100907],{"class":209},[94,105904,100910],{"class":209},[40,105906,102813],{},[85,105908,105910],{"className":23804,"code":105909,"language":23806,"meta":14,"style":14},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[91,105911,105912,105929,105938],{"__ignoreMap":14},[94,105913,105914,105916,105918,105920,105923,105925,105927],{"class":96,"line":97},[94,105915,30313],{"class":1944},[94,105917,29159],{"class":209},[94,105919,25098],{"class":153},[94,105921,105922],{"class":209}," mujoco-control",[94,105924,100952],{"class":209},[94,105926,100955],{"class":153},[94,105928,100958],{"class":153},[94,105930,105931,105933,105935],{"class":96,"line":15},[94,105932,30313],{"class":1944},[94,105934,100965],{"class":209},[94,105936,105937],{"class":209}," mujoco-control\n",[94,105939,105940,105942,105944,105946],{"class":96,"line":1160},[94,105941,23813],{"class":1944},[94,105943,23816],{"class":209},[94,105945,100907],{"class":209},[94,105947,100910],{"class":209},[40,105949,100981],{},[48,105951,105952,105958,105965,105971],{},[51,105953,105954,105957],{},[91,105955,105956],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[51,105959,105960,105962,105963,28368],{},[91,105961,101053],{}," 长度等于 ",[91,105964,102135],{},[51,105966,82199,105967,105970],{},[91,105968,105969],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[51,105972,105973],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[35,105975,101022],{"id":101021},[40,105977,105978],{},"关节决定 body 如何运动:",[85,105980,105982],{"className":53044,"code":105981,"language":53046,"meta":14,"style":14},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[91,105983,105984],{"__ignoreMap":14},[94,105985,105986,105988,105990,105992,105994,105997,105999,106001,106003,106006,106008,106011],{"class":96,"line":97},[94,105987,1015],{"class":104},[94,105989,102933],{"class":51277},[94,105991,14902],{"class":1944},[94,105993,150],{"class":104},[94,105995,105996],{"class":209},"\"hinge\"",[94,105998,53801],{"class":1944},[94,106000,150],{"class":104},[94,106002,105996],{"class":209},[94,106004,106005],{"class":1944}," axis",[94,106007,150],{"class":104},[94,106009,106010],{"class":209},"\"0 1 0\"",[94,106012,101121],{"class":104},[40,106014,103029],{},[48,106016,106017,106022,106025],{},[51,106018,106019,106020],{},"名字是 ",[91,106021,105817],{},[51,106023,106024],{},"类型是旋转关节",[51,106026,106027],{},"绕 y 轴旋转",[40,106029,106030],{},"actuator 决定如何施加控制:",[85,106032,106034],{"className":53044,"code":106033,"language":53046,"meta":14,"style":14},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[91,106035,106036,106045,106091],{"__ignoreMap":14},[94,106037,106038,106040,106043],{"class":96,"line":97},[94,106039,1015],{"class":104},[94,106041,106042],{"class":51277},"actuator",[94,106044,51284],{"class":104},[94,106046,106047,106049,106052,106054,106056,106059,106062,106064,106066,106069,106071,106073,106076,106078,106081,106084,106086,106089],{"class":96,"line":15},[94,106048,52121],{"class":104},[94,106050,106051],{"class":51277},"motor",[94,106053,14902],{"class":1944},[94,106055,150],{"class":104},[94,106057,106058],{"class":209},"\"hinge_motor\"",[94,106060,106061],{"class":1944}," joint",[94,106063,150],{"class":104},[94,106065,105996],{"class":209},[94,106067,106068],{"class":1944}," gear",[94,106070,150],{"class":104},[94,106072,3659],{"class":209},[94,106074,106075],{"class":1944}," ctrlrange",[94,106077,150],{"class":104},[94,106079,106080],{"class":209},"\"-2 2\"",[94,106082,106083],{"class":1944}," ctrllimited",[94,106085,150],{"class":104},[94,106087,106088],{"class":209},"\"true\"",[94,106090,101121],{"class":104},[94,106092,106093,106095,106097],{"class":96,"line":1160},[94,106094,51762],{"class":104},[94,106096,106042],{"class":51277},[94,106098,51284],{"class":104},[40,106100,106101,106104,106105,28368],{},[91,106102,106103],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[91,106106,106107],{},"[-2, 2]",[65,106109,106111],{"id":106110},"joint-和-actuator-的关系","joint 和 actuator 的关系",[40,106113,106114],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[242,106116,106117,106127],{},[245,106118,106119],{},[248,106120,106121,106123,106125],{},[251,106122,25736],{"align":23718},[251,106124,102673],{"align":23718},[251,106126,100711],{"align":23718},[289,106128,106129,106139],{},[248,106130,106131,106133,106136],{},[294,106132,102933],{"align":23718},[294,106134,106135],{"align":23718},"定义能怎么动",[294,106137,106138],{"align":23718},"门轴允许门旋转",[248,106140,106141,106143,106146],{},[294,106142,106042],{"align":23718},[294,106144,106145],{"align":23718},"定义怎么施力或控制",[294,106147,106148],{"align":23718},"人推门、马达带动门",[40,106150,106151,106152,106154],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[91,106153,101053],{}," 主动控制它。",[40,106156,106157],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[65,106159,106161],{"id":106160},"hinge-joint","hinge joint",[85,106163,106165],{"className":53044,"code":106164,"language":53046,"meta":14,"style":14},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[91,106166,106167],{"__ignoreMap":14},[94,106168,106169,106171,106173,106175,106177,106179,106181,106183,106185,106187,106189,106191,106194,106196,106199],{"class":96,"line":97},[94,106170,1015],{"class":104},[94,106172,102933],{"class":51277},[94,106174,14902],{"class":1944},[94,106176,150],{"class":104},[94,106178,105996],{"class":209},[94,106180,53801],{"class":1944},[94,106182,150],{"class":104},[94,106184,105996],{"class":209},[94,106186,106005],{"class":1944},[94,106188,150],{"class":104},[94,106190,106010],{"class":209},[94,106192,106193],{"class":1944}," damping",[94,106195,150],{"class":104},[94,106197,106198],{"class":209},"\"0.1\"",[94,106200,101121],{"class":104},[40,106202,106203],{},"含义：",[48,106205,106206,106212,106218],{},[51,106207,106208,106211],{},[91,106209,106210],{},"type=\"hinge\"","：只能绕一个轴旋转。",[51,106213,106214,106217],{},[91,106215,106216],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[51,106219,106220,106223],{},[91,106221,106222],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[65,106225,106227],{"id":106226},"motor-actuator","motor actuator",[85,106229,106231],{"className":53044,"code":106230,"language":53046,"meta":14,"style":14},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[91,106232,106233],{"__ignoreMap":14},[94,106234,106235,106237,106239,106241,106243,106245,106247,106249,106251,106253,106255,106257,106259,106261,106263,106265,106267,106269],{"class":96,"line":97},[94,106236,1015],{"class":104},[94,106238,106051],{"class":51277},[94,106240,14902],{"class":1944},[94,106242,150],{"class":104},[94,106244,106058],{"class":209},[94,106246,106061],{"class":1944},[94,106248,150],{"class":104},[94,106250,105996],{"class":209},[94,106252,106068],{"class":1944},[94,106254,150],{"class":104},[94,106256,3659],{"class":209},[94,106258,106075],{"class":1944},[94,106260,150],{"class":104},[94,106262,106080],{"class":209},[94,106264,106083],{"class":1944},[94,106266,150],{"class":104},[94,106268,106088],{"class":209},[94,106270,101121],{"class":104},[40,106272,106203],{},[48,106274,106275,106284,106290,106296],{},[51,106276,106277,106280,106281,106283],{},[91,106278,106279],{},"joint=\"hinge\"","：这个电机作用在名为 ",[91,106282,105817],{}," 的关节上。",[51,106285,106286,106289],{},[91,106287,106288],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[51,106291,106292,106295],{},[91,106293,106294],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[51,106297,106298,106301],{},[91,106299,106300],{},"ctrllimited=\"true\"","：启用控制范围限制。",[40,106303,106304],{},"简单理解：",[85,106306,106309],{"className":106307,"code":106308,"language":5169,"meta":14},[5167],"实际施加效果 ≈ data.ctrl[0] * gear\n",[91,106310,106308],{"__ignoreMap":14},[40,106312,106313],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[35,106315,101230],{"id":101229},[85,106317,106319],{"className":30361,"code":106318,"language":30363,"meta":14,"style":14},"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",[91,106320,106321,106328,106332,106338,106348,106352,106356,106364,106369,106374,106378,106382,106387,106392,106396,106401,106406,106411,106416,106420,106424,106428,106433,106438,106443,106447,106451,106455,106459,106471,106483,106491,106495,106505,106515,106525,106529,106542,106555,106559,106576,106590,106625,106629,106633,106644,106659,106674,106686,106690,106694,106706],{"__ignoreMap":14},[94,106322,106323,106325],{"class":96,"line":97},[94,106324,30375],{"class":100},[94,106326,106327],{"class":104}," math\n",[94,106329,106330],{"class":96,"line":15},[94,106331,2381],{"emptyLinePlaceholder":20},[94,106333,106334,106336],{"class":96,"line":1160},[94,106335,30375],{"class":100},[94,106337,101278],{"class":104},[94,106339,106340,106342,106344,106346],{"class":96,"line":1175},[94,106341,30375],{"class":100},[94,106343,31363],{"class":104},[94,106345,31366],{"class":100},[94,106347,31369],{"class":104},[94,106349,106350],{"class":96,"line":1181},[94,106351,2381],{"emptyLinePlaceholder":20},[94,106353,106354],{"class":96,"line":1195},[94,106355,2381],{"emptyLinePlaceholder":20},[94,106357,106358,106360,106362],{"class":96,"line":1201},[94,106359,101291],{"class":153},[94,106361,13546],{"class":100},[94,106363,101296],{"class":209},[94,106365,106366],{"class":96,"line":1292},[94,106367,106368],{"class":209},"\u003Cmujoco model=\"one_link_motor\">\n",[94,106370,106371],{"class":96,"line":1298},[94,106372,106373],{"class":209},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[94,106375,106376],{"class":96,"line":1310},[94,106377,2381],{"emptyLinePlaceholder":20},[94,106379,106380],{"class":96,"line":1593},[94,106381,101315],{"class":209},[94,106383,106384],{"class":96,"line":1598},[94,106385,106386],{"class":209},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[94,106388,106389],{"class":96,"line":1604},[94,106390,106391],{"class":209},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[94,106393,106394],{"class":96,"line":1609},[94,106395,2381],{"emptyLinePlaceholder":20},[94,106397,106398],{"class":96,"line":1623},[94,106399,106400],{"class":209},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[94,106402,106403],{"class":96,"line":1628},[94,106404,106405],{"class":209},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[94,106407,106408],{"class":96,"line":1634},[94,106409,106410],{"class":209},"        \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",[94,106412,106413],{"class":96,"line":1655},[94,106414,106415],{"class":209},"      \u003C\u002Fbody>\n",[94,106417,106418],{"class":96,"line":1660},[94,106419,101344],{"class":209},[94,106421,106422],{"class":96,"line":1674},[94,106423,101349],{"class":209},[94,106425,106426],{"class":96,"line":1679},[94,106427,2381],{"emptyLinePlaceholder":20},[94,106429,106430],{"class":96,"line":1708},[94,106431,106432],{"class":209},"  \u003Cactuator>\n",[94,106434,106435],{"class":96,"line":1713},[94,106436,106437],{"class":209},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[94,106439,106440],{"class":96,"line":1730},[94,106441,106442],{"class":209},"  \u003C\u002Factuator>\n",[94,106444,106445],{"class":96,"line":1735},[94,106446,101354],{"class":209},[94,106448,106449],{"class":96,"line":1740},[94,106450,95675],{"class":209},[94,106452,106453],{"class":96,"line":1745},[94,106454,2381],{"emptyLinePlaceholder":20},[94,106456,106457],{"class":96,"line":1759},[94,106458,2381],{"emptyLinePlaceholder":20},[94,106460,106461,106463,106465,106467,106469],{"class":96,"line":1764},[94,106462,31930],{"class":100},[94,106464,1954],{"class":1944},[94,106466,101375],{"class":104},[94,106468,95663],{"class":153},[94,106470,3720],{"class":104},[94,106472,106473,106475,106477,106479,106481],{"class":96,"line":2558},[94,106474,101384],{"class":104},[94,106476,150],{"class":100},[94,106478,101389],{"class":104},[94,106480,101291],{"class":153},[94,106482,111],{"class":104},[94,106484,106485,106487,106489],{"class":96,"line":2572},[94,106486,101398],{"class":104},[94,106488,150],{"class":100},[94,106490,101403],{"class":104},[94,106492,106493],{"class":96,"line":2580},[94,106494,2381],{"emptyLinePlaceholder":20},[94,106496,106497,106499,106501,106503],{"class":96,"line":2585},[94,106498,31282],{"class":153},[94,106500,105],{"class":104},[94,106502,101416],{"class":209},[94,106504,101419],{"class":104},[94,106506,106507,106509,106511,106513],{"class":96,"line":2591},[94,106508,31282],{"class":153},[94,106510,105],{"class":104},[94,106512,101428],{"class":209},[94,106514,101431],{"class":104},[94,106516,106517,106519,106521,106523],{"class":96,"line":2597},[94,106518,31282],{"class":153},[94,106520,105],{"class":104},[94,106522,101440],{"class":209},[94,106524,101443],{"class":104},[94,106526,106527],{"class":96,"line":2602},[94,106528,2381],{"emptyLinePlaceholder":20},[94,106530,106531,106533,106536,106538,106540],{"class":96,"line":7930},[94,106532,3082],{"class":100},[94,106534,106535],{"class":104}," model.nu ",[94,106537,20930],{"class":100},[94,106539,25101],{"class":153},[94,106541,3720],{"class":104},[94,106543,106544,106546,106548,106550,106553],{"class":96,"line":7954},[94,106545,103409],{"class":100},[94,106547,103412],{"class":153},[94,106549,105],{"class":104},[94,106551,106552],{"class":209},"\"expected exactly one actuator\"",[94,106554,111],{"class":104},[94,106556,106557],{"class":96,"line":7959},[94,106558,2381],{"emptyLinePlaceholder":20},[94,106560,106561,106563,106565,106567,106569,106571,106574],{"class":96,"line":7965},[94,106562,3182],{"class":100},[94,106564,31599],{"class":104},[94,106566,26026],{"class":100},[94,106568,32426],{"class":153},[94,106570,105],{"class":104},[94,106572,106573],{"class":153},"2000",[94,106575,30769],{"class":104},[94,106577,106578,106581,106583,106585,106587],{"class":96,"line":7992},[94,106579,106580],{"class":104},"        t ",[94,106582,150],{"class":100},[94,106584,31599],{"class":104},[94,106586,560],{"class":100},[94,106588,106589],{"class":104}," model.opt.timestep\n",[94,106591,106592,106595,106597,106599,106601,106604,106606,106609,106611,106613,106616,106618,106620,106622],{"class":96,"line":7997},[94,106593,106594],{"class":104},"        data.ctrl[",[94,106596,296],{"class":153},[94,106598,4424],{"class":104},[94,106600,150],{"class":100},[94,106602,106603],{"class":153}," 1.5",[94,106605,6500],{"class":100},[94,106607,106608],{"class":104}," math.sin(",[94,106610,105237],{"class":153},[94,106612,6500],{"class":100},[94,106614,106615],{"class":104}," math.pi ",[94,106617,560],{"class":100},[94,106619,61844],{"class":153},[94,106621,6500],{"class":100},[94,106623,106624],{"class":104}," t)\n",[94,106626,106627],{"class":96,"line":8003},[94,106628,101493],{"class":104},[94,106630,106631],{"class":96,"line":8015},[94,106632,2381],{"emptyLinePlaceholder":20},[94,106634,106635,106637,106639,106642],{"class":96,"line":8027},[94,106636,31282],{"class":153},[94,106638,105],{"class":104},[94,106640,106641],{"class":209},"\"time:\"",[94,106643,101455],{"class":104},[94,106645,106646,106648,106650,106653,106655,106657],{"class":96,"line":8039},[94,106647,31282],{"class":153},[94,106649,105],{"class":104},[94,106651,106652],{"class":209},"\"joint qpos:\"",[94,106654,104907],{"class":104},[94,106656,398],{"class":153},[94,106658,30480],{"class":104},[94,106660,106661,106663,106665,106668,106670,106672],{"class":96,"line":9698},[94,106662,31282],{"class":153},[94,106664,105],{"class":104},[94,106666,106667],{"class":209},"\"joint qvel:\"",[94,106669,104923],{"class":104},[94,106671,398],{"class":153},[94,106673,30480],{"class":104},[94,106675,106676,106678,106680,106683],{"class":96,"line":9723},[94,106677,31282],{"class":153},[94,106679,105],{"class":104},[94,106681,106682],{"class":209},"\"last ctrl:\"",[94,106684,106685],{"class":104},", data.ctrl.copy())\n",[94,106687,106688],{"class":96,"line":9746},[94,106689,2381],{"emptyLinePlaceholder":20},[94,106691,106692],{"class":96,"line":9770},[94,106693,2381],{"emptyLinePlaceholder":20},[94,106695,106696,106698,106700,106702,106704],{"class":96,"line":9775},[94,106697,1512],{"class":100},[94,106699,31203],{"class":153},[94,106701,101536],{"class":100},[94,106703,101539],{"class":209},[94,106705,3720],{"class":104},[94,106707,106708],{"class":96,"line":9780},[94,106709,101546],{"class":104},[40,106711,103547],{},[85,106713,106715],{"className":23804,"code":106714,"language":23806,"meta":14,"style":14},"touch ch4_joint_motor.py\n",[91,106716,106717],{"__ignoreMap":14},[94,106718,106719,106721],{"class":96,"line":97},[94,106720,101260],{"class":1944},[94,106722,106723],{"class":209}," ch4_joint_motor.py\n",[40,106725,102278],{},[85,106727,106729],{"className":23804,"code":106728,"language":23806,"meta":14,"style":14},"python ch4_joint_motor.py\n",[91,106730,106731],{"__ignoreMap":14},[94,106732,106733,106735],{"class":96,"line":97},[94,106734,30363],{"class":1944},[94,106736,106723],{"class":209},[65,106738,101549],{"id":101549},[40,106740,106741],{},"检查 actuator 数量：",[85,106743,106745],{"className":30361,"code":106744,"language":30363,"meta":14,"style":14},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[91,106746,106747,106759],{"__ignoreMap":14},[94,106748,106749,106751,106753,106755,106757],{"class":96,"line":97},[94,106750,1512],{"class":100},[94,106752,106535],{"class":104},[94,106754,20930],{"class":100},[94,106756,25101],{"class":153},[94,106758,3720],{"class":104},[94,106760,106761,106763,106765,106767,106769],{"class":96,"line":15},[94,106762,103872],{"class":100},[94,106764,103412],{"class":153},[94,106766,105],{"class":104},[94,106768,106552],{"class":209},[94,106770,111],{"class":104},[40,106772,106773,106775,106776,106778],{},[91,106774,102135],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[91,106777,101053],{}," 长度应该是 1。",[40,106780,106781],{},"产生正弦控制信号：",[85,106783,106785],{"className":30361,"code":106784,"language":30363,"meta":14,"style":14},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[91,106786,106787],{"__ignoreMap":14},[94,106788,106789,106791,106793,106795,106797,106799,106801,106803,106805,106807,106809,106811,106813,106815],{"class":96,"line":97},[94,106790,105848],{"class":104},[94,106792,296],{"class":153},[94,106794,4424],{"class":104},[94,106796,150],{"class":100},[94,106798,106603],{"class":153},[94,106800,6500],{"class":100},[94,106802,106608],{"class":104},[94,106804,105237],{"class":153},[94,106806,6500],{"class":100},[94,106808,106615],{"class":104},[94,106810,560],{"class":100},[94,106812,61844],{"class":153},[94,106814,6500],{"class":100},[94,106816,106624],{"class":104},[40,106818,106819],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[40,106821,101650],{},[85,106823,106824],{"className":30361,"code":104482,"language":30363,"meta":14,"style":14},[91,106825,106826],{"__ignoreMap":14},[94,106827,106828],{"class":96,"line":97},[94,106829,104482],{"class":104},[40,106831,106832],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[65,106834,101685],{"id":101685},[85,106836,106838],{"className":30361,"code":106837,"language":30363,"meta":14,"style":14},"import math\n",[91,106839,106840],{"__ignoreMap":14},[94,106841,106842,106844],{"class":96,"line":97},[94,106843,30375],{"class":100},[94,106845,106327],{"class":104},[40,106847,106848,106849,100995,106852,106855],{},"导入 Python 标准库里的数学模块。后面要用 ",[91,106850,106851],{},"math.sin",[91,106853,106854],{},"math.pi"," 生成周期变化的控制信号。",[85,106857,106858],{"className":30361,"code":103663,"language":30363,"meta":14,"style":14},[91,106859,106860,106866],{"__ignoreMap":14},[94,106861,106862,106864],{"class":96,"line":97},[94,106863,30375],{"class":100},[94,106865,101278],{"class":104},[94,106867,106868,106870,106872,106874],{"class":96,"line":15},[94,106869,30375],{"class":100},[94,106871,31363],{"class":104},[94,106873,31366],{"class":100},[94,106875,31369],{"class":104},[40,106877,106878],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[85,106880,106881],{"className":53044,"code":106164,"language":53046,"meta":14,"style":14},[91,106882,106883],{"__ignoreMap":14},[94,106884,106885,106887,106889,106891,106893,106895,106897,106899,106901,106903,106905,106907,106909,106911,106913],{"class":96,"line":97},[94,106886,1015],{"class":104},[94,106888,102933],{"class":51277},[94,106890,14902],{"class":1944},[94,106892,150],{"class":104},[94,106894,105996],{"class":209},[94,106896,53801],{"class":1944},[94,106898,150],{"class":104},[94,106900,105996],{"class":209},[94,106902,106005],{"class":1944},[94,106904,150],{"class":104},[94,106906,106010],{"class":209},[94,106908,106193],{"class":1944},[94,106910,150],{"class":104},[94,106912,106198],{"class":209},[94,106914,101121],{"class":104},[40,106916,106917,106918,106920,106921,106923,106924,106926],{},"这行定义关节。",[91,106919,105817],{}," 表示旋转关节。",[91,106922,106216],{}," 表示绕 y 轴旋转。",[91,106925,106222],{}," 表示有一点阻尼，运动不会完全无损耗。",[85,106928,106930],{"className":53044,"code":106929,"language":53046,"meta":14,"style":14},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[91,106931,106932],{"__ignoreMap":14},[94,106933,106934,106936,106938,106940,106942,106945,106947,106949,106952,106955,106957,106960,106962,106964,106966,106968,106970,106973],{"class":96,"line":97},[94,106935,1015],{"class":104},[94,106937,101097],{"class":51277},[94,106939,14902],{"class":1944},[94,106941,150],{"class":104},[94,106943,106944],{"class":209},"\"link_geom\"",[94,106946,53801],{"class":1944},[94,106948,150],{"class":104},[94,106950,106951],{"class":209},"\"capsule\"",[94,106953,106954],{"class":1944}," fromto",[94,106956,150],{"class":104},[94,106958,106959],{"class":209},"\"0 0 0 0 0 0.5\"",[94,106961,101113],{"class":1944},[94,106963,150],{"class":104},[94,106965,103755],{"class":209},[94,106967,101978],{"class":1944},[94,106969,150],{"class":104},[94,106971,106972],{"class":209},"\"0.5\"",[94,106974,101121],{"class":104},[40,106976,106977,106978,106980,106981,106983,106984,106987,106988,28368,106991,106993],{},"这行定义摆杆的形状。",[91,106979,103142],{}," 是胶囊体，适合表示杆子。",[91,106982,103153],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[91,106985,106986],{},"(0,0,0)"," 延伸到 ",[91,106989,106990],{},"(0,0,0.5)",[91,106992,103147],{}," 是半径。",[85,106995,106996],{"className":53044,"code":106230,"language":53046,"meta":14,"style":14},[91,106997,106998],{"__ignoreMap":14},[94,106999,107000,107002,107004,107006,107008,107010,107012,107014,107016,107018,107020,107022,107024,107026,107028,107030,107032,107034],{"class":96,"line":97},[94,107001,1015],{"class":104},[94,107003,106051],{"class":51277},[94,107005,14902],{"class":1944},[94,107007,150],{"class":104},[94,107009,106058],{"class":209},[94,107011,106061],{"class":1944},[94,107013,150],{"class":104},[94,107015,105996],{"class":209},[94,107017,106068],{"class":1944},[94,107019,150],{"class":104},[94,107021,3659],{"class":209},[94,107023,106075],{"class":1944},[94,107025,150],{"class":104},[94,107027,106080],{"class":209},[94,107029,106083],{"class":1944},[94,107031,150],{"class":104},[94,107033,106088],{"class":209},[94,107035,101121],{"class":104},[40,107037,107038,107039,107041,107042,107045,107046,107048],{},"这行定义电机。它作用在 ",[91,107040,105817],{}," 关节上。",[91,107043,107044],{},"gear"," 可以理解成放大倍数。",[91,107047,105832],{}," 限制控制输入范围。",[85,107050,107051],{"className":30361,"code":106744,"language":30363,"meta":14,"style":14},[91,107052,107053,107065],{"__ignoreMap":14},[94,107054,107055,107057,107059,107061,107063],{"class":96,"line":97},[94,107056,1512],{"class":100},[94,107058,106535],{"class":104},[94,107060,20930],{"class":100},[94,107062,25101],{"class":153},[94,107064,3720],{"class":104},[94,107066,107067,107069,107071,107073,107075],{"class":96,"line":15},[94,107068,103872],{"class":100},[94,107070,103412],{"class":153},[94,107072,105],{"class":104},[94,107074,106552],{"class":209},[94,107076,111],{"class":104},[40,107078,107079,107081],{},[91,107080,102135],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[85,107083,107085],{"className":30361,"code":107084,"language":30363,"meta":14,"style":14},"for step in range(2000):\n",[91,107086,107087],{"__ignoreMap":14},[94,107088,107089,107091,107093,107095,107097,107099,107101],{"class":96,"line":97},[94,107090,3006],{"class":100},[94,107092,31599],{"class":104},[94,107094,26026],{"class":100},[94,107096,32426],{"class":153},[94,107098,105],{"class":104},[94,107100,106573],{"class":153},[94,107102,30769],{"class":104},[40,107104,107105,107106,107108,107109,107112],{},"循环 2000 步。这里没有用 ",[91,107107,1097],{},"，而是用 ",[91,107110,107111],{},"step","，因为后面要用当前步数计算时间。",[85,107114,107116],{"className":30361,"code":107115,"language":30363,"meta":14,"style":14},"t = step * model.opt.timestep\n",[91,107117,107118],{"__ignoreMap":14},[94,107119,107120,107123,107125,107127,107129],{"class":96,"line":97},[94,107121,107122],{"class":104},"t ",[94,107124,150],{"class":100},[94,107126,31599],{"class":104},[94,107128,560],{"class":100},[94,107130,106589],{"class":104},[40,107132,107133],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[85,107135,107136],{"className":30361,"code":106784,"language":30363,"meta":14,"style":14},[91,107137,107138],{"__ignoreMap":14},[94,107139,107140,107142,107144,107146,107148,107150,107152,107154,107156,107158,107160,107162,107164,107166],{"class":96,"line":97},[94,107141,105848],{"class":104},[94,107143,296],{"class":153},[94,107145,4424],{"class":104},[94,107147,150],{"class":100},[94,107149,106603],{"class":153},[94,107151,6500],{"class":100},[94,107153,106608],{"class":104},[94,107155,105237],{"class":153},[94,107157,6500],{"class":100},[94,107159,106615],{"class":104},[94,107161,560],{"class":100},[94,107163,61844],{"class":153},[94,107165,6500],{"class":100},[94,107167,106624],{"class":104},[40,107169,107170],{},"这行给电机输入一个正弦波。拆开看：",[48,107172,107173,107179,107185],{},[51,107174,107175,107178],{},[91,107176,107177],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[51,107180,107181,107184],{},[91,107182,107183],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[51,107186,107187,107190],{},[91,107188,107189],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[40,107192,107193],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[85,107195,107197],{"className":30361,"code":107196,"language":30363,"meta":14,"style":14},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[91,107198,107199],{"__ignoreMap":14},[94,107200,107201,107203,107205,107207,107209,107211],{"class":96,"line":97},[94,107202,30398],{"class":153},[94,107204,105],{"class":104},[94,107206,106652],{"class":209},[94,107208,104907],{"class":104},[94,107210,398],{"class":153},[94,107212,30480],{"class":104},[40,107214,107215,107216,107218],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[91,107217,101047],{}," 只有一个数。",[35,107220,102293],{"id":102292},[40,107222,107223],{},"输出类似:",[85,107225,107228],{"className":107226,"code":107227,"language":5169,"meta":14},[5167],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[91,107229,107227],{"__ignoreMap":14},[40,107231,107232,107233,107235],{},"这里 ",[91,107234,106103],{}," 是电机输入。",[40,107237,107238,107241,107242,107245],{},[91,107239,107240],{},"joint qpos"," 是关节角度，单位通常是弧度。",[91,107243,107244],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[40,107247,107248],{},"角度单位提示：",[85,107250,107253],{"className":107251,"code":107252,"language":5169,"meta":14},[5167],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[91,107254,107252],{"__ignoreMap":14},[40,107256,107257,107258,107260,107261,107263],{},"如果你看到 ",[91,107259,104007],{}," 是 ",[91,107262,35312],{},"，大约就是 28.6 度。",[35,107265,102325],{"id":102324},[48,107267,107268,107275,107278,107285,107288,107296,107304],{},[51,107269,102388,107270,102391,107272,28368],{},[91,107271,106288],{},[91,107273,107274],{},"gear=\"5\"",[51,107276,107277],{},"重新运行，观察关节运动是否更剧烈。",[51,107279,102388,107280,102391,107282,28368],{},[91,107281,105832],{},[91,107283,107284],{},"-0.2 0.2",[51,107286,107287],{},"重新运行，观察控制能力是否变弱。",[51,107289,107290,107291,107293,107294,28368],{},"去掉 actuator，确认 ",[91,107292,102135],{}," 变成 ",[91,107295,296],{},[51,107297,102388,107298,102391,107300,107303],{},[91,107299,106222],{},[91,107301,107302],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[51,107305,102388,107306,102391,107308,107311],{},[91,107307,106216],{},[91,107309,107310],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[35,107313,102430],{"id":102429},[65,107315,107317],{"id":107316},"indexerror-index-0-is-out-of-bounds",[91,107318,107319],{},"IndexError: index 0 is out of bounds",[40,107321,107322,107323,107325],{},"原因是 ",[91,107324,105969],{},"，没有 actuator。",[65,107327,107328],{"id":107328},"关节几乎不动",[40,107330,107331],{},"可能原因:",[48,107333,107334,107339,107343,107349],{},[51,107335,107336,107338],{},[91,107337,107044],{}," 太小",[51,107340,107341,107338],{},[91,107342,105832],{},[51,107344,107345,107348],{},[91,107346,107347],{},"damping"," 太大",[51,107350,107351],{},"重力方向导致运动不明显",[65,107353,107354],{"id":107354},"模型编译失败",[40,107356,107357,107358,107360],{},"检查 actuator 引用的 ",[91,107359,106279],{}," 是否存在，joint 名称是否拼写一致。",[65,107362,107364,107366],{"id":107363},"datactrl0-写了但没有效果",[91,107365,106103],{}," 写了但没有效果",[40,107368,102552],{},[48,107370,107371,107376,107379,107384,107389],{},[51,107372,107373,107375],{},[91,107374,102135],{}," 是否大于 0。",[51,107377,107378],{},"motor 是否引用了正确 joint。",[51,107380,107381,107383],{},[91,107382,107044],{}," 是否太小。",[51,107385,107386,107388],{},[91,107387,105832],{}," 是否把输入限制得太小。",[51,107390,107391],{},"body 是否真的有可动 joint。",[65,107393,107394],{"id":107394},"控制输入超过范围会怎样",[40,107396,107397],{},"如果设置了：",[85,107399,107401],{"className":53044,"code":107400,"language":53046,"meta":14,"style":14},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[91,107402,107403],{"__ignoreMap":14},[94,107404,107405],{"class":96,"line":97},[94,107406,107400],{"class":104},[40,107408,107409],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[85,107411,107413],{"className":30361,"code":107412,"language":30363,"meta":14,"style":14},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[91,107414,107415,107435],{"__ignoreMap":14},[94,107416,107417,107420,107422,107425,107427,107429,107431,107433],{"class":96,"line":97},[94,107418,107419],{"class":104},"action ",[94,107421,150],{"class":100},[94,107423,107424],{"class":104}," np.clip(action, ",[94,107426,637],{"class":100},[94,107428,105237],{"class":153},[94,107430,12417],{"class":104},[94,107432,105237],{"class":153},[94,107434,111],{"class":104},[94,107436,107437,107439,107441,107443,107445],{"class":96,"line":15},[94,107438,105848],{"class":104},[94,107440,296],{"class":153},[94,107442,4424],{"class":104},[94,107444,150],{"class":100},[94,107446,107447],{"class":104}," action\n",[35,107449,102584],{"id":102583},[40,107451,107452],{},"这一章建立了控制任务的基本形式：",[85,107454,107457],{"className":107455,"code":107456,"language":5169,"meta":14},[5167],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[91,107458,107456],{"__ignoreMap":14},[40,107460,107461],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5108,107463,107464],{},"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":14,"searchDepth":15,"depth":15,"links":107466},[107467,107468,107469,107474,107478,107479,107480,107488],{"id":100623,"depth":15,"text":100624},{"id":100746,"depth":15,"text":100747},{"id":101021,"depth":15,"text":101022,"children":107470},[107471,107472,107473],{"id":106110,"depth":1160,"text":106111},{"id":106160,"depth":1160,"text":106161},{"id":106226,"depth":1160,"text":106227},{"id":101229,"depth":15,"text":101230,"children":107475},[107476,107477],{"id":101549,"depth":1160,"text":101549},{"id":101685,"depth":1160,"text":101685},{"id":102292,"depth":15,"text":102293},{"id":102324,"depth":15,"text":102325},{"id":102429,"depth":15,"text":102430,"children":107481},[107482,107483,107484,107485,107487],{"id":107316,"depth":1160,"text":107319},{"id":107328,"depth":1160,"text":107328},{"id":107354,"depth":1160,"text":107354},{"id":107363,"depth":1160,"text":107486},"data.ctrl[0] 写了但没有效果",{"id":107394,"depth":1160,"text":107394},{"id":102583,"depth":15,"text":102584},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105798,"description":14},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107495,"title":107496,"body":107497,"description":14,"extension":18,"meta":109406,"navigation":20,"path":109407,"seo":109408,"stem":109409,"__hash__":109410},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107498,"toc":109382},[107499,107502,107504,107507,107515,107518,107535,107538,107563,107566,107612,107614,107616,107671,107673,107692,107694,107737,107740,107757,107760,107776,107786,107793,107795,107798,107801,107835,107838,107886,107890,107893,107907,107916,107920,107923,107948,107951,107955,107968,107971,107977,107980,107995,107997,108000,108260,108262,108274,108277,108589,108591,108603,108605,108608,108623,108628,108631,108653,108656,108659,108693,108696,108700,108711,108714,108731,108734,108748,108755,108775,108782,108796,108799,108811,108826,108846,108849,108871,108874,108878,108893,108904,108919,108922,108952,108968,108997,109005,109029,109032,109050,109060,109072,109079,109088,109094,109103,109106,109108,109117,109120,109135,109137,109140,109151,109154,109165,109168,109186,109188,109205,109208,109236,109238,109242,109245,109275,109281,109284,109288,109296,109299,109301,109322,109325,109328,109344,109347,109363,109365,109368,109379],[10,107500,107496],{"id":107501},"_5viewer-可视化与-renderer-离屏渲染",[35,107503,100624],{"id":100623},[40,107505,107506],{},"本章掌握两类可视化方式:",[48,107508,107509,107512],{},[51,107510,107511],{},"交互式 viewer: 适合人工观察仿真",[51,107513,107514],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[40,107516,107517],{},"使用官方接口:",[85,107519,107521],{"className":30361,"code":107520,"language":30363,"meta":14,"style":14},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[91,107522,107523,107530],{"__ignoreMap":14},[94,107524,107525,107527],{"class":96,"line":97},[94,107526,30375],{"class":100},[94,107528,107529],{"class":104}," mujoco.viewer\n",[94,107531,107532],{"class":96,"line":15},[94,107533,107534],{"class":104},"mujoco.viewer.launch_passive(model, data)\n",[40,107536,107537],{},"以及:",[85,107539,107541],{"className":30361,"code":107540,"language":30363,"meta":14,"style":14},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[91,107542,107543,107553],{"__ignoreMap":14},[94,107544,107545,107548,107550],{"class":96,"line":97},[94,107546,107547],{"class":104},"renderer ",[94,107549,150],{"class":100},[94,107551,107552],{"class":104}," mujoco.Renderer(model)\n",[94,107554,107555,107558,107560],{"class":96,"line":15},[94,107556,107557],{"class":104},"image ",[94,107559,150],{"class":100},[94,107561,107562],{"class":104}," renderer.render()\n",[40,107564,107565],{},"新手建议先理解二者区别：",[242,107567,107568,107584],{},[245,107569,107570],{},[248,107571,107572,107575,107578,107581],{},[251,107573,107574],{"align":23718},"工具",[251,107576,107577],{"align":23718},"用途",[251,107579,107580],{"align":23718},"是否打开窗口",[251,107582,107583],{"align":23718},"常见场景",[289,107585,107586,107599],{},[248,107587,107588,107591,107594,107596],{},[294,107589,107590],{"align":23718},"Viewer",[294,107592,107593],{"align":23718},"人眼实时观察仿真",[294,107595,104642],{"align":23718},[294,107597,107598],{"align":23718},"调试模型、看控制效果",[248,107600,107601,107604,107607,107609],{},[294,107602,107603],{"align":23718},"Renderer",[294,107605,107606],{"align":23718},"生成图像数组",[294,107608,104655],{"align":23718},[294,107610,107611],{"align":23718},"保存图片、训练视觉策略、服务器批量采集",[35,107613,100747],{"id":100746},[40,107615,100750],{},[85,107617,107619],{"className":23804,"code":107618,"language":23806,"meta":14,"style":14},"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",[91,107620,107621,107633,107643,107651,107659],{"__ignoreMap":14},[94,107622,107623,107625,107627,107629,107631],{"class":96,"line":97},[94,107624,24559],{"class":1944},[94,107626,26298],{"class":209},[94,107628,23816],{"class":209},[94,107630,26383],{"class":153},[94,107632,24661],{"class":153},[94,107634,107635,107637,107639,107641],{"class":96,"line":15},[94,107636,100785],{"class":209},[94,107638,100788],{"class":209},[94,107640,100791],{"class":209},[94,107642,24661],{"class":153},[94,107644,107645,107647,107649],{"class":96,"line":1160},[94,107646,100798],{"class":209},[94,107648,100801],{"class":209},[94,107650,24661],{"class":153},[94,107652,107653,107655,107657],{"class":96,"line":1175},[94,107654,100808],{"class":209},[94,107656,100811],{"class":209},[94,107658,24661],{"class":153},[94,107660,107661,107663,107665,107667,107669],{"class":96,"line":1181},[94,107662,100818],{"class":209},[94,107664,100821],{"class":209},[94,107666,100824],{"class":209},[94,107668,100827],{"class":209},[94,107670,102493],{"class":209},[40,107672,102796],{},[85,107674,107676],{"className":23804,"code":107675,"language":23806,"meta":14,"style":14},"pip install \"mujoco>=2.3\" numpy pillow\n",[91,107677,107678],{"__ignoreMap":14},[94,107679,107680,107682,107684,107686,107689],{"class":96,"line":97},[94,107681,23813],{"class":1944},[94,107683,23816],{"class":209},[94,107685,100907],{"class":209},[94,107687,107688],{"class":209}," numpy",[94,107690,107691],{"class":209}," pillow\n",[40,107693,102813],{},[85,107695,107697],{"className":23804,"code":107696,"language":23806,"meta":14,"style":14},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[91,107698,107699,107716,107725],{"__ignoreMap":14},[94,107700,107701,107703,107705,107707,107710,107712,107714],{"class":96,"line":97},[94,107702,30313],{"class":1944},[94,107704,29159],{"class":209},[94,107706,25098],{"class":153},[94,107708,107709],{"class":209}," mujoco-render",[94,107711,100952],{"class":209},[94,107713,100955],{"class":153},[94,107715,100958],{"class":153},[94,107717,107718,107720,107722],{"class":96,"line":15},[94,107719,30313],{"class":1944},[94,107721,100965],{"class":209},[94,107723,107724],{"class":209}," mujoco-render\n",[94,107726,107727,107729,107731,107733,107735],{"class":96,"line":1160},[94,107728,23813],{"class":1944},[94,107730,23816],{"class":209},[94,107732,100907],{"class":209},[94,107734,107688],{"class":209},[94,107736,107691],{"class":209},[40,107738,107739],{},"离屏渲染后端:",[85,107741,107743],{"className":23804,"code":107742,"language":23806,"meta":14,"style":14},"export MUJOCO_GL=egl\n",[91,107744,107745],{"__ignoreMap":14},[94,107746,107747,107749,107752,107754],{"class":96,"line":97},[94,107748,25025],{"class":100},[94,107750,107751],{"class":104}," MUJOCO_GL",[94,107753,150],{"class":100},[94,107755,107756],{"class":104},"egl\n",[40,107758,107759],{},"或:",[85,107761,107763],{"className":23804,"code":107762,"language":23806,"meta":14,"style":14},"export MUJOCO_GL=osmesa\n",[91,107764,107765],{"__ignoreMap":14},[94,107766,107767,107769,107771,107773],{"class":96,"line":97},[94,107768,25025],{"class":100},[94,107770,107751],{"class":104},[94,107772,150],{"class":100},[94,107774,107775],{"class":104},"osmesa\n",[40,107777,107778,107779,107782,107783,28368],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[91,107780,107781],{},"egl"," 失败，再尝试 ",[91,107784,107785],{},"osmesa",[40,107787,107788,107789,107792],{},"如果你在本机桌面环境运行，通常先不要设置 ",[91,107790,107791],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[35,107794,101022],{"id":101021},[40,107796,107797],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[40,107799,107800],{},"典型 viewer 流程:",[85,107802,107804],{"className":30361,"code":107803,"language":30363,"meta":14,"style":14},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[91,107805,107806,107819,107826,107830],{"__ignoreMap":14},[94,107807,107808,107811,107814,107816],{"class":96,"line":97},[94,107809,107810],{"class":100},"with",[94,107812,107813],{"class":104}," mujoco.viewer.launch_passive(model, data) ",[94,107815,31366],{"class":100},[94,107817,107818],{"class":104}," viewer:\n",[94,107820,107821,107823],{"class":96,"line":15},[94,107822,2232],{"class":100},[94,107824,107825],{"class":104}," viewer.is_running():\n",[94,107827,107828],{"class":96,"line":1160},[94,107829,101493],{"class":104},[94,107831,107832],{"class":96,"line":1175},[94,107833,107834],{"class":104},"        viewer.sync()\n",[40,107836,107837],{},"典型 renderer 流程:",[85,107839,107841],{"className":30361,"code":107840,"language":30363,"meta":14,"style":14},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[91,107842,107843,107869,107873,107878],{"__ignoreMap":14},[94,107844,107845,107847,107849,107852,107854,107856,107858,107860,107862,107864,107867],{"class":96,"line":97},[94,107846,107547],{"class":104},[94,107848,150],{"class":100},[94,107850,107851],{"class":104}," mujoco.Renderer(model, ",[94,107853,24964],{"class":5198},[94,107855,150],{"class":100},[94,107857,42325],{"class":153},[94,107859,12417],{"class":104},[94,107861,24960],{"class":5198},[94,107863,150],{"class":100},[94,107865,107866],{"class":153},"640",[94,107868,111],{"class":104},[94,107870,107871],{"class":96,"line":15},[94,107872,104482],{"class":104},[94,107874,107875],{"class":96,"line":1160},[94,107876,107877],{"class":104},"renderer.update_scene(data)\n",[94,107879,107880,107882,107884],{"class":96,"line":1175},[94,107881,107557],{"class":104},[94,107883,150],{"class":100},[94,107885,107562],{"class":104},[65,107887,107889],{"id":107888},"viewer-的同步逻辑","viewer 的同步逻辑",[40,107891,107892],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[85,107894,107896],{"className":30361,"code":107895,"language":30363,"meta":14,"style":14},"mujoco.mj_step(model, data)\nviewer.sync()\n",[91,107897,107898,107902],{"__ignoreMap":14},[94,107899,107900],{"class":96,"line":97},[94,107901,104482],{"class":104},[94,107903,107904],{"class":96,"line":15},[94,107905,107906],{"class":104},"viewer.sync()\n",[40,107908,107909,107911,107912,107915],{},[91,107910,101192],{}," 负责算物理，",[91,107913,107914],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[65,107917,107919],{"id":107918},"为什么要-sleep","为什么要 sleep",[40,107921,107922],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[85,107924,107926],{"className":30361,"code":107925,"language":30363,"meta":14,"style":14},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[91,107927,107928],{"__ignoreMap":14},[94,107929,107930,107933,107935,107938,107940,107943,107945],{"class":96,"line":97},[94,107931,107932],{"class":104},"sleep_time ",[94,107934,150],{"class":100},[94,107936,107937],{"class":104}," model.opt.timestep ",[94,107939,637],{"class":100},[94,107941,107942],{"class":104}," (time.time() ",[94,107944,637],{"class":100},[94,107946,107947],{"class":104}," step_start)\n",[40,107949,107950],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[65,107952,107954],{"id":107953},"renderer-输出是什么","renderer 输出是什么",[85,107956,107958],{"className":30361,"code":107957,"language":30363,"meta":14,"style":14},"image = renderer.render()\n",[91,107959,107960],{"__ignoreMap":14},[94,107961,107962,107964,107966],{"class":96,"line":97},[94,107963,107557],{"class":104},[94,107965,150],{"class":100},[94,107967,107562],{"class":104},[40,107969,107970],{},"得到的是 NumPy 数组，形状通常是：",[85,107972,107975],{"className":107973,"code":107974,"language":5169,"meta":14},[5167],"(height, width, 3)\n",[91,107976,107974],{"__ignoreMap":14},[40,107978,107979],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[85,107981,107983],{"className":30361,"code":107982,"language":30363,"meta":14,"style":14},"Image.fromarray(image).save(\"render_output.png\")\n",[91,107984,107985],{"__ignoreMap":14},[94,107986,107987,107990,107993],{"class":96,"line":97},[94,107988,107989],{"class":104},"Image.fromarray(image).save(",[94,107991,107992],{"class":209},"\"render_output.png\"",[94,107994,111],{"class":104},[35,107996,101230],{"id":101229},[40,107998,107999],{},"交互式 Viewer:",[85,108001,108003],{"className":30361,"code":108002,"language":30363,"meta":14,"style":14},"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",[91,108004,108005,108011,108015,108021,108027,108031,108035,108043,108048,108052,108056,108060,108065,108070,108074,108078,108082,108087,108091,108095,108099,108103,108107,108111,108123,108135,108143,108147,108157,108177,108187,108192,108197,108201,108218,108231,108236,108240,108244,108256],{"__ignoreMap":14},[94,108006,108007,108009],{"class":96,"line":97},[94,108008,30375],{"class":100},[94,108010,31812],{"class":104},[94,108012,108013],{"class":96,"line":15},[94,108014,2381],{"emptyLinePlaceholder":20},[94,108016,108017,108019],{"class":96,"line":1160},[94,108018,30375],{"class":100},[94,108020,101278],{"class":104},[94,108022,108023,108025],{"class":96,"line":1175},[94,108024,30375],{"class":100},[94,108026,107529],{"class":104},[94,108028,108029],{"class":96,"line":1181},[94,108030,2381],{"emptyLinePlaceholder":20},[94,108032,108033],{"class":96,"line":1195},[94,108034,2381],{"emptyLinePlaceholder":20},[94,108036,108037,108039,108041],{"class":96,"line":1201},[94,108038,101291],{"class":153},[94,108040,13546],{"class":100},[94,108042,101296],{"class":209},[94,108044,108045],{"class":96,"line":1292},[94,108046,108047],{"class":209},"\u003Cmujoco model=\"viewer_demo\">\n",[94,108049,108050],{"class":96,"line":1298},[94,108051,101306],{"class":209},[94,108053,108054],{"class":96,"line":1310},[94,108055,2381],{"emptyLinePlaceholder":20},[94,108057,108058],{"class":96,"line":1593},[94,108059,101315],{"class":209},[94,108061,108062],{"class":96,"line":1598},[94,108063,108064],{"class":209},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[94,108066,108067],{"class":96,"line":1604},[94,108068,108069],{"class":209},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[94,108071,108072],{"class":96,"line":1609},[94,108073,2381],{"emptyLinePlaceholder":20},[94,108075,108076],{"class":96,"line":1623},[94,108077,101329],{"class":209},[94,108079,108080],{"class":96,"line":1628},[94,108081,101334],{"class":209},[94,108083,108084],{"class":96,"line":1634},[94,108085,108086],{"class":209},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[94,108088,108089],{"class":96,"line":1655},[94,108090,101344],{"class":209},[94,108092,108093],{"class":96,"line":1660},[94,108094,101349],{"class":209},[94,108096,108097],{"class":96,"line":1674},[94,108098,101354],{"class":209},[94,108100,108101],{"class":96,"line":1679},[94,108102,95675],{"class":209},[94,108104,108105],{"class":96,"line":1708},[94,108106,2381],{"emptyLinePlaceholder":20},[94,108108,108109],{"class":96,"line":1713},[94,108110,2381],{"emptyLinePlaceholder":20},[94,108112,108113,108115,108117,108119,108121],{"class":96,"line":1730},[94,108114,31930],{"class":100},[94,108116,1954],{"class":1944},[94,108118,101375],{"class":104},[94,108120,95663],{"class":153},[94,108122,3720],{"class":104},[94,108124,108125,108127,108129,108131,108133],{"class":96,"line":1735},[94,108126,101384],{"class":104},[94,108128,150],{"class":100},[94,108130,101389],{"class":104},[94,108132,101291],{"class":153},[94,108134,111],{"class":104},[94,108136,108137,108139,108141],{"class":96,"line":1740},[94,108138,101398],{"class":104},[94,108140,150],{"class":100},[94,108142,101403],{"class":104},[94,108144,108145],{"class":96,"line":1745},[94,108146,2381],{"emptyLinePlaceholder":20},[94,108148,108149,108151,108153,108155],{"class":96,"line":1759},[94,108150,34161],{"class":100},[94,108152,107813],{"class":104},[94,108154,31366],{"class":100},[94,108156,107818],{"class":104},[94,108158,108159,108162,108165,108167,108170,108172,108175],{"class":96,"line":1764},[94,108160,108161],{"class":100},"        while",[94,108163,108164],{"class":104}," viewer.is_running() ",[94,108166,30445],{"class":100},[94,108168,108169],{"class":104}," data.time ",[94,108171,1015],{"class":100},[94,108173,108174],{"class":153}," 5.0",[94,108176,3720],{"class":104},[94,108178,108179,108182,108184],{"class":96,"line":2558},[94,108180,108181],{"class":104},"            step_start ",[94,108183,150],{"class":100},[94,108185,108186],{"class":104}," time.time()\n",[94,108188,108189],{"class":96,"line":2572},[94,108190,108191],{"class":104},"            mujoco.mj_step(model, data)\n",[94,108193,108194],{"class":96,"line":2580},[94,108195,108196],{"class":104},"            viewer.sync()\n",[94,108198,108199],{"class":96,"line":2585},[94,108200,2381],{"emptyLinePlaceholder":20},[94,108202,108203,108206,108208,108210,108212,108214,108216],{"class":96,"line":2591},[94,108204,108205],{"class":104},"            sleep_time ",[94,108207,150],{"class":100},[94,108209,107937],{"class":104},[94,108211,637],{"class":100},[94,108213,107942],{"class":104},[94,108215,637],{"class":100},[94,108217,107947],{"class":104},[94,108219,108220,108222,108225,108227,108229],{"class":96,"line":2597},[94,108221,4623],{"class":100},[94,108223,108224],{"class":104}," sleep_time ",[94,108226,1065],{"class":100},[94,108228,4074],{"class":153},[94,108230,3720],{"class":104},[94,108232,108233],{"class":96,"line":2602},[94,108234,108235],{"class":104},"                time.sleep(sleep_time)\n",[94,108237,108238],{"class":96,"line":7930},[94,108239,2381],{"emptyLinePlaceholder":20},[94,108241,108242],{"class":96,"line":7954},[94,108243,2381],{"emptyLinePlaceholder":20},[94,108245,108246,108248,108250,108252,108254],{"class":96,"line":7959},[94,108247,1512],{"class":100},[94,108249,31203],{"class":153},[94,108251,101536],{"class":100},[94,108253,101539],{"class":209},[94,108255,3720],{"class":104},[94,108257,108258],{"class":96,"line":7965},[94,108259,101546],{"class":104},[40,108261,103547],{},[85,108263,108265],{"className":23804,"code":108264,"language":23806,"meta":14,"style":14},"touch ch5_viewer.py\n",[91,108266,108267],{"__ignoreMap":14},[94,108268,108269,108271],{"class":96,"line":97},[94,108270,101260],{"class":1944},[94,108272,108273],{"class":209}," ch5_viewer.py\n",[40,108275,108276],{},"离屏 Renderer 保存图片:",[85,108278,108280],{"className":30361,"code":108279,"language":30363,"meta":14,"style":14},"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",[91,108281,108282,108294,108298,108304,108314,108318,108322,108330,108335,108339,108343,108347,108351,108356,108360,108364,108368,108372,108376,108380,108384,108388,108392,108396,108400,108412,108424,108432,108457,108461,108477,108481,108485,108500,108509,108513,108527,108532,108537,108541,108553,108565,108569,108573,108585],{"__ignoreMap":14},[94,108283,108284,108286,108289,108291],{"class":96,"line":97},[94,108285,30720],{"class":100},[94,108287,108288],{"class":104}," pathlib ",[94,108290,30375],{"class":100},[94,108292,108293],{"class":104}," Path\n",[94,108295,108296],{"class":96,"line":15},[94,108297,2381],{"emptyLinePlaceholder":20},[94,108299,108300,108302],{"class":96,"line":1160},[94,108301,30375],{"class":100},[94,108303,101278],{"class":104},[94,108305,108306,108308,108310,108312],{"class":96,"line":1175},[94,108307,30720],{"class":100},[94,108309,47246],{"class":153},[94,108311,47249],{"class":100},[94,108313,47252],{"class":104},[94,108315,108316],{"class":96,"line":1181},[94,108317,2381],{"emptyLinePlaceholder":20},[94,108319,108320],{"class":96,"line":1195},[94,108321,2381],{"emptyLinePlaceholder":20},[94,108323,108324,108326,108328],{"class":96,"line":1201},[94,108325,101291],{"class":153},[94,108327,13546],{"class":100},[94,108329,101296],{"class":209},[94,108331,108332],{"class":96,"line":1292},[94,108333,108334],{"class":209},"\u003Cmujoco model=\"renderer_demo\">\n",[94,108336,108337],{"class":96,"line":1298},[94,108338,101306],{"class":209},[94,108340,108341],{"class":96,"line":1310},[94,108342,2381],{"emptyLinePlaceholder":20},[94,108344,108345],{"class":96,"line":1593},[94,108346,101315],{"class":209},[94,108348,108349],{"class":96,"line":1598},[94,108350,108064],{"class":209},[94,108352,108353],{"class":96,"line":1604},[94,108354,108355],{"class":209},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[94,108357,108358],{"class":96,"line":1609},[94,108359,108069],{"class":209},[94,108361,108362],{"class":96,"line":1623},[94,108363,2381],{"emptyLinePlaceholder":20},[94,108365,108366],{"class":96,"line":1628},[94,108367,101329],{"class":209},[94,108369,108370],{"class":96,"line":1634},[94,108371,101334],{"class":209},[94,108373,108374],{"class":96,"line":1655},[94,108375,108086],{"class":209},[94,108377,108378],{"class":96,"line":1660},[94,108379,101344],{"class":209},[94,108381,108382],{"class":96,"line":1674},[94,108383,101349],{"class":209},[94,108385,108386],{"class":96,"line":1679},[94,108387,101354],{"class":209},[94,108389,108390],{"class":96,"line":1708},[94,108391,95675],{"class":209},[94,108393,108394],{"class":96,"line":1713},[94,108395,2381],{"emptyLinePlaceholder":20},[94,108397,108398],{"class":96,"line":1730},[94,108399,2381],{"emptyLinePlaceholder":20},[94,108401,108402,108404,108406,108408,108410],{"class":96,"line":1735},[94,108403,31930],{"class":100},[94,108405,1954],{"class":1944},[94,108407,101375],{"class":104},[94,108409,95663],{"class":153},[94,108411,3720],{"class":104},[94,108413,108414,108416,108418,108420,108422],{"class":96,"line":1740},[94,108415,101384],{"class":104},[94,108417,150],{"class":100},[94,108419,101389],{"class":104},[94,108421,101291],{"class":153},[94,108423,111],{"class":104},[94,108425,108426,108428,108430],{"class":96,"line":1745},[94,108427,101398],{"class":104},[94,108429,150],{"class":100},[94,108431,101403],{"class":104},[94,108433,108434,108437,108439,108441,108443,108445,108447,108449,108451,108453,108455],{"class":96,"line":1759},[94,108435,108436],{"class":104},"    renderer ",[94,108438,150],{"class":100},[94,108440,107851],{"class":104},[94,108442,24964],{"class":5198},[94,108444,150],{"class":100},[94,108446,42325],{"class":153},[94,108448,12417],{"class":104},[94,108450,24960],{"class":5198},[94,108452,150],{"class":100},[94,108454,107866],{"class":153},[94,108456,111],{"class":104},[94,108458,108459],{"class":96,"line":1764},[94,108460,2381],{"emptyLinePlaceholder":20},[94,108462,108463,108465,108467,108469,108471,108473,108475],{"class":96,"line":2558},[94,108464,3182],{"class":100},[94,108466,101478],{"class":104},[94,108468,26026],{"class":100},[94,108470,32426],{"class":153},[94,108472,105],{"class":104},[94,108474,416],{"class":153},[94,108476,30769],{"class":104},[94,108478,108479],{"class":96,"line":2572},[94,108480,101493],{"class":104},[94,108482,108483],{"class":96,"line":2580},[94,108484,2381],{"emptyLinePlaceholder":20},[94,108486,108487,108490,108493,108495,108498],{"class":96,"line":2585},[94,108488,108489],{"class":104},"    renderer.update_scene(data, ",[94,108491,108492],{"class":5198},"camera",[94,108494,150],{"class":100},[94,108496,108497],{"class":209},"\"fixed_camera\"",[94,108499,111],{"class":104},[94,108501,108502,108505,108507],{"class":96,"line":2591},[94,108503,108504],{"class":104},"    image ",[94,108506,150],{"class":100},[94,108508,107562],{"class":104},[94,108510,108511],{"class":96,"line":2597},[94,108512,2381],{"emptyLinePlaceholder":20},[94,108514,108515,108518,108520,108523,108525],{"class":96,"line":2602},[94,108516,108517],{"class":104},"    output_path ",[94,108519,150],{"class":100},[94,108521,108522],{"class":104}," Path(",[94,108524,107992],{"class":209},[94,108526,111],{"class":104},[94,108528,108529],{"class":96,"line":7930},[94,108530,108531],{"class":104},"    Image.fromarray(image).save(output_path)\n",[94,108533,108534],{"class":96,"line":7954},[94,108535,108536],{"class":104},"    renderer.close()\n",[94,108538,108539],{"class":96,"line":7959},[94,108540,2381],{"emptyLinePlaceholder":20},[94,108542,108543,108545,108547,108550],{"class":96,"line":7965},[94,108544,31282],{"class":153},[94,108546,105],{"class":104},[94,108548,108549],{"class":209},"\"saved:\"",[94,108551,108552],{"class":104},", output_path.resolve())\n",[94,108554,108555,108557,108559,108562],{"class":96,"line":7992},[94,108556,31282],{"class":153},[94,108558,105],{"class":104},[94,108560,108561],{"class":209},"\"image shape:\"",[94,108563,108564],{"class":104},", image.shape)\n",[94,108566,108567],{"class":96,"line":7997},[94,108568,2381],{"emptyLinePlaceholder":20},[94,108570,108571],{"class":96,"line":8003},[94,108572,2381],{"emptyLinePlaceholder":20},[94,108574,108575,108577,108579,108581,108583],{"class":96,"line":8015},[94,108576,1512],{"class":100},[94,108578,31203],{"class":153},[94,108580,101536],{"class":100},[94,108582,101539],{"class":209},[94,108584,3720],{"class":104},[94,108586,108587],{"class":96,"line":8027},[94,108588,101546],{"class":104},[40,108590,103547],{},[85,108592,108594],{"className":23804,"code":108593,"language":23806,"meta":14,"style":14},"touch ch5_renderer.py\n",[91,108595,108596],{"__ignoreMap":14},[94,108597,108598,108600],{"class":96,"line":97},[94,108599,101260],{"class":1944},[94,108601,108602],{"class":209}," ch5_renderer.py\n",[65,108604,101549],{"id":101549},[40,108606,108607],{},"viewer 上下文：",[85,108609,108611],{"className":30361,"code":108610,"language":30363,"meta":14,"style":14},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[91,108612,108613],{"__ignoreMap":14},[94,108614,108615,108617,108619,108621],{"class":96,"line":97},[94,108616,107810],{"class":100},[94,108618,107813],{"class":104},[94,108620,31366],{"class":100},[94,108622,107818],{"class":104},[40,108624,108625,108627],{},[91,108626,107810],{}," 语句会创建窗口，并在退出时自动清理资源。",[40,108629,108630],{},"窗口循环：",[85,108632,108634],{"className":30361,"code":108633,"language":30363,"meta":14,"style":14},"while viewer.is_running() and data.time \u003C 5.0:\n",[91,108635,108636],{"__ignoreMap":14},[94,108637,108638,108641,108643,108645,108647,108649,108651],{"class":96,"line":97},[94,108639,108640],{"class":100},"while",[94,108642,108164],{"class":104},[94,108644,30445],{"class":100},[94,108646,108169],{"class":104},[94,108648,1015],{"class":100},[94,108650,108174],{"class":153},[94,108652,3720],{"class":104},[40,108654,108655],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[40,108657,108658],{},"固定相机：",[85,108660,108662],{"className":53044,"code":108661,"language":53046,"meta":14,"style":14},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[91,108663,108664],{"__ignoreMap":14},[94,108665,108666,108668,108670,108672,108674,108676,108678,108680,108683,108686,108688,108691],{"class":96,"line":97},[94,108667,1015],{"class":104},[94,108669,108492],{"class":51277},[94,108671,14902],{"class":1944},[94,108673,150],{"class":104},[94,108675,108497],{"class":209},[94,108677,101083],{"class":1944},[94,108679,150],{"class":104},[94,108681,108682],{"class":209},"\"1.5 -2.0 1.2\"",[94,108684,108685],{"class":1944}," xyaxes",[94,108687,150],{"class":104},[94,108689,108690],{"class":209},"\"1 0.75 0 0 0 1\"",[94,108692,101121],{"class":104},[40,108694,108695],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[65,108697,108699],{"id":108698},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[85,108701,108703],{"className":30361,"code":108702,"language":30363,"meta":14,"style":14},"import time\n",[91,108704,108705],{"__ignoreMap":14},[94,108706,108707,108709],{"class":96,"line":97},[94,108708,30375],{"class":100},[94,108710,31812],{"class":104},[40,108712,108713],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[85,108715,108717],{"className":30361,"code":108716,"language":30363,"meta":14,"style":14},"import mujoco\nimport mujoco.viewer\n",[91,108718,108719,108725],{"__ignoreMap":14},[94,108720,108721,108723],{"class":96,"line":97},[94,108722,30375],{"class":100},[94,108724,101278],{"class":104},[94,108726,108727,108729],{"class":96,"line":15},[94,108728,30375],{"class":100},[94,108730,107529],{"class":104},[40,108732,108733],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[85,108735,108736],{"className":30361,"code":108610,"language":30363,"meta":14,"style":14},[91,108737,108738],{"__ignoreMap":14},[94,108739,108740,108742,108744,108746],{"class":96,"line":97},[94,108741,107810],{"class":100},[94,108743,107813],{"class":104},[94,108745,31366],{"class":100},[94,108747,107818],{"class":104},[40,108749,108750,108751,108754],{},"打开一个 viewer 窗口。",[91,108752,108753],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[85,108756,108757],{"className":30361,"code":108633,"language":30363,"meta":14,"style":14},[91,108758,108759],{"__ignoreMap":14},[94,108760,108761,108763,108765,108767,108769,108771,108773],{"class":96,"line":97},[94,108762,108640],{"class":100},[94,108764,108164],{"class":104},[94,108766,30445],{"class":100},[94,108768,108169],{"class":104},[94,108770,1015],{"class":100},[94,108772,108174],{"class":153},[94,108774,3720],{"class":104},[40,108776,108777,108778,108781],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[91,108779,108780],{},"viewer.is_running()"," 会变成 false，循环结束。",[85,108783,108785],{"className":30361,"code":108784,"language":30363,"meta":14,"style":14},"step_start = time.time()\n",[91,108786,108787],{"__ignoreMap":14},[94,108788,108789,108792,108794],{"class":96,"line":97},[94,108790,108791],{"class":104},"step_start ",[94,108793,150],{"class":100},[94,108795,108186],{"class":104},[40,108797,108798],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[85,108800,108801],{"className":30361,"code":107895,"language":30363,"meta":14,"style":14},[91,108802,108803,108807],{"__ignoreMap":14},[94,108804,108805],{"class":96,"line":97},[94,108806,104482],{"class":104},[94,108808,108809],{"class":96,"line":15},[94,108810,107906],{"class":104},[40,108812,108813,108815,108816,108818,108819,108821,108822,108825],{},[91,108814,101192],{}," 推进物理仿真。",[91,108817,107914],{}," 把最新的 ",[91,108820,33384],{}," 同步到窗口里显示。没有 ",[91,108823,108824],{},"sync()","，窗口可能看不到最新状态。",[85,108827,108828],{"className":30361,"code":107925,"language":30363,"meta":14,"style":14},[91,108829,108830],{"__ignoreMap":14},[94,108831,108832,108834,108836,108838,108840,108842,108844],{"class":96,"line":97},[94,108833,107932],{"class":104},[94,108835,150],{"class":100},[94,108837,107937],{"class":104},[94,108839,637],{"class":100},[94,108841,107942],{"class":104},[94,108843,637],{"class":100},[94,108845,107947],{"class":104},[40,108847,108848],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[85,108850,108852],{"className":30361,"code":108851,"language":30363,"meta":14,"style":14},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[91,108853,108854,108866],{"__ignoreMap":14},[94,108855,108856,108858,108860,108862,108864],{"class":96,"line":97},[94,108857,1512],{"class":100},[94,108859,108224],{"class":104},[94,108861,1065],{"class":100},[94,108863,4074],{"class":153},[94,108865,3720],{"class":104},[94,108867,108868],{"class":96,"line":15},[94,108869,108870],{"class":104},"    time.sleep(sleep_time)\n",[40,108872,108873],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[65,108875,108877],{"id":108876},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[85,108879,108881],{"className":30361,"code":108880,"language":30363,"meta":14,"style":14},"from pathlib import Path\n",[91,108882,108883],{"__ignoreMap":14},[94,108884,108885,108887,108889,108891],{"class":96,"line":97},[94,108886,30720],{"class":100},[94,108888,108288],{"class":104},[94,108890,30375],{"class":100},[94,108892,108293],{"class":104},[40,108894,108895,108896,108899,108900,108903],{},"导入 ",[91,108897,108898],{},"Path","，用来处理文件路径。相比直接写字符串，",[91,108901,108902],{},"Path(\"render_output.png\")"," 更清晰。",[85,108905,108907],{"className":30361,"code":108906,"language":30363,"meta":14,"style":14},"from PIL import Image\n",[91,108908,108909],{"__ignoreMap":14},[94,108910,108911,108913,108915,108917],{"class":96,"line":97},[94,108912,30720],{"class":100},[94,108914,47246],{"class":153},[94,108916,47249],{"class":100},[94,108918,47252],{"class":104},[40,108920,108921],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[85,108923,108924],{"className":53044,"code":108661,"language":53046,"meta":14,"style":14},[91,108925,108926],{"__ignoreMap":14},[94,108927,108928,108930,108932,108934,108936,108938,108940,108942,108944,108946,108948,108950],{"class":96,"line":97},[94,108929,1015],{"class":104},[94,108931,108492],{"class":51277},[94,108933,14902],{"class":1944},[94,108935,150],{"class":104},[94,108937,108497],{"class":209},[94,108939,101083],{"class":1944},[94,108941,150],{"class":104},[94,108943,108682],{"class":209},[94,108945,108685],{"class":1944},[94,108947,150],{"class":104},[94,108949,108690],{"class":209},[94,108951,101121],{"class":104},[40,108953,108954,108955,108957,108958,108960,108961,108964,108965,108967],{},"定义一个相机。",[91,108956,79787],{}," 是相机名字。",[91,108959,104123],{}," 是相机在世界里的位置。",[91,108962,108963],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[91,108966,104123],{}," 来调视角。",[85,108969,108971],{"className":30361,"code":108970,"language":30363,"meta":14,"style":14},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[91,108972,108973],{"__ignoreMap":14},[94,108974,108975,108977,108979,108981,108983,108985,108987,108989,108991,108993,108995],{"class":96,"line":97},[94,108976,107547],{"class":104},[94,108978,150],{"class":100},[94,108980,107851],{"class":104},[94,108982,24964],{"class":5198},[94,108984,150],{"class":100},[94,108986,42325],{"class":153},[94,108988,12417],{"class":104},[94,108990,24960],{"class":5198},[94,108992,150],{"class":100},[94,108994,107866],{"class":153},[94,108996,111],{"class":104},[40,108998,108999,109000,100995,109002,109004],{},"创建离屏渲染器。",[91,109001,24964],{},[91,109003,24960],{}," 决定输出图片大小。",[85,109006,109007],{"className":30361,"code":101653,"language":30363,"meta":14,"style":14},[91,109008,109009,109025],{"__ignoreMap":14},[94,109010,109011,109013,109015,109017,109019,109021,109023],{"class":96,"line":97},[94,109012,3006],{"class":100},[94,109014,101478],{"class":104},[94,109016,26026],{"class":100},[94,109018,32426],{"class":153},[94,109020,105],{"class":104},[94,109022,416],{"class":153},[94,109024,30769],{"class":104},[94,109026,109027],{"class":96,"line":15},[94,109028,101676],{"class":104},[40,109030,109031],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[85,109033,109035],{"className":30361,"code":109034,"language":30363,"meta":14,"style":14},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[91,109036,109037],{"__ignoreMap":14},[94,109038,109039,109042,109044,109046,109048],{"class":96,"line":97},[94,109040,109041],{"class":104},"renderer.update_scene(data, ",[94,109043,108492],{"class":5198},[94,109045,150],{"class":100},[94,109047,108497],{"class":209},[94,109049,111],{"class":104},[40,109051,109052,109053,109055,109056,109059],{},"告诉 renderer：用当前 ",[91,109054,33384],{}," 的状态更新画面，并使用名为 ",[91,109057,109058],{},"fixed_camera"," 的相机视角。",[85,109061,109062],{"className":30361,"code":107957,"language":30363,"meta":14,"style":14},[91,109063,109064],{"__ignoreMap":14},[94,109065,109066,109068,109070],{"class":96,"line":97},[94,109067,107557],{"class":104},[94,109069,150],{"class":100},[94,109071,107562],{"class":104},[40,109073,109074,109075,109078],{},"真正渲染出图像。",[91,109076,109077],{},"image"," 是一个 NumPy 数组，不是文件。",[85,109080,109082],{"className":30361,"code":109081,"language":30363,"meta":14,"style":14},"Image.fromarray(image).save(output_path)\n",[91,109083,109084],{"__ignoreMap":14},[94,109085,109086],{"class":96,"line":97},[94,109087,109081],{"class":104},[40,109089,109090,109091,28368],{},"把数组转换成图片，并保存到 ",[91,109092,109093],{},"render_output.png",[85,109095,109097],{"className":30361,"code":109096,"language":30363,"meta":14,"style":14},"renderer.close()\n",[91,109098,109099],{"__ignoreMap":14},[94,109100,109101],{"class":96,"line":97},[94,109102,109096],{"class":104},[40,109104,109105],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[35,109107,102293],{"id":102292},[40,109109,109110,109111,109113,109114,28368],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[91,109112,109093],{},"，并输出图像数组形状，例如 ",[91,109115,109116],{},"(480, 640, 3)",[40,109118,109119],{},"如果图片里看不到方块，先检查：",[48,109121,109122,109125,109128],{},[51,109123,109124],{},"方块是否掉到相机视野外。",[51,109126,109127],{},"camera 位置是否合理。",[51,109129,109130,109131,109134],{},"是否在 ",[91,109132,109133],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[35,109136,102325],{"id":102324},[40,109138,109139],{},"运行 viewer:",[85,109141,109143],{"className":23804,"code":109142,"language":23806,"meta":14,"style":14},"python ch5_viewer.py\n",[91,109144,109145],{"__ignoreMap":14},[94,109146,109147,109149],{"class":96,"line":97},[94,109148,30363],{"class":1944},[94,109150,108273],{"class":209},[40,109152,109153],{},"运行 renderer:",[85,109155,109157],{"className":23804,"code":109156,"language":23806,"meta":14,"style":14},"python ch5_renderer.py\n",[91,109158,109159],{"__ignoreMap":14},[94,109160,109161,109163],{"class":96,"line":97},[94,109162,30363],{"class":1944},[94,109164,108602],{"class":209},[40,109166,109167],{},"如果在服务器上运行:",[85,109169,109171],{"className":23804,"code":109170,"language":23806,"meta":14,"style":14},"MUJOCO_GL=egl python ch5_renderer.py\n",[91,109172,109173],{"__ignoreMap":14},[94,109174,109175,109177,109179,109181,109184],{"class":96,"line":97},[94,109176,107791],{"class":104},[94,109178,150],{"class":100},[94,109180,107781],{"class":209},[94,109182,109183],{"class":1944}," python",[94,109185,108602],{"class":209},[40,109187,107759],{},[85,109189,109191],{"className":23804,"code":109190,"language":23806,"meta":14,"style":14},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[91,109192,109193],{"__ignoreMap":14},[94,109194,109195,109197,109199,109201,109203],{"class":96,"line":97},[94,109196,107791],{"class":104},[94,109198,150],{"class":100},[94,109200,107785],{"class":209},[94,109202,109183],{"class":1944},[94,109204,108602],{"class":209},[40,109206,109207],{},"再做几个练习：",[48,109209,109210,109217,109220,109226],{},[51,109211,109212,109213,109216],{},"把 renderer 分辨率改成 ",[91,109214,109215],{},"height=240, width=320","，观察输出 shape。",[51,109218,109219],{},"把方块颜色改成蓝色，重新保存图片。",[51,109221,109222,109223,109225],{},"把相机 ",[91,109224,104123],{}," 改远一点，观察画面中物体是否变小。",[51,109227,109228,109229,102391,109232,109235],{},"把 viewer 示例中的 ",[91,109230,109231],{},"data.time \u003C 5.0",[91,109233,109234],{},"data.time \u003C 20.0","，观察更长时间。",[35,109237,102430],{"id":102429},[65,109239,109241],{"id":109240},"viewer-窗口打不开","viewer 窗口打不开",[40,109243,109244],{},"安装:",[85,109246,109248],{"className":23804,"code":109247,"language":23806,"meta":14,"style":14},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[91,109249,109250],{"__ignoreMap":14},[94,109251,109252,109254,109256,109258,109260,109262,109264,109266,109268,109270,109272],{"class":96,"line":97},[94,109253,24559],{"class":1944},[94,109255,26298],{"class":209},[94,109257,23816],{"class":209},[94,109259,26383],{"class":153},[94,109261,102483],{"class":209},[94,109263,100811],{"class":209},[94,109265,102488],{"class":209},[94,109267,100824],{"class":209},[94,109269,100830],{"class":209},[94,109271,100821],{"class":209},[94,109273,109274],{"class":209}," libXinerama\n",[65,109276,109278],{"id":109277},"glfwerror",[91,109279,109280],{},"GLFWError",[40,109282,109283],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[65,109285,109287],{"id":109286},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[40,109289,109290,109291,82516,109293,109295],{},"尝试 ",[91,109292,101014],{},[91,109294,101017],{},"。可能存在版本差异。",[65,109297,109298],{"id":109298},"保存图片是黑的",[40,109300,102552],{},[48,109302,109303,109306,109309,109319],{},[51,109304,109305],{},"XML 里是否有 light。",[51,109307,109308],{},"相机是否对着模型。",[51,109310,109311,109312,109315,109316,28368],{},"是否先 ",[91,109313,109314],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[91,109317,109318],{},"renderer.render()",[51,109320,109321],{},"物体是否已经掉出视野。",[65,109323,109324],{"id":109324},"远程服务器没有显示器",[40,109326,109327],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[85,109329,109330],{"className":23804,"code":109170,"language":23806,"meta":14,"style":14},[91,109331,109332],{"__ignoreMap":14},[94,109333,109334,109336,109338,109340,109342],{"class":96,"line":97},[94,109335,107791],{"class":104},[94,109337,150],{"class":100},[94,109339,107781],{"class":209},[94,109341,109183],{"class":1944},[94,109343,108602],{"class":209},[40,109345,109346],{},"如果 EGL 不可用，再尝试：",[85,109348,109349],{"className":23804,"code":109190,"language":23806,"meta":14,"style":14},[91,109350,109351],{"__ignoreMap":14},[94,109352,109353,109355,109357,109359,109361],{"class":96,"line":97},[94,109354,107791],{"class":104},[94,109356,150],{"class":100},[94,109358,107785],{"class":209},[94,109360,109183],{"class":1944},[94,109362,108602],{"class":209},[35,109364,102584],{"id":102583},[40,109366,109367],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[48,109369,109370,109373,109376],{},[51,109371,109372],{},"先用 viewer 看模型和控制是否正常。",[51,109374,109375],{},"再用 renderer 保存图片或构造视觉观测。",[51,109377,109378],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5108,109380,109381],{},"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":14,"searchDepth":15,"depth":15,"links":109383},[109384,109385,109386,109391,109396,109397,109398,109405],{"id":100623,"depth":15,"text":100624},{"id":100746,"depth":15,"text":100747},{"id":101021,"depth":15,"text":101022,"children":109387},[109388,109389,109390],{"id":107888,"depth":1160,"text":107889},{"id":107918,"depth":1160,"text":107919},{"id":107953,"depth":1160,"text":107954},{"id":101229,"depth":15,"text":101230,"children":109392},[109393,109394,109395],{"id":101549,"depth":1160,"text":101549},{"id":108698,"depth":1160,"text":108699},{"id":108876,"depth":1160,"text":108877},{"id":102292,"depth":15,"text":102293},{"id":102324,"depth":15,"text":102325},{"id":102429,"depth":15,"text":102430,"children":109399},[109400,109401,109402,109403,109404],{"id":109240,"depth":1160,"text":109241},{"id":109277,"depth":1160,"text":109280},{"id":109286,"depth":1160,"text":109287},{"id":109298,"depth":1160,"text":109298},{"id":109324,"depth":1160,"text":109324},{"id":102583,"depth":15,"text":102584},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107496,"description":14},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109412,"title":109413,"body":109414,"description":14,"extension":18,"meta":111325,"navigation":20,"path":111326,"seo":111327,"stem":111328,"__hash__":111329},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109415,"toc":111301},[109416,109419,109421,109424,109426,109445,109448,109454,109457,109459,109461,109485,109487,109501,109503,109544,109546,109557,109559,109562,109568,109571,109605,109608,109640,109643,109675,109679,109682,109722,109725,109731,109734,109740,109744,109747,109753,109756,109760,109763,109803,109805,109818,109821,109823,110405,110407,110419,110422,110433,110435,110438,110457,110469,110472,110493,110496,110499,110542,110545,110548,110568,110575,110577,110595,110610,110613,110619,110622,110628,110645,110652,110683,110694,110728,110739,110756,110765,110773,110778,110792,110795,110816,110822,110836,110841,110871,110881,110906,110914,110937,110940,110956,110959,110967,110973,110995,111008,111029,111038,111077,111088,111090,111093,111099,111102,111105,111111,111114,111134,111137,111139,111178,111180,111183,111191,111194,111197,111224,111227,111237,111243,111246,111252,111254,111260,111264,111267,111269,111272,111296,111299],[10,109417,109413],{"id":109418},"_6控制任务cartpole",[35,109420,100624],{"id":100623},[40,109422,109423],{},"本章搭建一个最小 Cartpole 控制任务。",[40,109425,104308],{},[48,109427,109428,109431,109433,109436,109439,109442],{},[51,109429,109430],{},"slide joint",[51,109432,106161],{},[51,109434,109435],{},"cart force actuator",[51,109437,109438],{},"状态观测",[51,109440,109441],{},"简单控制循环",[51,109443,109444],{},"reward 设计雏形",[40,109446,109447],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[85,109449,109452],{"className":109450,"code":109451,"language":5169,"meta":14},[5167],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[91,109453,109451],{"__ignoreMap":14},[40,109455,109456],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[35,109458,100747],{"id":100746},[40,109460,100750],{},[85,109462,109463],{"className":23804,"code":104365,"language":23806,"meta":14,"style":14},[91,109464,109465],{"__ignoreMap":14},[94,109466,109467,109469,109471,109473,109475,109477,109479,109481,109483],{"class":96,"line":97},[94,109468,24559],{"class":1944},[94,109470,26298],{"class":209},[94,109472,23816],{"class":209},[94,109474,26383],{"class":153},[94,109476,104380],{"class":209},[94,109478,100775],{"class":209},[94,109480,102478],{"class":209},[94,109482,100791],{"class":209},[94,109484,104389],{"class":209},[40,109486,102796],{},[85,109488,109489],{"className":23804,"code":100896,"language":23806,"meta":14,"style":14},[91,109490,109491],{"__ignoreMap":14},[94,109492,109493,109495,109497,109499],{"class":96,"line":97},[94,109494,23813],{"class":1944},[94,109496,23816],{"class":209},[94,109498,100907],{"class":209},[94,109500,100910],{"class":209},[40,109502,102813],{},[85,109504,109506],{"className":23804,"code":109505,"language":23806,"meta":14,"style":14},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[91,109507,109508,109525,109534],{"__ignoreMap":14},[94,109509,109510,109512,109514,109516,109519,109521,109523],{"class":96,"line":97},[94,109511,30313],{"class":1944},[94,109513,29159],{"class":209},[94,109515,25098],{"class":153},[94,109517,109518],{"class":209}," mujoco-cartpole",[94,109520,100952],{"class":209},[94,109522,100955],{"class":153},[94,109524,100958],{"class":153},[94,109526,109527,109529,109531],{"class":96,"line":15},[94,109528,30313],{"class":1944},[94,109530,100965],{"class":209},[94,109532,109533],{"class":209}," mujoco-cartpole\n",[94,109535,109536,109538,109540,109542],{"class":96,"line":1160},[94,109537,23813],{"class":1944},[94,109539,23816],{"class":209},[94,109541,100907],{"class":209},[94,109543,100910],{"class":209},[40,109545,100981],{},[48,109547,109548,109551,109554],{},[51,109549,109550],{},"本章不依赖 Gymnasium。",[51,109552,109553],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[51,109555,109556],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[35,109558,101022],{"id":101021},[40,109560,109561],{},"Cartpole 的模型结构:",[85,109563,109566],{"className":109564,"code":109565,"language":5169,"meta":14},[5167],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[91,109567,109565],{"__ignoreMap":14},[40,109569,109570],{},"小车通过 slide joint 左右移动:",[85,109572,109574],{"className":53044,"code":109573,"language":53046,"meta":14,"style":14},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[91,109575,109576],{"__ignoreMap":14},[94,109577,109578,109580,109582,109584,109586,109589,109591,109593,109596,109598,109600,109603],{"class":96,"line":97},[94,109579,1015],{"class":104},[94,109581,102933],{"class":51277},[94,109583,14902],{"class":1944},[94,109585,150],{"class":104},[94,109587,109588],{"class":209},"\"cart_x\"",[94,109590,53801],{"class":1944},[94,109592,150],{"class":104},[94,109594,109595],{"class":209},"\"slide\"",[94,109597,106005],{"class":1944},[94,109599,150],{"class":104},[94,109601,109602],{"class":209},"\"1 0 0\"",[94,109604,101121],{"class":104},[40,109606,109607],{},"杆子通过 hinge joint 旋转:",[85,109609,109611],{"className":53044,"code":109610,"language":53046,"meta":14,"style":14},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[91,109612,109613],{"__ignoreMap":14},[94,109614,109615,109617,109619,109621,109623,109626,109628,109630,109632,109634,109636,109638],{"class":96,"line":97},[94,109616,1015],{"class":104},[94,109618,102933],{"class":51277},[94,109620,14902],{"class":1944},[94,109622,150],{"class":104},[94,109624,109625],{"class":209},"\"pole_hinge\"",[94,109627,53801],{"class":1944},[94,109629,150],{"class":104},[94,109631,105996],{"class":209},[94,109633,106005],{"class":1944},[94,109635,150],{"class":104},[94,109637,106010],{"class":209},[94,109639,101121],{"class":104},[40,109641,109642],{},"控制力作用在小车 slide joint 上:",[85,109644,109646],{"className":53044,"code":109645,"language":53046,"meta":14,"style":14},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[91,109647,109648],{"__ignoreMap":14},[94,109649,109650,109652,109654,109656,109658,109661,109663,109665,109667,109669,109671,109673],{"class":96,"line":97},[94,109651,1015],{"class":104},[94,109653,106051],{"class":51277},[94,109655,14902],{"class":1944},[94,109657,150],{"class":104},[94,109659,109660],{"class":209},"\"cart_motor\"",[94,109662,106061],{"class":1944},[94,109664,150],{"class":104},[94,109666,109588],{"class":209},[94,109668,106068],{"class":1944},[94,109670,150],{"class":104},[94,109672,54293],{"class":209},[94,109674,101121],{"class":104},[65,109676,109678],{"id":109677},"cartpole-的状态是什么","Cartpole 的状态是什么",[40,109680,109681],{},"这个简化模型有两个关节：",[242,109683,109684,109695],{},[245,109685,109686],{},[248,109687,109688,109690,109692],{},[251,109689,102736],{"align":23718},[251,109691,23719],{"align":23718},[251,109693,109694],{"align":23718},"对应状态",[289,109696,109697,109710],{},[248,109698,109699,109704,109707],{},[294,109700,109701],{"align":23718},[91,109702,109703],{},"cart_x",[294,109705,109706],{"align":23718},"slide",[294,109708,109709],{"align":23718},"小车 x 位置",[248,109711,109712,109717,109719],{},[294,109713,109714],{"align":23718},[91,109715,109716],{},"pole_hinge",[294,109718,105817],{"align":23718},[294,109720,109721],{"align":23718},"杆子角度",[40,109723,109724],{},"所以：",[85,109726,109729],{"className":109727,"code":109728,"language":5169,"meta":14},[5167],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[91,109730,109728],{"__ignoreMap":14},[40,109732,109733],{},"把它们拼起来就是观测：",[85,109735,109738],{"className":109736,"code":109737,"language":5169,"meta":14},[5167],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[91,109739,109737],{"__ignoreMap":14},[65,109741,109743],{"id":109742},"action-是什么","action 是什么",[40,109745,109746],{},"本章只有一个 actuator：",[85,109748,109751],{"className":109749,"code":109750,"language":5169,"meta":14},[5167],"data.ctrl[0] = action\n",[91,109752,109750],{"__ignoreMap":14},[40,109754,109755],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[65,109757,109759],{"id":109758},"reward-是什么","reward 是什么",[40,109761,109762],{},"奖励函数：",[85,109764,109766],{"className":30361,"code":109765,"language":30363,"meta":14,"style":14},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[91,109767,109768],{"__ignoreMap":14},[94,109769,109770,109772,109775,109777,109779,109781,109784,109786,109789,109791,109793,109795,109798,109800],{"class":96,"line":97},[94,109771,17028],{"class":100},[94,109773,109774],{"class":153}," float",[94,109776,105],{"class":104},[94,109778,102380],{"class":153},[94,109780,52248],{"class":100},[94,109782,109783],{"class":153}," 0.1",[94,109785,6500],{"class":100},[94,109787,109788],{"class":104}," cart_x ",[94,109790,560],{"class":100},[94,109792,109788],{"class":104},[94,109794,637],{"class":100},[94,109796,109797],{"class":104}," pole_angle ",[94,109799,560],{"class":100},[94,109801,109802],{"class":104}," pole_angle)\n",[40,109804,106203],{},[48,109806,109807,109812,109815],{},[51,109808,109809,109810,28368],{},"基础奖励是 ",[91,109811,102380],{},[51,109813,109814],{},"小车离中心越远，扣分越多。",[51,109816,109817],{},"杆子角度越大，扣分越多。",[40,109819,109820],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[35,109822,101230],{"id":101229},[85,109824,109826],{"className":30361,"code":109825,"language":30363,"meta":14,"style":14},"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",[91,109827,109828,109834,109844,109848,109852,109860,109865,109869,109873,109877,109882,109886,109891,109896,109901,109905,109910,109915,109920,109924,109928,109932,109936,109940,109945,109949,109953,109957,109961,109965,109975,109982,109986,109990,110004,110018,110031,110061,110065,110069,110081,110093,110101,110105,110118,110122,110126,110135,110139,110155,110165,110178,110191,110195,110218,110236,110240,110252,110256,110260,110270,110280,110284,110300,110341,110345,110365,110381,110385,110389,110401],{"__ignoreMap":14},[94,109829,109830,109832],{"class":96,"line":97},[94,109831,30375],{"class":100},[94,109833,101278],{"class":104},[94,109835,109836,109838,109840,109842],{"class":96,"line":15},[94,109837,30375],{"class":100},[94,109839,31363],{"class":104},[94,109841,31366],{"class":100},[94,109843,31369],{"class":104},[94,109845,109846],{"class":96,"line":1160},[94,109847,2381],{"emptyLinePlaceholder":20},[94,109849,109850],{"class":96,"line":1175},[94,109851,2381],{"emptyLinePlaceholder":20},[94,109853,109854,109856,109858],{"class":96,"line":1181},[94,109855,101291],{"class":153},[94,109857,13546],{"class":100},[94,109859,101296],{"class":209},[94,109861,109862],{"class":96,"line":1195},[94,109863,109864],{"class":209},"\u003Cmujoco model=\"cartpole\">\n",[94,109866,109867],{"class":96,"line":1201},[94,109868,101306],{"class":209},[94,109870,109871],{"class":96,"line":1292},[94,109872,2381],{"emptyLinePlaceholder":20},[94,109874,109875],{"class":96,"line":1298},[94,109876,101315],{"class":209},[94,109878,109879],{"class":96,"line":1310},[94,109880,109881],{"class":209},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[94,109883,109884],{"class":96,"line":1593},[94,109885,2381],{"emptyLinePlaceholder":20},[94,109887,109888],{"class":96,"line":1598},[94,109889,109890],{"class":209},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[94,109892,109893],{"class":96,"line":1604},[94,109894,109895],{"class":209},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[94,109897,109898],{"class":96,"line":1609},[94,109899,109900],{"class":209},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[94,109902,109903],{"class":96,"line":1623},[94,109904,2381],{"emptyLinePlaceholder":20},[94,109906,109907],{"class":96,"line":1628},[94,109908,109909],{"class":209},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[94,109911,109912],{"class":96,"line":1634},[94,109913,109914],{"class":209},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[94,109916,109917],{"class":96,"line":1655},[94,109918,109919],{"class":209},"        \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",[94,109921,109922],{"class":96,"line":1660},[94,109923,106415],{"class":209},[94,109925,109926],{"class":96,"line":1674},[94,109927,101344],{"class":209},[94,109929,109930],{"class":96,"line":1679},[94,109931,101349],{"class":209},[94,109933,109934],{"class":96,"line":1708},[94,109935,2381],{"emptyLinePlaceholder":20},[94,109937,109938],{"class":96,"line":1713},[94,109939,106432],{"class":209},[94,109941,109942],{"class":96,"line":1730},[94,109943,109944],{"class":209},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[94,109946,109947],{"class":96,"line":1735},[94,109948,106442],{"class":209},[94,109950,109951],{"class":96,"line":1740},[94,109952,101354],{"class":209},[94,109954,109955],{"class":96,"line":1745},[94,109956,95675],{"class":209},[94,109958,109959],{"class":96,"line":1759},[94,109960,2381],{"emptyLinePlaceholder":20},[94,109962,109963],{"class":96,"line":1764},[94,109964,2381],{"emptyLinePlaceholder":20},[94,109966,109967,109969,109972],{"class":96,"line":2558},[94,109968,31930],{"class":100},[94,109970,109971],{"class":1944}," get_observation",[94,109973,109974],{"class":104},"(data: mujoco.MjData) -> np.ndarray:\n",[94,109976,109977,109979],{"class":96,"line":2572},[94,109978,4071],{"class":100},[94,109980,109981],{"class":104}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[94,109983,109984],{"class":96,"line":2580},[94,109985,2381],{"emptyLinePlaceholder":20},[94,109987,109988],{"class":96,"line":2585},[94,109989,2381],{"emptyLinePlaceholder":20},[94,109991,109992,109994,109997,110000,110002],{"class":96,"line":2591},[94,109993,31930],{"class":100},[94,109995,109996],{"class":1944}," compute_reward",[94,109998,109999],{"class":104},"(obs: np.ndarray) -> ",[94,110001,144],{"class":153},[94,110003,3720],{"class":104},[94,110005,110006,110009,110011,110014,110016],{"class":96,"line":2597},[94,110007,110008],{"class":104},"    cart_x ",[94,110010,150],{"class":100},[94,110012,110013],{"class":104}," obs[",[94,110015,296],{"class":153},[94,110017,33229],{"class":104},[94,110019,110020,110023,110025,110027,110029],{"class":96,"line":2602},[94,110021,110022],{"class":104},"    pole_angle ",[94,110024,150],{"class":100},[94,110026,110013],{"class":104},[94,110028,322],{"class":153},[94,110030,33229],{"class":104},[94,110032,110033,110035,110037,110039,110041,110043,110045,110047,110049,110051,110053,110055,110057,110059],{"class":96,"line":7930},[94,110034,4071],{"class":100},[94,110036,109774],{"class":153},[94,110038,105],{"class":104},[94,110040,102380],{"class":153},[94,110042,52248],{"class":100},[94,110044,109783],{"class":153},[94,110046,6500],{"class":100},[94,110048,109788],{"class":104},[94,110050,560],{"class":100},[94,110052,109788],{"class":104},[94,110054,637],{"class":100},[94,110056,109797],{"class":104},[94,110058,560],{"class":100},[94,110060,109802],{"class":104},[94,110062,110063],{"class":96,"line":7954},[94,110064,2381],{"emptyLinePlaceholder":20},[94,110066,110067],{"class":96,"line":7959},[94,110068,2381],{"emptyLinePlaceholder":20},[94,110070,110071,110073,110075,110077,110079],{"class":96,"line":7965},[94,110072,31930],{"class":100},[94,110074,1954],{"class":1944},[94,110076,101375],{"class":104},[94,110078,95663],{"class":153},[94,110080,3720],{"class":104},[94,110082,110083,110085,110087,110089,110091],{"class":96,"line":7992},[94,110084,101384],{"class":104},[94,110086,150],{"class":100},[94,110088,101389],{"class":104},[94,110090,101291],{"class":153},[94,110092,111],{"class":104},[94,110094,110095,110097,110099],{"class":96,"line":7997},[94,110096,101398],{"class":104},[94,110098,150],{"class":100},[94,110100,101403],{"class":104},[94,110102,110103],{"class":96,"line":8003},[94,110104,2381],{"emptyLinePlaceholder":20},[94,110106,110107,110109,110111,110113,110115],{"class":96,"line":8015},[94,110108,105046],{"class":104},[94,110110,322],{"class":153},[94,110112,4424],{"class":104},[94,110114,150],{"class":100},[94,110116,110117],{"class":153}," 0.1\n",[94,110119,110120],{"class":96,"line":8027},[94,110121,105059],{"class":104},[94,110123,110124],{"class":96,"line":8039},[94,110125,2381],{"emptyLinePlaceholder":20},[94,110127,110128,110131,110133],{"class":96,"line":9698},[94,110129,110130],{"class":104},"    total_reward ",[94,110132,150],{"class":100},[94,110134,104738],{"class":153},[94,110136,110137],{"class":96,"line":9723},[94,110138,2381],{"emptyLinePlaceholder":20},[94,110140,110141,110143,110145,110147,110149,110151,110153],{"class":96,"line":9746},[94,110142,3182],{"class":100},[94,110144,31599],{"class":104},[94,110146,26026],{"class":100},[94,110148,32426],{"class":153},[94,110150,105],{"class":104},[94,110152,6392],{"class":153},[94,110154,30769],{"class":104},[94,110156,110157,110160,110162],{"class":96,"line":9770},[94,110158,110159],{"class":104},"        obs ",[94,110161,150],{"class":100},[94,110163,110164],{"class":104}," get_observation(data)\n",[94,110166,110167,110170,110172,110174,110176],{"class":96,"line":9775},[94,110168,110169],{"class":104},"        pole_angle ",[94,110171,150],{"class":100},[94,110173,110013],{"class":104},[94,110175,322],{"class":153},[94,110177,33229],{"class":104},[94,110179,110180,110183,110185,110187,110189],{"class":96,"line":9780},[94,110181,110182],{"class":104},"        pole_angular_velocity ",[94,110184,150],{"class":100},[94,110186,110013],{"class":104},[94,110188,176],{"class":153},[94,110190,33229],{"class":104},[94,110192,110193],{"class":96,"line":9785},[94,110194,2381],{"emptyLinePlaceholder":20},[94,110196,110197,110200,110202,110205,110207,110209,110211,110213,110215],{"class":96,"line":9794},[94,110198,110199],{"class":104},"        action ",[94,110201,150],{"class":100},[94,110203,110204],{"class":153}," 2.0",[94,110206,6500],{"class":100},[94,110208,109797],{"class":104},[94,110210,586],{"class":100},[94,110212,61844],{"class":153},[94,110214,6500],{"class":100},[94,110216,110217],{"class":104}," pole_angular_velocity\n",[94,110219,110220,110222,110224,110226,110228,110230,110232,110234],{"class":96,"line":9799},[94,110221,110199],{"class":104},[94,110223,150],{"class":100},[94,110225,107424],{"class":104},[94,110227,637],{"class":100},[94,110229,102380],{"class":153},[94,110231,12417],{"class":104},[94,110233,102380],{"class":153},[94,110235,111],{"class":104},[94,110237,110238],{"class":96,"line":9805},[94,110239,2381],{"emptyLinePlaceholder":20},[94,110241,110242,110244,110246,110248,110250],{"class":96,"line":9826},[94,110243,106594],{"class":104},[94,110245,296],{"class":153},[94,110247,4424],{"class":104},[94,110249,150],{"class":100},[94,110251,107447],{"class":104},[94,110253,110254],{"class":96,"line":9832},[94,110255,101493],{"class":104},[94,110257,110258],{"class":96,"line":9846},[94,110259,2381],{"emptyLinePlaceholder":20},[94,110261,110262,110265,110267],{"class":96,"line":9852},[94,110263,110264],{"class":104},"        reward ",[94,110266,150],{"class":100},[94,110268,110269],{"class":104}," compute_reward(get_observation(data))\n",[94,110271,110272,110275,110277],{"class":96,"line":9879},[94,110273,110274],{"class":104},"        total_reward ",[94,110276,9459],{"class":100},[94,110278,110279],{"class":104}," reward\n",[94,110281,110282],{"class":96,"line":9888},[94,110283,2381],{"emptyLinePlaceholder":20},[94,110285,110286,110288,110290,110292,110294,110296,110298],{"class":96,"line":9894},[94,110287,2478],{"class":100},[94,110289,31599],{"class":104},[94,110291,433],{"class":100},[94,110293,5736],{"class":153},[94,110295,101536],{"class":100},[94,110297,4074],{"class":153},[94,110299,3720],{"class":104},[94,110301,110302,110304,110306,110309,110312,110315,110318,110320,110323,110326,110328,110330,110332,110334,110337,110339],{"class":96,"line":9902},[94,110303,34633],{"class":153},[94,110305,105],{"class":104},[94,110307,110308],{"class":209},"\"step:\"",[94,110310,110311],{"class":104},", step, ",[94,110313,110314],{"class":209},"\"obs:\"",[94,110316,110317],{"class":104},", np.round(obs, ",[94,110319,176],{"class":153},[94,110321,110322],{"class":104},"), ",[94,110324,110325],{"class":209},"\"action:\"",[94,110327,12417],{"class":104},[94,110329,32001],{"class":153},[94,110331,105],{"class":104},[94,110333,144],{"class":153},[94,110335,110336],{"class":104},"(action), ",[94,110338,176],{"class":153},[94,110340,30480],{"class":104},[94,110342,110343],{"class":96,"line":9907},[94,110344,2381],{"emptyLinePlaceholder":20},[94,110346,110347,110349,110351,110354,110356,110358,110361,110363],{"class":96,"line":16586},[94,110348,31282],{"class":153},[94,110350,105],{"class":104},[94,110352,110353],{"class":209},"\"total_reward:\"",[94,110355,12417],{"class":104},[94,110357,32001],{"class":153},[94,110359,110360],{"class":104},"(total_reward, ",[94,110362,176],{"class":153},[94,110364,30480],{"class":104},[94,110366,110367,110369,110371,110374,110377,110379],{"class":96,"line":16592},[94,110368,31282],{"class":153},[94,110370,105],{"class":104},[94,110372,110373],{"class":209},"\"final obs:\"",[94,110375,110376],{"class":104},", np.round(get_observation(data), ",[94,110378,176],{"class":153},[94,110380,30480],{"class":104},[94,110382,110383],{"class":96,"line":16615},[94,110384,2381],{"emptyLinePlaceholder":20},[94,110386,110387],{"class":96,"line":16621},[94,110388,2381],{"emptyLinePlaceholder":20},[94,110390,110391,110393,110395,110397,110399],{"class":96,"line":16644},[94,110392,1512],{"class":100},[94,110394,31203],{"class":153},[94,110396,101536],{"class":100},[94,110398,101539],{"class":209},[94,110400,3720],{"class":104},[94,110402,110403],{"class":96,"line":16658},[94,110404,101546],{"class":104},[40,110406,103547],{},[85,110408,110410],{"className":23804,"code":110409,"language":23806,"meta":14,"style":14},"touch ch6_cartpole.py\n",[91,110411,110412],{"__ignoreMap":14},[94,110413,110414,110416],{"class":96,"line":97},[94,110415,101260],{"class":1944},[94,110417,110418],{"class":209}," ch6_cartpole.py\n",[40,110420,110421],{},"运行：",[85,110423,110425],{"className":23804,"code":110424,"language":23806,"meta":14,"style":14},"python ch6_cartpole.py\n",[91,110426,110427],{"__ignoreMap":14},[94,110428,110429,110431],{"class":96,"line":97},[94,110430,30363],{"class":1944},[94,110432,110418],{"class":209},[65,110434,101549],{"id":101549},[40,110436,110437],{},"构造观测：",[85,110439,110441],{"className":30361,"code":110440,"language":30363,"meta":14,"style":14},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[91,110442,110443,110451],{"__ignoreMap":14},[94,110444,110445,110447,110449],{"class":96,"line":97},[94,110446,31930],{"class":100},[94,110448,109971],{"class":1944},[94,110450,109974],{"class":104},[94,110452,110453,110455],{"class":96,"line":15},[94,110454,4071],{"class":100},[94,110456,109981],{"class":104},[40,110458,110459,110462,110463,110465,110466,110468],{},[91,110460,110461],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[91,110464,104007],{}," 2 维，",[91,110467,104337],{}," 2 维，所以 obs 是 4 维。",[40,110470,110471],{},"设置初始角度：",[85,110473,110475],{"className":30361,"code":110474,"language":30363,"meta":14,"style":14},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[91,110476,110477,110489],{"__ignoreMap":14},[94,110478,110479,110481,110483,110485,110487],{"class":96,"line":97},[94,110480,104676],{"class":104},[94,110482,322],{"class":153},[94,110484,4424],{"class":104},[94,110486,150],{"class":100},[94,110488,110117],{"class":153},[94,110490,110491],{"class":96,"line":15},[94,110492,104520],{"class":104},[40,110494,110495],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[40,110497,110498],{},"简单反馈控制：",[85,110500,110502],{"className":30361,"code":110501,"language":30363,"meta":14,"style":14},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[91,110503,110504,110524],{"__ignoreMap":14},[94,110505,110506,110508,110510,110512,110514,110516,110518,110520,110522],{"class":96,"line":97},[94,110507,107419],{"class":104},[94,110509,150],{"class":100},[94,110511,110204],{"class":153},[94,110513,6500],{"class":100},[94,110515,109797],{"class":104},[94,110517,586],{"class":100},[94,110519,61844],{"class":153},[94,110521,6500],{"class":100},[94,110523,110217],{"class":104},[94,110525,110526,110528,110530,110532,110534,110536,110538,110540],{"class":96,"line":15},[94,110527,107419],{"class":104},[94,110529,150],{"class":100},[94,110531,107424],{"class":104},[94,110533,637],{"class":100},[94,110535,102380],{"class":153},[94,110537,12417],{"class":104},[94,110539,102380],{"class":153},[94,110541,111],{"class":104},[40,110543,110544],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[40,110546,110547],{},"限制动作：",[85,110549,110551],{"className":30361,"code":110550,"language":30363,"meta":14,"style":14},"np.clip(action, -1.0, 1.0)\n",[91,110552,110553],{"__ignoreMap":14},[94,110554,110555,110558,110560,110562,110564,110566],{"class":96,"line":97},[94,110556,110557],{"class":104},"np.clip(action, ",[94,110559,637],{"class":100},[94,110561,102380],{"class":153},[94,110563,12417],{"class":104},[94,110565,102380],{"class":153},[94,110567,111],{"class":104},[40,110569,110570,110571,110574],{},"因为 XML 里 ",[91,110572,110573],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[65,110576,101685],{"id":101685},[85,110578,110579],{"className":30361,"code":110440,"language":30363,"meta":14,"style":14},[91,110580,110581,110589],{"__ignoreMap":14},[94,110582,110583,110585,110587],{"class":96,"line":97},[94,110584,31930],{"class":100},[94,110586,109971],{"class":1944},[94,110588,109974],{"class":104},[94,110590,110591,110593],{"class":96,"line":15},[94,110592,4071],{"class":100},[94,110594,109981],{"class":104},[40,110596,110597,110598,110601,110602,110605,110606,110609],{},"这段定义了一个函数，用来获取当前观测。",[91,110599,110600],{},"data.qpos.copy()"," 是位置数组副本，",[91,110603,110604],{},"data.qvel.copy()"," 是速度数组副本。",[91,110607,110608],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[40,110611,110612],{},"在本章模型里：",[85,110614,110617],{"className":110615,"code":110616,"language":5169,"meta":14},[5167],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[91,110618,110616],{"__ignoreMap":14},[40,110620,110621],{},"所以返回的 obs 是：",[85,110623,110626],{"className":110624,"code":110625,"language":5169,"meta":14},[5167],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[91,110627,110625],{"__ignoreMap":14},[85,110629,110631],{"className":30361,"code":110630,"language":30363,"meta":14,"style":14},"def compute_reward(obs: np.ndarray) -> float:\n",[91,110632,110633],{"__ignoreMap":14},[94,110634,110635,110637,110639,110641,110643],{"class":96,"line":97},[94,110636,31930],{"class":100},[94,110638,109996],{"class":1944},[94,110640,109999],{"class":104},[94,110642,144],{"class":153},[94,110644,3720],{"class":104},[40,110646,110647,110648,110651],{},"这行定义奖励函数。输入是观测 ",[91,110649,110650],{},"obs","，输出是一个浮点数奖励。",[85,110653,110655],{"className":30361,"code":110654,"language":30363,"meta":14,"style":14},"cart_x = obs[0]\npole_angle = obs[1]\n",[91,110656,110657,110670],{"__ignoreMap":14},[94,110658,110659,110662,110664,110666,110668],{"class":96,"line":97},[94,110660,110661],{"class":104},"cart_x ",[94,110663,150],{"class":100},[94,110665,110013],{"class":104},[94,110667,296],{"class":153},[94,110669,33229],{"class":104},[94,110671,110672,110675,110677,110679,110681],{"class":96,"line":15},[94,110673,110674],{"class":104},"pole_angle ",[94,110676,150],{"class":100},[94,110678,110013],{"class":104},[94,110680,322],{"class":153},[94,110682,33229],{"class":104},[40,110684,110685,110686,110689,110690,110693],{},"数组索引从 0 开始。",[91,110687,110688],{},"obs[0]"," 是第一个元素，也就是小车位置。",[91,110691,110692],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[85,110695,110696],{"className":30361,"code":109765,"language":30363,"meta":14,"style":14},[91,110697,110698],{"__ignoreMap":14},[94,110699,110700,110702,110704,110706,110708,110710,110712,110714,110716,110718,110720,110722,110724,110726],{"class":96,"line":97},[94,110701,17028],{"class":100},[94,110703,109774],{"class":153},[94,110705,105],{"class":104},[94,110707,102380],{"class":153},[94,110709,52248],{"class":100},[94,110711,109783],{"class":153},[94,110713,6500],{"class":100},[94,110715,109788],{"class":104},[94,110717,560],{"class":100},[94,110719,109788],{"class":104},[94,110721,637],{"class":100},[94,110723,109797],{"class":104},[94,110725,560],{"class":100},[94,110727,109802],{"class":104},[40,110729,110730,110731,110734,110735,110738],{},"这行计算奖励。",[91,110732,110733],{},"cart_x * cart_x"," 是小车位置的平方，",[91,110736,110737],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[85,110740,110742],{"className":30361,"code":110741,"language":30363,"meta":14,"style":14},"data.qpos[1] = 0.1\n",[91,110743,110744],{"__ignoreMap":14},[94,110745,110746,110748,110750,110752,110754],{"class":96,"line":97},[94,110747,104676],{"class":104},[94,110749,322],{"class":153},[94,110751,4424],{"class":104},[94,110753,150],{"class":100},[94,110755,110117],{"class":153},[40,110757,110758,110759,110761,110762,110764],{},"手动设置杆子的初始角度。因为 ",[91,110760,105433],{}," 是小车位置，",[91,110763,105436],{}," 是杆子角度，所以这里改的是杆子。",[85,110766,110767],{"className":30361,"code":104520,"language":30363,"meta":14,"style":14},[91,110768,110769],{"__ignoreMap":14},[94,110770,110771],{"class":96,"line":97},[94,110772,104520],{"class":104},[40,110774,105479,110775,110777],{},[91,110776,104007],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[85,110779,110781],{"className":30361,"code":110780,"language":30363,"meta":14,"style":14},"total_reward = 0.0\n",[91,110782,110783],{"__ignoreMap":14},[94,110784,110785,110788,110790],{"class":96,"line":97},[94,110786,110787],{"class":104},"total_reward ",[94,110789,150],{"class":100},[94,110791,104738],{"class":153},[40,110793,110794],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[85,110796,110798],{"className":30361,"code":110797,"language":30363,"meta":14,"style":14},"for step in range(1000):\n",[91,110799,110800],{"__ignoreMap":14},[94,110801,110802,110804,110806,110808,110810,110812,110814],{"class":96,"line":97},[94,110803,3006],{"class":100},[94,110805,31599],{"class":104},[94,110807,26026],{"class":100},[94,110809,32426],{"class":153},[94,110811,105],{"class":104},[94,110813,6392],{"class":153},[94,110815,30769],{"class":104},[40,110817,110818,110819,110821],{},"循环 1000 步。",[91,110820,107111],{}," 是当前步数，从 0 到 999。",[85,110823,110825],{"className":30361,"code":110824,"language":30363,"meta":14,"style":14},"obs = get_observation(data)\n",[91,110826,110827],{"__ignoreMap":14},[94,110828,110829,110832,110834],{"class":96,"line":97},[94,110830,110831],{"class":104},"obs ",[94,110833,150],{"class":100},[94,110835,110164],{"class":104},[40,110837,110838,110839,28368],{},"读取当前状态，保存到 ",[91,110840,110650],{},[85,110842,110844],{"className":30361,"code":110843,"language":30363,"meta":14,"style":14},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[91,110845,110846,110858],{"__ignoreMap":14},[94,110847,110848,110850,110852,110854,110856],{"class":96,"line":97},[94,110849,110674],{"class":104},[94,110851,150],{"class":100},[94,110853,110013],{"class":104},[94,110855,322],{"class":153},[94,110857,33229],{"class":104},[94,110859,110860,110863,110865,110867,110869],{"class":96,"line":15},[94,110861,110862],{"class":104},"pole_angular_velocity ",[94,110864,150],{"class":100},[94,110866,110013],{"class":104},[94,110868,176],{"class":153},[94,110870,33229],{"class":104},[40,110872,110873,110874,110877,110878,28368],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[91,110875,110876],{},"obs[3]","？因为 obs 的顺序是 ",[91,110879,110880],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[85,110882,110884],{"className":30361,"code":110883,"language":30363,"meta":14,"style":14},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[91,110885,110886],{"__ignoreMap":14},[94,110887,110888,110890,110892,110894,110896,110898,110900,110902,110904],{"class":96,"line":97},[94,110889,107419],{"class":104},[94,110891,150],{"class":100},[94,110893,110204],{"class":153},[94,110895,6500],{"class":100},[94,110897,109797],{"class":104},[94,110899,586],{"class":100},[94,110901,61844],{"class":153},[94,110903,6500],{"class":100},[94,110905,110217],{"class":104},[40,110907,110908,110909,100995,110911,110913],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[91,110910,105237],{},[91,110912,35312],{}," 是人为设置的系数，不是固定公式。",[85,110915,110917],{"className":30361,"code":110916,"language":30363,"meta":14,"style":14},"action = np.clip(action, -1.0, 1.0)\n",[91,110918,110919],{"__ignoreMap":14},[94,110920,110921,110923,110925,110927,110929,110931,110933,110935],{"class":96,"line":97},[94,110922,107419],{"class":104},[94,110924,150],{"class":100},[94,110926,107424],{"class":104},[94,110928,637],{"class":100},[94,110930,102380],{"class":153},[94,110932,12417],{"class":104},[94,110934,102380],{"class":153},[94,110936,111],{"class":104},[40,110938,110939],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[85,110941,110942],{"className":30361,"code":109750,"language":30363,"meta":14,"style":14},[91,110943,110944],{"__ignoreMap":14},[94,110945,110946,110948,110950,110952,110954],{"class":96,"line":97},[94,110947,105848],{"class":104},[94,110949,296],{"class":153},[94,110951,4424],{"class":104},[94,110953,150],{"class":100},[94,110955,107447],{"class":104},[40,110957,110958],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[85,110960,110961],{"className":30361,"code":104482,"language":30363,"meta":14,"style":14},[91,110962,110963],{"__ignoreMap":14},[94,110964,110965],{"class":96,"line":97},[94,110966,104482],{"class":104},[40,110968,110969,110970,110972],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[91,110971,106103],{}," 计算小车和杆子的下一刻状态。",[85,110974,110976],{"className":30361,"code":110975,"language":30363,"meta":14,"style":14},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[91,110977,110978,110987],{"__ignoreMap":14},[94,110979,110980,110983,110985],{"class":96,"line":97},[94,110981,110982],{"class":104},"reward ",[94,110984,150],{"class":100},[94,110986,110269],{"class":104},[94,110988,110989,110991,110993],{"class":96,"line":15},[94,110990,110787],{"class":104},[94,110992,9459],{"class":100},[94,110994,110279],{"class":104},[40,110996,110997,110998,111000,111001,111004,111005,28368],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[91,110999,9459],{}," 是简写，",[91,111002,111003],{},"total_reward += reward"," 等价于 ",[91,111006,111007],{},"total_reward = total_reward + reward",[85,111009,111011],{"className":30361,"code":111010,"language":30363,"meta":14,"style":14},"if step % 100 == 0:\n",[91,111012,111013],{"__ignoreMap":14},[94,111014,111015,111017,111019,111021,111023,111025,111027],{"class":96,"line":97},[94,111016,1512],{"class":100},[94,111018,31599],{"class":104},[94,111020,433],{"class":100},[94,111022,5736],{"class":153},[94,111024,101536],{"class":100},[94,111026,4074],{"class":153},[94,111028,3720],{"class":104},[40,111030,111031,111033,111034,111037],{},[91,111032,433],{}," 是取余数。",[91,111035,111036],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[85,111039,111041],{"className":30361,"code":111040,"language":30363,"meta":14,"style":14},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[91,111042,111043],{"__ignoreMap":14},[94,111044,111045,111047,111049,111051,111053,111055,111057,111059,111061,111063,111065,111067,111069,111071,111073,111075],{"class":96,"line":97},[94,111046,30398],{"class":153},[94,111048,105],{"class":104},[94,111050,110308],{"class":209},[94,111052,110311],{"class":104},[94,111054,110314],{"class":209},[94,111056,110317],{"class":104},[94,111058,176],{"class":153},[94,111060,110322],{"class":104},[94,111062,110325],{"class":209},[94,111064,12417],{"class":104},[94,111066,32001],{"class":153},[94,111068,105],{"class":104},[94,111070,144],{"class":153},[94,111072,110336],{"class":104},[94,111074,176],{"class":153},[94,111076,30480],{"class":104},[40,111078,111079,111080,111083,111084,111087],{},"打印当前步数、观测和动作。",[91,111081,111082],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[91,111085,111086],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[35,111089,102293],{"id":102292},[40,111091,111092],{},"观测向量:",[85,111094,111097],{"className":111095,"code":111096,"language":5169,"meta":14},[5167],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[91,111098,111096],{"__ignoreMap":14},[40,111100,111101],{},"控制器是教学用的简单线性反馈，不保证最优。",[40,111103,111104],{},"每隔 100 步会打印一次：",[85,111106,111109],{"className":111107,"code":111108,"language":5169,"meta":14},[5167],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[91,111110,111108],{"__ignoreMap":14},[40,111112,111113],{},"重点观察：",[48,111115,111116,111122,111127],{},[51,111117,111118,111121],{},[91,111119,111120],{},"pole_angle"," 是否越来越大。",[51,111123,111124,111126],{},[91,111125,109703],{}," 是否跑得太远。",[51,111128,111129,111130,82516,111132,28368],{},"action 是否经常被 clip 到 ",[91,111131,103892],{},[91,111133,322],{},[40,111135,111136],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[35,111138,102325],{"id":102324},[48,111140,111141,111147,111150,111156,111166,111172,111175],{},[51,111142,111143,111144,28368],{},"把初始角度改为 ",[91,111145,111146],{},"data.qpos[1] = 0.3",[51,111148,111149],{},"重新运行，观察控制是否变差。",[51,111151,111152,111153,111155],{},"把 actuator ",[91,111154,107044],{}," 改小。",[51,111157,111158,111159,111162,111163,28368],{},"打印 ",[91,111160,111161],{},"model.nq, model.nv, model.nu","，应为 ",[91,111164,111165],{},"2 2 1",[51,111167,111168,111169,111171],{},"把 reward 里的 ",[91,111170,110737],{}," 系数改大，观察总奖励变化。",[51,111173,111174],{},"把控制器改成反号，观察杆子是否更容易倒。",[51,111176,111177],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[35,111179,102430],{"id":102429},[65,111181,111182],{"id":111182},"杆子方向和预期不一致",[40,111184,102373,111185,111187,111188,111190],{},[91,111186,106216],{}," 和 capsule 的 ",[91,111189,103153],{},"，必要时用 viewer 可视化确认。",[65,111192,111193],{"id":111193},"控制器越控越倒",[40,111195,111196],{},"说明反馈符号可能反了，尝试:",[85,111198,111200],{"className":30361,"code":111199,"language":30363,"meta":14,"style":14},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[91,111201,111202],{"__ignoreMap":14},[94,111203,111204,111206,111208,111210,111212,111214,111216,111218,111220,111222],{"class":96,"line":97},[94,111205,107419],{"class":104},[94,111207,150],{"class":100},[94,111209,52248],{"class":100},[94,111211,105237],{"class":153},[94,111213,6500],{"class":100},[94,111215,109797],{"class":104},[94,111217,637],{"class":100},[94,111219,61844],{"class":153},[94,111221,6500],{"class":100},[94,111223,110217],{"class":104},[65,111225,111226],{"id":111226},"小车飞走",[40,111228,111229,111230,111232,111233,111236],{},"降低 ",[91,111231,107044],{}," 或缩小 ",[91,111234,111235],{},"action"," 的 clip 范围。",[65,111238,111240,111242],{"id":111239},"obs3-为什么是杆子角速度",[91,111241,110876],{}," 为什么是杆子角速度",[40,111244,111245],{},"因为这个模型里：",[85,111247,111250],{"className":111248,"code":111249,"language":5169,"meta":14},[5167],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[91,111251,111249],{"__ignoreMap":14},[40,111253,109724],{},[85,111255,111258],{"className":111256,"code":111257,"language":5169,"meta":14},[5167],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[91,111259,111257],{"__ignoreMap":14},[65,111261,111263],{"id":111262},"reward-变成负数是否错误","reward 变成负数是否错误",[40,111265,111266],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[35,111268,102584],{"id":102583},[40,111270,111271],{},"一个控制任务通常包含：",[48,111273,111274,111277,111285,111290,111293],{},[51,111275,111276],{},"模型：Cartpole 的 body、joint、actuator。",[51,111278,111279,111280,317,111282,111284],{},"观测：从 ",[91,111281,104007],{},[91,111283,104337],{}," 里取状态。",[51,111286,111287,111288,28368],{},"动作：写入 ",[91,111289,101053],{},[51,111291,111292],{},"奖励：根据任务目标打分。",[51,111294,111295],{},"循环：obs -> action -> step -> reward。",[40,111297,111298],{},"这就是后面 Gymnasium 环境的基本骨架。",[5108,111300,104263],{},{"title":14,"searchDepth":15,"depth":15,"links":111302},[111303,111304,111305,111310,111314,111315,111316,111324],{"id":100623,"depth":15,"text":100624},{"id":100746,"depth":15,"text":100747},{"id":101021,"depth":15,"text":101022,"children":111306},[111307,111308,111309],{"id":109677,"depth":1160,"text":109678},{"id":109742,"depth":1160,"text":109743},{"id":109758,"depth":1160,"text":109759},{"id":101229,"depth":15,"text":101230,"children":111311},[111312,111313],{"id":101549,"depth":1160,"text":101549},{"id":101685,"depth":1160,"text":101685},{"id":102292,"depth":15,"text":102293},{"id":102324,"depth":15,"text":102325},{"id":102429,"depth":15,"text":102430,"children":111317},[111318,111319,111320,111321,111323],{"id":111182,"depth":1160,"text":111182},{"id":111193,"depth":1160,"text":111193},{"id":111226,"depth":1160,"text":111226},{"id":111239,"depth":1160,"text":111322},"obs[3] 为什么是杆子角速度",{"id":111262,"depth":1160,"text":111263},{"id":102583,"depth":15,"text":102584},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109413,"description":14},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111331,"title":111332,"body":111333,"description":14,"extension":18,"meta":113347,"navigation":20,"path":113348,"seo":113349,"stem":113350,"__hash__":113351},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111334,"toc":113323},[111335,111338,111340,111343,111345,111362,111365,111368,111374,111377,111379,111381,111405,111407,111421,111423,111464,111466,111484,111486,111489,111495,111498,111526,111530,111536,111561,111564,111595,111602,111605,111608,111614,111617,111623,111626,111632,111636,111639,111664,111667,111669,112429,112431,112443,112445,112456,112458,112461,112478,112481,112483,112494,112497,112499,112545,112548,112561,112564,112646,112649,112651,112667,112677,112690,112693,112732,112742,112753,112763,112776,112779,112808,112811,112821,112824,112830,112847,112858,112860,112866,112883,112894,112915,112918,112930,112933,112954,112957,112965,112973,112990,112993,113062,113069,113077,113080,113093,113100,113102,113105,113111,113114,113117,113123,113129,113131,113171,113173,113179,113188,113191,113193,113213,113216,113219,113225,113229,113231,113258,113261,113264,113291,113297,113300,113303,113305,113308,113311,113317,113320],[10,111336,111332],{"id":111337},"_7控制任务reacher-机械臂到达目标",[35,111339,100624],{"id":100623},[40,111341,111342],{},"本章搭建一个二维两关节 reacher 任务。",[40,111344,104308],{},[48,111346,111347,111350,111353,111356,111359],{},[51,111348,111349],{},"两个 hinge joint",[51,111351,111352],{},"两个 motor actuator",[51,111354,111355],{},"site 作为末端点和目标点",[51,111357,111358],{},"根据末端和目标距离设计 reward",[51,111360,111361],{},"构造机械臂任务的基本形式",[40,111363,111364],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[40,111366,111367],{},"Reacher 任务可以理解为：",[85,111369,111372],{"className":111370,"code":111371,"language":5169,"meta":14},[5167],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[91,111373,111371],{"__ignoreMap":14},[40,111375,111376],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[35,111378,100747],{"id":100746},[40,111380,100750],{},[85,111382,111383],{"className":23804,"code":104365,"language":23806,"meta":14,"style":14},[91,111384,111385],{"__ignoreMap":14},[94,111386,111387,111389,111391,111393,111395,111397,111399,111401,111403],{"class":96,"line":97},[94,111388,24559],{"class":1944},[94,111390,26298],{"class":209},[94,111392,23816],{"class":209},[94,111394,26383],{"class":153},[94,111396,104380],{"class":209},[94,111398,100775],{"class":209},[94,111400,102478],{"class":209},[94,111402,100791],{"class":209},[94,111404,104389],{"class":209},[40,111406,102796],{},[85,111408,111409],{"className":23804,"code":100896,"language":23806,"meta":14,"style":14},[91,111410,111411],{"__ignoreMap":14},[94,111412,111413,111415,111417,111419],{"class":96,"line":97},[94,111414,23813],{"class":1944},[94,111416,23816],{"class":209},[94,111418,100907],{"class":209},[94,111420,100910],{"class":209},[40,111422,102813],{},[85,111424,111426],{"className":23804,"code":111425,"language":23806,"meta":14,"style":14},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[91,111427,111428,111445,111454],{"__ignoreMap":14},[94,111429,111430,111432,111434,111436,111439,111441,111443],{"class":96,"line":97},[94,111431,30313],{"class":1944},[94,111433,29159],{"class":209},[94,111435,25098],{"class":153},[94,111437,111438],{"class":209}," mujoco-reacher",[94,111440,100952],{"class":209},[94,111442,100955],{"class":153},[94,111444,100958],{"class":153},[94,111446,111447,111449,111451],{"class":96,"line":15},[94,111448,30313],{"class":1944},[94,111450,100965],{"class":209},[94,111452,111453],{"class":209}," mujoco-reacher\n",[94,111455,111456,111458,111460,111462],{"class":96,"line":1160},[94,111457,23813],{"class":1944},[94,111459,23816],{"class":209},[94,111461,100907],{"class":209},[94,111463,100910],{"class":209},[40,111465,100981],{},[48,111467,111468,111471,111474],{},[51,111469,111470],{},"本章使用低维状态，不使用图像输入。",[51,111472,111473],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[51,111475,111476,111477,317,111479,317,111481,111483],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[91,111478,104007],{},[91,111480,104337],{},[91,111482,103657],{}," 的方法一致。",[35,111485,101022],{"id":101021},[40,111487,111488],{},"Reacher 任务核心:",[85,111490,111493],{"className":111491,"code":111492,"language":5169,"meta":14},[5167],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[91,111494,111492],{"__ignoreMap":14},[40,111496,111497],{},"读取 site 世界坐标:",[85,111499,111501],{"className":30361,"code":111500,"language":30363,"meta":14,"style":14},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[91,111502,111503,111516],{"__ignoreMap":14},[94,111504,111505,111507,111509,111511,111514],{"class":96,"line":97},[94,111506,103611],{"class":104},[94,111508,150],{"class":100},[94,111510,103382],{"class":104},[94,111512,111513],{"class":209},"\"tip\"",[94,111515,111],{"class":104},[94,111517,111518,111521,111523],{"class":96,"line":15},[94,111519,111520],{"class":104},"tip_pos ",[94,111522,150],{"class":100},[94,111524,111525],{"class":104}," data.site_xpos[site_id]\n",[65,111527,111529],{"id":111528},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[40,111531,111532,111533,111535],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[91,111534,104007],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[85,111537,111539],{"className":30361,"code":111538,"language":30363,"meta":14,"style":14},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[91,111540,111541,111551],{"__ignoreMap":14},[94,111542,111543,111546,111548],{"class":96,"line":97},[94,111544,111545],{"class":104},"tip ",[94,111547,150],{"class":100},[94,111549,111550],{"class":104}," data.site_xpos[tip_site_id]\n",[94,111552,111553,111556,111558],{"class":96,"line":15},[94,111554,111555],{"class":104},"target ",[94,111557,150],{"class":100},[94,111559,111560],{"class":104}," data.site_xpos[target_site_id]\n",[40,111562,111563],{},"这样 reward 就很容易写：",[85,111565,111567],{"className":30361,"code":111566,"language":30363,"meta":14,"style":14},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[91,111568,111569,111584],{"__ignoreMap":14},[94,111570,111571,111574,111576,111579,111581],{"class":96,"line":97},[94,111572,111573],{"class":104},"dist ",[94,111575,150],{"class":100},[94,111577,111578],{"class":104}," np.linalg.norm(tip ",[94,111580,637],{"class":100},[94,111582,111583],{"class":104}," target)\n",[94,111585,111586,111588,111590,111592],{"class":96,"line":15},[94,111587,110982],{"class":104},[94,111589,150],{"class":100},[94,111591,52248],{"class":100},[94,111593,111594],{"class":104},"dist\n",[40,111596,111597,111598,111601],{},"距离越小，",[91,111599,111600],{},"-dist"," 越接近 0，奖励越高。",[65,111603,111604],{"id":111604},"两关节机械臂的状态",[40,111606,111607],{},"这个模型有两个 hinge joint：",[85,111609,111612],{"className":111610,"code":111611,"language":5169,"meta":14},[5167],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[91,111613,111611],{"__ignoreMap":14},[40,111615,111616],{},"再加上末端和目标位置：",[85,111618,111621],{"className":111619,"code":111620,"language":5169,"meta":14},[5167],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[91,111622,111620],{"__ignoreMap":14},[40,111624,111625],{},"总维度：",[85,111627,111630],{"className":111628,"code":111629,"language":5169,"meta":14},[5167],"2 + 2 + 3 + 3 = 10\n",[91,111631,111629],{"__ignoreMap":14},[65,111633,111635],{"id":111634},"为什么-gravity-是-0","为什么 gravity 是 0",[40,111637,111638],{},"本章把重力设为：",[85,111640,111642],{"className":53044,"code":111641,"language":53046,"meta":14,"style":14},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[91,111643,111644],{"__ignoreMap":14},[94,111645,111646,111648,111650,111652,111654,111656,111658,111660,111662],{"class":96,"line":97},[94,111647,1015],{"class":104},[94,111649,69143],{"class":51277},[94,111651,101171],{"class":1944},[94,111653,150],{"class":104},[94,111655,101176],{"class":209},[94,111657,101179],{"class":1944},[94,111659,150],{"class":104},[94,111661,103748],{"class":209},[94,111663,101121],{"class":104},[40,111665,111666],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[35,111668,101230],{"id":101229},[85,111670,111672],{"className":30361,"code":111671,"language":30363,"meta":14,"style":14},"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",[91,111673,111674,111680,111690,111694,111698,111706,111711,111716,111720,111724,111729,111734,111738,111743,111748,111753,111757,111762,111767,111772,111777,111781,111785,111789,111793,111797,111802,111807,111811,111815,111819,111823,111827,111842,111851,111863,111886,111893,111897,111901,111911,111925,111939,111946,111950,111954,111968,111980,111992,112005,112020,112037,112041,112045,112057,112069,112077,112085,112089,112105,112110,112123,112136,112151,112155,112190,112222,112226,112230,112239,112243,112259,112269,112280,112296,112312,112328,112344,112348,112366,112386,112405,112409,112413,112425],{"__ignoreMap":14},[94,111675,111676,111678],{"class":96,"line":97},[94,111677,30375],{"class":100},[94,111679,101278],{"class":104},[94,111681,111682,111684,111686,111688],{"class":96,"line":15},[94,111683,30375],{"class":100},[94,111685,31363],{"class":104},[94,111687,31366],{"class":100},[94,111689,31369],{"class":104},[94,111691,111692],{"class":96,"line":1160},[94,111693,2381],{"emptyLinePlaceholder":20},[94,111695,111696],{"class":96,"line":1175},[94,111697,2381],{"emptyLinePlaceholder":20},[94,111699,111700,111702,111704],{"class":96,"line":1181},[94,111701,101291],{"class":153},[94,111703,13546],{"class":100},[94,111705,101296],{"class":209},[94,111707,111708],{"class":96,"line":1195},[94,111709,111710],{"class":209},"\u003Cmujoco model=\"two_link_reacher\">\n",[94,111712,111713],{"class":96,"line":1201},[94,111714,111715],{"class":209},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[94,111717,111718],{"class":96,"line":1292},[94,111719,2381],{"emptyLinePlaceholder":20},[94,111721,111722],{"class":96,"line":1298},[94,111723,101315],{"class":209},[94,111725,111726],{"class":96,"line":1310},[94,111727,111728],{"class":209},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[94,111730,111731],{"class":96,"line":1593},[94,111732,111733],{"class":209},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[94,111735,111736],{"class":96,"line":1598},[94,111737,2381],{"emptyLinePlaceholder":20},[94,111739,111740],{"class":96,"line":1604},[94,111741,111742],{"class":209},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[94,111744,111745],{"class":96,"line":1609},[94,111746,111747],{"class":209},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[94,111749,111750],{"class":96,"line":1623},[94,111751,111752],{"class":209},"      \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",[94,111754,111755],{"class":96,"line":1628},[94,111756,2381],{"emptyLinePlaceholder":20},[94,111758,111759],{"class":96,"line":1634},[94,111760,111761],{"class":209},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[94,111763,111764],{"class":96,"line":1655},[94,111765,111766],{"class":209},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[94,111768,111769],{"class":96,"line":1660},[94,111770,111771],{"class":209},"        \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",[94,111773,111774],{"class":96,"line":1674},[94,111775,111776],{"class":209},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[94,111778,111779],{"class":96,"line":1679},[94,111780,106415],{"class":209},[94,111782,111783],{"class":96,"line":1708},[94,111784,101344],{"class":209},[94,111786,111787],{"class":96,"line":1713},[94,111788,101349],{"class":209},[94,111790,111791],{"class":96,"line":1730},[94,111792,2381],{"emptyLinePlaceholder":20},[94,111794,111795],{"class":96,"line":1735},[94,111796,106432],{"class":209},[94,111798,111799],{"class":96,"line":1740},[94,111800,111801],{"class":209},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[94,111803,111804],{"class":96,"line":1745},[94,111805,111806],{"class":209},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[94,111808,111809],{"class":96,"line":1759},[94,111810,106442],{"class":209},[94,111812,111813],{"class":96,"line":1764},[94,111814,101354],{"class":209},[94,111816,111817],{"class":96,"line":2558},[94,111818,95675],{"class":209},[94,111820,111821],{"class":96,"line":2572},[94,111822,2381],{"emptyLinePlaceholder":20},[94,111824,111825],{"class":96,"line":2580},[94,111826,2381],{"emptyLinePlaceholder":20},[94,111828,111829,111831,111834,111837,111839],{"class":96,"line":2585},[94,111830,31930],{"class":100},[94,111832,111833],{"class":1944}," site_position",[94,111835,111836],{"class":104},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[94,111838,1280],{"class":153},[94,111840,111841],{"class":104},") -> np.ndarray:\n",[94,111843,111844,111846,111848],{"class":96,"line":2591},[94,111845,103377],{"class":104},[94,111847,150],{"class":100},[94,111849,111850],{"class":104}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[94,111852,111853,111855,111857,111859,111861],{"class":96,"line":2597},[94,111854,3082],{"class":100},[94,111856,103426],{"class":104},[94,111858,1015],{"class":100},[94,111860,4074],{"class":153},[94,111862,3720],{"class":104},[94,111864,111865,111867,111869,111871,111873,111876,111878,111880,111882,111884],{"class":96,"line":2602},[94,111866,103409],{"class":100},[94,111868,103412],{"class":153},[94,111870,105],{"class":104},[94,111872,157],{"class":100},[94,111874,111875],{"class":209},"\"site not found: ",[94,111877,1001],{"class":153},[94,111879,79787],{"class":104},[94,111881,1051],{"class":153},[94,111883,356],{"class":209},[94,111885,111],{"class":104},[94,111887,111888,111890],{"class":96,"line":7930},[94,111889,4071],{"class":100},[94,111891,111892],{"class":104}," data.site_xpos[site_id].copy()\n",[94,111894,111895],{"class":96,"line":7954},[94,111896,2381],{"emptyLinePlaceholder":20},[94,111898,111899],{"class":96,"line":7959},[94,111900,2381],{"emptyLinePlaceholder":20},[94,111902,111903,111905,111908],{"class":96,"line":7965},[94,111904,31930],{"class":100},[94,111906,111907],{"class":1944}," get_obs",[94,111909,111910],{"class":104},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[94,111912,111913,111916,111918,111921,111923],{"class":96,"line":7992},[94,111914,111915],{"class":104},"    tip ",[94,111917,150],{"class":100},[94,111919,111920],{"class":104}," site_position(model, data, ",[94,111922,111513],{"class":209},[94,111924,111],{"class":104},[94,111926,111927,111930,111932,111934,111937],{"class":96,"line":7997},[94,111928,111929],{"class":104},"    target ",[94,111931,150],{"class":100},[94,111933,111920],{"class":104},[94,111935,111936],{"class":209},"\"target\"",[94,111938,111],{"class":104},[94,111940,111941,111943],{"class":96,"line":8003},[94,111942,4071],{"class":100},[94,111944,111945],{"class":104}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[94,111947,111948],{"class":96,"line":8015},[94,111949,2381],{"emptyLinePlaceholder":20},[94,111951,111952],{"class":96,"line":8027},[94,111953,2381],{"emptyLinePlaceholder":20},[94,111955,111956,111958,111961,111964,111966],{"class":96,"line":8039},[94,111957,31930],{"class":100},[94,111959,111960],{"class":1944}," reward",[94,111962,111963],{"class":104},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[94,111965,144],{"class":153},[94,111967,3720],{"class":104},[94,111969,111970,111972,111974,111976,111978],{"class":96,"line":9698},[94,111971,111915],{"class":104},[94,111973,150],{"class":100},[94,111975,111920],{"class":104},[94,111977,111513],{"class":209},[94,111979,111],{"class":104},[94,111981,111982,111984,111986,111988,111990],{"class":96,"line":9723},[94,111983,111929],{"class":104},[94,111985,150],{"class":100},[94,111987,111920],{"class":104},[94,111989,111936],{"class":209},[94,111991,111],{"class":104},[94,111993,111994,111997,111999,112001,112003],{"class":96,"line":9746},[94,111995,111996],{"class":104},"    dist ",[94,111998,150],{"class":100},[94,112000,111578],{"class":104},[94,112002,637],{"class":100},[94,112004,111583],{"class":104},[94,112006,112007,112010,112012,112015,112017],{"class":96,"line":9770},[94,112008,112009],{"class":104},"    control_cost ",[94,112011,150],{"class":100},[94,112013,112014],{"class":153}," 0.01",[94,112016,6500],{"class":100},[94,112018,112019],{"class":104}," np.sum(np.square(data.ctrl))\n",[94,112021,112022,112024,112026,112028,112030,112032,112034],{"class":96,"line":9775},[94,112023,4071],{"class":100},[94,112025,109774],{"class":153},[94,112027,105],{"class":104},[94,112029,637],{"class":100},[94,112031,111573],{"class":104},[94,112033,637],{"class":100},[94,112035,112036],{"class":104}," control_cost)\n",[94,112038,112039],{"class":96,"line":9780},[94,112040,2381],{"emptyLinePlaceholder":20},[94,112042,112043],{"class":96,"line":9785},[94,112044,2381],{"emptyLinePlaceholder":20},[94,112046,112047,112049,112051,112053,112055],{"class":96,"line":9794},[94,112048,31930],{"class":100},[94,112050,1954],{"class":1944},[94,112052,101375],{"class":104},[94,112054,95663],{"class":153},[94,112056,3720],{"class":104},[94,112058,112059,112061,112063,112065,112067],{"class":96,"line":9799},[94,112060,101384],{"class":104},[94,112062,150],{"class":100},[94,112064,101389],{"class":104},[94,112066,101291],{"class":153},[94,112068,111],{"class":104},[94,112070,112071,112073,112075],{"class":96,"line":9805},[94,112072,101398],{"class":104},[94,112074,150],{"class":100},[94,112076,101403],{"class":104},[94,112078,112079,112081,112083],{"class":96,"line":9826},[94,112080,110130],{"class":104},[94,112082,150],{"class":100},[94,112084,104738],{"class":153},[94,112086,112087],{"class":96,"line":9832},[94,112088,2381],{"emptyLinePlaceholder":20},[94,112090,112091,112093,112095,112097,112099,112101,112103],{"class":96,"line":9846},[94,112092,3182],{"class":100},[94,112094,31599],{"class":104},[94,112096,26026],{"class":100},[94,112098,32426],{"class":153},[94,112100,105],{"class":104},[94,112102,65051],{"class":153},[94,112104,30769],{"class":104},[94,112106,112107],{"class":96,"line":9852},[94,112108,112109],{"class":104},"        mujoco.mj_forward(model, data)\n",[94,112111,112112,112115,112117,112119,112121],{"class":96,"line":9879},[94,112113,112114],{"class":104},"        tip ",[94,112116,150],{"class":100},[94,112118,111920],{"class":104},[94,112120,111513],{"class":209},[94,112122,111],{"class":104},[94,112124,112125,112128,112130,112132,112134],{"class":96,"line":9888},[94,112126,112127],{"class":104},"        target ",[94,112129,150],{"class":100},[94,112131,111920],{"class":104},[94,112133,111936],{"class":209},[94,112135,111],{"class":104},[94,112137,112138,112141,112143,112146,112148],{"class":96,"line":9894},[94,112139,112140],{"class":104},"        error ",[94,112142,150],{"class":100},[94,112144,112145],{"class":104}," target ",[94,112147,637],{"class":100},[94,112149,112150],{"class":104}," tip\n",[94,112152,112153],{"class":96,"line":9902},[94,112154,2381],{"emptyLinePlaceholder":20},[94,112156,112157,112159,112161,112163,112165,112168,112170,112172,112175,112177,112180,112182,112184,112186,112188],{"class":96,"line":9907},[94,112158,106594],{"class":104},[94,112160,296],{"class":153},[94,112162,4424],{"class":104},[94,112164,150],{"class":100},[94,112166,112167],{"class":104}," np.clip(",[94,112169,105237],{"class":153},[94,112171,6500],{"class":100},[94,112173,112174],{"class":104}," error[",[94,112176,182],{"class":153},[94,112178,112179],{"class":104},"], ",[94,112181,637],{"class":100},[94,112183,102380],{"class":153},[94,112185,12417],{"class":104},[94,112187,102380],{"class":153},[94,112189,111],{"class":104},[94,112191,112192,112194,112196,112198,112200,112202,112204,112206,112208,112210,112212,112214,112216,112218,112220],{"class":96,"line":16586},[94,112193,106594],{"class":104},[94,112195,322],{"class":153},[94,112197,4424],{"class":104},[94,112199,150],{"class":100},[94,112201,112167],{"class":104},[94,112203,105237],{"class":153},[94,112205,6500],{"class":100},[94,112207,112174],{"class":104},[94,112209,296],{"class":153},[94,112211,112179],{"class":104},[94,112213,637],{"class":100},[94,112215,102380],{"class":153},[94,112217,12417],{"class":104},[94,112219,102380],{"class":153},[94,112221,111],{"class":104},[94,112223,112224],{"class":96,"line":16592},[94,112225,2381],{"emptyLinePlaceholder":20},[94,112227,112228],{"class":96,"line":16615},[94,112229,101493],{"class":104},[94,112231,112232,112234,112236],{"class":96,"line":16621},[94,112233,110274],{"class":104},[94,112235,9459],{"class":100},[94,112237,112238],{"class":104}," reward(model, data)\n",[94,112240,112241],{"class":96,"line":16644},[94,112242,2381],{"emptyLinePlaceholder":20},[94,112244,112245,112247,112249,112251,112253,112255,112257],{"class":96,"line":16658},[94,112246,2478],{"class":100},[94,112248,31599],{"class":104},[94,112250,433],{"class":100},[94,112252,5736],{"class":153},[94,112254,101536],{"class":100},[94,112256,4074],{"class":153},[94,112258,3720],{"class":104},[94,112260,112261,112264,112266],{"class":96,"line":16678},[94,112262,112263],{"class":104},"            obs ",[94,112265,150],{"class":100},[94,112267,112268],{"class":104}," get_obs(model, data)\n",[94,112270,112271,112273,112275,112277],{"class":96,"line":16684},[94,112272,34633],{"class":153},[94,112274,105],{"class":104},[94,112276,110308],{"class":209},[94,112278,112279],{"class":104},", step)\n",[94,112281,112282,112284,112286,112289,112292,112294],{"class":96,"line":16695},[94,112283,34633],{"class":153},[94,112285,105],{"class":104},[94,112287,112288],{"class":209},"\"  tip:\"",[94,112290,112291],{"class":104},", np.round(tip, ",[94,112293,176],{"class":153},[94,112295,30480],{"class":104},[94,112297,112298,112300,112302,112305,112308,112310],{"class":96,"line":16718},[94,112299,34633],{"class":153},[94,112301,105],{"class":104},[94,112303,112304],{"class":209},"\"  target:\"",[94,112306,112307],{"class":104},", np.round(target, ",[94,112309,176],{"class":153},[94,112311,30480],{"class":104},[94,112313,112314,112316,112318,112321,112324,112326],{"class":96,"line":16740},[94,112315,34633],{"class":153},[94,112317,105],{"class":104},[94,112319,112320],{"class":209},"\"  ctrl:\"",[94,112322,112323],{"class":104},", np.round(data.ctrl.copy(), ",[94,112325,176],{"class":153},[94,112327,30480],{"class":104},[94,112329,112330,112332,112334,112337,112340,112342],{"class":96,"line":16745},[94,112331,34633],{"class":153},[94,112333,105],{"class":104},[94,112335,112336],{"class":209},"\"  obs_dim:\"",[94,112338,112339],{"class":104},", obs.shape[",[94,112341,296],{"class":153},[94,112343,4638],{"class":104},[94,112345,112346],{"class":96,"line":16751},[94,112347,2381],{"emptyLinePlaceholder":20},[94,112349,112350,112352,112354,112356,112358,112360,112362,112364],{"class":96,"line":16765},[94,112351,31282],{"class":153},[94,112353,105],{"class":104},[94,112355,110353],{"class":209},[94,112357,12417],{"class":104},[94,112359,32001],{"class":153},[94,112361,110360],{"class":104},[94,112363,176],{"class":153},[94,112365,30480],{"class":104},[94,112367,112368,112370,112372,112375,112378,112380,112382,112384],{"class":96,"line":16778},[94,112369,31282],{"class":153},[94,112371,105],{"class":104},[94,112373,112374],{"class":209},"\"final tip:\"",[94,112376,112377],{"class":104},", np.round(site_position(model, data, ",[94,112379,111513],{"class":209},[94,112381,110322],{"class":104},[94,112383,176],{"class":153},[94,112385,30480],{"class":104},[94,112387,112388,112390,112392,112395,112397,112399,112401,112403],{"class":96,"line":16783},[94,112389,31282],{"class":153},[94,112391,105],{"class":104},[94,112393,112394],{"class":209},"\"target:\"",[94,112396,112377],{"class":104},[94,112398,111936],{"class":209},[94,112400,110322],{"class":104},[94,112402,176],{"class":153},[94,112404,30480],{"class":104},[94,112406,112407],{"class":96,"line":16797},[94,112408,2381],{"emptyLinePlaceholder":20},[94,112410,112411],{"class":96,"line":16802},[94,112412,2381],{"emptyLinePlaceholder":20},[94,112414,112415,112417,112419,112421,112423],{"class":96,"line":16808},[94,112416,1512],{"class":100},[94,112418,31203],{"class":153},[94,112420,101536],{"class":100},[94,112422,101539],{"class":209},[94,112424,3720],{"class":104},[94,112426,112427],{"class":96,"line":16813},[94,112428,101546],{"class":104},[40,112430,103547],{},[85,112432,112434],{"className":23804,"code":112433,"language":23806,"meta":14,"style":14},"touch ch7_reacher.py\n",[91,112435,112436],{"__ignoreMap":14},[94,112437,112438,112440],{"class":96,"line":97},[94,112439,101260],{"class":1944},[94,112441,112442],{"class":209}," ch7_reacher.py\n",[40,112444,110421],{},[85,112446,112448],{"className":23804,"code":112447,"language":23806,"meta":14,"style":14},"python ch7_reacher.py\n",[91,112449,112450],{"__ignoreMap":14},[94,112451,112452,112454],{"class":96,"line":97},[94,112453,30363],{"class":1944},[94,112455,112442],{"class":209},[65,112457,101549],{"id":101549},[40,112459,112460],{},"读取 site 坐标：",[85,112462,112464],{"className":30361,"code":112463,"language":30363,"meta":14,"style":14},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[91,112465,112466],{"__ignoreMap":14},[94,112467,112468,112470,112472,112474,112476],{"class":96,"line":97},[94,112469,31930],{"class":100},[94,112471,111833],{"class":1944},[94,112473,111836],{"class":104},[94,112475,1280],{"class":153},[94,112477,111841],{"class":104},[40,112479,112480],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[40,112482,110437],{},[85,112484,112486],{"className":30361,"code":112485,"language":30363,"meta":14,"style":14},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[91,112487,112488],{"__ignoreMap":14},[94,112489,112490,112492],{"class":96,"line":97},[94,112491,17028],{"class":100},[94,112493,111945],{"class":104},[40,112495,112496],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[40,112498,109762],{},[85,112500,112502],{"className":30361,"code":112501,"language":30363,"meta":14,"style":14},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[91,112503,112504,112516,112529],{"__ignoreMap":14},[94,112505,112506,112508,112510,112512,112514],{"class":96,"line":97},[94,112507,111573],{"class":104},[94,112509,150],{"class":100},[94,112511,111578],{"class":104},[94,112513,637],{"class":100},[94,112515,111583],{"class":104},[94,112517,112518,112521,112523,112525,112527],{"class":96,"line":15},[94,112519,112520],{"class":104},"control_cost ",[94,112522,150],{"class":100},[94,112524,112014],{"class":153},[94,112526,6500],{"class":100},[94,112528,112019],{"class":104},[94,112530,112531,112533,112535,112537,112539,112541,112543],{"class":96,"line":1160},[94,112532,17028],{"class":100},[94,112534,109774],{"class":153},[94,112536,105],{"class":104},[94,112538,637],{"class":100},[94,112540,111573],{"class":104},[94,112542,637],{"class":100},[94,112544,112036],{"class":104},[40,112546,112547],{},"奖励由两部分组成：",[48,112549,112550,112555],{},[51,112551,112552,112554],{},[91,112553,111600],{},"：末端离目标越远，奖励越低。",[51,112556,112557,112560],{},[91,112558,112559],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[40,112562,112563],{},"简单控制器：",[85,112565,112567],{"className":30361,"code":112566,"language":30363,"meta":14,"style":14},"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",[91,112568,112569,112582,112614],{"__ignoreMap":14},[94,112570,112571,112574,112576,112578,112580],{"class":96,"line":97},[94,112572,112573],{"class":104},"error ",[94,112575,150],{"class":100},[94,112577,112145],{"class":104},[94,112579,637],{"class":100},[94,112581,112150],{"class":104},[94,112583,112584,112586,112588,112590,112592,112594,112596,112598,112600,112602,112604,112606,112608,112610,112612],{"class":96,"line":15},[94,112585,105848],{"class":104},[94,112587,296],{"class":153},[94,112589,4424],{"class":104},[94,112591,150],{"class":100},[94,112593,112167],{"class":104},[94,112595,105237],{"class":153},[94,112597,6500],{"class":100},[94,112599,112174],{"class":104},[94,112601,182],{"class":153},[94,112603,112179],{"class":104},[94,112605,637],{"class":100},[94,112607,102380],{"class":153},[94,112609,12417],{"class":104},[94,112611,102380],{"class":153},[94,112613,111],{"class":104},[94,112615,112616,112618,112620,112622,112624,112626,112628,112630,112632,112634,112636,112638,112640,112642,112644],{"class":96,"line":1160},[94,112617,105848],{"class":104},[94,112619,322],{"class":153},[94,112621,4424],{"class":104},[94,112623,150],{"class":100},[94,112625,112167],{"class":104},[94,112627,105237],{"class":153},[94,112629,6500],{"class":100},[94,112631,112174],{"class":104},[94,112633,296],{"class":153},[94,112635,112179],{"class":104},[94,112637,637],{"class":100},[94,112639,102380],{"class":153},[94,112641,12417],{"class":104},[94,112643,102380],{"class":153},[94,112645,111],{"class":104},[40,112647,112648],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[65,112650,101685],{"id":101685},[85,112652,112653],{"className":30361,"code":112463,"language":30363,"meta":14,"style":14},[91,112654,112655],{"__ignoreMap":14},[94,112656,112657,112659,112661,112663,112665],{"class":96,"line":97},[94,112658,31930],{"class":100},[94,112660,111833],{"class":1944},[94,112662,111836],{"class":104},[94,112664,1280],{"class":153},[94,112666,111841],{"class":104},[40,112668,112669,112670,112672,112673,82516,112675,28368],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[91,112671,79787],{}," 是 site 的名字，比如 ",[91,112674,111513],{},[91,112676,111936],{},[85,112678,112680],{"className":30361,"code":112679,"language":30363,"meta":14,"style":14},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[91,112681,112682],{"__ignoreMap":14},[94,112683,112684,112686,112688],{"class":96,"line":97},[94,112685,103611],{"class":104},[94,112687,150],{"class":100},[94,112689,111850],{"class":104},[40,112691,112692],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[85,112694,112696],{"className":30361,"code":112695,"language":30363,"meta":14,"style":14},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[91,112697,112698,112710],{"__ignoreMap":14},[94,112699,112700,112702,112704,112706,112708],{"class":96,"line":97},[94,112701,1512],{"class":100},[94,112703,103426],{"class":104},[94,112705,1015],{"class":100},[94,112707,4074],{"class":153},[94,112709,3720],{"class":104},[94,112711,112712,112714,112716,112718,112720,112722,112724,112726,112728,112730],{"class":96,"line":15},[94,112713,103872],{"class":100},[94,112715,103412],{"class":153},[94,112717,105],{"class":104},[94,112719,157],{"class":100},[94,112721,111875],{"class":209},[94,112723,1001],{"class":153},[94,112725,79787],{"class":104},[94,112727,1051],{"class":153},[94,112729,356],{"class":209},[94,112731,111],{"class":104},[40,112733,112734,112735,112738,112739,112741],{},"如果 site 没找到，就主动报错。",[91,112736,112737],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[91,112740,79787],{}," 的值放进字符串里。",[85,112743,112745],{"className":30361,"code":112744,"language":30363,"meta":14,"style":14},"return data.site_xpos[site_id].copy()\n",[91,112746,112747],{"__ignoreMap":14},[94,112748,112749,112751],{"class":96,"line":97},[94,112750,17028],{"class":100},[94,112752,111892],{"class":104},[40,112754,112755,112756,112758,112759,112762],{},"返回这个 site 的世界坐标。",[91,112757,103657],{}," 里的每一行都是一个 site 的 ",[91,112760,112761],{},"(x, y, z)"," 坐标。",[85,112764,112766],{"className":30361,"code":112765,"language":30363,"meta":14,"style":14},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[91,112767,112768],{"__ignoreMap":14},[94,112769,112770,112772,112774],{"class":96,"line":97},[94,112771,31930],{"class":100},[94,112773,111907],{"class":1944},[94,112775,111910],{"class":104},[40,112777,112778],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[85,112780,112782],{"className":30361,"code":112781,"language":30363,"meta":14,"style":14},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[91,112783,112784,112796],{"__ignoreMap":14},[94,112785,112786,112788,112790,112792,112794],{"class":96,"line":97},[94,112787,111545],{"class":104},[94,112789,150],{"class":100},[94,112791,111920],{"class":104},[94,112793,111513],{"class":209},[94,112795,111],{"class":104},[94,112797,112798,112800,112802,112804,112806],{"class":96,"line":15},[94,112799,111555],{"class":104},[94,112801,150],{"class":100},[94,112803,111920],{"class":104},[94,112805,111936],{"class":209},[94,112807,111],{"class":104},[40,112809,112810],{},"分别读取末端点和目标点的世界坐标。",[85,112812,112813],{"className":30361,"code":112485,"language":30363,"meta":14,"style":14},[91,112814,112815],{"__ignoreMap":14},[94,112816,112817,112819],{"class":96,"line":97},[94,112818,17028],{"class":100},[94,112820,111945],{"class":104},[40,112822,112823],{},"把四部分拼成一个观测数组：",[85,112825,112828],{"className":112826,"code":112827,"language":5169,"meta":14},[5167],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[91,112829,112827],{"__ignoreMap":14},[85,112831,112833],{"className":30361,"code":112832,"language":30363,"meta":14,"style":14},"dist = np.linalg.norm(tip - target)\n",[91,112834,112835],{"__ignoreMap":14},[94,112836,112837,112839,112841,112843,112845],{"class":96,"line":97},[94,112838,111573],{"class":104},[94,112840,150],{"class":100},[94,112842,111578],{"class":104},[94,112844,637],{"class":100},[94,112846,111583],{"class":104},[40,112848,112849,112850,112853,112854,112857],{},"计算 tip 到 target 的距离。",[91,112851,112852],{},"tip - target"," 得到一个三维向量，",[91,112855,112856],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[40,112859,14615],{},[85,112861,112864],{"className":112862,"code":112863,"language":5169,"meta":14},[5167],"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",[91,112865,112863],{"__ignoreMap":14},[85,112867,112869],{"className":30361,"code":112868,"language":30363,"meta":14,"style":14},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[91,112870,112871],{"__ignoreMap":14},[94,112872,112873,112875,112877,112879,112881],{"class":96,"line":97},[94,112874,112520],{"class":104},[94,112876,150],{"class":100},[94,112878,112014],{"class":153},[94,112880,6500],{"class":100},[94,112882,112019],{"class":104},[40,112884,112885,112886,112889,112890,112893],{},"计算动作惩罚。",[91,112887,112888],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[91,112891,112892],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[85,112895,112897],{"className":30361,"code":112896,"language":30363,"meta":14,"style":14},"return float(-dist - control_cost)\n",[91,112898,112899],{"__ignoreMap":14},[94,112900,112901,112903,112905,112907,112909,112911,112913],{"class":96,"line":97},[94,112902,17028],{"class":100},[94,112904,109774],{"class":153},[94,112906,105],{"class":104},[94,112908,637],{"class":100},[94,112910,111573],{"class":104},[94,112912,637],{"class":100},[94,112914,112036],{"class":104},[40,112916,112917],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[85,112919,112920],{"className":30361,"code":110780,"language":30363,"meta":14,"style":14},[91,112921,112922],{"__ignoreMap":14},[94,112923,112924,112926,112928],{"class":96,"line":97},[94,112925,110787],{"class":104},[94,112927,150],{"class":100},[94,112929,104738],{"class":153},[40,112931,112932],{},"累计奖励变量，记录整个运行过程的总分。",[85,112934,112936],{"className":30361,"code":112935,"language":30363,"meta":14,"style":14},"for step in range(500):\n",[91,112937,112938],{"__ignoreMap":14},[94,112939,112940,112942,112944,112946,112948,112950,112952],{"class":96,"line":97},[94,112941,3006],{"class":100},[94,112943,31599],{"class":104},[94,112945,26026],{"class":100},[94,112947,32426],{"class":153},[94,112949,105],{"class":104},[94,112951,65051],{"class":153},[94,112953,30769],{"class":104},[40,112955,112956],{},"运行 500 个控制步。",[85,112958,112959],{"className":30361,"code":104520,"language":30363,"meta":14,"style":14},[91,112960,112961],{"__ignoreMap":14},[94,112962,112963],{"class":96,"line":97},[94,112964,104520],{"class":104},[40,112966,112967,112968,100995,112970,112972],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[91,112969,103208],{},[91,112971,103211],{}," 是当前状态下的坐标。",[85,112974,112976],{"className":30361,"code":112975,"language":30363,"meta":14,"style":14},"error = target - tip\n",[91,112977,112978],{"__ignoreMap":14},[94,112979,112980,112982,112984,112986,112988],{"class":96,"line":97},[94,112981,112573],{"class":104},[94,112983,150],{"class":100},[94,112985,112145],{"class":104},[94,112987,637],{"class":100},[94,112989,112150],{"class":104},[40,112991,112992],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[85,112994,112996],{"className":30361,"code":112995,"language":30363,"meta":14,"style":14},"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",[91,112997,112998,113030],{"__ignoreMap":14},[94,112999,113000,113002,113004,113006,113008,113010,113012,113014,113016,113018,113020,113022,113024,113026,113028],{"class":96,"line":97},[94,113001,105848],{"class":104},[94,113003,296],{"class":153},[94,113005,4424],{"class":104},[94,113007,150],{"class":100},[94,113009,112167],{"class":104},[94,113011,105237],{"class":153},[94,113013,6500],{"class":100},[94,113015,112174],{"class":104},[94,113017,182],{"class":153},[94,113019,112179],{"class":104},[94,113021,637],{"class":100},[94,113023,102380],{"class":153},[94,113025,12417],{"class":104},[94,113027,102380],{"class":153},[94,113029,111],{"class":104},[94,113031,113032,113034,113036,113038,113040,113042,113044,113046,113048,113050,113052,113054,113056,113058,113060],{"class":96,"line":15},[94,113033,105848],{"class":104},[94,113035,322],{"class":153},[94,113037,4424],{"class":104},[94,113039,150],{"class":100},[94,113041,112167],{"class":104},[94,113043,105237],{"class":153},[94,113045,6500],{"class":100},[94,113047,112174],{"class":104},[94,113049,296],{"class":153},[94,113051,112179],{"class":104},[94,113053,637],{"class":100},[94,113055,102380],{"class":153},[94,113057,12417],{"class":104},[94,113059,102380],{"class":153},[94,113061,111],{"class":104},[40,113063,113064,113065,113068],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[91,113066,113067],{},"error -> ctrl -> step"," 的流程。",[85,113070,113071],{"className":30361,"code":104482,"language":30363,"meta":14,"style":14},[91,113072,113073],{"__ignoreMap":14},[94,113074,113075],{"class":96,"line":97},[94,113076,104482],{"class":104},[40,113078,113079],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[85,113081,113083],{"className":30361,"code":113082,"language":30363,"meta":14,"style":14},"obs = get_obs(model, data)\n",[91,113084,113085],{"__ignoreMap":14},[94,113086,113087,113089,113091],{"class":96,"line":97},[94,113088,110831],{"class":104},[94,113090,150],{"class":100},[94,113092,112268],{"class":104},[40,113094,113095,113096,113099],{},"读取最新观测。后面打印 ",[91,113097,113098],{},"obs.shape[0]","，用来确认观测维度是 10。",[35,113101,102293],{"id":102292},[40,113103,113104],{},"观测维度为:",[85,113106,113109],{"className":113107,"code":113108,"language":5169,"meta":14},[5167],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[91,113110,113108],{"__ignoreMap":14},[40,113112,113113],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[40,113115,113116],{},"程序每 100 步打印：",[85,113118,113121],{"className":113119,"code":113120,"language":5169,"meta":14},[5167],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[91,113122,113120],{"__ignoreMap":14},[40,113124,113125,113126,113128],{},"如果控制有效，你应该看到最终 ",[91,113127,103208],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[35,113130,102325],{"id":102324},[48,113132,113133,113136,113139,113145,113151,113158,113168],{},[51,113134,113135],{},"修改目标点位置。",[51,113137,113138],{},"重新运行，观察最终 tip 是否变化。",[51,113140,113141,113142,113144],{},"把 gravity 改成 ",[91,113143,102566],{},"，观察控制是否变差。",[51,113146,111158,113147,111162,113149,28368],{},[91,113148,102135],{},[91,113150,182],{},[51,113152,102388,113153,102391,113155,113157],{},[91,113154,110573],{},[91,113156,107284],{},"，观察机械臂是否更难移动。",[51,113159,102388,113160,82507,113162,102391,113164,113167],{},[91,113161,103211],{},[91,113163,104123],{},[91,113165,113166],{},"0.2 0 0.6","，观察 reward 和 final tip。",[51,113169,113170],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[35,113172,102430],{"id":102429},[65,113174,113176],{"id":113175},"site-not-found",[91,113177,113178],{},"site not found",[40,113180,113181,113182,100995,113185,28368],{},"检查 XML 中是否有 ",[91,113183,113184],{},"site name=\"tip\"",[91,113186,113187],{},"site name=\"target\"",[65,113189,113190],{"id":113190},"机械臂完全不动",[40,113192,102500],{},[48,113194,113195,113200,113203,113208],{},[51,113196,113197,113199],{},[91,113198,102135],{}," 是否为 2",[51,113201,113202],{},"actuator 是否引用正确 joint",[51,113204,113205,113207],{},[91,113206,101053],{}," 是否被赋值",[51,113209,113210,113211],{},"是否执行了 ",[91,113212,100662],{},[65,113214,113215],{"id":113215},"控制效果不好",[40,113217,113218],{},"正常。本章重点不是控制器最优，而是任务结构:",[85,113220,113223],{"className":113221,"code":113222,"language":5169,"meta":14},[5167],"obs → action → mj_step → reward → next_obs\n",[91,113224,113222],{"__ignoreMap":14},[65,113226,113228],{"id":113227},"tip-坐标不变化","tip 坐标不变化",[40,113230,102552],{},[48,113232,113233,113238,113246,113255],{},[51,113234,113235,113236,28368],{},"是否每步调用了 ",[91,113237,100662],{},[51,113239,113240,113241,100995,113243,28368],{},"是否写入了 ",[91,113242,106103],{},[91,113244,113245],{},"data.ctrl[1]",[51,113247,113248,113249,317,113252,28368],{},"actuator 是否正确引用 ",[91,113250,113251],{},"joint1",[91,113253,113254],{},"joint2",[51,113256,113257],{},"控制输入是否太小。",[65,113259,113260],{"id":113260},"目标点不会动",[40,113262,113263],{},"本章的 target 是固定 site：",[85,113265,113267],{"className":53044,"code":113266,"language":53046,"meta":14,"style":14},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[91,113268,113269],{"__ignoreMap":14},[94,113270,113271,113273,113275,113277,113279,113281,113283,113285,113288],{"class":96,"line":97},[94,113272,1015],{"class":104},[94,113274,103187],{"class":51277},[94,113276,14902],{"class":1944},[94,113278,150],{"class":104},[94,113280,111936],{"class":209},[94,113282,101083],{"class":1944},[94,113284,150],{"class":104},[94,113286,113287],{"class":209},"\"0.5 0 0.4\"",[94,113289,113290],{"class":104}," ...\u002F>\n",[40,113292,113293,113294,113296],{},"它直接挂在 ",[91,113295,101818],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[65,113298,113299],{"id":113299},"机械臂不像真实机械臂",[40,113301,113302],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[35,113304,102584],{"id":102583},[40,113306,113307],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[40,113309,113310],{},"核心公式：",[85,113312,113315],{"className":113313,"code":113314,"language":5169,"meta":14},[5167],"distance = ||tip - target||\nreward = -distance - action_cost\n",[91,113316,113314],{"__ignoreMap":14},[40,113318,113319],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5108,113321,113322],{},"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":14,"searchDepth":15,"depth":15,"links":113324},[113325,113326,113327,113332,113336,113337,113338,113346],{"id":100623,"depth":15,"text":100624},{"id":100746,"depth":15,"text":100747},{"id":101021,"depth":15,"text":101022,"children":113328},[113329,113330,113331],{"id":111528,"depth":1160,"text":111529},{"id":111604,"depth":1160,"text":111604},{"id":111634,"depth":1160,"text":111635},{"id":101229,"depth":15,"text":101230,"children":113333},[113334,113335],{"id":101549,"depth":1160,"text":101549},{"id":101685,"depth":1160,"text":101685},{"id":102292,"depth":15,"text":102293},{"id":102324,"depth":15,"text":102325},{"id":102429,"depth":15,"text":102430,"children":113339},[113340,113341,113342,113343,113344,113345],{"id":113175,"depth":1160,"text":113178},{"id":113190,"depth":1160,"text":113190},{"id":113215,"depth":1160,"text":113215},{"id":113227,"depth":1160,"text":113228},{"id":113260,"depth":1160,"text":113260},{"id":113299,"depth":1160,"text":113299},{"id":102583,"depth":15,"text":102584},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111332,"description":14},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113353,"title":113354,"body":113355,"description":14,"extension":18,"meta":116817,"navigation":20,"path":116818,"seo":116819,"stem":116820,"__hash__":116821},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113356,"toc":116788},[113357,113360,113362,113365,113368,113393,113396,113402,113405,113411,113413,113415,113439,113441,113459,113461,113504,113506,113533,113535,113538,113590,113593,113599,113608,113611,113649,113652,113691,113694,113702,113709,113712,113718,113720,113774,113781,113826,113829,113833,113849,113859,113861,115122,115124,115136,115138,115149,115151,115154,115175,115178,115181,115214,115220,115223,115256,115259,115262,115303,115308,115322,115325,115338,115343,115366,115368,115383,115393,115408,115415,115435,115450,115468,115471,115488,115496,115512,115518,115550,115563,115595,115605,115640,115654,115700,115714,115756,115767,115780,115786,115819,115822,115849,115859,115899,115909,115926,115933,115951,115954,115995,116008,116023,116026,116049,116052,116064,116067,116086,116091,116112,116115,116130,116133,116167,116179,116194,116197,116222,116225,116244,116247,116279,116282,116306,116312,116342,116349,116362,116365,116367,116369,116375,116378,116381,116393,116396,116398,116452,116454,116458,116464,116473,116476,116483,116485,116508,116511,116515,116517,116535,116541,116543,116576,116579,116585,116589,116592,116612,116617,116621,116628,116648,116653,116657,116660,116680,116683,116769,116773,116776,116782,116785],[10,113358,113354],{"id":113359},"_8gymnasium-风格强化学习接口基础",[35,113361,100624],{"id":100623},[40,113363,113364],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[40,113366,113367],{},"你将实现:",[85,113369,113371],{"className":30361,"code":113370,"language":30363,"meta":14,"style":14},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[91,113372,113373,113383],{"__ignoreMap":14},[94,113374,113375,113378,113380],{"class":96,"line":97},[94,113376,113377],{"class":104},"obs, info ",[94,113379,150],{"class":100},[94,113381,113382],{"class":104}," env.reset()\n",[94,113384,113385,113388,113390],{"class":96,"line":15},[94,113386,113387],{"class":104},"obs, reward, terminated, truncated, info ",[94,113389,150],{"class":100},[94,113391,113392],{"class":104}," env.step(action)\n",[40,113394,113395],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[40,113397,113398,113399,113401],{},"前面章节的代码都是“脚本式”的：在 ",[91,113400,102272],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[40,113403,113404],{},"可以先记住 Gymnasium 环境的核心交互：",[85,113406,113409],{"className":113407,"code":113408,"language":5169,"meta":14},[5167],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[91,113410,113408],{"__ignoreMap":14},[35,113412,100747],{"id":100746},[40,113414,100750],{},[85,113416,113417],{"className":23804,"code":104365,"language":23806,"meta":14,"style":14},[91,113418,113419],{"__ignoreMap":14},[94,113420,113421,113423,113425,113427,113429,113431,113433,113435,113437],{"class":96,"line":97},[94,113422,24559],{"class":1944},[94,113424,26298],{"class":209},[94,113426,23816],{"class":209},[94,113428,26383],{"class":153},[94,113430,104380],{"class":209},[94,113432,100775],{"class":209},[94,113434,102478],{"class":209},[94,113436,100791],{"class":209},[94,113438,104389],{"class":209},[40,113440,102796],{},[85,113442,113444],{"className":23804,"code":113443,"language":23806,"meta":14,"style":14},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[91,113445,113446],{"__ignoreMap":14},[94,113447,113448,113450,113452,113454,113456],{"class":96,"line":97},[94,113449,23813],{"class":1944},[94,113451,23816],{"class":209},[94,113453,100907],{"class":209},[94,113455,107688],{"class":209},[94,113457,113458],{"class":209}," gymnasium\n",[40,113460,102813],{},[85,113462,113464],{"className":23804,"code":113463,"language":23806,"meta":14,"style":14},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[91,113465,113466,113483,113492],{"__ignoreMap":14},[94,113467,113468,113470,113472,113474,113477,113479,113481],{"class":96,"line":97},[94,113469,30313],{"class":1944},[94,113471,29159],{"class":209},[94,113473,25098],{"class":153},[94,113475,113476],{"class":209}," mujoco-gym-api",[94,113478,100952],{"class":209},[94,113480,100955],{"class":153},[94,113482,100958],{"class":153},[94,113484,113485,113487,113489],{"class":96,"line":15},[94,113486,30313],{"class":1944},[94,113488,100965],{"class":209},[94,113490,113491],{"class":209}," mujoco-gym-api\n",[94,113493,113494,113496,113498,113500,113502],{"class":96,"line":1160},[94,113495,23813],{"class":1944},[94,113497,23816],{"class":209},[94,113499,100907],{"class":209},[94,113501,107688],{"class":209},[94,113503,113458],{"class":209},[40,113505,100981],{},[48,113507,113508,113518,113521,113527],{},[51,113509,113510,113511,113514,113515,28368],{},"本章使用 ",[91,113512,113513],{},"gymnasium","，不是旧版 ",[91,113516,113517],{},"gym",[51,113519,113520],{},"Gymnasium API 与旧 Gym API 有差异。",[51,113522,113523,113524,28368],{},"旧 Gym 常见返回值是 4 个: ",[91,113525,113526],{},"obs, reward, done, info",[51,113528,113529,113530,28368],{},"Gymnasium 返回值是 5 个: ",[91,113531,113532],{},"obs, reward, terminated, truncated, info",[35,113534,101022],{"id":101021},[40,113536,113537],{},"强化学习环境接口包含:",[242,113539,113540,113549],{},[245,113541,113542],{},[248,113543,113544,113547],{},[251,113545,113546],{"align":23718},"方法",[251,113548,102673],{"align":23718},[289,113550,113551,113561,113571,113581],{},[248,113552,113553,113558],{},[294,113554,113555],{"align":23718},[91,113556,113557],{},"reset()",[294,113559,113560],{"align":23718},"重置环境",[248,113562,113563,113568],{},[294,113564,113565],{"align":23718},[91,113566,113567],{},"step(action)",[294,113569,113570],{"align":23718},"执行动作",[248,113572,113573,113578],{},[294,113574,113575],{"align":23718},[91,113576,113577],{},"observation_space",[294,113579,113580],{"align":23718},"观测空间",[248,113582,113583,113588],{},[294,113584,113585],{"align":23718},[91,113586,113587],{},"action_space",[294,113589,23636],{"align":23718},[40,113591,113592],{},"一个最小环境需要完成:",[85,113594,113597],{"className":113595,"code":113596,"language":5169,"meta":14},[5167],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[91,113598,113596],{"__ignoreMap":14},[65,113600,113602,100995,113605,104615],{"id":113601},"terminated-和-truncated-的区别",[91,113603,113604],{},"terminated",[91,113606,113607],{},"truncated",[40,113609,113610],{},"Gymnasium 把“结束”拆成两个概念：",[242,113612,113613,113623],{},[245,113614,113615],{},[248,113616,113617,113619,113621],{},[251,113618,104551],{"align":23718},[251,113620,100677],{"align":23718},[251,113622,21169],{"align":23718},[289,113624,113625,113637],{},[248,113626,113627,113631,113634],{},[294,113628,113629],{"align":23718},[91,113630,113604],{},[294,113632,113633],{"align":23718},"任务自然结束",[294,113635,113636],{"align":23718},"机械臂到达目标、机器人摔倒",[248,113638,113639,113643,113646],{},[294,113640,113641],{"align":23718},[91,113642,113607],{},[294,113644,113645],{"align":23718},"因外部限制截断",[294,113647,113648],{"align":23718},"达到最大步数、时间限制",[40,113650,113651],{},"本章中：",[85,113653,113655],{"className":30361,"code":113654,"language":30363,"meta":14,"style":14},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[91,113656,113657,113672],{"__ignoreMap":14},[94,113658,113659,113662,113664,113667,113669],{"class":96,"line":97},[94,113660,113661],{"class":104},"terminated ",[94,113663,150],{"class":100},[94,113665,113666],{"class":104}," dist ",[94,113668,1015],{"class":100},[94,113670,113671],{"class":153}," 0.05\n",[94,113673,113674,113677,113679,113681,113684,113686,113688],{"class":96,"line":15},[94,113675,113676],{"class":104},"truncated ",[94,113678,150],{"class":100},[94,113680,38856],{"class":153},[94,113682,113683],{"class":104},".steps ",[94,113685,1691],{"class":100},[94,113687,38856],{"class":153},[94,113689,113690],{"class":104},".max_steps\n",[40,113692,113693],{},"也就是：",[48,113695,113696,113699],{},[51,113697,113698],{},"末端距离目标小于 0.05，任务成功结束。",[51,113700,113701],{},"步数超过上限，episode 被截断。",[65,113703,113705,100995,113707],{"id":113704},"observation_space-和-action_space",[91,113706,113577],{},[91,113708,113587],{},[40,113710,113711],{},"这两个对象告诉算法：",[85,113713,113716],{"className":113714,"code":113715,"language":5169,"meta":14},[5167],"观测长什么样\n动作允许多大\n",[91,113717,113715],{"__ignoreMap":14},[40,113719,14615],{},[85,113721,113723],{"className":30361,"code":113722,"language":30363,"meta":14,"style":14},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[91,113724,113725],{"__ignoreMap":14},[94,113726,113727,113729,113732,113734,113737,113740,113743,113745,113747,113750,113752,113754,113756,113758,113760,113762,113764,113767,113769,113771],{"class":96,"line":97},[94,113728,30806],{"class":153},[94,113730,113731],{"class":104},".action_space ",[94,113733,150],{"class":100},[94,113735,113736],{"class":104}," spaces.Box(",[94,113738,113739],{"class":5198},"low",[94,113741,113742],{"class":100},"=-",[94,113744,102380],{"class":153},[94,113746,12417],{"class":104},[94,113748,113749],{"class":5198},"high",[94,113751,150],{"class":100},[94,113753,102380],{"class":153},[94,113755,12417],{"class":104},[94,113757,95940],{"class":5198},[94,113759,150],{"class":100},[94,113761,105],{"class":104},[94,113763,182],{"class":153},[94,113765,113766],{"class":104},",), ",[94,113768,93477],{"class":5198},[94,113770,150],{"class":100},[94,113772,113773],{"class":104},"np.float32)\n",[40,113775,113776,113777,113780],{},"表示动作是 2 维数组，每个值都在 ",[91,113778,113779],{},"[-1, 1]"," 范围内。",[85,113782,113784],{"className":30361,"code":113783,"language":30363,"meta":14,"style":14},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[91,113785,113786],{"__ignoreMap":14},[94,113787,113788,113790,113793,113795,113797,113799,113801,113804,113806,113808,113810,113812,113814,113816,113818,113820,113822,113824],{"class":96,"line":97},[94,113789,30806],{"class":153},[94,113791,113792],{"class":104},".observation_space ",[94,113794,150],{"class":100},[94,113796,113736],{"class":104},[94,113798,113739],{"class":5198},[94,113800,113742],{"class":100},[94,113802,113803],{"class":104},"np.inf, ",[94,113805,113749],{"class":5198},[94,113807,150],{"class":100},[94,113809,113803],{"class":104},[94,113811,95940],{"class":5198},[94,113813,150],{"class":100},[94,113815,105],{"class":104},[94,113817,551],{"class":153},[94,113819,113766],{"class":104},[94,113821,93477],{"class":5198},[94,113823,150],{"class":100},[94,113825,113773],{"class":104},[40,113827,113828],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[65,113830,113832],{"id":113831},"frame_skip-是什么","frame_skip 是什么",[85,113834,113836],{"className":30361,"code":113835,"language":30363,"meta":14,"style":14},"self.frame_skip = 5\n",[91,113837,113838],{"__ignoreMap":14},[94,113839,113840,113842,113845,113847],{"class":96,"line":97},[94,113841,30806],{"class":153},[94,113843,113844],{"class":104},".frame_skip ",[94,113846,150],{"class":100},[94,113848,54404],{"class":153},[40,113850,113851,113852,113855,113856,113858],{},"表示外部调用一次 ",[91,113853,113854],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[91,113857,101192],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[35,113860,101230],{"id":101229},[85,113862,113864],{"className":30361,"code":113863,"language":30363,"meta":14,"style":14},"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",[91,113865,113866,113878,113884,113894,113905,113909,113913,113921,113926,113930,113934,113938,113942,113946,113950,113954,113959,113963,113967,113971,113976,113980,113984,113988,113992,113996,114000,114004,114008,114012,114016,114020,114024,114028,114046,114061,114065,114078,114088,114103,114120,114124,114145,114164,114189,114203,114207,114217,114229,114239,114243,114285,114323,114327,114337,114353,114368,114387,114394,114398,114411,114426,114441,114454,114473,114489,114493,114534,114549,114564,114568,114607,114618,114631,114635,114645,114654,114658,114668,114683,114701,114705,114716,114733,114746,114750,114760,114764,114775,114786,114790,114804,114818,114834,114838,114851,114868,114883,114890,114894,114898,114910,114920,114938,114950,114962,114966,114974,114990,114999,115008,115016,115058,115071,115076,115080,115098,115102,115106,115118],{"__ignoreMap":14},[94,113867,113868,113870,113873,113875],{"class":96,"line":97},[94,113869,30375],{"class":100},[94,113871,113872],{"class":104}," gymnasium ",[94,113874,31366],{"class":100},[94,113876,113877],{"class":104}," gym\n",[94,113879,113880,113882],{"class":96,"line":15},[94,113881,30375],{"class":100},[94,113883,101278],{"class":104},[94,113885,113886,113888,113890,113892],{"class":96,"line":1160},[94,113887,30375],{"class":100},[94,113889,31363],{"class":104},[94,113891,31366],{"class":100},[94,113893,31369],{"class":104},[94,113895,113896,113898,113900,113902],{"class":96,"line":1175},[94,113897,30720],{"class":100},[94,113899,113872],{"class":104},[94,113901,30375],{"class":100},[94,113903,113904],{"class":104}," spaces\n",[94,113906,113907],{"class":96,"line":1181},[94,113908,2381],{"emptyLinePlaceholder":20},[94,113910,113911],{"class":96,"line":1195},[94,113912,2381],{"emptyLinePlaceholder":20},[94,113914,113915,113917,113919],{"class":96,"line":1201},[94,113916,101291],{"class":153},[94,113918,13546],{"class":100},[94,113920,101296],{"class":209},[94,113922,113923],{"class":96,"line":1292},[94,113924,113925],{"class":209},"\u003Cmujoco model=\"gym_reacher\">\n",[94,113927,113928],{"class":96,"line":1298},[94,113929,111715],{"class":209},[94,113931,113932],{"class":96,"line":1310},[94,113933,2381],{"emptyLinePlaceholder":20},[94,113935,113936],{"class":96,"line":1593},[94,113937,101315],{"class":209},[94,113939,113940],{"class":96,"line":1598},[94,113941,111733],{"class":209},[94,113943,113944],{"class":96,"line":1604},[94,113945,2381],{"emptyLinePlaceholder":20},[94,113947,113948],{"class":96,"line":1609},[94,113949,111742],{"class":209},[94,113951,113952],{"class":96,"line":1623},[94,113953,111747],{"class":209},[94,113955,113956],{"class":96,"line":1628},[94,113957,113958],{"class":209},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[94,113960,113961],{"class":96,"line":1634},[94,113962,2381],{"emptyLinePlaceholder":20},[94,113964,113965],{"class":96,"line":1655},[94,113966,111761],{"class":209},[94,113968,113969],{"class":96,"line":1660},[94,113970,111766],{"class":209},[94,113972,113973],{"class":96,"line":1674},[94,113974,113975],{"class":209},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[94,113977,113978],{"class":96,"line":1679},[94,113979,111776],{"class":209},[94,113981,113982],{"class":96,"line":1708},[94,113983,106415],{"class":209},[94,113985,113986],{"class":96,"line":1713},[94,113987,101344],{"class":209},[94,113989,113990],{"class":96,"line":1730},[94,113991,101349],{"class":209},[94,113993,113994],{"class":96,"line":1735},[94,113995,2381],{"emptyLinePlaceholder":20},[94,113997,113998],{"class":96,"line":1740},[94,113999,106432],{"class":209},[94,114001,114002],{"class":96,"line":1745},[94,114003,111801],{"class":209},[94,114005,114006],{"class":96,"line":1759},[94,114007,111806],{"class":209},[94,114009,114010],{"class":96,"line":1764},[94,114011,106442],{"class":209},[94,114013,114014],{"class":96,"line":2558},[94,114015,101354],{"class":209},[94,114017,114018],{"class":96,"line":2572},[94,114019,95675],{"class":209},[94,114021,114022],{"class":96,"line":2580},[94,114023,2381],{"emptyLinePlaceholder":20},[94,114025,114026],{"class":96,"line":2585},[94,114027,2381],{"emptyLinePlaceholder":20},[94,114029,114030,114032,114035,114037,114039,114041,114044],{"class":96,"line":2591},[94,114031,14676],{"class":100},[94,114033,114034],{"class":1944}," ReacherEnv",[94,114036,105],{"class":104},[94,114038,113517],{"class":1944},[94,114040,663],{"class":104},[94,114042,114043],{"class":1944},"Env",[94,114045,30769],{"class":104},[94,114047,114048,114051,114053,114055,114058],{"class":96,"line":2597},[94,114049,114050],{"class":104},"    metadata ",[94,114052,150],{"class":100},[94,114054,4429],{"class":104},[94,114056,114057],{"class":209},"\"render_modes\"",[94,114059,114060],{"class":104},": []}\n",[94,114062,114063],{"class":96,"line":2602},[94,114064,2381],{"emptyLinePlaceholder":20},[94,114066,114067,114069,114071,114074,114076],{"class":96,"line":7930},[94,114068,30784],{"class":100},[94,114070,30787],{"class":153},[94,114072,114073],{"class":104},"(self) -> ",[94,114075,95663],{"class":153},[94,114077,3720],{"class":104},[94,114079,114080,114082,114084,114086],{"class":96,"line":7954},[94,114081,30800],{"class":153},[94,114083,17243],{"class":104},[94,114085,30812],{"class":153},[94,114087,1957],{"class":104},[94,114089,114090,114092,114095,114097,114099,114101],{"class":96,"line":7959},[94,114091,30828],{"class":153},[94,114093,114094],{"class":104},".model ",[94,114096,150],{"class":100},[94,114098,101389],{"class":104},[94,114100,101291],{"class":153},[94,114102,111],{"class":104},[94,114104,114105,114107,114110,114112,114115,114117],{"class":96,"line":7965},[94,114106,30828],{"class":153},[94,114108,114109],{"class":104},".data ",[94,114111,150],{"class":100},[94,114113,114114],{"class":104}," mujoco.MjData(",[94,114116,30806],{"class":153},[94,114118,114119],{"class":104},".model)\n",[94,114121,114122],{"class":96,"line":7992},[94,114123,2381],{"emptyLinePlaceholder":20},[94,114125,114126,114128,114131,114133,114136,114138,114141,114143],{"class":96,"line":7997},[94,114127,30828],{"class":153},[94,114129,114130],{"class":104},".tip_site_id ",[94,114132,150],{"class":100},[94,114134,114135],{"class":104}," mujoco.mj_name2id(",[94,114137,30806],{"class":153},[94,114139,114140],{"class":104},".model, mujoco.mjtObj.mjOBJ_SITE, ",[94,114142,111513],{"class":209},[94,114144,111],{"class":104},[94,114146,114147,114149,114152,114154,114156,114158,114160,114162],{"class":96,"line":8003},[94,114148,30828],{"class":153},[94,114150,114151],{"class":104},".target_site_id ",[94,114153,150],{"class":100},[94,114155,114135],{"class":104},[94,114157,30806],{"class":153},[94,114159,114140],{"class":104},[94,114161,111936],{"class":209},[94,114163,111],{"class":104},[94,114165,114166,114168,114170,114172,114174,114176,114179,114181,114183,114185,114187],{"class":96,"line":8015},[94,114167,2478],{"class":100},[94,114169,38856],{"class":153},[94,114171,114130],{"class":104},[94,114173,1015],{"class":100},[94,114175,4074],{"class":153},[94,114177,114178],{"class":100}," or",[94,114180,38856],{"class":153},[94,114182,114151],{"class":104},[94,114184,1015],{"class":100},[94,114186,4074],{"class":153},[94,114188,3720],{"class":104},[94,114190,114191,114194,114196,114198,114201],{"class":96,"line":8027},[94,114192,114193],{"class":100},"            raise",[94,114195,103412],{"class":153},[94,114197,105],{"class":104},[94,114199,114200],{"class":209},"\"required sites not found\"",[94,114202,111],{"class":104},[94,114204,114205],{"class":96,"line":8039},[94,114206,2381],{"emptyLinePlaceholder":20},[94,114208,114209,114211,114213,114215],{"class":96,"line":9698},[94,114210,30828],{"class":153},[94,114212,113844],{"class":104},[94,114214,150],{"class":100},[94,114216,54404],{"class":153},[94,114218,114219,114221,114224,114226],{"class":96,"line":9723},[94,114220,30828],{"class":153},[94,114222,114223],{"class":104},".max_steps ",[94,114225,150],{"class":100},[94,114227,114228],{"class":153}," 200\n",[94,114230,114231,114233,114235,114237],{"class":96,"line":9746},[94,114232,30828],{"class":153},[94,114234,113683],{"class":104},[94,114236,150],{"class":100},[94,114238,47316],{"class":153},[94,114240,114241],{"class":96,"line":9770},[94,114242,2381],{"emptyLinePlaceholder":20},[94,114244,114245,114247,114249,114251,114253,114255,114257,114259,114261,114263,114265,114267,114269,114271,114273,114275,114277,114279,114281,114283],{"class":96,"line":9775},[94,114246,30828],{"class":153},[94,114248,113731],{"class":104},[94,114250,150],{"class":100},[94,114252,113736],{"class":104},[94,114254,113739],{"class":5198},[94,114256,113742],{"class":100},[94,114258,102380],{"class":153},[94,114260,12417],{"class":104},[94,114262,113749],{"class":5198},[94,114264,150],{"class":100},[94,114266,102380],{"class":153},[94,114268,12417],{"class":104},[94,114270,95940],{"class":5198},[94,114272,150],{"class":100},[94,114274,105],{"class":104},[94,114276,182],{"class":153},[94,114278,113766],{"class":104},[94,114280,93477],{"class":5198},[94,114282,150],{"class":100},[94,114284,113773],{"class":104},[94,114286,114287,114289,114291,114293,114295,114297,114299,114301,114303,114305,114307,114309,114311,114313,114315,114317,114319,114321],{"class":96,"line":9780},[94,114288,30828],{"class":153},[94,114290,113792],{"class":104},[94,114292,150],{"class":100},[94,114294,113736],{"class":104},[94,114296,113739],{"class":5198},[94,114298,113742],{"class":100},[94,114300,113803],{"class":104},[94,114302,113749],{"class":5198},[94,114304,150],{"class":100},[94,114306,113803],{"class":104},[94,114308,95940],{"class":5198},[94,114310,150],{"class":100},[94,114312,105],{"class":104},[94,114314,551],{"class":153},[94,114316,113766],{"class":104},[94,114318,93477],{"class":5198},[94,114320,150],{"class":100},[94,114322,113773],{"class":104},[94,114324,114325],{"class":96,"line":9785},[94,114326,2381],{"emptyLinePlaceholder":20},[94,114328,114329,114331,114334],{"class":96,"line":9794},[94,114330,30784],{"class":100},[94,114332,114333],{"class":1944}," _get_obs",[94,114335,114336],{"class":104},"(self) -> np.ndarray:\n",[94,114338,114339,114341,114343,114345,114348,114350],{"class":96,"line":9799},[94,114340,112114],{"class":104},[94,114342,150],{"class":100},[94,114344,38856],{"class":153},[94,114346,114347],{"class":104},".data.site_xpos[",[94,114349,30806],{"class":153},[94,114351,114352],{"class":104},".tip_site_id].copy()\n",[94,114354,114355,114357,114359,114361,114363,114365],{"class":96,"line":9805},[94,114356,112127],{"class":104},[94,114358,150],{"class":100},[94,114360,38856],{"class":153},[94,114362,114347],{"class":104},[94,114364,30806],{"class":153},[94,114366,114367],{"class":104},".target_site_id].copy()\n",[94,114369,114370,114372,114374,114377,114379,114382,114384],{"class":96,"line":9826},[94,114371,110159],{"class":104},[94,114373,150],{"class":100},[94,114375,114376],{"class":104}," np.concatenate([",[94,114378,30806],{"class":153},[94,114380,114381],{"class":104},".data.qpos.copy(), ",[94,114383,30806],{"class":153},[94,114385,114386],{"class":104},".data.qvel.copy(), tip, target])\n",[94,114388,114389,114391],{"class":96,"line":9832},[94,114390,14734],{"class":100},[94,114392,114393],{"class":104}," obs.astype(np.float32)\n",[94,114395,114396],{"class":96,"line":9846},[94,114397,2381],{"emptyLinePlaceholder":20},[94,114399,114400,114402,114405,114407,114409],{"class":96,"line":9852},[94,114401,30784],{"class":100},[94,114403,114404],{"class":1944}," _get_reward",[94,114406,114073],{"class":104},[94,114408,144],{"class":153},[94,114410,3720],{"class":104},[94,114412,114413,114415,114417,114419,114421,114423],{"class":96,"line":9879},[94,114414,112114],{"class":104},[94,114416,150],{"class":100},[94,114418,38856],{"class":153},[94,114420,114347],{"class":104},[94,114422,30806],{"class":153},[94,114424,114425],{"class":104},".tip_site_id]\n",[94,114427,114428,114430,114432,114434,114436,114438],{"class":96,"line":9888},[94,114429,112127],{"class":104},[94,114431,150],{"class":100},[94,114433,38856],{"class":153},[94,114435,114347],{"class":104},[94,114437,30806],{"class":153},[94,114439,114440],{"class":104},".target_site_id]\n",[94,114442,114443,114446,114448,114450,114452],{"class":96,"line":9894},[94,114444,114445],{"class":104},"        dist ",[94,114447,150],{"class":100},[94,114449,111578],{"class":104},[94,114451,637],{"class":100},[94,114453,111583],{"class":104},[94,114455,114456,114459,114461,114463,114465,114468,114470],{"class":96,"line":9902},[94,114457,114458],{"class":104},"        control_cost ",[94,114460,150],{"class":100},[94,114462,112014],{"class":153},[94,114464,6500],{"class":100},[94,114466,114467],{"class":104}," np.sum(np.square(",[94,114469,30806],{"class":153},[94,114471,114472],{"class":104},".data.ctrl))\n",[94,114474,114475,114477,114479,114481,114483,114485,114487],{"class":96,"line":9907},[94,114476,14734],{"class":100},[94,114478,109774],{"class":153},[94,114480,105],{"class":104},[94,114482,637],{"class":100},[94,114484,111573],{"class":104},[94,114486,637],{"class":100},[94,114488,112036],{"class":104},[94,114490,114491],{"class":96,"line":16586},[94,114492,2381],{"emptyLinePlaceholder":20},[94,114494,114495,114497,114500,114503,114505,114508,114510,114512,114514,114516,114518,114521,114524,114526,114528,114530,114532],{"class":96,"line":16592},[94,114496,30784],{"class":100},[94,114498,114499],{"class":1944}," reset",[94,114501,114502],{"class":104},"(self, ",[94,114504,560],{"class":100},[94,114506,114507],{"class":104},", seed: ",[94,114509,108],{"class":153},[94,114511,25092],{"class":100},[94,114513,38916],{"class":153},[94,114515,13546],{"class":100},[94,114517,38916],{"class":153},[94,114519,114520],{"class":104},", options: ",[94,114522,114523],{"class":153},"dict",[94,114525,25092],{"class":100},[94,114527,38916],{"class":153},[94,114529,13546],{"class":100},[94,114531,38916],{"class":153},[94,114533,30769],{"class":104},[94,114535,114536,114538,114541,114544,114546],{"class":96,"line":16615},[94,114537,30800],{"class":153},[94,114539,114540],{"class":104},"().reset(",[94,114542,114543],{"class":5198},"seed",[94,114545,150],{"class":100},[94,114547,114548],{"class":104},"seed)\n",[94,114550,114551,114554,114556,114559,114561],{"class":96,"line":16621},[94,114552,114553],{"class":104},"        mujoco.mj_resetData(",[94,114555,30806],{"class":153},[94,114557,114558],{"class":104},".model, ",[94,114560,30806],{"class":153},[94,114562,114563],{"class":104},".data)\n",[94,114565,114566],{"class":96,"line":16644},[94,114567,2381],{"emptyLinePlaceholder":20},[94,114569,114570,114572,114575,114577,114579,114582,114584,114586,114588,114590,114592,114594,114596,114598,114600,114602,114604],{"class":96,"line":16658},[94,114571,30828],{"class":153},[94,114573,114574],{"class":104},".data.qpos[:] ",[94,114576,150],{"class":100},[94,114578,38856],{"class":153},[94,114580,114581],{"class":104},".np_random.uniform(",[94,114583,113739],{"class":5198},[94,114585,113742],{"class":100},[94,114587,86187],{"class":153},[94,114589,12417],{"class":104},[94,114591,113749],{"class":5198},[94,114593,150],{"class":100},[94,114595,86187],{"class":153},[94,114597,12417],{"class":104},[94,114599,31479],{"class":5198},[94,114601,150],{"class":100},[94,114603,30806],{"class":153},[94,114605,114606],{"class":104},".model.nq)\n",[94,114608,114609,114611,114614,114616],{"class":96,"line":16678},[94,114610,30828],{"class":153},[94,114612,114613],{"class":104},".data.qvel[:] ",[94,114615,150],{"class":100},[94,114617,104738],{"class":153},[94,114619,114620,114623,114625,114627,114629],{"class":96,"line":16684},[94,114621,114622],{"class":104},"        mujoco.mj_forward(",[94,114624,30806],{"class":153},[94,114626,114558],{"class":104},[94,114628,30806],{"class":153},[94,114630,114563],{"class":104},[94,114632,114633],{"class":96,"line":16695},[94,114634,2381],{"emptyLinePlaceholder":20},[94,114636,114637,114639,114641,114643],{"class":96,"line":16718},[94,114638,30828],{"class":153},[94,114640,113683],{"class":104},[94,114642,150],{"class":100},[94,114644,47316],{"class":153},[94,114646,114647,114649,114651],{"class":96,"line":16740},[94,114648,14734],{"class":100},[94,114650,38856],{"class":153},[94,114652,114653],{"class":104},"._get_obs(), {}\n",[94,114655,114656],{"class":96,"line":16745},[94,114657,2381],{"emptyLinePlaceholder":20},[94,114659,114660,114662,114665],{"class":96,"line":16751},[94,114661,30784],{"class":100},[94,114663,114664],{"class":1944}," step",[94,114666,114667],{"class":104},"(self, action):\n",[94,114669,114670,114672,114674,114677,114679,114681],{"class":96,"line":16765},[94,114671,110199],{"class":104},[94,114673,150],{"class":100},[94,114675,114676],{"class":104}," np.asarray(action, ",[94,114678,93477],{"class":5198},[94,114680,150],{"class":100},[94,114682,113773],{"class":104},[94,114684,114685,114687,114689,114691,114693,114696,114698],{"class":96,"line":16778},[94,114686,110199],{"class":104},[94,114688,150],{"class":100},[94,114690,107424],{"class":104},[94,114692,30806],{"class":153},[94,114694,114695],{"class":104},".action_space.low, ",[94,114697,30806],{"class":153},[94,114699,114700],{"class":104},".action_space.high)\n",[94,114702,114703],{"class":96,"line":16783},[94,114704,2381],{"emptyLinePlaceholder":20},[94,114706,114707,114709,114712,114714],{"class":96,"line":16797},[94,114708,30828],{"class":153},[94,114710,114711],{"class":104},".data.ctrl[:] ",[94,114713,150],{"class":100},[94,114715,107447],{"class":104},[94,114717,114718,114720,114722,114724,114726,114728,114730],{"class":96,"line":16802},[94,114719,3384],{"class":100},[94,114721,101478],{"class":104},[94,114723,26026],{"class":100},[94,114725,32426],{"class":153},[94,114727,105],{"class":104},[94,114729,30806],{"class":153},[94,114731,114732],{"class":104},".frame_skip):\n",[94,114734,114735,114738,114740,114742,114744],{"class":96,"line":16808},[94,114736,114737],{"class":104},"            mujoco.mj_step(",[94,114739,30806],{"class":153},[94,114741,114558],{"class":104},[94,114743,30806],{"class":153},[94,114745,114563],{"class":104},[94,114747,114748],{"class":96,"line":16813},[94,114749,2381],{"emptyLinePlaceholder":20},[94,114751,114752,114754,114756,114758],{"class":96,"line":16827},[94,114753,30828],{"class":153},[94,114755,113683],{"class":104},[94,114757,9459],{"class":100},[94,114759,55676],{"class":153},[94,114761,114762],{"class":96,"line":16832},[94,114763,2381],{"emptyLinePlaceholder":20},[94,114765,114766,114768,114770,114772],{"class":96,"line":16837},[94,114767,110159],{"class":104},[94,114769,150],{"class":100},[94,114771,38856],{"class":153},[94,114773,114774],{"class":104},"._get_obs()\n",[94,114776,114777,114779,114781,114783],{"class":96,"line":16851},[94,114778,110264],{"class":104},[94,114780,150],{"class":100},[94,114782,38856],{"class":153},[94,114784,114785],{"class":104},"._get_reward()\n",[94,114787,114788],{"class":96,"line":16863},[94,114789,2381],{"emptyLinePlaceholder":20},[94,114791,114792,114794,114796,114798,114800,114802],{"class":96,"line":16868},[94,114793,112114],{"class":104},[94,114795,150],{"class":100},[94,114797,38856],{"class":153},[94,114799,114347],{"class":104},[94,114801,30806],{"class":153},[94,114803,114425],{"class":104},[94,114805,114806,114808,114810,114812,114814,114816],{"class":96,"line":16881},[94,114807,112127],{"class":104},[94,114809,150],{"class":100},[94,114811,38856],{"class":153},[94,114813,114347],{"class":104},[94,114815,30806],{"class":153},[94,114817,114440],{"class":104},[94,114819,114820,114822,114824,114826,114829,114831],{"class":96,"line":16886},[94,114821,114445],{"class":104},[94,114823,150],{"class":100},[94,114825,109774],{"class":153},[94,114827,114828],{"class":104},"(np.linalg.norm(tip ",[94,114830,637],{"class":100},[94,114832,114833],{"class":104}," target))\n",[94,114835,114836],{"class":96,"line":16891},[94,114837,2381],{"emptyLinePlaceholder":20},[94,114839,114840,114843,114845,114847,114849],{"class":96,"line":16896},[94,114841,114842],{"class":104},"        terminated ",[94,114844,150],{"class":100},[94,114846,113666],{"class":104},[94,114848,1015],{"class":100},[94,114850,113671],{"class":153},[94,114852,114853,114856,114858,114860,114862,114864,114866],{"class":96,"line":16909},[94,114854,114855],{"class":104},"        truncated ",[94,114857,150],{"class":100},[94,114859,38856],{"class":153},[94,114861,113683],{"class":104},[94,114863,1691],{"class":100},[94,114865,38856],{"class":153},[94,114867,113690],{"class":104},[94,114869,114870,114873,114875,114877,114880],{"class":96,"line":16914},[94,114871,114872],{"class":104},"        info ",[94,114874,150],{"class":100},[94,114876,4429],{"class":104},[94,114878,114879],{"class":209},"\"distance\"",[94,114881,114882],{"class":104},": dist}\n",[94,114884,114885,114887],{"class":96,"line":32616},[94,114886,14734],{"class":100},[94,114888,114889],{"class":104}," obs, reward, terminated, truncated, info\n",[94,114891,114892],{"class":96,"line":32622},[94,114893,2381],{"emptyLinePlaceholder":20},[94,114895,114896],{"class":96,"line":32628},[94,114897,2381],{"emptyLinePlaceholder":20},[94,114899,114900,114902,114904,114906,114908],{"class":96,"line":32634},[94,114901,31930],{"class":100},[94,114903,1954],{"class":1944},[94,114905,101375],{"class":104},[94,114907,95663],{"class":153},[94,114909,3720],{"class":104},[94,114911,114912,114915,114917],{"class":96,"line":32640},[94,114913,114914],{"class":104},"    env ",[94,114916,150],{"class":100},[94,114918,114919],{"class":104}," ReacherEnv()\n",[94,114921,114922,114925,114927,114930,114932,114934,114936],{"class":96,"line":32651},[94,114923,114924],{"class":104},"    obs, info ",[94,114926,150],{"class":100},[94,114928,114929],{"class":104}," env.reset(",[94,114931,114543],{"class":5198},[94,114933,150],{"class":100},[94,114935,296],{"class":153},[94,114937,111],{"class":104},[94,114939,114940,114942,114944,114947],{"class":96,"line":32657},[94,114941,31282],{"class":153},[94,114943,105],{"class":104},[94,114945,114946],{"class":209},"\"initial obs shape:\"",[94,114948,114949],{"class":104},", obs.shape)\n",[94,114951,114952,114954,114956,114959],{"class":96,"line":32677},[94,114953,31282],{"class":153},[94,114955,105],{"class":104},[94,114957,114958],{"class":209},"\"initial info:\"",[94,114960,114961],{"class":104},", info)\n",[94,114963,114964],{"class":96,"line":32683},[94,114965,2381],{"emptyLinePlaceholder":20},[94,114967,114968,114970,114972],{"class":96,"line":32694},[94,114969,110130],{"class":104},[94,114971,150],{"class":100},[94,114973,104738],{"class":153},[94,114975,114976,114978,114980,114982,114984,114986,114988],{"class":96,"line":32700},[94,114977,3182],{"class":100},[94,114979,31599],{"class":104},[94,114981,26026],{"class":100},[94,114983,32426],{"class":153},[94,114985,105],{"class":104},[94,114987,805],{"class":153},[94,114989,30769],{"class":104},[94,114991,114992,114994,114996],{"class":96,"line":32706},[94,114993,110199],{"class":104},[94,114995,150],{"class":100},[94,114997,114998],{"class":104}," env.action_space.sample()\n",[94,115000,115001,115004,115006],{"class":96,"line":32712},[94,115002,115003],{"class":104},"        obs, reward, terminated, truncated, info ",[94,115005,150],{"class":100},[94,115007,113392],{"class":104},[94,115009,115010,115012,115014],{"class":96,"line":32718},[94,115011,110274],{"class":104},[94,115013,9459],{"class":100},[94,115015,110279],{"class":104},[94,115017,115018,115020,115022,115024,115026,115029,115031,115033,115036,115038,115040,115043,115045,115047,115050,115052,115054,115056],{"class":96,"line":32724},[94,115019,32434],{"class":153},[94,115021,105],{"class":104},[94,115023,110308],{"class":209},[94,115025,110311],{"class":104},[94,115027,115028],{"class":209},"\"reward:\"",[94,115030,12417],{"class":104},[94,115032,32001],{"class":153},[94,115034,115035],{"class":104},"(reward, ",[94,115037,176],{"class":153},[94,115039,110322],{"class":104},[94,115041,115042],{"class":209},"\"distance:\"",[94,115044,12417],{"class":104},[94,115046,32001],{"class":153},[94,115048,115049],{"class":104},"(info[",[94,115051,114879],{"class":209},[94,115053,112179],{"class":104},[94,115055,176],{"class":153},[94,115057,30480],{"class":104},[94,115059,115060,115062,115065,115068],{"class":96,"line":32730},[94,115061,2478],{"class":100},[94,115063,115064],{"class":104}," terminated ",[94,115066,115067],{"class":100},"or",[94,115069,115070],{"class":104}," truncated:\n",[94,115072,115073],{"class":96,"line":32736},[94,115074,115075],{"class":100},"            break\n",[94,115077,115078],{"class":96,"line":32756},[94,115079,2381],{"emptyLinePlaceholder":20},[94,115081,115082,115084,115086,115088,115090,115092,115094,115096],{"class":96,"line":32762},[94,115083,31282],{"class":153},[94,115085,105],{"class":104},[94,115087,110353],{"class":209},[94,115089,12417],{"class":104},[94,115091,32001],{"class":153},[94,115093,110360],{"class":104},[94,115095,176],{"class":153},[94,115097,30480],{"class":104},[94,115099,115100],{"class":96,"line":32778},[94,115101,2381],{"emptyLinePlaceholder":20},[94,115103,115104],{"class":96,"line":32784},[94,115105,2381],{"emptyLinePlaceholder":20},[94,115107,115108,115110,115112,115114,115116],{"class":96,"line":32798},[94,115109,1512],{"class":100},[94,115111,31203],{"class":153},[94,115113,101536],{"class":100},[94,115115,101539],{"class":209},[94,115117,3720],{"class":104},[94,115119,115120],{"class":96,"line":32804},[94,115121,101546],{"class":104},[40,115123,103547],{},[85,115125,115127],{"className":23804,"code":115126,"language":23806,"meta":14,"style":14},"touch ch8_gym_env.py\n",[91,115128,115129],{"__ignoreMap":14},[94,115130,115131,115133],{"class":96,"line":97},[94,115132,101260],{"class":1944},[94,115134,115135],{"class":209}," ch8_gym_env.py\n",[40,115137,110421],{},[85,115139,115141],{"className":23804,"code":115140,"language":23806,"meta":14,"style":14},"python ch8_gym_env.py\n",[91,115142,115143],{"__ignoreMap":14},[94,115144,115145,115147],{"class":96,"line":97},[94,115146,30363],{"class":1944},[94,115148,115135],{"class":209},[65,115150,101549],{"id":101549},[40,115152,115153],{},"继承 Gymnasium 环境：",[85,115155,115157],{"className":30361,"code":115156,"language":30363,"meta":14,"style":14},"class ReacherEnv(gym.Env):\n",[91,115158,115159],{"__ignoreMap":14},[94,115160,115161,115163,115165,115167,115169,115171,115173],{"class":96,"line":97},[94,115162,14676],{"class":100},[94,115164,114034],{"class":1944},[94,115166,105],{"class":104},[94,115168,113517],{"class":1944},[94,115170,663],{"class":104},[94,115172,114043],{"class":1944},[94,115174,30769],{"class":104},[40,115176,115177],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[40,115179,115180],{},"初始化模型：",[85,115182,115184],{"className":30361,"code":115183,"language":30363,"meta":14,"style":14},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[91,115185,115186,115200],{"__ignoreMap":14},[94,115187,115188,115190,115192,115194,115196,115198],{"class":96,"line":97},[94,115189,30806],{"class":153},[94,115191,114094],{"class":104},[94,115193,150],{"class":100},[94,115195,101389],{"class":104},[94,115197,101291],{"class":153},[94,115199,111],{"class":104},[94,115201,115202,115204,115206,115208,115210,115212],{"class":96,"line":15},[94,115203,30806],{"class":153},[94,115205,114109],{"class":104},[94,115207,150],{"class":100},[94,115209,114114],{"class":104},[94,115211,30806],{"class":153},[94,115213,114119],{"class":104},[40,115215,115216,115217,115219],{},"这和前面章节一样，只是现在放到了类的 ",[91,115218,30812],{}," 里。",[40,115221,115222],{},"缓存 site ID：",[85,115224,115226],{"className":30361,"code":115225,"language":30363,"meta":14,"style":14},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[91,115227,115228,115242],{"__ignoreMap":14},[94,115229,115230,115232,115234,115236,115238,115240],{"class":96,"line":97},[94,115231,30806],{"class":153},[94,115233,114130],{"class":104},[94,115235,150],{"class":100},[94,115237,114135],{"class":104},[94,115239,89531],{"class":153},[94,115241,111],{"class":104},[94,115243,115244,115246,115248,115250,115252,115254],{"class":96,"line":15},[94,115245,30806],{"class":153},[94,115247,114151],{"class":104},[94,115249,150],{"class":100},[94,115251,114135],{"class":104},[94,115253,89531],{"class":153},[94,115255,111],{"class":104},[40,115257,115258],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[40,115260,115261],{},"reset：",[85,115263,115265],{"className":30361,"code":115264,"language":30363,"meta":14,"style":14},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[91,115266,115267],{"__ignoreMap":14},[94,115268,115269,115271,115273,115275,115277,115279,115281,115283,115285,115287,115289,115291,115293,115295,115297,115299,115301],{"class":96,"line":97},[94,115270,31930],{"class":100},[94,115272,114499],{"class":1944},[94,115274,114502],{"class":104},[94,115276,560],{"class":100},[94,115278,114507],{"class":104},[94,115280,108],{"class":153},[94,115282,25092],{"class":100},[94,115284,38916],{"class":153},[94,115286,13546],{"class":100},[94,115288,38916],{"class":153},[94,115290,114520],{"class":104},[94,115292,114523],{"class":153},[94,115294,25092],{"class":100},[94,115296,38916],{"class":153},[94,115298,13546],{"class":100},[94,115300,38916],{"class":153},[94,115302,30769],{"class":104},[40,115304,115305,115307],{},[91,115306,70033],{}," 做四件事：",[48,115309,115310,115313,115316,115319],{},[51,115311,115312],{},"设置随机种子。",[51,115314,115315],{},"重置 MuJoCo data。",[51,115317,115318],{},"随机初始化关节角。",[51,115320,115321],{},"返回初始观测和 info。",[40,115323,115324],{},"step：",[85,115326,115328],{"className":30361,"code":115327,"language":30363,"meta":14,"style":14},"def step(self, action):\n",[91,115329,115330],{"__ignoreMap":14},[94,115331,115332,115334,115336],{"class":96,"line":97},[94,115333,31930],{"class":100},[94,115335,114664],{"class":1944},[94,115337,114667],{"class":104},[40,115339,115340,115342],{},[91,115341,107111],{}," 做六件事：",[48,115344,115345,115348,115354,115357,115360,115363],{},[51,115346,115347],{},"检查并裁剪 action。",[51,115349,115350,115351,28368],{},"写入 ",[91,115352,115353],{},"self.data.ctrl",[51,115355,115356],{},"连续推进若干个 MuJoCo 物理步。",[51,115358,115359],{},"计算新观测。",[51,115361,115362],{},"计算奖励和结束条件。",[51,115364,115365],{},"返回 Gymnasium 标准五元组。",[65,115367,101685],{"id":101685},[85,115369,115371],{"className":30361,"code":115370,"language":30363,"meta":14,"style":14},"import gymnasium as gym\n",[91,115372,115373],{"__ignoreMap":14},[94,115374,115375,115377,115379,115381],{"class":96,"line":97},[94,115376,30375],{"class":100},[94,115378,113872],{"class":104},[94,115380,31366],{"class":100},[94,115382,113877],{"class":104},[40,115384,115385,115386,115388,115389,115392],{},"导入 Gymnasium，并起别名 ",[91,115387,113517],{},"。后面写 ",[91,115390,115391],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[85,115394,115396],{"className":30361,"code":115395,"language":30363,"meta":14,"style":14},"from gymnasium import spaces\n",[91,115397,115398],{"__ignoreMap":14},[94,115399,115400,115402,115404,115406],{"class":96,"line":97},[94,115401,30720],{"class":100},[94,115403,113872],{"class":104},[94,115405,30375],{"class":100},[94,115407,113904],{"class":104},[40,115409,115410,115411,115414],{},"导入空间定义工具。",[91,115412,115413],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[85,115416,115417],{"className":30361,"code":115156,"language":30363,"meta":14,"style":14},[91,115418,115419],{"__ignoreMap":14},[94,115420,115421,115423,115425,115427,115429,115431,115433],{"class":96,"line":97},[94,115422,14676],{"class":100},[94,115424,114034],{"class":1944},[94,115426,105],{"class":104},[94,115428,113517],{"class":1944},[94,115430,663],{"class":104},[94,115432,114043],{"class":1944},[94,115434,30769],{"class":104},[40,115436,115437,115438,115441,115442,115444,115445,100995,115447,115449],{},"定义一个类，名字叫 ",[91,115439,115440],{},"ReacherEnv","。括号里的 ",[91,115443,115391],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[91,115446,70033],{},[91,115448,107111],{}," 这两个核心方法。",[85,115451,115453],{"className":30361,"code":115452,"language":30363,"meta":14,"style":14},"metadata = {\"render_modes\": []}\n",[91,115454,115455],{"__ignoreMap":14},[94,115456,115457,115460,115462,115464,115466],{"class":96,"line":97},[94,115458,115459],{"class":104},"metadata ",[94,115461,150],{"class":100},[94,115463,4429],{"class":104},[94,115465,114057],{"class":209},[94,115467,114060],{"class":104},[40,115469,115470],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[85,115472,115474],{"className":30361,"code":115473,"language":30363,"meta":14,"style":14},"def __init__(self) -> None:\n",[91,115475,115476],{"__ignoreMap":14},[94,115477,115478,115480,115482,115484,115486],{"class":96,"line":97},[94,115479,31930],{"class":100},[94,115481,30787],{"class":153},[94,115483,114073],{"class":104},[94,115485,95663],{"class":153},[94,115487,3720],{"class":104},[40,115489,115490,115492,115493,28368],{},[91,115491,30812],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[91,115494,115495],{},"env = ReacherEnv()",[85,115497,115499],{"className":30361,"code":115498,"language":30363,"meta":14,"style":14},"super().__init__()\n",[91,115500,115501],{"__ignoreMap":14},[94,115502,115503,115506,115508,115510],{"class":96,"line":97},[94,115504,115505],{"class":153},"super",[94,115507,17243],{"class":104},[94,115509,30812],{"class":153},[94,115511,1957],{"class":104},[40,115513,115514,115515,115517],{},"调用父类 ",[91,115516,115391],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[85,115519,115520],{"className":30361,"code":115183,"language":30363,"meta":14,"style":14},[91,115521,115522,115536],{"__ignoreMap":14},[94,115523,115524,115526,115528,115530,115532,115534],{"class":96,"line":97},[94,115525,30806],{"class":153},[94,115527,114094],{"class":104},[94,115529,150],{"class":100},[94,115531,101389],{"class":104},[94,115533,101291],{"class":153},[94,115535,111],{"class":104},[94,115537,115538,115540,115542,115544,115546,115548],{"class":96,"line":15},[94,115539,30806],{"class":153},[94,115541,114109],{"class":104},[94,115543,150],{"class":100},[94,115545,114114],{"class":104},[94,115547,30806],{"class":153},[94,115549,114119],{"class":104},[40,115551,115552,115553,115555,115556,100995,115559,115562],{},"把 MuJoCo 模型和状态保存到 ",[91,115554,30806],{}," 上。",[91,115557,115558],{},"self.model",[91,115560,115561],{},"self.data"," 表示这个环境对象自己的模型和状态。",[85,115564,115565],{"className":30361,"code":115225,"language":30363,"meta":14,"style":14},[91,115566,115567,115581],{"__ignoreMap":14},[94,115568,115569,115571,115573,115575,115577,115579],{"class":96,"line":97},[94,115570,30806],{"class":153},[94,115572,114130],{"class":104},[94,115574,150],{"class":100},[94,115576,114135],{"class":104},[94,115578,89531],{"class":153},[94,115580,111],{"class":104},[94,115582,115583,115585,115587,115589,115591,115593],{"class":96,"line":15},[94,115584,30806],{"class":153},[94,115586,114151],{"class":104},[94,115588,150],{"class":100},[94,115590,114135],{"class":104},[94,115592,89531],{"class":153},[94,115594,111],{"class":104},[40,115596,115597,115598,100995,115601,115604],{},"提前查好 tip 和 target 的 site ID。这样 ",[91,115599,115600],{},"_get_obs",[91,115602,115603],{},"_get_reward"," 里就不用每次按名字查找。",[85,115606,115608],{"className":30361,"code":115607,"language":30363,"meta":14,"style":14},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[91,115609,115610,115620,115630],{"__ignoreMap":14},[94,115611,115612,115614,115616,115618],{"class":96,"line":97},[94,115613,30806],{"class":153},[94,115615,113844],{"class":104},[94,115617,150],{"class":100},[94,115619,54404],{"class":153},[94,115621,115622,115624,115626,115628],{"class":96,"line":15},[94,115623,30806],{"class":153},[94,115625,114223],{"class":104},[94,115627,150],{"class":100},[94,115629,114228],{"class":153},[94,115631,115632,115634,115636,115638],{"class":96,"line":1160},[94,115633,30806],{"class":153},[94,115635,113683],{"class":104},[94,115637,150],{"class":100},[94,115639,47316],{"class":153},[40,115641,115642,115645,115646,115649,115650,115653],{},[91,115643,115644],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[91,115647,115648],{},"max_steps"," 是一个 episode 最多运行多少步。",[91,115651,115652],{},"steps"," 记录当前 episode 已经走了多少步。",[85,115655,115656],{"className":30361,"code":113722,"language":30363,"meta":14,"style":14},[91,115657,115658],{"__ignoreMap":14},[94,115659,115660,115662,115664,115666,115668,115670,115672,115674,115676,115678,115680,115682,115684,115686,115688,115690,115692,115694,115696,115698],{"class":96,"line":97},[94,115661,30806],{"class":153},[94,115663,113731],{"class":104},[94,115665,150],{"class":100},[94,115667,113736],{"class":104},[94,115669,113739],{"class":5198},[94,115671,113742],{"class":100},[94,115673,102380],{"class":153},[94,115675,12417],{"class":104},[94,115677,113749],{"class":5198},[94,115679,150],{"class":100},[94,115681,102380],{"class":153},[94,115683,12417],{"class":104},[94,115685,95940],{"class":5198},[94,115687,150],{"class":100},[94,115689,105],{"class":104},[94,115691,182],{"class":153},[94,115693,113766],{"class":104},[94,115695,93477],{"class":5198},[94,115697,150],{"class":100},[94,115699,113773],{"class":104},[40,115701,115702,115703,115706,115707,100995,115710,115713],{},"定义动作空间。",[91,115704,115705],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[91,115708,115709],{},"low=-1.0",[91,115711,115712],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[85,115715,115716],{"className":30361,"code":113783,"language":30363,"meta":14,"style":14},[91,115717,115718],{"__ignoreMap":14},[94,115719,115720,115722,115724,115726,115728,115730,115732,115734,115736,115738,115740,115742,115744,115746,115748,115750,115752,115754],{"class":96,"line":97},[94,115721,30806],{"class":153},[94,115723,113792],{"class":104},[94,115725,150],{"class":100},[94,115727,113736],{"class":104},[94,115729,113739],{"class":5198},[94,115731,113742],{"class":100},[94,115733,113803],{"class":104},[94,115735,113749],{"class":5198},[94,115737,150],{"class":100},[94,115739,113803],{"class":104},[94,115741,95940],{"class":5198},[94,115743,150],{"class":100},[94,115745,105],{"class":104},[94,115747,551],{"class":153},[94,115749,113766],{"class":104},[94,115751,93477],{"class":5198},[94,115753,150],{"class":100},[94,115755,113773],{"class":104},[40,115757,115758,115759,115762,115763,115766],{},"定义观测空间。",[91,115760,115761],{},"shape=(10,)"," 表示观测是 10 个数。",[91,115764,115765],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[85,115768,115770],{"className":30361,"code":115769,"language":30363,"meta":14,"style":14},"def _get_obs(self) -> np.ndarray:\n",[91,115771,115772],{"__ignoreMap":14},[94,115773,115774,115776,115778],{"class":96,"line":97},[94,115775,31930],{"class":100},[94,115777,114333],{"class":1944},[94,115779,114336],{"class":104},[40,115781,115782,115783,115785],{},"定义内部函数，用来生成观测。函数名前面的 ",[91,115784,1097],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[85,115787,115789],{"className":30361,"code":115788,"language":30363,"meta":14,"style":14},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[91,115790,115791,115805],{"__ignoreMap":14},[94,115792,115793,115795,115797,115799,115801,115803],{"class":96,"line":97},[94,115794,111545],{"class":104},[94,115796,150],{"class":100},[94,115798,38856],{"class":153},[94,115800,114347],{"class":104},[94,115802,30806],{"class":153},[94,115804,114352],{"class":104},[94,115806,115807,115809,115811,115813,115815,115817],{"class":96,"line":15},[94,115808,111555],{"class":104},[94,115810,150],{"class":100},[94,115812,38856],{"class":153},[94,115814,114347],{"class":104},[94,115816,30806],{"class":153},[94,115818,114367],{"class":104},[40,115820,115821],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[85,115823,115825],{"className":30361,"code":115824,"language":30363,"meta":14,"style":14},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[91,115826,115827,115843],{"__ignoreMap":14},[94,115828,115829,115831,115833,115835,115837,115839,115841],{"class":96,"line":97},[94,115830,110831],{"class":104},[94,115832,150],{"class":100},[94,115834,114376],{"class":104},[94,115836,30806],{"class":153},[94,115838,114381],{"class":104},[94,115840,30806],{"class":153},[94,115842,114386],{"class":104},[94,115844,115845,115847],{"class":96,"line":15},[94,115846,17028],{"class":100},[94,115848,114393],{"class":104},[40,115850,115851,115852,115855,115856,115858],{},"拼接观测，并转换成 ",[91,115853,115854],{},"float32","。很多强化学习库默认使用 ",[91,115857,115854],{},"，所以这里主动转换。",[85,115860,115861],{"className":30361,"code":115264,"language":30363,"meta":14,"style":14},[91,115862,115863],{"__ignoreMap":14},[94,115864,115865,115867,115869,115871,115873,115875,115877,115879,115881,115883,115885,115887,115889,115891,115893,115895,115897],{"class":96,"line":97},[94,115866,31930],{"class":100},[94,115868,114499],{"class":1944},[94,115870,114502],{"class":104},[94,115872,560],{"class":100},[94,115874,114507],{"class":104},[94,115876,108],{"class":153},[94,115878,25092],{"class":100},[94,115880,38916],{"class":153},[94,115882,13546],{"class":100},[94,115884,38916],{"class":153},[94,115886,114520],{"class":104},[94,115888,114523],{"class":153},[94,115890,25092],{"class":100},[94,115892,38916],{"class":153},[94,115894,13546],{"class":100},[94,115896,38916],{"class":153},[94,115898,30769],{"class":104},[40,115900,115901,115902,115904,115905,115908],{},"定义 reset。",[91,115903,114543],{}," 用来控制随机数，保证实验可以复现。",[91,115906,115907],{},"options"," 用来接收额外配置，本章暂时不用。",[85,115910,115912],{"className":30361,"code":115911,"language":30363,"meta":14,"style":14},"super().reset(seed=seed)\n",[91,115913,115914],{"__ignoreMap":14},[94,115915,115916,115918,115920,115922,115924],{"class":96,"line":97},[94,115917,115505],{"class":153},[94,115919,114540],{"class":104},[94,115921,114543],{"class":5198},[94,115923,150],{"class":100},[94,115925,114548],{"class":104},[40,115927,115928,115929,115932],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[91,115930,115931],{},"self.np_random"," 生成可复现的随机数。",[85,115934,115936],{"className":30361,"code":115935,"language":30363,"meta":14,"style":14},"mujoco.mj_resetData(self.model, self.data)\n",[91,115937,115938],{"__ignoreMap":14},[94,115939,115940,115943,115945,115947,115949],{"class":96,"line":97},[94,115941,115942],{"class":104},"mujoco.mj_resetData(",[94,115944,30806],{"class":153},[94,115946,114558],{"class":104},[94,115948,30806],{"class":153},[94,115950,114563],{"class":104},[40,115952,115953],{},"把 MuJoCo 状态重置到默认状态。",[85,115955,115957],{"className":30361,"code":115956,"language":30363,"meta":14,"style":14},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[91,115958,115959],{"__ignoreMap":14},[94,115960,115961,115963,115965,115967,115969,115971,115973,115975,115977,115979,115981,115983,115985,115987,115989,115991,115993],{"class":96,"line":97},[94,115962,30806],{"class":153},[94,115964,114574],{"class":104},[94,115966,150],{"class":100},[94,115968,38856],{"class":153},[94,115970,114581],{"class":104},[94,115972,113739],{"class":5198},[94,115974,113742],{"class":100},[94,115976,86187],{"class":153},[94,115978,12417],{"class":104},[94,115980,113749],{"class":5198},[94,115982,150],{"class":100},[94,115984,86187],{"class":153},[94,115986,12417],{"class":104},[94,115988,31479],{"class":5198},[94,115990,150],{"class":100},[94,115992,30806],{"class":153},[94,115994,114606],{"class":104},[40,115996,115318,115997,116000,116001,116004,116005,116007],{},[91,115998,115999],{},"[:]"," 表示修改整个数组。",[91,116002,116003],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[91,116006,102127],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[85,116009,116011],{"className":30361,"code":116010,"language":30363,"meta":14,"style":14},"self.data.qvel[:] = 0.0\n",[91,116012,116013],{"__ignoreMap":14},[94,116014,116015,116017,116019,116021],{"class":96,"line":97},[94,116016,30806],{"class":153},[94,116018,114613],{"class":104},[94,116020,150],{"class":100},[94,116022,104738],{"class":153},[40,116024,116025],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[85,116027,116029],{"className":30361,"code":116028,"language":30363,"meta":14,"style":14},"self.steps = 0\nreturn self._get_obs(), {}\n",[91,116030,116031,116041],{"__ignoreMap":14},[94,116032,116033,116035,116037,116039],{"class":96,"line":97},[94,116034,30806],{"class":153},[94,116036,113683],{"class":104},[94,116038,150],{"class":100},[94,116040,47316],{"class":153},[94,116042,116043,116045,116047],{"class":96,"line":15},[94,116044,17028],{"class":100},[94,116046,38856],{"class":153},[94,116048,114653],{"class":104},[40,116050,116051],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[85,116053,116054],{"className":30361,"code":115327,"language":30363,"meta":14,"style":14},[91,116055,116056],{"__ignoreMap":14},[94,116057,116058,116060,116062],{"class":96,"line":97},[94,116059,31930],{"class":100},[94,116061,114664],{"class":1944},[94,116063,114667],{"class":104},[40,116065,116066],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[85,116068,116070],{"className":30361,"code":116069,"language":30363,"meta":14,"style":14},"action = np.asarray(action, dtype=np.float32)\n",[91,116071,116072],{"__ignoreMap":14},[94,116073,116074,116076,116078,116080,116082,116084],{"class":96,"line":97},[94,116075,107419],{"class":104},[94,116077,150],{"class":100},[94,116079,114676],{"class":104},[94,116081,93477],{"class":5198},[94,116083,150],{"class":100},[94,116085,113773],{"class":104},[40,116087,116088,116089,28368],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[91,116090,115854],{},[85,116092,116094],{"className":30361,"code":116093,"language":30363,"meta":14,"style":14},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[91,116095,116096],{"__ignoreMap":14},[94,116097,116098,116100,116102,116104,116106,116108,116110],{"class":96,"line":97},[94,116099,107419],{"class":104},[94,116101,150],{"class":100},[94,116103,107424],{"class":104},[94,116105,30806],{"class":153},[94,116107,114695],{"class":104},[94,116109,30806],{"class":153},[94,116111,114700],{"class":104},[40,116113,116114],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[85,116116,116118],{"className":30361,"code":116117,"language":30363,"meta":14,"style":14},"self.data.ctrl[:] = action\n",[91,116119,116120],{"__ignoreMap":14},[94,116121,116122,116124,116126,116128],{"class":96,"line":97},[94,116123,30806],{"class":153},[94,116125,114711],{"class":104},[94,116127,150],{"class":100},[94,116129,107447],{"class":104},[40,116131,116132],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[85,116134,116136],{"className":30361,"code":116135,"language":30363,"meta":14,"style":14},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[91,116137,116138,116154],{"__ignoreMap":14},[94,116139,116140,116142,116144,116146,116148,116150,116152],{"class":96,"line":97},[94,116141,3006],{"class":100},[94,116143,101478],{"class":104},[94,116145,26026],{"class":100},[94,116147,32426],{"class":153},[94,116149,105],{"class":104},[94,116151,30806],{"class":153},[94,116153,114732],{"class":104},[94,116155,116156,116159,116161,116163,116165],{"class":96,"line":15},[94,116157,116158],{"class":104},"    mujoco.mj_step(",[94,116160,30806],{"class":153},[94,116162,114558],{"class":104},[94,116164,30806],{"class":153},[94,116166,114563],{"class":104},[40,116168,116169,116170,116173,116174,116176,116177,28368],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[91,116171,116172],{},"frame_skip=5","，所以外部调用一次 ",[91,116175,113854],{},"，内部实际执行 5 次 ",[91,116178,101192],{},[85,116180,116182],{"className":30361,"code":116181,"language":30363,"meta":14,"style":14},"self.steps += 1\n",[91,116183,116184],{"__ignoreMap":14},[94,116185,116186,116188,116190,116192],{"class":96,"line":97},[94,116187,30806],{"class":153},[94,116189,113683],{"class":104},[94,116191,9459],{"class":100},[94,116193,55676],{"class":153},[40,116195,116196],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[85,116198,116200],{"className":30361,"code":116199,"language":30363,"meta":14,"style":14},"obs = self._get_obs()\nreward = self._get_reward()\n",[91,116201,116202,116212],{"__ignoreMap":14},[94,116203,116204,116206,116208,116210],{"class":96,"line":97},[94,116205,110831],{"class":104},[94,116207,150],{"class":100},[94,116209,38856],{"class":153},[94,116211,114774],{"class":104},[94,116213,116214,116216,116218,116220],{"class":96,"line":15},[94,116215,110982],{"class":104},[94,116217,150],{"class":100},[94,116219,38856],{"class":153},[94,116221,114785],{"class":104},[40,116223,116224],{},"计算新的观测和奖励。",[85,116226,116228],{"className":30361,"code":116227,"language":30363,"meta":14,"style":14},"dist = float(np.linalg.norm(tip - target))\n",[91,116229,116230],{"__ignoreMap":14},[94,116231,116232,116234,116236,116238,116240,116242],{"class":96,"line":97},[94,116233,111573],{"class":104},[94,116235,150],{"class":100},[94,116237,109774],{"class":153},[94,116239,114828],{"class":104},[94,116241,637],{"class":100},[94,116243,114833],{"class":104},[40,116245,116246],{},"计算末端到目标的距离，并转换成 Python float。",[85,116248,116249],{"className":30361,"code":113654,"language":30363,"meta":14,"style":14},[91,116250,116251,116263],{"__ignoreMap":14},[94,116252,116253,116255,116257,116259,116261],{"class":96,"line":97},[94,116254,113661],{"class":104},[94,116256,150],{"class":100},[94,116258,113666],{"class":104},[94,116260,1015],{"class":100},[94,116262,113671],{"class":153},[94,116264,116265,116267,116269,116271,116273,116275,116277],{"class":96,"line":15},[94,116266,113676],{"class":104},[94,116268,150],{"class":100},[94,116270,38856],{"class":153},[94,116272,113683],{"class":104},[94,116274,1691],{"class":100},[94,116276,38856],{"class":153},[94,116278,113690],{"class":104},[40,116280,116281],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[85,116283,116285],{"className":30361,"code":116284,"language":30363,"meta":14,"style":14},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[91,116286,116287,116300],{"__ignoreMap":14},[94,116288,116289,116292,116294,116296,116298],{"class":96,"line":97},[94,116290,116291],{"class":104},"info ",[94,116293,150],{"class":100},[94,116295,4429],{"class":104},[94,116297,114879],{"class":209},[94,116299,114882],{"class":104},[94,116301,116302,116304],{"class":96,"line":15},[94,116303,17028],{"class":100},[94,116305,114889],{"class":104},[40,116307,116308,116311],{},[91,116309,116310],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[85,116313,116315],{"className":30361,"code":116314,"language":30363,"meta":14,"style":14},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[91,116316,116317,116326],{"__ignoreMap":14},[94,116318,116319,116322,116324],{"class":96,"line":97},[94,116320,116321],{"class":104},"env ",[94,116323,150],{"class":100},[94,116325,114919],{"class":104},[94,116327,116328,116330,116332,116334,116336,116338,116340],{"class":96,"line":15},[94,116329,113377],{"class":104},[94,116331,150],{"class":100},[94,116333,114929],{"class":104},[94,116335,114543],{"class":5198},[94,116337,150],{"class":100},[94,116339,296],{"class":153},[94,116341,111],{"class":104},[40,116343,116344,116345,116348],{},"创建环境并重置。",[91,116346,116347],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[85,116350,116352],{"className":30361,"code":116351,"language":30363,"meta":14,"style":14},"action = env.action_space.sample()\n",[91,116353,116354],{"__ignoreMap":14},[94,116355,116356,116358,116360],{"class":96,"line":97},[94,116357,107419],{"class":104},[94,116359,150],{"class":100},[94,116361,114998],{"class":104},[40,116363,116364],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[35,116366,102293],{"id":102292},[40,116368,105461],{},[85,116370,116373],{"className":116371,"code":116372,"language":5169,"meta":14},[5167],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[91,116374,116372],{"__ignoreMap":14},[40,116376,116377],{},"这个环境已经具备强化学习环境的基本结构。",[40,116379,116380],{},"主函数里使用随机动作：",[85,116382,116383],{"className":30361,"code":116351,"language":30363,"meta":14,"style":14},[91,116384,116385],{"__ignoreMap":14},[94,116386,116387,116389,116391],{"class":96,"line":97},[94,116388,107419],{"class":104},[94,116390,150],{"class":100},[94,116392,114998],{"class":104},[40,116394,116395],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[35,116397,102325],{"id":102324},[48,116399,116400,116403,116409,116418,116427,116436,116442],{},[51,116401,116402],{},"运行程序。",[51,116404,116405,116406,28368],{},"确认 ",[91,116407,116408],{},"obs.shape == (10,)",[51,116410,111158,116411,116414,116415,28368],{},[91,116412,116413],{},"env.action_space","，应类似 ",[91,116416,116417],{},"Box(-1.0, 1.0, (2,), float32)",[51,116419,105562,116420,116423,116424,28368],{},[91,116421,116422],{},"self.max_steps = 10","，确认环境会更快 ",[91,116425,116426],{},"truncated=True",[51,116428,102388,116429,102391,116432,116435],{},[91,116430,116431],{},"terminated = dist \u003C 0.05",[91,116433,116434],{},"dist \u003C 0.2","，观察是否更容易结束。",[51,116437,102388,116438,116441],{},[91,116439,116440],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[51,116443,116444,116445,116447,116448,116451],{},"在 ",[91,116446,116310],{}," 里加入 ",[91,116449,116450],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[35,116453,102430],{"id":102429},[65,116455,116457],{"id":116456},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[40,116459,116460,116461,116463],{},"Gymnasium 的 ",[91,116462,107111],{}," 返回 5 个值:",[85,116465,116467],{"className":30361,"code":116466,"language":30363,"meta":14,"style":14},"obs, reward, terminated, truncated, info\n",[91,116468,116469],{"__ignoreMap":14},[94,116470,116471],{"class":96,"line":97},[94,116472,116466],{"class":104},[40,116474,116475],{},"不是旧 Gym 的 4 个值。",[65,116477,116479,116482],{"id":116478},"datactrl-action-维度错误",[91,116480,116481],{},"data.ctrl[:] = action"," 维度错误",[40,116484,102500],{},[85,116486,116488],{"className":30361,"code":116487,"language":30363,"meta":14,"style":14},"print(self.model.nu)\nprint(action.shape)\n",[91,116489,116490,116501],{"__ignoreMap":14},[94,116491,116492,116494,116496,116498],{"class":96,"line":97},[94,116493,30398],{"class":153},[94,116495,105],{"class":104},[94,116497,30806],{"class":153},[94,116499,116500],{"class":104},".model.nu)\n",[94,116502,116503,116505],{"class":96,"line":15},[94,116504,30398],{"class":153},[94,116506,116507],{"class":104},"(action.shape)\n",[40,116509,116510],{},"两者必须匹配。",[65,116512,116514],{"id":116513},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[40,116516,102439],{},[85,116518,116520],{"className":30361,"code":116519,"language":30363,"meta":14,"style":14},"mujoco.mj_forward(self.model, self.data)\n",[91,116521,116522],{"__ignoreMap":14},[94,116523,116524,116527,116529,116531,116533],{"class":96,"line":97},[94,116525,116526],{"class":104},"mujoco.mj_forward(",[94,116528,30806],{"class":153},[94,116530,114558],{"class":104},[94,116532,30806],{"class":153},[94,116534,114563],{"class":104},[65,116536,116538,116540],{"id":116537},"observation_space-维度和-obs-不一致",[91,116539,113577],{}," 维度和 obs 不一致",[40,116542,102552],{},[85,116544,116546],{"className":30361,"code":116545,"language":30363,"meta":14,"style":14},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[91,116547,116548,116558,116565],{"__ignoreMap":14},[94,116549,116550,116552,116554,116556],{"class":96,"line":97},[94,116551,110831],{"class":104},[94,116553,150],{"class":100},[94,116555,38856],{"class":153},[94,116557,114774],{"class":104},[94,116559,116560,116562],{"class":96,"line":15},[94,116561,30398],{"class":153},[94,116563,116564],{"class":104},"(obs.shape)\n",[94,116566,116567,116569,116571,116573],{"class":96,"line":1160},[94,116568,30398],{"class":153},[94,116570,105],{"class":104},[94,116572,30806],{"class":153},[94,116574,116575],{"class":104},".observation_space.shape)\n",[40,116577,116578],{},"两者必须一致。本章观测是：",[85,116580,116583],{"className":116581,"code":116582,"language":5169,"meta":14},[5167],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[91,116584,116582],{"__ignoreMap":14},[65,116586,116588],{"id":116587},"action-超过范围","action 超过范围",[40,116590,116591],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[85,116593,116594],{"className":30361,"code":116093,"language":30363,"meta":14,"style":14},[91,116595,116596],{"__ignoreMap":14},[94,116597,116598,116600,116602,116604,116606,116608,116610],{"class":96,"line":97},[94,116599,107419],{"class":104},[94,116601,150],{"class":100},[94,116603,107424],{"class":104},[94,116605,30806],{"class":153},[94,116607,114695],{"class":104},[94,116609,30806],{"class":153},[94,116611,114700],{"class":104},[40,116613,116614,116615,28368],{},"这能避免无效动作直接写入 ",[91,116616,101053],{},[65,116618,116620],{"id":116619},"忘记返回-info","忘记返回 info",[40,116622,116460,116623,100995,116625,116627],{},[91,116624,70033],{},[91,116626,107111],{}," 都会返回 info：",[85,116629,116630],{"className":30361,"code":113370,"language":30363,"meta":14,"style":14},[91,116631,116632,116640],{"__ignoreMap":14},[94,116633,116634,116636,116638],{"class":96,"line":97},[94,116635,113377],{"class":104},[94,116637,150],{"class":100},[94,116639,113382],{"class":104},[94,116641,116642,116644,116646],{"class":96,"line":15},[94,116643,113387],{"class":104},[94,116645,150],{"class":100},[94,116647,113392],{"class":104},[40,116649,116650,116651,28368],{},"即使暂时没有额外信息，也返回 ",[91,116652,32442],{},[35,116654,116656],{"id":116655},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[40,116658,116659],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[48,116661,116662,116665,116668,116671,116674,116677],{},[51,116663,116664],{},"更稳定的 reward。",[51,116666,116667],{},"合理的 episode 长度。",[51,116669,116670],{},"可重复的随机目标采样。",[51,116672,116673],{},"render 接口。",[51,116675,116676],{},"环境注册代码。",[51,116678,116679],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[40,116681,116682],{},"如果只是自己写训练循环，最小形式是：",[85,116684,116686],{"className":30361,"code":116685,"language":30363,"meta":14,"style":14},"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",[91,116687,116688,116696,116712,116716,116732,116741,116750,116760],{"__ignoreMap":14},[94,116689,116690,116692,116694],{"class":96,"line":97},[94,116691,116321],{"class":104},[94,116693,150],{"class":100},[94,116695,114919],{"class":104},[94,116697,116698,116700,116702,116704,116706,116708,116710],{"class":96,"line":15},[94,116699,113377],{"class":104},[94,116701,150],{"class":100},[94,116703,114929],{"class":104},[94,116705,114543],{"class":5198},[94,116707,150],{"class":100},[94,116709,296],{"class":153},[94,116711,111],{"class":104},[94,116713,116714],{"class":96,"line":1160},[94,116715,2381],{"emptyLinePlaceholder":20},[94,116717,116718,116720,116722,116724,116726,116728,116730],{"class":96,"line":1175},[94,116719,3006],{"class":100},[94,116721,101478],{"class":104},[94,116723,26026],{"class":100},[94,116725,32426],{"class":153},[94,116727,105],{"class":104},[94,116729,6392],{"class":153},[94,116731,30769],{"class":104},[94,116733,116734,116737,116739],{"class":96,"line":1181},[94,116735,116736],{"class":104},"    action ",[94,116738,150],{"class":100},[94,116740,114998],{"class":104},[94,116742,116743,116746,116748],{"class":96,"line":1195},[94,116744,116745],{"class":104},"    obs, reward, terminated, truncated, info ",[94,116747,150],{"class":100},[94,116749,113392],{"class":104},[94,116751,116752,116754,116756,116758],{"class":96,"line":1201},[94,116753,3082],{"class":100},[94,116755,115064],{"class":104},[94,116757,115067],{"class":100},[94,116759,115070],{"class":104},[94,116761,116762,116765,116767],{"class":96,"line":1292},[94,116763,116764],{"class":104},"        obs, info ",[94,116766,150],{"class":100},[94,116768,113382],{"class":104},[35,116770,116772],{"id":116771},"_9本章小结","9.本章小结",[40,116774,116775],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[85,116777,116780],{"className":116778,"code":116779,"language":5169,"meta":14},[5167],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[91,116781,116779],{"__ignoreMap":14},[40,116783,116784],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5108,116786,116787],{},"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":14,"searchDepth":15,"depth":15,"links":116789},[116790,116791,116792,116799,116803,116804,116805,116815,116816],{"id":100623,"depth":15,"text":100624},{"id":100746,"depth":15,"text":100747},{"id":101021,"depth":15,"text":101022,"children":116793},[116794,116796,116798],{"id":113601,"depth":1160,"text":116795},"terminated 和 truncated 的区别",{"id":113704,"depth":1160,"text":116797},"observation_space 和 action_space",{"id":113831,"depth":1160,"text":113832},{"id":101229,"depth":15,"text":101230,"children":116800},[116801,116802],{"id":101549,"depth":1160,"text":101549},{"id":101685,"depth":1160,"text":101685},{"id":102292,"depth":15,"text":102293},{"id":102324,"depth":15,"text":102325},{"id":102429,"depth":15,"text":102430,"children":116806},[116807,116808,116810,116811,116813,116814],{"id":116456,"depth":1160,"text":116457},{"id":116478,"depth":1160,"text":116809},"data.ctrl[:] = action 维度错误",{"id":116513,"depth":1160,"text":116514},{"id":116537,"depth":1160,"text":116812},"observation_space 维度和 obs 不一致",{"id":116587,"depth":1160,"text":116588},{"id":116619,"depth":1160,"text":116620},{"id":116655,"depth":15,"text":116656},{"id":116771,"depth":15,"text":116772},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113354,"description":14},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116823,"title":116824,"body":116825,"description":117248,"extension":18,"meta":117249,"navigation":20,"path":117250,"seo":117251,"stem":117252,"__hash__":117253},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116826,"toc":117238},[116827,116831,116834,116837,116857,116863,116869,116879,116882,116885,116905,116908,116912,116915,116921,116924,116938,116941,116944,117018,117021,117027,117030,117053,117056,117106,117109,117115,117118,117121,117124,117143,117146,117152,117155,117158,117161,117181,117184,117187,117190,117235],[10,116828,116830],{"id":116829},"mujoco-学习","MuJoCo 学习",[40,116832,116833],{},"初版",[40,116835,116836],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[48,116838,116839,116842,116845,116854],{},[51,116840,116841],{},"MuJoCo 模型文件在描述什么。",[51,116843,116844],{},"Python 代码怎样读取和推进仿真。",[51,116846,116847,317,116849,317,116851,116853],{},[91,116848,104007],{},[91,116850,104337],{},[91,116852,104340],{}," 这些数组为什么重要。",[51,116855,116856],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[40,116858,116859,116860,116862],{},"默认环境为 Fedora 44、Python >= 3.10、",[91,116861,101004],{}," 官方 Python bindings。",[40,116864,116865,116866,116868],{},"注意：本文禁止使用 ",[91,116867,100989],{},"。所有示例均使用：",[85,116870,116871],{"className":30361,"code":101555,"language":30363,"meta":14,"style":14},[91,116872,116873],{"__ignoreMap":14},[94,116874,116875,116877],{"class":96,"line":97},[94,116876,30375],{"class":100},[94,116878,101278],{"class":104},[35,116880,116881],{"id":116881},"适合谁阅读",[40,116883,116884],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[48,116886,116887,116890,116893,116896],{},[51,116888,116889],{},"没学过 MuJoCo，只会一点 Python。",[51,116891,116892],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[51,116894,116895],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[51,116897,116898,116899,116901,116902,116904],{},"以前接触过 ",[91,116900,100989],{},"，现在想迁移到官方 ",[91,116903,100998],{}," Python bindings。",[40,116906,116907],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[35,116909,116911],{"id":116910},"mujoco-到底是什么","MuJoCo 到底是什么",[40,116913,116914],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[85,116916,116919],{"className":116917,"code":116918,"language":5169,"meta":14},[5167],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[91,116920,116918],{"__ignoreMap":14},[40,116922,116923],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[48,116925,116926,116929,116932,116935],{},[51,116927,116928],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[51,116930,116931],{},"快速测试控制算法，不必一开始就上真实机器人。",[51,116933,116934],{},"生成强化学习环境。",[51,116936,116937],{},"采集状态、动作、图像、奖励等训练数据。",[35,116939,116940],{"id":116940},"学习前的心智模型",[40,116942,116943],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[242,116945,116946,116958],{},[245,116947,116948],{},[248,116949,116950,116953,116956],{},[251,116951,116952],{"align":23718},"部分",[251,116954,116955],{"align":23718},"负责什么",[251,116957,21169],{"align":23718},[289,116959,116960,116971,116983,116995,117007],{},[248,116961,116962,116965,116968],{},[294,116963,116964],{"align":23718},"MJCF XML",[294,116966,116967],{"align":23718},"定义世界和机器人结构",[294,116969,116970],{"align":23718},"地面、盒子、关节、电机、摄像头",[248,116972,116973,116977,116980],{},[294,116974,116975],{"align":23718},[91,116976,100686],{},[294,116978,116979],{"align":23718},"编译后的静态模型",[294,116981,116982],{"align":23718},"有几个关节、有几个电机、时间步长是多少",[248,116984,116985,116989,116992],{},[294,116986,116987],{"align":23718},[91,116988,100696],{},[294,116990,116991],{"align":23718},"运行中的动态状态",[294,116993,116994],{"align":23718},"当前时间、位置、速度、电机输入",[248,116996,116997,117001,117004],{},[294,116998,116999],{"align":23718},[91,117000,101192],{},[294,117002,117003],{"align":23718},"推进一步物理仿真",[294,117005,117006],{"align":23718},"根据重力、力、碰撞更新状态",[248,117008,117009,117012,117015],{},[294,117010,117011],{"align":23718},"Viewer \u002F Renderer",[294,117013,117014],{"align":23718},"把仿真显示出来",[294,117016,117017],{"align":23718},"打开窗口或保存图片",[40,117019,117020],{},"一句话总结：",[85,117022,117025],{"className":117023,"code":117024,"language":5169,"meta":14},[5167],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[91,117026,117024],{"__ignoreMap":14},[40,117028,117029],{},"参考来源：",[1112,117031,117032,117039,117046],{},[51,117033,117034,117035],{},"MuJoCo Python 官方文档：",[343,117036,117037],{"href":117037,"rel":117038},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23847],[51,117040,117041,117042],{},"MuJoCo XML Reference：",[343,117043,117044],{"href":117044,"rel":117045},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23847],[51,117047,117048,117049],{},"MuJoCo Overview：",[343,117050,117051],{"href":117051,"rel":117052},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23847],[35,117054,117055],{"id":117055},"章节目录",[48,117057,117058,117064,117070,117076,117082,117088,117094,117100],{},[51,117059,117060],{},[343,117061,117063],{"href":117062},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[51,117065,117066],{},[343,117067,117069],{"href":117068},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[51,117071,117072],{},[343,117073,117075],{"href":117074},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[51,117077,117078],{},[343,117079,117081],{"href":117080},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[51,117083,117084],{},[343,117085,117087],{"href":117086},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[51,117089,117090],{},[343,117091,117093],{"href":117092},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[51,117095,117096],{},[343,117097,117099],{"href":117098},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[51,117101,117102],{},[343,117103,117105],{"href":117104},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[35,117107,117108],{"id":117108},"推荐学习路线",[85,117110,117113],{"className":117111,"code":117112,"language":5169,"meta":14},[5167],"环境安装\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",[91,117114,117112],{"__ignoreMap":14},[40,117116,117117],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[35,117119,117120],{"id":117120},"建议的目录结构",[40,117122,117123],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[85,117125,117127],{"className":23804,"code":117126,"language":23806,"meta":14,"style":14},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[91,117128,117129,117137],{"__ignoreMap":14},[94,117130,117131,117133,117135],{"class":96,"line":97},[94,117132,101243],{"class":1944},[94,117134,29199],{"class":153},[94,117136,101248],{"class":209},[94,117138,117139,117141],{"class":96,"line":15},[94,117140,101253],{"class":153},[94,117142,101248],{"class":209},[40,117144,117145],{},"每一章的代码都单独保存：",[85,117147,117150],{"className":117148,"code":117149,"language":5169,"meta":14},[5167],"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",[91,117151,117149],{"__ignoreMap":14},[40,117153,117154],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[35,117156,117157],{"id":117157},"学习方法",[40,117159,117160],{},"每章建议按这个顺序操作：",[48,117162,117163,117166,117169,117172,117175,117178],{},[51,117164,117165],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[51,117167,117168],{},"复制最小可运行代码，保存成指定文件。",[51,117170,117171],{},"运行代码，确认没有报错。",[51,117173,117174],{},"对照“运行结果说明”理解输出。",[51,117176,117177],{},"做“验证步骤”，主动改一两个参数。",[51,117179,117180],{},"遇到报错先看“常见错误与解决方案”。",[40,117182,117183],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[35,117185,117186],{"id":117186},"全局排错顺序",[40,117188,117189],{},"遇到问题时，按下面顺序查：",[48,117191,117192,117198,117204,117209,117212,117215,117222,117232],{},[51,117193,117194,117195],{},"Python 环境是否激活：",[91,117196,117197],{},"which python",[51,117199,117200,117201],{},"MuJoCo 是否能导入：",[91,117202,117203],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[51,117205,117206,117207],{},"是否误装了 ",[91,117208,100989],{},[51,117210,117211],{},"XML 标签是否闭合、属性是否拼写正确",[51,117213,117214],{},"actuator 引用的 joint 名字是否存在",[51,117216,117217,117219,117220],{},[91,117218,101053],{}," 的长度是否等于 ",[91,117221,102135],{},[51,117223,105562,117224,82516,117226,117228,117229],{},[91,117225,104007],{},[91,117227,104337],{}," 后是否调用了 ",[91,117230,117231],{},"mujoco.mj_forward",[51,117233,117234],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5108,117236,117237],{},"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":14,"searchDepth":15,"depth":15,"links":117239},[117240,117241,117242,117243,117244,117245,117246,117247],{"id":116881,"depth":15,"text":116881},{"id":116910,"depth":15,"text":116911},{"id":116940,"depth":15,"text":116940},{"id":117055,"depth":15,"text":117055},{"id":117108,"depth":15,"text":117108},{"id":117120,"depth":15,"text":117120},{"id":117157,"depth":15,"text":117157},{"id":117186,"depth":15,"text":117186},"仿真搭建。",{"category":23360},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116824,"description":117248},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117255,"title":117256,"body":117257,"description":17,"extension":18,"meta":117712,"navigation":20,"path":117713,"seo":117714,"stem":117715,"__hash__":117716},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117258,"toc":117710},[117259,117262,117265,117271,117707],[10,117260,117256],{"id":117261},"_1-最常用的基本操作更新",[40,117263,117264],{},"装linux系统教程：",[40,117266,117267],{},[343,117268,117269],{"href":117269,"rel":117270},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23847],[85,117272,117276],{"className":117273,"code":117274,"language":117275,"meta":14,"style":14},"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",[91,117277,117278,117283,117288,117297,117302,117311,117316,117336,117341,117352,117357,117366,117371,117399,117404,117423,117428,117447,117451,117456,117472,117476,117481,117511,117515,117520,117536,117540,117545,117560,117564,117569,117585,117589,117594,117606,117618,117622,117627,117644,117648,117653,117671,117675,117680,117689,117693,117698],{"__ignoreMap":14},[94,117279,117280],{"class":96,"line":97},[94,117281,117282],{"class":163},"#更新相关的知识\n",[94,117284,117285],{"class":96,"line":15},[94,117286,117287],{"class":163},"# 更新软件包列表（从服务器获取最新软件信息）\n",[94,117289,117290,117292,117295],{"class":96,"line":1160},[94,117291,24559],{"class":1944},[94,117293,117294],{"class":209}," apt",[94,117296,26225],{"class":209},[94,117298,117299],{"class":96,"line":1175},[94,117300,117301],{"class":163},"# 升级所有可更新的软件包（不删除旧包）\n",[94,117303,117304,117306,117308],{"class":96,"line":1181},[94,117305,24559],{"class":1944},[94,117307,117294],{"class":209},[94,117309,117310],{"class":209}," upgrade\n",[94,117312,117313],{"class":96,"line":1195},[94,117314,117315],{"class":163},"#更新和升级软件包\n",[94,117317,117318,117320,117322,117325,117327,117329,117331,117334],{"class":96,"line":1201},[94,117319,24559],{"class":1944},[94,117321,117294],{"class":209},[94,117323,117324],{"class":209}," update",[94,117326,26173],{"class":104},[94,117328,24559],{"class":1944},[94,117330,117294],{"class":209},[94,117332,117333],{"class":209}," upgrade",[94,117335,100958],{"class":153},[94,117337,117338],{"class":96,"line":1292},[94,117339,117340],{"class":163},"#列出可更新的软件包及版本信息\n",[94,117342,117343,117346,117349],{"class":96,"line":1298},[94,117344,117345],{"class":1944},"apt",[94,117347,117348],{"class":209}," list",[94,117350,117351],{"class":153}," --upgradable\n",[94,117353,117354],{"class":96,"line":1310},[94,117355,117356],{"class":163},"#彻底升级（处理依赖关系，可能删除旧包）\n",[94,117358,117359,117361,117363],{"class":96,"line":1593},[94,117360,24559],{"class":1944},[94,117362,117294],{"class":209},[94,117364,117365],{"class":209}," full-upgrade\n",[94,117367,117368],{"class":96,"line":1598},[94,117369,117370],{"class":163},"#设置指定版本\n",[94,117372,117373,117375,117377,117379,117381,117384,117386,117388,117390,117392,117395,117397],{"class":96,"line":1604},[94,117374,24559],{"class":1944},[94,117376,117294],{"class":209},[94,117378,23816],{"class":209},[94,117380,28885],{"class":100},[94,117382,117383],{"class":209},"package_nam",[94,117385,179],{"class":104},[94,117387,1065],{"class":100},[94,117389,150],{"class":209},[94,117391,1015],{"class":100},[94,117393,117394],{"class":209},"version_numbe",[94,117396,775],{"class":104},[94,117398,51284],{"class":100},[94,117400,117401],{"class":96,"line":1609},[94,117402,117403],{"class":163},"#只安装软件包不升级\n",[94,117405,117406,117408,117410,117412,117414,117416,117418,117420],{"class":96,"line":1623},[94,117407,24559],{"class":1944},[94,117409,117294],{"class":209},[94,117411,23816],{"class":209},[94,117413,28885],{"class":100},[94,117415,117383],{"class":209},[94,117417,179],{"class":104},[94,117419,1065],{"class":100},[94,117421,117422],{"class":153}," --no-upgrade\n",[94,117424,117425],{"class":96,"line":1628},[94,117426,117427],{"class":163},"#只升级，不存在就不安装\n",[94,117429,117430,117432,117434,117436,117438,117440,117442,117444],{"class":96,"line":1634},[94,117431,24559],{"class":1944},[94,117433,117294],{"class":209},[94,117435,23816],{"class":209},[94,117437,28885],{"class":100},[94,117439,117383],{"class":209},[94,117441,179],{"class":104},[94,117443,1065],{"class":100},[94,117445,117446],{"class":153}," --only-upgrade\n",[94,117448,117449],{"class":96,"line":1655},[94,117450,2381],{"emptyLinePlaceholder":20},[94,117452,117453],{"class":96,"line":1660},[94,117454,117455],{"class":163},"#安装指定的软件命令\n",[94,117457,117458,117460,117462,117464,117466,117468,117470],{"class":96,"line":1674},[94,117459,24559],{"class":1944},[94,117461,117294],{"class":209},[94,117463,23816],{"class":209},[94,117465,28885],{"class":100},[94,117467,117383],{"class":209},[94,117469,179],{"class":104},[94,117471,51284],{"class":100},[94,117473,117474],{"class":96,"line":1679},[94,117475,2381],{"emptyLinePlaceholder":20},[94,117477,117478],{"class":96,"line":1708},[94,117479,117480],{"class":163},"#安装多个软件包\n",[94,117482,117483,117485,117487,117489,117491,117494,117497,117499,117501,117504,117506,117508],{"class":96,"line":1713},[94,117484,24559],{"class":1944},[94,117486,117294],{"class":209},[94,117488,23816],{"class":209},[94,117490,28885],{"class":100},[94,117492,117493],{"class":209},"package_",[94,117495,117496],{"class":100},"1>",[94,117498,28885],{"class":100},[94,117500,117493],{"class":209},[94,117502,117503],{"class":100},"2>",[94,117505,28885],{"class":100},[94,117507,117493],{"class":209},[94,117509,117510],{"class":100},"3>\n",[94,117512,117513],{"class":96,"line":1730},[94,117514,2381],{"emptyLinePlaceholder":20},[94,117516,117517],{"class":96,"line":1735},[94,117518,117519],{"class":163},"#更新指定的软件命令\n",[94,117521,117522,117524,117526,117528,117530,117532,117534],{"class":96,"line":1740},[94,117523,24559],{"class":1944},[94,117525,117294],{"class":209},[94,117527,117324],{"class":209},[94,117529,28885],{"class":100},[94,117531,117383],{"class":209},[94,117533,179],{"class":104},[94,117535,51284],{"class":100},[94,117537,117538],{"class":96,"line":1745},[94,117539,2381],{"emptyLinePlaceholder":20},[94,117541,117542],{"class":96,"line":1759},[94,117543,117544],{"class":163},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[94,117546,117547,117549,117552,117554,117556,117558],{"class":96,"line":1764},[94,117548,117345],{"class":1944},[94,117550,117551],{"class":209}," show",[94,117553,28885],{"class":100},[94,117555,117383],{"class":209},[94,117557,179],{"class":104},[94,117559,51284],{"class":100},[94,117561,117562],{"class":96,"line":2558},[94,117563,2381],{"emptyLinePlaceholder":20},[94,117565,117566],{"class":96,"line":2572},[94,117567,117568],{"class":163},"#删除软件包命令\n",[94,117570,117571,117573,117575,117577,117579,117581,117583],{"class":96,"line":2580},[94,117572,24559],{"class":1944},[94,117574,117294],{"class":209},[94,117576,26062],{"class":209},[94,117578,28885],{"class":100},[94,117580,117383],{"class":209},[94,117582,179],{"class":104},[94,117584,51284],{"class":100},[94,117586,117587],{"class":96,"line":2585},[94,117588,2381],{"emptyLinePlaceholder":20},[94,117590,117591],{"class":96,"line":2591},[94,117592,117593],{"class":163},"# 清理旧版本和缓存（释放磁盘空间）\n",[94,117595,117596,117598,117600,117603],{"class":96,"line":2597},[94,117597,24559],{"class":1944},[94,117599,117294],{"class":209},[94,117601,117602],{"class":209}," autoremove",[94,117604,117605],{"class":163},"  # 删除不再需要的依赖和库文件\n",[94,117607,117608,117610,117612,117615],{"class":96,"line":2602},[94,117609,24559],{"class":1944},[94,117611,117294],{"class":209},[94,117613,117614],{"class":209}," clean",[94,117616,117617],{"class":163},"       # 清理下载的缓存包\n",[94,117619,117620],{"class":96,"line":7930},[94,117621,2381],{"emptyLinePlaceholder":20},[94,117623,117624],{"class":96,"line":7954},[94,117625,117626],{"class":163},"#移除软件包及配置文件\n",[94,117628,117629,117631,117633,117636,117638,117640,117642],{"class":96,"line":7959},[94,117630,24559],{"class":1944},[94,117632,117294],{"class":209},[94,117634,117635],{"class":209}," purge",[94,117637,28885],{"class":100},[94,117639,117383],{"class":209},[94,117641,179],{"class":104},[94,117643,51284],{"class":100},[94,117645,117646],{"class":96,"line":7965},[94,117647,2381],{"emptyLinePlaceholder":20},[94,117649,117650],{"class":96,"line":7992},[94,117651,117652],{"class":163},"#查找软件包命令\n",[94,117654,117655,117657,117659,117662,117664,117667,117669],{"class":96,"line":7997},[94,117656,24559],{"class":1944},[94,117658,117294],{"class":209},[94,117660,117661],{"class":209}," search",[94,117663,28885],{"class":100},[94,117665,117666],{"class":209},"keywor",[94,117668,419],{"class":104},[94,117670,51284],{"class":100},[94,117672,117673],{"class":96,"line":8003},[94,117674,2381],{"emptyLinePlaceholder":20},[94,117676,117677],{"class":96,"line":8015},[94,117678,117679],{"class":163},"#列出所有已安装的包\n",[94,117681,117682,117684,117686],{"class":96,"line":8027},[94,117683,117345],{"class":1944},[94,117685,117348],{"class":209},[94,117687,117688],{"class":153}," --installed\n",[94,117690,117691],{"class":96,"line":8039},[94,117692,2381],{"emptyLinePlaceholder":20},[94,117694,117695],{"class":96,"line":9698},[94,117696,117697],{"class":163},"#列出所有已安装的包的版本信息\n",[94,117699,117700,117702,117704],{"class":96,"line":9723},[94,117701,117345],{"class":1944},[94,117703,117348],{"class":209},[94,117705,117706],{"class":153}," --all-versions\n",[5108,117708,117709],{},"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":14,"searchDepth":15,"depth":15,"links":117711},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117256,"description":17},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117718,"title":117719,"body":117720,"description":17,"extension":18,"meta":118461,"navigation":20,"path":118462,"seo":118463,"stem":118464,"__hash__":118465},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117721,"toc":118448},[117722,117725,117729,117732,117738,117742,117746,117752,117757,117762,117767,117772,117777,117780,117783,117786,117789,117793,117796,117801,117804,117809,117812,117817,117824,117827,117830,117833,117836,117839,117850,117854,117858,117863,117868,117872,117877,117881,117886,117890,117894,117899,117902,117947,117952,117956,117960,117965,117971,117976,117986,117991,118001,118006,118011,118038,118042,118045,118050,118053,118078,118082,118087,118090,118095,118100,118120,118125,118128,118143,118147,118200,118203,118208,118212,118215,118230,118233,118236,118241,118245,118249,118252,118256,118260,118263,118268,118273,118277,118284,118292,118295,118302,118307,118312,118315,118320,118327,118332,118339,118343,118345,118350,118354,118357,118360,118365,118368,118373,118376,118381,118386,118391,118395,118400,118404,118445],[10,117723,117719],{"id":117724},"_2-linux装机教程",[35,117726,117728],{"id":117727},"_21-实体机","2.1 实体机",[40,117730,117731],{},"使用清华源：（Ubuntu24.04）",[40,117733,117734],{},[343,117735,117736],{"href":117736,"rel":117737},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23847],[35,117739,117741],{"id":117740},"_22-普通虚拟机","2.2 普通虚拟机",[65,117743,117745],{"id":117744},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[40,117747,117748],{},[343,117749,117750],{"href":117750,"rel":117751},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23847],[40,117753,117754],{},[1443,117755],{"alt":14,"src":117756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[40,117758,117759],{},[1443,117760],{"alt":14,"src":117761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[40,117763,117764],{},[1443,117765],{"alt":14,"src":117766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[40,117768,117769],{},[1443,117770],{"alt":14,"src":117771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[40,117773,117774],{},[1443,117775],{"alt":14,"src":117776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[40,117778,117779],{},"内存4G（4096MB）；",[40,117781,117782],{},"CPU给4个核；",[40,117784,117785],{},"硬盘动态分配60G；",[40,117787,117788],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[65,117790,117792],{"id":117791},"_222-安装ubuntu","2.2.2 安装Ubuntu",[40,117794,117795],{},"按照1.1的步骤下载Ubuntu",[40,117797,117798],{},[1443,117799],{"alt":14,"src":117800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[40,117802,117803],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[40,117805,117806],{},[1443,117807],{"alt":14,"src":117808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[40,117810,117811],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[40,117813,117814],{},[1443,117815],{"alt":14,"src":117816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[40,117818,117819,117820,117823],{},"选择“正常安装”(找不到都用Alt+F7)， ",[254,117821,117822],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[40,117825,117826],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[40,117828,117829],{},"将改动写入磁盘吗 继续",[40,117831,117832],{},"选择东八区（shanghai，大致在地图上点一下），继续",[40,117834,117835],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[40,117837,117838],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[40,117840,117841,117842,117845,117846,117849],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[254,117843,117844],{},"除了"," 选不发送系统信息与不升级之外， ",[254,117847,117848],{},"其它"," 都跳过或前进）",[65,117851,117853],{"id":117852},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[21980,117855,117857],{"id":117856},"_2231-全屏","2.2.3.1 全屏",[40,117859,117860],{},[1443,117861],{"alt":14,"src":117862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[40,117864,117865],{},[1443,117866],{"alt":14,"src":117867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[21980,117869,117871],{"id":117870},"_2232-文件交换","2.2.3.2 文件交换",[40,117873,117874],{},[1443,117875],{"alt":14,"src":117876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[21980,117878,117880],{"id":117879},"_2233-新建文本文档","2.2.3.3 新建文本文档",[40,117882,117883],{},[1443,117884],{"alt":14,"src":117885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[35,117887,117889],{"id":117888},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[65,117891,117893],{"id":117892},"_231-简介与优缺点","2.3.1 简介与优缺点",[48,117895,117896],{},[51,117897,117898],{},"什么情况下推荐？",[40,117900,117901],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[48,117903,117904],{"start":15},[51,117905,117906,117907],{},"优缺点：",[48,117908,117909,117939],{},[51,117910,117911,117912],{},"优点：",[48,117913,117914,117917,117924,117927,117930,117933,117936],{},[51,117915,117916],{},"WSL2是最好的Linux发行版;(bushi)",[51,117918,117919,117920,117923],{},"性能损耗极低。且比在Windows上跑深度性能 ",[254,117921,117922],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[51,117925,117926],{},"非常方便调用USB设备，可以USB直通;",[51,117928,117929],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[51,117931,117932],{},"非常方便Win与WSL2互相传文件等协同操作;",[51,117934,117935],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[51,117937,117938],{},"非常方便使用Windows的VScode远程开发;",[51,117940,117941,117942],{},"缺点：",[48,117943,117944],{},[51,117945,117946],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[40,117948,117949],{},[1443,117950],{"alt":14,"src":117951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[65,117953,117955],{"id":117954},"_232-安装教程","2.3.2 安装教程",[21980,117957,117959],{"id":117958},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[48,117961,117962],{},[51,117963,117964],{},"方法一(图形界面)",[40,117966,117967,117968,24601],{},"用Win+R输入",[91,117969,117970],{},"appwiz.cpl",[40,117972,117973],{},[1443,117974],{"alt":14,"src":117975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[40,117977,117978,117979,117982,117983,26456],{},"点击OK进入 ",[254,117980,117981],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[254,117984,117985],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[40,117987,117988],{},[1443,117989],{"alt":14,"src":117990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[40,117992,117993,117994,100995,117997,118000],{},"选择 ",[254,117995,117996],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[254,117998,117999],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[40,118002,118003],{},[1443,118004],{"alt":14,"src":118005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[48,118007,118008],{"start":15},[51,118009,118010],{},"方法二(命令行)",[85,118012,118016],{"className":118013,"code":118014,"language":118015,"meta":14,"style":14},"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",[91,118017,118018,118023,118028,118033],{"__ignoreMap":14},[94,118019,118020],{"class":96,"line":97},[94,118021,118022],{},"# 开启 Linux 子系统\n",[94,118024,118025],{"class":96,"line":15},[94,118026,118027],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[94,118029,118030],{"class":96,"line":1160},[94,118031,118032],{},"# 开启虚拟机平台\n",[94,118034,118035],{"class":96,"line":1175},[94,118036,118037],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[21980,118039,118041],{"id":118040},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[40,118043,118044],{},"用管理员权限打开powershell",[40,118046,118047],{},[1443,118048],{"alt":14,"src":118049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[40,118051,118052],{},"升级WSL并设置默认版本为WSL2",[85,118054,118056],{"className":118013,"code":118055,"language":118015,"meta":14,"style":14},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[91,118057,118058,118063,118068,118073],{"__ignoreMap":14},[94,118059,118060],{"class":96,"line":97},[94,118061,118062],{},"# 更新 wsl\n",[94,118064,118065],{"class":96,"line":15},[94,118066,118067],{},"wsl --update\n",[94,118069,118070],{"class":96,"line":1160},[94,118071,118072],{},"# 将 wsl 版本设置为 wsl2\n",[94,118074,118075],{"class":96,"line":1175},[94,118076,118077],{},"wsl --set-default-version 2\n",[21980,118079,118081],{"id":118080},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[48,118083,118084],{},[51,118085,118086],{},"方式一(商店下载)",[40,118088,118089],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[40,118091,118092],{},[1443,118093],{"alt":14,"src":118094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[48,118096,118097],{"start":15},[51,118098,118099],{},"方式二(命令行安装)",[85,118101,118103],{"className":118013,"code":118102,"language":118015,"meta":14,"style":14},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[91,118104,118105,118110,118115],{"__ignoreMap":14},[94,118106,118107],{"class":96,"line":97},[94,118108,118109],{},"# 列出可安装的 Linux 版本\n",[94,118111,118112],{"class":96,"line":15},[94,118113,118114],{},"#（需要科学手段）\n",[94,118116,118117],{"class":96,"line":1160},[94,118118,118119],{},"wsl --list --online\n",[40,118121,118122],{},[1443,118123],{"alt":14,"src":118124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[40,118126,118127],{},"选择对应发行版并安装",[85,118129,118131],{"className":118013,"code":118130,"language":118015,"meta":14,"style":14},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[91,118132,118133,118138],{"__ignoreMap":14},[94,118134,118135],{"class":96,"line":97},[94,118136,118137],{},"# Ubuntu安装完毕后需要重启系统\n",[94,118139,118140],{"class":96,"line":15},[94,118141,118142],{},"wsl --install -d Ubuntu-24.04\n",[21980,118144,118146],{"id":118145},"_2324-查看系统状态","2.3.2.4 查看系统状态",[85,118148,118150],{"className":118013,"code":118149,"language":118015,"meta":14,"style":14},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[91,118151,118152,118157,118162,118167,118172,118176,118180,118185,118190,118195],{"__ignoreMap":14},[94,118153,118154],{"class":96,"line":97},[94,118155,118156],{},"# 查看 wsl\n",[94,118158,118159],{"class":96,"line":15},[94,118160,118161],{},"wsl -l\n",[94,118163,118164],{"class":96,"line":1160},[94,118165,118166],{},"# 查看 wsl 运行版本或模式\n",[94,118168,118169],{"class":96,"line":1175},[94,118170,118171],{},"wsl -l -v\n",[94,118173,118174],{"class":96,"line":1181},[94,118175,2381],{"emptyLinePlaceholder":20},[94,118177,118178],{"class":96,"line":1195},[94,118179,2381],{"emptyLinePlaceholder":20},[94,118181,118182],{"class":96,"line":1201},[94,118183,118184],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[94,118186,118187],{"class":96,"line":1292},[94,118188,118189],{},"wsl --set-version \u003Cdistro> 2\n",[94,118191,118192],{"class":96,"line":1298},[94,118193,118194],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[94,118196,118197],{"class":96,"line":1310},[94,118198,118199],{},"wsl --unregister \u003Cdistro>\n",[40,118201,118202],{},"输出Version为2即正常",[40,118204,118205],{},[1443,118206],{"alt":14,"src":118207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[21980,118209,118211],{"id":118210},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[40,118213,118214],{},"直接在Powershell里输入wsl命令进入子系统",[85,118216,118218],{"className":118013,"code":118217,"language":118015,"meta":14,"style":14},"# 进入子系统\nwsl\n",[91,118219,118220,118225],{"__ignoreMap":14},[94,118221,118222],{"class":96,"line":97},[94,118223,118224],{},"# 进入子系统\n",[94,118226,118227],{"class":96,"line":15},[94,118228,118229],{},"wsl\n",[40,118231,118232],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[40,118234,118235],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[40,118237,118238],{},[1443,118239],{"alt":14,"src":118240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[65,118242,118244],{"id":118243},"_233-配置各种环境","2.3.3 配置各种环境",[21980,118246,118248],{"id":118247},"_2331-换源","2.3.3.1 换源",[40,118250,118251],{},"(同实体机LINUX，往下找教程)",[21980,118253,118255],{"id":118254},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22892,118257,118259],{"id":118258},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[40,118261,118262],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[40,118264,118265],{},[1443,118266],{"alt":14,"src":118267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[40,118269,118270],{},[1443,118271],{"alt":14,"src":118272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22892,118274,118276],{"id":118275},"_23322-cuda","2.3.3.2.2 CUDA",[40,118278,118279,118280],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[343,118281,118282],{"href":118282,"rel":118283},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23847],[40,118285,118286,118289],{},[1443,118287],{"alt":14,"src":118288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1443,118290],{"alt":14,"src":118291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[40,118293,118294],{},"在下方的网站，选择合适的版本。",[40,118296,118297,118298],{},"WSL2 专属 CUDA 指南：",[343,118299,118300],{"href":118300,"rel":118301},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23847],[40,118303,118304],{},[254,118305,118306],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[40,118308,118309],{},[1443,118310],{"alt":14,"src":118311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[40,118313,118314],{},"挨行敲一遍",[40,118316,118317],{},[1443,118318],{"alt":14,"src":118319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[40,118321,118322,118323,118326],{},"敲完后，输入",[91,118324,118325],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[40,118328,118329],{},[1443,118330],{"alt":14,"src":118331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[40,118333,118334,118335,118338],{},"（请详看下方教程的",[254,118336,118337],{},"安装CUDA的配置环境来看","如何配置环境）",[22892,118340,118342],{"id":118341},"_23323-cudnn","2.3.3.2.3 cuDNN",[40,118344,118251],{},[40,118346,118347],{},[1443,118348],{"alt":14,"src":118349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[21980,118351,118353],{"id":118352},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[40,118355,118356],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[40,118358,118359],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[40,118361,118362],{},[1443,118363],{"alt":14,"src":118364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[40,118366,118367],{},"连接WSL2",[40,118369,118370],{},[1443,118371],{"alt":14,"src":118372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[40,118374,118375],{},"远程开发成功。",[40,118377,118378],{},[1443,118379],{"alt":14,"src":118380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[40,118382,118383],{},[1443,118384],{"alt":14,"src":118385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[40,118387,118388],{},[1443,118389],{"alt":14,"src":118390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[21980,118392,118394],{"id":118393},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[40,118396,118397],{},[1443,118398],{"alt":14,"src":118399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[21980,118401,118403],{"id":118402},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[85,118405,118407],{"className":117273,"code":118406,"language":117275,"meta":14,"style":14},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[91,118408,118409,118417,118425,118436,118440],{"__ignoreMap":14},[94,118410,118411,118413,118415],{"class":96,"line":97},[94,118412,24559],{"class":1944},[94,118414,117294],{"class":209},[94,118416,26225],{"class":209},[94,118418,118419,118421,118423],{"class":96,"line":15},[94,118420,24559],{"class":1944},[94,118422,117294],{"class":209},[94,118424,117310],{"class":209},[94,118426,118427,118429,118431,118433],{"class":96,"line":1160},[94,118428,24559],{"class":1944},[94,118430,117294],{"class":209},[94,118432,23816],{"class":209},[94,118434,118435],{"class":209}," mesa-utils\n",[94,118437,118438],{"class":96,"line":1175},[94,118439,2381],{"emptyLinePlaceholder":20},[94,118441,118442],{"class":96,"line":1181},[94,118443,118444],{"class":163},"#然后重启wsl2即可\n",[5108,118446,118447],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":14,"searchDepth":15,"depth":15,"links":118449},[118450,118451,118456],{"id":117727,"depth":15,"text":117728},{"id":117740,"depth":15,"text":117741,"children":118452},[118453,118454,118455],{"id":117744,"depth":1160,"text":117745},{"id":117791,"depth":1160,"text":117792},{"id":117852,"depth":1160,"text":117853},{"id":117888,"depth":15,"text":117889,"children":118457},[118458,118459,118460],{"id":117892,"depth":1160,"text":117893},{"id":117954,"depth":1160,"text":117955},{"id":118243,"depth":1160,"text":118244},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117719,"description":17},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118467,"title":118468,"body":118469,"description":17,"extension":18,"meta":121405,"navigation":20,"path":121406,"seo":121407,"stem":121408,"__hash__":121409},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118470,"toc":121377},[118471,118474,118478,118484,118488,118494,118498,118686,118689,118694,118698,118702,118705,118708,118714,118719,118722,118725,118730,118763,118768,118772,118849,118852,118857,118861,118864,118903,118906,118915,118933,118938,118945,119062,119067,119070,119097,119102,119106,119115,119165,119172,119176,119179,119193,119200,119234,119239,119243,119266,119269,119274,119278,119281,119284,119287,119329,119333,119336,119339,119380,119384,119388,119391,119396,119401,119404,119427,119430,119438,119443,119446,119451,119456,119459,119464,119468,119473,119496,119501,119563,119571,119576,119581,119584,119589,119592,119597,119602,119620,119625,119631,119636,119650,119654,119657,119660,119663,119706,119709,119714,119815,119818,119823,119827,119831,119868,119872,119876,119880,119926,119930,119975,119979,119986,119994,120049,120052,120129,120132,120155,120159,120162,120167,120172,120180,120183,120188,120193,120198,120201,120206,120215,120218,120223,120226,120297,120302,120305,120310,120313,120318,120321,120326,120329,120334,120339,120342,120417,120420,120433,120438,120441,120455,120458,120487,120492,120521,120524,120529,120533,120538,120547,120550,120555,120558,120563,120566,120569,120574,120577,120582,120587,120590,120595,120598,120723,120728,120758,120761,120766,120771,120788,120791,120834,120837,120864,120869,120882,121025,121029,121034,121048,121051,121102,121105,121135,121138,121154,121159,121173,121176,121243,121248,121257,121262,121265,121277,121282,121289,121313,121316,121321,121324,121343,121348,121355,121367,121374],[10,118472,118468],{"id":118473},"_3-安装必备配置",[35,118475,118477],{"id":118476},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[85,118479,118482],{"className":118480,"code":118481,"language":5169},[5167],"  打开下方网站（注意，该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",[91,118483,118481],{"__ignoreMap":14},[65,118485,118487],{"id":118486},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[85,118489,118492],{"className":118490,"code":118491,"language":5169},[5167],"  输入以下命令\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",[91,118493,118491],{"__ignoreMap":14},[65,118495,118497],{"id":118496},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[85,118499,118503],{"className":118500,"code":118501,"language":118502,"meta":14,"style":14},"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",[91,118504,118505,118513,118524,118536,118550,118554,118564,118569,118573,118577,118582,118586,118598,118602,118607,118611,118622,118626,118642,118646,118657,118661,118666,118670,118678],{"__ignoreMap":14},[94,118506,118507,118509,118511],{"class":96,"line":97},[94,118508,24559],{"class":1944},[94,118510,117294],{"class":209},[94,118512,26225],{"class":209},[94,118514,118515,118517,118519,118521],{"class":96,"line":15},[94,118516,24559],{"class":1944},[94,118518,117294],{"class":209},[94,118520,23816],{"class":209},[94,118522,118523],{"class":209}," vim\n",[94,118525,118526,118528,118531,118533],{"class":96,"line":1160},[94,118527,24559],{"class":1944},[94,118529,118530],{"class":209}," rm",[94,118532,25308],{"class":153},[94,118534,118535],{"class":209}," \u002Fetc\u002Fapt\u002Fsources.list\n",[94,118537,118538,118540,118542,118544,118547],{"class":96,"line":1175},[94,118539,24559],{"class":1944},[94,118541,118530],{"class":209},[94,118543,25308],{"class":153},[94,118545,118546],{"class":209}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[94,118548,118549],{"class":153},"**\n",[94,118551,118552],{"class":96,"line":1181},[94,118553,2381],{"emptyLinePlaceholder":20},[94,118555,118556,118558,118561],{"class":96,"line":1195},[94,118557,24559],{"class":1944},[94,118559,118560],{"class":209}," vim",[94,118562,118563],{"class":209}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[94,118565,118566],{"class":96,"line":1201},[94,118567,118568],{"class":209},"```\n",[94,118570,118571],{"class":96,"line":1292},[94,118572,2381],{"emptyLinePlaceholder":20},[94,118574,118575],{"class":96,"line":1298},[94,118576,2381],{"emptyLinePlaceholder":20},[94,118578,118579],{"class":96,"line":1310},[94,118580,118581],{"class":1944},"选择好Ubuntu版本后，复制下方的内容。\n",[94,118583,118584],{"class":96,"line":1593},[94,118585,2381],{"emptyLinePlaceholder":20},[94,118587,118588,118590,118593,118596],{"class":96,"line":1598},[94,118589,331],{"class":100},[94,118591,118592],{"class":209},"[](",[94,118594,118595],{"class":1944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[94,118597,111],{"class":209},[94,118599,118600],{"class":96,"line":1604},[94,118601,2381],{"emptyLinePlaceholder":20},[94,118603,118604],{"class":96,"line":1609},[94,118605,118606],{"class":1944},"粘贴进去\n",[94,118608,118609],{"class":96,"line":1623},[94,118610,2381],{"emptyLinePlaceholder":20},[94,118612,118613,118615,118617,118620],{"class":96,"line":1628},[94,118614,331],{"class":100},[94,118616,118592],{"class":209},[94,118618,118619],{"class":1944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[94,118621,111],{"class":209},[94,118623,118624],{"class":96,"line":1634},[94,118625,2381],{"emptyLinePlaceholder":20},[94,118627,118628,118631,118634,118637,118639],{"class":96,"line":1655},[94,118629,118630],{"class":1944},"按一下ESC，然后英文冒号，输入",[94,118632,118633],{"class":209}," `",[94,118635,118636],{"class":1944},":wq!",[94,118638,1077],{"class":209},[94,118640,118641],{"class":1944},"然后回车\n",[94,118643,118644],{"class":96,"line":1660},[94,118645,2381],{"emptyLinePlaceholder":20},[94,118647,118648,118650,118652,118655],{"class":96,"line":1674},[94,118649,331],{"class":100},[94,118651,118592],{"class":209},[94,118653,118654],{"class":1944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[94,118656,111],{"class":209},[94,118658,118659],{"class":96,"line":1679},[94,118660,2381],{"emptyLinePlaceholder":20},[94,118662,118663],{"class":96,"line":1708},[94,118664,118665],{"class":1944},"输入以下命令\n",[94,118667,118668],{"class":96,"line":1713},[94,118669,2381],{"emptyLinePlaceholder":20},[94,118671,118672,118675],{"class":96,"line":1730},[94,118673,118674],{"class":209},"```",[94,118676,118677],{"class":1944},"Bash\n",[94,118679,118680,118682,118684],{"class":96,"line":1735},[94,118681,24559],{"class":1944},[94,118683,117294],{"class":209},[94,118685,26225],{"class":209},[40,118687,118688],{},"这里被替换成对应学校则成功",[40,118690,118691],{},[1443,118692],{"alt":14,"src":118693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[35,118695,118697],{"id":118696},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[65,118699,118701],{"id":118700},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[40,118703,118704],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[40,118706,118707],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[40,118709,118710],{},[343,118711,118712],{"href":118712,"rel":118713},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23847],[40,118715,118716],{},[1443,118717],{"alt":14,"src":118718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[40,118720,118721],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[40,118723,118724],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[40,118726,118727],{},[1443,118728],{"alt":14,"src":118729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[85,118731,118733],{"className":117273,"code":118732,"language":117275,"meta":14,"style":14},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[91,118734,118735,118740,118747,118752],{"__ignoreMap":14},[94,118736,118737],{"class":96,"line":97},[94,118738,118739],{"class":163},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[94,118741,118742,118744],{"class":96,"line":15},[94,118743,101253],{"class":153},[94,118745,118746],{"class":209}," ~\u002FDownloads\n",[94,118748,118749],{"class":96,"line":1160},[94,118750,118751],{"class":163},"#下方chrome安装包名不一定是这个，根据名字来看\n",[94,118753,118754,118756,118758,118760],{"class":96,"line":1175},[94,118755,24559],{"class":1944},[94,118757,117294],{"class":209},[94,118759,23816],{"class":209},[94,118761,118762],{"class":209}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[40,118764,118765],{},[1443,118766],{"alt":14,"src":118767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[65,118769,118771],{"id":118770},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[85,118773,118775],{"className":117273,"code":118774,"language":117275,"meta":14,"style":14},"# 老版\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",[91,118776,118777,118782,118790,118801,118806,118810,118815,118825,118833,118844],{"__ignoreMap":14},[94,118778,118779],{"class":96,"line":97},[94,118780,118781],{"class":163},"# 老版\n",[94,118783,118784,118786,118788],{"class":96,"line":15},[94,118785,24559],{"class":1944},[94,118787,117294],{"class":209},[94,118789,26225],{"class":209},[94,118791,118792,118794,118796,118798],{"class":96,"line":1160},[94,118793,24559],{"class":1944},[94,118795,117294],{"class":209},[94,118797,23816],{"class":209},[94,118799,118800],{"class":209}," neofetch\n",[94,118802,118803],{"class":96,"line":1175},[94,118804,118805],{"class":1944},"neofetch\n",[94,118807,118808],{"class":96,"line":1181},[94,118809,2381],{"emptyLinePlaceholder":20},[94,118811,118812],{"class":96,"line":1195},[94,118813,118814],{"class":163},"# 新版\n",[94,118816,118817,118819,118822],{"class":96,"line":1201},[94,118818,24559],{"class":1944},[94,118820,118821],{"class":209}," add-apt-repository",[94,118823,118824],{"class":209}," ppa:zhangsongcui3371\u002Ffastfetch\n",[94,118826,118827,118829,118831],{"class":96,"line":1292},[94,118828,24559],{"class":1944},[94,118830,117294],{"class":209},[94,118832,26225],{"class":209},[94,118834,118835,118837,118839,118841],{"class":96,"line":1298},[94,118836,24559],{"class":1944},[94,118838,117294],{"class":209},[94,118840,23816],{"class":209},[94,118842,118843],{"class":209}," fastfetch\n",[94,118845,118846],{"class":96,"line":1310},[94,118847,118848],{"class":1944},"fastfetch\n",[40,118850,118851],{},"这里显示，一共有3162个debian的程序，7个snap程序",[40,118853,118854],{},[1443,118855],{"alt":14,"src":118856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[65,118858,118860],{"id":118859},"_323-移除snap应用","3.2.3 移除snap应用",[40,118862,118863],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[85,118865,118867],{"className":117273,"code":118866,"language":117275,"meta":14,"style":14},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[91,118868,118869,118881,118892],{"__ignoreMap":14},[94,118870,118871,118873,118875,118878],{"class":96,"line":97},[94,118872,24559],{"class":1944},[94,118874,26496],{"class":209},[94,118876,118877],{"class":209}," disable",[94,118879,118880],{"class":209}," snapd.service\n",[94,118882,118883,118885,118887,118889],{"class":96,"line":15},[94,118884,24559],{"class":1944},[94,118886,26496],{"class":209},[94,118888,118877],{"class":209},[94,118890,118891],{"class":209}," snapd.socket\n",[94,118893,118894,118896,118898,118900],{"class":96,"line":1160},[94,118895,24559],{"class":1944},[94,118897,26496],{"class":209},[94,118899,118877],{"class":209},[94,118901,118902],{"class":209}," snapd.seeded.service\n",[40,118904,118905],{},"然后查看snap应用列表",[40,118907,118908,118909,118914],{},"根据你安装的选择不同（最小安装或普通安装），有",[343,118910,118913],{"href":118911,"rel":118912},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23847],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[85,118916,118918],{"className":117273,"code":118917,"language":117275,"meta":14,"style":14},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[91,118919,118920,118925],{"__ignoreMap":14},[94,118921,118922],{"class":96,"line":97},[94,118923,118924],{"class":163},"# 查询当前系统上snap安装了哪些app\n",[94,118926,118927,118930],{"class":96,"line":15},[94,118928,118929],{"class":1944},"snap",[94,118931,118932],{"class":209}," list\n",[40,118934,118935],{},[1443,118936],{"alt":14,"src":118937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[40,118939,118940,118941,118944],{},"卸载掉图中所有应用，按照 ",[254,118942,118943],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[85,118946,118948],{"className":117273,"code":118947,"language":117275,"meta":14,"style":14},"#移除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",[91,118949,118950,118955,118967,118972,118983,118988,118999,119004,119015,119020,119024,119029,119040,119051],{"__ignoreMap":14},[94,118951,118952],{"class":96,"line":97},[94,118953,118954],{"class":163},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[94,118956,118957,118959,118962,118964],{"class":96,"line":15},[94,118958,24559],{"class":1944},[94,118960,118961],{"class":209}," snap",[94,118963,26062],{"class":209},[94,118965,118966],{"class":209}," snap-store\n",[94,118968,118969],{"class":96,"line":1160},[94,118970,118971],{"class":163},"#移除firefox浏览器\n",[94,118973,118974,118976,118978,118980],{"class":96,"line":1175},[94,118975,24559],{"class":1944},[94,118977,118961],{"class":209},[94,118979,26062],{"class":209},[94,118981,118982],{"class":209}," firefox\n",[94,118984,118985],{"class":96,"line":1181},[94,118986,118987],{"class":163},"#移除gnome-42-2204\n",[94,118989,118990,118992,118994,118996],{"class":96,"line":1195},[94,118991,24559],{"class":1944},[94,118993,118961],{"class":209},[94,118995,26062],{"class":209},[94,118997,118998],{"class":209}," gnome-42-2204\n",[94,119000,119001],{"class":96,"line":1201},[94,119002,119003],{"class":163},"#移除gtk-common-themes\n",[94,119005,119006,119008,119010,119012],{"class":96,"line":1292},[94,119007,24559],{"class":1944},[94,119009,118961],{"class":209},[94,119011,26062],{"class":209},[94,119013,119014],{"class":209}," gtk-common-themes\n",[94,119016,119017],{"class":96,"line":1298},[94,119018,119019],{"class":163},"#移除其它...\n",[94,119021,119022],{"class":96,"line":1310},[94,119023,2655],{"class":104},[94,119025,119026],{"class":96,"line":1593},[94,119027,119028],{"class":163},"#移除core22,bare以及snapd\n",[94,119030,119031,119033,119035,119037],{"class":96,"line":1598},[94,119032,24559],{"class":1944},[94,119034,118961],{"class":209},[94,119036,26062],{"class":209},[94,119038,119039],{"class":209}," core22\n",[94,119041,119042,119044,119046,119048],{"class":96,"line":1604},[94,119043,24559],{"class":1944},[94,119045,118961],{"class":209},[94,119047,26062],{"class":209},[94,119049,119050],{"class":209}," bare\n",[94,119052,119053,119055,119057,119059],{"class":96,"line":1609},[94,119054,24559],{"class":1944},[94,119056,118961],{"class":209},[94,119058,26062],{"class":209},[94,119060,119061],{"class":209}," snapd\n",[40,119063,119064],{},[1443,119065],{"alt":14,"src":119066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[40,119068,119069],{},"输入以下命令查看是否还有snap包",[85,119071,119073],{"className":117273,"code":119072,"language":117275,"meta":14,"style":14},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[91,119074,119075,119081,119085,119089,119093],{"__ignoreMap":14},[94,119076,119077,119079],{"class":96,"line":97},[94,119078,118929],{"class":1944},[94,119080,118932],{"class":209},[94,119082,119083],{"class":96,"line":15},[94,119084,118781],{"class":163},[94,119086,119087],{"class":96,"line":1160},[94,119088,118805],{"class":1944},[94,119090,119091],{"class":96,"line":1175},[94,119092,118814],{"class":163},[94,119094,119095],{"class":96,"line":1181},[94,119096,118848],{"class":1944},[40,119098,119099],{},[1443,119100],{"alt":14,"src":119101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[65,119103,119105],{"id":119104},"_324-移除snap","3.2.4 移除snap",[40,119107,119108,119109,119114],{},"在删除掉",[343,119110,119113],{"href":119111,"rel":119112},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23847],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[85,119116,119118],{"className":117273,"code":119117,"language":117275,"meta":14,"style":14}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[91,119119,119120,119125,119138,119143,119154],{"__ignoreMap":14},[94,119121,119122],{"class":96,"line":97},[94,119123,119124],{"class":163}," #使用apt移除掉snap\n",[94,119126,119127,119129,119131,119133,119136],{"class":96,"line":15},[94,119128,24559],{"class":1944},[94,119130,117294],{"class":209},[94,119132,117602],{"class":209},[94,119134,119135],{"class":153}," --purge",[94,119137,119061],{"class":209},[94,119139,119140],{"class":96,"line":1160},[94,119141,119142],{"class":163},"#移除snapd的一些目录\n",[94,119144,119145,119147,119149,119151],{"class":96,"line":1175},[94,119146,24559],{"class":1944},[94,119148,118530],{"class":209},[94,119150,25308],{"class":153},[94,119152,119153],{"class":209}," \u002Fvar\u002Fcache\u002Fsnapd\n",[94,119155,119156,119158,119160,119162],{"class":96,"line":1181},[94,119157,24559],{"class":1944},[94,119159,118530],{"class":209},[94,119161,25308],{"class":153},[94,119163,119164],{"class":209}," ~\u002Fsnap\n",[40,119166,119167,119168,119171],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[91,119169,119170],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[65,119173,119175],{"id":119174},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[40,119177,119178],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[85,119180,119182],{"className":117273,"code":119181,"language":117275,"meta":14,"style":14},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[91,119183,119184],{"__ignoreMap":14},[94,119185,119186,119188,119190],{"class":96,"line":97},[94,119187,24559],{"class":1944},[94,119189,118560],{"class":209},[94,119191,119192],{"class":209}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[40,119194,119195,119196,119199],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[91,119197,119198],{},":wq"," 回车",[85,119201,119203],{"className":117273,"code":119202,"language":117275,"meta":14,"style":14},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[91,119204,119205,119212,119226],{"__ignoreMap":14},[94,119206,119207,119210],{"class":96,"line":97},[94,119208,119209],{"class":1944},"Package:",[94,119211,119061],{"class":209},[94,119213,119214,119217,119220,119223],{"class":96,"line":15},[94,119215,119216],{"class":1944},"Pin:",[94,119218,119219],{"class":209}," release",[94,119221,119222],{"class":209}," a=",[94,119224,119225],{"class":153},"*\n",[94,119227,119228,119231],{"class":96,"line":1160},[94,119229,119230],{"class":1944},"Pin-Priority:",[94,119232,119233],{"class":153}," -10\n",[40,119235,119236],{},[1443,119237],{"alt":14,"src":119238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[65,119240,119242],{"id":119241},"_326-测试是否成功","3.2.6 测试是否成功",[85,119244,119246],{"className":117273,"code":119245,"language":117275,"meta":14,"style":14},"sudo apt update\nsudo apt install firefox\n",[91,119247,119248,119256],{"__ignoreMap":14},[94,119249,119250,119252,119254],{"class":96,"line":97},[94,119251,24559],{"class":1944},[94,119253,117294],{"class":209},[94,119255,26225],{"class":209},[94,119257,119258,119260,119262,119264],{"class":96,"line":15},[94,119259,24559],{"class":1944},[94,119261,117294],{"class":209},[94,119263,23816],{"class":209},[94,119265,118982],{"class":209},[40,119267,119268],{},"这里提示snapd无法被安装，就证明成功了",[40,119270,119271],{},[1443,119272],{"alt":14,"src":119273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[65,119275,119277],{"id":119276},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[40,119279,119280],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[40,119282,119283],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[40,119285,119286],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[85,119288,119290],{"className":117273,"code":119289,"language":117275,"meta":14,"style":14},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[91,119291,119292,119297,119306,119311,119319],{"__ignoreMap":14},[94,119293,119294],{"class":96,"line":97},[94,119295,119296],{"class":163},"# 添加Mozilla提供的源\n",[94,119298,119299,119301,119303],{"class":96,"line":15},[94,119300,24559],{"class":1944},[94,119302,118821],{"class":209},[94,119304,119305],{"class":209}," ppa:mozillateam\u002Fppa\n",[94,119307,119308],{"class":96,"line":1160},[94,119309,119310],{"class":163},"# 安装Firefox\n",[94,119312,119313,119315,119317],{"class":96,"line":1175},[94,119314,24559],{"class":1944},[94,119316,117294],{"class":209},[94,119318,26225],{"class":209},[94,119320,119321,119323,119325,119327],{"class":96,"line":1181},[94,119322,24559],{"class":1944},[94,119324,117294],{"class":209},[94,119326,23816],{"class":209},[94,119328,118982],{"class":209},[65,119330,119332],{"id":119331},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[40,119334,119335],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[40,119337,119338],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[85,119340,119342],{"className":117273,"code":119341,"language":117275,"meta":14,"style":14},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[91,119343,119344,119349,119359,119367,119371],{"__ignoreMap":14},[94,119345,119346],{"class":96,"line":97},[94,119347,119348],{"class":163},"#删掉禁止安装snap的配置文件\n",[94,119350,119351,119353,119355,119357],{"class":96,"line":15},[94,119352,24559],{"class":1944},[94,119354,118530],{"class":209},[94,119356,25308],{"class":153},[94,119358,119192],{"class":209},[94,119360,119361,119363,119365],{"class":96,"line":1160},[94,119362,24559],{"class":1944},[94,119364,117294],{"class":209},[94,119366,26225],{"class":209},[94,119368,119369],{"class":96,"line":1175},[94,119370,2381],{"emptyLinePlaceholder":20},[94,119372,119373,119375,119377],{"class":96,"line":1181},[94,119374,24559],{"class":1944},[94,119376,117294],{"class":209},[94,119378,119379],{"class":209}," dist-update\n",[35,119381,119383],{"id":119382},"_33-中文输入法","3.3 中文输入法",[65,119385,119387],{"id":119386},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[40,119389,119390],{},"官网下载搜狗输入法",[40,119392,119393],{},[1443,119394],{"alt":14,"src":119395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[40,119397,119398],{},[1443,119399],{"alt":14,"src":119400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[40,119402,119403],{},"打开终端输入如下",[85,119405,119407],{"className":117273,"code":119406,"language":117275,"meta":14,"style":14},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[91,119408,119409,119416],{"__ignoreMap":14},[94,119410,119411,119413],{"class":96,"line":97},[94,119412,101253],{"class":153},[94,119414,119415],{"class":209}," ~\u002FDownloads\u002F\n",[94,119417,119418,119420,119422,119424],{"class":96,"line":15},[94,119419,24559],{"class":1944},[94,119421,117294],{"class":209},[94,119423,23816],{"class":209},[94,119425,119426],{"class":209}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[40,119428,119429],{},"打开Fcitx",[40,119431,119432,119435],{},[1443,119433],{"alt":14,"src":119434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1443,119436],{"alt":14,"src":119437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[40,119439,119440],{},[1443,119441],{"alt":14,"src":119442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[40,119444,119445],{},"添加搜狗输入法",[40,119447,119448],{},[1443,119449],{"alt":14,"src":119450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[40,119452,119453],{},[1443,119454],{"alt":14,"src":119455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[40,119457,119458],{},"将搜狗输入法设置为唯一输入法",[40,119460,119461],{},[1443,119462],{"alt":14,"src":119463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[65,119465,119467],{"id":119466},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[48,119469,119470],{},[51,119471,119472],{},"卸载旧输入法",[85,119474,119476],{"className":118500,"code":119475,"language":118502,"meta":14,"style":14},"sudo apt purge fcitx* ibus*\n",[91,119477,119478],{"__ignoreMap":14},[94,119479,119480,119482,119484,119486,119489,119491,119494],{"class":96,"line":97},[94,119481,24559],{"class":1944},[94,119483,117294],{"class":209},[94,119485,117635],{"class":209},[94,119487,119488],{"class":209}," fcitx",[94,119490,560],{"class":153},[94,119492,119493],{"class":209}," ibus",[94,119495,119225],{"class":153},[48,119497,119498],{"start":15},[51,119499,119500],{},"安装Fcitx5",[85,119502,119504],{"className":117273,"code":119503,"language":117275,"meta":14,"style":14},"# 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",[91,119505,119506,119511,119525,119529,119534,119543,119551],{"__ignoreMap":14},[94,119507,119508],{"class":96,"line":97},[94,119509,119510],{"class":163},"# Ubuntu22.04及以上、Debian12及以上\n",[94,119512,119513,119515,119517,119519,119522],{"class":96,"line":15},[94,119514,24559],{"class":1944},[94,119516,117294],{"class":209},[94,119518,23816],{"class":209},[94,119520,119521],{"class":209}," fcitx5",[94,119523,119524],{"class":209}," fcitx5-chinese-addons\n",[94,119526,119527],{"class":96,"line":1160},[94,119528,2381],{"emptyLinePlaceholder":20},[94,119530,119531],{"class":96,"line":1175},[94,119532,119533],{"class":163},"# Ubuntu20.04\n",[94,119535,119536,119538,119540],{"class":96,"line":1181},[94,119537,24559],{"class":1944},[94,119539,118821],{"class":209},[94,119541,119542],{"class":209}," ppa:zhsj\u002Ffcitx5\n",[94,119544,119545,119547,119549],{"class":96,"line":1195},[94,119546,24559],{"class":1944},[94,119548,117294],{"class":209},[94,119550,26225],{"class":209},[94,119552,119553,119555,119557,119559,119561],{"class":96,"line":1201},[94,119554,24559],{"class":1944},[94,119556,117294],{"class":209},[94,119558,23816],{"class":209},[94,119560,119521],{"class":209},[94,119562,119524],{"class":209},[48,119564,119565,119568],{"start":1160},[51,119566,119567],{},"Reboot System",[51,119569,119570],{},"启动Fcitx5",[40,119572,119573],{},[1443,119574],{"alt":14,"src":119575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[48,119577,119578],{"start":1181},[51,119579,119580],{},"修改一些设置",[40,119582,119583],{},"将Pinyin和Keyboard - English US加入到左边。",[40,119585,119586],{},[1443,119587],{"alt":14,"src":119588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[40,119590,119591],{},"添加快捷键以便于更好切换中英文",[40,119593,119594],{},[1443,119595],{"alt":14,"src":119596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[48,119598,119599],{"start":1195},[51,119600,119601],{},"重启",[85,119603,119605],{"className":118500,"code":119604,"language":118502,"meta":14,"style":14},"sudo shutdown -r now\n",[91,119606,119607],{"__ignoreMap":14},[94,119608,119609,119611,119614,119617],{"class":96,"line":97},[94,119610,24559],{"class":1944},[94,119612,119613],{"class":209}," shutdown",[94,119615,119616],{"class":153}," -r",[94,119618,119619],{"class":209}," now\n",[48,119621,119622],{"start":1201},[51,119623,119624],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[40,119626,119627],{},[343,119628,119629],{"href":119629,"rel":119630},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23847],[48,119632,119633],{"start":1292},[51,119634,119635],{},"再重启",[85,119637,119638],{"className":118500,"code":119604,"language":118502,"meta":14,"style":14},[91,119639,119640],{"__ignoreMap":14},[94,119641,119642,119644,119646,119648],{"class":96,"line":97},[94,119643,24559],{"class":1944},[94,119645,119613],{"class":209},[94,119647,119616],{"class":153},[94,119649,119619],{"class":209},[35,119651,119653],{"id":119652},"_34-pip3源替换","3.4 pip3源替换",[40,119655,119656],{},"非Debian系发行版需要做。",[40,119658,119659],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[40,119661,119662],{},"使用dnf的系统也可能不用做。",[85,119664,119666],{"className":117273,"code":119665,"language":117275,"meta":14,"style":14},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[91,119667,119668,119673,119680,119685,119690],{"__ignoreMap":14},[94,119669,119670],{"class":96,"line":97},[94,119671,119672],{"class":163},"# 检查是否已安装 pip\n",[94,119674,119675,119678],{"class":96,"line":15},[94,119676,119677],{"class":1944},"pip3",[94,119679,26276],{"class":153},[94,119681,119682],{"class":96,"line":1160},[94,119683,119684],{"class":163},"# 如果未安装，先安装 pip3（见下方）\n",[94,119686,119687],{"class":96,"line":1175},[94,119688,119689],{"class":163},"# 配置 pip 使用清华源\n",[94,119691,119692,119694,119697,119700,119703],{"class":96,"line":1181},[94,119693,119677],{"class":1944},[94,119695,119696],{"class":209}," config",[94,119698,119699],{"class":209}," set",[94,119701,119702],{"class":209}," global.index-url",[94,119704,119705],{"class":209}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[40,119707,119708],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[40,119710,119711],{},[1443,119712],{"alt":14,"src":119713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[85,119715,119717],{"className":117273,"code":119716,"language":117275,"meta":14,"style":14},"#安装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",[91,119718,119719,119724,119732,119743,119747,119752,119771,119775,119780,119792,119796,119801],{"__ignoreMap":14},[94,119720,119721],{"class":96,"line":97},[94,119722,119723],{"class":163},"#安装pip3\n",[94,119725,119726,119728,119730],{"class":96,"line":15},[94,119727,24559],{"class":1944},[94,119729,117294],{"class":209},[94,119731,26225],{"class":209},[94,119733,119734,119736,119738,119740],{"class":96,"line":1160},[94,119735,24559],{"class":1944},[94,119737,26059],{"class":209},[94,119739,23816],{"class":209},[94,119741,119742],{"class":209}," python3-pip\n",[94,119744,119745],{"class":96,"line":1175},[94,119746,2381],{"emptyLinePlaceholder":20},[94,119748,119749],{"class":96,"line":1181},[94,119750,119751],{"class":163},"#更新pip3\n",[94,119753,119754,119756,119758,119760,119762,119764,119767,119769],{"class":96,"line":1195},[94,119755,100856],{"class":1944},[94,119757,100859],{"class":153},[94,119759,100882],{"class":209},[94,119761,23816],{"class":209},[94,119763,26413],{"class":153},[94,119765,119766],{"class":209}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[94,119768,100887],{"class":153},[94,119770,100890],{"class":209},[94,119772,119773],{"class":96,"line":1201},[94,119774,2381],{"emptyLinePlaceholder":20},[94,119776,119777],{"class":96,"line":1292},[94,119778,119779],{"class":163},"#设置pip源为清华源\n",[94,119781,119782,119784,119786,119788,119790],{"class":96,"line":1298},[94,119783,119677],{"class":1944},[94,119785,119696],{"class":209},[94,119787,119699],{"class":209},[94,119789,119702],{"class":209},[94,119791,119705],{"class":209},[94,119793,119794],{"class":96,"line":1310},[94,119795,2381],{"emptyLinePlaceholder":20},[94,119797,119798],{"class":96,"line":1593},[94,119799,119800],{"class":163},"#测试\n",[94,119802,119803,119805,119807,119809,119811,119813],{"class":96,"line":1598},[94,119804,100856],{"class":1944},[94,119806,100859],{"class":153},[94,119808,100882],{"class":209},[94,119810,23816],{"class":209},[94,119812,100887],{"class":153},[94,119814,100890],{"class":209},[40,119816,119817],{},"成功的话，会看到Looking后面是tsinghua字样。",[40,119819,119820],{},[1443,119821],{"alt":14,"src":119822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[35,119824,119826],{"id":119825},"_35-显卡驱动安装","3.5 显卡驱动安装",[65,119828,119830],{"id":119829},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[85,119832,119834],{"className":118500,"code":119833,"language":118502,"meta":14,"style":14},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[91,119835,119836,119841,119856,119861],{"__ignoreMap":14},[94,119837,119838],{"class":96,"line":97},[94,119839,119840],{"class":163},"# 如果是使用apt安装的驱动\n",[94,119842,119843,119845,119847,119849,119851,119854],{"class":96,"line":15},[94,119844,24559],{"class":1944},[94,119846,26059],{"class":209},[94,119848,26062],{"class":209},[94,119850,119135],{"class":153},[94,119852,119853],{"class":209}," nvidia",[94,119855,119225],{"class":153},[94,119857,119858],{"class":96,"line":1160},[94,119859,119860],{"class":163},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[94,119862,119863,119865],{"class":96,"line":1175},[94,119864,24559],{"class":1944},[94,119866,119867],{"class":209}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[65,119869,119871],{"id":119870},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[21980,119873,119875],{"id":119874},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22892,119877,119879],{"id":119878},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[85,119881,119883],{"className":118500,"code":119882,"language":118502,"meta":14,"style":14},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[91,119884,119885,119890,119901,119906,119916,119921],{"__ignoreMap":14},[94,119886,119887],{"class":96,"line":97},[94,119888,119889],{"class":163},"# 安装英伟达驱动\n",[94,119891,119892,119894,119896,119898],{"class":96,"line":15},[94,119893,24559],{"class":1944},[94,119895,117294],{"class":209},[94,119897,23816],{"class":209},[94,119899,119900],{"class":209}," nvidia-driver-版本号\n",[94,119902,119903],{"class":96,"line":1160},[94,119904,119905],{"class":163},"# 重启 \n",[94,119907,119908,119910,119912,119914],{"class":96,"line":1175},[94,119909,24559],{"class":1944},[94,119911,119613],{"class":209},[94,119913,119616],{"class":153},[94,119915,119619],{"class":209},[94,119917,119918],{"class":96,"line":1181},[94,119919,119920],{"class":163},"# 检查驱动是否安装成功\n",[94,119922,119923],{"class":96,"line":1195},[94,119924,119925],{"class":1944},"nvidia-smi\n",[22892,119927,119929],{"id":119928},"_35212-debian","3.5.2.1.2 Debian",[85,119931,119933],{"className":118500,"code":119932,"language":118502,"meta":14,"style":14},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[91,119934,119935,119939,119953,119957,119967,119971],{"__ignoreMap":14},[94,119936,119937],{"class":96,"line":97},[94,119938,119889],{"class":163},[94,119940,119941,119943,119945,119947,119950],{"class":96,"line":15},[94,119942,24559],{"class":1944},[94,119944,117294],{"class":209},[94,119946,23816],{"class":209},[94,119948,119949],{"class":209}," nvidia-driver",[94,119951,119952],{"class":209}," nvidia-settings\n",[94,119954,119955],{"class":96,"line":1160},[94,119956,119905],{"class":163},[94,119958,119959,119961,119963,119965],{"class":96,"line":1175},[94,119960,24559],{"class":1944},[94,119962,119613],{"class":209},[94,119964,119616],{"class":153},[94,119966,119619],{"class":209},[94,119968,119969],{"class":96,"line":1181},[94,119970,119920],{"class":163},[94,119972,119973],{"class":96,"line":1195},[94,119974,119925],{"class":1944},[21980,119976,119978],{"id":119977},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[40,119980,119981,119982,119985],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[254,119983,119984],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[40,119987,119988,119989],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23535,119990,119991],{},[254,119992,119993],{},"（也可以不禁用桌面环境，直接进行下一步。）",[85,119995,119997],{"className":118500,"code":119996,"language":118502,"meta":14,"style":14},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[91,119998,119999,120004,120014,120019,120032,120037],{"__ignoreMap":14},[94,120000,120001],{"class":96,"line":97},[94,120002,120003],{"class":163},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[94,120005,120006,120008,120011],{"class":96,"line":15},[94,120007,24559],{"class":1944},[94,120009,120010],{"class":209}," telinit",[94,120012,120013],{"class":153}," 3\n",[94,120015,120016],{"class":96,"line":1160},[94,120017,120018],{"class":163},"# ubuntu 使用下方命令\n",[94,120020,120021,120023,120026,120029],{"class":96,"line":1175},[94,120022,24559],{"class":1944},[94,120024,120025],{"class":209}," service",[94,120027,120028],{"class":209}," lightdm",[94,120030,120031],{"class":209}," stop\n",[94,120033,120034],{"class":96,"line":1181},[94,120035,120036],{"class":163},"# Fedora 使用下方命令\n",[94,120038,120039,120041,120043,120046],{"class":96,"line":1195},[94,120040,24559],{"class":1944},[94,120042,26496],{"class":209},[94,120044,120045],{"class":209}," isolate",[94,120047,120048],{"class":209}," multi-user.target\n",[40,120050,120051],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[85,120053,120055],{"className":118500,"code":120054,"language":118502,"meta":14,"style":14},"# 编译环境+准备工作\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",[91,120056,120057,120062,120073,120078,120085,120090,120102,120107,120114,120119],{"__ignoreMap":14},[94,120058,120059],{"class":96,"line":97},[94,120060,120061],{"class":163},"# 编译环境+准备工作\n",[94,120063,120064,120066,120068,120070],{"class":96,"line":15},[94,120065,24559],{"class":1944},[94,120067,117294],{"class":209},[94,120069,23816],{"class":209},[94,120071,120072],{"class":209}," build-essential\n",[94,120074,120075],{"class":96,"line":1160},[94,120076,120077],{"class":163},"# 进入到.run目录中\n",[94,120079,120080,120082],{"class":96,"line":1175},[94,120081,101253],{"class":153},[94,120083,120084],{"class":209}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[94,120086,120087],{"class":96,"line":1181},[94,120088,120089],{"class":163},"# 给驱动文件增加可执行权限：\n",[94,120091,120092,120094,120096,120099],{"class":96,"line":1195},[94,120093,24559],{"class":1944},[94,120095,24562],{"class":209},[94,120097,120098],{"class":209}," a+x",[94,120100,120101],{"class":209}," NVIDIA-Linux-x86_64-550.107.02.run\n",[94,120103,120104],{"class":96,"line":1201},[94,120105,120106],{"class":163},"# 然后执行安装：\n",[94,120108,120109,120111],{"class":96,"line":1292},[94,120110,24559],{"class":1944},[94,120112,120113],{"class":209}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[94,120115,120116],{"class":96,"line":1298},[94,120117,120118],{"class":163},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[94,120120,120121,120123,120126],{"class":96,"line":1310},[94,120122,24559],{"class":1944},[94,120124,120125],{"class":209}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[94,120127,120128],{"class":153},"  --no-opengl-files\n",[40,120130,120131],{},"安装完毕重启即可",[85,120133,120135],{"className":118500,"code":120134,"language":118502,"meta":14,"style":14},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[91,120136,120137,120141,120147,120151],{"__ignoreMap":14},[94,120138,120139],{"class":96,"line":97},[94,120140,119905],{"class":163},[94,120142,120143,120145],{"class":96,"line":15},[94,120144,24559],{"class":1944},[94,120146,26630],{"class":209},[94,120148,120149],{"class":96,"line":1160},[94,120150,119920],{"class":163},[94,120152,120153],{"class":96,"line":1175},[94,120154,119925],{"class":1944},[65,120156,120158],{"id":120157},"_353-安装cuda","3.5.3 安装CUDA",[40,120160,120161],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[40,120163,120164],{},[1443,120165],{"alt":14,"src":120166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[48,120168,120169],{},[51,120170,120171],{},"先查看显卡驱动所支持的最高CUDA版本",[85,120173,120174],{"className":118500,"code":119925,"language":118502,"meta":14,"style":14},[91,120175,120176],{"__ignoreMap":14},[94,120177,120178],{"class":96,"line":97},[94,120179,119925],{"class":1944},[40,120181,120182],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[40,120184,120185],{},[1443,120186],{"alt":14,"src":120187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[48,120189,120190],{"start":15},[51,120191,120192],{},"下载CUDA并安装CUDA",[40,120194,118279,120195],{},[343,120196,118282],{"href":118282,"rel":120197},[23847],[40,120199,120200],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[40,120202,120203],{},[1443,120204],{"alt":14,"src":120205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[40,120207,120208,120209,120214],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[343,120210,120213],{"href":120211,"rel":120212},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23847],"Vinci机器人队单片机教程","）",[40,120216,120217],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[40,120219,120220],{},[1443,120221],{"alt":14,"src":120222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[40,120224,120225],{},"将最下方框框里的命令敲入终端",[85,120227,120229],{"className":118500,"code":120228,"language":118502,"meta":14,"style":14},"# 在当前文件夹下创建一个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",[91,120230,120231,120236,120245,120250,120257,120262,120270,120275,120286,120291],{"__ignoreMap":14},[94,120232,120233],{"class":96,"line":97},[94,120234,120235],{"class":163},"# 在当前文件夹下创建一个ttt的子文件夹\n",[94,120237,120238,120240,120242],{"class":96,"line":15},[94,120239,101243],{"class":1944},[94,120241,29199],{"class":153},[94,120243,120244],{"class":209}," .\u002Fttt\n",[94,120246,120247],{"class":96,"line":1160},[94,120248,120249],{"class":163},"# 进入ttt文件夹\n",[94,120251,120252,120254],{"class":96,"line":1175},[94,120253,101253],{"class":153},[94,120255,120256],{"class":209}," ttt\n",[94,120258,120259],{"class":96,"line":1181},[94,120260,120261],{"class":163},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[94,120263,120264,120267],{"class":96,"line":1195},[94,120265,120266],{"class":1944},"wget",[94,120268,120269],{"class":209}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[94,120271,120272],{"class":96,"line":1201},[94,120273,120274],{"class":163},"# 给予权限\n",[94,120276,120277,120279,120281,120283],{"class":96,"line":1292},[94,120278,24559],{"class":1944},[94,120280,24562],{"class":209},[94,120282,120098],{"class":209},[94,120284,120285],{"class":209}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[94,120287,120288],{"class":96,"line":1298},[94,120289,120290],{"class":163},"# 运行脚本\n",[94,120292,120293,120295],{"class":96,"line":1310},[94,120294,24559],{"class":1944},[94,120296,120285],{"class":209},[40,120298,120299],{},[1443,120300],{"alt":14,"src":120301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[40,120303,120304],{},"正在安装中：",[40,120306,120307],{},[1443,120308],{"alt":14,"src":120309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[40,120311,120312],{},"输入accept接受即可",[40,120314,120315],{},[1443,120316],{"alt":14,"src":120317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[40,120319,120320],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[40,120322,120323],{},[1443,120324],{"alt":14,"src":120325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[40,120327,120328],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[40,120330,120331],{},[1443,120332],{"alt":14,"src":120333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[48,120335,120336],{"start":1160},[51,120337,120338],{},"配置环境",[40,120340,120341],{},"根据上方确认一下路径，比如我上面红色框起来的为",[85,120343,120345],{"className":118500,"code":120344,"language":118502,"meta":14,"style":14},"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",[91,120346,120347,120363,120378],{"__ignoreMap":14},[94,120348,120349,120352,120355,120358,120361],{"class":96,"line":97},[94,120350,120351],{"class":1944},"Please",[94,120353,120354],{"class":209}," make",[94,120356,120357],{"class":209}," sure",[94,120359,120360],{"class":209}," that",[94,120362,2655],{"class":104},[94,120364,120365,120367,120370,120373,120376],{"class":96,"line":15},[94,120366,52248],{"class":1944},[94,120368,120369],{"class":209},"   PATH",[94,120371,120372],{"class":209}," includes",[94,120374,120375],{"class":209}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[94,120377,2655],{"class":104},[94,120379,120380,120382,120385,120387,120390,120393,120395,120398,120401,120404,120407,120409,120412,120414],{"class":96,"line":1160},[94,120381,52248],{"class":1944},[94,120383,120384],{"class":209},"   LD_LIBRARY_PATH",[94,120386,120372],{"class":209},[94,120388,120389],{"class":209}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[94,120391,120392],{"class":209}," or,",[94,120394,5191],{"class":209},[94,120396,120397],{"class":209}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[94,120399,120400],{"class":209}," to",[94,120402,120403],{"class":209}," \u002Fetc\u002Fld.so.conf",[94,120405,120406],{"class":209}," and",[94,120408,27213],{"class":209},[94,120410,120411],{"class":209}," ldconfig",[94,120413,64581],{"class":209},[94,120415,120416],{"class":209}," root\n",[40,120418,120419],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[85,120421,120423],{"className":118500,"code":120422,"language":118502,"meta":14,"style":14},"which nvcc\n",[91,120424,120425],{"__ignoreMap":14},[94,120426,120427,120430],{"class":96,"line":97},[94,120428,120429],{"class":153},"which",[94,120431,120432],{"class":209}," nvcc\n",[40,120434,120435],{},[1443,120436],{"alt":14,"src":120437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[40,120439,120440],{},"所以我进行以下操作：",[85,120442,120444],{"className":118500,"code":120443,"language":118502,"meta":14,"style":14},"sudo vim ~\u002F.bashrc\n",[91,120445,120446],{"__ignoreMap":14},[94,120447,120448,120450,120452],{"class":96,"line":97},[94,120449,24559],{"class":1944},[94,120451,118560],{"class":209},[94,120453,120454],{"class":209}," ~\u002F.bashrc\n",[40,120456,120457],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[85,120459,120461],{"className":118500,"code":120460,"language":118502,"meta":14,"style":14},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[91,120462,120463,120475],{"__ignoreMap":14},[94,120464,120465,120467,120470,120472],{"class":96,"line":97},[94,120466,25025],{"class":100},[94,120468,120469],{"class":104}," PATH",[94,120471,150],{"class":100},[94,120473,120474],{"class":104},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[94,120476,120477,120479,120482,120484],{"class":96,"line":15},[94,120478,25025],{"class":100},[94,120480,120481],{"class":104}," LD_LIBRARY_PATH",[94,120483,150],{"class":100},[94,120485,120486],{"class":104},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[40,120488,120489],{},[1443,120490],{"alt":14,"src":120491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[85,120493,120495],{"className":118500,"code":120494,"language":118502,"meta":14,"style":14},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[91,120496,120497,120502,120508,120513],{"__ignoreMap":14},[94,120498,120499],{"class":96,"line":97},[94,120500,120501],{"class":163},"# 刷新当前终端的环境变量\n",[94,120503,120504,120506],{"class":96,"line":15},[94,120505,100870],{"class":153},[94,120507,120454],{"class":209},[94,120509,120510],{"class":96,"line":1160},[94,120511,120512],{"class":163},"# 验证CUDA是否安装成功\n",[94,120514,120515,120518],{"class":96,"line":1175},[94,120516,120517],{"class":1944},"nvcc",[94,120519,120520],{"class":153}," -V\n",[40,120522,120523],{},"出现下图这种则安装成功。",[40,120525,120526],{},[1443,120527],{"alt":14,"src":120528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[65,120530,120532],{"id":120531},"_354-安装cudnn","3.5.4 安装cuDNN",[48,120534,120535],{},[51,120536,120537],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[40,120539,120540,120541,120546],{},"前往 NVIDIA cuDNN 下载页面：",[343,120542,120545],{"href":120543,"rel":120544},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23847],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[40,120548,120549],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[40,120551,120552],{},[1443,120553],{"alt":14,"src":120554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[40,120556,120557],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[40,120559,120560],{},[1443,120561],{"alt":14,"src":120562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[40,120564,120565],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[40,120567,120568],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[40,120570,120571],{},[254,120572,120573],{},"我这里选择所有Linux X86_64最通用的办法：",[40,120575,120576],{},"下载好的：",[40,120578,120579],{},[1443,120580],{"alt":14,"src":120581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[48,120583,120584],{"start":15},[51,120585,120586],{},"安装cuDNN",[40,120588,120589],{},"找到该文件所在目录，并打开终端，cd到该目录。",[40,120591,120592],{},[1443,120593],{"alt":14,"src":120594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[40,120596,120597],{},"解压文件，并复制到对应位置完成安装",[85,120599,120601],{"className":118500,"code":120600,"language":118502,"meta":14,"style":14},"# 解压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",[91,120602,120603,120608,120619,120624,120631,120636,120652,120666,120671,120682,120691,120695,120711],{"__ignoreMap":14},[94,120604,120605],{"class":96,"line":97},[94,120606,120607],{"class":163},"# 解压cuDNN文件\n",[94,120609,120610,120613,120616],{"class":96,"line":15},[94,120611,120612],{"class":1944},"tar",[94,120614,120615],{"class":153}," -xvf",[94,120617,120618],{"class":209}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[94,120620,120621],{"class":96,"line":1160},[94,120622,120623],{"class":163},"# cd进文件夹\n",[94,120625,120626,120628],{"class":96,"line":1175},[94,120627,101253],{"class":153},[94,120629,120630],{"class":209}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[94,120632,120633],{"class":96,"line":1181},[94,120634,120635],{"class":163},"# 复制cuDNN文件到CUDA目录\n",[94,120637,120638,120640,120642,120645,120647,120650],{"class":96,"line":1195},[94,120639,24559],{"class":1944},[94,120641,27844],{"class":209},[94,120643,120644],{"class":209}," include\u002Fcudnn",[94,120646,560],{"class":153},[94,120648,120649],{"class":209},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[94,120651,2655],{"class":104},[94,120653,120654,120656,120658,120661,120663],{"class":96,"line":1201},[94,120655,24559],{"class":1944},[94,120657,27844],{"class":209},[94,120659,120660],{"class":209}," lib\u002Flibcudnn",[94,120662,560],{"class":153},[94,120664,120665],{"class":209},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[94,120667,120668],{"class":96,"line":1292},[94,120669,120670],{"class":163},"# 对比一下有没有缺文件\n",[94,120672,120673,120675,120678,120680],{"class":96,"line":1298},[94,120674,26744],{"class":1944},[94,120676,120677],{"class":209}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[94,120679,560],{"class":153},[94,120681,2655],{"class":104},[94,120683,120684,120686,120689],{"class":96,"line":1310},[94,120685,26744],{"class":1944},[94,120687,120688],{"class":209}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[94,120690,119225],{"class":153},[94,120692,120693],{"class":96,"line":1593},[94,120694,120274],{"class":163},[94,120696,120697,120699,120701,120704,120706,120708],{"class":96,"line":1598},[94,120698,24559],{"class":1944},[94,120700,24562],{"class":209},[94,120702,120703],{"class":209}," a+r",[94,120705,120677],{"class":209},[94,120707,560],{"class":153},[94,120709,120710],{"class":104},"   \n",[94,120712,120713,120715,120717,120719,120721],{"class":96,"line":1604},[94,120714,24559],{"class":1944},[94,120716,24562],{"class":209},[94,120718,120703],{"class":209},[94,120720,120688],{"class":209},[94,120722,119225],{"class":153},[48,120724,120725],{"start":1160},[51,120726,120727],{},"检查是否安装成功",[85,120729,120731],{"className":118500,"code":120730,"language":118502,"meta":14,"style":14},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[91,120732,120733,120738],{"__ignoreMap":14},[94,120734,120735],{"class":96,"line":97},[94,120736,120737],{"class":163},"# 检查cuDNN版本命令\n",[94,120739,120740,120743,120746,120748,120750,120753,120756],{"class":96,"line":15},[94,120741,120742],{"class":1944},"cat",[94,120744,120745],{"class":209}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[94,120747,25092],{"class":100},[94,120749,30219],{"class":1944},[94,120751,120752],{"class":209}," CUDNN_MAJOR",[94,120754,120755],{"class":153}," -A",[94,120757,47706],{"class":153},[40,120759,120760],{},"出现下图这样的就是安装成功了",[40,120762,120763],{},[1443,120764],{"alt":14,"src":120765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[48,120767,120768],{"start":1175},[51,120769,120770],{},"软链接(一般不需要)",[85,120772,120774],{"className":118500,"code":120773,"language":118502,"meta":14,"style":14},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[91,120775,120776,120781],{"__ignoreMap":14},[94,120777,120778],{"class":96,"line":97},[94,120779,120780],{"class":163},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[94,120782,120783,120785],{"class":96,"line":15},[94,120784,24559],{"class":1944},[94,120786,120787],{"class":209}," ldconfig\n",[40,120789,120790],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[85,120792,120797],{"className":120793,"code":120794,"language":120795,"meta":120796,"style":14},"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",[91,120798,120799,120804,120809,120814,120819,120824,120829],{"__ignoreMap":14},[94,120800,120801],{"class":96,"line":97},[94,120802,120803],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[94,120805,120806],{"class":96,"line":15},[94,120807,120808],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[94,120810,120811],{"class":96,"line":1160},[94,120812,120813],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[94,120815,120816],{"class":96,"line":1175},[94,120817,120818],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[94,120820,120821],{"class":96,"line":1181},[94,120822,120823],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[94,120825,120826],{"class":96,"line":1195},[94,120827,120828],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[94,120830,120831],{"class":96,"line":1201},[94,120832,120833],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[40,120835,120836],{},"运行下方的命令",[85,120838,120840],{"className":118500,"code":120839,"language":118502,"meta":14,"style":14},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[91,120841,120842,120847,120854,120859],{"__ignoreMap":14},[94,120843,120844],{"class":96,"line":97},[94,120845,120846],{"class":163},"# cd进入CUDA路径\n",[94,120848,120849,120851],{"class":96,"line":15},[94,120850,101253],{"class":153},[94,120852,120853],{"class":209}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[94,120855,120856],{"class":96,"line":1160},[94,120857,120858],{"class":163}," # 查看本路径下的需要软链接的文件名\n",[94,120860,120861],{"class":96,"line":1175},[94,120862,120863],{"class":1944}," ls\n",[40,120865,120866],{},[1443,120867],{"alt":14,"src":120868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[40,120870,120871,120872,18392,120875,18392,120878,120881],{},"如上图，我需要将",[91,120873,120874],{},"libcudnn_xxx_xxxxx.so.8.9.7",[91,120876,120877],{},"libcudnn_xxx_xxxxx.so.8",[91,120879,120880],{},"libcudnn_xxx_xxxxx.so","软链接",[85,120883,120885],{"className":118500,"code":120884,"language":118502,"meta":14,"style":14},"# 创建符号链接。对于每个 .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",[91,120886,120887,120892,120908,120922,120936,120950,120964,120978,120992,120997,121003,121008],{"__ignoreMap":14},[94,120888,120889],{"class":96,"line":97},[94,120890,120891],{"class":163},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[94,120893,120894,120896,120899,120902,120905],{"class":96,"line":15},[94,120895,24559],{"class":1944},[94,120897,120898],{"class":209}," ln",[94,120900,120901],{"class":153}," -sf",[94,120903,120904],{"class":209}," libcudnn_cnn_train.so.8.9.7",[94,120906,120907],{"class":209}," libcudnn_cnn_train.so.8\n",[94,120909,120910,120912,120914,120916,120919],{"class":96,"line":1160},[94,120911,24559],{"class":1944},[94,120913,120898],{"class":209},[94,120915,120901],{"class":153},[94,120917,120918],{"class":209}," libcudnn_adv_infer.so.8.9.7",[94,120920,120921],{"class":209}," libcudnn_adv_infer.so.8\n",[94,120923,120924,120926,120928,120930,120933],{"class":96,"line":1175},[94,120925,24559],{"class":1944},[94,120927,120898],{"class":209},[94,120929,120901],{"class":153},[94,120931,120932],{"class":209}," libcudnn_adv_train.so.8.9.7",[94,120934,120935],{"class":209}," libcudnn_adv_train.so.8\n",[94,120937,120938,120940,120942,120944,120947],{"class":96,"line":1181},[94,120939,24559],{"class":1944},[94,120941,120898],{"class":209},[94,120943,120901],{"class":153},[94,120945,120946],{"class":209}," libcudnn_cnn_infer.so.8.9.7",[94,120948,120949],{"class":209}," libcudnn_cnn_infer.so.8\n",[94,120951,120952,120954,120956,120958,120961],{"class":96,"line":1195},[94,120953,24559],{"class":1944},[94,120955,120898],{"class":209},[94,120957,120901],{"class":153},[94,120959,120960],{"class":209}," libcudnn.so.8.9.7",[94,120962,120963],{"class":209}," libcudnn.so.8\n",[94,120965,120966,120968,120970,120972,120975],{"class":96,"line":1201},[94,120967,24559],{"class":1944},[94,120969,120898],{"class":209},[94,120971,120901],{"class":153},[94,120973,120974],{"class":209}," libcudnn_ops_infer.so.8.9.7",[94,120976,120977],{"class":209}," libcudnn_ops_infer.so.8\n",[94,120979,120980,120982,120984,120986,120989],{"class":96,"line":1292},[94,120981,24559],{"class":1944},[94,120983,120898],{"class":209},[94,120985,120901],{"class":153},[94,120987,120988],{"class":209}," libcudnn_ops_train.so.8.9.7",[94,120990,120991],{"class":209}," libcudnn_ops_train.so.8\n",[94,120993,120994],{"class":96,"line":1298},[94,120995,120996],{"class":163},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[94,120998,120999,121001],{"class":96,"line":1310},[94,121000,24559],{"class":1944},[94,121002,120787],{"class":209},[94,121004,121005],{"class":96,"line":1593},[94,121006,121007],{"class":163},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[94,121009,121010,121012,121015,121018,121020,121023],{"class":96,"line":1598},[94,121011,26744],{"class":1944},[94,121013,121014],{"class":153}," -l",[94,121016,121017],{"class":209}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[94,121019,560],{"class":153},[94,121021,121022],{"class":209},".so",[94,121024,119225],{"class":153},[65,121026,121028],{"id":121027},"_355-常见问题","3.5.5 常见问题",[48,121030,121031],{},[51,121032,121033],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[85,121035,121037],{"className":118500,"code":121036,"language":118502,"meta":14,"style":14},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[91,121038,121039],{"__ignoreMap":14},[94,121040,121041,121043,121045],{"class":96,"line":97},[94,121042,24559],{"class":1944},[94,121044,118560],{"class":209},[94,121046,121047],{"class":209}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[40,121049,121050],{},"blacklist-nouveau.conf文件内容如下：",[85,121052,121054],{"className":118500,"code":121053,"language":118502,"meta":14,"style":14},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[91,121055,121056,121064,121071,121083,121093],{"__ignoreMap":14},[94,121057,121058,121061],{"class":96,"line":97},[94,121059,121060],{"class":1944},"blacklist",[94,121062,121063],{"class":209}," nouveau\n",[94,121065,121066,121068],{"class":96,"line":15},[94,121067,121060],{"class":1944},[94,121069,121070],{"class":209}," lbm-nouveau\n",[94,121072,121073,121075,121078,121081],{"class":96,"line":1160},[94,121074,115907],{"class":1944},[94,121076,121077],{"class":209}," nouveau",[94,121079,121080],{"class":209}," modeset=",[94,121082,3066],{"class":153},[94,121084,121085,121088,121090],{"class":96,"line":1175},[94,121086,121087],{"class":153},"alias",[94,121089,121077],{"class":209},[94,121091,121092],{"class":209}," off\n",[94,121094,121095,121097,121100],{"class":96,"line":1181},[94,121096,121087],{"class":153},[94,121098,121099],{"class":209}," lbm-nouveau",[94,121101,121092],{"class":209},[40,121103,121104],{},"接着运行下方命令",[85,121106,121108],{"className":118500,"code":121107,"language":118502,"meta":14,"style":14},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[91,121109,121110,121120,121125],{"__ignoreMap":14},[94,121111,121112,121114,121117],{"class":96,"line":97},[94,121113,24559],{"class":1944},[94,121115,121116],{"class":209}," update-initramfs",[94,121118,121119],{"class":153}," -u\n",[94,121121,121122],{"class":96,"line":15},[94,121123,121124],{"class":1944},"或者\n",[94,121126,121127,121129,121132],{"class":96,"line":1160},[94,121128,24559],{"class":1944},[94,121130,121131],{"class":209}," dracut",[94,121133,121134],{"class":153}," --force\n",[40,121136,121137],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[85,121139,121141],{"className":118500,"code":121140,"language":118502,"meta":14,"style":14},"lsmod | grep nouveau\n",[91,121142,121143],{"__ignoreMap":14},[94,121144,121145,121148,121150,121152],{"class":96,"line":97},[94,121146,121147],{"class":1944},"lsmod",[94,121149,25092],{"class":100},[94,121151,30219],{"class":1944},[94,121153,121063],{"class":209},[48,121155,121156],{"start":15},[51,121157,121158],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[85,121160,121162],{"className":118500,"code":121161,"language":118502,"meta":14,"style":14},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[91,121163,121164],{"__ignoreMap":14},[94,121165,121166,121168,121170],{"class":96,"line":97},[94,121167,24559],{"class":1944},[94,121169,118560],{"class":209},[94,121171,121172],{"class":209}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[40,121174,121175],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[85,121177,121179],{"className":118500,"code":121178,"language":118502,"meta":14,"style":14},"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",[91,121180,121181,121189,121197,121205,121212,121220,121230,121238],{"__ignoreMap":14},[94,121182,121183,121186],{"class":96,"line":97},[94,121184,121185],{"class":1944},"Section",[94,121187,121188],{"class":209}," \"OutputClass\"\n",[94,121190,121191,121194],{"class":96,"line":15},[94,121192,121193],{"class":1944},"   Identifier",[94,121195,121196],{"class":209}," \"nvidia\"\n",[94,121198,121199,121202],{"class":96,"line":1160},[94,121200,121201],{"class":1944},"   MatchDriver",[94,121203,121204],{"class":209}," \"nvidia-drm\"\n",[94,121206,121207,121210],{"class":96,"line":1175},[94,121208,121209],{"class":1944},"   Driver",[94,121211,121196],{"class":209},[94,121213,121214,121217],{"class":96,"line":1181},[94,121215,121216],{"class":1944},"   Option",[94,121218,121219],{"class":209}," \"AllowEmptyInitialConfiguration\"\n",[94,121221,121222,121224,121227],{"class":96,"line":1195},[94,121223,121216],{"class":1944},[94,121225,121226],{"class":209}," \"PrimaryGPU\"",[94,121228,121229],{"class":209}," \"yes\"\n",[94,121231,121232,121235],{"class":96,"line":1201},[94,121233,121234],{"class":1944},"   ModulePath",[94,121236,121237],{"class":209}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[94,121239,121240],{"class":96,"line":1292},[94,121241,121242],{"class":1944},"EndSection\n",[48,121244,121245],{"start":1160},[51,121246,121247],{},"安装N卡驱动提示错误",[85,121249,121251],{"className":120793,"code":121250,"language":120795,"meta":120796,"style":14},"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",[91,121252,121253],{"__ignoreMap":14},[94,121254,121255],{"class":96,"line":97},[94,121256,121250],{},[48,121258,121259],{},[51,121260,121261],{},"检查当前运行的内核版本：",[40,121263,121264],{},"运行以下命令以查看你当前正在使用的内核版本：",[85,121266,121268],{"className":117273,"code":121267,"language":117275,"meta":14,"style":14},"uname -r\n",[91,121269,121270],{"__ignoreMap":14},[94,121271,121272,121274],{"class":96,"line":97},[94,121273,70181],{"class":1944},[94,121275,121276],{"class":153}," -r\n",[48,121278,121279],{"start":15},[51,121280,121281],{},"安装内核开发文件：",[40,121283,121284,121285,121288],{},"确保你已经安装了与当前内核版本相匹配的 ",[91,121286,121287],{},"kernel-devel"," 包。运行以下命令来安装：",[85,121290,121292],{"className":117273,"code":121291,"language":117275,"meta":14,"style":14},"sudo dnf install kernel-devel-$(uname -r)\n",[91,121293,121294],{"__ignoreMap":14},[94,121295,121296,121298,121300,121302,121305,121307,121309,121311],{"class":96,"line":97},[94,121297,24559],{"class":1944},[94,121299,26298],{"class":209},[94,121301,23816],{"class":209},[94,121303,121304],{"class":209}," kernel-devel-",[94,121306,25082],{"class":104},[94,121308,70181],{"class":1944},[94,121310,119616],{"class":153},[94,121312,111],{"class":104},[40,121314,121315],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[48,121317,121318],{"start":1160},[51,121319,121320],{},"安装内核源代码（如果需要）：",[40,121322,121323],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[85,121325,121327],{"className":117273,"code":121326,"language":117275,"meta":14,"style":14},"sudo dnf install kernel-headers kernel-source\n",[91,121328,121329],{"__ignoreMap":14},[94,121330,121331,121333,121335,121337,121340],{"class":96,"line":97},[94,121332,24559],{"class":1944},[94,121334,26298],{"class":209},[94,121336,23816],{"class":209},[94,121338,121339],{"class":209}," kernel-headers",[94,121341,121342],{"class":209}," kernel-source\n",[48,121344,121345],{"start":1175},[51,121346,121347],{},"检查安装：",[40,121349,121350,121351,121354],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[91,121352,121353],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[85,121356,121358],{"className":117273,"code":121357,"language":117275,"meta":14,"style":14},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[91,121359,121360],{"__ignoreMap":14},[94,121361,121362,121364],{"class":96,"line":97},[94,121363,26744],{"class":1944},[94,121365,121366],{"class":209}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[40,121368,121369,121370,121373],{},"如果仍然遇到问题，可以通过 ",[91,121371,121372],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5108,121375,121376],{},"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":14,"searchDepth":15,"depth":15,"links":121378},[121379,121383,121393,121397,121398],{"id":118476,"depth":15,"text":118477,"children":121380},[121381,121382],{"id":118486,"depth":1160,"text":118487},{"id":118496,"depth":1160,"text":118497},{"id":118696,"depth":15,"text":118697,"children":121384},[121385,121386,121387,121388,121389,121390,121391,121392],{"id":118700,"depth":1160,"text":118701},{"id":118770,"depth":1160,"text":118771},{"id":118859,"depth":1160,"text":118860},{"id":119104,"depth":1160,"text":119105},{"id":119174,"depth":1160,"text":119175},{"id":119241,"depth":1160,"text":119242},{"id":119276,"depth":1160,"text":119277},{"id":119331,"depth":1160,"text":119332},{"id":119382,"depth":15,"text":119383,"children":121394},[121395,121396],{"id":119386,"depth":1160,"text":119387},{"id":119466,"depth":1160,"text":119467},{"id":119652,"depth":15,"text":119653},{"id":119825,"depth":15,"text":119826,"children":121399},[121400,121401,121402,121403,121404],{"id":119829,"depth":1160,"text":119830},{"id":119870,"depth":1160,"text":119871},{"id":120157,"depth":1160,"text":120158},{"id":120531,"depth":1160,"text":120532},{"id":121027,"depth":1160,"text":121028},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118468,"description":17},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121411,"title":121412,"body":121413,"description":17,"extension":18,"meta":121753,"navigation":20,"path":121754,"seo":121755,"stem":121756,"__hash__":121757},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121414,"toc":121751},[121415,121418,121423,121426,121672,121677,121680,121716,121719,121748],[10,121416,121412],{"id":121417},"_4-命令教程长期积累",[48,121419,121420],{},[51,121421,121422],{},"大多数命令",[40,121424,121425],{},"常用 Linux 命令速查：",[85,121427,121429],{"className":117273,"code":121428,"language":117275,"meta":14,"style":14},"# 文件与目录\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",[91,121430,121431,121436,121443,121450,121458,121465,121472,121480,121488,121495,121502,121510,121514,121519,121526,121534,121541,121545,121550,121557,121565,121573,121581,121589,121593,121598,121606,121613,121620,121628,121636,121640,121645,121654,121663],{"__ignoreMap":14},[94,121432,121433],{"class":96,"line":97},[94,121434,121435],{"class":163},"# 文件与目录\n",[94,121437,121438,121440],{"class":96,"line":15},[94,121439,26744],{"class":1944},[94,121441,121442],{"class":163},"        # 列出目录内容\n",[94,121444,121445,121447],{"class":96,"line":1160},[94,121446,101253],{"class":153},[94,121448,121449],{"class":163},"        # 切换目录\n",[94,121451,121452,121455],{"class":96,"line":1175},[94,121453,121454],{"class":153},"pwd",[94,121456,121457],{"class":163},"       # 显示当前路径\n",[94,121459,121460,121462],{"class":96,"line":1181},[94,121461,101243],{"class":1944},[94,121463,121464],{"class":163},"     # 创建目录\n",[94,121466,121467,121469],{"class":96,"line":1195},[94,121468,25305],{"class":1944},[94,121470,121471],{"class":163},"        # 删除文件或目录\n",[94,121473,121474,121477],{"class":96,"line":1201},[94,121475,121476],{"class":1944},"cp",[94,121478,121479],{"class":163},"        # 复制文件或目录\n",[94,121481,121482,121485],{"class":96,"line":1292},[94,121483,121484],{"class":1944},"mv",[94,121486,121487],{"class":163},"        # 移动\u002F重命名文件或目录\n",[94,121489,121490,121492],{"class":96,"line":1298},[94,121491,101260],{"class":1944},[94,121493,121494],{"class":163},"     # 创建空文件\n",[94,121496,121497,121499],{"class":96,"line":1310},[94,121498,120742],{"class":1944},[94,121500,121501],{"class":163},"       # 查看文件内容\n",[94,121503,121504,121507],{"class":96,"line":1593},[94,121505,121506],{"class":1944},"head\u002Ftail",[94,121508,121509],{"class":163}," # 查看文件头部\u002F尾部\n",[94,121511,121512],{"class":96,"line":1598},[94,121513,2381],{"emptyLinePlaceholder":20},[94,121515,121516],{"class":96,"line":1604},[94,121517,121518],{"class":163},"# 权限管理\n",[94,121520,121521,121523],{"class":96,"line":1609},[94,121522,24594],{"class":1944},[94,121524,121525],{"class":163},"     # 修改文件权限\n",[94,121527,121528,121531],{"class":96,"line":1623},[94,121529,121530],{"class":1944},"chown",[94,121532,121533],{"class":163},"     # 修改文件所有者\n",[94,121535,121536,121538],{"class":96,"line":1628},[94,121537,24559],{"class":1944},[94,121539,121540],{"class":163},"      # 以管理员身份执行\n",[94,121542,121543],{"class":96,"line":1634},[94,121544,2381],{"emptyLinePlaceholder":20},[94,121546,121547],{"class":96,"line":1655},[94,121548,121549],{"class":163},"# 系统信息\n",[94,121551,121552,121554],{"class":96,"line":1660},[94,121553,70181],{"class":1944},[94,121555,121556],{"class":163},"     # 系统信息\n",[94,121558,121559,121562],{"class":96,"line":1674},[94,121560,121561],{"class":1944},"df",[94,121563,121564],{"class":163},"        # 磁盘使用情况\n",[94,121566,121567,121570],{"class":96,"line":1679},[94,121568,121569],{"class":1944},"free",[94,121571,121572],{"class":163},"      # 内存使用情况\n",[94,121574,121575,121578],{"class":96,"line":1708},[94,121576,121577],{"class":1944},"top\u002Fhtop",[94,121579,121580],{"class":163},"  # 进程监控\n",[94,121582,121583,121586],{"class":96,"line":1713},[94,121584,121585],{"class":1944},"ps",[94,121587,121588],{"class":163},"        # 查看进程\n",[94,121590,121591],{"class":96,"line":1730},[94,121592,2381],{"emptyLinePlaceholder":20},[94,121594,121595],{"class":96,"line":1735},[94,121596,121597],{"class":163},"# 网络\n",[94,121599,121600,121603],{"class":96,"line":1740},[94,121601,121602],{"class":1944},"ping",[94,121604,121605],{"class":163},"      # 测试网络连通性\n",[94,121607,121608,121610],{"class":96,"line":1745},[94,121609,26832],{"class":1944},[94,121611,121612],{"class":163},"      # 发送 HTTP 请求\n",[94,121614,121615,121617],{"class":96,"line":1759},[94,121616,120266],{"class":1944},[94,121618,121619],{"class":163},"      # 下载文件\n",[94,121621,121622,121625],{"class":96,"line":1764},[94,121623,121624],{"class":1944},"ssh",[94,121626,121627],{"class":163},"       # 远程登录\n",[94,121629,121630,121633],{"class":96,"line":2558},[94,121631,121632],{"class":1944},"scp",[94,121634,121635],{"class":163},"       # 远程文件传输\n",[94,121637,121638],{"class":96,"line":2572},[94,121639,2381],{"emptyLinePlaceholder":20},[94,121641,121642],{"class":96,"line":2580},[94,121643,121644],{"class":163},"# 包管理（Debian\u002FUbuntu）\n",[94,121646,121647,121649,121651],{"class":96,"line":2585},[94,121648,117345],{"class":1944},[94,121650,117324],{"class":209},[94,121652,121653],{"class":163},"   # 更新软件源\n",[94,121655,121656,121658,121660],{"class":96,"line":2591},[94,121657,117345],{"class":1944},[94,121659,23816],{"class":209},[94,121661,121662],{"class":163},"  # 安装软件包\n",[94,121664,121665,121667,121669],{"class":96,"line":2597},[94,121666,117345],{"class":1944},[94,121668,26062],{"class":209},[94,121670,121671],{"class":163},"   # 卸载软件包\n",[48,121673,121674],{"start":15},[51,121675,121676],{},"KDE Dolphin 以root打开",[40,121678,121679],{},"kde5",[85,121681,121683],{"className":117273,"code":121682,"language":117275,"meta":14,"style":14},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[91,121684,121685],{"__ignoreMap":14},[94,121686,121687,121690,121693,121696,121698,121700,121703,121706,121708,121711,121713],{"class":96,"line":97},[94,121688,121689],{"class":1944},"pkexec",[94,121691,121692],{"class":209}," env",[94,121694,121695],{"class":209}," DISPLAY=",[94,121697,28126],{"class":104},[94,121699,28184],{"class":209},[94,121701,121702],{"class":104},"$XAUTHORITY ",[94,121704,121705],{"class":209},"KDE_SESSION_VERSION=",[94,121707,424],{"class":153},[94,121709,121710],{"class":209}," KDE_FULL_SESSION=",[94,121712,1343],{"class":153},[94,121714,121715],{"class":209}," dolphin\n",[40,121717,121718],{},"kde6",[85,121720,121722],{"className":117273,"code":121721,"language":117275,"meta":14,"style":14},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[91,121723,121724],{"__ignoreMap":14},[94,121725,121726,121728,121730,121732,121734,121736,121738,121740,121742,121744,121746],{"class":96,"line":97},[94,121727,121689],{"class":1944},[94,121729,121692],{"class":209},[94,121731,121695],{"class":209},[94,121733,28126],{"class":104},[94,121735,28184],{"class":209},[94,121737,121702],{"class":104},[94,121739,121705],{"class":209},[94,121741,449],{"class":153},[94,121743,121710],{"class":209},[94,121745,1343],{"class":153},[94,121747,121715],{"class":209},[5108,121749,121750],{},"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":14,"searchDepth":15,"depth":15,"links":121752},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121412,"description":17},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121759,"title":121760,"body":121761,"description":17,"extension":18,"meta":121775,"navigation":20,"path":121776,"seo":121777,"stem":121778,"__hash__":121779},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121762,"toc":121773},[121763,121766],[10,121764,121760],{"id":121765},"_5-各种环境配置",[40,121767,121768],{},[343,121769,121772],{"href":121770,"rel":121771},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23847],"电控组环境搭建大全",{"title":14,"searchDepth":15,"depth":15,"links":121774},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121760,"description":17},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121781,"title":121782,"body":121783,"description":17,"extension":18,"meta":122131,"navigation":20,"path":122132,"seo":122133,"stem":122134,"__hash__":122135},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121784,"toc":122123},[121785,121788,121792,121796,121800,121805,121812,121816,122109,122113,122120],[10,121786,121782],{"id":121787},"_6-拓展功能",[35,121789,121791],{"id":121790},"_61-wine","6.1 Wine",[35,121793,121795],{"id":121794},"_62-android","6.2 Android",[65,121797,121799],{"id":121798},"_621-i卡a卡","6.2.1 I卡、A卡",[48,121801,121802],{},[51,121803,121804],{},"Wayland-Waydroid(体验超级好)",[40,121806,121807,121808],{},"Waydroid 官网与安装指南：",[343,121809,121810],{"href":121810,"rel":121811},"https:\u002F\u002Fwaydro.id\u002F",[23847],[65,121813,121815],{"id":121814},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[48,121817,121818],{},[51,121819,121820,121821,121823,121824,121828,121830,121833,121838,122035],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53693,121822],{},"BlissOS 官网下载：",[343,121825,121826],{"href":121826,"rel":121827},"https:\u002F\u002Fblissos.org\u002F",[23847],[53693,121829],{},[1443,121831],{"alt":14,"src":121832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[48,121834,121835],{"start":1160},[51,121836,121837],{},"比较推荐的配置",[85,121839,121841],{"className":117273,"code":121840,"language":117275,"meta":14,"style":14},"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",[91,121842,121843,121850,121860,121870,121880,121892,121902,121909,121919,121928,121937,121947,121957,121966,121976,121986,121998,122008,122017,122027],{"__ignoreMap":14},[94,121844,121845,121848],{"class":96,"line":97},[94,121846,121847],{"class":1944},"qemu-system-x86_64",[94,121849,24661],{"class":153},[94,121851,121852,121855,121858],{"class":96,"line":15},[94,121853,121854],{"class":153},"        -M",[94,121856,121857],{"class":209}," q35,vmport=off",[94,121859,24661],{"class":153},[94,121861,121862,121865,121868],{"class":96,"line":1160},[94,121863,121864],{"class":153},"        -accel",[94,121866,121867],{"class":209}," kvm",[94,121869,24661],{"class":153},[94,121871,121872,121875,121878],{"class":96,"line":1175},[94,121873,121874],{"class":153},"        -cpu",[94,121876,121877],{"class":209}," qemu64,+sse3,+sse4.2",[94,121879,24661],{"class":153},[94,121881,121882,121885,121888,121890],{"class":96,"line":1181},[94,121883,121884],{"class":153},"        -smp",[94,121886,121887],{"class":209}," 8,cores=",[94,121889,398],{"class":153},[94,121891,24661],{"class":153},[94,121893,121894,121897,121900],{"class":96,"line":1195},[94,121895,121896],{"class":153},"        -m",[94,121898,121899],{"class":209}," 6G",[94,121901,24661],{"class":153},[94,121903,121904,121907],{"class":96,"line":1201},[94,121905,121906],{"class":153},"        -usb",[94,121908,24661],{"class":153},[94,121910,121911,121914,121917],{"class":96,"line":1292},[94,121912,121913],{"class":153},"        -device",[94,121915,121916],{"class":209}," virtio-tablet",[94,121918,24661],{"class":153},[94,121920,121921,121923,121926],{"class":96,"line":1298},[94,121922,121913],{"class":153},[94,121924,121925],{"class":209}," virtio-keyboard",[94,121927,24661],{"class":153},[94,121929,121930,121932,121935],{"class":96,"line":1310},[94,121931,121913],{"class":153},[94,121933,121934],{"class":209}," usb-tablet",[94,121936,24661],{"class":153},[94,121938,121939,121942,121945],{"class":96,"line":1593},[94,121940,121941],{"class":153},"        -bios",[94,121943,121944],{"class":209}," OVMF-pure-efi64.fd",[94,121946,24661],{"class":153},[94,121948,121949,121952,121955],{"class":96,"line":1598},[94,121950,121951],{"class":153},"        -net",[94,121953,121954],{"class":209}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[94,121956,24661],{"class":153},[94,121958,121959,121961,121964],{"class":96,"line":1604},[94,121960,121951],{"class":153},[94,121962,121963],{"class":209}," nic,model=virtio",[94,121965,24661],{"class":153},[94,121967,121968,121971,121974],{"class":96,"line":1609},[94,121969,121970],{"class":153},"        -audio",[94,121972,121973],{"class":209}," sdl,model=hda",[94,121975,24661],{"class":153},[94,121977,121978,121981,121984],{"class":96,"line":1623},[94,121979,121980],{"class":153},"        -display",[94,121982,121983],{"class":209}," sdl,gl=on,show-cursor=on",[94,121985,24661],{"class":153},[94,121987,121988,121990,121993,121996],{"class":96,"line":1628},[94,121989,121913],{"class":153},[94,121991,121992],{"class":209}," virtio-vga-gl,xres=1920,yres=",[94,121994,121995],{"class":153},"1080",[94,121997,24661],{"class":153},[94,121999,122000,122003,122006],{"class":96,"line":1634},[94,122001,122002],{"class":153},"        -drive",[94,122004,122005],{"class":209}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[94,122007,24661],{"class":153},[94,122009,122010,122012,122015],{"class":96,"line":1655},[94,122011,122002],{"class":153},[94,122013,122014],{"class":209}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[94,122016,24661],{"class":153},[94,122018,122019,122022,122025],{"class":96,"line":1660},[94,122020,122021],{"class":153},"        -monitor",[94,122023,122024],{"class":209}," stdio",[94,122026,24661],{"class":153},[94,122028,122029,122032],{"class":96,"line":1674},[94,122030,122031],{"class":153},"        -serial",[94,122033,122034],{"class":209}," none\n",[48,122036,122037],{"start":1181},[51,122038,122039,122040],{},"常用操作：",[48,122041,122042,122045,122101],{},[51,122043,122044],{},"全屏：Ctrl+Alt+F",[51,122046,122047,122048,122053],{},"adb调试",[48,122049,122050],{},[51,122051,122052],{},"使Linux与Android用ADB连接。",[85,122054,122056],{"className":117273,"code":122055,"language":117275,"meta":14,"style":14},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[91,122057,122058,122063,122074,122079,122091,122096],{"__ignoreMap":14},[94,122059,122060],{"class":96,"line":97},[94,122061,122062],{"class":163},"# 连接安卓\n",[94,122064,122065,122068,122071],{"class":96,"line":15},[94,122066,122067],{"class":1944},"adb",[94,122069,122070],{"class":209}," connect",[94,122072,122073],{"class":153}," 127.0.0.1\n",[94,122075,122076],{"class":96,"line":1160},[94,122077,122078],{"class":163},"# 打开shell\n",[94,122080,122081,122083,122085,122088],{"class":96,"line":1175},[94,122082,122067],{"class":1944},[94,122084,26866],{"class":153},[94,122086,122087],{"class":209}," 127.0.0.1:5555",[94,122089,122090],{"class":209}," shell\n",[94,122092,122093],{"class":96,"line":1181},[94,122094,122095],{"class":163},"# 使用root权限\n",[94,122097,122098],{"class":96,"line":1195},[94,122099,122100],{"class":1944},"su\n",[51,122102,122103,122104],{},"中文输入法",[48,122105,122106],{},[51,122107,122108],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[35,122110,122112],{"id":122111},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[40,122114,122115,122116],{},"rEFInd 官网与文档：",[343,122117,122118],{"href":122118,"rel":122119},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23847],[5108,122121,122122],{},"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":14,"searchDepth":15,"depth":15,"links":122124},[122125,122126,122130],{"id":121790,"depth":15,"text":121791},{"id":121794,"depth":15,"text":121795,"children":122127},[122128,122129],{"id":121798,"depth":1160,"text":121799},{"id":121814,"depth":1160,"text":121815},{"id":122111,"depth":15,"text":122112},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121782,"description":17},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122137,"title":122138,"body":122139,"description":17,"extension":18,"meta":125438,"navigation":20,"path":125439,"seo":125440,"stem":125441,"__hash__":125442},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122140,"toc":125412},[122141,122144,122148,122151,122158,122408,122411,122483,122486,122490,122494,122499,122502,122505,122508,122513,122516,122519,122522,122527,122530,122535,122538,122541,122546,122549,122554,122557,122561,122565,122568,122573,122576,122590,122593,122596,122605,122608,122617,122620,122623,122632,122635,122644,122647,122650,122659,122662,122665,122680,122683,122686,122695,122700,122703,122706,122715,122718,122727,122730,122739,122742,122751,122756,122759,122767,122772,122775,122784,122787,122795,122800,122803,122812,122815,122818,122822,122825,122830,122833,122838,122852,122857,122862,122873,122878,122884,122889,122904,122909,122912,122917,122922,122927,122935,122940,122947,122952,122963,122968,122971,122975,122978,122981,122986,122989,123008,123013,123016,123025,123030,123033,123055,123058,123088,123091,123096,123099,123113,123118,123137,123140,123143,123148,123160,123165,123170,123173,123178,123181,123196,123199,123204,123209,123213,123218,123258,123261,123265,123271,123277,123282,123285,123292,123297,123304,123307,123310,123317,123331,123334,123394,123397,123411,123423,123426,123429,123432,123496,123499,123502,123505,123525,123528,123533,123540,123544,123547,123551,123556,123561,123565,123568,123571,123613,123618,123621,123643,123658,123660,123665,123677,123737,123739,123741,123795,123797,123799,123805,123810,123813,123818,123822,123825,123887,123892,123895,123897,123901,123913,123995,123997,123999,124053,124059,124061,124065,124070,124072,124077,124081,124101,124136,124140,124143,124146,124149,124156,124159,124171,124174,124189,124192,124211,124259,124262,124279,124282,124296,124301,124304,124313,124328,124340,124378,124383,124392,124397,124402,124428,124437,124441,124445,124450,124453,124457,124461,124466,124469,124474,124477,124482,124485,124490,124493,124497,124502,124505,124510,124513,124517,124522,124525,124530,124533,124538,124541,124545,124550,124553,124558,124561,124566,124569,124573,124578,124581,124586,124589,124594,124597,124602,124605,124610,124613,124618,124621,124625,124630,124633,124638,124645,124649,124654,124657,124662,124665,124669,124674,124677,124680,124683,124686,124689,124693,124696,124706,124711,124716,124738,124743,124748,124755,124759,124764,124767,124770,124775,124778,124781,124784,124787,124790,124793,124796,124799,124802,124805,124808,124811,124816,124821,124826,124831,124836,124841,124846,124849,124853,124856,124860,124865,124870,124875,124880,124884,124890,124898,124903,124906,124911,124926,124929,124934,124968,124983,124986,125041,125067,125079,125082,125091,125094,125109,125114,125117,125123,125128,125131,125136,125139,125144,125149,125156,125159,125174,125177,125212,125217,125225,125263,125266,125269,125274,125277,125282,125293,125327,125332,125335,125344,125349,125355,125358,125363,125372,125377,125380,125383,125388,125396,125399,125404,125409],[10,122142,122138],{"id":122143},"_7-其他操作",[35,122145,122147],{"id":122146},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[40,122149,122150],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[40,122152,122153,122154,122157],{},"进入工控机的硬盘目录，进入",[91,122155,122156],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[85,122159,122163],{"className":122160,"code":122161,"language":122162,"meta":14,"style":14},"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",[91,122164,122165,122173,122184,122191,122198,122210,122217,122229,122240,122251,122258,122265,122272,122284,122296,122303,122315,122327,122334,122346,122358,122370,122381,122388,122399],{"__ignoreMap":14},[94,122166,122167,122170],{"class":96,"line":97},[94,122168,122169],{"class":51277},"network",[94,122171,122172],{"class":104},": \n",[94,122174,122175,122178,122180,122182],{"class":96,"line":15},[94,122176,122177],{"class":51277},"  version",[94,122179,51414],{"class":104},[94,122181,182],{"class":153},[94,122183,2655],{"class":104},[94,122185,122186,122189],{"class":96,"line":1160},[94,122187,122188],{"class":51277},"  wifis",[94,122190,122172],{"class":104},[94,122192,122193,122196],{"class":96,"line":1175},[94,122194,122195],{"class":51277},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[94,122197,122172],{"class":104},[94,122199,122200,122203,122205,122208],{"class":96,"line":1181},[94,122201,122202],{"class":51277},"      renderer",[94,122204,51414],{"class":104},[94,122206,122207],{"class":209},"NetworkManager",[94,122209,2655],{"class":104},[94,122211,122212,122215],{"class":96,"line":1195},[94,122213,122214],{"class":51277},"      match",[94,122216,122172],{"class":104},[94,122218,122219,122222,122224,122227],{"class":96,"line":1201},[94,122220,122221],{"class":51277},"        name",[94,122223,51414],{"class":104},[94,122225,122226],{"class":209},"\"wlan0\"",[94,122228,2655],{"class":104},[94,122230,122231,122234,122236,122238],{"class":96,"line":1292},[94,122232,122233],{"class":51277},"      dhcp4",[94,122235,51414],{"class":104},[94,122237,1343],{"class":153},[94,122239,2655],{"class":104},[94,122241,122242,122245,122247,122249],{"class":96,"line":1298},[94,122243,122244],{"class":51277},"      dhcp6",[94,122246,51414],{"class":104},[94,122248,1343],{"class":153},[94,122250,2655],{"class":104},[94,122252,122253,122256],{"class":96,"line":1310},[94,122254,122255],{"class":51277},"      access-points",[94,122257,122172],{"class":104},[94,122259,122260,122263],{"class":96,"line":1593},[94,122261,122262],{"class":209},"        \"EMIS_Vinci_Robocon_5G\"",[94,122264,122172],{"class":104},[94,122266,122267,122270],{"class":96,"line":1598},[94,122268,122269],{"class":51277},"          auth",[94,122271,122172],{"class":104},[94,122273,122274,122277,122279,122282],{"class":96,"line":1604},[94,122275,122276],{"class":51277},"            key-management",[94,122278,51414],{"class":104},[94,122280,122281],{"class":209},"\"psk\"",[94,122283,2655],{"class":104},[94,122285,122286,122289,122291,122294],{"class":96,"line":1609},[94,122287,122288],{"class":51277},"            password",[94,122290,51414],{"class":104},[94,122292,122293],{"class":209},"\"vinci666\"",[94,122295,2655],{"class":104},[94,122297,122298,122301],{"class":96,"line":1623},[94,122299,122300],{"class":51277},"          networkmanager",[94,122302,122172],{"class":104},[94,122304,122305,122308,122310,122313],{"class":96,"line":1628},[94,122306,122307],{"class":51277},"            uuid",[94,122309,51414],{"class":104},[94,122311,122312],{"class":209},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[94,122314,2655],{"class":104},[94,122316,122317,122320,122322,122325],{"class":96,"line":1634},[94,122318,122319],{"class":51277},"            name",[94,122321,51414],{"class":104},[94,122323,122324],{"class":209},"\"EMIS_Vinci_Robocon_5G\"",[94,122326,2655],{"class":104},[94,122328,122329,122332],{"class":96,"line":1655},[94,122330,122331],{"class":51277},"            passthrough",[94,122333,122172],{"class":104},[94,122335,122336,122339,122341,122344],{"class":96,"line":1660},[94,122337,122338],{"class":51277},"              wifi-security.auth-alg",[94,122340,51414],{"class":104},[94,122342,122343],{"class":209},"\"open\"",[94,122345,2655],{"class":104},[94,122347,122348,122351,122353,122356],{"class":96,"line":1674},[94,122349,122350],{"class":51277},"              ipv6.addr-gen-mode",[94,122352,51414],{"class":104},[94,122354,122355],{"class":209},"\"default\"",[94,122357,2655],{"class":104},[94,122359,122360,122363,122365,122368],{"class":96,"line":1679},[94,122361,122362],{"class":51277},"              ipv6.ip6-privacy",[94,122364,51414],{"class":104},[94,122366,122367],{"class":209},"\"-1\"",[94,122369,2655],{"class":104},[94,122371,122372,122375,122377,122379],{"class":96,"line":1708},[94,122373,122374],{"class":51277},"              proxy._",[94,122376,51414],{"class":104},[94,122378,7634],{"class":209},[94,122380,2655],{"class":104},[94,122382,122383,122386],{"class":96,"line":1713},[94,122384,122385],{"class":51277},"      networkmanager",[94,122387,122172],{"class":104},[94,122389,122390,122393,122395,122397],{"class":96,"line":1730},[94,122391,122392],{"class":51277},"        uuid",[94,122394,51414],{"class":104},[94,122396,122312],{"class":209},[94,122398,2655],{"class":104},[94,122400,122401,122403,122405],{"class":96,"line":1735},[94,122402,122221],{"class":51277},[94,122404,51414],{"class":104},[94,122406,122407],{"class":209},"\"EMIS_Vinci_Robocon_5G\"\n",[40,122409,122410],{},"将其改为新wifi的名和密码：",[85,122412,122414],{"className":122160,"code":122413,"language":122162,"meta":14,"style":14},"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",[91,122415,122416,122422,122431,122437,122444,122453,122461,122467,122473],{"__ignoreMap":14},[94,122417,122418,122420],{"class":96,"line":97},[94,122419,122169],{"class":51277},[94,122421,3720],{"class":104},[94,122423,122424,122426,122428],{"class":96,"line":15},[94,122425,122177],{"class":51277},[94,122427,51414],{"class":104},[94,122429,122430],{"class":153},"2\n",[94,122432,122433,122435],{"class":96,"line":1160},[94,122434,122188],{"class":51277},[94,122436,3720],{"class":104},[94,122438,122439,122442],{"class":96,"line":1175},[94,122440,122441],{"class":51277},"    wlan0",[94,122443,3720],{"class":104},[94,122445,122446,122448,122450],{"class":96,"line":1181},[94,122447,122233],{"class":51277},[94,122449,51414],{"class":104},[94,122451,122452],{"class":153},"true\n",[94,122454,122455,122457,122459],{"class":96,"line":1195},[94,122456,122244],{"class":51277},[94,122458,51414],{"class":104},[94,122460,122452],{"class":153},[94,122462,122463,122465],{"class":96,"line":1201},[94,122464,122255],{"class":51277},[94,122466,3720],{"class":104},[94,122468,122469,122471],{"class":96,"line":1292},[94,122470,122262],{"class":209},[94,122472,3720],{"class":104},[94,122474,122475,122478,122480],{"class":96,"line":1298},[94,122476,122477],{"class":51277},"          password",[94,122479,51414],{"class":104},[94,122481,122482],{"class":209},"\"vinci666\"\n",[40,122484,122485],{},"工控机开机即可连上网。",[35,122487,122489],{"id":122488},"_72-ssh远程开发","7.2 SSH远程开发",[65,122491,122493],{"id":122492},"_721-环境准备","7.2.1 环境准备",[40,122495,122496],{},[254,122497,122498],{},"1.硬件准备",[40,122500,122501],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[40,122503,122504],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[40,122506,122507],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[40,122509,122510],{},[254,122511,122512],{},"2.设置固定IP",[40,122514,122515],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[40,122517,122518],{},"1.进入设置界面",[40,122520,122521],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[40,122523,122524],{},[1443,122525],{"alt":14,"src":122526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[40,122528,122529],{},"2.配置所连接的网络",[40,122531,122532],{},[1443,122533],{"alt":14,"src":122534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[40,122536,122537],{},"3.设置固定IP",[40,122539,122540],{},"查看当前IP地址。",[40,122542,122543],{},[1443,122544],{"alt":14,"src":122545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[40,122547,122548],{},"设置固定IP。",[40,122550,122551],{},[1443,122552],{"alt":14,"src":122553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[40,122555,122556],{},"至此，IP配置完毕。",[65,122558,122560],{"id":122559},"_722-环境搭建","7.2.2 环境搭建",[40,122562,122563],{},[254,122564,25736],{},[40,122566,122567],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[40,122569,122570],{},[254,122571,122572],{},"实现",[40,122574,122575],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[48,122577,122578,122581,122584,122587],{},[51,122579,122580],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[51,122582,122583],{},"远程主机启动SSH服务；",[51,122585,122586],{},"本地主机登陆远程主机；",[51,122588,122589],{},"实现数据传输。",[40,122591,122592],{},"1.安装SSH客户端与服务端",[40,122594,122595],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[85,122597,122599],{"className":120793,"code":122598,"language":120795,"meta":120796,"style":14}," sudo apt install openssh-server\n",[91,122600,122601],{"__ignoreMap":14},[94,122602,122603],{"class":96,"line":97},[94,122604,122598],{},[40,122606,122607],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[85,122609,122611],{"className":120793,"code":122610,"language":120795,"meta":120796,"style":14},"sudo apt install openssh-client\n",[91,122612,122613],{"__ignoreMap":14},[94,122614,122615],{"class":96,"line":97},[94,122616,122610],{},[40,122618,122619],{},"2.远程主机启动SSH服务",[40,122621,122622],{},"远程主机启动 ssh 服务命令如下：",[85,122624,122626],{"className":120793,"code":122625,"language":120795,"meta":120796,"style":14},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[91,122627,122628],{"__ignoreMap":14},[94,122629,122630],{"class":96,"line":97},[94,122631,122625],{},[40,122633,122634],{},"启动后可使用如下命令查看服务是否正常运行：",[85,122636,122638],{"className":120793,"code":122637,"language":120795,"meta":120796,"style":14},"ps -e | grep ssh\n",[91,122639,122640],{"__ignoreMap":14},[94,122641,122642],{"class":96,"line":97},[94,122643,122637],{},[40,122645,122646],{},"如果启动成功，会包含 sshd 程序。",[40,122648,122649],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[85,122651,122653],{"className":120793,"code":122652,"language":120795,"meta":120796,"style":14},"sudo systemctl enable ssh\n",[91,122654,122655],{"__ignoreMap":14},[94,122656,122657],{"class":96,"line":97},[94,122658,122652],{},[40,122660,122661],{},"3.本地远程登录",[40,122663,122664],{},"登录远程主机可以调用如下命令:",[85,122666,122668],{"className":117273,"code":122667,"language":117275,"meta":14,"style":14},"ssh -X 用户名@ip地址\n",[91,122669,122670],{"__ignoreMap":14},[94,122671,122672,122674,122677],{"class":96,"line":97},[94,122673,121624],{"class":1944},[94,122675,122676],{"class":153}," -X",[94,122678,122679],{"class":209}," 用户名@ip地址\n",[40,122681,122682],{},"然后根据提示，录入登陆密码，即可成功登录。",[40,122684,122685],{},"如果退出，可以调用exit命令：",[85,122687,122689],{"className":120793,"code":122688,"language":120795,"meta":120796,"style":14},"exit\n",[91,122690,122691],{"__ignoreMap":14},[94,122692,122693],{"class":96,"line":97},[94,122694,122688],{},[40,122696,122697],{},[254,122698,122699],{},"4.实现数据传输",[40,122701,122702],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[40,122704,122705],{},"上传文件指令格式如下：",[85,122707,122709],{"className":120793,"code":122708,"language":120795,"meta":120796,"style":14},"scp 本地文件路径 账号@ip:路径\n",[91,122710,122711],{"__ignoreMap":14},[94,122712,122713],{"class":96,"line":97},[94,122714,122708],{},[40,122716,122717],{},"上传文件夹指令格式如下：",[85,122719,122721],{"className":120793,"code":122720,"language":120795,"meta":120796,"style":14},"scp -r 本地文件夹路径 账号@ip:路径\n",[91,122722,122723],{"__ignoreMap":14},[94,122724,122725],{"class":96,"line":97},[94,122726,122720],{},[40,122728,122729],{},"下载文件指令格式如下：",[85,122731,122733],{"className":120793,"code":122732,"language":120795,"meta":120796,"style":14},"scp 账号@ip:路径 本地文件夹路径\n",[91,122734,122735],{"__ignoreMap":14},[94,122736,122737],{"class":96,"line":97},[94,122738,122732],{},[40,122740,122741],{},"下载文件夹指令格式如下：",[85,122743,122745],{"className":120793,"code":122744,"language":120795,"meta":120796,"style":14},"scp -r 账号@ip:路径 本地文件夹路径\n",[91,122746,122747],{"__ignoreMap":14},[94,122748,122749],{"class":96,"line":97},[94,122750,122744],{},[40,122752,122753],{},[254,122754,122755],{},"优化",[40,122757,122758],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[48,122760,122761,122764],{},[51,122762,122763],{},"本地生成密钥对；",[51,122765,122766],{},"将公钥上传至远程主机。",[40,122768,122769],{},[254,122770,122771],{},"1.生成密钥对",[40,122773,122774],{},"本地客户端生成公私钥：（一路回车默认即可）",[85,122776,122778],{"className":120793,"code":122777,"language":120795,"meta":120796,"style":14},"ssh-keygen\n",[91,122779,122780],{"__ignoreMap":14},[94,122781,122782],{"class":96,"line":97},[94,122783,122777],{},[40,122785,122786],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[48,122788,122789,122792],{},[51,122790,122791],{},"id_rsa （私钥）；",[51,122793,122794],{},"id_rsa.pub (公钥)。",[40,122796,122797],{},[254,122798,122799],{},"2.公钥上传",[40,122801,122802],{},"上传指令如下：",[85,122804,122806],{"className":120793,"code":122805,"language":120795,"meta":120796,"style":14},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[91,122807,122808],{"__ignoreMap":14},[94,122809,122810],{"class":96,"line":97},[94,122811,122805],{},[40,122813,122814],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[40,122816,122817],{},"以后再远程登录就无需录入密码了。",[65,122819,122821],{"id":122820},"_723-使用vscode优化","7.2.3 使用VScode优化",[40,122823,122824],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[40,122826,122827],{},[254,122828,122829],{},"1.准备工作",[40,122831,122832],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[40,122834,122835],{},[254,122836,122837],{},"2.为VScode安装远程开发插件",[40,122839,122840,122841,122844,122845,122848,122849,28368],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[91,122842,122843],{},"扩展：商店","的搜索栏输入",[91,122846,122847],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[91,122850,122851],{},"安装",[40,122853,122854],{},[1443,122855],{"alt":14,"src":122856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[40,122858,122859],{},[254,122860,122861],{},"3.配置远程连接",[40,122863,122864,122865,122868,122869,122872],{},"步骤1：使用快捷键",[91,122866,122867],{},"ctrl + shift + p","打开命令输入窗口，并输入",[91,122870,122871],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[40,122874,122875],{},[1443,122876],{"alt":14,"src":122877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[40,122879,122880,122881,28368],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[91,122882,122883],{},"Add New SSH Host",[40,122885,122886],{},[1443,122887],{"alt":14,"src":122888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[40,122890,122891,122892,122895,122896,122899,122900,122903],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[91,122893,122894],{},"ssh +X ubuntu@192.168.43.164","，其中，",[91,122897,122898],{},"ubuntu","需要替换为你的登录用户名，",[91,122901,122902],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[40,122905,122906],{},[1443,122907],{"alt":14,"src":122908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[40,122910,122911],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[40,122913,122914],{},[1443,122915],{"alt":14,"src":122916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[40,122918,122919],{},[1443,122920],{"alt":14,"src":122921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[40,122923,122924],{},[254,122925,122926],{},"4.使用",[40,122928,122929,122930,122868,122932,122934],{},"步骤1：继续使用快捷键",[91,122931,122867],{},[91,122933,122871],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[40,122936,122937],{},[1443,122938],{"alt":14,"src":122939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[40,122941,122942,122943,122946],{},"或者，也可以点击侧边栏的",[91,122944,122945],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[40,122948,122949],{},[1443,122950],{"alt":14,"src":122951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[40,122953,122954,122955,122958,122959,122962],{},"步骤2：选择菜单栏的",[91,122956,122957],{},"文件","下的",[91,122960,122961],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[40,122964,122965],{},[1443,122966],{"alt":14,"src":122967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[40,122969,122970],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[35,122972,122974],{"id":122973},"_73-远程桌面","7.3 远程桌面",[40,122976,122977],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[40,122979,122980],{},"我们选择使用VNC来看。",[48,122982,122983],{},[51,122984,122985],{},"安装VNC服务器：",[40,122987,122988],{},"这里以TigerVNC为例进行安装：",[85,122990,122992],{"className":117273,"code":122991,"language":117275,"meta":14,"style":14},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[91,122993,122994],{"__ignoreMap":14},[94,122995,122996,122998,123000,123002,123005],{"class":96,"line":97},[94,122997,24559],{"class":1944},[94,122999,117294],{"class":209},[94,123001,23816],{"class":209},[94,123003,123004],{"class":209}," tigervnc-standalone-server",[94,123006,123007],{"class":209}," tigervnc-common\n",[48,123009,123010],{"start":15},[51,123011,123012],{},"设置VNC密码：",[40,123014,123015],{},"为VNC用户设置密码，运行以下命令：",[85,123017,123019],{"className":117273,"code":123018,"language":117275,"meta":14,"style":14},"vncpasswd\n",[91,123020,123021],{"__ignoreMap":14},[94,123022,123023],{"class":96,"line":97},[94,123024,123018],{"class":1944},[48,123026,123027],{"start":1160},[51,123028,123029],{},"配置VNC启动脚本:",[40,123031,123032],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[85,123034,123036],{"className":117273,"code":123035,"language":117275,"meta":14,"style":14},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[91,123037,123038,123047],{"__ignoreMap":14},[94,123039,123040,123042,123044],{"class":96,"line":97},[94,123041,101243],{"class":1944},[94,123043,29199],{"class":153},[94,123045,123046],{"class":209}," ~\u002F.vnc\n",[94,123048,123049,123052],{"class":96,"line":15},[94,123050,123051],{"class":1944},"nano",[94,123053,123054],{"class":209}," ~\u002F.vnc\u002Fxstartup\n",[40,123056,123057],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[85,123059,123061],{"className":117273,"code":123060,"language":117275,"meta":14,"style":14},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[91,123062,123063,123068,123076,123083],{"__ignoreMap":14},[94,123064,123065],{"class":96,"line":97},[94,123066,123067],{"class":163},"#!\u002Fbin\u002Fsh\n",[94,123069,123070,123073],{"class":96,"line":15},[94,123071,123072],{"class":153},"unset",[94,123074,123075],{"class":209}," SESSION_MANAGER\n",[94,123077,123078,123080],{"class":96,"line":1160},[94,123079,123072],{"class":153},[94,123081,123082],{"class":209}," DBUS_SESSION_BUS_ADDRESS\n",[94,123084,123085],{"class":96,"line":1175},[94,123086,123087],{"class":1944},"gnome-session\n",[40,123089,123090],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[48,123092,123093],{"start":1175},[51,123094,123095],{},"给予执行权限：",[40,123097,123098],{},"为xstartup文件设置执行权限：",[85,123100,123102],{"className":117273,"code":123101,"language":117275,"meta":14,"style":14},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[91,123103,123104],{"__ignoreMap":14},[94,123105,123106,123108,123111],{"class":96,"line":97},[94,123107,24594],{"class":1944},[94,123109,123110],{"class":209}," +x",[94,123112,123054],{"class":209},[48,123114,123115],{"start":1181},[51,123116,123117],{},"启动VNC服务器：",[85,123119,123121],{"className":117273,"code":123120,"language":117275,"meta":14,"style":14},"vncserver -geometry 1920x1080 -localhost=0\n",[91,123122,123123],{"__ignoreMap":14},[94,123124,123125,123128,123131,123134],{"class":96,"line":97},[94,123126,123127],{"class":1944},"vncserver",[94,123129,123130],{"class":153}," -geometry",[94,123132,123133],{"class":209}," 1920x1080",[94,123135,123136],{"class":153}," -localhost=0\n",[40,123138,123139],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[40,123141,123142],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[48,123144,123145],{"start":1195},[51,123146,123147],{},"查看已开启的VNC服务器：",[85,123149,123151],{"className":117273,"code":123150,"language":117275,"meta":14,"style":14},"vncserver -list\n",[91,123152,123153],{"__ignoreMap":14},[94,123154,123155,123157],{"class":96,"line":97},[94,123156,123127],{"class":1944},[94,123158,123159],{"class":153}," -list\n",[40,123161,123162],{},[1443,123163],{"alt":14,"src":123164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[48,123166,123167],{"start":1201},[51,123168,123169],{},"连接到VNC服务器：",[40,123171,123172],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[48,123174,123175],{"start":1292},[51,123176,123177],{},"停止VNC服务器：",[40,123179,123180],{},"如果需要停止VNC服务器，可以使用以下命令：",[85,123182,123184],{"className":117273,"code":123183,"language":117275,"meta":14,"style":14},"vncserver -kill :1\n",[91,123185,123186],{"__ignoreMap":14},[94,123187,123188,123190,123193],{"class":96,"line":97},[94,123189,123127],{"class":1944},[94,123191,123192],{"class":153}," -kill",[94,123194,123195],{"class":209}," :1\n",[40,123197,123198],{},"将:1替换为你实际使用的显示编号。",[40,123200,123201],{},[1443,123202],{"alt":14,"src":123203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[40,123205,123206],{},[1443,123207],{"alt":14,"src":123208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[35,123210,123212],{"id":123211},"_74-usb端口设置","7.4 USB端口设置",[40,123214,123215],{},[254,123216,123217],{},"首先先配置好权限",[85,123219,123221],{"className":117273,"code":123220,"language":117275,"meta":14,"style":14},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[91,123222,123223,123228,123241,123248,123253],{"__ignoreMap":14},[94,123224,123225],{"class":96,"line":97},[94,123226,123227],{"class":163},"# 将用户权限提高\n",[94,123229,123230,123232,123234,123236,123239],{"class":96,"line":15},[94,123231,24559],{"class":1944},[94,123233,26557],{"class":209},[94,123235,26560],{"class":153},[94,123237,123238],{"class":209}," dialout",[94,123240,26565],{"class":104},[94,123242,123243,123245],{"class":96,"line":1160},[94,123244,26584],{"class":1944},[94,123246,123247],{"class":209}," dialout\n",[94,123249,123250],{"class":96,"line":1175},[94,123251,123252],{"class":163},"# 查看下面命令是否输出dialout（若输出才正常）\n",[94,123254,123255],{"class":96,"line":1181},[94,123256,123257],{"class":1944},"groups\n",[40,123259,123260],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[65,123262,123264],{"id":123263},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[40,123266,123267,123270],{},[254,123268,123269],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[40,123272,123273,123276],{},[254,123274,123275],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[40,123278,123279],{},[254,123280,123281],{},"流程如下：",[40,123283,123284],{},"（1）.查找设备idVendor和idProduct",[40,123286,123287,123288,123291],{},"接入两个USB设备，在终端调用指令",[91,123289,123290],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[40,123293,123294],{},[1443,123295],{"alt":14,"src":123296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[40,123298,123299,123300,123303],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[91,123301,123302],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[40,123305,123306],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[40,123308,123309],{},"（2）.编写映射规则",[40,123311,123312,123313,123316],{},"在",[91,123314,123315],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[85,123318,123320],{"className":117273,"code":123319,"language":117275,"meta":14,"style":14},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[91,123321,123322],{"__ignoreMap":14},[94,123323,123324,123326,123328],{"class":96,"line":97},[94,123325,24559],{"class":1944},[94,123327,118560],{"class":209},[94,123329,123330],{"class":209}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[40,123332,123333],{},"输入如下内容：",[85,123335,123337],{"className":117273,"code":123336,"language":117275,"meta":14,"style":14},"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",[91,123338,123339,123369],{"__ignoreMap":14},[94,123340,123341,123344,123346,123349,123352,123355,123358,123360,123363,123366],{"class":96,"line":97},[94,123342,123343],{"class":104},"KERNEL",[94,123345,150],{"class":100},[94,123347,123348],{"class":209},"=\"ttyUSB*\",",[94,123350,123351],{"class":1944}," ATTRS",[94,123353,123354],{"class":209},"{idVendor}==",[94,123356,123357],{"class":1944},"\"10c4\"",[94,123359,483],{"class":1944},[94,123361,123362],{"class":209}," ATTRS{idProduct}==\"ea60\",",[94,123364,123365],{"class":209}," MODE:=\"0777\",",[94,123367,123368],{"class":209}," SYMLINK+=\"mylidar\"\n",[94,123370,123371,123373,123375,123377,123379,123381,123384,123386,123389,123391],{"class":96,"line":15},[94,123372,123343],{"class":104},[94,123374,150],{"class":100},[94,123376,123348],{"class":209},[94,123378,123351],{"class":1944},[94,123380,123354],{"class":209},[94,123382,123383],{"class":1944},"\"1a86\"",[94,123385,483],{"class":1944},[94,123387,123388],{"class":209}," ATTRS{idProduct}==\"7523\",",[94,123390,123365],{"class":209},[94,123392,123393],{"class":209}," SYMLINK+=\"mycar\"\n",[40,123395,123396],{},"代码解释：",[1112,123398,123399,123402,123405,123408],{},[51,123400,123401],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[51,123403,123404],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[51,123406,123407],{},"SYMLINK是符号连接，即绑定的别名；",[51,123409,123410],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[40,123412,123413,123414,123417,123420],{},"***小提示：***",[23535,123415,123416],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[91,123418,123419],{},"\u002Fetc\u002Fudev\u002Frule.d",[23535,123421,123422],{},"目录即可。",[40,123424,123425],{},"表格 还在加载中，请等待加载完成后再尝试复制",[40,123427,123428],{},"（3）.使规则生效",[40,123430,123431],{},"在终端下输入如下指令：",[85,123433,123435],{"className":117273,"code":123434,"language":117275,"meta":14,"style":14},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[91,123436,123437,123442,123454,123465,123469,123474,123487],{"__ignoreMap":14},[94,123438,123439],{"class":96,"line":97},[94,123440,123441],{"class":163},"# Ubuntu用下方命令\n",[94,123443,123444,123446,123448,123451],{"class":96,"line":15},[94,123445,24559],{"class":1944},[94,123447,120025],{"class":209},[94,123449,123450],{"class":209}," udev",[94,123452,123453],{"class":209}," reload\n",[94,123455,123456,123458,123460,123462],{"class":96,"line":1160},[94,123457,24559],{"class":1944},[94,123459,120025],{"class":209},[94,123461,123450],{"class":209},[94,123463,123464],{"class":209}," restart\n",[94,123466,123467],{"class":96,"line":1175},[94,123468,2381],{"emptyLinePlaceholder":20},[94,123470,123471],{"class":96,"line":1181},[94,123472,123473],{"class":163},"#Fedora用下方命令\n",[94,123475,123476,123478,123481,123484],{"class":96,"line":1195},[94,123477,24559],{"class":1944},[94,123479,123480],{"class":209}," udevadm",[94,123482,123483],{"class":209}," control",[94,123485,123486],{"class":153}," --reload\n",[94,123488,123489,123491,123493],{"class":96,"line":1201},[94,123490,24559],{"class":1944},[94,123492,123480],{"class":209},[94,123494,123495],{"class":209}," trigger\n",[40,123497,123498],{},"再重新插拔设备即可。",[40,123500,123501],{},"（4）.测试",[40,123503,123504],{},"终端下输入如下指令",[85,123506,123508],{"className":117273,"code":123507,"language":117275,"meta":14,"style":14},"ll \u002Fdev | grep ttyUSB\n",[91,123509,123510],{"__ignoreMap":14},[94,123511,123512,123515,123518,123520,123522],{"class":96,"line":97},[94,123513,123514],{"class":1944},"ll",[94,123516,123517],{"class":209}," \u002Fdev",[94,123519,25092],{"class":100},[94,123521,30219],{"class":1944},[94,123523,123524],{"class":209}," ttyUSB\n",[40,123526,123527],{},"运行结果如下：",[40,123529,123530],{},[1443,123531],{"alt":14,"src":123532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[40,123534,123535,123536,123539],{},"也可以多次插拔USB设备，会发现设备端口",[91,123537,123538],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[40,123541,123542],{},[254,123543,117941],{},[40,123545,123546],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[65,123548,123550],{"id":123549},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[40,123552,123553,123555],{},[254,123554,123269],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[40,123557,123558,123560],{},[254,123559,123275],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[40,123562,123563],{},[254,123564,123281],{},[40,123566,123567],{},"（1）.查看所连接的主机USB接口的KERNELS",[40,123569,123570],{},"调用如下指令查看第一台雷达的USB信息：",[85,123572,123574],{"className":117273,"code":123573,"language":117275,"meta":14,"style":14},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[91,123575,123576,123596],{"__ignoreMap":14},[94,123577,123578,123581,123583,123586,123589,123591,123593],{"class":96,"line":97},[94,123579,123580],{"class":1944},"udevadm",[94,123582,69798],{"class":209},[94,123584,123585],{"class":153}," --attribute-walk",[94,123587,123588],{"class":153}," --name=\u002Fdev\u002FttyUSB0",[94,123590,25092],{"class":100},[94,123592,30219],{"class":1944},[94,123594,123595],{"class":209}," KERNELS\n",[94,123597,123598,123600,123602,123604,123607,123609,123611],{"class":96,"line":15},[94,123599,123580],{"class":1944},[94,123601,69798],{"class":209},[94,123603,123585],{"class":153},[94,123605,123606],{"class":153}," --name=\u002Fdev\u002FttyACM0",[94,123608,25092],{"class":100},[94,123610,30219],{"class":1944},[94,123612,123595],{"class":209},[40,123614,123615],{},[1443,123616],{"alt":14,"src":123617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[40,123619,123620],{},"调用如下指令查看第二台雷达的USB信息：",[85,123622,123624],{"className":117273,"code":123623,"language":117275,"meta":14,"style":14},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[91,123625,123626],{"__ignoreMap":14},[94,123627,123628,123630,123632,123634,123637,123639,123641],{"class":96,"line":97},[94,123629,123580],{"class":1944},[94,123631,69798],{"class":209},[94,123633,123585],{"class":153},[94,123635,123636],{"class":153}," --name=\u002Fdev\u002FttyUSB1",[94,123638,25092],{"class":100},[94,123640,30219],{"class":1944},[94,123642,123595],{"class":209},[40,123644,123645,123646,123649,123650,123653,123654,123657],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[91,123647,123648],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[91,123651,123652],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[254,123655,123656],{},"唯一性标识","”。",[40,123659,123309],{},[40,123661,123312,123662,123664],{},[91,123663,123315],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[85,123666,123667],{"className":117273,"code":123319,"language":117275,"meta":14,"style":14},[91,123668,123669],{"__ignoreMap":14},[94,123670,123671,123673,123675],{"class":96,"line":97},[94,123672,24559],{"class":1944},[94,123674,118560],{"class":209},[94,123676,123330],{"class":209},[85,123678,123680],{"className":117273,"code":123679,"language":117275,"meta":14,"style":14},"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",[91,123681,123682,123711],{"__ignoreMap":14},[94,123683,123684,123686,123688,123690,123693,123695,123698,123701,123703,123706,123708],{"class":96,"line":97},[94,123685,123343],{"class":104},[94,123687,150],{"class":100},[94,123689,123348],{"class":209},[94,123691,123692],{"class":104}," KERNELS",[94,123694,150],{"class":100},[94,123696,123697],{"class":209},"=\"1-1.3:1.0\",",[94,123699,123700],{"class":1944}," MODE:",[94,123702,150],{"class":209},[94,123704,123705],{"class":1944},"\"0777\"",[94,123707,483],{"class":1944},[94,123709,123710],{"class":209}," SYMLINK+=\"rplidar_front\"\n",[94,123712,123713,123715,123717,123719,123721,123723,123726,123728,123730,123732,123734],{"class":96,"line":15},[94,123714,123343],{"class":104},[94,123716,150],{"class":100},[94,123718,123348],{"class":209},[94,123720,123692],{"class":104},[94,123722,150],{"class":100},[94,123724,123725],{"class":209},"=\"1-1.4:1.0\",",[94,123727,123700],{"class":1944},[94,123729,150],{"class":209},[94,123731,123705],{"class":1944},[94,123733,483],{"class":1944},[94,123735,123736],{"class":209}," SYMLINK+=\"rplidar_back\"\n",[40,123738,123428],{},[40,123740,123431],{},[85,123742,123743],{"className":117273,"code":123434,"language":117275,"meta":14,"style":14},[91,123744,123745,123749,123759,123769,123773,123777,123787],{"__ignoreMap":14},[94,123746,123747],{"class":96,"line":97},[94,123748,123441],{"class":163},[94,123750,123751,123753,123755,123757],{"class":96,"line":15},[94,123752,24559],{"class":1944},[94,123754,120025],{"class":209},[94,123756,123450],{"class":209},[94,123758,123453],{"class":209},[94,123760,123761,123763,123765,123767],{"class":96,"line":1160},[94,123762,24559],{"class":1944},[94,123764,120025],{"class":209},[94,123766,123450],{"class":209},[94,123768,123464],{"class":209},[94,123770,123771],{"class":96,"line":1175},[94,123772,2381],{"emptyLinePlaceholder":20},[94,123774,123775],{"class":96,"line":1181},[94,123776,123473],{"class":163},[94,123778,123779,123781,123783,123785],{"class":96,"line":1195},[94,123780,24559],{"class":1944},[94,123782,123480],{"class":209},[94,123784,123483],{"class":209},[94,123786,123486],{"class":153},[94,123788,123789,123791,123793],{"class":96,"line":1201},[94,123790,24559],{"class":1944},[94,123792,123480],{"class":209},[94,123794,123495],{"class":209},[40,123796,123498],{},[40,123798,123501],{},[40,123800,123504,123801,123804],{},[91,123802,123803],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[40,123806,123807],{},[1443,123808],{"alt":14,"src":123809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[40,123811,123812],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[40,123814,123815,123817],{},[254,123816,117941],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[65,123819,123821],{"id":123820},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[40,123823,123824],{},"（1）.查看所连接的主机USB接口的信息",[85,123826,123828],{"className":117273,"code":123827,"language":117275,"meta":14,"style":14},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[91,123829,123830,123860],{"__ignoreMap":14},[94,123831,123832,123834,123836,123839,123841,123843,123845,123847,123850,123853,123855,123858],{"class":96,"line":97},[94,123833,123580],{"class":1944},[94,123835,69798],{"class":209},[94,123837,123838],{"class":153}," -a",[94,123840,29199],{"class":153},[94,123842,28405],{"class":104},[94,123844,123580],{"class":1944},[94,123846,69798],{"class":209},[94,123848,123849],{"class":153}," -q",[94,123851,123852],{"class":209}," path",[94,123854,25098],{"class":153},[94,123856,123857],{"class":209}," \u002Fdev\u002FttyACM0",[94,123859,111],{"class":104},[94,123861,123862,123864,123866,123868,123870,123872,123874,123876,123878,123880,123882,123885],{"class":96,"line":15},[94,123863,123580],{"class":1944},[94,123865,69798],{"class":209},[94,123867,123838],{"class":153},[94,123869,29199],{"class":153},[94,123871,28405],{"class":104},[94,123873,123580],{"class":1944},[94,123875,69798],{"class":209},[94,123877,123849],{"class":153},[94,123879,123852],{"class":209},[94,123881,25098],{"class":153},[94,123883,123884],{"class":209}," \u002Fdev\u002FttyUSB0",[94,123886,111],{"class":104},[40,123888,123889],{},[1443,123890],{"alt":14,"src":123891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[40,123893,123894],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[40,123896,123309],{},[40,123898,123312,123899,123664],{},[91,123900,123315],{},[85,123902,123903],{"className":117273,"code":123319,"language":117275,"meta":14,"style":14},[91,123904,123905],{"__ignoreMap":14},[94,123906,123907,123909,123911],{"class":96,"line":97},[94,123908,24559],{"class":1944},[94,123910,118560],{"class":209},[94,123912,123330],{"class":209},[85,123914,123916],{"className":117273,"code":123915,"language":117275,"meta":14,"style":14},"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",[91,123917,123918,123946,123972],{"__ignoreMap":14},[94,123919,123920,123922,123924,123927,123929,123931,123933,123935,123938,123941,123943],{"class":96,"line":97},[94,123921,123343],{"class":104},[94,123923,150],{"class":100},[94,123925,123926],{"class":209},"=\"ttyACM*\",",[94,123928,123351],{"class":1944},[94,123930,123354],{"class":209},[94,123932,123383],{"class":1944},[94,123934,483],{"class":1944},[94,123936,123937],{"class":209}," ATTRS{idProduct}==\"55d4\",",[94,123939,123940],{"class":209}," ATTRS{serial}==\"0001\",",[94,123942,123365],{"class":209},[94,123944,123945],{"class":209}," SYMLINK+=\"ttyACM_MCU\"\n",[94,123947,123948,123950,123952,123954,123956,123958,123960,123962,123964,123967,123969],{"class":96,"line":15},[94,123949,123343],{"class":104},[94,123951,150],{"class":100},[94,123953,123926],{"class":209},[94,123955,123351],{"class":1944},[94,123957,123354],{"class":209},[94,123959,123383],{"class":1944},[94,123961,483],{"class":1944},[94,123963,123937],{"class":209},[94,123965,123966],{"class":209}," ATTRS{serial}==\"0002\",",[94,123968,123365],{"class":209},[94,123970,123971],{"class":209}," SYMLINK+=\"ttyACM_Lidar\"\n",[94,123973,123974,123976,123978,123980,123982,123984,123986,123988,123990,123992],{"class":96,"line":1160},[94,123975,123343],{"class":104},[94,123977,150],{"class":100},[94,123979,123348],{"class":209},[94,123981,123351],{"class":1944},[94,123983,123354],{"class":209},[94,123985,123383],{"class":1944},[94,123987,483],{"class":1944},[94,123989,123388],{"class":209},[94,123991,123365],{"class":209},[94,123993,123994],{"class":209}," SYMLINK+=\"ttyUSB_IMU\"\n",[40,123996,123428],{},[40,123998,123431],{},[85,124000,124001],{"className":117273,"code":123434,"language":117275,"meta":14,"style":14},[91,124002,124003,124007,124017,124027,124031,124035,124045],{"__ignoreMap":14},[94,124004,124005],{"class":96,"line":97},[94,124006,123441],{"class":163},[94,124008,124009,124011,124013,124015],{"class":96,"line":15},[94,124010,24559],{"class":1944},[94,124012,120025],{"class":209},[94,124014,123450],{"class":209},[94,124016,123453],{"class":209},[94,124018,124019,124021,124023,124025],{"class":96,"line":1160},[94,124020,24559],{"class":1944},[94,124022,120025],{"class":209},[94,124024,123450],{"class":209},[94,124026,123464],{"class":209},[94,124028,124029],{"class":96,"line":1175},[94,124030,2381],{"emptyLinePlaceholder":20},[94,124032,124033],{"class":96,"line":1181},[94,124034,123473],{"class":163},[94,124036,124037,124039,124041,124043],{"class":96,"line":1195},[94,124038,24559],{"class":1944},[94,124040,123480],{"class":209},[94,124042,123483],{"class":209},[94,124044,123486],{"class":153},[94,124046,124047,124049,124051],{"class":96,"line":1201},[94,124048,24559],{"class":1944},[94,124050,123480],{"class":209},[94,124052,123495],{"class":209},[40,124054,124055,124056],{},"再重新插拔设备即可，或者 ",[254,124057,124058],{},"直接重启系统。",[40,124060,123501],{},[40,124062,123504,124063,123804],{},[91,124064,123803],{},[40,124066,124067],{},[1443,124068],{"alt":14,"src":124069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[40,124071,123812],{},[40,124073,124074,124076],{},[254,124075,117941],{}," 一些设备可能没有串口号等。",[65,124078,124080],{"id":124079},"_744-其他注意事项","7.4.4 其他注意事项",[40,124082,124083,124084,124086,124087,124090,124091,18392,124094,124097,124098,124100],{},"并非所有的USB设备端口号都是",[91,124085,123538],{},"的格式，比如Arduino的端口号可能是",[91,124088,124089],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[91,124092,124093],{},"videon",[91,124095,124096],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[91,124099,124093],{},"端口，绑定时需要关联的也是该接口。",[40,124102,124103,124104,124107,124108,124111,124112,124114,124115,124118,124119,124122,124123,124126,124127,124126,124130,124126,124133,28368],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[91,124105,124106],{},"KERNEL==\"ttyUSB*\"","修改为",[91,124109,124110],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[91,124113,124106],{},"修改为类似于",[91,124116,124117],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[91,124120,124121],{},"video[0,2,4,6]","表示可以绑定的端口为",[91,124124,124125],{},"video0","或",[91,124128,124129],{},"video2",[91,124131,124132],{},"video4",[91,124134,124135],{},"video6",[35,124137,124139],{"id":124138},"_75-挂载内网网页","7.5 挂载内网网页",[40,124141,124142],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[40,124144,124145],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[40,124147,124148],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[40,124150,124151,124152],{},"Termux 下载地址（F-Droid）：",[343,124153,124154],{"href":124154,"rel":124155},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23847],[40,124157,124158],{},"首先打开app后，先更新软件缓存：",[85,124160,124162],{"className":117273,"code":124161,"language":117275,"meta":14,"style":14},"pkg update\n",[91,124163,124164],{"__ignoreMap":14},[94,124165,124166,124169],{"class":96,"line":97},[94,124167,124168],{"class":1944},"pkg",[94,124170,26225],{"class":209},[40,124172,124173],{},"然后换源",[85,124175,124177],{"className":117273,"code":124176,"language":117275,"meta":14,"style":14},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[91,124178,124179],{"__ignoreMap":14},[94,124180,124181,124183,124186],{"class":96,"line":97},[94,124182,123051],{"class":1944},[94,124184,124185],{"class":104}," $PREFIX",[94,124187,124188],{"class":209},"\u002Fetc\u002Fapt\u002Fsources.list\n",[40,124190,124191],{},"将该文件内容替换为下面：",[85,124193,124195],{"className":117273,"code":124194,"language":117275,"meta":14,"style":14},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[91,124196,124197],{"__ignoreMap":14},[94,124198,124199,124202,124205,124208],{"class":96,"line":97},[94,124200,124201],{"class":1944},"deb",[94,124203,124204],{"class":209}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[94,124206,124207],{"class":209}," stable",[94,124209,124210],{"class":209}," main\n",[1112,124212,124213,124240],{},[51,124214,124215,124216,124218,124219],{},"如果你使用的是",[91,124217,123051],{},"编辑器：",[1112,124220,124221,124228,124234],{},[51,124222,124223,124224,124227],{},"按 ",[91,124225,124226],{},"Ctrl+O"," 保存文件。",[51,124229,124223,124230,124233],{},[91,124231,124232],{},"Enter"," 确认文件名。",[51,124235,124223,124236,124239],{},[91,124237,124238],{},"Ctrl+X"," 退出编辑器。",[51,124241,124215,124242,124218,124245],{},[91,124243,124244],{},"vim",[1112,124246,124247,124253],{},[51,124248,124223,124249,124252],{},[91,124250,124251],{},"Esc"," 退出编辑模式。",[51,124254,124255,124256,124258],{},"输入 ",[91,124257,119198],{}," 保存并退出。",[40,124260,124261],{},"接下来重新更新软件源：",[85,124263,124265],{"className":117273,"code":124264,"language":117275,"meta":14,"style":14},"pkg update && pkg upgrade\n",[91,124266,124267],{"__ignoreMap":14},[94,124268,124269,124271,124273,124275,124277],{"class":96,"line":97},[94,124270,124168],{"class":1944},[94,124272,117324],{"class":209},[94,124274,26173],{"class":104},[94,124276,124168],{"class":1944},[94,124278,117310],{"class":209},[40,124280,124281],{},"安装python：",[85,124283,124285],{"className":117273,"code":124284,"language":117275,"meta":14,"style":14},"pkg install python\n",[91,124286,124287],{"__ignoreMap":14},[94,124288,124289,124291,124293],{"class":96,"line":97},[94,124290,124168],{"class":1944},[94,124292,23816],{"class":209},[94,124294,124295],{"class":209}," python\n",[40,124297,124298,26456],{},[254,124299,124300],{},"通过Termux访问设备存储",[40,124302,124303],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[85,124305,124307],{"className":117273,"code":124306,"language":117275,"meta":14,"style":14},"termux-setup-storage\n",[91,124308,124309],{"__ignoreMap":14},[94,124310,124311],{"class":96,"line":97},[94,124312,124306],{"class":1944},[48,124314,124315],{},[51,124316,124317,26456,124320],{},[254,124318,124319],{},"进入HTML文件所在的目录",[48,124321,124322],{},[51,124323,124324,124325,124327],{},"使用",[91,124326,101253],{},"命令进入HTML文件所在的目录：",[85,124329,124331],{"className":117273,"code":124330,"language":117275,"meta":14,"style":14},"cd ~\u002Fyour_html_folder\n",[91,124332,124333],{"__ignoreMap":14},[94,124334,124335,124337],{"class":96,"line":97},[94,124336,101253],{"class":153},[94,124338,124339],{"class":209}," ~\u002Fyour_html_folder\n",[48,124341,124342],{"start":15},[51,124343,124344,26456,124347,124352,124369],{},[254,124345,124346],{},"启动Python HTTP服务器",[48,124348,124349],{},[51,124350,124351],{},"运行以下命令启动一个简单的HTTP服务器：",[85,124353,124355],{"className":117273,"code":124354,"language":117275,"meta":14,"style":14},"python -m http.server 8000\n",[91,124356,124357],{"__ignoreMap":14},[94,124358,124359,124361,124363,124366],{"class":96,"line":97},[94,124360,30363],{"class":1944},[94,124362,100859],{"class":153},[94,124364,124365],{"class":209}," http.server",[94,124367,124368],{"class":153}," 8000\n",[48,124370,124371],{"start":1160},[51,124372,124373,124374,124377],{},"这会在端口",[91,124375,124376],{},"8000","上启动一个Web服务器。",[1112,124379,124380],{},[51,124381,124382],{},"启动服务器后，Termux会显示日志信息，例如：",[85,124384,124386],{"className":120793,"code":124385,"language":120795,"meta":120796,"style":14},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[91,124387,124388],{"__ignoreMap":14},[94,124389,124390],{"class":96,"line":97},[94,124391,124385],{},[1112,124393,124394],{},[51,124395,124396],{},"这表示服务器已成功启动。",[40,124398,124399],{},[254,124400,124401],{},"在浏览器中访问HTML文件",[48,124403,124404],{},[51,124405,124406,26456,124409,124414],{},[254,124407,124408],{},"在同一设备上访问",[48,124410,124411],{},[51,124412,124413],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[85,124415,124418],{"className":124416,"code":124417,"language":71641,"meta":14,"style":14},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[91,124419,124420],{"__ignoreMap":14},[94,124421,124422,124425],{"class":96,"line":97},[94,124423,124424],{"class":104},"http:",[94,124426,124427],{"class":163},"\u002F\u002Flocalhost:8000\n",[1112,124429,124430],{},[51,124431,124432,124433,124436],{},"如果HTML文件中有",[91,124434,124435],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[35,124438,124440],{"id":124439},"_76-linux重点知识","7.6 Linux重点知识",[65,124442,124444],{"id":124443},"_761-关于点的说明","7.6.1 关于点的说明",[40,124446,124447],{},[1443,124448],{"alt":14,"src":124449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[40,124451,124452],{},"一点本目录，两点上目录",[65,124454,124456],{"id":124455},"_762-目录","7.6.2 目录",[21980,124458,124460],{"id":124459},"_7621-系统启动必须","7.6.2.1 系统启动必须",[40,124462,124463],{},[254,124464,124465],{},"\u002Fboot:",[40,124467,124468],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[40,124470,124471],{},[254,124472,124473],{},"\u002Fetc:",[40,124475,124476],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[40,124478,124479],{},[254,124480,124481],{},"\u002Flib：",[40,124483,124484],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[40,124486,124487],{},[254,124488,124489],{},"\u002Fsys:",[40,124491,124492],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[21980,124494,124496],{"id":124495},"_7622-指令集合","7.6.2.2 指令集合",[40,124498,124499],{},[254,124500,124501],{},"\u002Fbin:",[40,124503,124504],{},"为二进制文件的缩写，存放最经常使用的命令",[40,124506,124507],{},[254,124508,124509],{},"\u002Fsbin:",[40,124511,124512],{},"只有系统管理员才能使用的程序和指令",[21980,124514,124516],{"id":124515},"_7623-外部文件管理","7.6.2.3 外部文件管理",[40,124518,124519],{},[254,124520,124521],{},"\u002Fdev:",[40,124523,124524],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[40,124526,124527],{},[254,124528,124529],{},"\u002Fmedia:",[40,124531,124532],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[40,124534,124535],{},[254,124536,124537],{},"\u002Fmnt:",[40,124539,124540],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[21980,124542,124544],{"id":124543},"_7624-临时文件","7.6.2.4 临时文件",[40,124546,124547],{},[254,124548,124549],{},"\u002Frun:",[40,124551,124552],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[40,124554,124555],{},[254,124556,124557],{},"\u002Flost+found:",[40,124559,124560],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[40,124562,124563],{},[254,124564,124565],{},"\u002Ftmp:",[40,124567,124568],{},"这个目录是用来存放一些临时文件的",[21980,124570,124572],{"id":124571},"_7625-账户","7.6.2.5 账户",[40,124574,124575],{},[254,124576,124577],{},"\u002Froot：",[40,124579,124580],{},"系统管理员的用户主目录",[40,124582,124583,26456],{},[254,124584,124585],{},"\u002Fhome",[40,124587,124588],{},"用户的主目录，以用户的账号命名的",[40,124590,124591,26456],{},[254,124592,124593],{},"\u002Fusr",[40,124595,124596],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[40,124598,124599],{},[254,124600,124601],{},"\u002Fusr\u002Fbin：",[40,124603,124604],{},"系统用户使用的应用程序与指令",[40,124606,124607],{},[254,124608,124609],{},"\u002Fusr\u002Fsbin：",[40,124611,124612],{},"超级用户使用的比较高级的管理程序和系统守护程序",[40,124614,124615],{},[254,124616,124617],{},"\u002Fusr\u002Fsrc：",[40,124619,124620],{},"内核源代码默认的放置目录",[21980,124622,124624],{"id":124623},"_7626-运行过程要用","7.6.2.6 运行过程要用",[40,124626,124627],{},[254,124628,124629],{},"\u002Fvar：",[40,124631,124632],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[40,124634,124635],{},[254,124636,124637],{},"\u002Fproc:",[40,124639,124640,124641,124644],{},"管理 ",[254,124642,124643],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[21980,124646,124648],{"id":124647},"_7627-扩展用的","7.6.2.7 扩展用的",[40,124650,124651],{},[254,124652,124653],{},"\u002Fopt:",[40,124655,124656],{},"默认是空的，我们安装额外软件可以放在这个里面",[40,124658,124659],{},[254,124660,124661],{},"\u002Fsrv:",[40,124663,124664],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[65,124666,124668],{"id":124667},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[40,124670,124671],{},[1443,124672],{"alt":14,"src":124673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[40,124675,124676],{},"windows-->linux:",[40,124678,124679],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[40,124681,124682],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[40,124684,124685],{},"linux传输文件到windows",[40,124687,124688],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[65,124690,124692],{"id":124691},"_764-易忘知识","7.6.4 易忘知识",[40,124694,124695],{},"操作系统内核查看",[85,124697,124698],{"className":117273,"code":121267,"language":117275,"meta":14,"style":14},[91,124699,124700],{"__ignoreMap":14},[94,124701,124702,124704],{"class":96,"line":97},[94,124703,70181],{"class":1944},[94,124705,121276],{"class":153},[40,124707,124708],{},[1443,124709],{"alt":14,"src":124710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[40,124712,124713],{},[1443,124714],{"alt":14,"src":124715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[85,124717,124719],{"className":117273,"code":124718,"language":117275,"meta":14,"style":14},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[91,124720,124721,124733],{"__ignoreMap":14},[94,124722,124723,124725,124728,124731],{"class":96,"line":97},[94,124724,121484],{"class":1944},[94,124726,124727],{"class":209}," mvtest",[94,124729,124730],{"class":209}," mvtest2",[94,124732,2655],{"class":104},[94,124734,124735],{"class":96,"line":15},[94,124736,124737],{"class":1944},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[40,124739,124740],{},[1443,124741],{"alt":14,"src":124742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[40,124744,124745],{},[1443,124746],{"alt":14,"src":124747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[40,124749,124750,124751,124754],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[91,124752,124753],{},"du -a"," 可以快速查看磁盘使用细节。",[65,124756,124758],{"id":124757},"_765-vim","7.6.5 Vim",[40,124760,124761],{},[1443,124762],{"alt":14,"src":124763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[40,124765,124766],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[40,124768,124769],{},"一开始进去为命令模式，此时点击输入的字母为命令",[40,124771,124772],{},[254,124773,124774],{},"1.命令模式：",[40,124776,124777],{},"i 切换到输入模式，在光标当前位置开始输入文本",[40,124779,124780],{},"x 删除当前光标所在处的字符",[40,124782,124783],{},"：切换到底线命令模式，以在最底一行输入命令",[40,124785,124786],{},"a 进行插入模式，在光标下一个位置输入文本",[40,124788,124789],{},"o 在当前的下方插入一个新行，并进入插入模式",[40,124791,124792],{},"0 在当前行的上方插入一个新行，并进入插入模式",[40,124794,124795],{},"dd 剪切当前行",[40,124797,124798],{},"yy 复制当前行",[40,124800,124801],{},"p 粘贴剪贴板内容到光标下方",[40,124803,124804],{},"P 粘贴剪贴板内容到光标上方",[40,124806,124807],{},"u 撤销上一次操作",[40,124809,124810],{},"ctrl+r 重做上一次操作",[40,124812,124813,124815],{},[900,124814],{}," 保存文件",[40,124817,124818,124820],{},[750,124819],{}," 退出Vim编辑器",[40,124822,124823,124825],{},[750,124824],{},"! 强制退出Vim编辑器，不保存修改",[40,124827,124828],{},[254,124829,124830],{},"2.输入模式：",[40,124832,124833],{},[1443,124834],{"alt":14,"src":124835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[40,124837,124838],{},[254,124839,124840],{},"3.底线命令模式：",[40,124842,124843],{},[1443,124844],{"alt":14,"src":124845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[40,124847,124848],{},"按下esc可以退出底线命令模式",[65,124850,124852],{"id":124851},"_766-apt","7.6.6 apt",[40,124854,124855],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[65,124857,124859],{"id":124858},"_767-home与root的区别","7.6.7 home与root的区别",[40,124861,124862],{},[1443,124863],{"alt":14,"src":124864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[40,124866,124867],{},[1443,124868],{"alt":14,"src":124869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[40,124871,124872],{},[1443,124873],{"alt":14,"src":124874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[40,124876,124877],{},[1443,124878],{"alt":14,"src":124879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[65,124881,124883],{"id":124882},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[40,124885,124886],{},[343,124887,124888],{"href":124888,"rel":124889},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23847],[48,124891,124892,124895],{},[51,124893,124894],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[51,124896,124897],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[40,124899,124900],{},[1443,124901],{"alt":14,"src":124902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[40,124904,124905],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[40,124907,124908],{},[1443,124909],{"alt":14,"src":124910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[85,124912,124914],{"className":120793,"code":124913,"language":120795,"meta":120796,"style":14},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[91,124915,124916,124921],{"__ignoreMap":14},[94,124917,124918],{"class":96,"line":97},[94,124919,124920],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[94,124922,124923],{"class":96,"line":15},[94,124924,124925],{},".\u002Fpycharm.sh\n",[40,124927,124928],{},"3️⃣创建.desktop文件",[40,124930,124931],{},[254,124932,124933],{},"原理：",[1112,124935,124936,124946],{},[51,124937,124938,124939,124945],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[254,124940,124941,124944],{},[91,124942,124943],{},".desktop"," 文件"," 来识别应用。",[51,124947,124948,124950,124951],{},[91,124949,124943],{}," 文件相当于一个“应用注册表”，告诉系统：",[1112,124952,124953,124956,124959,124962,124965],{},[51,124954,124955],{},"应用名字（Name）",[51,124957,124958],{},"图标（Icon）",[51,124960,124961],{},"执行命令（Exec）",[51,124963,124964],{},"分类（Categories）",[51,124966,124967],{},"是否需要终端（Terminal）",[85,124969,124971],{"className":120793,"code":124970,"language":120795,"meta":120796,"style":14},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[91,124972,124973,124978],{"__ignoreMap":14},[94,124974,124975],{"class":96,"line":97},[94,124976,124977],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[94,124979,124980],{"class":96,"line":15},[94,124981,124982],{},"nano pycharm.desktop\n",[40,124984,124985],{},"nano是一个命令行下的编辑器，也可以使用vim",[85,124987,124989],{"className":120793,"code":124988,"language":120795,"meta":120796,"style":14},"[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",[91,124990,124991,124996,125001,125006,125011,125016,125021,125026,125031,125036],{"__ignoreMap":14},[94,124992,124993],{"class":96,"line":97},[94,124994,124995],{},"[Desktop Entry]\n",[94,124997,124998],{"class":96,"line":15},[94,124999,125000],{},"Version=1.0\n",[94,125002,125003],{"class":96,"line":1160},[94,125004,125005],{},"Type=Application\n",[94,125007,125008],{"class":96,"line":1175},[94,125009,125010],{},"Name=PyCharm\n",[94,125012,125013],{"class":96,"line":1181},[94,125014,125015],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[94,125017,125018],{"class":96,"line":1195},[94,125019,125020],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[94,125022,125023],{"class":96,"line":1201},[94,125024,125025],{},"Comment=JetBrains PyCharm IDE\n",[94,125027,125028],{"class":96,"line":1292},[94,125029,125030],{},"Categories=Development;IDE;\n",[94,125032,125033],{"class":96,"line":1298},[94,125034,125035],{},"Terminal=false\n",[94,125037,125038],{"class":96,"line":1310},[94,125039,125040],{},"StartupWMClass=jetbrains-pycharm\n",[1112,125042,125043,125049,125055,125061],{},[51,125044,125045,125048],{},[91,125046,125047],{},"Exec"," → 点击图标时执行的命令",[51,125050,125051,125054],{},[91,125052,125053],{},"Icon"," → 显示在菜单和桌面上的图标",[51,125056,125057,125060],{},[91,125058,125059],{},"Terminal=false"," → 不打开终端",[51,125062,125063,125066],{},[91,125064,125065],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125068,125069,125070],"blockquote",{},[40,125071,125072,125073,125075,125076],{},"可以理解成 ",[91,125074,124943],{}," 文件是 Linux 的 ",[254,125077,125078],{},"快捷方式配置文件",[40,125080,125081],{},"4️⃣设置可执行权限",[85,125083,125085],{"className":120793,"code":125084,"language":120795,"meta":120796,"style":14},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[91,125086,125087],{"__ignoreMap":14},[94,125088,125089],{"class":96,"line":97},[94,125090,125084],{},[40,125092,125093],{},"5️⃣桌面图标启动的话如下：",[85,125095,125097],{"className":120793,"code":125096,"language":120795,"meta":120796,"style":14},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[91,125098,125099,125104],{"__ignoreMap":14},[94,125100,125101],{"class":96,"line":97},[94,125102,125103],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[94,125105,125106],{"class":96,"line":15},[94,125107,125108],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[48,125110,125111],{"start":1160},[51,125112,125113],{},"下载Appimage文件实现软件的安装",[40,125115,125116],{},"1️⃣先下载appimage",[40,125118,125119],{},[343,125120,125121],{"href":125121,"rel":125122},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23847],[40,125124,125125],{},[1443,125126],{"alt":14,"src":125127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[40,125129,125130],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[40,125132,125133],{},[1443,125134],{"alt":14,"src":125135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[40,125137,125138],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[40,125140,125141],{},[1443,125142],{"alt":14,"src":125143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[40,125145,125146],{},[1443,125147],{"alt":14,"src":125148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[40,125150,125151,125152,125155],{},"3️⃣给他们放在",[91,125153,125154],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[40,125157,125158],{},"4️⃣给软件执行权限",[85,125160,125162],{"className":120793,"code":125161,"language":120795,"meta":120796,"style":14},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[91,125163,125164,125169],{"__ignoreMap":14},[94,125165,125166],{"class":96,"line":97},[94,125167,125168],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[94,125170,125171],{"class":96,"line":15},[94,125172,125173],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[40,125175,125176],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[85,125178,125180],{"className":117273,"code":125179,"language":117275,"meta":14,"style":14},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[91,125181,125182,125189,125196,125202],{"__ignoreMap":14},[94,125183,125184,125186],{"class":96,"line":97},[94,125185,101253],{"class":153},[94,125187,125188],{"class":209}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[94,125190,125191,125193],{"class":96,"line":15},[94,125192,101260],{"class":1944},[94,125194,125195],{"class":209}," .\u002Fqqmusic.desktop\n",[94,125197,125198,125200],{"class":96,"line":1160},[94,125199,124244],{"class":1944},[94,125201,125195],{"class":209},[94,125203,125204,125206,125208,125210],{"class":96,"line":1175},[94,125205,24559],{"class":1944},[94,125207,24562],{"class":209},[94,125209,123110],{"class":209},[94,125211,125195],{"class":209},[40,125213,125214,125216],{},[91,125215,101260],{},"：一个 Linux 命令，主要功能是：",[1112,125218,125219,125222],{},[51,125220,125221],{},"如果文件不存在，就创建一个新的空文件",[51,125223,125224],{},"如果文件已存在，就更新该文件的最后修改时间",[85,125226,125228],{"className":120793,"code":125227,"language":120795,"meta":120796,"style":14},"[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",[91,125229,125230,125234,125239,125244,125249,125253,125258],{"__ignoreMap":14},[94,125231,125232],{"class":96,"line":97},[94,125233,124995],{},[94,125235,125236],{"class":96,"line":15},[94,125237,125238],{},"Name=QQ音乐\n",[94,125240,125241],{"class":96,"line":1160},[94,125242,125243],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[94,125245,125246],{"class":96,"line":1175},[94,125247,125248],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[94,125250,125251],{"class":96,"line":1181},[94,125252,125005],{},[94,125254,125255],{"class":96,"line":1195},[94,125256,125257],{},"Categories=Audio;Music;Player;\n",[94,125259,125260],{"class":96,"line":1201},[94,125261,125262],{},"Comment=QQ Music Client for Linux\n",[40,125264,125265],{},"将文件复制进去",[40,125267,125268],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[40,125270,125271],{},[1443,125272],{"alt":14,"src":125273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[40,125275,125276],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[40,125278,125279],{},[1443,125280],{"alt":14,"src":125281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[40,125283,125284,125285,125288,125289,125292],{},"如果你用的不是KDE，那么也可以直接修改",[91,125286,125287],{},"qqmuic.desktop","：在exec的末尾加上",[91,125290,125291],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[85,125294,125296],{"className":120793,"code":125295,"language":120795,"meta":120796,"style":14},"[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",[91,125297,125298,125302,125306,125311,125315,125319,125323],{"__ignoreMap":14},[94,125299,125300],{"class":96,"line":97},[94,125301,124995],{},[94,125303,125304],{"class":96,"line":15},[94,125305,125238],{},[94,125307,125308],{"class":96,"line":1160},[94,125309,125310],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[94,125312,125313],{"class":96,"line":1175},[94,125314,125248],{},[94,125316,125317],{"class":96,"line":1181},[94,125318,125005],{},[94,125320,125321],{"class":96,"line":1195},[94,125322,125257],{},[94,125324,125325],{"class":96,"line":1201},[94,125326,125262],{},[40,125328,125329],{},[1443,125330],{"alt":14,"src":125331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[40,125333,125334],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[85,125336,125338],{"className":120793,"code":125337,"language":120795,"meta":120796,"style":14},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[91,125339,125340],{"__ignoreMap":14},[94,125341,125342],{"class":96,"line":97},[94,125343,125337],{},[48,125345,125346],{"start":1175},[51,125347,125348],{},"去Flathub上安装软件",[40,125350,125351],{},[343,125352,125353],{"href":125353,"rel":125354},"https:\u002F\u002Fflathub.org\u002F",[23847],[40,125356,125357],{},"1️⃣去上面的官网搜索软件+下载软件",[40,125359,125360],{},[1443,125361],{"alt":14,"src":125362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[85,125364,125366],{"className":120793,"code":125365,"language":120795,"meta":120796,"style":14},"flatpak install flathub com.obsproject.Studio\n",[91,125367,125368],{"__ignoreMap":14},[94,125369,125370],{"class":96,"line":97},[94,125371,125365],{},[40,125373,125374],{},[1443,125375],{"alt":14,"src":125376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[40,125378,125379],{},"2️⃣运行软件",[40,125381,125382],{},"a.官方方式：",[40,125384,125385],{},[1443,125386],{"alt":14,"src":125387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[85,125389,125390],{"className":120793,"code":125365,"language":120795,"meta":120796,"style":14},[91,125391,125392],{"__ignoreMap":14},[94,125393,125394],{"class":96,"line":97},[94,125395,125365],{},[40,125397,125398],{},"b.当普通软件运行：",[40,125400,125401],{},[1443,125402],{"alt":14,"src":125403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[40,125405,125406],{},[1443,125407],{"alt":14,"src":125408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5108,125410,125411],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":14,"searchDepth":15,"depth":15,"links":125413},[125414,125415,125420,125421,125427,125428],{"id":122146,"depth":15,"text":122147},{"id":122488,"depth":15,"text":122489,"children":125416},[125417,125418,125419],{"id":122492,"depth":1160,"text":122493},{"id":122559,"depth":1160,"text":122560},{"id":122820,"depth":1160,"text":122821},{"id":122973,"depth":15,"text":122974},{"id":123211,"depth":15,"text":123212,"children":125422},[125423,125424,125425,125426],{"id":123263,"depth":1160,"text":123264},{"id":123549,"depth":1160,"text":123550},{"id":123820,"depth":1160,"text":123821},{"id":124079,"depth":1160,"text":124080},{"id":124138,"depth":15,"text":124139},{"id":124439,"depth":15,"text":124440,"children":125429},[125430,125431,125432,125433,125434,125435,125436,125437],{"id":124443,"depth":1160,"text":124444},{"id":124455,"depth":1160,"text":124456},{"id":124667,"depth":1160,"text":124668},{"id":124691,"depth":1160,"text":124692},{"id":124757,"depth":1160,"text":124758},{"id":124851,"depth":1160,"text":124852},{"id":124858,"depth":1160,"text":124859},{"id":124882,"depth":1160,"text":124883},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122138,"description":17},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125444,"title":125445,"body":125446,"description":17,"extension":18,"meta":125450,"navigation":20,"path":125451,"seo":125452,"stem":125453,"__hash__":125454},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125447,"toc":125448},[],{"title":14,"searchDepth":15,"depth":15,"links":125449},[],{"category":30246},"\u002Fwiki\u002F2025-01-27-linux",{"title":125445,"description":17},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125456,"title":125457,"body":125458,"description":125462,"extension":18,"meta":125853,"navigation":20,"path":125854,"seo":125855,"stem":125856,"__hash__":125857},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125459,"toc":125851},[125460,125463,125467,125484,125487,125540,125544,125546,125586,125595,125599,125602,125843,125848],[40,125461,125462],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125464,125466],{"id":125465},"_1ubuntu环境配置","1.Ubuntu环境配置",[48,125468,125469,125472,125475,125478,125481],{},[51,125470,125471],{},"ubuntu环境换源",[51,125473,125474],{},"安装cuda",[51,125476,125477],{},"安装miniconda",[51,125479,125480],{},"安装pytorch",[51,125482,125483],{},"安装genesis",[40,125485,125486],{},"参考链接：",[85,125488,125490],{"className":23804,"code":125489,"language":23806,"meta":14,"style":14},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[91,125491,125492],{"__ignoreMap":14},[94,125493,125494,125497,125500,125503,125505,125508,125511,125513,125516,125519,125521,125524,125527,125529,125532,125535,125537],{"class":96,"line":97},[94,125495,125496],{"class":1944},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[94,125498,125499],{"class":209},"=blogdetail",[94,125501,125502],{"class":104},"&sharetype",[94,125504,150],{"class":100},[94,125506,125507],{"class":209},"blogdetail",[94,125509,125510],{"class":104},"&sharerId",[94,125512,150],{"class":100},[94,125514,125515],{"class":209},"144728092",[94,125517,125518],{"class":104},"&sharerefer",[94,125520,150],{"class":100},[94,125522,125523],{"class":209},"PC",[94,125525,125526],{"class":104},"&sharesource",[94,125528,150],{"class":100},[94,125530,125531],{"class":209},"qq_69379513",[94,125533,125534],{"class":104},"&sharefrom",[94,125536,150],{"class":100},[94,125538,125539],{"class":209},"from_link\n",[10,125541,125543],{"id":125542},"_2genesis-报错issue","2.Genesis 报错issue",[40,125545,125486],{},[85,125547,125548],{"className":23804,"code":125489,"language":23806,"meta":14,"style":14},[91,125549,125550],{"__ignoreMap":14},[94,125551,125552,125554,125556,125558,125560,125562,125564,125566,125568,125570,125572,125574,125576,125578,125580,125582,125584],{"class":96,"line":97},[94,125553,125496],{"class":1944},[94,125555,125499],{"class":209},[94,125557,125502],{"class":104},[94,125559,150],{"class":100},[94,125561,125507],{"class":209},[94,125563,125510],{"class":104},[94,125565,150],{"class":100},[94,125567,125515],{"class":209},[94,125569,125518],{"class":104},[94,125571,150],{"class":100},[94,125573,125523],{"class":209},[94,125575,125526],{"class":104},[94,125577,150],{"class":100},[94,125579,125531],{"class":209},[94,125581,125534],{"class":104},[94,125583,150],{"class":100},[94,125585,125539],{"class":209},[85,125587,125589],{"className":23804,"code":125588,"language":23806,"meta":14,"style":14},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[91,125590,125591],{"__ignoreMap":14},[94,125592,125593],{"class":96,"line":97},[94,125594,125588],{"class":1944},[10,125596,125598],{"id":125597},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[40,125600,125601],{},"hello_robot.py",[85,125603,125605],{"className":30361,"code":125604,"language":30363,"meta":14,"style":14},"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",[91,125606,125607,125613,125628,125632,125644,125656,125660,125673,125677,125696,125706,125716,125730,125734,125738,125743,125747,125757,125764,125778,125785,125795,125800,125804,125822,125827,125831,125838],{"__ignoreMap":14},[94,125608,125609,125611],{"class":96,"line":97},[94,125610,30375],{"class":100},[94,125612,45288],{"class":104},[94,125614,125615,125618,125621,125623,125625],{"class":96,"line":15},[94,125616,125617],{"class":104},"os.environ[",[94,125619,125620],{"class":209},"'PYOPENGL_PLATFORM'",[94,125622,4424],{"class":104},[94,125624,150],{"class":100},[94,125626,125627],{"class":209}," 'glx'\n",[94,125629,125630],{"class":96,"line":1160},[94,125631,2381],{"emptyLinePlaceholder":20},[94,125633,125634,125636,125639,125641],{"class":96,"line":1175},[94,125635,30375],{"class":100},[94,125637,125638],{"class":104}," genesis ",[94,125640,31366],{"class":100},[94,125642,125643],{"class":104}," gs\n",[94,125645,125646,125648,125651,125653],{"class":96,"line":1181},[94,125647,30720],{"class":100},[94,125649,125650],{"class":104}," pynput ",[94,125652,30375],{"class":100},[94,125654,125655],{"class":104}," keyboard\n",[94,125657,125658],{"class":96,"line":1195},[94,125659,2381],{"emptyLinePlaceholder":20},[94,125661,125662,125665,125668,125670],{"class":96,"line":1201},[94,125663,125664],{"class":104},"gs.init(",[94,125666,125667],{"class":5198},"backend",[94,125669,150],{"class":100},[94,125671,125672],{"class":104},"gs.gpu)\n",[94,125674,125675],{"class":96,"line":1292},[94,125676,2381],{"emptyLinePlaceholder":20},[94,125678,125679,125682,125684,125687,125690,125692,125694],{"class":96,"line":1298},[94,125680,125681],{"class":104},"scene ",[94,125683,150],{"class":100},[94,125685,125686],{"class":104}," gs.Scene(",[94,125688,125689],{"class":5198},"show_viewer",[94,125691,150],{"class":100},[94,125693,31459],{"class":153},[94,125695,111],{"class":104},[94,125697,125698,125701,125703],{"class":96,"line":1310},[94,125699,125700],{"class":104},"plane ",[94,125702,150],{"class":100},[94,125704,125705],{"class":104}," scene.add_entity(gs.morphs.Plane())\n",[94,125707,125708,125711,125713],{"class":96,"line":1593},[94,125709,125710],{"class":104},"franka ",[94,125712,150],{"class":100},[94,125714,125715],{"class":104}," scene.add_entity(\n",[94,125717,125718,125721,125723,125725,125728],{"class":96,"line":1598},[94,125719,125720],{"class":104},"    gs.morphs.MJCF(",[94,125722,45337],{"class":5198},[94,125724,150],{"class":100},[94,125726,125727],{"class":209},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[94,125729,38030],{"class":104},[94,125731,125732],{"class":96,"line":1604},[94,125733,111],{"class":104},[94,125735,125736],{"class":96,"line":1609},[94,125737,2381],{"emptyLinePlaceholder":20},[94,125739,125740],{"class":96,"line":1623},[94,125741,125742],{"class":104},"scene.build()\n",[94,125744,125745],{"class":96,"line":1628},[94,125746,2381],{"emptyLinePlaceholder":20},[94,125748,125749,125751,125754],{"class":96,"line":1634},[94,125750,31930],{"class":100},[94,125752,125753],{"class":1944}," on_press",[94,125755,125756],{"class":104},"(key):\n",[94,125758,125759,125762],{"class":96,"line":1655},[94,125760,125761],{"class":100},"    try",[94,125763,3720],{"class":104},[94,125765,125766,125768,125771,125773,125776],{"class":96,"line":1660},[94,125767,2478],{"class":100},[94,125769,125770],{"class":104}," key.char ",[94,125772,2930],{"class":100},[94,125774,125775],{"class":209}," 'q'",[94,125777,3720],{"class":104},[94,125779,125780,125782],{"class":96,"line":1674},[94,125781,15714],{"class":100},[94,125783,125784],{"class":153}," False\n",[94,125786,125787,125790,125793],{"class":96,"line":1679},[94,125788,125789],{"class":100},"    except",[94,125791,125792],{"class":153}," AttributeError",[94,125794,3720],{"class":104},[94,125796,125797],{"class":96,"line":1708},[94,125798,125799],{"class":100},"        pass\n",[94,125801,125802],{"class":96,"line":1713},[94,125803,2381],{"emptyLinePlaceholder":20},[94,125805,125806,125809,125811,125814,125817,125819],{"class":96,"line":1730},[94,125807,125808],{"class":104},"listener ",[94,125810,150],{"class":100},[94,125812,125813],{"class":104}," keyboard.Listener(",[94,125815,125816],{"class":5198},"on_press",[94,125818,150],{"class":100},[94,125820,125821],{"class":104},"on_press)\n",[94,125823,125824],{"class":96,"line":1735},[94,125825,125826],{"class":104},"listener.start()\n",[94,125828,125829],{"class":96,"line":1740},[94,125830,2381],{"emptyLinePlaceholder":20},[94,125832,125833,125835],{"class":96,"line":1745},[94,125834,108640],{"class":100},[94,125836,125837],{"class":104}," listener.running:\n",[94,125839,125840],{"class":96,"line":1759},[94,125841,125842],{"class":104},"    scene.step()\n",[40,125844,125845],{},[1443,125846],{"alt":14,"src":125847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5108,125849,125850],{},"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":14,"searchDepth":15,"depth":15,"links":125852},[],{"category":23360},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125457,"description":125462},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125859,"title":125860,"body":125861,"description":17,"extension":18,"meta":125876,"navigation":20,"path":125877,"seo":125878,"stem":125879,"__hash__":125880},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125862,"toc":125873},[125863,125866,125870],[10,125864,125860],{"id":125865},"_1-基础知识",[35,125867,125869],{"id":125868},"_11-js的组成","1.1 js的组成",[40,125871,125872],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":14,"searchDepth":15,"depth":15,"links":125874},[125875],{"id":125868,"depth":15,"text":125869},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125860,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125882,"title":125883,"body":125884,"description":17,"extension":18,"meta":126023,"navigation":20,"path":126024,"seo":126025,"stem":126026,"__hash__":126027},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125885,"toc":126011},[125886,125889,125893,125896,125900,125910,125914,125917,125920,125923,125927,125934,125940,125944,125950,125961,125965,125968,125972,125975,125979,125982,125986,125989,125993,125996,125999,126002,126005,126008],[10,125887,125883],{"id":125888},"_2-vscode必备内容",[35,125890,125892],{"id":125891},"_21-标签分类","2.1 标签分类",[40,125894,125895],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[35,125897,125899],{"id":125898},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[40,125901,125902,125903,125905,125906,125909],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[91,125904,331],{}," 然后按 ",[91,125907,125908],{},"Tab","，快速自动生成基本结构。",[35,125911,125913],{"id":125912},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[40,125915,125916],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[40,125918,125919],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[40,125921,125922],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[35,125924,125926],{"id":125925},"_24-视图缩放","2.4 视图缩放",[40,125928,125929,125930,125933],{},"缩放视图 ",[91,125931,125932],{},"ctrl+"," 可实现代码增大。",[40,125935,125936,125939],{},[91,125937,125938],{},"ctrl-"," 可实现代码减小。",[35,125941,125943],{"id":125942},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[40,125945,125946,125947,28368],{},"VSCode 新建文件快捷键为 ",[91,125948,125949],{},"ctrl+N",[40,125951,125952,125953,125956,125957,125960],{},"保存快捷键为 ",[91,125954,125955],{},"ctrl+S","，将文本保存为 ",[91,125958,125959],{},".html"," 文件。",[35,125962,125964],{"id":125963},"_26-auto-rename-tag","2.6 Auto Rename Tag",[40,125966,125967],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[35,125969,125971],{"id":125970},"_27-vscode-icons","2.7 vscode-icons",[40,125973,125974],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[35,125976,125978],{"id":125977},"_28-easy-less","2.8 Easy LESS",[40,125980,125981],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[35,125983,125985],{"id":125984},"_29-会了吧插件","2.9 会了吧插件",[40,125987,125988],{},"会了吧插件可以展示代码中英语单词的意思。",[35,125990,125992],{"id":125991},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[40,125994,125995],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[40,125997,125998],{},"②选定多个相同的单词:ctrl+D",[40,126000,126001],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[40,126003,126004],{},"④全局替换某些单词:ctrl+h",[40,126006,126007],{},"⑤快速定位到某一行:ctrl+g",[40,126009,126010],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":14,"searchDepth":15,"depth":15,"links":126012},[126013,126014,126015,126016,126017,126018,126019,126020,126021,126022],{"id":125891,"depth":15,"text":125892},{"id":125898,"depth":15,"text":125899},{"id":125912,"depth":15,"text":125913},{"id":125925,"depth":15,"text":125926},{"id":125942,"depth":15,"text":125943},{"id":125963,"depth":15,"text":125964},{"id":125970,"depth":15,"text":125971},{"id":125977,"depth":15,"text":125978},{"id":125984,"depth":15,"text":125985},{"id":125991,"depth":15,"text":125992},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125883,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126029,"title":126030,"body":126031,"description":17,"extension":18,"meta":126190,"navigation":20,"path":126191,"seo":126192,"stem":126193,"__hash__":126194},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126032,"toc":126182},[126033,126036,126040,126050,126056,126062,126066,126075,126079,126084,126087,126090,126094,126097,126107,126116,126125,126134,126144,126151,126156,126161,126174],[10,126034,126030],{"id":126035},"_3-html文本与容器标签",[35,126037,126039],{"id":126038},"_31-标题标签","3.1 标题标签",[40,126041,126042,126045,126046,126049],{},[91,126043,126044],{},"\u003Ch1>","我是一级标签",[91,126047,126048],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[40,126051,126052,126045,126054],{},[91,126053,126044],{},[91,126055,126048],{},[40,126057,123312,126058,126061],{},[91,126059,126060],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[35,126063,126065],{"id":126064},"_32-段落标签","3.2 段落标签",[40,126067,126068,126071,126072],{},[91,126069,126070],{},"\u003Cp>","....",[91,126073,126074],{},"\u003C\u002Fp>",[35,126076,126078],{"id":126077},"_33-换行标签","3.3 换行标签",[40,126080,126081],{},[91,126082,126083],{},"\u003Cbr \u002F>",[40,126085,126086],{},"具有强制换行的作用",[40,126088,126089],{},"单标签",[35,126091,126093],{"id":126092},"_34-文本格式化标签","3.4 文本格式化标签",[40,126095,126096],{},"提供粗体、斜体和下划线等效果",[40,126098,126099,126100,82516,126103,126106],{},"加粗：",[91,126101,126102],{},"\u003Cstrong>...\u003C\u002Fstrong>",[91,126104,126105],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[40,126108,126109,126110,82516,126113,126106],{},"斜体：",[91,126111,126112],{},"\u003Cem>...\u003C\u002Fem>",[91,126114,126115],{},"\u003Ci>...\u003C\u002Fi>",[40,126117,126118,126119,82516,126122,126106],{},"删除线：",[91,126120,126121],{},"\u003Cdel>...\u003C\u002Fdel>",[91,126123,126124],{},"\u003Cs>...\u003C\u002Fs>",[40,126126,126127,126128,82516,126131,126106],{},"下划线：",[91,126129,126130],{},"\u003Cins>...\u003C\u002Fins>",[91,126132,126133],{},"\u003Cu>...\u003C\u002Fu>",[35,126135,126137,126138,18392,126141,102670],{"id":126136},"_35-div和span标签","3.5 ",[91,126139,126140],{},"\u003Cdiv>",[91,126142,126143],{},"\u003Cspan>",[40,126145,126146,100995,126148,126150],{},[91,126147,126140],{},[91,126149,126143],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[40,126152,126153],{},[91,126154,126155],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[40,126157,126158],{},[91,126159,126160],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[40,126162,126163,126164,126166,126167,126169,126170,126173],{},"两者特点：①",[91,126165,126140],{}," 标签用来布局，但一行通常只放一个 ",[91,126168,126140],{},"。可以理解为一个大盒子，独占一行，在 ",[91,126171,126172],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[40,126175,77226,126176,126178,126179,126181],{},[91,126177,126143],{}," 标签也可用于布局，一行可以放多个 ",[91,126180,126143],{},"，可理解为小盒子。",{"title":14,"searchDepth":15,"depth":15,"links":126183},[126184,126185,126186,126187,126188],{"id":126038,"depth":15,"text":126039},{"id":126064,"depth":15,"text":126065},{"id":126077,"depth":15,"text":126078},{"id":126092,"depth":15,"text":126093},{"id":126136,"depth":15,"text":126189},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126030,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126196,"title":126197,"body":126198,"description":17,"extension":18,"meta":126395,"navigation":20,"path":126396,"seo":126397,"stem":126398,"__hash__":126399},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126199,"toc":126387},[126200,126203,126207,126210,126216,126223,126229,126235,126238,126241,126244,126247,126250,126253,126256,126260,126263,126266,126269,126275,126281,126287,126294,126298,126304,126310,126313,126316,126322,126328,126334,126337,126340,126344,126347,126357,126363,126367,126376,126380,126383],[10,126201,126197],{"id":126202},"_4-html图像与链接",[35,126204,126206],{"id":126205},"_41-图像标签","4.1 图像标签",[40,126208,126209],{},"（1）标签",[40,126211,126212,126215],{},[91,126213,126214],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[40,126217,126218,126219,126222],{},"src是",[91,126220,126221],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[40,126224,126225,126226],{},"alt:文本，替换文本。图像不能显示的文字 ",[91,126227,126228],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[40,126230,126231,126232],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[91,126233,126234],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[40,126236,126237],{},"width:像素，设置图像的宽度",[40,126239,126240],{},"height:像素，设置图像的高度",[40,126242,126243],{},"border：像素，设置图像的边框粗细",[40,126245,126246],{},"（2）图像标签属性的注意点：",[40,126248,126249],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[40,126251,126252],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[40,126254,126255],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[35,126257,126259],{"id":126258},"_42-路径注意要点","4.2 路径注意要点：",[40,126261,126262],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[40,126264,126265],{},"（2）根目录：就是打开文件夹的第一层根目录",[40,126267,126268],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[40,126270,126271,126272],{},"①同一级路径：图像文件位于HTML文件同一级，如",[91,126273,126274],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[40,126276,126277,126278],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[91,126279,126280],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[40,126282,126283,126284],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[91,126285,126286],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[40,126288,126289,126290,356],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[343,126291,126292],{"href":126292,"rel":126293},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23847],[35,126295,126297],{"id":126296},"_43-超链接标签","4.3 超链接标签",[40,126299,126300,126303],{},[91,126301,126302],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[40,126305,126306,126307],{},"①语法格式：",[91,126308,126309],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[40,126311,126312],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[40,126314,126315],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[40,126317,126318,126319],{},"③链接分类：外部链接：",[91,126320,126321],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[40,126323,126324,126325],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[91,126326,126327],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[40,126329,126330,126331],{},"空链接：如果当时没有确定链接目标时，",[91,126332,126333],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[40,126335,126336],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[40,126338,126339],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[35,126341,126343],{"id":126342},"_44-锚点链接","4.4 锚点链接",[40,126345,126346],{},"点我们点击链接，可以快速定位到页面中的某个位置",[40,126348,126349,126350,126353,126354],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[91,126351,126352],{},"\u003Ca href=\"#two\">","第二级",[91,126355,126356],{},"\u003C\u002Fa>",[40,126358,126359,126360],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[91,126361,126362],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[35,126364,126366],{"id":126365},"_45-注释标签","4.5 注释标签",[40,126368,126369,126372,126373],{},[91,126370,126371],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[91,126374,126375],{},"ctrl+\u002F",[35,126377,126379],{"id":126378},"_46-特殊字符","4.6 特殊字符",[40,126381,126382],{},"可以实现添加多个空格",[1443,126384],{"style":126385,"src":126386},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":14,"searchDepth":15,"depth":15,"links":126388},[126389,126390,126391,126392,126393,126394],{"id":126205,"depth":15,"text":126206},{"id":126258,"depth":15,"text":126259},{"id":126296,"depth":15,"text":126297},{"id":126342,"depth":15,"text":126343},{"id":126365,"depth":15,"text":126366},{"id":126378,"depth":15,"text":126379},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126197,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126401,"title":126402,"body":126403,"description":17,"extension":18,"meta":126696,"navigation":20,"path":126697,"seo":126698,"stem":126699,"__hash__":126700},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126404,"toc":126687},[126405,126408,126412,126415,126418,126421,126424,126427,126430,126433,126436,126439,126459,126465,126469,126472,126475,126478,126481,126484,126487,126491,126494,126497,126500,126503,126516,126521,126524,126527,126542,126545,126548,126551,126554,126557,126561,126564,126571,126574,126577,126580,126583,126586,126592,126595,126598,126604,126607,126610,126613,126619,126622,126625,126639,126646,126649,126652,126659,126668,126671,126674,126677,126681,126684],[10,126406,126402],{"id":126407},"_5-html表格列表与表单",[35,126409,126411],{"id":126410},"_51-表格标签","5.1 表格标签",[40,126413,126414],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[40,126416,126417],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[40,126419,126420],{},"②表格基本语法：",[1443,126422],{"style":126385,"src":126423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[40,126425,126426],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1443,126428],{"style":126385,"src":126429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[40,126431,126432],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1443,126434],{"style":126385,"src":126435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[40,126437,126438],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[40,126440,126441,126444,126445,126447,126448,126451,126452,126454,126455,126458],{},[91,126442,126443],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[91,126446,126443],{},"内部必须拥有",[91,126449,126450],{},"\u003Ctr>","标签，一般位于第一行，",[91,126453,126443],{},"比",[91,126456,126457],{},"\u003Cth>","范围广",[40,126460,126461,126464],{},[91,126462,126463],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[35,126466,126468],{"id":126467},"_52-合并单元格","5.2 合并单元格",[40,126470,126471],{},"（1）合并单元格方式：",[40,126473,126474],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[40,126476,126477],{},"②跨列合并：colspan=\"合并单元格的个数\"",[40,126479,126480],{},"（2）目标单元格：",[40,126482,126483],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[40,126485,126486],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[35,126488,126490],{"id":126489},"_53-列表标签","5.3 列表标签",[40,126492,126493],{},"（1）分类：无序列表、有序列表、自定义列表",[40,126495,126496],{},"①无序列表：",[1443,126498],{"style":126385,"src":126499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[40,126501,126502],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[40,126504,126505,126508,126509,126512,126513,126515],{},[91,126506,126507],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[91,126510,126511],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[91,126514,126507],{},"中输入其他标签或文字是不对的",[40,126517,126518,126520],{},[91,126519,126511],{},"之间相当于一个容器，可以容纳所有元素",[40,126522,126523],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[40,126525,126526],{},"在css中去除前边的小圆点采用如下代码:",[85,126528,126532],{"className":126529,"code":126530,"language":126531,"meta":14,"style":14},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[91,126533,126534],{"__ignoreMap":14},[94,126535,126536,126539],{"class":96,"line":97},[94,126537,126538],{"class":51277},"list-style",[94,126540,126541],{"class":104},": none;\n",[40,126543,126544],{},"②有序列表：",[1443,126546],{"style":126385,"src":126547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[40,126549,126550],{},"③自定义列表：",[1443,126552],{"style":126385,"src":126553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1443,126555],{"style":126385,"src":126556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[35,126558,126560],{"id":126559},"_54-表单标签","5.4 表单标签",[40,126562,126563],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[40,126565,126566,126567,126570],{},"（1）表单域：包含单元素的区域，",[91,126568,126569],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1443,126572],{"style":126385,"src":126573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[40,126575,126576],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[40,126578,126579],{},"表单元素提交必须有name属性",[40,126581,126582],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[40,126584,126585],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[40,126587,77203,126588,126591],{},[91,126589,126590],{},"\u003Cinput>","输入表单元素",[1443,126593],{"style":126385,"src":126594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1443,126596],{"style":126385,"src":126597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[40,126599,126600,126601],{},"单选按钮：",[91,126602,126603],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1443,126605],{"style":126385,"src":126606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[40,126608,126609],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1443,126611],{"style":126385,"src":126612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[40,126614,126615,126618],{},[254,126616,126617],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[40,126620,126621],{},"②select下拉表单元素：可以节约页面控件",[1443,126623],{"style":126385,"src":126624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[40,126626,126627,13777,126629,126632,126633,126635,126636,126638],{},[254,126628,134],{},[91,126630,126631],{},"\u003Cselect>","中至少包含一对",[91,126634,102691],{},"；在",[91,126637,102691],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[40,126640,126641,126642,126645],{},"③",[91,126643,126644],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1443,126647],{"style":126385,"src":126648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[40,126650,126651],{},"3行20列",[35,126653,126655,126656,102670],{"id":126654},"_55-lable标签","5.5 ",[91,126657,126658],{},"\u003Clable>",[40,126660,126661,126662,126664,126665,126667],{},"它不是表单标签，但常常与表单标签搭配使用，",[91,126663,126658],{},"标签用于绑定一个表单标签，当点击",[91,126666,126658],{},"标签内的文本",[40,126669,126670],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1443,126672],{"style":126385,"src":126673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1443,126675],{"style":126385,"src":126676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[35,126678,126680],{"id":126679},"_56-实例","5.6 实例",[1443,126682],{"style":126385,"src":126683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5108,126685,126686],{},"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":14,"searchDepth":15,"depth":15,"links":126688},[126689,126690,126691,126692,126693,126695],{"id":126410,"depth":15,"text":126411},{"id":126467,"depth":15,"text":126468},{"id":126489,"depth":15,"text":126490},{"id":126559,"depth":15,"text":126560},{"id":126654,"depth":15,"text":126694},"5.5 \u003Clable>标签",{"id":126679,"depth":15,"text":126680},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126402,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126702,"title":126703,"body":126704,"description":17,"extension":18,"meta":127253,"navigation":20,"path":127254,"seo":127255,"stem":127256,"__hash__":127257},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126705,"toc":127228},[126706,126709,126713,126716,126719,126723,126726,126729,126732,126735,126738,126741,126744,126748,126751,126755,126758,126761,126764,126768,126771,126774,126777,126783,126786,126789,126792,126795,126798,126801,126804,126837,126841,126844,126847,126850,126854,126857,126860,126863,126866,126869,126873,126876,126879,126882,126886,126889,126893,126896,126900,126903,126908,126912,126915,126919,126922,126925,126928,126931,126958,126961,126965,126968,126971,126976,126979,126982,126986,126989,126994,126997,127000,127003,127007,127010,127013,127016,127020,127023,127026,127029,127033,127037,127040,127080,127083,127087,127094,127097,127101,127104,127150,127154,127157,127160,127163,127191,127195,127198,127225],[10,126707,126703],{"id":126708},"_6-css语法与文本样式",[35,126710,126712],{"id":126711},"_61-css语法规范","6.1 css语法规范",[40,126714,126715],{},"由两部分组成，选择器及一条或多条声明",[1443,126717],{"style":126385,"src":126718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[40,126720,126721],{},[254,126722,134],{},[40,126724,126725],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[40,126727,126728],{},"②属性与属性值以“键值对”的形式出现",[40,126730,126731],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[40,126733,126734],{},"④属性和属性值之间用英文“;”分开",[1443,126736],{"style":126385,"src":126737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1443,126739],{"style":126385,"src":126740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1443,126742],{"style":126385,"src":126743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[35,126745,126747],{"id":126746},"_62-css选择器","6.2 css选择器",[40,126749,126750],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[65,126752,126754],{"id":126753},"_621-标签选择器","6.2.1 标签选择器",[40,126756,126757],{},"①优点：能快速为页面中同类型的标签统一设置样式",[40,126759,126760],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1443,126762],{"style":126385,"src":126763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[65,126765,126767],{"id":126766},"_622-类选择器","6.2.2 类选择器",[40,126769,126770],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[40,126772,126773],{},"②样例",[1443,126775],{"style":126385,"src":126776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[40,126778,126779,126780,126782],{},"③ ",[254,126781,126617],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[40,126784,126785],{},"可以理解为给这个标签起了个名字，来表示；",[40,126787,126788],{},"长名称或词组可以使用横线来为选择器命名；",[40,126790,126791],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[40,126793,126794],{},"命名要有意义；",[1443,126796],{"style":126385,"src":126797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[40,126799,126800],{},"类选择器也可以指定特殊的元素p.center{}",[40,126802,126803],{},"p.center和.center都对",[85,126805,126807],{"className":126529,"code":126806,"language":126531,"meta":14,"style":14},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[91,126808,126809,126814,126823,126833],{"__ignoreMap":14},[94,126810,126811],{"class":96,"line":97},[94,126812,126813],{"class":163},"\u002F* 类选择器指定特殊元素 *\u002F\n",[94,126815,126816,126818,126821],{"class":96,"line":15},[94,126817,40],{"class":51277},[94,126819,126820],{"class":1944},".center",[94,126822,15554],{"class":104},[94,126824,126825,126827,126829,126831],{"class":96,"line":1160},[94,126826,70503],{"class":153},[94,126828,51414],{"class":104},[94,126830,51569],{"class":153},[94,126832,1271],{"class":104},[94,126834,126835],{"class":96,"line":1175},[94,126836,1546],{"class":104},[65,126838,126840],{"id":126839},"_623-多类名使用","6.2.3 多类名使用",[40,126842,126843],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1443,126845],{"style":126385,"src":126846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[40,126848,126849],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[65,126851,126853],{"id":126852},"_624-id选择器","6.2.4 id选择器",[40,126855,126856],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[40,126858,126859],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1443,126861],{"style":126385,"src":126862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[40,126864,126865],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[40,126867,126868],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[65,126870,126872],{"id":126871},"_625-通配符选择器","6.2.5 通配符选择器",[40,126874,126875],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[40,126877,126878],{},"* {",[40,126880,126881],{},"color=\"red\"}",[65,126883,126885],{"id":126884},"_626-总结","6.2.6 总结",[1443,126887],{"style":126385,"src":126888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[35,126890,126892],{"id":126891},"_63-css字体属性","6.3 css字体属性",[40,126894,126895],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[65,126897,126899],{"id":126898},"_631-字体系列","6.3.1 字体系列",[40,126901,126902],{},"font-family: '宋体';",[40,126904,126905,126907],{},[254,126906,134],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[65,126909,126911],{"id":126910},"_632-字体大小","6.3.2 字体大小",[40,126913,126914],{},"font-size: 20px",[40,126916,126917,26456],{},[254,126918,126617],{},[40,126920,126921],{},"①px（像素）大小是网页的最常用单位",[40,126923,126924],{},"②谷歌浏览器默认为16px",[40,126926,126927],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[40,126929,126930],{},"④可以给body指定整个页面的大小：会自动引用",[85,126932,126934],{"className":126529,"code":126933,"language":126531,"meta":14,"style":14},"body {\n  font-size: 16px;\n}\n",[91,126935,126936,126942,126954],{"__ignoreMap":14},[94,126937,126938,126940],{"class":96,"line":97},[94,126939,51777],{"class":51277},[94,126941,15554],{"class":104},[94,126943,126944,126946,126948,126950,126952],{"class":96,"line":15},[94,126945,70603],{"class":153},[94,126947,51414],{"class":104},[94,126949,706],{"class":153},[94,126951,51469],{"class":100},[94,126953,1271],{"class":104},[94,126955,126956],{"class":96,"line":1160},[94,126957,1546],{"class":104},[40,126959,126960],{},"⑤标题标签比较特殊，需要单独指定大小",[65,126962,126964],{"id":126963},"_633-字体粗细","6.3.3 字体粗细",[40,126966,126967],{},"font-weight: bold;",[40,126969,126970],{},"font-weight: 100；",[40,126972,126973,126975],{},[254,126974,134],{}," ①粗体文字变细：尽量别用normal，多用数字",[40,126977,126978],{},"font-weight= 400;",[40,126980,126981],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[65,126983,126985],{"id":126984},"_634-文字样式","6.3.4 文字样式",[40,126987,126988],{},"font-style: normal；",[40,126990,126991,26456],{},[254,126992,126993],{},"属性值",[40,126995,126996],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[40,126998,126999],{},"②italic：浏览器会显示斜体的字体样式",[1443,127001],{"style":126385,"src":127002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[65,127004,127006],{"id":127005},"_635-字体符合属性","6.3.5 字体符合属性",[1443,127008],{"style":126385,"src":127009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1443,127011],{"style":126385,"src":127012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[40,127014,127015],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[40,127017,127018,26456],{},[254,127019,126617],{},[40,127021,127022],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[40,127024,127025],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[40,127027,127028],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[35,127030,127032],{"id":127031},"_64-css-test文本属性","6.4 css test文本属性",[65,127034,127036],{"id":127035},"_641-文本颜色","6.4.1 文本颜色",[40,127038,127039],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[85,127041,127043],{"className":126529,"code":127042,"language":126531,"meta":14,"style":14},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[91,127044,127045,127050,127056,127066,127071,127076],{"__ignoreMap":14},[94,127046,127047],{"class":96,"line":97},[94,127048,127049],{"class":163},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[94,127051,127052,127054],{"class":96,"line":15},[94,127053,40],{"class":51277},[94,127055,15554],{"class":104},[94,127057,127058,127060,127062,127064],{"class":96,"line":1160},[94,127059,70882],{"class":153},[94,127061,51414],{"class":104},[94,127063,57398],{"class":153},[94,127065,1271],{"class":104},[94,127067,127068],{"class":96,"line":1175},[94,127069,127070],{"class":163},"  \u002F* color: #ff0000; *\u002F\n",[94,127072,127073],{"class":96,"line":1181},[94,127074,127075],{"class":163},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[94,127077,127078],{"class":96,"line":1195},[94,127079,1546],{"class":104},[1443,127081],{"style":126385,"src":127082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[65,127084,127086],{"id":127085},"_642-对齐文本","6.4.2 对齐文本",[40,127088,127089,127090,127093],{},"text-align属于用于设置元素内文本内容的 ",[254,127091,127092],{},"水平对齐"," 方式",[40,127095,127096],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[65,127098,127100],{"id":127099},"_643-装饰文本","6.4.3 装饰文本",[40,127102,127103],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[85,127105,127107],{"className":126529,"code":127106,"language":126531,"meta":14,"style":14},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[91,127108,127109,127115,127125,127129,127135,127146],{"__ignoreMap":14},[94,127110,127111,127113],{"class":96,"line":97},[94,127112,343],{"class":51277},[94,127114,15554],{"class":104},[94,127116,127117,127119,127121,127123],{"class":96,"line":15},[94,127118,70479],{"class":153},[94,127120,51414],{"class":104},[94,127122,54714],{"class":153},[94,127124,1271],{"class":104},[94,127126,127127],{"class":96,"line":1160},[94,127128,1546],{"class":104},[94,127130,127131,127133],{"class":96,"line":1175},[94,127132,40],{"class":51277},[94,127134,15554],{"class":104},[94,127136,127137,127139,127141,127144],{"class":96,"line":1181},[94,127138,70479],{"class":153},[94,127140,51414],{"class":104},[94,127142,127143],{"class":153},"underline",[94,127145,1271],{"class":104},[94,127147,127148],{"class":96,"line":1195},[94,127149,1546],{"class":104},[65,127151,127153],{"id":127152},"_644-文本缩进","6.4.4 文本缩进",[40,127155,127156],{},"实现文本的第一行首行缩进自己指定的距离",[40,127158,127159],{},"20px往右边走；-20px往左边走",[40,127161,127162],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[85,127164,127166],{"className":126529,"code":127165,"language":126531,"meta":14,"style":14},"p {\n  text-indent: 2em;\n}\n",[91,127167,127168,127174,127187],{"__ignoreMap":14},[94,127169,127170,127172],{"class":96,"line":97},[94,127171,40],{"class":51277},[94,127173,15554],{"class":104},[94,127175,127176,127179,127181,127183,127185],{"class":96,"line":15},[94,127177,127178],{"class":153},"  text-indent",[94,127180,51414],{"class":104},[94,127182,182],{"class":153},[94,127184,23535],{"class":100},[94,127186,1271],{"class":104},[94,127188,127189],{"class":96,"line":1160},[94,127190,1546],{"class":104},[65,127192,127194],{"id":127193},"_645-行间距","6.4.5 行间距",[40,127196,127197],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[85,127199,127201],{"className":126529,"code":127200,"language":126531,"meta":14,"style":14},"p {\n  line-height: 1.6;\n}\n",[91,127202,127203,127209,127221],{"__ignoreMap":14},[94,127204,127205,127207],{"class":96,"line":97},[94,127206,40],{"class":51277},[94,127208,15554],{"class":104},[94,127210,127211,127214,127216,127219],{"class":96,"line":15},[94,127212,127213],{"class":153},"  line-height",[94,127215,51414],{"class":104},[94,127217,127218],{"class":153},"1.6",[94,127220,1271],{"class":104},[94,127222,127223],{"class":96,"line":1160},[94,127224,1546],{"class":104},[5108,127226,127227],{},"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":14,"searchDepth":15,"depth":15,"links":127229},[127230,127231,127239,127246],{"id":126711,"depth":15,"text":126712},{"id":126746,"depth":15,"text":126747,"children":127232},[127233,127234,127235,127236,127237,127238],{"id":126753,"depth":1160,"text":126754},{"id":126766,"depth":1160,"text":126767},{"id":126839,"depth":1160,"text":126840},{"id":126852,"depth":1160,"text":126853},{"id":126871,"depth":1160,"text":126872},{"id":126884,"depth":1160,"text":126885},{"id":126891,"depth":15,"text":126892,"children":127240},[127241,127242,127243,127244,127245],{"id":126898,"depth":1160,"text":126899},{"id":126910,"depth":1160,"text":126911},{"id":126963,"depth":1160,"text":126964},{"id":126984,"depth":1160,"text":126985},{"id":127005,"depth":1160,"text":127006},{"id":127031,"depth":15,"text":127032,"children":127247},[127248,127249,127250,127251,127252],{"id":127035,"depth":1160,"text":127036},{"id":127085,"depth":1160,"text":127086},{"id":127099,"depth":1160,"text":127100},{"id":127152,"depth":1160,"text":127153},{"id":127193,"depth":1160,"text":127194},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126703,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127259,"title":127260,"body":127261,"description":17,"extension":18,"meta":127910,"navigation":20,"path":127911,"seo":127912,"stem":127913,"__hash__":127914},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127262,"toc":127891},[127263,127266,127270,127274,127334,127338,127348,127351,127354,127358,127383,127387,127390,127393,127396,127399,127402,127406,127409,127412,127454,127457,127483,127489,127492,127496,127500,127506,127509,127512,127515,127518,127521,127524,127569,127573,127576,127579,127583,127587,127616,127619,127624,127627,127630,127633,127636,127640,127644,127647,127649,127652,127656,127659,127663,127666,127669,127672,127676,127680,127686,127696,127699,127702,127705,127708,127711,127834,127842,127850,127888],[10,127264,127260],{"id":127265},"_7-css引入方式与选择器进阶",[35,127267,127269],{"id":127268},"_71-css引入方式","7.1 css引入方式",[65,127271,127273],{"id":127272},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[85,127275,127279],{"className":127276,"code":127277,"language":127278,"meta":14,"style":14},"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",[91,127280,127281,127289,127296,127308,127321,127326],{"__ignoreMap":14},[94,127282,127283,127285,127287],{"class":96,"line":97},[94,127284,1015],{"class":104},[94,127286,5108],{"class":51277},[94,127288,51284],{"class":104},[94,127290,127291,127294],{"class":96,"line":15},[94,127292,127293],{"class":51277},"  h1",[94,127295,15554],{"class":104},[94,127297,127298,127301,127303,127306],{"class":96,"line":1160},[94,127299,127300],{"class":153},"    color",[94,127302,51414],{"class":104},[94,127304,127305],{"class":153},"blue",[94,127307,1271],{"class":104},[94,127309,127310,127313,127315,127317,127319],{"class":96,"line":1175},[94,127311,127312],{"class":153},"    font-size",[94,127314,51414],{"class":104},[94,127316,905],{"class":153},[94,127318,51469],{"class":100},[94,127320,1271],{"class":104},[94,127322,127323],{"class":96,"line":1181},[94,127324,127325],{"class":104},"  }\n",[94,127327,127328,127330,127332],{"class":96,"line":1195},[94,127329,51762],{"class":104},[94,127331,5108],{"class":51277},[94,127333,51284],{"class":104},[40,127335,127336,26456],{},[254,127337,126617],{},[40,127339,77203,127340,127343,127344,127347],{},[91,127341,127342],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[91,127345,127346],{},"\u003Chead>","标签中",[40,127349,127350],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[40,127352,127353],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[65,127355,127357],{"id":127356},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[85,127359,127361],{"className":127276,"code":127360,"language":127278,"meta":14,"style":14},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[91,127362,127363],{"__ignoreMap":14},[94,127364,127365,127367,127369,127371,127373,127376,127379,127381],{"class":96,"line":97},[94,127366,1015],{"class":104},[94,127368,40],{"class":51277},[94,127370,62603],{"class":1944},[94,127372,150],{"class":104},[94,127374,127375],{"class":209},"\"color: red; font-size: 16px;\"",[94,127377,127378],{"class":104},">这是一个段落\u003C\u002F",[94,127380,40],{"class":51277},[94,127382,51284],{"class":104},[40,127384,127385,26456],{},[254,127386,126617],{},[40,127388,127389],{},"①style其实就是标签的属性",[40,127391,127392],{},"②在双引号中间，写法要符合css规范",[40,127394,127395],{},"③可以控制当前的标签设置样式",[40,127397,127398],{},"④书写繁琐，简单时才用",[40,127400,127401],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[65,127403,127405],{"id":127404},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[40,127407,127408],{},"使用最多，单独建一个css文件，然后html引用",[40,127410,127411],{},"①css文件部分： style.css",[85,127413,127415],{"className":126529,"code":127414,"language":126531,"meta":14,"style":14},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[91,127416,127417,127422,127428,127438,127450],{"__ignoreMap":14},[94,127418,127419],{"class":96,"line":97},[94,127420,127421],{"class":163},"\u002F* style.css *\u002F\n",[94,127423,127424,127426],{"class":96,"line":15},[94,127425,10],{"class":51277},[94,127427,15554],{"class":104},[94,127429,127430,127432,127434,127436],{"class":96,"line":1160},[94,127431,70882],{"class":153},[94,127433,51414],{"class":104},[94,127435,127305],{"class":153},[94,127437,1271],{"class":104},[94,127439,127440,127442,127444,127446,127448],{"class":96,"line":1175},[94,127441,70603],{"class":153},[94,127443,51414],{"class":104},[94,127445,905],{"class":153},[94,127447,51469],{"class":100},[94,127449,1271],{"class":104},[94,127451,127452],{"class":96,"line":1181},[94,127453,1546],{"class":104},[40,127455,127456],{},"②html部分",[85,127458,127460],{"className":127276,"code":127459,"language":127278,"meta":14,"style":14},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[91,127461,127462],{"__ignoreMap":14},[94,127463,127464,127466,127468,127470,127472,127474,127476,127478,127481],{"class":96,"line":97},[94,127465,1015],{"class":104},[94,127467,68982],{"class":51277},[94,127469,68985],{"class":1944},[94,127471,150],{"class":104},[94,127473,68990],{"class":209},[94,127475,61034],{"class":1944},[94,127477,150],{"class":104},[94,127479,127480],{"class":209},"\"style.css\"",[94,127482,51284],{"class":104},[40,127484,127485,127488],{},[91,127486,127487],{},"\u003Chr>","水平线标签（但是不常用！）",[40,127490,127491],{},"ctrl+0回到页面原来大小",[35,127493,127495],{"id":127494},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[65,127497,127499],{"id":127498},"_721-快速生成html","7.2.1 快速生成html",[40,127501,127502,127503],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[91,127504,127505],{},"\u003Cdiv>``\u003C\u002Fdiv>",[40,127507,127508],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[40,127510,127511],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[40,127513,127514],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[40,127516,127517],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[40,127519,127520],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[40,127522,127523],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[85,127525,127527],{"className":127276,"code":127526,"language":127278,"meta":14,"style":14},"\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",[91,127528,127529,127534,127539,127544,127549,127554,127559,127564],{"__ignoreMap":14},[94,127530,127531],{"class":96,"line":97},[94,127532,127533],{"class":163},"\u003C!-- Emmet 语法示例 -->\n",[94,127535,127536],{"class":96,"line":15},[94,127537,127538],{"class":163},"\u003C!-- div*3        → 生成3个div -->\n",[94,127540,127541],{"class":96,"line":1160},[94,127542,127543],{"class":163},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[94,127545,127546],{"class":96,"line":1175},[94,127547,127548],{"class":163},"\u003C!-- div+p        → 兄弟div和p -->\n",[94,127550,127551],{"class":96,"line":1181},[94,127552,127553],{"class":163},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[94,127555,127556],{"class":96,"line":1195},[94,127557,127558],{"class":163},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[94,127560,127561],{"class":96,"line":1201},[94,127562,127563],{"class":163},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[94,127565,127566],{"class":96,"line":1292},[94,127567,127568],{"class":163},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[65,127570,127572],{"id":127571},"_722-快速生成css","7.2.2 快速生成css",[40,127574,127575],{},"简写开头",[40,127577,127578],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[35,127580,127582],{"id":127581},"_73-css复合选择器","7.3 css复合选择器",[65,127584,127586],{"id":127585},"_731-后代选择器","7.3.1 后代选择器",[85,127588,127590],{"className":126529,"code":127589,"language":126531,"meta":14,"style":14},".parent .child {\n  color: blue;\n}\n",[91,127591,127592,127602,127612],{"__ignoreMap":14},[94,127593,127594,127597,127600],{"class":96,"line":97},[94,127595,127596],{"class":1944},".parent",[94,127598,127599],{"class":1944}," .child",[94,127601,15554],{"class":104},[94,127603,127604,127606,127608,127610],{"class":96,"line":15},[94,127605,70882],{"class":153},[94,127607,51414],{"class":104},[94,127609,127305],{"class":153},[94,127611,1271],{"class":104},[94,127613,127614],{"class":96,"line":1160},[94,127615,1546],{"class":104},[40,127617,127618],{},"元素1 元素2 {样式声明}",[40,127620,127621],{},[254,127622,127623],{},"注意点:",[40,127625,127626],{},"①元素1和元素2中间用空格隔开",[40,127628,127629],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[40,127631,127632],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[40,127634,127635],{},"④元素1和元素2可以是任意基础选择器",[65,127637,127639],{"id":127638},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[40,127641,127642],{},[254,127643,127623],{},[40,127645,127646],{},"①元素1和元素2中间用大于号隔开",[40,127648,127629],{},[40,127650,127651],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[65,127653,127655],{"id":127654},"_733-并集选择器","7.3.3 并集选择器",[40,127657,127658],{},"元素1，元素2 {样式声明}",[40,127660,127661],{},[254,127662,127623],{},[40,127664,127665],{},"①元素1和元素2中间用逗号隔开",[40,127667,127668],{},"②逗号可以理解为和的意思",[40,127670,127671],{},"③并集选择器通常用于集体声明",[65,127673,127675],{"id":127674},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[40,127677,127678],{},[254,127679,127623],{},[40,127681,127682,127683,127685],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68982,127684],{},"－:visited－:hover－:active。",[40,127687,127688,127689,127692,127693,25723],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127690,127691],"hover",{}," 、 ",[127694,127695],"first-child",{},[40,127697,127698],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[40,127700,127701],{},"link对没访问的进行设置",[40,127703,127704],{},"vistied对已访问的进行改变",[40,127706,127707],{},"hover鼠标经过就会变",[40,127709,127710],{},"active常按(点)就会变",[85,127712,127714],{"className":126529,"code":127713,"language":126531,"meta":14,"style":14},"\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",[91,127715,127716,127721,127730,127740,127750,127754,127763,127774,127778,127786,127796,127806,127810,127819,127830],{"__ignoreMap":14},[94,127717,127718],{"class":96,"line":97},[94,127719,127720],{"class":163},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[94,127722,127723,127725,127728],{"class":96,"line":15},[94,127724,343],{"class":51277},[94,127726,127727],{"class":1944},":link",[94,127729,15554],{"class":104},[94,127731,127732,127734,127736,127738],{"class":96,"line":1160},[94,127733,70882],{"class":153},[94,127735,51414],{"class":104},[94,127737,62346],{"class":153},[94,127739,1271],{"class":104},[94,127741,127742,127744,127746,127748],{"class":96,"line":1175},[94,127743,70479],{"class":153},[94,127745,51414],{"class":104},[94,127747,54714],{"class":153},[94,127749,1271],{"class":104},[94,127751,127752],{"class":96,"line":1181},[94,127753,1546],{"class":104},[94,127755,127756,127758,127761],{"class":96,"line":1195},[94,127757,343],{"class":51277},[94,127759,127760],{"class":1944},":visited",[94,127762,15554],{"class":104},[94,127764,127765,127767,127769,127772],{"class":96,"line":1201},[94,127766,70882],{"class":153},[94,127768,51414],{"class":104},[94,127770,127771],{"class":153},"purple",[94,127773,1271],{"class":104},[94,127775,127776],{"class":96,"line":1292},[94,127777,1546],{"class":104},[94,127779,127780,127782,127784],{"class":96,"line":1298},[94,127781,343],{"class":51277},[94,127783,60917],{"class":1944},[94,127785,15554],{"class":104},[94,127787,127788,127790,127792,127794],{"class":96,"line":1310},[94,127789,70882],{"class":153},[94,127791,51414],{"class":104},[94,127793,54866],{"class":153},[94,127795,1271],{"class":104},[94,127797,127798,127800,127802,127804],{"class":96,"line":1593},[94,127799,70479],{"class":153},[94,127801,51414],{"class":104},[94,127803,127143],{"class":153},[94,127805,1271],{"class":104},[94,127807,127808],{"class":96,"line":1598},[94,127809,1546],{"class":104},[94,127811,127812,127814,127817],{"class":96,"line":1604},[94,127813,343],{"class":51277},[94,127815,127816],{"class":1944},":active",[94,127818,15554],{"class":104},[94,127820,127821,127823,127825,127828],{"class":96,"line":1609},[94,127822,70882],{"class":153},[94,127824,51414],{"class":104},[94,127826,127827],{"class":153},"green",[94,127829,1271],{"class":104},[94,127831,127832],{"class":96,"line":1623},[94,127833,1546],{"class":104},[65,127835,127837,127838,127841],{"id":127836},"_735-伪类选择器","7.3.5 ",[127839,127840],"focus",{},"伪类选择器",[40,127843,127844,127846,127847,127849],{},[127839,127845],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[91,127848,126590],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[85,127851,127853],{"className":126529,"code":127852,"language":126531,"meta":14,"style":14},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[91,127854,127855,127863,127874,127884],{"__ignoreMap":14},[94,127856,127857,127859,127861],{"class":96,"line":97},[94,127858,53798],{"class":51277},[94,127860,61877],{"class":1944},[94,127862,15554],{"class":104},[94,127864,127865,127868,127870,127872],{"class":96,"line":15},[94,127866,127867],{"class":153},"  border-color",[94,127869,51414],{"class":104},[94,127871,54866],{"class":153},[94,127873,1271],{"class":104},[94,127875,127876,127878,127880,127882],{"class":96,"line":1160},[94,127877,70775],{"class":153},[94,127879,51414],{"class":104},[94,127881,54714],{"class":153},[94,127883,1271],{"class":104},[94,127885,127886],{"class":96,"line":1175},[94,127887,1546],{"class":104},[5108,127889,127890],{},"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":14,"searchDepth":15,"depth":15,"links":127892},[127893,127898,127902],{"id":127268,"depth":15,"text":127269,"children":127894},[127895,127896,127897],{"id":127272,"depth":1160,"text":127273},{"id":127356,"depth":1160,"text":127357},{"id":127404,"depth":1160,"text":127405},{"id":127494,"depth":15,"text":127495,"children":127899},[127900,127901],{"id":127498,"depth":1160,"text":127499},{"id":127571,"depth":1160,"text":127572},{"id":127581,"depth":15,"text":127582,"children":127903},[127904,127905,127906,127907,127908],{"id":127585,"depth":1160,"text":127586},{"id":127638,"depth":1160,"text":127639},{"id":127654,"depth":1160,"text":127655},{"id":127674,"depth":1160,"text":127675},{"id":127836,"depth":1160,"text":127909},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127260,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127916,"title":127917,"body":127918,"description":17,"extension":18,"meta":129841,"navigation":20,"path":129842,"seo":129843,"stem":129844,"__hash__":129845},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127919,"toc":129815},[127920,127923,127927,127936,127940,127966,127971,127974,127977,127980,127983,127987,127990,128000,128008,128012,128047,128052,128055,128058,128061,128064,128068,128071,128080,128084,128097,128102,128105,128108,128111,128115,128118,128122,128125,128180,128183,128214,128217,128271,128275,128278,128444,128567,128570,128573,128576,128579,128583,128586,128590,128593,128596,128600,128603,128634,128661,128689,128692,128696,128722,128765,128769,128863,128866,128893,128896,128899,128902,128905,128908,128911,128914,128917,128920,128924,128981,129008,129012,129060,129064,129105,129107,129110,129113,129116,129119,129123,129215,129218,129221,129224,129228,129351,129552,129556,129560,129563,129566,129569,129573,129576,129579,129604,129607,129610,129613,129616,129619,129623,129631,129693,129696,129754,129757,129760,129763,129766,129769,129772,129775,129812],[10,127921,127917],{"id":127922},"_8-css显示模式与背景特性",[35,127924,127926],{"id":127925},"_81-css元素显示模式","8.1 css元素显示模式",[40,127928,127929,127930,127932,127933,127935],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[91,127931,126140],{},"自己占一行，比如一行可以放多个",[91,127934,126143],{},"，HTML 元素一般分为块元素和行内元素两种类型",[65,127937,127939],{"id":127938},"_811-块元素","8.1.1 块元素",[40,127941,127942,127943,127945,127946,317,127949,317,127951,317,127953,317,127956,317,127959,127962,127963,127965],{},"常见的块元素有",[91,127944,126044],{},"~",[91,127947,127948],{},"\u003Ch6>",[91,127950,126070],{},[91,127952,126140],{},[91,127954,127955],{},"\u003Cul>",[91,127957,127958],{},"\u003Col>",[91,127960,127961],{},"\u003Cli>","等，其中 ",[91,127964,126140],{}," 标签是最典型的块元素",[40,127967,127968],{},[254,127969,127970],{},"块级元素的特点：",[40,127972,127973],{},"① 比较霸道，自己独占一行。",[40,127975,127976],{},"② 高度，宽度、外边距以及内边距都可以控制。",[40,127978,127979],{},"③ 宽度默认是容器（父级宽度）的100%。",[40,127981,127982],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[40,127984,127985],{},[254,127986,134],{},[40,127988,127989],{},"①文字类的元素内不能使用块级元素",[40,127991,77226,127992,127994,127995,127997,127998],{},[91,127993,126070],{}," 标签主要用于存放文字，因此 ",[91,127996,126070],{}," 里面不能放块级元素，特别是不能放",[91,127999,126140],{},[40,128001,128002,128003,127945,128005,128007],{},"⑥同理， ",[91,128004,126044],{},[91,128006,127948],{},"等都是文字类块级标签，里面也不能放其他块级元素",[65,128009,128011],{"id":128010},"_812-行内元素","8.1.2 行内元素",[40,128013,128014,128015,317,128017,317,128020,317,128023,317,128026,317,128029,317,128032,317,128035,317,128038,317,128041,128043,128044,128046],{},"常见的行内元素有 ",[91,128016,126302],{},[91,128018,128019],{},"\u003Cstrong>",[91,128021,128022],{},"\u003Cb>",[91,128024,128025],{},"\u003Cem>",[91,128027,128028],{},"\u003Ci>",[91,128030,128031],{},"\u003Cdel>",[91,128033,128034],{},"\u003Cs>",[91,128036,128037],{},"\u003Cins>",[91,128039,128040],{},"\u003Cu>",[91,128042,126143],{}," 等，其中 ",[91,128045,126143],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[40,128048,128049],{},[254,128050,128051],{},"特点：",[40,128053,128054],{},"① 相邻行内元素在一行上，一行可以显示多个。",[40,128056,128057],{},"② 高、宽直接设置是无效的。",[40,128059,128060],{},"③ 默认宽度就是它本身内容的宽度。",[40,128062,128063],{},"④ 行内元素只能容纳文本或其他行内元素。",[40,128065,128066],{},[254,128067,134],{},[40,128069,128070],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[40,128072,128073,128074,128076,128077,128079],{},"②特殊情况链接 ",[91,128075,126302],{}," 里面可以放块级元素，但是给 ",[91,128078,126302],{}," 转换一下块级模式最安全",[65,128081,128083],{"id":128082},"_813-行内块元素","8.1.3 行内块元素",[40,128085,128086,128087,317,128090,317,128093,128096],{},"在行内元素中有几个特殊的标签 —— ",[91,128088,128089],{},"\u003Cimg \u002F>",[91,128091,128092],{},"\u003Cinput \u002F>",[91,128094,128095],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[40,128098,128099],{},[254,128100,128101],{},"行内块元素的特点：",[40,128103,128104],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[40,128106,128107],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[40,128109,128110],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[65,128112,128114],{"id":128113},"_814-总结","8.1.4 总结",[1443,128116],{"style":126385,"src":128117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[65,128119,128121],{"id":128120},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[40,128123,128124],{},"①转换为块元素：display:block;",[85,128126,128128],{"className":126529,"code":128127,"language":126531,"meta":14,"style":14},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[91,128129,128130,128135,128141,128152,128164,128176],{"__ignoreMap":14},[94,128131,128132],{"class":96,"line":97},[94,128133,128134],{"class":163},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[94,128136,128137,128139],{"class":96,"line":15},[94,128138,343],{"class":51277},[94,128140,15554],{"class":104},[94,128142,128143,128146,128148,128150],{"class":96,"line":1160},[94,128144,128145],{"class":153},"  display",[94,128147,51414],{"class":104},[94,128149,60846],{"class":153},[94,128151,1271],{"class":104},[94,128153,128154,128156,128158,128160,128162],{"class":96,"line":1175},[94,128155,70545],{"class":153},[94,128157,51414],{"class":104},[94,128159,416],{"class":153},[94,128161,51469],{"class":100},[94,128163,1271],{"class":104},[94,128165,128166,128168,128170,128172,128174],{"class":96,"line":1181},[94,128167,70765],{"class":153},[94,128169,51414],{"class":104},[94,128171,506],{"class":153},[94,128173,51469],{"class":100},[94,128175,1271],{"class":104},[94,128177,128178],{"class":96,"line":1195},[94,128179,1546],{"class":104},[40,128181,128182],{},"②转换为行内元素：display:inline;",[85,128184,128186],{"className":126529,"code":128185,"language":126531,"meta":14,"style":14},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[91,128187,128188,128193,128199,128210],{"__ignoreMap":14},[94,128189,128190],{"class":96,"line":97},[94,128191,128192],{"class":163},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[94,128194,128195,128197],{"class":96,"line":15},[94,128196,51588],{"class":51277},[94,128198,15554],{"class":104},[94,128200,128201,128203,128205,128208],{"class":96,"line":1160},[94,128202,128145],{"class":153},[94,128204,51414],{"class":104},[94,128206,128207],{"class":153},"inline",[94,128209,1271],{"class":104},[94,128211,128212],{"class":96,"line":1175},[94,128213,1546],{"class":104},[40,128215,128216],{},"③转换为行内块：display:inline-block;",[85,128218,128220],{"className":126529,"code":128219,"language":126531,"meta":14,"style":14},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[91,128221,128222,128227,128233,128243,128255,128267],{"__ignoreMap":14},[94,128223,128224],{"class":96,"line":97},[94,128225,128226],{"class":163},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[94,128228,128229,128231],{"class":96,"line":15},[94,128230,94],{"class":51277},[94,128232,15554],{"class":104},[94,128234,128235,128237,128239,128241],{"class":96,"line":1160},[94,128236,128145],{"class":153},[94,128238,51414],{"class":104},[94,128240,72360],{"class":153},[94,128242,1271],{"class":104},[94,128244,128245,128247,128249,128251,128253],{"class":96,"line":1175},[94,128246,70545],{"class":153},[94,128248,51414],{"class":104},[94,128250,717],{"class":153},[94,128252,51469],{"class":100},[94,128254,1271],{"class":104},[94,128256,128257,128259,128261,128263,128265],{"class":96,"line":1181},[94,128258,70765],{"class":153},[94,128260,51414],{"class":104},[94,128262,1056],{"class":153},[94,128264,51469],{"class":100},[94,128266,1271],{"class":104},[94,128268,128269],{"class":96,"line":1195},[94,128270,1546],{"class":104},[65,128272,128274],{"id":128273},"_816-小米侧边栏","8.1.6 小米侧边栏",[1443,128276],{"style":126385,"src":128277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[85,128279,128281],{"className":127276,"code":128280,"language":127278,"meta":14,"style":14},"\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",[91,128282,128283,128288,128303,128322,128341,128360,128379,128398,128417,128436],{"__ignoreMap":14},[94,128284,128285],{"class":96,"line":97},[94,128286,128287],{"class":163},"\u003C!-- 小米侧边栏案例 -->\n",[94,128289,128290,128292,128294,128296,128298,128301],{"class":96,"line":15},[94,128291,1015],{"class":104},[94,128293,51588],{"class":51277},[94,128295,53463],{"class":1944},[94,128297,150],{"class":104},[94,128299,128300],{"class":209},"\"sidebar\"",[94,128302,51284],{"class":104},[94,128304,128305,128307,128309,128311,128313,128315,128318,128320],{"class":96,"line":1160},[94,128306,52121],{"class":104},[94,128308,343],{"class":51277},[94,128310,61034],{"class":1944},[94,128312,150],{"class":104},[94,128314,61039],{"class":209},[94,128316,128317],{"class":104},">手机 电话卡\u003C\u002F",[94,128319,343],{"class":51277},[94,128321,51284],{"class":104},[94,128323,128324,128326,128328,128330,128332,128334,128337,128339],{"class":96,"line":1175},[94,128325,52121],{"class":104},[94,128327,343],{"class":51277},[94,128329,61034],{"class":1944},[94,128331,150],{"class":104},[94,128333,61039],{"class":209},[94,128335,128336],{"class":104},">电视 盒子\u003C\u002F",[94,128338,343],{"class":51277},[94,128340,51284],{"class":104},[94,128342,128343,128345,128347,128349,128351,128353,128356,128358],{"class":96,"line":1181},[94,128344,52121],{"class":104},[94,128346,343],{"class":51277},[94,128348,61034],{"class":1944},[94,128350,150],{"class":104},[94,128352,61039],{"class":209},[94,128354,128355],{"class":104},">笔记本 平板\u003C\u002F",[94,128357,343],{"class":51277},[94,128359,51284],{"class":104},[94,128361,128362,128364,128366,128368,128370,128372,128375,128377],{"class":96,"line":1195},[94,128363,52121],{"class":104},[94,128365,343],{"class":51277},[94,128367,61034],{"class":1944},[94,128369,150],{"class":104},[94,128371,61039],{"class":209},[94,128373,128374],{"class":104},">出行 穿戴\u003C\u002F",[94,128376,343],{"class":51277},[94,128378,51284],{"class":104},[94,128380,128381,128383,128385,128387,128389,128391,128394,128396],{"class":96,"line":1201},[94,128382,52121],{"class":104},[94,128384,343],{"class":51277},[94,128386,61034],{"class":1944},[94,128388,150],{"class":104},[94,128390,61039],{"class":209},[94,128392,128393],{"class":104},">智能 路由器\u003C\u002F",[94,128395,343],{"class":51277},[94,128397,51284],{"class":104},[94,128399,128400,128402,128404,128406,128408,128410,128413,128415],{"class":96,"line":1292},[94,128401,52121],{"class":104},[94,128403,343],{"class":51277},[94,128405,61034],{"class":1944},[94,128407,150],{"class":104},[94,128409,61039],{"class":209},[94,128411,128412],{"class":104},">健康 儿童\u003C\u002F",[94,128414,343],{"class":51277},[94,128416,51284],{"class":104},[94,128418,128419,128421,128423,128425,128427,128429,128432,128434],{"class":96,"line":1298},[94,128420,52121],{"class":104},[94,128422,343],{"class":51277},[94,128424,61034],{"class":1944},[94,128426,150],{"class":104},[94,128428,61039],{"class":209},[94,128430,128431],{"class":104},">耳机 音响\u003C\u002F",[94,128433,343],{"class":51277},[94,128435,51284],{"class":104},[94,128437,128438,128440,128442],{"class":96,"line":1310},[94,128439,51762],{"class":104},[94,128441,51588],{"class":51277},[94,128443,51284],{"class":104},[85,128445,128447],{"className":126529,"code":128446,"language":126531,"meta":14,"style":14},".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",[91,128448,128449,128458,128468,128481,128493,128505,128517,128527,128538,128542,128552,128563],{"__ignoreMap":14},[94,128450,128451,128454,128456],{"class":96,"line":97},[94,128452,128453],{"class":1944},".sidebar",[94,128455,1379],{"class":51277},[94,128457,15554],{"class":104},[94,128459,128460,128462,128464,128466],{"class":96,"line":15},[94,128461,128145],{"class":153},[94,128463,51414],{"class":104},[94,128465,60846],{"class":153},[94,128467,1271],{"class":104},[94,128469,128470,128472,128474,128477,128479],{"class":96,"line":1160},[94,128471,70545],{"class":153},[94,128473,51414],{"class":104},[94,128475,128476],{"class":153},"234",[94,128478,51469],{"class":100},[94,128480,1271],{"class":104},[94,128482,128483,128485,128487,128489,128491],{"class":96,"line":1175},[94,128484,70765],{"class":153},[94,128486,51414],{"class":104},[94,128488,557],{"class":153},[94,128490,51469],{"class":100},[94,128492,1271],{"class":104},[94,128494,128495,128497,128499,128501,128503],{"class":96,"line":1181},[94,128496,127213],{"class":153},[94,128498,51414],{"class":104},[94,128500,557],{"class":153},[94,128502,51469],{"class":100},[94,128504,1271],{"class":104},[94,128506,128507,128509,128511,128513,128515],{"class":96,"line":1195},[94,128508,70800],{"class":153},[94,128510,51414],{"class":104},[94,128512,1056],{"class":153},[94,128514,51469],{"class":100},[94,128516,1271],{"class":104},[94,128518,128519,128521,128523,128525],{"class":96,"line":1201},[94,128520,70882],{"class":153},[94,128522,51414],{"class":104},[94,128524,60819],{"class":153},[94,128526,1271],{"class":104},[94,128528,128529,128531,128533,128536],{"class":96,"line":1292},[94,128530,70855],{"class":153},[94,128532,51414],{"class":104},[94,128534,128535],{"class":153},"#55585a",[94,128537,1271],{"class":104},[94,128539,128540],{"class":96,"line":1298},[94,128541,1546],{"class":104},[94,128543,128544,128546,128548,128550],{"class":96,"line":1310},[94,128545,128453],{"class":1944},[94,128547,1379],{"class":51277},[94,128549,60917],{"class":1944},[94,128551,15554],{"class":104},[94,128553,128554,128556,128558,128561],{"class":96,"line":1593},[94,128555,70855],{"class":153},[94,128557,51414],{"class":104},[94,128559,128560],{"class":153},"#ff6700",[94,128562,1271],{"class":104},[94,128564,128565],{"class":96,"line":1598},[94,128566,1546],{"class":104},[1443,128568],{"style":126385,"src":128569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[40,128571,128572],{},"行高=盒子高度：实现文字的垂直居中",[40,128574,128575],{},"原理讲解：",[1443,128577],{"style":126385,"src":128578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[35,128580,128582],{"id":128581},"_82-css背景","8.2 css背景",[40,128584,128585],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[65,128587,128589],{"id":128588},"_821-背景颜色","8.2.1 背景颜色",[40,128591,128592],{},"background-color:颜色值;",[40,128594,128595],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[65,128597,128599],{"id":128598},"_822-背景图片","8.2.2 背景图片",[40,128601,128602],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[85,128604,128606],{"className":126529,"code":128605,"language":126531,"meta":14,"style":14},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[91,128607,128608,128614,128630],{"__ignoreMap":14},[94,128609,128610,128612],{"class":96,"line":97},[94,128611,51588],{"class":51277},[94,128613,15554],{"class":104},[94,128615,128616,128619,128621,128623,128625,128628],{"class":96,"line":15},[94,128617,128618],{"class":153},"  background-image",[94,128620,51414],{"class":104},[94,128622,61703],{"class":153},[94,128624,105],{"class":104},[94,128626,128627],{"class":5198},"images\u002Fbg.png",[94,128629,2700],{"class":104},[94,128631,128632],{"class":96,"line":1160},[94,128633,1546],{"class":104},[242,128635,128636,128645],{},[245,128637,128638],{},[248,128639,128640,128643],{},[251,128641,128642],{"align":23718},"参数值",[251,128644,102673],{"align":23718},[289,128646,128647,128654],{},[248,128648,128649,128651],{},[294,128650,54714],{"align":23718},[294,128652,128653],{"align":23718},"无背景图（默认的）",[248,128655,128656,128658],{},[294,128657,61703],{"align":23718},[294,128659,128660],{"align":23718},"使用绝对或相对地址指定背景图像",[85,128662,128663],{"className":126529,"code":128605,"language":126531,"meta":14,"style":14},[91,128664,128665,128671,128685],{"__ignoreMap":14},[94,128666,128667,128669],{"class":96,"line":97},[94,128668,51588],{"class":51277},[94,128670,15554],{"class":104},[94,128672,128673,128675,128677,128679,128681,128683],{"class":96,"line":15},[94,128674,128618],{"class":153},[94,128676,51414],{"class":104},[94,128678,61703],{"class":153},[94,128680,105],{"class":104},[94,128682,128627],{"class":5198},[94,128684,2700],{"class":104},[94,128686,128687],{"class":96,"line":1160},[94,128688,1546],{"class":104},[40,128690,128691],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[65,128693,128695],{"id":128694},"_823-背景平铺","8.2.3 背景平铺",[85,128697,128699],{"className":126529,"code":128698,"language":126531,"meta":14,"style":14},"div {\n  background-repeat: no-repeat;\n}\n",[91,128700,128701,128707,128718],{"__ignoreMap":14},[94,128702,128703,128705],{"class":96,"line":97},[94,128704,51588],{"class":51277},[94,128706,15554],{"class":104},[94,128708,128709,128712,128714,128716],{"class":96,"line":15},[94,128710,128711],{"class":153},"  background-repeat",[94,128713,51414],{"class":104},[94,128715,61713],{"class":153},[94,128717,1271],{"class":104},[94,128719,128720],{"class":96,"line":1160},[94,128721,1546],{"class":104},[242,128723,128724,128732],{},[245,128725,128726],{},[248,128727,128728,128730],{},[251,128729,128642],{"align":23718},[251,128731,102673],{"align":23718},[289,128733,128734,128742,128749,128757],{},[248,128735,128736,128739],{},[294,128737,128738],{"align":23718},"repeat",[294,128740,128741],{"align":23718},"背景图像在纵向和横向上平铺（默认的）",[248,128743,128744,128746],{},[294,128745,61713],{"align":23718},[294,128747,128748],{"align":23718},"背景图像不平铺",[248,128750,128751,128754],{},[294,128752,128753],{"align":23718},"repeat-x",[294,128755,128756],{"align":23718},"背景图像在横向上平铺",[248,128758,128759,128762],{},[294,128760,128761],{"align":23718},"repeat-y",[294,128763,128764],{"align":23718},"背景图像在纵向平铺",[65,128766,128768],{"id":128767},"_824-背景图片位置","8.2.4 背景图片位置",[85,128770,128772],{"className":126529,"code":128771,"language":126531,"meta":14,"style":14},"\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",[91,128773,128774,128779,128785,128799,128803,128808,128814,128830,128834,128839,128845,128859],{"__ignoreMap":14},[94,128775,128776],{"class":96,"line":97},[94,128777,128778],{"class":163},"\u002F* 方位名词 *\u002F\n",[94,128780,128781,128783],{"class":96,"line":15},[94,128782,51588],{"class":51277},[94,128784,15554],{"class":104},[94,128786,128787,128790,128792,128794,128797],{"class":96,"line":1160},[94,128788,128789],{"class":153},"  background-position",[94,128791,51414],{"class":104},[94,128793,51569],{"class":153},[94,128795,128796],{"class":153}," top",[94,128798,1271],{"class":104},[94,128800,128801],{"class":96,"line":1175},[94,128802,1546],{"class":104},[94,128804,128805],{"class":96,"line":1181},[94,128806,128807],{"class":163},"\u002F* 精确单位 *\u002F\n",[94,128809,128810,128812],{"class":96,"line":1195},[94,128811,51588],{"class":51277},[94,128813,15554],{"class":104},[94,128815,128816,128818,128820,128822,128824,128826,128828],{"class":96,"line":1201},[94,128817,128789],{"class":153},[94,128819,51414],{"class":104},[94,128821,805],{"class":153},[94,128823,51469],{"class":100},[94,128825,57481],{"class":153},[94,128827,51469],{"class":100},[94,128829,1271],{"class":104},[94,128831,128832],{"class":96,"line":1292},[94,128833,1546],{"class":104},[94,128835,128836],{"class":96,"line":1298},[94,128837,128838],{"class":163},"\u002F* 混合单位 *\u002F\n",[94,128840,128841,128843],{"class":96,"line":1310},[94,128842,51588],{"class":51277},[94,128844,15554],{"class":104},[94,128846,128847,128849,128851,128853,128855,128857],{"class":96,"line":1593},[94,128848,128789],{"class":153},[94,128850,51414],{"class":104},[94,128852,805],{"class":153},[94,128854,51469],{"class":100},[94,128856,17126],{"class":153},[94,128858,1271],{"class":104},[94,128860,128861],{"class":96,"line":1598},[94,128862,1546],{"class":104},[40,128864,128865],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[242,128867,128868,128876],{},[245,128869,128870],{},[248,128871,128872,128874],{},[251,128873,128642],{"align":23718},[251,128875,25852],{"align":23718},[289,128877,128878,128885],{},[248,128879,128880,128882],{},[294,128881,51945],{"align":23718},[294,128883,128884],{"align":23718},"百分数|由浮点数和单位标识符组成的长度值",[248,128886,128887,128890],{},[294,128888,128889],{"align":23718},"position",[294,128891,128892],{"align":23718},"top|center|bottom|left|center|right 方位名词",[40,128894,128895],{},"其他说明：",[40,128897,128898],{},"①参数是方位名词",[40,128900,128901],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[40,128903,128904],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[40,128906,128907],{},"②参数是精确单位",[40,128909,128910],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[40,128912,128913],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[40,128915,128916],{},"③参数是混合单位",[40,128918,128919],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[65,128921,128923],{"id":128922},"_825-背景图片固定","8.2.5 背景图片固定",[85,128925,128927],{"className":126529,"code":128926,"language":126531,"meta":14,"style":14},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[91,128928,128929,128934,128940,128952,128956,128961,128967,128977],{"__ignoreMap":14},[94,128930,128931],{"class":96,"line":97},[94,128932,128933],{"class":163},"\u002F* 背景滚动（默认） *\u002F\n",[94,128935,128936,128938],{"class":96,"line":15},[94,128937,51588],{"class":51277},[94,128939,15554],{"class":104},[94,128941,128942,128945,128947,128950],{"class":96,"line":1160},[94,128943,128944],{"class":153},"  background-attachment",[94,128946,51414],{"class":104},[94,128948,128949],{"class":153},"scroll",[94,128951,1271],{"class":104},[94,128953,128954],{"class":96,"line":1175},[94,128955,1546],{"class":104},[94,128957,128958],{"class":96,"line":1181},[94,128959,128960],{"class":163},"\u002F* 背景固定 *\u002F\n",[94,128962,128963,128965],{"class":96,"line":1195},[94,128964,51588],{"class":51277},[94,128966,15554],{"class":104},[94,128968,128969,128971,128973,128975],{"class":96,"line":1201},[94,128970,128944],{"class":153},[94,128972,51414],{"class":104},[94,128974,86210],{"class":153},[94,128976,1271],{"class":104},[94,128978,128979],{"class":96,"line":1292},[94,128980,1546],{"class":104},[242,128982,128983,128992],{},[245,128984,128985],{},[248,128986,128987,128990],{},[251,128988,128989],{"align":23718},"参数",[251,128991,102673],{"align":23718},[289,128993,128994,129001],{},[248,128995,128996,128998],{},[294,128997,128949],{"align":23718},[294,128999,129000],{"align":23718},"背景图像是随对象内容滚动",[248,129002,129003,129005],{},[294,129004,86210],{"align":23718},[294,129006,129007],{"align":23718},"背景图像固定",[65,129009,129011],{"id":129010},"_826-背景样式合写","8.2.6 背景样式合写",[85,129013,129015],{"className":126529,"code":129014,"language":126531,"meta":14,"style":14},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[91,129016,129017,129022,129028,129056],{"__ignoreMap":14},[94,129018,129019],{"class":96,"line":97},[94,129020,129021],{"class":163},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[94,129023,129024,129026],{"class":96,"line":15},[94,129025,51588],{"class":51277},[94,129027,15554],{"class":104},[94,129029,129030,129032,129034,129036,129039,129041,129043,129045,129047,129050,129052,129054],{"class":96,"line":1160},[94,129031,70588],{"class":153},[94,129033,51414],{"class":104},[94,129035,60819],{"class":153},[94,129037,129038],{"class":153}," url",[94,129040,105],{"class":104},[94,129042,128627],{"class":5198},[94,129044,13696],{"class":104},[94,129046,61713],{"class":153},[94,129048,129049],{"class":153}," fixed",[94,129051,17126],{"class":153},[94,129053,128796],{"class":153},[94,129055,1271],{"class":104},[94,129057,129058],{"class":96,"line":1175},[94,129059,1546],{"class":104},[65,129061,129063],{"id":129062},"_827-背景色半透明","8.2.7 背景色半透明",[85,129065,129067],{"className":126529,"code":129066,"language":126531,"meta":14,"style":14},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[91,129068,129069,129075,129101],{"__ignoreMap":14},[94,129070,129071,129073],{"class":96,"line":97},[94,129072,51588],{"class":51277},[94,129074,15554],{"class":104},[94,129076,129077,129079,129081,129083,129085,129087,129089,129091,129093,129095,129097,129099],{"class":96,"line":15},[94,129078,70588],{"class":153},[94,129080,51414],{"class":104},[94,129082,55087],{"class":153},[94,129084,105],{"class":104},[94,129086,296],{"class":153},[94,129088,12417],{"class":104},[94,129090,296],{"class":153},[94,129092,12417],{"class":104},[94,129094,296],{"class":153},[94,129096,12417],{"class":104},[94,129098,100498],{"class":153},[94,129100,2700],{"class":104},[94,129102,129103],{"class":96,"line":1160},[94,129104,1546],{"class":104},[40,129106,99373],{},[40,129108,129109],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[40,129111,129112],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[40,129114,129115],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[40,129117,129118],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[65,129120,129122],{"id":129121},"_828-总结","8.2.8 总结",[242,129124,129125,129136],{},[245,129126,129127],{},[248,129128,129129,129132,129134],{},[251,129130,129131],{"align":23718},"属性",[251,129133,102673],{"align":23718},[251,129135,257],{"align":23718},[289,129137,129138,129149,129160,129171,129182,129193,129204],{},[248,129139,129140,129143,129146],{},[294,129141,129142],{"align":23718},"background-color",[294,129144,129145],{"align":23718},"背景颜色",[294,129147,129148],{"align":23718},"预定义的颜色值\u002F十六进制\u002FRGB代码",[248,129150,129151,129154,129157],{},[294,129152,129153],{"align":23718},"background-image",[294,129155,129156],{"align":23718},"背景图片",[294,129158,129159],{"align":23718},"url(图片路径)",[248,129161,129162,129165,129168],{},[294,129163,129164],{"align":23718},"background-repeat",[294,129166,129167],{"align":23718},"是否平铺",[294,129169,129170],{"align":23718},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[248,129172,129173,129176,129179],{},[294,129174,129175],{"align":23718},"background-position",[294,129177,129178],{"align":23718},"背景位置",[294,129180,129181],{"align":23718},"length\u002Fposition 分别是x和y坐标",[248,129183,129184,129187,129190],{},[294,129185,129186],{"align":23718},"background-attachment",[294,129188,129189],{"align":23718},"背景附着",[294,129191,129192],{"align":23718},"scroll(背景滚动) \u002Ffixed (背景固定)",[248,129194,129195,129198,129201],{},[294,129196,129197],{"align":23718},"背景简写",[294,129199,129200],{"align":23718},"书写更简单",[294,129202,129203],{"align":23718},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[248,129205,129206,129209,129212],{},[294,129207,129208],{"align":23718},"背景半透明",[294,129210,129211],{"align":23718},"背景颜色半透明",[294,129213,129214],{"align":23718},"background: rgba(0,0,0.3); 后面必须是4个值",[40,129216,129217],{},"颜色渐变：",[1443,129219],{"style":126385,"src":129220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1443,129222],{"style":126385,"src":129223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[65,129225,129227],{"id":129226},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[85,129229,129231],{"className":127276,"code":129230,"language":127278,"meta":14,"style":14},"\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",[91,129232,129233,129248,129267,129286,129305,129324,129343],{"__ignoreMap":14},[94,129234,129235,129237,129239,129241,129243,129246],{"class":96,"line":97},[94,129236,1015],{"class":104},[94,129238,51588],{"class":51277},[94,129240,53463],{"class":1944},[94,129242,150],{"class":104},[94,129244,129245],{"class":209},"\"nav\"",[94,129247,51284],{"class":104},[94,129249,129250,129252,129254,129256,129258,129260,129263,129265],{"class":96,"line":15},[94,129251,52121],{"class":104},[94,129253,343],{"class":51277},[94,129255,61034],{"class":1944},[94,129257,150],{"class":104},[94,129259,61039],{"class":209},[94,129261,129262],{"class":104},">五彩导航1\u003C\u002F",[94,129264,343],{"class":51277},[94,129266,51284],{"class":104},[94,129268,129269,129271,129273,129275,129277,129279,129282,129284],{"class":96,"line":1160},[94,129270,52121],{"class":104},[94,129272,343],{"class":51277},[94,129274,61034],{"class":1944},[94,129276,150],{"class":104},[94,129278,61039],{"class":209},[94,129280,129281],{"class":104},">五彩导航2\u003C\u002F",[94,129283,343],{"class":51277},[94,129285,51284],{"class":104},[94,129287,129288,129290,129292,129294,129296,129298,129301,129303],{"class":96,"line":1175},[94,129289,52121],{"class":104},[94,129291,343],{"class":51277},[94,129293,61034],{"class":1944},[94,129295,150],{"class":104},[94,129297,61039],{"class":209},[94,129299,129300],{"class":104},">五彩导航3\u003C\u002F",[94,129302,343],{"class":51277},[94,129304,51284],{"class":104},[94,129306,129307,129309,129311,129313,129315,129317,129320,129322],{"class":96,"line":1181},[94,129308,52121],{"class":104},[94,129310,343],{"class":51277},[94,129312,61034],{"class":1944},[94,129314,150],{"class":104},[94,129316,61039],{"class":209},[94,129318,129319],{"class":104},">五彩导航4\u003C\u002F",[94,129321,343],{"class":51277},[94,129323,51284],{"class":104},[94,129325,129326,129328,129330,129332,129334,129336,129339,129341],{"class":96,"line":1195},[94,129327,52121],{"class":104},[94,129329,343],{"class":51277},[94,129331,61034],{"class":1944},[94,129333,150],{"class":104},[94,129335,61039],{"class":209},[94,129337,129338],{"class":104},">五彩导航5\u003C\u002F",[94,129340,343],{"class":51277},[94,129342,51284],{"class":104},[94,129344,129345,129347,129349],{"class":96,"line":1201},[94,129346,51762],{"class":104},[94,129348,51588],{"class":51277},[94,129350,51284],{"class":104},[85,129352,129354],{"className":126529,"code":129353,"language":126531,"meta":14,"style":14},".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",[91,129355,129356,129365,129375,129387,129399,129409,129421,129431,129435,129460,129483,129506,129529],{"__ignoreMap":14},[94,129357,129358,129361,129363],{"class":96,"line":97},[94,129359,129360],{"class":1944},".nav",[94,129362,1379],{"class":51277},[94,129364,15554],{"class":104},[94,129366,129367,129369,129371,129373],{"class":96,"line":15},[94,129368,128145],{"class":153},[94,129370,51414],{"class":104},[94,129372,72360],{"class":153},[94,129374,1271],{"class":104},[94,129376,129377,129379,129381,129383,129385],{"class":96,"line":1160},[94,129378,70545],{"class":153},[94,129380,51414],{"class":104},[94,129382,922],{"class":153},[94,129384,51469],{"class":100},[94,129386,1271],{"class":104},[94,129388,129389,129391,129393,129395,129397],{"class":96,"line":1175},[94,129390,70765],{"class":153},[94,129392,51414],{"class":104},[94,129394,961],{"class":153},[94,129396,51469],{"class":100},[94,129398,1271],{"class":104},[94,129400,129401,129403,129405,129407],{"class":96,"line":1181},[94,129402,70503],{"class":153},[94,129404,51414],{"class":104},[94,129406,51569],{"class":153},[94,129408,1271],{"class":104},[94,129410,129411,129413,129415,129417,129419],{"class":96,"line":1195},[94,129412,127213],{"class":153},[94,129414,51414],{"class":104},[94,129416,961],{"class":153},[94,129418,51469],{"class":100},[94,129420,1271],{"class":104},[94,129422,129423,129425,129427,129429],{"class":96,"line":1201},[94,129424,70882],{"class":153},[94,129426,51414],{"class":104},[94,129428,60819],{"class":153},[94,129430,1271],{"class":104},[94,129432,129433],{"class":96,"line":1292},[94,129434,1546],{"class":104},[94,129436,129437,129439,129441,129444,129446,129448,129451,129453,129455,129457],{"class":96,"line":1298},[94,129438,129360],{"class":1944},[94,129440,1379],{"class":51277},[94,129442,129443],{"class":1944},":nth-child",[94,129445,105],{"class":104},[94,129447,322],{"class":153},[94,129449,129450],{"class":104},") { ",[94,129452,129142],{"class":153},[94,129454,51414],{"class":104},[94,129456,128560],{"class":153},[94,129458,129459],{"class":104},"; }\n",[94,129461,129462,129464,129466,129468,129470,129472,129474,129476,129478,129481],{"class":96,"line":1310},[94,129463,129360],{"class":1944},[94,129465,1379],{"class":51277},[94,129467,129443],{"class":1944},[94,129469,105],{"class":104},[94,129471,182],{"class":153},[94,129473,129450],{"class":104},[94,129475,129142],{"class":153},[94,129477,51414],{"class":104},[94,129479,129480],{"class":153},"#ff0000",[94,129482,129459],{"class":104},[94,129484,129485,129487,129489,129491,129493,129495,129497,129499,129501,129504],{"class":96,"line":1593},[94,129486,129360],{"class":1944},[94,129488,1379],{"class":51277},[94,129490,129443],{"class":1944},[94,129492,105],{"class":104},[94,129494,176],{"class":153},[94,129496,129450],{"class":104},[94,129498,129142],{"class":153},[94,129500,51414],{"class":104},[94,129502,129503],{"class":153},"#00a4ff",[94,129505,129459],{"class":104},[94,129507,129508,129510,129512,129514,129516,129518,129520,129522,129524,129527],{"class":96,"line":1598},[94,129509,129360],{"class":1944},[94,129511,1379],{"class":51277},[94,129513,129443],{"class":1944},[94,129515,105],{"class":104},[94,129517,398],{"class":153},[94,129519,129450],{"class":104},[94,129521,129142],{"class":153},[94,129523,51414],{"class":104},[94,129525,129526],{"class":153},"#ff00ff",[94,129528,129459],{"class":104},[94,129530,129531,129533,129535,129537,129539,129541,129543,129545,129547,129550],{"class":96,"line":1604},[94,129532,129360],{"class":1944},[94,129534,1379],{"class":51277},[94,129536,129443],{"class":1944},[94,129538,105],{"class":104},[94,129540,424],{"class":153},[94,129542,129450],{"class":104},[94,129544,129142],{"class":153},[94,129546,51414],{"class":104},[94,129548,129549],{"class":153},"#00ff00",[94,129551,129459],{"class":104},[35,129553,129555],{"id":129554},"_83-css三大特性","8.3 css三大特性",[65,129557,129559],{"id":129558},"_831-层叠性","8.3.1 层叠性",[40,129561,129562],{},"为了解决样式冲突问题",[40,129564,129565],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[40,129567,129568],{},"   ②样式不冲突，不会层叠",[65,129570,129572],{"id":129571},"_832-继承性","8.3.2 继承性",[40,129574,129575],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[40,129577,129578],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[85,129580,129582],{"className":126529,"code":129581,"language":126531,"meta":14,"style":14},"p {\n  color: #333;\n}\n",[91,129583,129584,129590,129600],{"__ignoreMap":14},[94,129585,129586,129588],{"class":96,"line":97},[94,129587,40],{"class":51277},[94,129589,15554],{"class":104},[94,129591,129592,129594,129596,129598],{"class":96,"line":15},[94,129593,70882],{"class":153},[94,129595,51414],{"class":104},[94,129597,62346],{"class":153},[94,129599,1271],{"class":104},[94,129601,129602],{"class":96,"line":1160},[94,129603,1546],{"class":104},[1443,129605],{"style":126385,"src":129606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[40,129608,129609],{},"解释：①行高可以跟单位也可以不跟单位",[40,129611,129612],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[40,129614,129615],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[40,129617,129618],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[65,129620,129622],{"id":129621},"_833-优先级","8.3.3 优先级",[48,129624,129625,129628],{},[51,129626,129627],{},"选择器相同，则执行层叠性",[51,129629,129630],{},"选择器不同，则根据选择器权重执行",[242,129632,129633,129643],{},[245,129634,129635],{},[248,129636,129637,129640],{},[251,129638,129639],{"align":23718},"选择器",[251,129641,129642],{"align":23718},"选择器权重",[289,129644,129645,129653,129661,129669,129677,129685],{},[248,129646,129647,129650],{},[294,129648,129649],{"align":23718},"继承 或者*",[294,129651,129652],{"align":23718},"0，0，0，0",[248,129654,129655,129658],{},[294,129656,129657],{"align":23718},"标签选择器",[294,129659,129660],{"align":23718},"0，0，0，1",[248,129662,129663,129666],{},[294,129664,129665],{"align":23718},"类选择器，伪类选择器",[294,129667,129668],{"align":23718},"0，0，1，0",[248,129670,129671,129674],{},[294,129672,129673],{"align":23718},"ID选择器",[294,129675,129676],{"align":23718},"0，1，0，0",[248,129678,129679,129682],{},[294,129680,129681],{"align":23718},"行内样式",[294,129683,129684],{"align":23718},"1，0，0，0",[248,129686,129687,129690],{},[294,129688,129689],{"align":23718},"！important",[294,129691,129692],{"align":23718},"无穷大",[40,129694,129695],{},"! important用法：",[85,129697,129699],{"className":126529,"code":129698,"language":126531,"meta":14,"style":14},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[91,129700,129701,129706,129712,129725,129729,129734,129740,129750],{"__ignoreMap":14},[94,129702,129703],{"class":96,"line":97},[94,129704,129705],{"class":163},"\u002F* !important 拥有最高优先级 *\u002F\n",[94,129707,129708,129710],{"class":96,"line":15},[94,129709,51588],{"class":51277},[94,129711,15554],{"class":104},[94,129713,129714,129716,129718,129720,129723],{"class":96,"line":1160},[94,129715,70882],{"class":153},[94,129717,51414],{"class":104},[94,129719,51622],{"class":153},[94,129721,129722],{"class":100}," !important",[94,129724,1271],{"class":104},[94,129726,129727],{"class":96,"line":1175},[94,129728,1546],{"class":104},[94,129730,129731],{"class":96,"line":1181},[94,129732,129733],{"class":163},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[94,129735,129736,129738],{"class":96,"line":1195},[94,129737,51588],{"class":51277},[94,129739,15554],{"class":104},[94,129741,129742,129744,129746,129748],{"class":96,"line":1201},[94,129743,70882],{"class":153},[94,129745,51414],{"class":104},[94,129747,57398],{"class":153},[94,129749,1271],{"class":104},[94,129751,129752],{"class":96,"line":1292},[94,129753,1546],{"class":104},[40,129755,129756],{},"优先级注意点：",[40,129758,129759],{},"①权重是有4组数字组成,但是不会有进位",[40,129761,129762],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[40,129764,129765],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[40,129767,129768],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[40,129770,129771],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[40,129773,129774],{},"⑥复合选择器",[242,129776,129777,129787],{},[245,129778,129779],{},[248,129780,129781,129784],{},[251,129782,129783],{"align":23718},"div ul li",[251,129785,129786],{"align":23718},"0,0,0,3",[289,129788,129789,129797,129805],{},[248,129790,129791,129794],{},[294,129792,129793],{"align":23718},".nav ul li",[294,129795,129796],{"align":23718},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[248,129798,129799,129802],{},[294,129800,129801],{"align":23718},"a:hover",[294,129803,129804],{"align":23718},"0,0,1,1",[248,129806,129807,129810],{},[294,129808,129809],{"align":23718},".nav a",[294,129811,129804],{"align":23718},[5108,129813,129814],{},"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":14,"searchDepth":15,"depth":15,"links":129816},[129817,129825,129836],{"id":127925,"depth":15,"text":127926,"children":129818},[129819,129820,129821,129822,129823,129824],{"id":127938,"depth":1160,"text":127939},{"id":128010,"depth":1160,"text":128011},{"id":128082,"depth":1160,"text":128083},{"id":128113,"depth":1160,"text":128114},{"id":128120,"depth":1160,"text":128121},{"id":128273,"depth":1160,"text":128274},{"id":128581,"depth":15,"text":128582,"children":129826},[129827,129828,129829,129830,129831,129832,129833,129834,129835],{"id":128588,"depth":1160,"text":128589},{"id":128598,"depth":1160,"text":128599},{"id":128694,"depth":1160,"text":128695},{"id":128767,"depth":1160,"text":128768},{"id":128922,"depth":1160,"text":128923},{"id":129010,"depth":1160,"text":129011},{"id":129062,"depth":1160,"text":129063},{"id":129121,"depth":1160,"text":129122},{"id":129226,"depth":1160,"text":129227},{"id":129554,"depth":15,"text":129555,"children":129837},[129838,129839,129840],{"id":129558,"depth":1160,"text":129559},{"id":129571,"depth":1160,"text":129572},{"id":129621,"depth":1160,"text":129622},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127917,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129847,"title":129848,"body":129849,"description":17,"extension":18,"meta":131439,"navigation":20,"path":131440,"seo":131441,"stem":131442,"__hash__":131443},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129850,"toc":131418},[129851,129854,129858,129861,129864,129867,129870,129873,129876,129879,129883,129891,129928,129964,129967,129981,129986,130020,130023,130116,130121,130124,130154,130157,130162,130170,130174,130181,130227,130271,130276,130279,130282,130285,130288,130291,130294,130296,130299,130303,130308,130352,130357,130360,130363,130400,130405,130408,130411,130414,130417,130449,130452,130455,130458,130490,130493,130496,130499,130503,130506,130538,130541,130545,130565,130568,130576,130579,130583,130588,130591,130623,130628,130631,130669,130673,130678,130681,130684,130715,130718,130735,130740,130792,130852,130857,130911,130949,130953,130957,130960,130964,130972,130975,130977,130988,130993,131041,131075,131078,131081,131084,131087,131131,131134,131137,131140,131143,131146,131149,131193,131196,131199,131202,131205,131208,131211,131217,131220,131264,131267,131270,131273,131276,131279,131323,131326,131328,131331,131335,131339,131377,131381,131384,131387,131391,131399,131403,131406,131409,131412,131415],[10,129852,129848],{"id":129853},"_9-css盒模型浮动与切图",[35,129855,129857],{"id":129856},"_91-盒子模型","9.1 盒子模型",[40,129859,129860],{},"利用盒子来设计网页",[40,129862,129863],{},"盒子包含：边框、外边距、内边距、实际内容",[40,129865,129866],{},"网页布局设置：",[40,129868,129869],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[40,129871,129872],{},"②利用css设置好盒子样式，然后摆放到相应位置",[40,129874,129875],{},"③往盒子里装内容",[1443,129877],{"style":126385,"src":129878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[65,129880,129882],{"id":129881},"_911-边框border","9.1.1 边框（border）",[48,129884,129885,129888],{},[51,129886,129887],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[51,129889,129890],{},"语法",[85,129892,129894],{"className":126529,"code":129893,"language":126531,"meta":14,"style":14},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[91,129895,129896,129901,129907,129924],{"__ignoreMap":14},[94,129897,129898],{"class":96,"line":97},[94,129899,129900],{"class":163},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[94,129902,129903,129905],{"class":96,"line":15},[94,129904,51588],{"class":51277},[94,129906,15554],{"class":104},[94,129908,129909,129911,129913,129915,129917,129919,129922],{"class":96,"line":1160},[94,129910,70873],{"class":153},[94,129912,51414],{"class":104},[94,129914,322],{"class":153},[94,129916,51469],{"class":100},[94,129918,51498],{"class":153},[94,129920,129921],{"class":153}," #ccc",[94,129923,1271],{"class":104},[94,129925,129926],{"class":96,"line":1175},[94,129927,1546],{"class":104},[242,129929,129930,129938],{},[245,129931,129932],{},[248,129933,129934,129936],{},[251,129935,129131],{"align":23718},[251,129937,102673],{"align":23718},[289,129939,129940,129948,129956],{},[248,129941,129942,129945],{},[294,129943,129944],{"align":23718},"border-width",[294,129946,129947],{"align":23718},"定义边框粗细，单位是px",[248,129949,129950,129953],{},[294,129951,129952],{"align":23718},"border-style",[294,129954,129955],{"align":23718},"边框的样式",[248,129957,129958,129961],{},[294,129959,129960],{"align":23718},"border-color",[294,129962,129963],{"align":23718},"边框的颜色",[40,129965,129966],{},"边框样式 border-style 可以设置如下值：",[1112,129968,129969,129972,129975,129978],{},[51,129970,129971],{},"none：没有边框即忽略所有边框的宽度（默认值）",[51,129973,129974],{},"solid：边框为单实线(最为常用的)",[51,129976,129977],{},"dashed：边框为虚线",[51,129979,129980],{},"dotted：边框为点线",[48,129982,129983],{"start":1160},[51,129984,129985],{},"边框的合写分写",[85,129987,129988],{"className":126529,"code":129893,"language":126531,"meta":14,"style":14},[91,129989,129990,129994,130000,130016],{"__ignoreMap":14},[94,129991,129992],{"class":96,"line":97},[94,129993,129900],{"class":163},[94,129995,129996,129998],{"class":96,"line":15},[94,129997,51588],{"class":51277},[94,129999,15554],{"class":104},[94,130001,130002,130004,130006,130008,130010,130012,130014],{"class":96,"line":1160},[94,130003,70873],{"class":153},[94,130005,51414],{"class":104},[94,130007,322],{"class":153},[94,130009,51469],{"class":100},[94,130011,51498],{"class":153},[94,130013,129921],{"class":153},[94,130015,1271],{"class":104},[94,130017,130018],{"class":96,"line":1175},[94,130019,1546],{"class":104},[40,130021,130022],{},"边框分开写法：",[85,130024,130026],{"className":126529,"code":130025,"language":126531,"meta":14,"style":14},"\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",[91,130027,130028,130033,130039,130057,130075,130094,130112],{"__ignoreMap":14},[94,130029,130030],{"class":96,"line":97},[94,130031,130032],{"class":163},"\u002F* 边框分开写法 *\u002F\n",[94,130034,130035,130037],{"class":96,"line":15},[94,130036,51588],{"class":51277},[94,130038,15554],{"class":104},[94,130040,130041,130044,130046,130048,130050,130052,130055],{"class":96,"line":1160},[94,130042,130043],{"class":153},"  border-top",[94,130045,51414],{"class":104},[94,130047,322],{"class":153},[94,130049,51469],{"class":100},[94,130051,51498],{"class":153},[94,130053,130054],{"class":153}," #000",[94,130056,1271],{"class":104},[94,130058,130059,130062,130064,130066,130068,130070,130073],{"class":96,"line":1175},[94,130060,130061],{"class":153},"  border-right",[94,130063,51414],{"class":104},[94,130065,182],{"class":153},[94,130067,51469],{"class":100},[94,130069,62218],{"class":153},[94,130071,130072],{"class":153}," #333",[94,130074,1271],{"class":104},[94,130076,130077,130080,130082,130084,130086,130089,130092],{"class":96,"line":1181},[94,130078,130079],{"class":153},"  border-bottom",[94,130081,51414],{"class":104},[94,130083,176],{"class":153},[94,130085,51469],{"class":100},[94,130087,130088],{"class":153}," dotted",[94,130090,130091],{"class":153}," #666",[94,130093,1271],{"class":104},[94,130095,130096,130099,130101,130103,130105,130107,130110],{"class":96,"line":1195},[94,130097,130098],{"class":153},"  border-left",[94,130100,51414],{"class":104},[94,130102,322],{"class":153},[94,130104,51469],{"class":100},[94,130106,51498],{"class":153},[94,130108,130109],{"class":153}," #999",[94,130111,1271],{"class":104},[94,130113,130114],{"class":96,"line":1201},[94,130115,1546],{"class":104},[48,130117,130118],{"start":1175},[51,130119,130120],{},"表格的细线边框",[40,130122,130123],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[85,130125,130127],{"className":126529,"code":130126,"language":126531,"meta":14,"style":14},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[91,130128,130129,130134,130140,130150],{"__ignoreMap":14},[94,130130,130131],{"class":96,"line":97},[94,130132,130133],{"class":163},"\u002F* 表格细线边框合并 *\u002F\n",[94,130135,130136,130138],{"class":96,"line":15},[94,130137,242],{"class":51277},[94,130139,15554],{"class":104},[94,130141,130142,130144,130146,130148],{"class":96,"line":1160},[94,130143,70555],{"class":153},[94,130145,51414],{"class":104},[94,130147,65012],{"class":153},[94,130149,1271],{"class":104},[94,130151,130152],{"class":96,"line":1175},[94,130153,1546],{"class":104},[40,130155,130156],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[48,130158,130159],{"start":1181},[51,130160,130161],{},"解决边框额外增加盒子的实际大小的方法：",[1112,130163,130164,130167],{},[51,130165,130166],{},"测量盒子大小的时候,不量边框",[51,130168,130169],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[65,130171,130173],{"id":130172},"_912-内边距","9.1.2 内边距",[48,130175,130176,130179],{},[51,130177,130178],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[51,130180,129890],{},[242,130182,130183,130193],{},[245,130184,130185],{},[248,130186,130187,130190],{},[251,130188,130189],{"align":23718},"值的个数",[251,130191,130192],{"align":23718},"表达意思",[289,130194,130195,130203,130211,130219],{},[248,130196,130197,130200],{},[294,130198,130199],{"align":23718},"padding: 5px;",[294,130201,130202],{"align":23718},"1个值，代表上下左右都有5个元素",[248,130204,130205,130208],{},[294,130206,130207],{"align":23718},"padding: 5px 10px;",[294,130209,130210],{"align":23718},"2个值，代表上下内边距为5像素，左右内边距为10像素",[248,130212,130213,130216],{},[294,130214,130215],{"align":23718},"padding: 5px 10px 20px;",[294,130217,130218],{"align":23718},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[248,130220,130221,130224],{},[294,130222,130223],{"align":23718},"padding: 5px 10px 20px 30px;",[294,130225,130226],{"align":23718},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[242,130228,130229,130237],{},[245,130230,130231],{},[248,130232,130233,130235],{},[251,130234,129131],{"align":23718},[251,130236,102673],{"align":23718},[289,130238,130239,130247,130255,130263],{},[248,130240,130241,130244],{},[294,130242,130243],{"align":23718},"padding-left",[294,130245,130246],{"align":23718},"左内边距",[248,130248,130249,130252],{},[294,130250,130251],{"align":23718},"padding-right",[294,130253,130254],{"align":23718},"右内边距",[248,130256,130257,130260],{},[294,130258,130259],{"align":23718},"padding-top",[294,130261,130262],{"align":23718},"上内边距",[248,130264,130265,130268],{},[294,130266,130267],{"align":23718},"padding-bottom",[294,130269,130270],{"align":23718},"下内边距",[48,130272,130273],{"start":1160},[51,130274,130275],{},"内边距会影响盒子的实际大小",[40,130277,130278],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[40,130280,130281],{},"①内容和边框有了距离，添加了内边距",[40,130283,130284],{},"②padding影响了盒子实际大小",[40,130286,130287],{},"内边距对盒子大小的影响：",[40,130289,130290],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[40,130292,130293],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[40,130295,95197],{},[40,130297,130298],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[65,130300,130302],{"id":130301},"_913-外边距","9.1.3 外边距",[48,130304,130305],{},[51,130306,130307],{},"控制盒子与盒子之间的距离",[242,130309,130310,130318],{},[245,130311,130312],{},[248,130313,130314,130316],{},[251,130315,129131],{"align":23718},[251,130317,102673],{"align":23718},[289,130319,130320,130328,130336,130344],{},[248,130321,130322,130325],{},[294,130323,130324],{"align":23718},"margin-left",[294,130326,130327],{"align":23718},"左外边距",[248,130329,130330,130333],{},[294,130331,130332],{"align":23718},"margin-right",[294,130334,130335],{"align":23718},"右外边距",[248,130337,130338,130341],{},[294,130339,130340],{"align":23718},"margin-top",[294,130342,130343],{"align":23718},"上外边距",[248,130345,130346,130349],{},[294,130347,130348],{"align":23718},"margin-bottom",[294,130350,130351],{"align":23718},"下外边距",[48,130353,130354],{"start":15},[51,130355,130356],{},"外边距可以让块级盒子水平居中的两个条件：",[40,130358,130359],{},"①盒子必须指定了宽度（width）",[40,130361,130362],{},"②盒子左右的外边距都设置为 auto",[85,130364,130366],{"className":126529,"code":130365,"language":126531,"meta":14,"style":14},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[91,130367,130368,130373,130380,130396],{"__ignoreMap":14},[94,130369,130370],{"class":96,"line":97},[94,130371,130372],{"class":163},"\u002F* margin 复合写法（同上） *\u002F\n",[94,130374,130375,130378],{"class":96,"line":15},[94,130376,130377],{"class":1944},".box",[94,130379,15554],{"class":104},[94,130381,130382,130384,130386,130388,130390,130393],{"class":96,"line":1160},[94,130383,70447],{"class":153},[94,130385,51414],{"class":104},[94,130387,296],{"class":153},[94,130389,51533],{"class":153},[94,130391,130392],{"class":104},";  ",[94,130394,130395],{"class":163},"\u002F* 块级盒子水平居中 *\u002F\n",[94,130397,130398],{"class":96,"line":1175},[94,130399,1546],{"class":104},[48,130401,130402],{"start":1160},[51,130403,130404],{},"外边距塌陷问题",[40,130406,130407],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1443,130409],{"style":126385,"src":130410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[40,130412,130413],{},"解决方案：",[40,130415,130416],{},"①可以为父亲元素定义上边距",[85,130418,130419],{"className":126529,"code":130365,"language":126531,"meta":14,"style":14},[91,130420,130421,130425,130431,130445],{"__ignoreMap":14},[94,130422,130423],{"class":96,"line":97},[94,130424,130372],{"class":163},[94,130426,130427,130429],{"class":96,"line":15},[94,130428,130377],{"class":1944},[94,130430,15554],{"class":104},[94,130432,130433,130435,130437,130439,130441,130443],{"class":96,"line":1160},[94,130434,70447],{"class":153},[94,130436,51414],{"class":104},[94,130438,296],{"class":153},[94,130440,51533],{"class":153},[94,130442,130392],{"class":104},[94,130444,130395],{"class":163},[94,130446,130447],{"class":96,"line":1175},[94,130448,1546],{"class":104},[40,130450,130451],{},"②可以为父亲元素定义上内边距",[40,130453,130454],{},"③可以为父亲元素添加overflow:hidden",[1443,130456],{"style":126385,"src":130457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[85,130459,130460],{"className":126529,"code":130365,"language":126531,"meta":14,"style":14},[91,130461,130462,130466,130472,130486],{"__ignoreMap":14},[94,130463,130464],{"class":96,"line":97},[94,130465,130372],{"class":163},[94,130467,130468,130470],{"class":96,"line":15},[94,130469,130377],{"class":1944},[94,130471,15554],{"class":104},[94,130473,130474,130476,130478,130480,130482,130484],{"class":96,"line":1160},[94,130475,70447],{"class":153},[94,130477,51414],{"class":104},[94,130479,296],{"class":153},[94,130481,51533],{"class":153},[94,130483,130392],{"class":104},[94,130485,130395],{"class":163},[94,130487,130488],{"class":96,"line":1175},[94,130489,1546],{"class":104},[1443,130491],{"style":126385,"src":130492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[40,130494,130495],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[40,130497,130498],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[65,130500,130502],{"id":130501},"_914-清除内外边距","9.1.4 清除内外边距",[40,130504,130505],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[85,130507,130508],{"className":126529,"code":130365,"language":126531,"meta":14,"style":14},[91,130509,130510,130514,130520,130534],{"__ignoreMap":14},[94,130511,130512],{"class":96,"line":97},[94,130513,130372],{"class":163},[94,130515,130516,130518],{"class":96,"line":15},[94,130517,130377],{"class":1944},[94,130519,15554],{"class":104},[94,130521,130522,130524,130526,130528,130530,130532],{"class":96,"line":1160},[94,130523,70447],{"class":153},[94,130525,51414],{"class":104},[94,130527,296],{"class":153},[94,130529,51533],{"class":153},[94,130531,130392],{"class":104},[94,130533,130395],{"class":163},[94,130535,130536],{"class":96,"line":1175},[94,130537,1546],{"class":104},[40,130539,130540],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[65,130542,130544],{"id":130543},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1112,130546,130547,130550,130553,130556,130559,130562],{},[51,130548,130549],{},"文件→打开 ：可以打开我们要测量的图片",[51,130551,130552],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[51,130554,130555],{},"右击标尺，把里面的单位改为像素",[51,130557,130558],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[51,130560,130561],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[51,130563,130564],{},"用选区拖动 可以测量大小",[1443,130566],{"style":126385,"src":130567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1112,130569,130570,130573],{},[51,130571,130572],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[51,130574,130575],{},"吸管取色工具",[1443,130577],{"style":126385,"src":130578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[65,130580,130582],{"id":130581},"_916-案例","9.1.6 案例",[48,130584,130585],{},[51,130586,130587],{},"小米商品",[1443,130589],{"style":126385,"src":130590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[85,130592,130593],{"className":126529,"code":130365,"language":126531,"meta":14,"style":14},[91,130594,130595,130599,130605,130619],{"__ignoreMap":14},[94,130596,130597],{"class":96,"line":97},[94,130598,130372],{"class":163},[94,130600,130601,130603],{"class":96,"line":15},[94,130602,130377],{"class":1944},[94,130604,15554],{"class":104},[94,130606,130607,130609,130611,130613,130615,130617],{"class":96,"line":1160},[94,130608,70447],{"class":153},[94,130610,51414],{"class":104},[94,130612,296],{"class":153},[94,130614,51533],{"class":153},[94,130616,130392],{"class":104},[94,130618,130395],{"class":163},[94,130620,130621],{"class":96,"line":1175},[94,130622,1546],{"class":104},[48,130624,130625],{"start":15},[51,130626,130627],{},"快报模块",[1443,130629],{"style":126385,"src":130630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[85,130632,130634],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[91,130635,130636,130641,130656,130661],{"__ignoreMap":14},[94,130637,130638],{"class":96,"line":97},[94,130639,130640],{"class":163},"\u003C!-- HTML 代码示例 -->\n",[94,130642,130643,130645,130647,130649,130651,130654],{"class":96,"line":15},[94,130644,1015],{"class":104},[94,130646,51588],{"class":51277},[94,130648,53463],{"class":1944},[94,130650,150],{"class":104},[94,130652,130653],{"class":209},"\"example\"",[94,130655,51284],{"class":104},[94,130657,130658],{"class":96,"line":1160},[94,130659,130660],{"class":104},"  示例内容\n",[94,130662,130663,130665,130667],{"class":96,"line":1175},[94,130664,51762],{"class":104},[94,130666,51588],{"class":51277},[94,130668,51284],{"class":104},[65,130670,130672],{"id":130671},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[48,130674,130675],{},[51,130676,130677],{},"圆角边框",[40,130679,130680],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1443,130682],{"style":126385,"src":130683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[85,130685,130687],{"className":126529,"code":130686,"language":126531,"meta":14,"style":14},"div {\n  border: 1px solid #ccc;\n}\n",[91,130688,130689,130695,130711],{"__ignoreMap":14},[94,130690,130691,130693],{"class":96,"line":97},[94,130692,51588],{"class":51277},[94,130694,15554],{"class":104},[94,130696,130697,130699,130701,130703,130705,130707,130709],{"class":96,"line":15},[94,130698,70873],{"class":153},[94,130700,51414],{"class":104},[94,130702,322],{"class":153},[94,130704,51469],{"class":100},[94,130706,51498],{"class":153},[94,130708,129921],{"class":153},[94,130710,1271],{"class":104},[94,130712,130713],{"class":96,"line":1160},[94,130714,1546],{"class":104},[40,130716,130717],{},"解释:",[1112,130719,130720,130723,130726,130729,130732],{},[51,130721,130722],{},"参数值可以为数值或百分比的形式",[51,130724,130725],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[51,130727,130728],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[51,130730,130731],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[51,130733,130734],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[48,130736,130737],{"start":15},[51,130738,130739],{},"盒子阴影",[85,130741,130743],{"className":126529,"code":130742,"language":126531,"meta":14,"style":14},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[91,130744,130745,130751,130788],{"__ignoreMap":14},[94,130746,130747,130749],{"class":96,"line":97},[94,130748,51588],{"class":51277},[94,130750,15554],{"class":104},[94,130752,130753,130756,130758,130760,130762,130764,130766,130768,130770,130772,130774,130776,130778,130780,130782,130784,130786],{"class":96,"line":15},[94,130754,130755],{"class":153},"  box-shadow",[94,130757,51414],{"class":104},[94,130759,296],{"class":153},[94,130761,14737],{"class":153},[94,130763,51469],{"class":100},[94,130765,2019],{"class":153},[94,130767,51469],{"class":100},[94,130769,78744],{"class":153},[94,130771,105],{"class":104},[94,130773,296],{"class":153},[94,130775,12417],{"class":104},[94,130777,296],{"class":153},[94,130779,12417],{"class":104},[94,130781,296],{"class":153},[94,130783,12417],{"class":104},[94,130785,86187],{"class":153},[94,130787,2700],{"class":104},[94,130789,130790],{"class":96,"line":1160},[94,130791,1546],{"class":104},[242,130793,130794,130802],{},[245,130795,130796],{},[248,130797,130798,130800],{},[251,130799,257],{"align":23718},[251,130801,27472],{"align":23718},[289,130803,130804,130812,130820,130828,130836,130844],{},[248,130805,130806,130809],{},[294,130807,130808],{"align":23718},"h-shadow",[294,130810,130811],{"align":23718},"必需,水平阴影的位置,允许负值",[248,130813,130814,130817],{},[294,130815,130816],{"align":23718},"v-shadow",[294,130818,130819],{"align":23718},"必需,垂直阴影的位置,允许负值",[248,130821,130822,130825],{},[294,130823,130824],{"align":23718},"blur",[294,130826,130827],{"align":23718},"可选,模糊距离,就是影子的虚实",[248,130829,130830,130833],{},[294,130831,130832],{"align":23718},"spread",[294,130834,130835],{"align":23718},"可选,阴影尺寸",[248,130837,130838,130841],{},[294,130839,130840],{"align":23718},"color",[294,130842,130843],{"align":23718},"可选,阴影的颜色",[248,130845,130846,130849],{},[294,130847,130848],{"align":23718},"inset",[294,130850,130851],{"align":23718},"可选,将外部阴影(outset)改为内部阴影",[48,130853,130854],{"start":1160},[51,130855,130856],{},"文字阴影",[85,130858,130860],{"className":126529,"code":130859,"language":126531,"meta":14,"style":14},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[91,130861,130862,130868,130907],{"__ignoreMap":14},[94,130863,130864,130866],{"class":96,"line":97},[94,130865,40],{"class":51277},[94,130867,15554],{"class":104},[94,130869,130870,130873,130875,130877,130879,130881,130883,130885,130887,130889,130891,130893,130895,130897,130899,130901,130903,130905],{"class":96,"line":15},[94,130871,130872],{"class":153},"  text-shadow",[94,130874,51414],{"class":104},[94,130876,322],{"class":153},[94,130878,51469],{"class":100},[94,130880,25101],{"class":153},[94,130882,51469],{"class":100},[94,130884,14737],{"class":153},[94,130886,51469],{"class":100},[94,130888,78744],{"class":153},[94,130890,105],{"class":104},[94,130892,296],{"class":153},[94,130894,12417],{"class":104},[94,130896,296],{"class":153},[94,130898,12417],{"class":104},[94,130900,296],{"class":153},[94,130902,12417],{"class":104},[94,130904,100498],{"class":153},[94,130906,2700],{"class":104},[94,130908,130909],{"class":96,"line":1160},[94,130910,1546],{"class":104},[242,130912,130913,130921],{},[245,130914,130915],{},[248,130916,130917,130919],{},[251,130918,257],{"align":23718},[251,130920,27472],{"align":23718},[289,130922,130923,130929,130936,130943],{},[248,130924,130925,130927],{},[294,130926,130808],{"align":23718},[294,130928,130811],{"align":23718},[248,130930,130931,130933],{},[294,130932,130816],{"align":23718},[294,130934,130935],{"align":23718},"必需,垂直阴影位置,允许负值",[248,130937,130938,130940],{},[294,130939,130824],{"align":23718},[294,130941,130942],{"align":23718},"可选,模糊的距离",[248,130944,130945,130947],{},[294,130946,130840],{"align":23718},[294,130948,130843],{"align":23718},[35,130950,130952],{"id":130951},"_92-浮动","9.2 浮动",[65,130954,130956],{"id":130955},"_921-浮动介绍","9.2.1 浮动介绍",[40,130958,130959],{},"在16.2中详细介绍",[65,130961,130963],{"id":130962},"_922-清除浮动","9.2.2 清除浮动",[48,130965,130966,130969],{},[51,130967,130968],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[51,130970,130971],{},"清除浮动的本质",[40,130973,130974],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[40,130976,9007],{},[1112,130978,130979,130982,130985],{},[51,130980,130981],{},"如果父盒子本身有高度，则不需要清除浮动",[51,130983,130984],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[51,130986,130987],{},"父级有了高度，就不会影响下面的标准流了",[48,130989,130990],{"start":1160},[51,130991,130992],{},"清除浮动样式",[85,130994,130996],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[91,130997,130998,131005,131016,131020,131027,131037],{"__ignoreMap":14},[94,130999,131000,131003],{"class":96,"line":97},[94,131001,131002],{"class":1944},".left",[94,131004,15554],{"class":104},[94,131006,131007,131010,131012,131014],{"class":96,"line":15},[94,131008,131009],{"class":153},"  float",[94,131011,51414],{"class":104},[94,131013,23718],{"class":153},[94,131015,1271],{"class":104},[94,131017,131018],{"class":96,"line":1160},[94,131019,1546],{"class":104},[94,131021,131022,131025],{"class":96,"line":1175},[94,131023,131024],{"class":1944},".right",[94,131026,15554],{"class":104},[94,131028,131029,131031,131033,131035],{"class":96,"line":1181},[94,131030,131009],{"class":153},[94,131032,51414],{"class":104},[94,131034,72499],{"class":153},[94,131036,1271],{"class":104},[94,131038,131039],{"class":96,"line":1195},[94,131040,1546],{"class":104},[242,131042,131043,131051],{},[245,131044,131045],{},[248,131046,131047,131049],{},[251,131048,126993],{"align":23718},[251,131050,27472],{"align":23718},[289,131052,131053,131060,131067],{},[248,131054,131055,131057],{},[294,131056,23718],{"align":23718},[294,131058,131059],{"align":23718},"不允许左侧有浮动元素（清除左侧浮动的影响）",[248,131061,131062,131064],{},[294,131063,72499],{"align":23718},[294,131065,131066],{"align":23718},"不允许右侧有浮动元素（清除右侧浮动的影响）",[248,131068,131069,131072],{},[294,131070,131071],{"align":23718},"both",[294,131073,131074],{"align":23718},"同时清除左右侧浮动的影响",[40,131076,131077],{},"法一",[40,131079,131080],{},"额外标签法也称为隔墙法",[40,131082,131083],{},"使用方式：",[40,131085,131086],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[85,131088,131089],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[91,131090,131091,131097,131107,131111,131117,131127],{"__ignoreMap":14},[94,131092,131093,131095],{"class":96,"line":97},[94,131094,131002],{"class":1944},[94,131096,15554],{"class":104},[94,131098,131099,131101,131103,131105],{"class":96,"line":15},[94,131100,131009],{"class":153},[94,131102,51414],{"class":104},[94,131104,23718],{"class":153},[94,131106,1271],{"class":104},[94,131108,131109],{"class":96,"line":1160},[94,131110,1546],{"class":104},[94,131112,131113,131115],{"class":96,"line":1175},[94,131114,131024],{"class":1944},[94,131116,15554],{"class":104},[94,131118,131119,131121,131123,131125],{"class":96,"line":1181},[94,131120,131009],{"class":153},[94,131122,51414],{"class":104},[94,131124,72499],{"class":153},[94,131126,1271],{"class":104},[94,131128,131129],{"class":96,"line":1195},[94,131130,1546],{"class":104},[40,131132,131133],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[40,131135,131136],{},"优点： 通俗易懂，书写方便",[40,131138,131139],{},"缺点： 添加许多无意义的标签，结构化较差",[40,131141,131142],{},"注意： 要求这个新的空标签必须是块级元素。",[40,131144,131145],{},"法二",[40,131147,131148],{},"父级添加overflow属性",[85,131150,131151],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[91,131152,131153,131159,131169,131173,131179,131189],{"__ignoreMap":14},[94,131154,131155,131157],{"class":96,"line":97},[94,131156,131002],{"class":1944},[94,131158,15554],{"class":104},[94,131160,131161,131163,131165,131167],{"class":96,"line":15},[94,131162,131009],{"class":153},[94,131164,51414],{"class":104},[94,131166,23718],{"class":153},[94,131168,1271],{"class":104},[94,131170,131171],{"class":96,"line":1160},[94,131172,1546],{"class":104},[94,131174,131175,131177],{"class":96,"line":1175},[94,131176,131024],{"class":1944},[94,131178,15554],{"class":104},[94,131180,131181,131183,131185,131187],{"class":96,"line":1181},[94,131182,131009],{"class":153},[94,131184,51414],{"class":104},[94,131186,72499],{"class":153},[94,131188,1271],{"class":104},[94,131190,131191],{"class":96,"line":1195},[94,131192,1546],{"class":104},[40,131194,131195],{},"overflow: hidden;",[40,131197,131198],{},"优点：代码简洁",[40,131200,131201],{},"缺点：无法显示溢出的部分",[40,131203,131204],{},"注意：是给父元素添加代码",[40,131206,131207],{},"法三",[40,131209,131210],{},"父级添加after伪元素",[40,131212,131213,131216],{},[131214,131215],"after",{}," 方式是额外标签法的升级版",[40,131218,131219],{},"使用的时候复制就可以",[85,131221,131222],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[91,131223,131224,131230,131240,131244,131250,131260],{"__ignoreMap":14},[94,131225,131226,131228],{"class":96,"line":97},[94,131227,131002],{"class":1944},[94,131229,15554],{"class":104},[94,131231,131232,131234,131236,131238],{"class":96,"line":15},[94,131233,131009],{"class":153},[94,131235,51414],{"class":104},[94,131237,23718],{"class":153},[94,131239,1271],{"class":104},[94,131241,131242],{"class":96,"line":1160},[94,131243,1546],{"class":104},[94,131245,131246,131248],{"class":96,"line":1175},[94,131247,131024],{"class":1944},[94,131249,15554],{"class":104},[94,131251,131252,131254,131256,131258],{"class":96,"line":1181},[94,131253,131009],{"class":153},[94,131255,51414],{"class":104},[94,131257,72499],{"class":153},[94,131259,1271],{"class":104},[94,131261,131262],{"class":96,"line":1195},[94,131263,1546],{"class":104},[40,131265,131266],{},"优点：没有增加标签，结构更简单",[40,131268,131269],{},"缺点：照顾低版本浏览器",[40,131271,131272],{},"代表网站： 百度、淘宝网、网易等",[40,131274,131275],{},"法四",[40,131277,131278],{},"父级添加双伪元素",[85,131280,131281],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[91,131282,131283,131289,131299,131303,131309,131319],{"__ignoreMap":14},[94,131284,131285,131287],{"class":96,"line":97},[94,131286,131002],{"class":1944},[94,131288,15554],{"class":104},[94,131290,131291,131293,131295,131297],{"class":96,"line":15},[94,131292,131009],{"class":153},[94,131294,51414],{"class":104},[94,131296,23718],{"class":153},[94,131298,1271],{"class":104},[94,131300,131301],{"class":96,"line":1160},[94,131302,1546],{"class":104},[94,131304,131305,131307],{"class":96,"line":1175},[94,131306,131024],{"class":1944},[94,131308,15554],{"class":104},[94,131310,131311,131313,131315,131317],{"class":96,"line":1181},[94,131312,131009],{"class":153},[94,131314,51414],{"class":104},[94,131316,72499],{"class":153},[94,131318,1271],{"class":104},[94,131320,131321],{"class":96,"line":1195},[94,131322,1546],{"class":104},[40,131324,131325],{},"优点：代码更简洁",[40,131327,131269],{},[40,131329,131330],{},"代表网站：小米、腾讯等",[35,131332,131334],{"id":131333},"_93-ps切图","9.3 PS切图",[65,131336,131338],{"id":131337},"_931-常见图片格式","9.3.1 常见图片格式",[242,131340,131341,131351],{},[245,131342,131343],{},[248,131344,131345,131348],{},[251,131346,131347],{"align":23718},"jpg图像格式",[251,131349,131350],{"align":23718},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[289,131352,131353,131361,131369],{},[248,131354,131355,131358],{},[294,131356,131357],{"align":23718},"gif图像格式",[294,131359,131360],{"align":23718},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[248,131362,131363,131366],{},[294,131364,131365],{"align":23718},"png图像格式",[294,131367,131368],{"align":23718},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[248,131370,131371,131374],{},[294,131372,131373],{"align":23718},"PSD图像格式",[294,131375,131376],{"align":23718},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[65,131378,131380],{"id":131379},"_932-图层切图","9.3.2 图层切图",[40,131382,131383],{},"最简单的切图方式：右击图层 → 导出 → 切片",[40,131385,131386],{},"按住shift选中两个图层->图层菜单->合并图层",[65,131388,131390],{"id":131389},"_933-切片切图","9.3.3 切片切图",[1112,131392,131393,131396],{},[51,131394,131395],{},"利用切片工具手动划出",[51,131397,131398],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[65,131400,131402],{"id":131401},"_934-切图步骤","9.3.4 切图步骤",[40,131404,131405],{},"用切片工具选中：",[1443,131407],{"style":126385,"src":131408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[40,131410,131411],{},"文件 -> 导出",[1443,131413],{"style":126385,"src":131414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5108,131416,131417],{},"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":14,"searchDepth":15,"depth":15,"links":131419},[131420,131429,131433],{"id":129856,"depth":15,"text":129857,"children":131421},[131422,131423,131424,131425,131426,131427,131428],{"id":129881,"depth":1160,"text":129882},{"id":130172,"depth":1160,"text":130173},{"id":130301,"depth":1160,"text":130302},{"id":130501,"depth":1160,"text":130502},{"id":130543,"depth":1160,"text":130544},{"id":130581,"depth":1160,"text":130582},{"id":130671,"depth":1160,"text":130672},{"id":130951,"depth":15,"text":130952,"children":131430},[131431,131432],{"id":130955,"depth":1160,"text":130956},{"id":130962,"depth":1160,"text":130963},{"id":131333,"depth":15,"text":131334,"children":131434},[131435,131436,131437,131438],{"id":131337,"depth":1160,"text":131338},{"id":131379,"depth":1160,"text":131380},{"id":131389,"depth":1160,"text":131390},{"id":131401,"depth":1160,"text":131402},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129848,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131445,"title":131446,"body":131447,"description":17,"extension":18,"meta":132088,"navigation":20,"path":132089,"seo":132090,"stem":132091,"__hash__":132092},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131448,"toc":132076},[131449,131452,131456,131482,131516,131520,131524,131527,131569,131576,131586,131594,131596,131599,131602,131605,131612,131626,131630,131633,131662,131666,131669,131683,131687,131690,131718,131722,131725,131751,131755,131760,131793,131798,131826,131830,131847,131893,131898,131942,131959,132066,132074],[10,131450,131446],{"id":131451},"_10-css规范与学成在线案例",[35,131453,131455],{"id":131454},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[48,131457,131458,131464,131470,131476],{},[51,131459,131460,131463],{},[254,131461,131462],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[51,131465,131466,131469],{},[254,131467,131468],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[51,131471,131472,131475],{},[254,131473,131474],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[51,131477,131478,131481],{},[254,131479,131480],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[85,131483,131484],{"className":126529,"code":129893,"language":126531,"meta":14,"style":14},[91,131485,131486,131490,131496,131512],{"__ignoreMap":14},[94,131487,131488],{"class":96,"line":97},[94,131489,129900],{"class":163},[94,131491,131492,131494],{"class":96,"line":15},[94,131493,51588],{"class":51277},[94,131495,15554],{"class":104},[94,131497,131498,131500,131502,131504,131506,131508,131510],{"class":96,"line":1160},[94,131499,70873],{"class":153},[94,131501,51414],{"class":104},[94,131503,322],{"class":153},[94,131505,51469],{"class":100},[94,131507,51498],{"class":153},[94,131509,129921],{"class":153},[94,131511,1271],{"class":104},[94,131513,131514],{"class":96,"line":1175},[94,131515,1546],{"class":104},[35,131517,131519],{"id":131518},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[65,131521,131523],{"id":131522},"_1021-header头部制作","10.2.1 header头部制作",[1443,131525],{"style":126385,"src":131526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1112,131528,131529,131536,131543,131549,131556,131563],{},[51,131530,131531,131532,131535],{},"1号是版心盒子 ",[254,131533,131534],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[51,131537,131538,131539,131542],{},"版心盒子 里面包含 2号盒子 ",[254,131540,131541],{},"logo"," 图标",[51,131544,131545,131546,131548],{},"版心盒子 里面包含 3号盒子 ",[254,131547,53690],{}," 导航栏",[51,131550,131551,131552,131555],{},"版心盒子 里面包含 4号盒子 ",[254,131553,131554],{},"search"," 搜索框",[51,131557,131558,131559,131562],{},"版心盒子 里面包含 5号盒子 ",[254,131560,131561],{},"user"," 个人信息",[51,131564,131565,131566],{},"注意，要求里面的 ",[254,131567,131568],{},"4个子盒子 必须都浮动",[48,131570,131571],{},[51,131572,131573],{},[254,131574,131575],{},"导航栏注意点:",[40,131577,131578,131579,131582,131583],{},"实际开发中， ",[254,131580,131581],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[254,131584,131585],{},"用 li 包含链接(li+a)的做法",[1112,131587,131588,131591],{},[51,131589,131590],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[51,131592,131593],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[40,131595,9007],{},[40,131597,131598],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[40,131600,131601],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[40,131603,131604],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[48,131606,131607],{"start":15},[51,131608,131609],{},[254,131610,131611],{},"4号盒子search的细节：",[1112,131613,131614,131617,131620],{},[51,131615,131616],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[51,131618,131619],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[51,131621,131622,131625],{},[91,131623,131624],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[65,131627,131629],{"id":131628},"_1022-banner制作","10.2.2 banner制作",[1443,131631],{"style":126385,"src":131632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1112,131634,131635,131642,131648,131655],{},[51,131636,131637,131638,131641],{},"1号盒子是通栏的大盒子 ",[254,131639,131640],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[51,131643,131644,131645,131647],{},"2号盒子是版心 ",[254,131646,900],{}," ， 要水平居中对齐",[51,131649,131650,131651,131654],{},"3号盒子版心内，左对齐 ",[254,131652,131653],{},"subnav"," 侧导航栏",[51,131656,131657,131658,131661],{},"4号盒子版心内，右对齐 ",[254,131659,131660],{},"course"," 课程",[65,131663,131665],{"id":131664},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1443,131667],{"style":126385,"src":131668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1112,131670,131671,131674,131677,131680],{},[51,131672,131673],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[51,131675,131676],{},"1号盒子是标题 H3 左侧浮动",[51,131678,131679],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[51,131681,131682],{},"3号盒子 右浮动 mod 修改",[65,131684,131686],{"id":131685},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1443,131688],{"style":126385,"src":131689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1112,131691,131692,131698,131705,131712,131715],{},[51,131693,131694,131695,131697],{},"1号盒子为最大的盒子 ",[254,131696,53691],{}," 版心水平居中对齐",[51,131699,131700,131701,131704],{},"2号盒子为上面部分 ",[254,131702,131703],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[51,131706,131707,131708,131711],{},"3号盒子为底下部分 ",[254,131709,131710],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[51,131713,131714],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[51,131716,131717],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[65,131719,131721],{"id":131720},"_1025-底部模块制作","10.2.5 底部模块制作",[1443,131723],{"style":126385,"src":131724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1112,131726,131727,131734,131737,131744],{},[51,131728,131729,131730,131733],{},"1号盒子通栏大盒子 底部 ",[254,131731,131732],{},"footer"," 给高度 底色是白色",[51,131735,131736],{},"2号盒子版心水平居中",[51,131738,131739,131740,131743],{},"3号盒子版权 ",[254,131741,131742],{},"copyright"," 左对齐",[51,131745,131746,131747,131750],{},"4号盒子 链接组 ",[254,131748,131749],{},"links"," 右对齐",[65,131752,131754],{"id":131753},"_1026-代码模块","10.2.6 代码模块",[48,131756,131757],{},[51,131758,131759],{},"html部分",[85,131761,131763],{"className":127276,"code":131762,"language":127278,"meta":14,"style":14},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[91,131764,131765],{"__ignoreMap":14},[94,131766,131767,131769,131771,131773,131775,131778,131781,131783,131786,131789,131791],{"class":96,"line":97},[94,131768,1015],{"class":104},[94,131770,343],{"class":51277},[94,131772,61034],{"class":1944},[94,131774,150],{"class":104},[94,131776,131777],{"class":209},"\"https:\u002F\u002Fexample.com\"",[94,131779,131780],{"class":1944}," target",[94,131782,150],{"class":104},[94,131784,131785],{"class":209},"\"_blank\"",[94,131787,131788],{"class":104},">链接文字\u003C\u002F",[94,131790,343],{"class":51277},[94,131792,51284],{"class":104},[48,131794,131795],{"start":15},[51,131796,131797],{},"css部分",[85,131799,131800],{"className":127276,"code":131762,"language":127278,"meta":14,"style":14},[91,131801,131802],{"__ignoreMap":14},[94,131803,131804,131806,131808,131810,131812,131814,131816,131818,131820,131822,131824],{"class":96,"line":97},[94,131805,1015],{"class":104},[94,131807,343],{"class":51277},[94,131809,61034],{"class":1944},[94,131811,150],{"class":104},[94,131813,131777],{"class":209},[94,131815,131780],{"class":1944},[94,131817,150],{"class":104},[94,131819,131785],{"class":209},[94,131821,131788],{"class":104},[94,131823,343],{"class":51277},[94,131825,51284],{"class":104},[65,131827,131829],{"id":131828},"_1027-收获","10.2.7 收获",[48,131831,131832,131835,131838,131841,131844],{},[51,131833,131834],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[51,131836,131837],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[51,131839,131840],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[51,131842,131843],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[51,131845,131846],{},"遗忘代码",[85,131848,131850],{"className":126529,"code":131849,"language":126531,"meta":14,"style":14},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[91,131851,131852,131874,131879,131889],{"__ignoreMap":14},[94,131853,131854,131856,131858,131860,131862,131864,131866,131868,131870,131872],{"class":96,"line":97},[94,131855,51588],{"class":51277},[94,131857,12417],{"class":104},[94,131859,40],{"class":51277},[94,131861,12417],{"class":104},[94,131863,10],{"class":51277},[94,131865,12417],{"class":104},[94,131867,1112],{"class":51277},[94,131869,12417],{"class":104},[94,131871,51],{"class":51277},[94,131873,15554],{"class":104},[94,131875,131876],{"class":96,"line":15},[94,131877,131878],{"class":163},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[94,131880,131881,131883,131885,131887],{"class":96,"line":1160},[94,131882,128145],{"class":153},[94,131884,51414],{"class":104},[94,131886,60846],{"class":153},[94,131888,1271],{"class":104},[94,131890,131891],{"class":96,"line":1175},[94,131892,1546],{"class":104},[48,131894,131895],{"start":1195},[51,131896,131897],{},"html引css的程序",[85,131899,131900],{"className":126529,"code":131849,"language":126531,"meta":14,"style":14},[91,131901,131902,131924,131928,131938],{"__ignoreMap":14},[94,131903,131904,131906,131908,131910,131912,131914,131916,131918,131920,131922],{"class":96,"line":97},[94,131905,51588],{"class":51277},[94,131907,12417],{"class":104},[94,131909,40],{"class":51277},[94,131911,12417],{"class":104},[94,131913,10],{"class":51277},[94,131915,12417],{"class":104},[94,131917,1112],{"class":51277},[94,131919,12417],{"class":104},[94,131921,51],{"class":51277},[94,131923,15554],{"class":104},[94,131925,131926],{"class":96,"line":15},[94,131927,131878],{"class":163},[94,131929,131930,131932,131934,131936],{"class":96,"line":1160},[94,131931,128145],{"class":153},[94,131933,51414],{"class":104},[94,131935,60846],{"class":153},[94,131937,1271],{"class":104},[94,131939,131940],{"class":96,"line":1175},[94,131941,1546],{"class":104},[48,131943,131944,131947,131950,131953,131956],{"start":1201},[51,131945,131946],{},"浮动的盒子不会有外边距合并问题",[51,131948,131949],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[51,131951,131952],{},"ctrl+g快速定位行；shift+alt多个光标",[51,131954,131955],{},"学习上方各个模块的选择器起名方法，以后就这样用",[51,131957,131958],{},"在写选择器时尽量写全一些，例如",[85,131960,131962],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},"\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",[91,131963,131964,131969,131985,131990,132005,132010,132025,132030,132045,132050],{"__ignoreMap":14},[94,131965,131966],{"class":96,"line":97},[94,131967,131968],{"class":163},"\u002F* 静态定位（默认） *\u002F\n",[94,131970,131971,131974,131976,131978,131980,131983],{"class":96,"line":15},[94,131972,131973],{"class":1944},".static",[94,131975,79784],{"class":104},[94,131977,128889],{"class":153},[94,131979,51414],{"class":104},[94,131981,131982],{"class":153},"static",[94,131984,129459],{"class":104},[94,131986,131987],{"class":96,"line":1160},[94,131988,131989],{"class":163},"\u002F* 相对定位 *\u002F\n",[94,131991,131992,131995,131997,131999,132001,132003],{"class":96,"line":1175},[94,131993,131994],{"class":1944},".relative",[94,131996,79784],{"class":104},[94,131998,128889],{"class":153},[94,132000,51414],{"class":104},[94,132002,54741],{"class":153},[94,132004,129459],{"class":104},[94,132006,132007],{"class":96,"line":1181},[94,132008,132009],{"class":163},"\u002F* 绝对定位 *\u002F\n",[94,132011,132012,132015,132017,132019,132021,132023],{"class":96,"line":1195},[94,132013,132014],{"class":1944},".absolute",[94,132016,79784],{"class":104},[94,132018,128889],{"class":153},[94,132020,51414],{"class":104},[94,132022,54808],{"class":153},[94,132024,129459],{"class":104},[94,132026,132027],{"class":96,"line":1201},[94,132028,132029],{"class":163},"\u002F* 固定定位 *\u002F\n",[94,132031,132032,132035,132037,132039,132041,132043],{"class":96,"line":1292},[94,132033,132034],{"class":1944},".fixed",[94,132036,79784],{"class":104},[94,132038,128889],{"class":153},[94,132040,51414],{"class":104},[94,132042,86210],{"class":153},[94,132044,129459],{"class":104},[94,132046,132047],{"class":96,"line":1298},[94,132048,132049],{"class":163},"\u002F* 粘性定位 *\u002F\n",[94,132051,132052,132055,132057,132059,132061,132064],{"class":96,"line":1310},[94,132053,132054],{"class":1944},".sticky",[94,132056,79784],{"class":104},[94,132058,128889],{"class":153},[94,132060,51414],{"class":104},[94,132062,132063],{"class":153},"sticky",[94,132065,129459],{"class":104},[48,132067,132068,132071],{"start":1598},[51,132069,132070],{},"一定要用好注释",[51,132072,132073],{},"浮动的盒子不会有外边距合并的问题",[5108,132075,131417],{},{"title":14,"searchDepth":15,"depth":15,"links":132077},[132078,132079],{"id":131454,"depth":15,"text":131455},{"id":131518,"depth":15,"text":131519,"children":132080},[132081,132082,132083,132084,132085,132086,132087],{"id":131522,"depth":1160,"text":131523},{"id":131628,"depth":1160,"text":131629},{"id":131664,"depth":1160,"text":131665},{"id":131685,"depth":1160,"text":131686},{"id":131720,"depth":1160,"text":131721},{"id":131753,"depth":1160,"text":131754},{"id":131828,"depth":1160,"text":131829},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131446,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132094,"title":132095,"body":132096,"description":17,"extension":18,"meta":133582,"navigation":20,"path":133583,"seo":133584,"stem":133585,"__hash__":133586},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132097,"toc":133574},[132098,132101,132105,132109,132120,132124,132141,132185,132218,132221,132238,132241,132244,132288,132292,132296,132299,132302,132306,132309,132320,132383,132424,132427,132442,132496,132504,132507,132518,132572,132598,132601,132614,132668,132700,132754,132777,132831,132834,132837,132844,132898,132919,132973,132976,132979,133064,133072,133129,133152,133156,133159,133177,133181,133200,133254,133292,133296,133299,133302,133324,133328,133336,133339,133344,133355,133358,133362,133376,133420,133423,133427,133430,133435,133461,133466,133543,133546,133550,133553,133556,133559,133562,133565,133568,133571],[10,132099,132095],{"id":132100},"_11-传统布局与定位体系",[35,132102,132104],{"id":132103},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[65,132106,132108],{"id":132107},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1112,132110,132111,132114,132117],{},[51,132112,132113],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[51,132115,132116],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[51,132118,132119],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[65,132121,132123],{"id":132122},"_1112-浮动","11.1.2 浮动",[1112,132125,132126,132129,132132,132135,132138],{},[51,132127,132128],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[51,132130,132131],{},"浮动可以改变元素标签默认的排列方式",[51,132133,132134],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[51,132136,132137],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[51,132139,132140],{},"在使用行内块转换时盒子之间是有空隙的",[85,132142,132143],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[91,132144,132145,132151,132161,132165,132171,132181],{"__ignoreMap":14},[94,132146,132147,132149],{"class":96,"line":97},[94,132148,131002],{"class":1944},[94,132150,15554],{"class":104},[94,132152,132153,132155,132157,132159],{"class":96,"line":15},[94,132154,131009],{"class":153},[94,132156,51414],{"class":104},[94,132158,23718],{"class":153},[94,132160,1271],{"class":104},[94,132162,132163],{"class":96,"line":1160},[94,132164,1546],{"class":104},[94,132166,132167,132169],{"class":96,"line":1175},[94,132168,131024],{"class":1944},[94,132170,15554],{"class":104},[94,132172,132173,132175,132177,132179],{"class":96,"line":1181},[94,132174,131009],{"class":153},[94,132176,51414],{"class":104},[94,132178,72499],{"class":153},[94,132180,1271],{"class":104},[94,132182,132183],{"class":96,"line":1195},[94,132184,1546],{"class":104},[242,132186,132187,132195],{},[245,132188,132189],{},[248,132190,132191,132193],{},[251,132192,126993],{"align":23718},[251,132194,27472],{"align":23718},[289,132196,132197,132204,132211],{},[248,132198,132199,132201],{},[294,132200,54714],{"align":23718},[294,132202,132203],{"align":23718},"元素不浮动（默认值）",[248,132205,132206,132208],{},[294,132207,23718],{"align":23718},[294,132209,132210],{"align":23718},"元素向左浮动",[248,132212,132213,132215],{},[294,132214,72499],{"align":23718},[294,132216,132217],{"align":23718},"元素向右浮动",[40,132219,132220],{},"浮动重点：",[1112,132222,132223,132226,132229,132232,132235],{},[51,132224,132225],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[51,132227,132228],{},"浮动的元素会一行内显示并且元素顶部对齐",[51,132230,132231],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[51,132233,132234],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[51,132236,132237],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[40,132239,132240],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[40,132242,132243],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[85,132245,132246],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[91,132247,132248,132254,132264,132268,132274,132284],{"__ignoreMap":14},[94,132249,132250,132252],{"class":96,"line":97},[94,132251,131002],{"class":1944},[94,132253,15554],{"class":104},[94,132255,132256,132258,132260,132262],{"class":96,"line":15},[94,132257,131009],{"class":153},[94,132259,51414],{"class":104},[94,132261,23718],{"class":153},[94,132263,1271],{"class":104},[94,132265,132266],{"class":96,"line":1160},[94,132267,1546],{"class":104},[94,132269,132270,132272],{"class":96,"line":1175},[94,132271,131024],{"class":1944},[94,132273,15554],{"class":104},[94,132275,132276,132278,132280,132282],{"class":96,"line":1181},[94,132277,131009],{"class":153},[94,132279,51414],{"class":104},[94,132281,72499],{"class":153},[94,132283,1271],{"class":104},[94,132285,132286],{"class":96,"line":1195},[94,132287,1546],{"class":104},[65,132289,132291],{"id":132290},"_1113-定位","11.1.3 定位",[21980,132293,132295],{"id":132294},"_11131-使用场景","11.1.3.1 使用场景",[40,132297,132298],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[40,132300,132301],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[21980,132303,132305],{"id":132304},"_11132-定位组成","11.1.3.2 定位组成",[40,132307,132308],{},"定位 = 定位模式 + 边偏移",[48,132310,132311],{},[51,132312,132313,132316,132317],{},[254,132314,132315],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[254,132318,132319],{},"定位模式",[85,132321,132323],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[91,132324,132325,132331,132345,132362,132379],{"__ignoreMap":14},[94,132326,132327,132329],{"class":96,"line":97},[94,132328,130377],{"class":1944},[94,132330,15554],{"class":104},[94,132332,132333,132336,132338,132340,132342],{"class":96,"line":15},[94,132334,132335],{"class":153},"  position",[94,132337,51414],{"class":104},[94,132339,54741],{"class":153},[94,132341,130392],{"class":104},[94,132343,132344],{"class":163},"\u002F* 定位模式 *\u002F\n",[94,132346,132347,132350,132352,132354,132356,132359],{"class":96,"line":1160},[94,132348,132349],{"class":153},"  top",[94,132351,51414],{"class":104},[94,132353,551],{"class":153},[94,132355,51469],{"class":100},[94,132357,132358],{"class":104},";           ",[94,132360,132361],{"class":163},"\u002F* 边偏移：上 *\u002F\n",[94,132363,132364,132367,132369,132371,132373,132376],{"class":96,"line":1175},[94,132365,132366],{"class":153},"  left",[94,132368,51414],{"class":104},[94,132370,805],{"class":153},[94,132372,51469],{"class":100},[94,132374,132375],{"class":104},";          ",[94,132377,132378],{"class":163},"\u002F* 边偏移：左 *\u002F\n",[94,132380,132381],{"class":96,"line":1181},[94,132382,1546],{"class":104},[242,132384,132385,132394],{},[245,132386,132387],{},[248,132388,132389,132391],{},[251,132390,257],{"align":23718},[251,132392,132393],{"align":23718},"语义",[289,132395,132396,132403,132410,132417],{},[248,132397,132398,132400],{},[294,132399,131982],{"align":23718},[294,132401,132402],{"align":23718},"静态定位",[248,132404,132405,132407],{},[294,132406,54741],{"align":23718},[294,132408,132409],{"align":23718},"相对定位",[248,132411,132412,132414],{},[294,132413,54808],{"align":23718},[294,132415,132416],{"align":23718},"绝对定位",[248,132418,132419,132421],{},[294,132420,86210],{"align":23718},[294,132422,132423],{"align":23718},"固定定位",[40,132425,132426],{},"（1）静态定位：",[1112,132428,132429,132440],{},[51,132430,132431,132432,132435,132436,132439],{},"静态定位是元素的 ",[254,132433,132434],{},"默认定位方式"," ， ",[254,132437,132438],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[51,132441,5163],{},[85,132443,132444],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[91,132445,132446,132452,132464,132478,132492],{"__ignoreMap":14},[94,132447,132448,132450],{"class":96,"line":97},[94,132449,130377],{"class":1944},[94,132451,15554],{"class":104},[94,132453,132454,132456,132458,132460,132462],{"class":96,"line":15},[94,132455,132335],{"class":153},[94,132457,51414],{"class":104},[94,132459,54741],{"class":153},[94,132461,130392],{"class":104},[94,132463,132344],{"class":163},[94,132465,132466,132468,132470,132472,132474,132476],{"class":96,"line":1160},[94,132467,132349],{"class":153},[94,132469,51414],{"class":104},[94,132471,551],{"class":153},[94,132473,51469],{"class":100},[94,132475,132358],{"class":104},[94,132477,132361],{"class":163},[94,132479,132480,132482,132484,132486,132488,132490],{"class":96,"line":1175},[94,132481,132366],{"class":153},[94,132483,51414],{"class":104},[94,132485,805],{"class":153},[94,132487,51469],{"class":100},[94,132489,132375],{"class":104},[94,132491,132378],{"class":163},[94,132493,132494],{"class":96,"line":1181},[94,132495,1546],{"class":104},[1112,132497,132498,132501],{},[51,132499,132500],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[51,132502,132503],{},"静态定位在布局时我们几乎不用的",[40,132505,132506],{},"（2）相对定位",[1112,132508,132509,132516],{},[51,132510,132511,132512,132515],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[254,132513,132514],{},"原来的位置"," 来说的（自恋型）",[51,132517,5163],{},[85,132519,132520],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[91,132521,132522,132528,132540,132554,132568],{"__ignoreMap":14},[94,132523,132524,132526],{"class":96,"line":97},[94,132525,130377],{"class":1944},[94,132527,15554],{"class":104},[94,132529,132530,132532,132534,132536,132538],{"class":96,"line":15},[94,132531,132335],{"class":153},[94,132533,51414],{"class":104},[94,132535,54741],{"class":153},[94,132537,130392],{"class":104},[94,132539,132344],{"class":163},[94,132541,132542,132544,132546,132548,132550,132552],{"class":96,"line":1160},[94,132543,132349],{"class":153},[94,132545,51414],{"class":104},[94,132547,551],{"class":153},[94,132549,51469],{"class":100},[94,132551,132358],{"class":104},[94,132553,132361],{"class":163},[94,132555,132556,132558,132560,132562,132564,132566],{"class":96,"line":1175},[94,132557,132366],{"class":153},[94,132559,51414],{"class":104},[94,132561,805],{"class":153},[94,132563,51469],{"class":100},[94,132565,132375],{"class":104},[94,132567,132378],{"class":163},[94,132569,132570],{"class":96,"line":1181},[94,132571,1546],{"class":104},[1112,132573,132574],{},[51,132575,132576,132577,132579,132580,132582,132583,132586,132587,132590,132591,132593,132594,132597],{},"相对定位的特点：",[53693,132578],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53693,132581],{},"  ② ",[254,132584,132585],{},"原来"," 在标准流的 ",[254,132588,132589],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53693,132592],{},"  ③因此， ",[254,132595,132596],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[40,132599,132600],{},"（3）绝对定位",[1112,132602,132603,132612],{},[51,132604,132605,132607,132608,132611],{},[254,132606,132416],{}," 是元素在移动位置的时候，是相对于它 ",[254,132609,132610],{},"祖先元素"," 来说的（拼爹型）",[51,132613,5163],{},[85,132615,132616],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[91,132617,132618,132624,132636,132650,132664],{"__ignoreMap":14},[94,132619,132620,132622],{"class":96,"line":97},[94,132621,130377],{"class":1944},[94,132623,15554],{"class":104},[94,132625,132626,132628,132630,132632,132634],{"class":96,"line":15},[94,132627,132335],{"class":153},[94,132629,51414],{"class":104},[94,132631,54741],{"class":153},[94,132633,130392],{"class":104},[94,132635,132344],{"class":163},[94,132637,132638,132640,132642,132644,132646,132648],{"class":96,"line":1160},[94,132639,132349],{"class":153},[94,132641,51414],{"class":104},[94,132643,551],{"class":153},[94,132645,51469],{"class":100},[94,132647,132358],{"class":104},[94,132649,132361],{"class":163},[94,132651,132652,132654,132656,132658,132660,132662],{"class":96,"line":1175},[94,132653,132366],{"class":153},[94,132655,51414],{"class":104},[94,132657,805],{"class":153},[94,132659,51469],{"class":100},[94,132661,132375],{"class":104},[94,132663,132378],{"class":163},[94,132665,132666],{"class":96,"line":1181},[94,132667,1546],{"class":104},[1112,132669,132670,132685,132694,132697],{},[51,132671,132672,132673,132675,132676,132678,132679,132681,132682,132684],{},"绝对定位的特点：",[53693,132674],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53693,132677],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53693,132680],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53693,132683],{},"  (4)固定定位",[51,132686,132687,132689,132690,132693],{},[254,132688,132423],{}," 是元素 ",[254,132691,132692],{},"固定于浏览器可视区的位置"," 。（认死理型）",[51,132695,132696],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[51,132698,132699],{},"语法:",[85,132701,132702],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[91,132703,132704,132710,132722,132736,132750],{"__ignoreMap":14},[94,132705,132706,132708],{"class":96,"line":97},[94,132707,130377],{"class":1944},[94,132709,15554],{"class":104},[94,132711,132712,132714,132716,132718,132720],{"class":96,"line":15},[94,132713,132335],{"class":153},[94,132715,51414],{"class":104},[94,132717,54741],{"class":153},[94,132719,130392],{"class":104},[94,132721,132344],{"class":163},[94,132723,132724,132726,132728,132730,132732,132734],{"class":96,"line":1160},[94,132725,132349],{"class":153},[94,132727,51414],{"class":104},[94,132729,551],{"class":153},[94,132731,51469],{"class":100},[94,132733,132358],{"class":104},[94,132735,132361],{"class":163},[94,132737,132738,132740,132742,132744,132746,132748],{"class":96,"line":1175},[94,132739,132366],{"class":153},[94,132741,51414],{"class":104},[94,132743,805],{"class":153},[94,132745,51469],{"class":100},[94,132747,132375],{"class":104},[94,132749,132378],{"class":163},[94,132751,132752],{"class":96,"line":1181},[94,132753,1546],{"class":104},[1112,132755,132756,132765],{},[51,132757,132758,132759,132761,132762,132764],{},"特点:",[53693,132760],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53693,132763],{},"  ②固定定位不再占有原先的位置,完全脱标",[51,132766,132767,132768,132770,132771,132773,132774,132776],{},"固定在版心位置的方法:",[53693,132769],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53693,132772],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53693,132775],{},"  实例：",[85,132778,132779],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[91,132780,132781,132787,132799,132813,132827],{"__ignoreMap":14},[94,132782,132783,132785],{"class":96,"line":97},[94,132784,130377],{"class":1944},[94,132786,15554],{"class":104},[94,132788,132789,132791,132793,132795,132797],{"class":96,"line":15},[94,132790,132335],{"class":153},[94,132792,51414],{"class":104},[94,132794,54741],{"class":153},[94,132796,130392],{"class":104},[94,132798,132344],{"class":163},[94,132800,132801,132803,132805,132807,132809,132811],{"class":96,"line":1160},[94,132802,132349],{"class":153},[94,132804,51414],{"class":104},[94,132806,551],{"class":153},[94,132808,51469],{"class":100},[94,132810,132358],{"class":104},[94,132812,132361],{"class":163},[94,132814,132815,132817,132819,132821,132823,132825],{"class":96,"line":1175},[94,132816,132366],{"class":153},[94,132818,51414],{"class":104},[94,132820,805],{"class":153},[94,132822,51469],{"class":100},[94,132824,132375],{"class":104},[94,132826,132378],{"class":163},[94,132828,132829],{"class":96,"line":1181},[94,132830,1546],{"class":104},[1443,132832],{"style":126385,"src":132833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[40,132835,132836],{},"(5)粘性定位",[1112,132838,132839,132842],{},[51,132840,132841],{},"粘性定位可以被认为是相对定位和固定定位的混合",[51,132843,5163],{},[85,132845,132846],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[91,132847,132848,132854,132866,132880,132894],{"__ignoreMap":14},[94,132849,132850,132852],{"class":96,"line":97},[94,132851,130377],{"class":1944},[94,132853,15554],{"class":104},[94,132855,132856,132858,132860,132862,132864],{"class":96,"line":15},[94,132857,132335],{"class":153},[94,132859,51414],{"class":104},[94,132861,54741],{"class":153},[94,132863,130392],{"class":104},[94,132865,132344],{"class":163},[94,132867,132868,132870,132872,132874,132876,132878],{"class":96,"line":1160},[94,132869,132349],{"class":153},[94,132871,51414],{"class":104},[94,132873,551],{"class":153},[94,132875,51469],{"class":100},[94,132877,132358],{"class":104},[94,132879,132361],{"class":163},[94,132881,132882,132884,132886,132888,132890,132892],{"class":96,"line":1175},[94,132883,132366],{"class":153},[94,132885,51414],{"class":104},[94,132887,805],{"class":153},[94,132889,51469],{"class":100},[94,132891,132375],{"class":104},[94,132893,132378],{"class":163},[94,132895,132896],{"class":96,"line":1181},[94,132897,1546],{"class":104},[1112,132899,132900],{},[51,132901,132902,132903,132905,132906,132908,132909,132911,132912,132915,132916,132918],{},"粘性定位的特点：",[53693,132904],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53693,132907],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53693,132910],{},"  ③必须添加 top 、left、right、bottom ",[254,132913,132914],{},"其中一个"," 才有效",[53693,132917],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[85,132920,132921],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[91,132922,132923,132929,132941,132955,132969],{"__ignoreMap":14},[94,132924,132925,132927],{"class":96,"line":97},[94,132926,130377],{"class":1944},[94,132928,15554],{"class":104},[94,132930,132931,132933,132935,132937,132939],{"class":96,"line":15},[94,132932,132335],{"class":153},[94,132934,51414],{"class":104},[94,132936,54741],{"class":153},[94,132938,130392],{"class":104},[94,132940,132344],{"class":163},[94,132942,132943,132945,132947,132949,132951,132953],{"class":96,"line":1160},[94,132944,132349],{"class":153},[94,132946,51414],{"class":104},[94,132948,551],{"class":153},[94,132950,51469],{"class":100},[94,132952,132358],{"class":104},[94,132954,132361],{"class":163},[94,132956,132957,132959,132961,132963,132965,132967],{"class":96,"line":1175},[94,132958,132366],{"class":153},[94,132960,51414],{"class":104},[94,132962,805],{"class":153},[94,132964,51469],{"class":100},[94,132966,132375],{"class":104},[94,132968,132378],{"class":163},[94,132970,132971],{"class":96,"line":1181},[94,132972,1546],{"class":104},[1443,132974],{"style":126385,"src":132975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[40,132977,132978],{},"(6)总结",[242,132980,132981,132996],{},[245,132982,132983],{},[248,132984,132985,132987,132990,132993],{},[251,132986,132319],{"align":23718},[251,132988,132989],{"align":23718},"是否脱标",[251,132991,132992],{"align":23718},"移动位置",[251,132994,132995],{"align":23718},"是否常用",[289,132997,132998,133011,133025,133039,133052],{},[248,132999,133000,133003,133005,133008],{},[294,133001,133002],{"align":23718},"Static 静态定位",[294,133004,104655],{"align":23718},[294,133006,133007],{"align":23718},"不能使用边偏移",[294,133009,133010],{"align":23718},"很少",[248,133012,133013,133016,133019,133022],{},[294,133014,133015],{"align":23718},"Relative 相对定位",[294,133017,133018],{"align":23718},"否(占有位置)",[294,133020,133021],{"align":23718},"相对于自身位置移动",[294,133023,133024],{"align":23718},"基本单独使用",[248,133026,133027,133030,133033,133036],{},[294,133028,133029],{"align":23718},"Absolute 绝对定位",[294,133031,133032],{"align":23718},"是(不占有位置)",[294,133034,133035],{"align":23718},"带有定位的父级",[294,133037,133038],{"align":23718},"要和定位父级元素搭配使用",[248,133040,133041,133044,133046,133049],{},[294,133042,133043],{"align":23718},"Fixed 固定定位",[294,133045,133032],{"align":23718},[294,133047,133048],{"align":23718},"浏览器可视区",[294,133050,133051],{"align":23718},"单独使用,不需要父级",[248,133053,133054,133057,133059,133061],{},[294,133055,133056],{"align":23718},"Sticky 粘性定位",[294,133058,133018],{"align":23718},[294,133060,133048],{"align":23718},[294,133062,133063],{"align":23718},"当前阶段少",[48,133065,133066],{"start":15},[51,133067,133068,133071],{},[254,133069,133070],{},"边偏移"," 则决定了该元素的最终位置",[242,133073,133074,133085],{},[245,133075,133076],{},[248,133077,133078,133081,133083],{},[251,133079,133080],{"align":23718},"边偏移属性",[251,133082,27475],{"align":23718},[251,133084,27472],{"align":23718},[289,133086,133087,133098,133109,133119],{},[248,133088,133089,133092,133095],{},[294,133090,133091],{"align":23718},"top",[294,133093,133094],{"align":23718},"top: 80px;",[294,133096,133097],{"align":23718},"顶端偏移量，定义元素相对于父元素上边线的距离",[248,133099,133100,133103,133106],{},[294,133101,133102],{"align":23718},"bottom",[294,133104,133105],{"align":23718},"bottom: 80px ;",[294,133107,133108],{"align":23718},"底部偏移量，定义元素相对于其父元素下边线的距离",[248,133110,133111,133113,133116],{},[294,133112,23718],{"align":23718},[294,133114,133115],{"align":23718},"left: 80px ;",[294,133117,133118],{"align":23718},"左侧偏移量，定义元素相对于其父元素左边线的距离",[248,133120,133121,133123,133126],{},[294,133122,72499],{"align":23718},[294,133124,133125],{"align":23718},"right: 80px ;",[294,133127,133128],{"align":23718},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1112,133130,133131],{},[51,133132,9007,133133,133135,133136,133138,133139,133141,133142,133145,133146,133148,133149,133151],{},[53693,133134],{},"  ① ",[254,133137,133070],{}," 需要和 ",[254,133140,132319],{}," 联合使用， ",[254,133143,133144],{},"单独使用无效"," ；",[53693,133147],{},"  ②top和bottom不要同时使用",[53693,133150],{},"  ③left和right不要同时使用",[21980,133153,133155],{"id":133154},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[40,133157,133158],{},"子级是绝对定位的话，父级要用相对定位",[1112,133160,133161,133164,133167,133170],{},[51,133162,133163],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[51,133165,133166],{},"父盒子需要加定位限制子盒子在父盒子内显示",[51,133168,133169],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[51,133171,133172,133173,133176],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[254,133174,133175],{},"子绝父绝"," 也会遇到",[21980,133178,133180],{"id":133179},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1112,133182,133183,133198],{},[51,133184,133185,133186,133189,133190,133193,133194,133197],{},"在使用 ",[254,133187,133188],{},"定位"," 布局时，可能会 ",[254,133191,133192],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[254,133195,133196],{},"z-index"," 来控制盒子的前后次序 (z轴)",[51,133199,5163],{},[85,133201,133202],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[91,133203,133204,133210,133222,133236,133250],{"__ignoreMap":14},[94,133205,133206,133208],{"class":96,"line":97},[94,133207,130377],{"class":1944},[94,133209,15554],{"class":104},[94,133211,133212,133214,133216,133218,133220],{"class":96,"line":15},[94,133213,132335],{"class":153},[94,133215,51414],{"class":104},[94,133217,54741],{"class":153},[94,133219,130392],{"class":104},[94,133221,132344],{"class":163},[94,133223,133224,133226,133228,133230,133232,133234],{"class":96,"line":1160},[94,133225,132349],{"class":153},[94,133227,51414],{"class":104},[94,133229,551],{"class":153},[94,133231,51469],{"class":100},[94,133233,132358],{"class":104},[94,133235,132361],{"class":163},[94,133237,133238,133240,133242,133244,133246,133248],{"class":96,"line":1175},[94,133239,132366],{"class":153},[94,133241,51414],{"class":104},[94,133243,805],{"class":153},[94,133245,51469],{"class":100},[94,133247,132375],{"class":104},[94,133249,132378],{"class":163},[94,133251,133252],{"class":96,"line":1181},[94,133253,1546],{"class":104},[1112,133255,133256],{},[51,133257,133258,133259,133135,133261,133263,133264,127692,133267,82516,133270,133272,133273,133275,133276,133279,133280,133145,133283,133285,133286,133289,133291],{},"z-index的特性",[53693,133260],{},[254,133262,126993],{}," ： ",[254,133265,133266],{},"正整数",[254,133268,133269],{},"负整数",[254,133271,296],{}," ，默认值是 0，数值越大，盒子越靠上；",[53693,133274],{},"  ②如果 ",[254,133277,133278],{},"属性值相同"," ，则按照书写顺序， ",[254,133281,133282],{},"后来居上",[53693,133284],{},"  ③数字后面 ",[254,133287,133288],{},"不能加单位",[53693,133290],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[21980,133293,133295],{"id":133294},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[40,133297,133298],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[40,133300,133301],{},"方法:",[1112,133303,133304,133314],{},[51,133305,133306,133307,133310,133311],{},"left: 50%; 让 ",[254,133308,133309],{},"盒子的左侧"," 移动到 ",[254,133312,133313],{},"父级元素的水平中心位置",[51,133315,133316,133317,133320,133321],{},"margin-left: -100px; 让盒子 ",[254,133318,133319],{},"向左"," 移动 ",[254,133322,133323],{},"自身宽度的一半",[21980,133325,133327],{"id":133326},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[48,133329,133330,133333],{},[51,133331,133332],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[51,133334,133335],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[40,133337,133338],{},"也就是说绝对定位和固定定位和浮动类似",[48,133340,133341],{"start":1160},[51,133342,133343],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1112,133345,133346,133349,133352],{},[51,133347,133348],{},"可以用inline-block 转换为行内块",[51,133350,133351],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[51,133353,133354],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[40,133356,133357],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[21980,133359,133361],{"id":133360},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[48,133363,133364,133367,133370,133373],{},[51,133365,133366],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[51,133368,133369],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[51,133371,133372],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[51,133374,133375],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[85,133377,133378],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[91,133379,133380,133386,133396,133400,133406,133416],{"__ignoreMap":14},[94,133381,133382,133384],{"class":96,"line":97},[94,133383,131002],{"class":1944},[94,133385,15554],{"class":104},[94,133387,133388,133390,133392,133394],{"class":96,"line":15},[94,133389,131009],{"class":153},[94,133391,51414],{"class":104},[94,133393,23718],{"class":153},[94,133395,1271],{"class":104},[94,133397,133398],{"class":96,"line":1160},[94,133399,1546],{"class":104},[94,133401,133402,133404],{"class":96,"line":1175},[94,133403,131024],{"class":1944},[94,133405,15554],{"class":104},[94,133407,133408,133410,133412,133414],{"class":96,"line":1181},[94,133409,131009],{"class":153},[94,133411,51414],{"class":104},[94,133413,72499],{"class":153},[94,133415,1271],{"class":104},[94,133417,133418],{"class":96,"line":1195},[94,133419,1546],{"class":104},[1443,133421],{"style":126385,"src":133422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[21980,133424,133426],{"id":133425},"_11138-轮播图","11.1.3.8 轮播图",[1443,133428],{"style":126385,"src":133429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[48,133431,133432],{},[51,133433,133434],{},"制作顺序:",[1112,133436,133437,133440,133443,133452],{},[51,133438,133439],{},"大盒子我们类名为： tb-promo 淘宝广告",[51,133441,133442],{},"里面先放一张图片",[51,133444,133445,133446,133448,133449,133451],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53693,133447],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53693,133450],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[51,133453,133454,133455,133457,133458,133460],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53693,133456],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53693,133459],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[48,133462,133463],{"start":15},[51,133464,133465],{},"代码模块",[85,133467,133469],{"className":126529,"code":133468,"language":126531,"meta":14,"style":14},"\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",[91,133470,133471,133476,133483,133493,133503,133513,133517,133522,133529,133539],{"__ignoreMap":14},[94,133472,133473],{"class":96,"line":97},[94,133474,133475],{"class":163},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[94,133477,133478,133481],{"class":96,"line":15},[94,133479,133480],{"class":1944},".son",[94,133482,15554],{"class":104},[94,133484,133485,133487,133489,133491],{"class":96,"line":1160},[94,133486,132335],{"class":153},[94,133488,51414],{"class":104},[94,133490,54808],{"class":153},[94,133492,1271],{"class":104},[94,133494,133495,133497,133499,133501],{"class":96,"line":1175},[94,133496,132349],{"class":153},[94,133498,51414],{"class":104},[94,133500,296],{"class":153},[94,133502,1271],{"class":104},[94,133504,133505,133507,133509,133511],{"class":96,"line":1181},[94,133506,132366],{"class":153},[94,133508,51414],{"class":104},[94,133510,296],{"class":153},[94,133512,1271],{"class":104},[94,133514,133515],{"class":96,"line":1195},[94,133516,1546],{"class":104},[94,133518,133519],{"class":96,"line":1201},[94,133520,133521],{"class":163},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[94,133523,133524,133527],{"class":96,"line":1292},[94,133525,133526],{"class":1944},".father",[94,133528,15554],{"class":104},[94,133530,133531,133533,133535,133537],{"class":96,"line":1298},[94,133532,132335],{"class":153},[94,133534,51414],{"class":104},[94,133536,54741],{"class":153},[94,133538,1271],{"class":104},[94,133540,133541],{"class":96,"line":1310},[94,133542,1546],{"class":104},[40,133544,133545],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[65,133547,133549],{"id":133548},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1443,133551],{"style":126385,"src":133552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[40,133554,133555],{},"✨ 黄金口诀：",[40,133557,133558],{},"\"TOP正下负上，LEFT正右负左\"",[40,133560,133561],{},"\"RIGHT正左负右，BOTTOM正上负下",[40,133563,133564],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[40,133566,133567],{},"✨ 简单记：",[40,133569,133570],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5108,133572,133573],{},"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":14,"searchDepth":15,"depth":15,"links":133575},[133576],{"id":132103,"depth":15,"text":132104,"children":133577},[133578,133579,133580,133581],{"id":132107,"depth":1160,"text":132108},{"id":132122,"depth":1160,"text":132123},{"id":132290,"depth":1160,"text":132291},{"id":133548,"depth":1160,"text":133549},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132095,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133588,"title":133589,"body":133590,"description":17,"extension":18,"meta":135013,"navigation":20,"path":135014,"seo":135015,"stem":135016,"__hash__":135017},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133591,"toc":134992},[133592,133595,133599,133607,133611,133616,133624,133636,133640,133645,133653,133664,133668,133673,133714,133722,133726,133729,133732,133735,133829,133832,133926,133929,134023,134026,134029,134064,134067,134070,134100,134103,134106,134109,134112,134115,134118,134121,134191,134194,134198,134202,134243,134247,134253,134256,134259,134263,134266,134269,134272,134353,134356,134359,134363,134367,134370,134373,134376,134379,134382,134388,134397,134401,134420,134424,134434,134437,134440,134443,134446,134449,134452,134455,134458,134467,134471,134480,134483,134488,134541,134546,134712,134715,134718,134723,134726,134729,134732,134735,134740,134888,134891,134894,134899,134902,134907,134941,134944,134947,134951,134954,134961,134964,134967,134970,134973,134976,134979,134982,134986,134989],[10,133593,133589],{"id":133594},"_12-显示隐藏与图形资源",[35,133596,133598],{"id":133597},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1112,133600,133601,133604],{},[51,133602,133603],{},"目的:让一个元素在页面中消失或者显示出来",[51,133605,133606],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[65,133608,133610],{"id":133609},"_1211-display-显示","12.1.1 display 显示",[48,133612,133613],{},[51,133614,133615],{},"display 设置或检索对象是否及如何显示",[1112,133617,133618,133621],{},[51,133619,133620],{},"display: none;隐藏对象",[51,133622,133623],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[48,133625,133626,133633],{"start":15},[51,133627,133628,133629,133632],{},"特点： display 隐藏元素后， ",[254,133630,133631],{},"不再占"," 有原来的位置",[51,133634,133635],{},"在js中使用非常的广泛",[65,133637,133639],{"id":133638},"_1212-visibility可见性","12.1.2 visibility可见性",[48,133641,133642],{},[51,133643,133644],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1112,133646,133647,133650],{},[51,133648,133649],{},"visibility： visible；元素可见",[51,133651,133652],{},"visibility：hidden；元素隐藏",[48,133654,133655,133658,133661],{"start":15},[51,133656,133657],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[51,133659,133660],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[51,133662,133663],{},"隐藏后继续占有原有位置",[65,133665,133667],{"id":133666},"_1213-overflow溢出","12.1.3 overflow溢出",[1112,133669,133670],{},[51,133671,133672],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[242,133674,133675,133683],{},[245,133676,133677],{},[248,133678,133679,133681],{},[251,133680,126993],{"align":23718},[251,133682,27472],{"align":23718},[289,133684,133685,133693,133700,133707],{},[248,133686,133687,133690],{},[294,133688,133689],{"align":23718},"visible",[294,133691,133692],{"align":23718},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[248,133694,133695,133697],{},[294,133696,61691],{"align":23718},[294,133698,133699],{"align":23718},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[248,133701,133702,133704],{},[294,133703,128949],{"align":23718},[294,133705,133706],{"align":23718},"不管超出内容否，总是显示滚动条",[248,133708,133709,133711],{},[294,133710,72640],{"align":23718},[294,133712,133713],{"align":23718},"超出自动显示滚动条，不超出不显示滚动条",[1112,133715,133716,133719],{},[51,133717,133718],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[51,133720,133721],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[65,133723,133725],{"id":133724},"_1214-案例收获","12.1.4 案例收获",[1443,133727],{"style":126385,"src":133728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[40,133730,133731],{},"问题：没做出来动态效果，使用hover没实现",[40,133733,133734],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[85,133736,133737],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},[91,133738,133739,133743,133757,133761,133775,133779,133793,133797,133811,133815],{"__ignoreMap":14},[94,133740,133741],{"class":96,"line":97},[94,133742,131968],{"class":163},[94,133744,133745,133747,133749,133751,133753,133755],{"class":96,"line":15},[94,133746,131973],{"class":1944},[94,133748,79784],{"class":104},[94,133750,128889],{"class":153},[94,133752,51414],{"class":104},[94,133754,131982],{"class":153},[94,133756,129459],{"class":104},[94,133758,133759],{"class":96,"line":1160},[94,133760,131989],{"class":163},[94,133762,133763,133765,133767,133769,133771,133773],{"class":96,"line":1175},[94,133764,131994],{"class":1944},[94,133766,79784],{"class":104},[94,133768,128889],{"class":153},[94,133770,51414],{"class":104},[94,133772,54741],{"class":153},[94,133774,129459],{"class":104},[94,133776,133777],{"class":96,"line":1181},[94,133778,132009],{"class":163},[94,133780,133781,133783,133785,133787,133789,133791],{"class":96,"line":1195},[94,133782,132014],{"class":1944},[94,133784,79784],{"class":104},[94,133786,128889],{"class":153},[94,133788,51414],{"class":104},[94,133790,54808],{"class":153},[94,133792,129459],{"class":104},[94,133794,133795],{"class":96,"line":1201},[94,133796,132029],{"class":163},[94,133798,133799,133801,133803,133805,133807,133809],{"class":96,"line":1292},[94,133800,132034],{"class":1944},[94,133802,79784],{"class":104},[94,133804,128889],{"class":153},[94,133806,51414],{"class":104},[94,133808,86210],{"class":153},[94,133810,129459],{"class":104},[94,133812,133813],{"class":96,"line":1298},[94,133814,132049],{"class":163},[94,133816,133817,133819,133821,133823,133825,133827],{"class":96,"line":1310},[94,133818,132054],{"class":1944},[94,133820,79784],{"class":104},[94,133822,128889],{"class":153},[94,133824,51414],{"class":104},[94,133826,132063],{"class":153},[94,133828,129459],{"class":104},[40,133830,133831],{},"完整代码：",[85,133833,133834],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},[91,133835,133836,133840,133854,133858,133872,133876,133890,133894,133908,133912],{"__ignoreMap":14},[94,133837,133838],{"class":96,"line":97},[94,133839,131968],{"class":163},[94,133841,133842,133844,133846,133848,133850,133852],{"class":96,"line":15},[94,133843,131973],{"class":1944},[94,133845,79784],{"class":104},[94,133847,128889],{"class":153},[94,133849,51414],{"class":104},[94,133851,131982],{"class":153},[94,133853,129459],{"class":104},[94,133855,133856],{"class":96,"line":1160},[94,133857,131989],{"class":163},[94,133859,133860,133862,133864,133866,133868,133870],{"class":96,"line":1175},[94,133861,131994],{"class":1944},[94,133863,79784],{"class":104},[94,133865,128889],{"class":153},[94,133867,51414],{"class":104},[94,133869,54741],{"class":153},[94,133871,129459],{"class":104},[94,133873,133874],{"class":96,"line":1181},[94,133875,132009],{"class":163},[94,133877,133878,133880,133882,133884,133886,133888],{"class":96,"line":1195},[94,133879,132014],{"class":1944},[94,133881,79784],{"class":104},[94,133883,128889],{"class":153},[94,133885,51414],{"class":104},[94,133887,54808],{"class":153},[94,133889,129459],{"class":104},[94,133891,133892],{"class":96,"line":1201},[94,133893,132029],{"class":163},[94,133895,133896,133898,133900,133902,133904,133906],{"class":96,"line":1292},[94,133897,132034],{"class":1944},[94,133899,79784],{"class":104},[94,133901,128889],{"class":153},[94,133903,51414],{"class":104},[94,133905,86210],{"class":153},[94,133907,129459],{"class":104},[94,133909,133910],{"class":96,"line":1298},[94,133911,132049],{"class":163},[94,133913,133914,133916,133918,133920,133922,133924],{"class":96,"line":1310},[94,133915,132054],{"class":1944},[94,133917,79784],{"class":104},[94,133919,128889],{"class":153},[94,133921,51414],{"class":104},[94,133923,132063],{"class":153},[94,133925,129459],{"class":104},[40,133927,133928],{},"分布思路重点详解：",[85,133930,133931],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},[91,133932,133933,133937,133951,133955,133969,133973,133987,133991,134005,134009],{"__ignoreMap":14},[94,133934,133935],{"class":96,"line":97},[94,133936,131968],{"class":163},[94,133938,133939,133941,133943,133945,133947,133949],{"class":96,"line":15},[94,133940,131973],{"class":1944},[94,133942,79784],{"class":104},[94,133944,128889],{"class":153},[94,133946,51414],{"class":104},[94,133948,131982],{"class":153},[94,133950,129459],{"class":104},[94,133952,133953],{"class":96,"line":1160},[94,133954,131989],{"class":163},[94,133956,133957,133959,133961,133963,133965,133967],{"class":96,"line":1175},[94,133958,131994],{"class":1944},[94,133960,79784],{"class":104},[94,133962,128889],{"class":153},[94,133964,51414],{"class":104},[94,133966,54741],{"class":153},[94,133968,129459],{"class":104},[94,133970,133971],{"class":96,"line":1181},[94,133972,132009],{"class":163},[94,133974,133975,133977,133979,133981,133983,133985],{"class":96,"line":1195},[94,133976,132014],{"class":1944},[94,133978,79784],{"class":104},[94,133980,128889],{"class":153},[94,133982,51414],{"class":104},[94,133984,54808],{"class":153},[94,133986,129459],{"class":104},[94,133988,133989],{"class":96,"line":1201},[94,133990,132029],{"class":163},[94,133992,133993,133995,133997,133999,134001,134003],{"class":96,"line":1292},[94,133994,132034],{"class":1944},[94,133996,79784],{"class":104},[94,133998,128889],{"class":153},[94,134000,51414],{"class":104},[94,134002,86210],{"class":153},[94,134004,129459],{"class":104},[94,134006,134007],{"class":96,"line":1298},[94,134008,132049],{"class":163},[94,134010,134011,134013,134015,134017,134019,134021],{"class":96,"line":1310},[94,134012,132054],{"class":1944},[94,134014,79784],{"class":104},[94,134016,128889],{"class":153},[94,134018,51414],{"class":104},[94,134020,132063],{"class":153},[94,134022,129459],{"class":104},[1443,134024],{"style":126385,"src":134025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[40,134027,134028],{},"图片太大，盒子太小，此时需要修改图片的大小",[85,134030,134032],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[91,134033,134034],{"__ignoreMap":14},[94,134035,134036,134038,134040,134042,134044,134047,134049,134051,134054,134057,134059,134062],{"class":96,"line":97},[94,134037,1015],{"class":104},[94,134039,1443],{"class":51277},[94,134041,55216],{"class":1944},[94,134043,150],{"class":104},[94,134045,134046],{"class":209},"\"images\u002Fpic.jpg\"",[94,134048,55224],{"class":1944},[94,134050,150],{"class":104},[94,134052,134053],{"class":209},"\"描述文字\"",[94,134055,134056],{"class":1944}," title",[94,134058,150],{"class":104},[94,134060,134061],{"class":209},"\"悬停提示\"",[94,134063,51284],{"class":104},[1443,134065],{"style":126385,"src":134066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[40,134068,134069],{},"制造遮罩层",[85,134071,134072],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[91,134073,134074],{"__ignoreMap":14},[94,134075,134076,134078,134080,134082,134084,134086,134088,134090,134092,134094,134096,134098],{"class":96,"line":97},[94,134077,1015],{"class":104},[94,134079,1443],{"class":51277},[94,134081,55216],{"class":1944},[94,134083,150],{"class":104},[94,134085,134046],{"class":209},[94,134087,55224],{"class":1944},[94,134089,150],{"class":104},[94,134091,134053],{"class":209},[94,134093,134056],{"class":1944},[94,134095,150],{"class":104},[94,134097,134061],{"class":209},[94,134099,51284],{"class":104},[40,134101,134102],{},"此时是这样的为标准流",[1443,134104],{"style":126385,"src":134105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[40,134107,134108],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[40,134110,134111],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[40,134113,134114],{},"让他在中间，用center(background-position)",[40,134116,134117],{},"将需要变的尽可能放到一个盒子中",[40,134119,134120],{},"放大盒子上内部盒子发生变化",[85,134122,134124],{"className":126529,"code":134123,"language":126531,"meta":14,"style":14},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[91,134125,134126,134132,134142,134146,134153,134163,134175,134187],{"__ignoreMap":14},[94,134127,134128,134130],{"class":96,"line":97},[94,134129,127596],{"class":1944},[94,134131,15554],{"class":104},[94,134133,134134,134136,134138,134140],{"class":96,"line":15},[94,134135,132335],{"class":153},[94,134137,51414],{"class":104},[94,134139,54741],{"class":153},[94,134141,1271],{"class":104},[94,134143,134144],{"class":96,"line":1160},[94,134145,1546],{"class":104},[94,134147,134148,134151],{"class":96,"line":1175},[94,134149,134150],{"class":1944},".child",[94,134152,15554],{"class":104},[94,134154,134155,134157,134159,134161],{"class":96,"line":1181},[94,134156,132335],{"class":153},[94,134158,51414],{"class":104},[94,134160,54808],{"class":153},[94,134162,1271],{"class":104},[94,134164,134165,134167,134169,134171,134173],{"class":96,"line":1195},[94,134166,132349],{"class":153},[94,134168,51414],{"class":104},[94,134170,761],{"class":153},[94,134172,433],{"class":100},[94,134174,1271],{"class":104},[94,134176,134177,134179,134181,134183,134185],{"class":96,"line":1201},[94,134178,132366],{"class":153},[94,134180,51414],{"class":104},[94,134182,761],{"class":153},[94,134184,433],{"class":100},[94,134186,1271],{"class":104},[94,134188,134189],{"class":96,"line":1292},[94,134190,1546],{"class":104},[40,134192,134193],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[35,134195,134197],{"id":134196},"_122-精灵图","12.2 精灵图",[65,134199,134201],{"id":134200},"_1221-理解","12.2.1 理解",[48,134203,134204,134222],{},[51,134205,134206,134207,132435,134210,134213,134214,134217,134218,134221],{},"目的： ",[254,134208,134209],{},"为了有效地减少服务器接收和发送请求的次数",[254,134211,134212],{},"提高"," 页面的 ",[254,134215,134216],{},"加载速度"," ，出现了 ",[254,134219,134220],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[51,134223,134224,134225,134227,134228,134230,134231,134233,134234,134236,134237,134239,134240,134242],{},"使用精灵图核心：",[53693,134226],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53693,134229],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53693,134232],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53693,134235],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53693,134238],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53693,134241],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[65,134244,134246],{"id":134245},"_1222-扒图","12.2.2 扒图",[85,134248,134251],{"className":134249,"code":134250,"language":5169},[5167],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[91,134252,134250],{"__ignoreMap":14},[1443,134254],{"style":126385,"src":134255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1443,134257],{"style":126385,"src":134258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[65,134260,134262],{"id":134261},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1443,134264],{"style":126385,"src":134265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[40,134267,134268],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1443,134270],{"style":126385,"src":134271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[85,134273,134275],{"className":126529,"code":134274,"language":126531,"meta":14,"style":14},"\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",[91,134276,134277,134282,134289,134301,134313,134332,134349],{"__ignoreMap":14},[94,134278,134279],{"class":96,"line":97},[94,134280,134281],{"class":163},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[94,134283,134284,134287],{"class":96,"line":15},[94,134285,134286],{"class":1944},".icon",[94,134288,15554],{"class":104},[94,134290,134291,134293,134295,134297,134299],{"class":96,"line":1160},[94,134292,70545],{"class":153},[94,134294,51414],{"class":104},[94,134296,805],{"class":153},[94,134298,51469],{"class":100},[94,134300,1271],{"class":104},[94,134302,134303,134305,134307,134309,134311],{"class":96,"line":1175},[94,134304,70765],{"class":153},[94,134306,51414],{"class":104},[94,134308,805],{"class":153},[94,134310,51469],{"class":100},[94,134312,1271],{"class":104},[94,134314,134315,134317,134319,134321,134323,134326,134328,134330],{"class":96,"line":1181},[94,134316,70588],{"class":153},[94,134318,51414],{"class":104},[94,134320,61703],{"class":153},[94,134322,105],{"class":104},[94,134324,134325],{"class":5198},"sprites.png",[94,134327,13696],{"class":104},[94,134329,61713],{"class":153},[94,134331,1271],{"class":104},[94,134333,134334,134336,134338,134340,134342,134345,134347],{"class":96,"line":1195},[94,134335,128789],{"class":153},[94,134337,51414],{"class":104},[94,134339,51740],{"class":153},[94,134341,51469],{"class":100},[94,134343,134344],{"class":153}," -20",[94,134346,51469],{"class":100},[94,134348,1271],{"class":104},[94,134350,134351],{"class":96,"line":1201},[94,134352,1546],{"class":104},[1443,134354],{"style":126385,"src":134355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[40,134357,134358],{},"在前端中坐标轴的正方向是右和下",[35,134360,134362],{"id":134361},"_123-字体图标","12.3 字体图标",[65,134364,134366],{"id":134365},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[40,134368,134369],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[40,134371,134372],{},"精灵图是有诸多优点的，但是缺点很明显。",[40,134374,134375],{},"1.图片文件还是比较大的。",[40,134377,134378],{},"2.图片本身放大和缩小会失真。",[40,134380,134381],{},"3.一旦图片制作完毕想要更换非常复杂。",[40,134383,134384,134385,25723],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[254,134386,134387],{},"字体图标 iconfont",[40,134389,134390,134393,134394,28368],{},[254,134391,134392],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[254,134395,134396],{},"展示的是图标，本质属于字体",[65,134398,134400],{"id":134399},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1112,134402,134403,134408,134411,134414,134417],{},[51,134404,134405,134407],{},[254,134406,25859],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[51,134409,134410],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[51,134412,134413],{},"兼容性：几乎支持所有的浏览器，请放心使用",[51,134415,134416],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[51,134418,134419],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[65,134421,134423],{"id":134422},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1112,134425,134426],{},[51,134427,134428,134429],{},"icomoon字体库：",[343,134430,134433],{"href":134431,"rel":134432},"http:\u002F\u002Ficomoon.io\u002F",[23847],"http:\u002F\u002Ficomoon.io",[40,134435,134436],{},"进去之后点icomoon app",[1443,134438],{"style":126385,"src":134439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[40,134441,134442],{},"可以对其编辑：",[1443,134444],{"style":126385,"src":134445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[40,134447,134448],{},"生成字体：",[1443,134450],{"style":126385,"src":134451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[40,134453,134454],{},"下载：",[1443,134456],{"style":126385,"src":134457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1112,134459,134460],{},[51,134461,134462,134463],{},"阿里iconfont字体库： ",[343,134464,134465],{"href":134465,"rel":134466},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23847],[65,134468,134470],{"id":134469},"_1234-字体图标的引入","12.3.4 字体图标的引入",[48,134472,134473],{},[51,134474,134475,134476,134479],{},"把下载包里面的 ",[254,134477,134478],{},"fonts"," 文件夹放入页面根目录下",[1443,134481],{"style":126385,"src":134482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[48,134484,134485],{"start":15},[51,134486,134487],{},"字体文件格式",[242,134489,134490,134499],{},[245,134491,134492],{},[248,134493,134494,134497],{},[251,134495,134496],{"align":23718},"格式",[251,134498,23722],{"align":23718},[289,134500,134501,134511,134521,134531],{},[248,134502,134503,134508],{},[294,134504,134505],{"align":23718},[254,134506,134507],{},".ttf",[294,134509,134510],{"align":23718},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[248,134512,134513,134518],{},[294,134514,134515],{"align":23718},[254,134516,134517],{},".woff",[294,134519,134520],{"align":23718},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[248,134522,134523,134528],{},[294,134524,134525],{"align":23718},[254,134526,134527],{},".eot",[294,134529,134530],{"align":23718},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[248,134532,134533,134538],{},[294,134534,134535],{"align":23718},[254,134536,134537],{},"svg",[294,134539,134540],{"align":23718},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[48,134542,134543],{"start":1160},[51,134544,134545],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[85,134547,134549],{"className":126529,"code":134548,"language":126531,"meta":14,"style":14},"\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",[91,134550,134551,134556,134563,134575,134591,134616,134637,134657,134677,134681,134687,134697,134708],{"__ignoreMap":14},[94,134552,134553],{"class":96,"line":97},[94,134554,134555],{"class":163},"\u002F* 引入字体图标 *\u002F\n",[94,134557,134558,134561],{"class":96,"line":15},[94,134559,134560],{"class":100},"@font-face",[94,134562,15554],{"class":104},[94,134564,134565,134568,134570,134573],{"class":96,"line":1160},[94,134566,134567],{"class":153},"  font-family",[94,134569,51414],{"class":104},[94,134571,134572],{"class":209},"'icomoon'",[94,134574,1271],{"class":104},[94,134576,134577,134580,134582,134584,134586,134589],{"class":96,"line":1175},[94,134578,134579],{"class":153},"  src",[94,134581,51414],{"class":104},[94,134583,61703],{"class":153},[94,134585,105],{"class":104},[94,134587,134588],{"class":209},"'fonts\u002Ficomoon.eot'",[94,134590,2700],{"class":104},[94,134592,134593,134595,134597,134599,134601,134604,134606,134609,134611,134614],{"class":96,"line":1181},[94,134594,134579],{"class":153},[94,134596,51414],{"class":104},[94,134598,61703],{"class":153},[94,134600,105],{"class":104},[94,134602,134603],{"class":209},"'fonts\u002Ficomoon.eot?#iefix'",[94,134605,13696],{"class":104},[94,134607,134608],{"class":153},"format",[94,134610,105],{"class":104},[94,134612,134613],{"class":209},"'embedded-opentype'",[94,134615,38030],{"class":104},[94,134617,134618,134621,134623,134626,134628,134630,134632,134635],{"class":96,"line":1195},[94,134619,134620],{"class":153},"       url",[94,134622,105],{"class":104},[94,134624,134625],{"class":209},"'fonts\u002Ficomoon.woff'",[94,134627,13696],{"class":104},[94,134629,134608],{"class":153},[94,134631,105],{"class":104},[94,134633,134634],{"class":209},"'woff'",[94,134636,38030],{"class":104},[94,134638,134639,134641,134643,134646,134648,134650,134652,134655],{"class":96,"line":1201},[94,134640,134620],{"class":153},[94,134642,105],{"class":104},[94,134644,134645],{"class":209},"'fonts\u002Ficomoon.ttf'",[94,134647,13696],{"class":104},[94,134649,134608],{"class":153},[94,134651,105],{"class":104},[94,134653,134654],{"class":209},"'truetype'",[94,134656,38030],{"class":104},[94,134658,134659,134661,134663,134666,134668,134670,134672,134675],{"class":96,"line":1292},[94,134660,134620],{"class":153},[94,134662,105],{"class":104},[94,134664,134665],{"class":209},"'fonts\u002Ficomoon.svg#icomoon'",[94,134667,13696],{"class":104},[94,134669,134608],{"class":153},[94,134671,105],{"class":104},[94,134673,134674],{"class":209},"'svg'",[94,134676,2700],{"class":104},[94,134678,134679],{"class":96,"line":1298},[94,134680,1546],{"class":104},[94,134682,134683,134685],{"class":96,"line":1310},[94,134684,134286],{"class":1944},[94,134686,15554],{"class":104},[94,134688,134689,134691,134693,134695],{"class":96,"line":1593},[94,134690,134567],{"class":153},[94,134692,51414],{"class":104},[94,134694,134572],{"class":209},[94,134696,1271],{"class":104},[94,134698,134699,134702,134704,134706],{"class":96,"line":1598},[94,134700,134701],{"class":153},"  font-style",[94,134703,51414],{"class":104},[94,134705,63818],{"class":153},[94,134707,1271],{"class":104},[94,134709,134710],{"class":96,"line":1604},[94,134711,1546],{"class":104},[40,134713,134714],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1443,134716],{"style":126385,"src":134717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[48,134719,134720],{"start":1175},[51,134721,134722],{},"添加字体",[1443,134724],{"style":126385,"src":134725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[40,134727,134728],{},"复制：",[1443,134730],{"style":126385,"src":134731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[40,134733,134734],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[48,134736,134737],{"start":1181},[51,134738,134739],{},"代码展示：",[85,134741,134742],{"className":126529,"code":134548,"language":126531,"meta":14,"style":14},[91,134743,134744,134748,134754,134764,134778,134800,134818,134836,134854,134858,134864,134874,134884],{"__ignoreMap":14},[94,134745,134746],{"class":96,"line":97},[94,134747,134555],{"class":163},[94,134749,134750,134752],{"class":96,"line":15},[94,134751,134560],{"class":100},[94,134753,15554],{"class":104},[94,134755,134756,134758,134760,134762],{"class":96,"line":1160},[94,134757,134567],{"class":153},[94,134759,51414],{"class":104},[94,134761,134572],{"class":209},[94,134763,1271],{"class":104},[94,134765,134766,134768,134770,134772,134774,134776],{"class":96,"line":1175},[94,134767,134579],{"class":153},[94,134769,51414],{"class":104},[94,134771,61703],{"class":153},[94,134773,105],{"class":104},[94,134775,134588],{"class":209},[94,134777,2700],{"class":104},[94,134779,134780,134782,134784,134786,134788,134790,134792,134794,134796,134798],{"class":96,"line":1181},[94,134781,134579],{"class":153},[94,134783,51414],{"class":104},[94,134785,61703],{"class":153},[94,134787,105],{"class":104},[94,134789,134603],{"class":209},[94,134791,13696],{"class":104},[94,134793,134608],{"class":153},[94,134795,105],{"class":104},[94,134797,134613],{"class":209},[94,134799,38030],{"class":104},[94,134801,134802,134804,134806,134808,134810,134812,134814,134816],{"class":96,"line":1195},[94,134803,134620],{"class":153},[94,134805,105],{"class":104},[94,134807,134625],{"class":209},[94,134809,13696],{"class":104},[94,134811,134608],{"class":153},[94,134813,105],{"class":104},[94,134815,134634],{"class":209},[94,134817,38030],{"class":104},[94,134819,134820,134822,134824,134826,134828,134830,134832,134834],{"class":96,"line":1201},[94,134821,134620],{"class":153},[94,134823,105],{"class":104},[94,134825,134645],{"class":209},[94,134827,13696],{"class":104},[94,134829,134608],{"class":153},[94,134831,105],{"class":104},[94,134833,134654],{"class":209},[94,134835,38030],{"class":104},[94,134837,134838,134840,134842,134844,134846,134848,134850,134852],{"class":96,"line":1292},[94,134839,134620],{"class":153},[94,134841,105],{"class":104},[94,134843,134665],{"class":209},[94,134845,13696],{"class":104},[94,134847,134608],{"class":153},[94,134849,105],{"class":104},[94,134851,134674],{"class":209},[94,134853,2700],{"class":104},[94,134855,134856],{"class":96,"line":1298},[94,134857,1546],{"class":104},[94,134859,134860,134862],{"class":96,"line":1310},[94,134861,134286],{"class":1944},[94,134863,15554],{"class":104},[94,134865,134866,134868,134870,134872],{"class":96,"line":1593},[94,134867,134567],{"class":153},[94,134869,51414],{"class":104},[94,134871,134572],{"class":209},[94,134873,1271],{"class":104},[94,134875,134876,134878,134880,134882],{"class":96,"line":1598},[94,134877,134701],{"class":153},[94,134879,51414],{"class":104},[94,134881,63818],{"class":153},[94,134883,1271],{"class":104},[94,134885,134886],{"class":96,"line":1604},[94,134887,1546],{"class":104},[1443,134889],{"style":126385,"src":134890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[40,134892,134893],{},"更加细节展示：",[48,134895,134896],{},[51,134897,134898],{},"html 标签内添加小图标",[1443,134900],{"style":126385,"src":134901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[48,134903,134904],{"start":15},[51,134905,134906],{},"给标签定义字体",[85,134908,134909],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[91,134910,134911,134915,134929,134933],{"__ignoreMap":14},[94,134912,134913],{"class":96,"line":97},[94,134914,130640],{"class":163},[94,134916,134917,134919,134921,134923,134925,134927],{"class":96,"line":15},[94,134918,1015],{"class":104},[94,134920,51588],{"class":51277},[94,134922,53463],{"class":1944},[94,134924,150],{"class":104},[94,134926,130653],{"class":209},[94,134928,51284],{"class":104},[94,134930,134931],{"class":96,"line":1160},[94,134932,130660],{"class":104},[94,134934,134935,134937,134939],{"class":96,"line":1175},[94,134936,51762],{"class":104},[94,134938,51588],{"class":51277},[94,134940,51284],{"class":104},[40,134942,134943],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1443,134945],{"style":126385,"src":134946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[65,134948,134950],{"id":134949},"_1235-字体图标的追加","12.3.5 字体图标的追加",[40,134952,134953],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[40,134955,134956,134957,134960],{},"把压缩包里面的 ",[254,134958,134959],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[40,134962,134963],{},"打开网站，点下方：",[1443,134965],{"style":126385,"src":134966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1443,134968],{"style":126385,"src":134969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1443,134971],{"style":126385,"src":134972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[40,134974,134975],{},"点yes重新加载",[40,134977,134978],{},"然后重复之前的操作就可以实现了",[40,134980,134981],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[65,134983,134985],{"id":134984},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1443,134987],{"style":126385,"src":134988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5108,134990,134991],{},"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":14,"searchDepth":15,"depth":15,"links":134993},[134994,135000,135005],{"id":133597,"depth":15,"text":133598,"children":134995},[134996,134997,134998,134999],{"id":133609,"depth":1160,"text":133610},{"id":133638,"depth":1160,"text":133639},{"id":133666,"depth":1160,"text":133667},{"id":133724,"depth":1160,"text":133725},{"id":134196,"depth":15,"text":134197,"children":135001},[135002,135003,135004],{"id":134200,"depth":1160,"text":134201},{"id":134245,"depth":1160,"text":134246},{"id":134261,"depth":1160,"text":134262},{"id":134361,"depth":15,"text":134362,"children":135006},[135007,135008,135009,135010,135011,135012],{"id":134365,"depth":1160,"text":134366},{"id":134399,"depth":1160,"text":134400},{"id":134422,"depth":1160,"text":134423},{"id":134469,"depth":1160,"text":134470},{"id":134949,"depth":1160,"text":134950},{"id":134984,"depth":1160,"text":134985},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133589,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135019,"title":135020,"body":135021,"description":17,"extension":18,"meta":136248,"navigation":20,"path":136249,"seo":136250,"stem":136251,"__hash__":136252},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135022,"toc":136229},[135023,135026,135030,135033,135047,135115,135145,135148,135152,135156,135258,135305,135309,135312,135315,135349,135352,135355,135358,135361,135364,135367,135370,135372,135375,135378,135381,135384,135387,135390,135393,135421,135424,135428,135431,135438,135441,135444,135470,135473,135477,135480,135483,135490,135494,135497,135499,135531,135534,135537,135549,135555,135558,135561,135564,135566,135570,135573,135576,135579,135624,135628,135630,135633,135640,135682,135685,135689,135694,135708,135712,135715,135718,135721,135724,135727,135761,135764,135767,135821,135824,135827,135830,135833,135885,135888,135891,135940,135944,135946,135949,135952,135955,135958,135961,136019,136022,136028,136031,136034,136066,136069,136073,136077,136080,136112,136116,136119,136163,136167,136170,136173,136176,136179,136182,136185,136188,136190,136193,136195,136198,136201,136204,136207,136212,136215,136217,136220,136223,136226],[10,135024,135020],{"id":135025},"_13-界面样式与布局技巧",[35,135027,135029],{"id":135028},"_131-css三角","13.1 css三角",[40,135031,135032],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1112,135034,135035,135038,135041,135044],{},[51,135036,135037],{},"用css 边框可以模拟三角效果",[51,135039,135040],{},"宽度高度为0",[51,135042,135043],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[51,135045,135046],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[85,135048,135050],{"className":126529,"code":135049,"language":126531,"meta":14,"style":14},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[91,135051,135052,135057,135064,135074,135084,135100,135111],{"__ignoreMap":14},[94,135053,135054],{"class":96,"line":97},[94,135055,135056],{"class":163},"\u002F* CSS 实现三角形 *\u002F\n",[94,135058,135059,135062],{"class":96,"line":15},[94,135060,135061],{"class":1944},".triangle",[94,135063,15554],{"class":104},[94,135065,135066,135068,135070,135072],{"class":96,"line":1160},[94,135067,70545],{"class":153},[94,135069,51414],{"class":104},[94,135071,296],{"class":153},[94,135073,1271],{"class":104},[94,135075,135076,135078,135080,135082],{"class":96,"line":1175},[94,135077,70765],{"class":153},[94,135079,51414],{"class":104},[94,135081,296],{"class":153},[94,135083,1271],{"class":104},[94,135085,135086,135088,135090,135092,135094,135096,135098],{"class":96,"line":1181},[94,135087,70873],{"class":153},[94,135089,51414],{"class":104},[94,135091,551],{"class":153},[94,135093,51469],{"class":100},[94,135095,51498],{"class":153},[94,135097,63968],{"class":153},[94,135099,1271],{"class":104},[94,135101,135102,135105,135107,135109],{"class":96,"line":1195},[94,135103,135104],{"class":153},"  border-bottom-color",[94,135106,51414],{"class":104},[94,135108,62346],{"class":153},[94,135110,1271],{"class":104},[94,135112,135113],{"class":96,"line":1201},[94,135114,1546],{"class":104},[85,135116,135117],{"className":126529,"code":130686,"language":126531,"meta":14,"style":14},[91,135118,135119,135125,135141],{"__ignoreMap":14},[94,135120,135121,135123],{"class":96,"line":97},[94,135122,51588],{"class":51277},[94,135124,15554],{"class":104},[94,135126,135127,135129,135131,135133,135135,135137,135139],{"class":96,"line":15},[94,135128,70873],{"class":153},[94,135130,51414],{"class":104},[94,135132,322],{"class":153},[94,135134,51469],{"class":100},[94,135136,51498],{"class":153},[94,135138,129921],{"class":153},[94,135140,1271],{"class":104},[94,135142,135143],{"class":96,"line":1160},[94,135144,1546],{"class":104},[1443,135146],{"style":126385,"src":135147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[35,135149,135151],{"id":135150},"_132-css用户界面样式","13.2 css用户界面样式",[65,135153,135155],{"id":135154},"_1321-鼠标样式","13.2.1 鼠标样式",[85,135157,135159],{"className":126529,"code":135158,"language":126531,"meta":14,"style":14},"\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",[91,135160,135161,135166,135185,135203,135222,135239],{"__ignoreMap":14},[94,135162,135163],{"class":96,"line":97},[94,135164,135165],{"class":163},"\u002F* 鼠标样式 *\u002F\n",[94,135167,135168,135170,135172,135175,135177,135179,135182],{"class":96,"line":15},[94,135169,51588],{"class":51277},[94,135171,79784],{"class":104},[94,135173,135174],{"class":153},"cursor",[94,135176,51414],{"class":104},[94,135178,62007],{"class":153},[94,135180,135181],{"class":104},"; }   ",[94,135183,135184],{"class":163},"\u002F* 手型 *\u002F\n",[94,135186,135187,135189,135191,135193,135195,135198,135200],{"class":96,"line":1160},[94,135188,51588],{"class":51277},[94,135190,79784],{"class":104},[94,135192,135174],{"class":153},[94,135194,51414],{"class":104},[94,135196,135197],{"class":153},"default",[94,135199,135181],{"class":104},[94,135201,135202],{"class":163},"\u002F* 默认 *\u002F\n",[94,135204,135205,135207,135209,135211,135213,135216,135219],{"class":96,"line":1175},[94,135206,51588],{"class":51277},[94,135208,79784],{"class":104},[94,135210,135174],{"class":153},[94,135212,51414],{"class":104},[94,135214,135215],{"class":153},"move",[94,135217,135218],{"class":104},"; }      ",[94,135220,135221],{"class":163},"\u002F* 移动 *\u002F\n",[94,135223,135224,135226,135228,135230,135232,135234,135236],{"class":96,"line":1181},[94,135225,51588],{"class":51277},[94,135227,79784],{"class":104},[94,135229,135174],{"class":153},[94,135231,51414],{"class":104},[94,135233,5169],{"class":153},[94,135235,135218],{"class":104},[94,135237,135238],{"class":163},"\u002F* 文本 *\u002F\n",[94,135240,135241,135243,135245,135247,135249,135252,135255],{"class":96,"line":1195},[94,135242,51588],{"class":51277},[94,135244,79784],{"class":104},[94,135246,135174],{"class":153},[94,135248,51414],{"class":104},[94,135250,135251],{"class":153},"not-allowed",[94,135253,135254],{"class":104},"; } ",[94,135256,135257],{"class":163},"\u002F* 禁止 *\u002F\n",[242,135259,135260,135268],{},[245,135261,135262],{},[248,135263,135264,135266],{},[251,135265,126993],{"align":23718},[251,135267,27472],{"align":23718},[289,135269,135270,135277,135284,135291,135298],{},[248,135271,135272,135274],{},[294,135273,135197],{"align":23718},[294,135275,135276],{"align":23718},"小白 默认",[248,135278,135279,135281],{},[294,135280,62007],{"align":23718},[294,135282,135283],{"align":23718},"小手",[248,135285,135286,135288],{},[294,135287,135215],{"align":23718},[294,135289,135290],{"align":23718},"移动",[248,135292,135293,135295],{},[294,135294,5169],{"align":23718},[294,135296,135297],{"align":23718},"文本",[248,135299,135300,135302],{},[294,135301,135251],{"align":23718},[294,135303,135304],{"align":23718},"禁止",[65,135306,135308],{"id":135307},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[40,135310,135311],{},"去除表单轮廓线",[40,135313,135314],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[85,135316,135317],{"className":126529,"code":129893,"language":126531,"meta":14,"style":14},[91,135318,135319,135323,135329,135345],{"__ignoreMap":14},[94,135320,135321],{"class":96,"line":97},[94,135322,129900],{"class":163},[94,135324,135325,135327],{"class":96,"line":15},[94,135326,51588],{"class":51277},[94,135328,15554],{"class":104},[94,135330,135331,135333,135335,135337,135339,135341,135343],{"class":96,"line":1160},[94,135332,70873],{"class":153},[94,135334,51414],{"class":104},[94,135336,322],{"class":153},[94,135338,51469],{"class":100},[94,135340,51498],{"class":153},[94,135342,129921],{"class":153},[94,135344,1271],{"class":104},[94,135346,135347],{"class":96,"line":1175},[94,135348,1546],{"class":104},[40,135350,135351],{},"文本域：",[1443,135353],{"style":126385,"src":135354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[40,135356,135357],{},"此时会有一个空白区域",[1443,135359],{"style":126385,"src":135360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[40,135362,135363],{},"写在同一行就不会出现这个问题",[1443,135365],{"style":126385,"src":135366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[40,135368,135369],{},"文本域是行内块元素，一定记住！！！",[40,135371,98210],{},[1443,135373],{"style":126385,"src":135374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[40,135376,135377],{},"文本域尽量放在一行",[40,135379,135380],{},"知识回顾：cols是列，rols是行",[1443,135382],{"style":126385,"src":135383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[40,135385,135386],{},"它可以进行拖动，显然这是我们不愿意看到的",[1443,135388],{"style":126385,"src":135389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[40,135391,135392],{},"使用resize进行解决",[85,135394,135396],{"className":126529,"code":135395,"language":126531,"meta":14,"style":14},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[91,135397,135398,135404,135417],{"__ignoreMap":14},[94,135399,135400,135402],{"class":96,"line":97},[94,135401,53798],{"class":51277},[94,135403,15554],{"class":104},[94,135405,135406,135408,135410,135412,135414],{"class":96,"line":15},[94,135407,70775],{"class":153},[94,135409,51414],{"class":104},[94,135411,54714],{"class":153},[94,135413,130392],{"class":104},[94,135415,135416],{"class":163},"\u002F* 取消表单轮廓线 *\u002F\n",[94,135418,135419],{"class":96,"line":1160},[94,135420,1546],{"class":104},[40,135422,135423],{},"此时就无法通过右下方实现拖动了",[65,135425,135427],{"id":135426},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[40,135429,135430],{},"实现一个盒子中的文字和图片对齐",[40,135432,135433,135434,135437],{},"用于设置一个元素的 ",[254,135435,135436],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[40,135439,135440],{},"图片和文字默认是基线对齐",[1443,135442],{"style":126385,"src":135443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[85,135445,135446],{"className":126529,"code":135395,"language":126531,"meta":14,"style":14},[91,135447,135448,135454,135466],{"__ignoreMap":14},[94,135449,135450,135452],{"class":96,"line":97},[94,135451,53798],{"class":51277},[94,135453,15554],{"class":104},[94,135455,135456,135458,135460,135462,135464],{"class":96,"line":15},[94,135457,70775],{"class":153},[94,135459,51414],{"class":104},[94,135461,54714],{"class":153},[94,135463,130392],{"class":104},[94,135465,135416],{"class":163},[94,135467,135468],{"class":96,"line":1160},[94,135469,1546],{"class":104},[1443,135471],{"style":126385,"src":135472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[21980,135474,135476],{"id":135475},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[40,135478,135479],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1443,135481],{"style":126385,"src":135482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[40,135484,135485,135486,135489],{},"此时可以给图片、表单这些行内块元素的 ",[254,135487,135488],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[21980,135491,135493],{"id":135492},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[40,135495,135496],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[40,135498,14615],{},[85,135500,135502],{"className":126529,"code":135501,"language":126531,"meta":14,"style":14},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[91,135503,135504,135509,135515,135527],{"__ignoreMap":14},[94,135505,135506],{"class":96,"line":97},[94,135507,135508],{"class":163},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[94,135510,135511,135513],{"class":96,"line":15},[94,135512,1443],{"class":51277},[94,135514,15554],{"class":104},[94,135516,135517,135520,135522,135525],{"class":96,"line":1160},[94,135518,135519],{"class":153},"  vertical-align",[94,135521,51414],{"class":104},[94,135523,135524],{"class":153},"middle",[94,135526,1271],{"class":104},[94,135528,135529],{"class":96,"line":1175},[94,135530,1546],{"class":104},[1443,135532],{"style":126385,"src":135533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[40,135535,135536],{},"主要解决方法有两种：",[48,135538,135539],{},[51,135540,135541,135544,135545,135548],{},[254,135542,135543],{},"给图片"," 添加 ",[254,135546,135547],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[40,135550,135551,135552],{},"2.把图片转换为块级元素 ",[254,135553,135554],{},"display: block",[40,135556,135557],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[40,135559,135560],{},"img {",[40,135562,135563],{},"vertical-align:middle;",[40,135565,1051],{},[65,135567,135569],{"id":135568},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[40,135571,135572],{},"效果：",[1443,135574],{"style":126385,"src":135575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[40,135577,135578],{},"单行文本溢出显示省略号--必须满足三个条件：",[85,135580,135582],{"className":126529,"code":135581,"language":126531,"meta":14,"style":14},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[91,135583,135584,135589,135595,135605,135610,135620],{"__ignoreMap":14},[94,135585,135586],{"class":96,"line":97},[94,135587,135588],{"class":163},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[94,135590,135591,135593],{"class":96,"line":15},[94,135592,1443],{"class":51277},[94,135594,15554],{"class":104},[94,135596,135597,135599,135601,135603],{"class":96,"line":1160},[94,135598,135519],{"class":153},[94,135600,51414],{"class":104},[94,135602,135524],{"class":153},[94,135604,1271],{"class":104},[94,135606,135607],{"class":96,"line":1175},[94,135608,135609],{"class":163},"  \u002F* 或 *\u002F\n",[94,135611,135612,135614,135616,135618],{"class":96,"line":1181},[94,135613,128145],{"class":153},[94,135615,51414],{"class":104},[94,135617,60846],{"class":153},[94,135619,1271],{"class":104},[94,135621,135622],{"class":96,"line":1195},[94,135623,1546],{"class":104},[65,135625,135627],{"id":135626},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[40,135629,135572],{},[1443,135631],{"style":126385,"src":135632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[40,135634,135635,135636,135639],{},"多行文本溢出显示省略号， ",[254,135637,135638],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[85,135641,135642],{"className":126529,"code":135581,"language":126531,"meta":14,"style":14},[91,135643,135644,135648,135654,135664,135668,135678],{"__ignoreMap":14},[94,135645,135646],{"class":96,"line":97},[94,135647,135588],{"class":163},[94,135649,135650,135652],{"class":96,"line":15},[94,135651,1443],{"class":51277},[94,135653,15554],{"class":104},[94,135655,135656,135658,135660,135662],{"class":96,"line":1160},[94,135657,135519],{"class":153},[94,135659,51414],{"class":104},[94,135661,135524],{"class":153},[94,135663,1271],{"class":104},[94,135665,135666],{"class":96,"line":1175},[94,135667,135609],{"class":163},[94,135669,135670,135672,135674,135676],{"class":96,"line":1181},[94,135671,128145],{"class":153},[94,135673,51414],{"class":104},[94,135675,60846],{"class":153},[94,135677,1271],{"class":104},[94,135679,135680],{"class":96,"line":1195},[94,135681,1546],{"class":104},[40,135683,135684],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[35,135686,135688],{"id":135687},"_133-常见布局技巧","13.3 常见布局技巧",[40,135690,135691],{},[254,135692,135693],{},"巧妙利用一个技术更快更好的布局：",[48,135695,135696,135699,135702,135705],{},[51,135697,135698],{},"margin负值的运用",[51,135700,135701],{},"文字围绕浮动元素",[51,135703,135704],{},"行内块的巧妙运用",[51,135706,135707],{},"CSS三角强化",[65,135709,135711],{"id":135710},"_1331-margin负值的运用","13.3.1 margin负值的运用",[40,135713,135714],{},"应用场景：",[1443,135716],{"style":126385,"src":135717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1443,135719],{"style":126385,"src":135720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[40,135722,135723],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[40,135725,135726],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[85,135728,135729],{"className":126529,"code":129893,"language":126531,"meta":14,"style":14},[91,135730,135731,135735,135741,135757],{"__ignoreMap":14},[94,135732,135733],{"class":96,"line":97},[94,135734,129900],{"class":163},[94,135736,135737,135739],{"class":96,"line":15},[94,135738,51588],{"class":51277},[94,135740,15554],{"class":104},[94,135742,135743,135745,135747,135749,135751,135753,135755],{"class":96,"line":1160},[94,135744,70873],{"class":153},[94,135746,51414],{"class":104},[94,135748,322],{"class":153},[94,135750,51469],{"class":100},[94,135752,51498],{"class":153},[94,135754,129921],{"class":153},[94,135756,1271],{"class":104},[94,135758,135759],{"class":96,"line":1175},[94,135760,1546],{"class":104},[1443,135762],{"style":126385,"src":135763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[40,135765,135766],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[85,135768,135770],{"className":126529,"code":135769,"language":126531,"meta":14,"style":14},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[91,135771,135772,135777,135783,135793,135805,135817],{"__ignoreMap":14},[94,135773,135774],{"class":96,"line":97},[94,135775,135776],{"class":163},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[94,135778,135779,135781],{"class":96,"line":15},[94,135780,130377],{"class":1944},[94,135782,15554],{"class":104},[94,135784,135785,135787,135789,135791],{"class":96,"line":1160},[94,135786,132335],{"class":153},[94,135788,51414],{"class":104},[94,135790,54741],{"class":153},[94,135792,1271],{"class":104},[94,135794,135795,135797,135799,135801,135803],{"class":96,"line":1175},[94,135796,132349],{"class":153},[94,135798,51414],{"class":104},[94,135800,551],{"class":153},[94,135802,51469],{"class":100},[94,135804,1271],{"class":104},[94,135806,135807,135809,135811,135813,135815],{"class":96,"line":1181},[94,135808,132366],{"class":153},[94,135810,51414],{"class":104},[94,135812,805],{"class":153},[94,135814,51469],{"class":100},[94,135816,1271],{"class":104},[94,135818,135819],{"class":96,"line":1195},[94,135820,1546],{"class":104},[40,135822,135823],{},"加上上述代码会发现：",[1443,135825],{"style":126385,"src":135826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[40,135828,135829],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[40,135831,135832],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[85,135834,135835],{"className":126529,"code":135769,"language":126531,"meta":14,"style":14},[91,135836,135837,135841,135847,135857,135869,135881],{"__ignoreMap":14},[94,135838,135839],{"class":96,"line":97},[94,135840,135776],{"class":163},[94,135842,135843,135845],{"class":96,"line":15},[94,135844,130377],{"class":1944},[94,135846,15554],{"class":104},[94,135848,135849,135851,135853,135855],{"class":96,"line":1160},[94,135850,132335],{"class":153},[94,135852,51414],{"class":104},[94,135854,54741],{"class":153},[94,135856,1271],{"class":104},[94,135858,135859,135861,135863,135865,135867],{"class":96,"line":1175},[94,135860,132349],{"class":153},[94,135862,51414],{"class":104},[94,135864,551],{"class":153},[94,135866,51469],{"class":100},[94,135868,1271],{"class":104},[94,135870,135871,135873,135875,135877,135879],{"class":96,"line":1181},[94,135872,132366],{"class":153},[94,135874,51414],{"class":104},[94,135876,805],{"class":153},[94,135878,51469],{"class":100},[94,135880,1271],{"class":104},[94,135882,135883],{"class":96,"line":1195},[94,135884,1546],{"class":104},[40,135886,135887],{},"解决方式2：",[40,135889,135890],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[85,135892,135894],{"className":126529,"code":135893,"language":126531,"meta":14,"style":14},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[91,135895,135896,135902,135912,135924,135936],{"__ignoreMap":14},[94,135897,135898,135900],{"class":96,"line":97},[94,135899,51588],{"class":51277},[94,135901,15554],{"class":104},[94,135903,135904,135906,135908,135910],{"class":96,"line":15},[94,135905,132335],{"class":153},[94,135907,51414],{"class":104},[94,135909,54741],{"class":153},[94,135911,1271],{"class":104},[94,135913,135914,135916,135918,135920,135922],{"class":96,"line":1160},[94,135915,132349],{"class":153},[94,135917,51414],{"class":104},[94,135919,551],{"class":153},[94,135921,51469],{"class":100},[94,135923,1271],{"class":104},[94,135925,135926,135928,135930,135932,135934],{"class":96,"line":1175},[94,135927,132366],{"class":153},[94,135929,51414],{"class":104},[94,135931,805],{"class":153},[94,135933,51469],{"class":100},[94,135935,1271],{"class":104},[94,135937,135938],{"class":96,"line":1181},[94,135939,1546],{"class":104},[65,135941,135943],{"id":135942},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[40,135945,135714],{},[1443,135947],{"style":126385,"src":135948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[40,135950,135951],{},"实现结构图：",[1443,135953],{"style":126385,"src":135954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[40,135956,135957],{},"巧妙运用浮动元素不会压住文字的特性",[40,135959,135960],{},"代码显示：",[85,135962,135964],{"className":126529,"code":135963,"language":126531,"meta":14,"style":14},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[91,135965,135966,135972,135982,135986,135991,135995,136001,136015],{"__ignoreMap":14},[94,135967,135968,135970],{"class":96,"line":97},[94,135969,130377],{"class":1944},[94,135971,15554],{"class":104},[94,135973,135974,135976,135978,135980],{"class":96,"line":15},[94,135975,131009],{"class":153},[94,135977,51414],{"class":104},[94,135979,23718],{"class":153},[94,135981,1271],{"class":104},[94,135983,135984],{"class":96,"line":1160},[94,135985,1546],{"class":104},[94,135987,135988],{"class":96,"line":1175},[94,135989,135990],{"class":104},"```Css\n",[94,135992,135993],{"class":96,"line":1181},[94,135994,130372],{"class":163},[94,135996,135997,135999],{"class":96,"line":1195},[94,135998,130377],{"class":1944},[94,136000,15554],{"class":104},[94,136002,136003,136005,136007,136009,136011,136013],{"class":96,"line":1201},[94,136004,70447],{"class":153},[94,136006,51414],{"class":104},[94,136008,296],{"class":153},[94,136010,51533],{"class":153},[94,136012,130392],{"class":104},[94,136014,130395],{"class":163},[94,136016,136017],{"class":96,"line":1292},[94,136018,1546],{"class":104},[40,136020,136021],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[85,136023,136026],{"className":136024,"code":136025,"language":5169},[5167],"\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",[91,136027,136025],{"__ignoreMap":14},[1443,136029],{"style":126385,"src":136030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[40,136032,136033],{},"最终展示结果：",[85,136035,136036],{"className":126529,"code":130365,"language":126531,"meta":14,"style":14},[91,136037,136038,136042,136048,136062],{"__ignoreMap":14},[94,136039,136040],{"class":96,"line":97},[94,136041,130372],{"class":163},[94,136043,136044,136046],{"class":96,"line":15},[94,136045,130377],{"class":1944},[94,136047,15554],{"class":104},[94,136049,136050,136052,136054,136056,136058,136060],{"class":96,"line":1160},[94,136051,70447],{"class":153},[94,136053,51414],{"class":104},[94,136055,296],{"class":153},[94,136057,51533],{"class":153},[94,136059,130392],{"class":104},[94,136061,130395],{"class":163},[94,136063,136064],{"class":96,"line":1175},[94,136065,1546],{"class":104},[1443,136067],{"style":126385,"src":136068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[35,136070,136072],{"id":136071},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[65,136074,136076],{"id":136075},"_1341-原理","13.4.1 原理",[1443,136078],{"style":126385,"src":136079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[85,136081,136082],{"className":126529,"code":130365,"language":126531,"meta":14,"style":14},[91,136083,136084,136088,136094,136108],{"__ignoreMap":14},[94,136085,136086],{"class":96,"line":97},[94,136087,130372],{"class":163},[94,136089,136090,136092],{"class":96,"line":15},[94,136091,130377],{"class":1944},[94,136093,15554],{"class":104},[94,136095,136096,136098,136100,136102,136104,136106],{"class":96,"line":1160},[94,136097,70447],{"class":153},[94,136099,51414],{"class":104},[94,136101,296],{"class":153},[94,136103,51533],{"class":153},[94,136105,130392],{"class":104},[94,136107,130395],{"class":163},[94,136109,136110],{"class":96,"line":1175},[94,136111,1546],{"class":104},[65,136113,136115],{"id":136114},"_1342-实例","13.4.2 实例",[1443,136117],{"style":126385,"src":136118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[85,136120,136121],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[91,136122,136123,136129,136139,136143,136149,136159],{"__ignoreMap":14},[94,136124,136125,136127],{"class":96,"line":97},[94,136126,131002],{"class":1944},[94,136128,15554],{"class":104},[94,136130,136131,136133,136135,136137],{"class":96,"line":15},[94,136132,131009],{"class":153},[94,136134,51414],{"class":104},[94,136136,23718],{"class":153},[94,136138,1271],{"class":104},[94,136140,136141],{"class":96,"line":1160},[94,136142,1546],{"class":104},[94,136144,136145,136147],{"class":96,"line":1175},[94,136146,131024],{"class":1944},[94,136148,15554],{"class":104},[94,136150,136151,136153,136155,136157],{"class":96,"line":1181},[94,136152,131009],{"class":153},[94,136154,51414],{"class":104},[94,136156,72499],{"class":153},[94,136158,1271],{"class":104},[94,136160,136161],{"class":96,"line":1195},[94,136162,1546],{"class":104},[35,136164,136166],{"id":136165},"_135-css的初始化","13.5 css的初始化",[40,136168,136169],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[40,136171,136172],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[40,136174,136175],{},"每个网页都必须首先进行 CSS初始化。",[40,136177,136178],{},"这里我们以 京东CSS初始化代码为例。",[40,136180,136181],{},"在网页右键查看网页源代码",[40,136183,136184],{},"找到css的link引入语句",[40,136186,136187],{},"然后ctrl+f 输入body",[40,136189,77203],{},[1443,136191],{"style":126385,"src":136192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[40,136194,77226],{},[1443,136196],{"style":126385,"src":136197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[40,136199,136200],{},"③打开了网页上传压缩的代码",[1443,136202],{"style":126385,"src":136203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[40,136205,136206],{},"④从body前可以查看这个网页的初始化代码",[40,136208,136209],{},[254,136210,136211],{},"Unicode编码字体：",[40,136213,136214],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[40,136216,83184],{},[40,136218,136219],{},"黑体 \\9ED1\\4F53",[40,136221,136222],{},"宋体 \\5B8B\\4F53",[40,136224,136225],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5108,136227,136228],{},"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":14,"searchDepth":15,"depth":15,"links":136230},[136231,136232,136239,136243,136247],{"id":135028,"depth":15,"text":135029},{"id":135150,"depth":15,"text":135151,"children":136233},[136234,136235,136236,136237,136238],{"id":135154,"depth":1160,"text":135155},{"id":135307,"depth":1160,"text":135308},{"id":135426,"depth":1160,"text":135427},{"id":135568,"depth":1160,"text":135569},{"id":135626,"depth":1160,"text":135627},{"id":135687,"depth":15,"text":135688,"children":136240},[136241,136242],{"id":135710,"depth":1160,"text":135711},{"id":135942,"depth":1160,"text":135943},{"id":136071,"depth":15,"text":136072,"children":136244},[136245,136246],{"id":136075,"depth":1160,"text":136076},{"id":136114,"depth":1160,"text":136115},{"id":136165,"depth":15,"text":136166},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135020,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136254,"title":136255,"body":136256,"description":17,"extension":18,"meta":137942,"navigation":20,"path":137943,"seo":137944,"stem":137945,"__hash__":137946},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136257,"toc":137931},[136258,136261,136265,136269,136272,136279,136282,136285,136323,136326,136328,136342,136346,136355,136359,136364,136367,136370,136373,136408,136413,136416,136446,136449,136454,136457,136460,136490,136493,136547,136550,136554,136559,136571,136574,136578,136608,136611,136616,136619,136649,136652,136656,136673,136677,136681,136684,136717,136720,136724,136727,136730,136733,136736,136739,136850,136853,136856,136859,136961,136964,136968,136972,136976,136979,137019,137022,137024,137040,137044,137047,137052,137133,137136,137139,137265,137270,137273,137281,137284,137289,137374,137377,137381,137384,137387,137391,137411,137416,137500,137503,137508,137511,137514,137592,137595,137598,137601,137604,137607,137612,137615,137618,137690,137693,137698,137701,137798,137801,137807,137810,137813,137816,137819,137822,137825,137828,137831,137835,137840,137843,137876,137881,137884,137925,137928],[10,136259,136255],{"id":136260},"_14-html5与css3新特性",[35,136262,136264],{"id":136263},"_141-html5的新特性","14.1 HTML5的新特性",[65,136266,136268],{"id":136267},"_1411-基本标签","14.1.1 基本标签",[40,136270,136271],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[40,136273,136274,136275,136278],{},"这些新特性都有兼容性问题，基本是 ",[254,136276,136277],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[40,136280,136281],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[40,136283,136284],{},"现在使用的是新特性：",[1112,136286,136287,136293,136299,136305,136311,136317],{},[51,136288,136289,136292],{},[91,136290,136291],{},"\u003Cheader>"," 头部标签",[51,136294,136295,136298],{},[91,136296,136297],{},"\u003Cnav>"," 导航标签",[51,136300,136301,136304],{},[91,136302,136303],{},"\u003Carticle>"," 内容标签",[51,136306,136307,136310],{},[91,136308,136309],{},"\u003Csection>"," 定义文档某个区域",[51,136312,136313,136316],{},[91,136314,136315],{},"\u003Caside>"," 侧边栏标签",[51,136318,136319,136322],{},[91,136320,136321],{},"\u003Cfooter>"," 尾部标签",[1443,136324],{"style":126385,"src":136325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[40,136327,134],{},[1112,136329,136330,136333,136336,136339],{},[51,136331,136332],{},"这种语义化标准主要是针对搜索引擎的",[51,136334,136335],{},"这些标签页面中可以经常使用",[51,136337,136338],{},"在IE9中，需要把这些元素转换为块级元素",[51,136340,136341],{},"移动端更喜欢使用这些标签",[65,136343,136345],{"id":136344},"_1412-多媒体标签","14.1.2 多媒体标签",[40,136347,136348,136349,136351,136352,136354],{},"音频 ",[254,136350,28157],{}," 和视频 ",[254,136353,28166],{}," 两个标签",[21980,136356,136358],{"id":136357},"_14121-视频标签-video","14.1.2.1 视频标签- video",[48,136360,136361],{},[51,136362,136363],{},"支持格式：",[1443,136365],{"style":126385,"src":136366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[40,136368,136369],{},"尽量使用MP4，兼容性好",[40,136371,136372],{},"用MP4就可以",[85,136374,136376],{"className":127276,"code":136375,"language":127278,"meta":14,"style":14},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[91,136377,136378],{"__ignoreMap":14},[94,136379,136380,136382,136384,136386,136388,136391,136393,136396,136399,136402,136404,136406],{"class":96,"line":97},[94,136381,1015],{"class":104},[94,136383,28166],{"class":51277},[94,136385,55216],{"class":1944},[94,136387,150],{"class":104},[94,136389,136390],{"class":209},"\"movie.mp4\"",[94,136392,92400],{"class":1944},[94,136394,136395],{"class":1944}," autoplay",[94,136397,136398],{"class":1944}," muted",[94,136400,136401],{"class":1944}," loop",[94,136403,55291],{"class":104},[94,136405,28166],{"class":51277},[94,136407,51284],{"class":104},[48,136409,136410],{"start":15},[51,136411,136412],{},"兼容写法",[40,136414,136415],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[85,136417,136418],{"className":127276,"code":136375,"language":127278,"meta":14,"style":14},[91,136419,136420],{"__ignoreMap":14},[94,136421,136422,136424,136426,136428,136430,136432,136434,136436,136438,136440,136442,136444],{"class":96,"line":97},[94,136423,1015],{"class":104},[94,136425,28166],{"class":51277},[94,136427,55216],{"class":1944},[94,136429,150],{"class":104},[94,136431,136390],{"class":209},[94,136433,92400],{"class":1944},[94,136435,136395],{"class":1944},[94,136437,136398],{"class":1944},[94,136439,136401],{"class":1944},[94,136441,55291],{"class":104},[94,136443,28166],{"class":51277},[94,136445,51284],{"class":104},[40,136447,136448],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[48,136450,136451],{"start":1160},[51,136452,136453],{},"video常用属性",[1443,136455],{"style":126385,"src":136456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[40,136458,136459],{},"poster属性后面是跟的等待加载图片的地址",[85,136461,136462],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[91,136463,136464],{"__ignoreMap":14},[94,136465,136466,136468,136470,136472,136474,136476,136478,136480,136482,136484,136486,136488],{"class":96,"line":97},[94,136467,1015],{"class":104},[94,136469,1443],{"class":51277},[94,136471,55216],{"class":1944},[94,136473,150],{"class":104},[94,136475,134046],{"class":209},[94,136477,55224],{"class":1944},[94,136479,150],{"class":104},[94,136481,134053],{"class":209},[94,136483,134056],{"class":1944},[94,136485,150],{"class":104},[94,136487,134061],{"class":209},[94,136489,51284],{"class":104},[40,136491,136492],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[85,136494,136496],{"className":126529,"code":136495,"language":126531,"meta":14,"style":14},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[91,136497,136498,136503,136509,136533,136538,136543],{"__ignoreMap":14},[94,136499,136500],{"class":96,"line":97},[94,136501,136502],{"class":163},"\u002F* 2D 位移 *\u002F\n",[94,136504,136505,136507],{"class":96,"line":15},[94,136506,51588],{"class":51277},[94,136508,15554],{"class":104},[94,136510,136511,136514,136516,136519,136521,136523,136525,136527,136529,136531],{"class":96,"line":1160},[94,136512,136513],{"class":153},"  transform",[94,136515,51414],{"class":104},[94,136517,136518],{"class":153},"translate",[94,136520,105],{"class":104},[94,136522,416],{"class":153},[94,136524,51469],{"class":100},[94,136526,12417],{"class":104},[94,136528,761],{"class":153},[94,136530,51469],{"class":100},[94,136532,2700],{"class":104},[94,136534,136535],{"class":96,"line":1175},[94,136536,136537],{"class":163},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[94,136539,136540],{"class":96,"line":1181},[94,136541,136542],{"class":163},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[94,136544,136545],{"class":96,"line":1195},[94,136546,1546],{"class":104},[40,136548,136549],{},"muted:自动静音属性",[21980,136551,136553],{"id":136552},"_14122-音频标签audio","14.1.2.2 音频标签audio",[48,136555,136556],{},[51,136557,136558],{},"基本使用",[40,136560,136561,136562,136567,136568],{},"当前 ",[254,136563,136564],{},[91,136565,136566],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[254,136569,136570],{},"mp3格式",[1443,136572],{"style":126385,"src":136573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[48,136575,136576],{"start":15},[51,136577,136412],{},[85,136579,136580],{"className":127276,"code":136375,"language":127278,"meta":14,"style":14},[91,136581,136582],{"__ignoreMap":14},[94,136583,136584,136586,136588,136590,136592,136594,136596,136598,136600,136602,136604,136606],{"class":96,"line":97},[94,136585,1015],{"class":104},[94,136587,28166],{"class":51277},[94,136589,55216],{"class":1944},[94,136591,150],{"class":104},[94,136593,136390],{"class":209},[94,136595,92400],{"class":1944},[94,136597,136395],{"class":1944},[94,136599,136398],{"class":1944},[94,136601,136401],{"class":1944},[94,136603,55291],{"class":104},[94,136605,28166],{"class":51277},[94,136607,51284],{"class":104},[40,136609,136610],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[48,136612,136613],{"start":1160},[51,136614,136615],{},"常用属性",[1443,136617],{"style":126385,"src":136618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[85,136620,136621],{"className":127276,"code":136375,"language":127278,"meta":14,"style":14},[91,136622,136623],{"__ignoreMap":14},[94,136624,136625,136627,136629,136631,136633,136635,136637,136639,136641,136643,136645,136647],{"class":96,"line":97},[94,136626,1015],{"class":104},[94,136628,28166],{"class":51277},[94,136630,55216],{"class":1944},[94,136632,150],{"class":104},[94,136634,136390],{"class":209},[94,136636,92400],{"class":1944},[94,136638,136395],{"class":1944},[94,136640,136398],{"class":1944},[94,136642,136401],{"class":1944},[94,136644,55291],{"class":104},[94,136646,28166],{"class":51277},[94,136648,51284],{"class":104},[40,136650,136651],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[21980,136653,136655],{"id":136654},"_14123-总结","14.1.2.3 总结",[1112,136657,136658,136661,136664,136667,136670],{},[51,136659,136660],{},"音频标签和视频标签使用方式基本一致",[51,136662,136663],{},"浏览器支持情况不同",[51,136665,136666],{},"谷歌浏览器把音频和视频自动播放禁止了",[51,136668,136669],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[51,136671,136672],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[65,136674,136676],{"id":136675},"_1413-表单元素","14.1.3 表单元素",[21980,136678,136680],{"id":136679},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1443,136682],{"style":126385,"src":136683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[85,136685,136687],{"className":127276,"code":136686,"language":127278,"meta":14,"style":14},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[91,136688,136689],{"__ignoreMap":14},[94,136690,136691,136693,136695,136697,136699,136701,136703,136705,136708,136710,136712,136715],{"class":96,"line":97},[94,136692,1015],{"class":104},[94,136694,53798],{"class":51277},[94,136696,53801],{"class":1944},[94,136698,150],{"class":104},[94,136700,62676],{"class":209},[94,136702,14902],{"class":1944},[94,136704,150],{"class":104},[94,136706,136707],{"class":209},"\"username\"",[94,136709,60997],{"class":1944},[94,136711,150],{"class":104},[94,136713,136714],{"class":209},"\"请输入用户名\"",[94,136716,51284],{"class":104},[1443,136718],{"style":126385,"src":136719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[21980,136721,136723],{"id":136722},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1443,136725],{"style":126385,"src":136726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[40,136728,136729],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[40,136731,136732],{},"快捷操作：",[1443,136734],{"style":126385,"src":136735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[40,136737,136738],{},"例子1：",[85,136740,136742],{"className":127276,"code":136741,"language":127278,"meta":14,"style":14},"\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",[91,136743,136744,136767,136794,136823,136842],{"__ignoreMap":14},[94,136745,136746,136748,136750,136752,136754,136757,136760,136762,136765],{"class":96,"line":97},[94,136747,1015],{"class":104},[94,136749,66602],{"class":51277},[94,136751,66605],{"class":1944},[94,136753,150],{"class":104},[94,136755,136756],{"class":209},"\"\u002Fsubmit\"",[94,136758,136759],{"class":1944}," method",[94,136761,150],{"class":104},[94,136763,136764],{"class":209},"\"post\"",[94,136766,51284],{"class":104},[94,136768,136769,136771,136773,136775,136777,136779,136781,136783,136785,136787,136789,136792],{"class":96,"line":15},[94,136770,52121],{"class":104},[94,136772,53798],{"class":51277},[94,136774,53801],{"class":1944},[94,136776,150],{"class":104},[94,136778,62676],{"class":209},[94,136780,14902],{"class":1944},[94,136782,150],{"class":104},[94,136784,136707],{"class":209},[94,136786,60997],{"class":1944},[94,136788,150],{"class":104},[94,136790,136791],{"class":209},"\"用户名\"",[94,136793,51284],{"class":104},[94,136795,136796,136798,136800,136802,136804,136807,136809,136811,136814,136816,136818,136821],{"class":96,"line":1160},[94,136797,52121],{"class":104},[94,136799,53798],{"class":51277},[94,136801,53801],{"class":1944},[94,136803,150],{"class":104},[94,136805,136806],{"class":209},"\"password\"",[94,136808,14902],{"class":1944},[94,136810,150],{"class":104},[94,136812,136813],{"class":209},"\"pwd\"",[94,136815,60997],{"class":1944},[94,136817,150],{"class":104},[94,136819,136820],{"class":209},"\"密码\"",[94,136822,51284],{"class":104},[94,136824,136825,136827,136829,136831,136833,136835,136838,136840],{"class":96,"line":1175},[94,136826,52121],{"class":104},[94,136828,53864],{"class":51277},[94,136830,53801],{"class":1944},[94,136832,150],{"class":104},[94,136834,66625],{"class":209},[94,136836,136837],{"class":104},">提交\u003C\u002F",[94,136839,53864],{"class":51277},[94,136841,51284],{"class":104},[94,136843,136844,136846,136848],{"class":96,"line":1181},[94,136845,51762],{"class":104},[94,136847,66602],{"class":51277},[94,136849,51284],{"class":104},[1443,136851],{"style":126385,"src":136852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[40,136854,136855],{},"value是表单域的内容",[40,136857,136858],{},"例子2：",[85,136860,136861],{"className":127276,"code":136741,"language":127278,"meta":14,"style":14},[91,136862,136863,136883,136909,136935,136953],{"__ignoreMap":14},[94,136864,136865,136867,136869,136871,136873,136875,136877,136879,136881],{"class":96,"line":97},[94,136866,1015],{"class":104},[94,136868,66602],{"class":51277},[94,136870,66605],{"class":1944},[94,136872,150],{"class":104},[94,136874,136756],{"class":209},[94,136876,136759],{"class":1944},[94,136878,150],{"class":104},[94,136880,136764],{"class":209},[94,136882,51284],{"class":104},[94,136884,136885,136887,136889,136891,136893,136895,136897,136899,136901,136903,136905,136907],{"class":96,"line":15},[94,136886,52121],{"class":104},[94,136888,53798],{"class":51277},[94,136890,53801],{"class":1944},[94,136892,150],{"class":104},[94,136894,62676],{"class":209},[94,136896,14902],{"class":1944},[94,136898,150],{"class":104},[94,136900,136707],{"class":209},[94,136902,60997],{"class":1944},[94,136904,150],{"class":104},[94,136906,136791],{"class":209},[94,136908,51284],{"class":104},[94,136910,136911,136913,136915,136917,136919,136921,136923,136925,136927,136929,136931,136933],{"class":96,"line":1160},[94,136912,52121],{"class":104},[94,136914,53798],{"class":51277},[94,136916,53801],{"class":1944},[94,136918,150],{"class":104},[94,136920,136806],{"class":209},[94,136922,14902],{"class":1944},[94,136924,150],{"class":104},[94,136926,136813],{"class":209},[94,136928,60997],{"class":1944},[94,136930,150],{"class":104},[94,136932,136820],{"class":209},[94,136934,51284],{"class":104},[94,136936,136937,136939,136941,136943,136945,136947,136949,136951],{"class":96,"line":1175},[94,136938,52121],{"class":104},[94,136940,53864],{"class":51277},[94,136942,53801],{"class":1944},[94,136944,150],{"class":104},[94,136946,66625],{"class":209},[94,136948,136837],{"class":104},[94,136950,53864],{"class":51277},[94,136952,51284],{"class":104},[94,136954,136955,136957,136959],{"class":96,"line":1181},[94,136956,51762],{"class":104},[94,136958,66602],{"class":51277},[94,136960,51284],{"class":104},[1443,136962],{"style":126385,"src":136963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[35,136965,136967],{"id":136966},"_142-css新特性","14.2 CSS新特性",[65,136969,136971],{"id":136970},"_1421-新增选择器","14.2.1 新增选择器",[21980,136973,136975],{"id":136974},"_14211-属性选择器","14.2.1.1 属性选择器",[1443,136977],{"style":126385,"src":136978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[85,136980,136982],{"className":126529,"code":136981,"language":126531,"meta":14,"style":14},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[91,136983,136984,136999,137015],{"__ignoreMap":14},[94,136985,136986,136988,136990,136992,136994,136996],{"class":96,"line":97},[94,136987,53798],{"class":51277},[94,136989,995],{"class":104},[94,136991,103084],{"class":1944},[94,136993,150],{"class":100},[94,136995,62676],{"class":209},[94,136997,136998],{"class":104},"] {\n",[94,137000,137001,137003,137005,137007,137009,137011,137013],{"class":96,"line":15},[94,137002,70873],{"class":153},[94,137004,51414],{"class":104},[94,137006,322],{"class":153},[94,137008,51469],{"class":100},[94,137010,51498],{"class":153},[94,137012,130109],{"class":153},[94,137014,1271],{"class":104},[94,137016,137017],{"class":96,"line":1160},[94,137018,1546],{"class":104},[1443,137020],{"style":126385,"src":137021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[40,137023,134],{},[1112,137025,137026,137029,137032,137035],{},[51,137027,137028],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[51,137030,137031],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[51,137033,137034],{},"属性选择器也可以选择出来自定义的属性",[51,137036,137037,137039],{},[254,137038,9007],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[21980,137041,137043],{"id":137042},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1443,137045],{"style":126385,"src":137046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[48,137048,137049],{},[51,137050,137051],{},"fist-child",[85,137053,137055],{"className":126529,"code":137054,"language":126531,"meta":14,"style":14},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[91,137056,137057,137062,137077,137097,137115],{"__ignoreMap":14},[94,137058,137059],{"class":96,"line":97},[94,137060,137061],{"class":163},"\u002F* 属性选择器 *\u002F\n",[94,137063,137064,137066,137068,137070,137072,137074],{"class":96,"line":15},[94,137065,53798],{"class":51277},[94,137067,995],{"class":104},[94,137069,103084],{"class":1944},[94,137071,150],{"class":100},[94,137073,62676],{"class":209},[94,137075,137076],{"class":104},"] { }\n",[94,137078,137079,137081,137083,137085,137088,137091,137094],{"class":96,"line":1160},[94,137080,53798],{"class":51277},[94,137082,995],{"class":104},[94,137084,14676],{"class":1944},[94,137086,137087],{"class":100},"^=",[94,137089,137090],{"class":209},"\"icon\"",[94,137092,137093],{"class":104},"] { }  ",[94,137095,137096],{"class":163},"\u002F* 以 icon 开头 *\u002F\n",[94,137098,137099,137101,137103,137105,137108,137110,137112],{"class":96,"line":1175},[94,137100,53798],{"class":51277},[94,137102,995],{"class":104},[94,137104,14676],{"class":1944},[94,137106,137107],{"class":100},"$=",[94,137109,137090],{"class":209},[94,137111,137093],{"class":104},[94,137113,137114],{"class":163},"\u002F* 以 icon 结尾 *\u002F\n",[94,137116,137117,137119,137121,137123,137126,137128,137130],{"class":96,"line":1181},[94,137118,53798],{"class":51277},[94,137120,995],{"class":104},[94,137122,14676],{"class":1944},[94,137124,137125],{"class":100},"*=",[94,137127,137090],{"class":209},[94,137129,137093],{"class":104},[94,137131,137132],{"class":163},"\u002F* 包含 icon *\u002F\n",[40,137134,137135],{},"ul的第一个儿子文本为红色",[40,137137,137138],{},"一定要在冒号前加空格，不然就是选中所有的了",[85,137140,137142],{"className":126529,"code":137141,"language":126531,"meta":14,"style":14},".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",[91,137143,137144,137150,137160,137164,137168,137173,137186,137199,137215,137232,137249],{"__ignoreMap":14},[94,137145,137146,137148],{"class":96,"line":97},[94,137147,126820],{"class":1944},[94,137149,15554],{"class":104},[94,137151,137152,137154,137156,137158],{"class":96,"line":15},[94,137153,70882],{"class":153},[94,137155,51414],{"class":104},[94,137157,57398],{"class":153},[94,137159,1271],{"class":104},[94,137161,137162],{"class":96,"line":1160},[94,137163,1546],{"class":104},[94,137165,137166],{"class":96,"line":1175},[94,137167,135990],{"class":104},[94,137169,137170],{"class":96,"line":1181},[94,137171,137172],{"class":163},"\u002F* 结构伪类选择器 *\u002F\n",[94,137174,137175,137177,137180,137183],{"class":96,"line":1195},[94,137176,51],{"class":51277},[94,137178,137179],{"class":1944},":first-child",[94,137181,137182],{"class":104}," { }           ",[94,137184,137185],{"class":163},"\u002F* 第一个 *\u002F\n",[94,137187,137188,137190,137193,137196],{"class":96,"line":1201},[94,137189,51],{"class":51277},[94,137191,137192],{"class":1944},":last-child",[94,137194,137195],{"class":104}," { }            ",[94,137197,137198],{"class":163},"\u002F* 最后一个 *\u002F\n",[94,137200,137201,137203,137205,137207,137209,137212],{"class":96,"line":1292},[94,137202,51],{"class":51277},[94,137204,129443],{"class":1944},[94,137206,105],{"class":104},[94,137208,182],{"class":153},[94,137210,137211],{"class":104},") { }          ",[94,137213,137214],{"class":163},"\u002F* 第2个 *\u002F\n",[94,137216,137217,137219,137221,137223,137226,137229],{"class":96,"line":1298},[94,137218,51],{"class":51277},[94,137220,129443],{"class":1944},[94,137222,105],{"class":104},[94,137224,137225],{"class":153},"2n",[94,137227,137228],{"class":104},") { }         ",[94,137230,137231],{"class":163},"\u002F* 偶数 *\u002F\n",[94,137233,137234,137236,137238,137240,137243,137246],{"class":96,"line":1310},[94,137235,51],{"class":51277},[94,137237,129443],{"class":1944},[94,137239,105],{"class":104},[94,137241,137242],{"class":153},"2n+1",[94,137244,137245],{"class":104},") { }       ",[94,137247,137248],{"class":163},"\u002F* 奇数 *\u002F\n",[94,137250,137251,137253,137255,137257,137260,137262],{"class":96,"line":1593},[94,137252,51],{"class":51277},[94,137254,129443],{"class":1944},[94,137256,105],{"class":104},[94,137258,137259],{"class":153},"-n+3",[94,137261,137245],{"class":104},[94,137263,137264],{"class":163},"\u002F* 前3个 *\u002F\n",[51588,137266,137269],{"className":137267},[137268],"example","\n  示例内容\n",[40,137271,137272],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1112,137274,137275],{},[51,137276,137277,137280],{},[91,137278,137279],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[40,137282,137283],{},"也就是说它选择的是熊大",[48,137285,137286],{"start":1195},[51,137287,137288],{},"权重",[85,137290,137292],{"className":126529,"code":137291,"language":126531,"meta":14,"style":14},"\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",[91,137293,137294,137298,137308,137318,137332,137346,137360],{"__ignoreMap":14},[94,137295,137296],{"class":96,"line":97},[94,137297,137172],{"class":163},[94,137299,137300,137302,137304,137306],{"class":96,"line":15},[94,137301,51],{"class":51277},[94,137303,137179],{"class":1944},[94,137305,137182],{"class":104},[94,137307,137185],{"class":163},[94,137309,137310,137312,137314,137316],{"class":96,"line":1160},[94,137311,51],{"class":51277},[94,137313,137192],{"class":1944},[94,137315,137195],{"class":104},[94,137317,137198],{"class":163},[94,137319,137320,137322,137324,137326,137328,137330],{"class":96,"line":1175},[94,137321,51],{"class":51277},[94,137323,129443],{"class":1944},[94,137325,105],{"class":104},[94,137327,182],{"class":153},[94,137329,137211],{"class":104},[94,137331,137214],{"class":163},[94,137333,137334,137336,137338,137340,137342,137344],{"class":96,"line":1181},[94,137335,51],{"class":51277},[94,137337,129443],{"class":1944},[94,137339,105],{"class":104},[94,137341,137225],{"class":153},[94,137343,137228],{"class":104},[94,137345,137231],{"class":163},[94,137347,137348,137350,137352,137354,137356,137358],{"class":96,"line":1195},[94,137349,51],{"class":51277},[94,137351,129443],{"class":1944},[94,137353,105],{"class":104},[94,137355,137242],{"class":153},[94,137357,137245],{"class":104},[94,137359,137248],{"class":163},[94,137361,137362,137364,137366,137368,137370,137372],{"class":96,"line":1201},[94,137363,51],{"class":51277},[94,137365,129443],{"class":1944},[94,137367,105],{"class":104},[94,137369,137259],{"class":153},[94,137371,137245],{"class":104},[94,137373,137264],{"class":163},[40,137375,137376],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[21980,137378,137380],{"id":137379},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[40,137382,137383],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1443,137385],{"style":126385,"src":137386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[48,137388,137389],{},[51,137390,134],{},[1112,137392,137393,137396,137399,137402,137405,137408],{},[51,137394,137395],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[51,137397,137398],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[51,137400,137401],{},"语法： element::before {}",[51,137403,137404],{},"before 和 after 必须有 content 属性",[51,137406,137407],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[51,137409,137410],{},"伪元素选择器和标签选择器一样，权重为 1",[48,137412,137413],{"start":15},[51,137414,137415],{},"实例",[85,137417,137418],{"className":126529,"code":137291,"language":126531,"meta":14,"style":14},[91,137419,137420,137424,137434,137444,137458,137472,137486],{"__ignoreMap":14},[94,137421,137422],{"class":96,"line":97},[94,137423,137172],{"class":163},[94,137425,137426,137428,137430,137432],{"class":96,"line":15},[94,137427,51],{"class":51277},[94,137429,137179],{"class":1944},[94,137431,137182],{"class":104},[94,137433,137185],{"class":163},[94,137435,137436,137438,137440,137442],{"class":96,"line":1160},[94,137437,51],{"class":51277},[94,137439,137192],{"class":1944},[94,137441,137195],{"class":104},[94,137443,137198],{"class":163},[94,137445,137446,137448,137450,137452,137454,137456],{"class":96,"line":1175},[94,137447,51],{"class":51277},[94,137449,129443],{"class":1944},[94,137451,105],{"class":104},[94,137453,182],{"class":153},[94,137455,137211],{"class":104},[94,137457,137214],{"class":163},[94,137459,137460,137462,137464,137466,137468,137470],{"class":96,"line":1181},[94,137461,51],{"class":51277},[94,137463,129443],{"class":1944},[94,137465,105],{"class":104},[94,137467,137225],{"class":153},[94,137469,137228],{"class":104},[94,137471,137231],{"class":163},[94,137473,137474,137476,137478,137480,137482,137484],{"class":96,"line":1195},[94,137475,51],{"class":51277},[94,137477,129443],{"class":1944},[94,137479,105],{"class":104},[94,137481,137242],{"class":153},[94,137483,137245],{"class":104},[94,137485,137248],{"class":163},[94,137487,137488,137490,137492,137494,137496,137498],{"class":96,"line":1201},[94,137489,51],{"class":51277},[94,137491,129443],{"class":1944},[94,137493,105],{"class":104},[94,137495,137259],{"class":153},[94,137497,137245],{"class":104},[94,137499,137264],{"class":163},[1443,137501],{"style":126385,"src":137502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[48,137504,137505],{"start":1160},[51,137506,137507],{},"使用场景1",[1443,137509],{"style":126385,"src":137510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[40,137512,137513],{},"不需要再加盒子来整红色那部分了",[85,137515,137517],{"className":126529,"code":137516,"language":126531,"meta":14,"style":14},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[91,137518,137519,137524,137533,137544,137554,137558,137567,137578,137588],{"__ignoreMap":14},[94,137520,137521],{"class":96,"line":97},[94,137522,137523],{"class":163},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[94,137525,137526,137528,137531],{"class":96,"line":15},[94,137527,51588],{"class":51277},[94,137529,137530],{"class":1944},"::before",[94,137532,15554],{"class":104},[94,137534,137535,137538,137540,137542],{"class":96,"line":1160},[94,137536,137537],{"class":153},"  content",[94,137539,51414],{"class":104},[94,137541,7634],{"class":209},[94,137543,1271],{"class":104},[94,137545,137546,137548,137550,137552],{"class":96,"line":1175},[94,137547,128145],{"class":153},[94,137549,51414],{"class":104},[94,137551,60846],{"class":153},[94,137553,1271],{"class":104},[94,137555,137556],{"class":96,"line":1181},[94,137557,1546],{"class":104},[94,137559,137560,137562,137565],{"class":96,"line":1195},[94,137561,51588],{"class":51277},[94,137563,137564],{"class":1944},"::after",[94,137566,15554],{"class":104},[94,137568,137569,137571,137573,137576],{"class":96,"line":1201},[94,137570,137537],{"class":153},[94,137572,51414],{"class":104},[94,137574,137575],{"class":209},"\"→\"",[94,137577,1271],{"class":104},[94,137579,137580,137582,137584,137586],{"class":96,"line":1292},[94,137581,70882],{"class":153},[94,137583,51414],{"class":104},[94,137585,62047],{"class":153},[94,137587,1271],{"class":104},[94,137589,137590],{"class":96,"line":1298},[94,137591,1546],{"class":104},[1443,137593],{"style":126385,"src":137594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[40,137596,137597],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1443,137599],{"style":126385,"src":137600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[40,137602,137603],{},"但是在引用时需要先转义一下",[40,137605,137606],{},"content='\\e930'",[48,137608,137609],{"start":1175},[51,137610,137611],{},"使用场景2",[40,137613,137614],{},"仿土豆效果",[40,137616,137617],{},"通过使用伪元素选择器可以减少body中盒子的数量",[85,137619,137620],{"className":126529,"code":137516,"language":126531,"meta":14,"style":14},[91,137621,137622,137626,137634,137644,137654,137658,137666,137676,137686],{"__ignoreMap":14},[94,137623,137624],{"class":96,"line":97},[94,137625,137523],{"class":163},[94,137627,137628,137630,137632],{"class":96,"line":15},[94,137629,51588],{"class":51277},[94,137631,137530],{"class":1944},[94,137633,15554],{"class":104},[94,137635,137636,137638,137640,137642],{"class":96,"line":1160},[94,137637,137537],{"class":153},[94,137639,51414],{"class":104},[94,137641,7634],{"class":209},[94,137643,1271],{"class":104},[94,137645,137646,137648,137650,137652],{"class":96,"line":1175},[94,137647,128145],{"class":153},[94,137649,51414],{"class":104},[94,137651,60846],{"class":153},[94,137653,1271],{"class":104},[94,137655,137656],{"class":96,"line":1181},[94,137657,1546],{"class":104},[94,137659,137660,137662,137664],{"class":96,"line":1195},[94,137661,51588],{"class":51277},[94,137663,137564],{"class":1944},[94,137665,15554],{"class":104},[94,137667,137668,137670,137672,137674],{"class":96,"line":1201},[94,137669,137537],{"class":153},[94,137671,51414],{"class":104},[94,137673,137575],{"class":209},[94,137675,1271],{"class":104},[94,137677,137678,137680,137682,137684],{"class":96,"line":1292},[94,137679,70882],{"class":153},[94,137681,51414],{"class":104},[94,137683,62047],{"class":153},[94,137685,1271],{"class":104},[94,137687,137688],{"class":96,"line":1298},[94,137689,1546],{"class":104},[1443,137691],{"style":126385,"src":137692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[48,137694,137695],{"start":1181},[51,137696,137697],{},"使用场景3",[40,137699,137700],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[85,137702,137704],{"className":126529,"code":137703,"language":126531,"meta":14,"style":14},".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",[91,137705,137706,137712,137722,137726,137730,137734,137742,137752,137762,137766,137774,137784,137794],{"__ignoreMap":14},[94,137707,137708,137710],{"class":96,"line":97},[94,137709,130377],{"class":1944},[94,137711,15554],{"class":104},[94,137713,137714,137716,137718,137720],{"class":96,"line":15},[94,137715,131009],{"class":153},[94,137717,51414],{"class":104},[94,137719,23718],{"class":153},[94,137721,1271],{"class":104},[94,137723,137724],{"class":96,"line":1160},[94,137725,1546],{"class":104},[94,137727,137728],{"class":96,"line":1175},[94,137729,135990],{"class":104},[94,137731,137732],{"class":96,"line":1181},[94,137733,137523],{"class":163},[94,137735,137736,137738,137740],{"class":96,"line":1195},[94,137737,51588],{"class":51277},[94,137739,137530],{"class":1944},[94,137741,15554],{"class":104},[94,137743,137744,137746,137748,137750],{"class":96,"line":1201},[94,137745,137537],{"class":153},[94,137747,51414],{"class":104},[94,137749,7634],{"class":209},[94,137751,1271],{"class":104},[94,137753,137754,137756,137758,137760],{"class":96,"line":1292},[94,137755,128145],{"class":153},[94,137757,51414],{"class":104},[94,137759,60846],{"class":153},[94,137761,1271],{"class":104},[94,137763,137764],{"class":96,"line":1298},[94,137765,1546],{"class":104},[94,137767,137768,137770,137772],{"class":96,"line":1310},[94,137769,51588],{"class":51277},[94,137771,137564],{"class":1944},[94,137773,15554],{"class":104},[94,137775,137776,137778,137780,137782],{"class":96,"line":1593},[94,137777,137537],{"class":153},[94,137779,51414],{"class":104},[94,137781,137575],{"class":209},[94,137783,1271],{"class":104},[94,137785,137786,137788,137790,137792],{"class":96,"line":1598},[94,137787,70882],{"class":153},[94,137789,51414],{"class":104},[94,137791,62047],{"class":153},[94,137793,1271],{"class":104},[94,137795,137796],{"class":96,"line":1604},[94,137797,1546],{"class":104},[40,137799,137800],{},"div {\nmargin: 0 auto;\n}",[85,137802,137805],{"className":137803,"code":137804,"language":5169},[5167],"\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",[91,137806,137804],{"__ignoreMap":14},[40,137808,137809],{},"如果想让多个元素都发生变化",[40,137811,137812],{},"不能如下操作：",[40,137814,137815],{},"transition: width 2s ease 0.5s;",[40,137817,137818],{},"transition: height 2s ease 0.5s;不对！！！",[40,137820,137821],{},"上方会样式冲突，导致不显示任何过渡效果",[40,137823,137824],{},"使用如下：加逗号隔开",[40,137826,137827],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[40,137829,137830],{},"transition all 2s ease;",[65,137832,137834],{"id":137833},"_1426-过渡练习","14.2.6 过渡练习",[48,137836,137837],{},[51,137838,137839],{},"进度条",[1443,137841],{"style":126385,"src":137842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[85,137844,137846],{"className":126529,"code":137845,"language":126531,"meta":14,"style":14},"div {\n  transition: all 0.3s ease;\n}\n",[91,137847,137848,137854,137872],{"__ignoreMap":14},[94,137849,137850,137852],{"class":96,"line":97},[94,137851,51588],{"class":51277},[94,137853,15554],{"class":104},[94,137855,137856,137859,137861,137863,137866,137868,137870],{"class":96,"line":15},[94,137857,137858],{"class":153},"  transition",[94,137860,51414],{"class":104},[94,137862,28104],{"class":153},[94,137864,137865],{"class":153}," 0.3",[94,137867,800],{"class":100},[94,137869,78657],{"class":153},[94,137871,1271],{"class":104},[94,137873,137874],{"class":96,"line":1160},[94,137875,1546],{"class":104},[48,137877,137878],{"start":15},[51,137879,137880],{},"小米logo",[40,137882,137883],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[85,137885,137887],{"className":126529,"code":137886,"language":126531,"meta":14,"style":14},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[91,137888,137889,137894,137900,137916,137921],{"__ignoreMap":14},[94,137890,137891],{"class":96,"line":97},[94,137892,137893],{"class":163},"\u002F* CSS3 过渡 *\u002F\n",[94,137895,137896,137898],{"class":96,"line":15},[94,137897,51588],{"class":51277},[94,137899,15554],{"class":104},[94,137901,137902,137904,137906,137908,137910,137912,137914],{"class":96,"line":1160},[94,137903,137858],{"class":153},[94,137905,51414],{"class":104},[94,137907,28104],{"class":153},[94,137909,137865],{"class":153},[94,137911,800],{"class":100},[94,137913,78657],{"class":153},[94,137915,1271],{"class":104},[94,137917,137918],{"class":96,"line":1175},[94,137919,137920],{"class":163},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[94,137922,137923],{"class":96,"line":1181},[94,137924,1546],{"class":104},[40,137926,137927],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5108,137929,137930],{},"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":14,"searchDepth":15,"depth":15,"links":137932},[137933,137938],{"id":136263,"depth":15,"text":136264,"children":137934},[137935,137936,137937],{"id":136267,"depth":1160,"text":136268},{"id":136344,"depth":1160,"text":136345},{"id":136675,"depth":1160,"text":136676},{"id":136966,"depth":15,"text":136967,"children":137939},[137940,137941],{"id":136970,"depth":1160,"text":136971},{"id":137833,"depth":1160,"text":137834},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136255,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137948,"title":137949,"body":137950,"description":17,"extension":18,"meta":139694,"navigation":20,"path":139695,"seo":139696,"stem":139697,"__hash__":139698},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137951,"toc":139675},[137952,137955,137959,137962,137968,137974,137978,137980,137983,137986,137989,137992,137995,137998,138001,138005,138009,138012,138015,138018,138022,138025,138028,138033,138036,138039,138042,138046,138049,138058,138061,138064,138068,138071,138074,138079,138086,138100,138108,138115,138120,138123,138126,138129,138136,138140,138146,138152,138155,138158,138163,138169,138171,138179,138184,138187,138193,138195,138200,138205,138208,138210,138215,138218,138223,138228,138262,138266,138270,138273,138277,138280,138366,138369,138406,138409,138445,138449,138454,138467,138521,138523,138551,138553,138581,138587,138601,138603,138647,138649,138693,138696,138703,138714,138716,138743,138745,138771,138778,138794,138796,138890,138892,138986,138993,138996,139001,139007,139081,139084,139086,139122,139124,139160,139163,139170,139189,139192,139195,139197,139222,139224,139248,139251,139254,139284,139288,139291,139354,139356,139422,139424,139488,139491,139523,139525,139551,139553,139579,139582,139613,139615,139641,139643,139669,139672],[10,137953,137949],{"id":137954},"_15-品优购项目上篇-搭建与公共模块",[35,137956,137958],{"id":137957},"_151-项目规划","15.1 项目规划",[1443,137960],{"style":126385,"src":137961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[40,137963,137964,137967],{},[254,137965,137966],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[40,137969,137970,137973],{},[254,137971,137972],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[35,137975,137977],{"id":137976},"_152-项目介绍","15.2 项目介绍",[40,137979,137966],{},[1443,137981],{"style":126385,"src":137982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[40,137984,137985],{},"主页：",[1443,137987],{"style":126385,"src":137988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[40,137990,137991],{},"列表页：",[1443,137993],{"style":126385,"src":137994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[40,137996,137997],{},"注册页：",[1443,137999],{"style":126385,"src":138000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[35,138002,138004],{"id":138003},"_153-项目搭建工作","15.3 项目搭建工作",[65,138006,138008],{"id":138007},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1443,138010],{"style":126385,"src":138011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[40,138013,138014],{},"经常更换的图片要放到upload文件夹中",[40,138016,138017],{},"不经常换的放到images文件夹中",[65,138019,138021],{"id":138020},"_1532-创建文件如下","15.3.2 创建文件如下",[1443,138023],{"style":126385,"src":138024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1443,138026],{"style":126385,"src":138027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[40,138029,138030],{},[254,138031,138032],{},"初始化样式：",[40,138034,138035],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[40,138037,138038],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[40,138040,138041],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[65,138043,138045],{"id":138044},"_1533-项目模块化开发","15.3.3 项目模块化开发",[40,138047,138048],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[40,138050,138051,138052,138057],{},"这里最典型的应用就是 ",[254,138053,138054],{},[91,138055,138056],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1443,138059],{"style":126385,"src":138060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[40,138062,138063],{},"通过link方法来引入",[65,138065,138067],{"id":138066},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1443,138069],{"style":126385,"src":138070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[40,138072,138073],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[48,138075,138076],{},[51,138077,138078],{},"制作favicon图标",[40,138080,138081,138082,138085],{},"①把品优购图标切成 ",[91,138083,138084],{},"png"," 图片",[40,138087,138088,138089,138091,138092,138095,138096],{},"②把 ",[91,138090,138084],{}," 图片转换为 ",[91,138093,138094],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[343,138097,138098],{"href":138098,"rel":138099},"http:\u002F\u002Fwww.bitbug.net\u002F",[23847],[48,138101,138102,138105],{"start":15},[51,138103,138104],{},"favicon图标放到网站根目录下",[51,138106,138107],{},"HTML页面引入favicon",[40,138109,138110,138111,138114],{},"在html 页面里面的 ",[91,138112,138113],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[40,138116,138117],{},[91,138118,138119],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[40,138121,138122],{},"复制这行代码或者在生成这个的网站进行复制",[1443,138124],{"style":126385,"src":138125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[40,138127,138128],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[40,138130,138131,138132],{},"例如:",[343,138133,138134],{"href":138134,"rel":138135},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23847],[65,138137,138139],{"id":138138},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[40,138141,138142,138145],{},[254,138143,138144],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[40,138147,138148,138151],{},[254,138149,138150],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[40,138153,138154],{},"页面必须有三个标签用来符合 SEO 优化",[1443,138156],{"style":126385,"src":138157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[48,138159,138160],{},[51,138161,138162],{},"title网站标题",[40,138164,138165,138168],{},[254,138166,138167],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[40,138170,68767],{},[1112,138172,138173,138176],{},[51,138174,138175],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[51,138177,138178],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[48,138180,138181],{"start":15},[51,138182,138183],{},"description网站描述",[40,138185,138186],{},"简要说明我们网站主要是做什么的",[40,138188,138189,138192],{},[254,138190,138191],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[40,138194,68767],{},[40,138196,138197],{},[91,138198,138199],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[48,138201,138202],{"start":1160},[51,138203,138204],{},"keywords关键词",[40,138206,138207],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[40,138209,68767],{},[40,138211,138212],{},[91,138213,138214],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[40,138216,138217],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[40,138219,138220],{},[254,138221,138222],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[48,138224,138225],{"start":1175},[51,138226,138227],{},"代码总结",[85,138229,138230],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[91,138231,138232,138236,138250,138254],{"__ignoreMap":14},[94,138233,138234],{"class":96,"line":97},[94,138235,130640],{"class":163},[94,138237,138238,138240,138242,138244,138246,138248],{"class":96,"line":15},[94,138239,1015],{"class":104},[94,138241,51588],{"class":51277},[94,138243,53463],{"class":1944},[94,138245,150],{"class":104},[94,138247,130653],{"class":209},[94,138249,51284],{"class":104},[94,138251,138252],{"class":96,"line":1160},[94,138253,130660],{"class":104},[94,138255,138256,138258,138260],{"class":96,"line":1175},[94,138257,51762],{"class":104},[94,138259,51588],{"class":51277},[94,138261,51284],{"class":104},[35,138263,138265],{"id":138264},"_154-项目公共部分制作","15.4 项目公共部分制作",[65,138267,138269],{"id":138268},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1443,138271],{"style":126385,"src":138272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[65,138274,138276],{"id":138275},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[40,138278,138279],{},"布局思路：",[1112,138281,138282,138285,138288,138310,138343],{},[51,138283,138284],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[51,138286,138287],{},"里面包含版心的盒子",[51,138289,138290,138291],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1112,138292,138293,138301,138307],{},[51,138294,138295,138296,21482,138298,138300],{},"1 号盒子 里面包含一个",[91,138297,1112],{},[91,138299,1112],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[51,138302,138303,138304,138306],{},"里面的内容是水平排列，所以需要给",[91,138305,51],{},"设置浮动",[51,138308,138309],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[51,138311,138312,138313],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1112,138314,138315,138329,138334],{},[51,138316,138317,138318,21482,138320,138322,138323,138325,138326,138328],{},"2 号盒子 里面包含一个",[91,138319,1112],{},[91,138321,1112],{},"包裹",[91,138324,51],{},"，中间的",[91,138327,1026],{},"可以用样式去设置，也可以用字符 |",[51,138330,138331,138332,138306],{},"里面内容水平排列，给",[91,138333,51],{},[51,138335,138336,138337,138339,138340,138342],{},"找到里面所有偶数的 ",[91,138338,51],{}," 设置样式（偶数的 ",[91,138341,51],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[51,138344,138345,138346],{},"需要用到字体图标",[1112,138347,138348,138354,138357,138360,138363],{},[51,138349,138350,138351],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[91,138352,138353],{},"arrow-icon",[51,138355,138356],{},"先要引入字体图片的资源",[51,138358,138359],{},"在样式里面利用 font-face 来进行声明",[51,138361,138362],{},"在伪元素的 content属性设置 图标的编码",[51,138364,138365],{},"给伪元素设置font-family属性",[40,138367,138368],{},"结构实例代码：",[85,138370,138372],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},"div::before {\n  content: \"\";\n  display: block;\n}\n",[91,138373,138374,138382,138392,138402],{"__ignoreMap":14},[94,138375,138376,138378,138380],{"class":96,"line":97},[94,138377,51588],{"class":51277},[94,138379,137530],{"class":1944},[94,138381,15554],{"class":104},[94,138383,138384,138386,138388,138390],{"class":96,"line":15},[94,138385,137537],{"class":153},[94,138387,51414],{"class":104},[94,138389,7634],{"class":209},[94,138391,1271],{"class":104},[94,138393,138394,138396,138398,138400],{"class":96,"line":1160},[94,138395,128145],{"class":153},[94,138397,51414],{"class":104},[94,138399,60846],{"class":153},[94,138401,1271],{"class":104},[94,138403,138404],{"class":96,"line":1175},[94,138405,1546],{"class":104},[40,138407,138408],{},"样式实例代码：",[85,138410,138411],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},[91,138412,138413,138421,138431,138441],{"__ignoreMap":14},[94,138414,138415,138417,138419],{"class":96,"line":97},[94,138416,51588],{"class":51277},[94,138418,137530],{"class":1944},[94,138420,15554],{"class":104},[94,138422,138423,138425,138427,138429],{"class":96,"line":15},[94,138424,137537],{"class":153},[94,138426,51414],{"class":104},[94,138428,7634],{"class":209},[94,138430,1271],{"class":104},[94,138432,138433,138435,138437,138439],{"class":96,"line":1160},[94,138434,128145],{"class":153},[94,138436,51414],{"class":104},[94,138438,60846],{"class":153},[94,138440,1271],{"class":104},[94,138442,138443],{"class":96,"line":1175},[94,138444,1546],{"class":104},[65,138446,138448],{"id":138447},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1112,138450,138451],{},[51,138452,138453],{},"header 盒子必须要有高度",[40,138455,138456,138457,138459,138460],{},"1 号盒子是 ",[91,138458,131541],{}," 标志定位，在正常开发过程中， ",[254,138461,138462,138463,138466],{},"logo的布局其实是有讲究的，需要进行 ",[91,138464,138465],{},"logoSEO","的优化 （★★★）",[1112,138468,138469,138477,138485,138512],{},[51,138470,138471,138473,138474,138476],{},[91,138472,131541],{}," 里面首先放一个 ",[91,138475,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[51,138478,138479,138481,138482,138484],{},[91,138480,10],{}," 里面再放一个链接，可以返回首页的，把 ",[91,138483,131541],{}," 的背景图片给链接即可",[51,138486,138487,138488],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1112,138489,138490,138505],{},[51,138491,138492,138493,138496,138497,138500,138501,138504],{},"方法1：",[91,138494,138495],{},"text-indent"," 移到盒子外面（",[91,138498,138499],{},"text-indent: -9999px",") ，然后 ",[91,138502,138503],{},"overflow:hidden"," ，淘宝的做法",[51,138506,138507,138508,138511],{},"方法2：直接给 ",[91,138509,138510],{},"font-size: 0;"," 就看不到文字了，京东的做法",[51,138513,138514,138515,138517,138518,138520],{},"最后给链接一个 ",[91,138516,51384],{}," 属性，这样鼠标放到 ",[91,138519,131541],{}," 上就可以看到提示文字了",[40,138522,138368],{},[85,138524,138525],{"className":127276,"code":131762,"language":127278,"meta":14,"style":14},[91,138526,138527],{"__ignoreMap":14},[94,138528,138529,138531,138533,138535,138537,138539,138541,138543,138545,138547,138549],{"class":96,"line":97},[94,138530,1015],{"class":104},[94,138532,343],{"class":51277},[94,138534,61034],{"class":1944},[94,138536,150],{"class":104},[94,138538,131777],{"class":209},[94,138540,131780],{"class":1944},[94,138542,150],{"class":104},[94,138544,131785],{"class":209},[94,138546,131788],{"class":104},[94,138548,343],{"class":51277},[94,138550,51284],{"class":104},[40,138552,138408],{},[85,138554,138555],{"className":127276,"code":131762,"language":127278,"meta":14,"style":14},[91,138556,138557],{"__ignoreMap":14},[94,138558,138559,138561,138563,138565,138567,138569,138571,138573,138575,138577,138579],{"class":96,"line":97},[94,138560,1015],{"class":104},[94,138562,343],{"class":51277},[94,138564,61034],{"class":1944},[94,138566,150],{"class":104},[94,138568,131777],{"class":209},[94,138570,131780],{"class":1944},[94,138572,150],{"class":104},[94,138574,131785],{"class":209},[94,138576,131788],{"class":104},[94,138578,343],{"class":51277},[94,138580,51284],{"class":104},[40,138582,138583,138584,138586],{},"2 号盒子是 ",[91,138585,131554],{}," 搜索模块定位",[1112,138588,138589,138592,138595,138598],{},[51,138590,138591],{},"search盒子利用定位的方式放在对应的位置",[51,138593,138594],{},"search盒子设置绝对定位，header盒子设置相对定位",[51,138596,138597],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[51,138599,138600],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[40,138602,138368],{},[85,138604,138605],{"className":126529,"code":131849,"language":126531,"meta":14,"style":14},[91,138606,138607,138629,138633,138643],{"__ignoreMap":14},[94,138608,138609,138611,138613,138615,138617,138619,138621,138623,138625,138627],{"class":96,"line":97},[94,138610,51588],{"class":51277},[94,138612,12417],{"class":104},[94,138614,40],{"class":51277},[94,138616,12417],{"class":104},[94,138618,10],{"class":51277},[94,138620,12417],{"class":104},[94,138622,1112],{"class":51277},[94,138624,12417],{"class":104},[94,138626,51],{"class":51277},[94,138628,15554],{"class":104},[94,138630,138631],{"class":96,"line":15},[94,138632,131878],{"class":163},[94,138634,138635,138637,138639,138641],{"class":96,"line":1160},[94,138636,128145],{"class":153},[94,138638,51414],{"class":104},[94,138640,60846],{"class":153},[94,138642,1271],{"class":104},[94,138644,138645],{"class":96,"line":1175},[94,138646,1546],{"class":104},[40,138648,138408],{},[85,138650,138651],{"className":126529,"code":131849,"language":126531,"meta":14,"style":14},[91,138652,138653,138675,138679,138689],{"__ignoreMap":14},[94,138654,138655,138657,138659,138661,138663,138665,138667,138669,138671,138673],{"class":96,"line":97},[94,138656,51588],{"class":51277},[94,138658,12417],{"class":104},[94,138660,40],{"class":51277},[94,138662,12417],{"class":104},[94,138664,10],{"class":51277},[94,138666,12417],{"class":104},[94,138668,1112],{"class":51277},[94,138670,12417],{"class":104},[94,138672,51],{"class":51277},[94,138674,15554],{"class":104},[94,138676,138677],{"class":96,"line":15},[94,138678,131878],{"class":163},[94,138680,138681,138683,138685,138687],{"class":96,"line":1160},[94,138682,128145],{"class":153},[94,138684,51414],{"class":104},[94,138686,60846],{"class":153},[94,138688,1271],{"class":104},[94,138690,138691],{"class":96,"line":1175},[94,138692,1546],{"class":104},[40,138694,138695],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[40,138697,138698,138699,138702],{},"3 号盒子是 ",[91,138700,138701],{},"hotwords"," 热词模块定位",[1112,138704,138705,138708,138711],{},[51,138706,138707],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[51,138709,138710],{},"给里面所有的a标签设置 左右10px的外边距",[51,138712,138713],{},"给第一个a标签设置文字变红色（#c81623）",[40,138715,138368],{},[85,138717,138719],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},"div {\n  margin: 0 auto;\n}\n",[91,138720,138721,138727,138739],{"__ignoreMap":14},[94,138722,138723,138725],{"class":96,"line":97},[94,138724,51588],{"class":51277},[94,138726,15554],{"class":104},[94,138728,138729,138731,138733,138735,138737],{"class":96,"line":15},[94,138730,70447],{"class":153},[94,138732,51414],{"class":104},[94,138734,296],{"class":153},[94,138736,51533],{"class":153},[94,138738,1271],{"class":104},[94,138740,138741],{"class":96,"line":1160},[94,138742,1546],{"class":104},[40,138744,138408],{},[85,138746,138747],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[91,138748,138749,138755,138767],{"__ignoreMap":14},[94,138750,138751,138753],{"class":96,"line":97},[94,138752,51588],{"class":51277},[94,138754,15554],{"class":104},[94,138756,138757,138759,138761,138763,138765],{"class":96,"line":15},[94,138758,70447],{"class":153},[94,138760,51414],{"class":104},[94,138762,296],{"class":153},[94,138764,51533],{"class":153},[94,138766,1271],{"class":104},[94,138768,138769],{"class":96,"line":1160},[94,138770,1546],{"class":104},[40,138772,138773,138774,138777],{},"4 号盒子是 ",[91,138775,138776],{},"shopcar"," 购物车模块",[1112,138779,138780,138785,138788,138791],{},[51,138781,123312,138782,138784],{},[91,138783,138776],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[51,138786,138787],{},"count 统计部分用绝对定位做",[51,138789,138790],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[51,138792,138793],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[40,138795,138368],{},[85,138797,138798],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},[91,138799,138800,138804,138818,138822,138836,138840,138854,138858,138872,138876],{"__ignoreMap":14},[94,138801,138802],{"class":96,"line":97},[94,138803,131968],{"class":163},[94,138805,138806,138808,138810,138812,138814,138816],{"class":96,"line":15},[94,138807,131973],{"class":1944},[94,138809,79784],{"class":104},[94,138811,128889],{"class":153},[94,138813,51414],{"class":104},[94,138815,131982],{"class":153},[94,138817,129459],{"class":104},[94,138819,138820],{"class":96,"line":1160},[94,138821,131989],{"class":163},[94,138823,138824,138826,138828,138830,138832,138834],{"class":96,"line":1175},[94,138825,131994],{"class":1944},[94,138827,79784],{"class":104},[94,138829,128889],{"class":153},[94,138831,51414],{"class":104},[94,138833,54741],{"class":153},[94,138835,129459],{"class":104},[94,138837,138838],{"class":96,"line":1181},[94,138839,132009],{"class":163},[94,138841,138842,138844,138846,138848,138850,138852],{"class":96,"line":1195},[94,138843,132014],{"class":1944},[94,138845,79784],{"class":104},[94,138847,128889],{"class":153},[94,138849,51414],{"class":104},[94,138851,54808],{"class":153},[94,138853,129459],{"class":104},[94,138855,138856],{"class":96,"line":1201},[94,138857,132029],{"class":163},[94,138859,138860,138862,138864,138866,138868,138870],{"class":96,"line":1292},[94,138861,132034],{"class":1944},[94,138863,79784],{"class":104},[94,138865,128889],{"class":153},[94,138867,51414],{"class":104},[94,138869,86210],{"class":153},[94,138871,129459],{"class":104},[94,138873,138874],{"class":96,"line":1298},[94,138875,132049],{"class":163},[94,138877,138878,138880,138882,138884,138886,138888],{"class":96,"line":1310},[94,138879,132054],{"class":1944},[94,138881,79784],{"class":104},[94,138883,128889],{"class":153},[94,138885,51414],{"class":104},[94,138887,132063],{"class":153},[94,138889,129459],{"class":104},[40,138891,138408],{},[85,138893,138894],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},[91,138895,138896,138900,138914,138918,138932,138936,138950,138954,138968,138972],{"__ignoreMap":14},[94,138897,138898],{"class":96,"line":97},[94,138899,131968],{"class":163},[94,138901,138902,138904,138906,138908,138910,138912],{"class":96,"line":15},[94,138903,131973],{"class":1944},[94,138905,79784],{"class":104},[94,138907,128889],{"class":153},[94,138909,51414],{"class":104},[94,138911,131982],{"class":153},[94,138913,129459],{"class":104},[94,138915,138916],{"class":96,"line":1160},[94,138917,131989],{"class":163},[94,138919,138920,138922,138924,138926,138928,138930],{"class":96,"line":1175},[94,138921,131994],{"class":1944},[94,138923,79784],{"class":104},[94,138925,128889],{"class":153},[94,138927,51414],{"class":104},[94,138929,54741],{"class":153},[94,138931,129459],{"class":104},[94,138933,138934],{"class":96,"line":1181},[94,138935,132009],{"class":163},[94,138937,138938,138940,138942,138944,138946,138948],{"class":96,"line":1195},[94,138939,132014],{"class":1944},[94,138941,79784],{"class":104},[94,138943,128889],{"class":153},[94,138945,51414],{"class":104},[94,138947,54808],{"class":153},[94,138949,129459],{"class":104},[94,138951,138952],{"class":96,"line":1201},[94,138953,132029],{"class":163},[94,138955,138956,138958,138960,138962,138964,138966],{"class":96,"line":1292},[94,138957,132034],{"class":1944},[94,138959,79784],{"class":104},[94,138961,128889],{"class":153},[94,138963,51414],{"class":104},[94,138965,86210],{"class":153},[94,138967,129459],{"class":104},[94,138969,138970],{"class":96,"line":1298},[94,138971,132049],{"class":163},[94,138973,138974,138976,138978,138980,138982,138984],{"class":96,"line":1310},[94,138975,132054],{"class":1944},[94,138977,79784],{"class":104},[94,138979,128889],{"class":153},[94,138981,51414],{"class":104},[94,138983,132063],{"class":153},[94,138985,129459],{"class":104},[65,138987,138989,138990,138992],{"id":138988},"_1544-nav导航模块制作","15.4.4 ",[91,138991,53690],{},"导航模块制作",[1443,138994],{"style":126385,"src":138995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[40,138997,138998,139000],{},[91,138999,53690],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[40,139002,139003,139004],{},"1 号盒子左侧浮动，",[91,139005,139006],{},"dropdown",[1112,139008,139009,139019,139027,139033,139041,139051,139059,139070],{},[51,139010,139011,139012,100995,139015,139018],{},"1号盒子有讲究，根据相关性 里面包含 ",[91,139013,139014],{},".dt",[91,139016,139017],{},".dd"," 两个盒子",[51,139020,139021,139023,139024,139026],{},[91,139022,139014],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[91,139025,139017],{}," 挤到下面去了",[51,139028,139029,139030,139032],{},"给 ",[91,139031,139017],{}," 盒子设置宽度 和 高度，以及背景颜色",[51,139034,139029,139035,139037,139038,120214],{},[91,139036,139017],{}," 盒子里面定义 无序列表 （",[91,139039,139040],{},"ul > li > a",[51,139042,139043,139044,139046,139047,139050],{},"每个 ",[91,139045,51],{}," 都有一个高度（",[91,139048,139049],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[51,139052,139029,139053,139055,139056,120214],{},[91,139054,51],{}," 里面的a设置文字大小（",[91,139057,139058],{},"14px",[51,139060,139029,139061,139063,139064,139066,139067,139069],{},[91,139062,51],{}," 设置 ",[91,139065,127690],{},"，当鼠标移入的时候，让",[91,139068,51],{},"的背景变成白色，让里面的文字变成红色",[51,139071,139072,139074,139075,139077,139078,139080],{},[91,139073,51],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[91,139076,51],{},"的右侧，那么给",[91,139079,51],{},"设置相对定位",[40,139082,139083],{},"一定要注意相关性",[40,139085,138368],{},[85,139087,139088],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},[91,139089,139090,139098,139108,139118],{"__ignoreMap":14},[94,139091,139092,139094,139096],{"class":96,"line":97},[94,139093,51588],{"class":51277},[94,139095,137530],{"class":1944},[94,139097,15554],{"class":104},[94,139099,139100,139102,139104,139106],{"class":96,"line":15},[94,139101,137537],{"class":153},[94,139103,51414],{"class":104},[94,139105,7634],{"class":209},[94,139107,1271],{"class":104},[94,139109,139110,139112,139114,139116],{"class":96,"line":1160},[94,139111,128145],{"class":153},[94,139113,51414],{"class":104},[94,139115,60846],{"class":153},[94,139117,1271],{"class":104},[94,139119,139120],{"class":96,"line":1175},[94,139121,1546],{"class":104},[40,139123,138408],{},[85,139125,139126],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},[91,139127,139128,139136,139146,139156],{"__ignoreMap":14},[94,139129,139130,139132,139134],{"class":96,"line":97},[94,139131,51588],{"class":51277},[94,139133,137530],{"class":1944},[94,139135,15554],{"class":104},[94,139137,139138,139140,139142,139144],{"class":96,"line":15},[94,139139,137537],{"class":153},[94,139141,51414],{"class":104},[94,139143,7634],{"class":209},[94,139145,1271],{"class":104},[94,139147,139148,139150,139152,139154],{"class":96,"line":1160},[94,139149,128145],{"class":153},[94,139151,51414],{"class":104},[94,139153,60846],{"class":153},[94,139155,1271],{"class":104},[94,139157,139158],{"class":96,"line":1175},[94,139159,1546],{"class":104},[40,139161,139162],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[40,139164,139165,139166,139169],{},"2 号盒子左侧浮动，",[91,139167,139168],{},"navitems"," 导航栏组",[1112,139171,139172,139177,139186],{},[51,139173,139174,139175],{},"里面结构是 ",[91,139176,139040],{},[51,139178,139179,139180,139182,139183,139185],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[91,139181,343],{},"左右的",[91,139184,30866],{},"把两侧撑开",[51,139187,139188],{},"让文字垂直居中（行高等于高度）",[1443,139190],{"style":126385,"src":139191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[40,139193,139194],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[40,139196,138368],{},[85,139198,139200],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},".box {\n  float: left;\n}\n",[91,139201,139202,139208,139218],{"__ignoreMap":14},[94,139203,139204,139206],{"class":96,"line":97},[94,139205,130377],{"class":1944},[94,139207,15554],{"class":104},[94,139209,139210,139212,139214,139216],{"class":96,"line":15},[94,139211,131009],{"class":153},[94,139213,51414],{"class":104},[94,139215,23718],{"class":153},[94,139217,1271],{"class":104},[94,139219,139220],{"class":96,"line":1160},[94,139221,1546],{"class":104},[40,139223,138408],{},[85,139225,139226],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[91,139227,139228,139234,139244],{"__ignoreMap":14},[94,139229,139230,139232],{"class":96,"line":97},[94,139231,130377],{"class":1944},[94,139233,15554],{"class":104},[94,139235,139236,139238,139240,139242],{"class":96,"line":15},[94,139237,131009],{"class":153},[94,139239,51414],{"class":104},[94,139241,23718],{"class":153},[94,139243,1271],{"class":104},[94,139245,139246],{"class":96,"line":1160},[94,139247,1546],{"class":104},[40,139249,139250],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1443,139252],{"style":126385,"src":139253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[85,139255,139256],{"className":126529,"code":130686,"language":126531,"meta":14,"style":14},[91,139257,139258,139264,139280],{"__ignoreMap":14},[94,139259,139260,139262],{"class":96,"line":97},[94,139261,51588],{"class":51277},[94,139263,15554],{"class":104},[94,139265,139266,139268,139270,139272,139274,139276,139278],{"class":96,"line":15},[94,139267,70873],{"class":153},[94,139269,51414],{"class":104},[94,139271,322],{"class":153},[94,139273,51469],{"class":100},[94,139275,51498],{"class":153},[94,139277,129921],{"class":153},[94,139279,1271],{"class":104},[94,139281,139282],{"class":96,"line":1160},[94,139283,1546],{"class":104},[65,139285,139287],{"id":139286},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1443,139289],{"style":126385,"src":139290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1112,139292,139293,139298,139303],{},[51,139294,139295,139297],{},[91,139296,131732],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[51,139299,139300,139302],{},[91,139301,131732],{}," 里面有一个大的版心",[51,139304,139305,139306,139309,139310],{},"版心里面包含 1 号盒子，",[91,139307,139308],{},"mod_service"," 是服务模块，mod 是模块的意思",[1112,139311,139312,139317,139330,139346,139351],{},[51,139313,139029,139314,139316],{},[91,139315,139308],{}," 设置高度（80px）和下边框",[51,139318,139319,139320,139323,139324,139326,139327,139329],{},"在里面定义 ",[91,139321,139322],{},"ul > li"," ,每个",[91,139325,51],{}," 宽度是300px 高度是 50px，给每个",[91,139328,51],{},"设置35px的左内边距",[51,139331,139332,139333,139335,139336,139338,139339,139341,139342,18392,139344,120214],{},"在每个",[91,139334,51],{},"里面，放一个 ",[91,139337,22892],{},"（里面放图标），一个",[91,139340,51588],{},"（里面放",[91,139343,51588],{},[91,139345,40],{},[51,139347,139029,139348,139350],{},[91,139349,22892],{},"设置浮动，让h5与这个div左右排列",[51,139352,139353],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[40,139355,138368],{},[85,139357,139359],{"className":126529,"code":139358,"language":126531,"meta":14,"style":14},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[91,139360,139361,139367,139379,139391,139418],{"__ignoreMap":14},[94,139362,139363,139365],{"class":96,"line":97},[94,139364,134286],{"class":1944},[94,139366,15554],{"class":104},[94,139368,139369,139371,139373,139375,139377],{"class":96,"line":15},[94,139370,70545],{"class":153},[94,139372,51414],{"class":104},[94,139374,805],{"class":153},[94,139376,51469],{"class":100},[94,139378,1271],{"class":104},[94,139380,139381,139383,139385,139387,139389],{"class":96,"line":1160},[94,139382,70765],{"class":153},[94,139384,51414],{"class":104},[94,139386,805],{"class":153},[94,139388,51469],{"class":100},[94,139390,1271],{"class":104},[94,139392,139393,139395,139397,139399,139401,139403,139405,139407,139410,139412,139414,139416],{"class":96,"line":1175},[94,139394,70588],{"class":153},[94,139396,51414],{"class":104},[94,139398,61703],{"class":153},[94,139400,105],{"class":104},[94,139402,134325],{"class":5198},[94,139404,13696],{"class":104},[94,139406,61713],{"class":153},[94,139408,139409],{"class":153}," -10",[94,139411,51469],{"class":100},[94,139413,134344],{"class":153},[94,139415,51469],{"class":100},[94,139417,1271],{"class":104},[94,139419,139420],{"class":96,"line":1181},[94,139421,1546],{"class":104},[40,139423,138408],{},[85,139425,139426],{"className":126529,"code":139358,"language":126531,"meta":14,"style":14},[91,139427,139428,139434,139446,139458,139484],{"__ignoreMap":14},[94,139429,139430,139432],{"class":96,"line":97},[94,139431,134286],{"class":1944},[94,139433,15554],{"class":104},[94,139435,139436,139438,139440,139442,139444],{"class":96,"line":15},[94,139437,70545],{"class":153},[94,139439,51414],{"class":104},[94,139441,805],{"class":153},[94,139443,51469],{"class":100},[94,139445,1271],{"class":104},[94,139447,139448,139450,139452,139454,139456],{"class":96,"line":1160},[94,139449,70765],{"class":153},[94,139451,51414],{"class":104},[94,139453,805],{"class":153},[94,139455,51469],{"class":100},[94,139457,1271],{"class":104},[94,139459,139460,139462,139464,139466,139468,139470,139472,139474,139476,139478,139480,139482],{"class":96,"line":1175},[94,139461,70588],{"class":153},[94,139463,51414],{"class":104},[94,139465,61703],{"class":153},[94,139467,105],{"class":104},[94,139469,134325],{"class":5198},[94,139471,13696],{"class":104},[94,139473,61713],{"class":153},[94,139475,139409],{"class":153},[94,139477,51469],{"class":100},[94,139479,134344],{"class":153},[94,139481,51469],{"class":100},[94,139483,1271],{"class":104},[94,139485,139486],{"class":96,"line":1181},[94,139487,1546],{"class":104},[40,139489,139490],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1112,139492,139493,139496,139502,139508,139520],{},[51,139494,139495],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[51,139497,139498,139499,120214],{},"里面的布局利用 自定义列表来实现（",[91,139500,139501],{},"dl > dt + dd",[51,139503,139029,139504,139507],{},[91,139505,139506],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[51,139509,139029,139510,139513,139514,18392,139516,139519],{},[91,139511,139512],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[91,139515,139512],{},[91,139517,139518],{},"dd","之间有些距离",[51,139521,139522],{},"最后一个 dl 结构和样式不一样，需要单独设置",[40,139524,138368],{},[85,139526,139527],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[91,139528,139529,139535,139547],{"__ignoreMap":14},[94,139530,139531,139533],{"class":96,"line":97},[94,139532,51588],{"class":51277},[94,139534,15554],{"class":104},[94,139536,139537,139539,139541,139543,139545],{"class":96,"line":15},[94,139538,70447],{"class":153},[94,139540,51414],{"class":104},[94,139542,296],{"class":153},[94,139544,51533],{"class":153},[94,139546,1271],{"class":104},[94,139548,139549],{"class":96,"line":1160},[94,139550,1546],{"class":104},[40,139552,138408],{},[85,139554,139555],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[91,139556,139557,139563,139575],{"__ignoreMap":14},[94,139558,139559,139561],{"class":96,"line":97},[94,139560,51588],{"class":51277},[94,139562,15554],{"class":104},[94,139564,139565,139567,139569,139571,139573],{"class":96,"line":15},[94,139566,70447],{"class":153},[94,139568,51414],{"class":104},[94,139570,296],{"class":153},[94,139572,51533],{"class":153},[94,139574,1271],{"class":104},[94,139576,139577],{"class":96,"line":1160},[94,139578,1546],{"class":104},[40,139580,139581],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1112,139583,139584,139593,139596,139607],{},[51,139585,139586,139587,139589,139590,139592],{},"分为上下两块，上面是 ",[91,139588,131749],{}," 友情链接，下面是 ",[91,139591,131742],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[51,139594,139595],{},"把内容分别复制到相应模块中",[51,139597,139029,139598,139600,139601,139603,139604,139606],{},[91,139599,131749],{}," 设置 15px 的下外边距，给",[91,139602,131749],{}," 里面 的 ",[91,139605,343],{}," 标签设置 左右 3px 的外边距",[51,139608,139609,139610,139612],{},"给",[91,139611,131742],{}," 设置 20px 的行高",[40,139614,138368],{},[85,139616,139617],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[91,139618,139619,139625,139637],{"__ignoreMap":14},[94,139620,139621,139623],{"class":96,"line":97},[94,139622,51588],{"class":51277},[94,139624,15554],{"class":104},[94,139626,139627,139629,139631,139633,139635],{"class":96,"line":15},[94,139628,70447],{"class":153},[94,139630,51414],{"class":104},[94,139632,296],{"class":153},[94,139634,51533],{"class":153},[94,139636,1271],{"class":104},[94,139638,139639],{"class":96,"line":1160},[94,139640,1546],{"class":104},[40,139642,138408],{},[85,139644,139645],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[91,139646,139647,139653,139665],{"__ignoreMap":14},[94,139648,139649,139651],{"class":96,"line":97},[94,139650,51588],{"class":51277},[94,139652,15554],{"class":104},[94,139654,139655,139657,139659,139661,139663],{"class":96,"line":15},[94,139656,70447],{"class":153},[94,139658,51414],{"class":104},[94,139660,296],{"class":153},[94,139662,51533],{"class":153},[94,139664,1271],{"class":104},[94,139666,139667],{"class":96,"line":1160},[94,139668,1546],{"class":104},[40,139670,139671],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5108,139673,139674],{},"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":14,"searchDepth":15,"depth":15,"links":139676},[139677,139678,139679,139686],{"id":137957,"depth":15,"text":137958},{"id":137976,"depth":15,"text":137977},{"id":138003,"depth":15,"text":138004,"children":139680},[139681,139682,139683,139684,139685],{"id":138007,"depth":1160,"text":138008},{"id":138020,"depth":1160,"text":138021},{"id":138044,"depth":1160,"text":138045},{"id":138066,"depth":1160,"text":138067},{"id":138138,"depth":1160,"text":138139},{"id":138264,"depth":15,"text":138265,"children":139687},[139688,139689,139690,139691,139693],{"id":138268,"depth":1160,"text":138269},{"id":138275,"depth":1160,"text":138276},{"id":138447,"depth":1160,"text":138448},{"id":138988,"depth":1160,"text":139692},"15.4.4 nav导航模块制作",{"id":139286,"depth":1160,"text":139287},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137949,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139700,"title":139701,"body":139702,"description":17,"extension":18,"meta":142104,"navigation":20,"path":142105,"seo":142106,"stem":142107,"__hash__":142108},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139703,"toc":142081},[139704,139707,139711,139715,139727,139730,139733,139736,139747,139749,139773,139775,139799,139804,139807,139809,139845,139847,139883,139886,139891,139894,139897,139900,139930,139937,139940,139950,139952,139986,139989,140023,140029,140046,140048,140084,140086,140122,140127,140152,140154,140180,140182,140206,140213,140216,140280,140282,140324,140326,140366,140373,140378,140380,140410,140412,140442,140446,140449,140456,140468,140470,140496,140498,140522,140525,140527,140551,140557,140567,140569,140599,140601,140631,140638,140679,140681,140717,140719,140755,140759,140762,140765,140768,140774,140779,140782,140805,140808,140832,140835,140859,140864,140867,140870,140873,140876,140879,140953,140955,140985,140987,141017,141020,141023,141055,141059,141063,141077,141086,141089,141094,141096,141190,141192,141286,141309,141311,141335,141337,141361,141368,141371,141381,141383,141407,141412,141420,141422,141452,141457,141497,141499,141525,141527,141553,141557,141560,141565,141568,141572,141580,141587,141595,141597,141627,141629,141659,141667,141670,141673,141675,141705,141707,141737,141740,141745,141747,141771,141773,141797,141800,141885,141887,141911,141913,141937,141941,141943,141967,141969,142003,142007,142021,142024,142029,142032,142037,142040,142070,142078],[10,139705,139701],{"id":139706},"_16-品优购项目下篇-主体与页面开发",[35,139708,139710],{"id":139709},"_161-项目主体模块制作","16.1 项目主体模块制作",[65,139712,139714],{"id":139713},"_1611-首页制作","16.1.1 首页制作",[40,139716,139717,139719,139720,139722,139723,139726],{},[254,139718,102035],{}," 主体模块是 ",[254,139721,74035],{}," 里面专有的，注意需要新的样式文件 ",[254,139724,139725],{},"index.css，"," 就不要写在common.css中了",[1443,139728],{"style":126385,"src":139729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1443,139731],{"style":126385,"src":139732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[40,139734,139735],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1112,139737,139738,139741,139744],{},[51,139739,139740],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[51,139742,139743],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[51,139745,139746],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[40,139748,138368],{},[85,139750,139751],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[91,139752,139753,139759,139769],{"__ignoreMap":14},[94,139754,139755,139757],{"class":96,"line":97},[94,139756,130377],{"class":1944},[94,139758,15554],{"class":104},[94,139760,139761,139763,139765,139767],{"class":96,"line":15},[94,139762,131009],{"class":153},[94,139764,51414],{"class":104},[94,139766,23718],{"class":153},[94,139768,1271],{"class":104},[94,139770,139771],{"class":96,"line":1160},[94,139772,1546],{"class":104},[40,139774,138408],{},[85,139776,139777],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[91,139778,139779,139785,139795],{"__ignoreMap":14},[94,139780,139781,139783],{"class":96,"line":97},[94,139782,130377],{"class":1944},[94,139784,15554],{"class":104},[94,139786,139787,139789,139791,139793],{"class":96,"line":15},[94,139788,131009],{"class":153},[94,139790,51414],{"class":104},[94,139792,23718],{"class":153},[94,139794,1271],{"class":104},[94,139796,139797],{"class":96,"line":1160},[94,139798,1546],{"class":104},[48,139800,139801],{},[51,139802,139803],{},"左侧focus模块制作",[1443,139805],{"style":126385,"src":139806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[40,139808,138368],{},[85,139810,139811],{"className":126529,"code":127852,"language":126531,"meta":14,"style":14},[91,139812,139813,139821,139831,139841],{"__ignoreMap":14},[94,139814,139815,139817,139819],{"class":96,"line":97},[94,139816,53798],{"class":51277},[94,139818,61877],{"class":1944},[94,139820,15554],{"class":104},[94,139822,139823,139825,139827,139829],{"class":96,"line":15},[94,139824,127867],{"class":153},[94,139826,51414],{"class":104},[94,139828,54866],{"class":153},[94,139830,1271],{"class":104},[94,139832,139833,139835,139837,139839],{"class":96,"line":1160},[94,139834,70775],{"class":153},[94,139836,51414],{"class":104},[94,139838,54714],{"class":153},[94,139840,1271],{"class":104},[94,139842,139843],{"class":96,"line":1175},[94,139844,1546],{"class":104},[40,139846,138408],{},[85,139848,139849],{"className":126529,"code":127852,"language":126531,"meta":14,"style":14},[91,139850,139851,139859,139869,139879],{"__ignoreMap":14},[94,139852,139853,139855,139857],{"class":96,"line":97},[94,139854,53798],{"class":51277},[94,139856,61877],{"class":1944},[94,139858,15554],{"class":104},[94,139860,139861,139863,139865,139867],{"class":96,"line":15},[94,139862,127867],{"class":153},[94,139864,51414],{"class":104},[94,139866,54866],{"class":153},[94,139868,1271],{"class":104},[94,139870,139871,139873,139875,139877],{"class":96,"line":1160},[94,139872,70775],{"class":153},[94,139874,51414],{"class":104},[94,139876,54714],{"class":153},[94,139878,1271],{"class":104},[94,139880,139881],{"class":96,"line":1175},[94,139882,1546],{"class":104},[40,139884,139885],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[48,139887,139888],{"start":15},[51,139889,139890],{},"右侧newsflash模块制作",[1443,139892],{"style":126385,"src":139893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[40,139895,139896],{},"右侧的模块 分为上中下三个盒子",[40,139898,139899],{},"结构代码：",[85,139901,139902],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[91,139903,139904],{"__ignoreMap":14},[94,139905,139906,139908,139910,139912,139914,139916,139918,139920,139922,139924,139926,139928],{"class":96,"line":97},[94,139907,1015],{"class":104},[94,139909,1443],{"class":51277},[94,139911,55216],{"class":1944},[94,139913,150],{"class":104},[94,139915,134046],{"class":209},[94,139917,55224],{"class":1944},[94,139919,150],{"class":104},[94,139921,134053],{"class":209},[94,139923,134056],{"class":1944},[94,139925,150],{"class":104},[94,139927,134061],{"class":209},[94,139929,51284],{"class":104},[40,139931,139932,139933,139936],{},"1 号盒子为 ",[91,139934,139935],{},"news"," 新闻模块 高度为 165px",[1443,139938],{"style":126385,"src":139939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[40,139941,139942,139943,139946,139947],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[91,139944,139945],{},"news-hd","，下面是 ",[91,139948,139949],{},"news-bd",[40,139951,139899],{},[85,139953,139954],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[91,139955,139956,139960,139974,139978],{"__ignoreMap":14},[94,139957,139958],{"class":96,"line":97},[94,139959,130640],{"class":163},[94,139961,139962,139964,139966,139968,139970,139972],{"class":96,"line":15},[94,139963,1015],{"class":104},[94,139965,51588],{"class":51277},[94,139967,53463],{"class":1944},[94,139969,150],{"class":104},[94,139971,130653],{"class":209},[94,139973,51284],{"class":104},[94,139975,139976],{"class":96,"line":1160},[94,139977,130660],{"class":104},[94,139979,139980,139982,139984],{"class":96,"line":1175},[94,139981,51762],{"class":104},[94,139983,51588],{"class":51277},[94,139985,51284],{"class":104},[40,139987,139988],{},"样式代码：",[85,139990,139991],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[91,139992,139993,139997,140011,140015],{"__ignoreMap":14},[94,139994,139995],{"class":96,"line":97},[94,139996,130640],{"class":163},[94,139998,139999,140001,140003,140005,140007,140009],{"class":96,"line":15},[94,140000,1015],{"class":104},[94,140002,51588],{"class":51277},[94,140004,53463],{"class":1944},[94,140006,150],{"class":104},[94,140008,130653],{"class":209},[94,140010,51284],{"class":104},[94,140012,140013],{"class":96,"line":1160},[94,140014,130660],{"class":104},[94,140016,140017,140019,140021],{"class":96,"line":1175},[94,140018,51762],{"class":104},[94,140020,51588],{"class":51277},[94,140022,51284],{"class":104},[40,140024,140025,140026,140028],{},"上面是",[91,140027,139945],{},"，设置高度是 33px，设置下边框",[1112,140030,140031,140037],{},[51,140032,140033,140034,140036],{},"里面放一个",[91,140035,22892],{}," 标题",[51,140038,140039,140040,140042,140043,140045],{},"放一个a",[91,140041,102670],{},"，内容是 更多，然后让 ",[91,140044,343],{}," 进行右浮动，三角用伪元素设置字体图标就好",[40,140047,139899],{},[85,140049,140050],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},[91,140051,140052,140060,140070,140080],{"__ignoreMap":14},[94,140053,140054,140056,140058],{"class":96,"line":97},[94,140055,51588],{"class":51277},[94,140057,137530],{"class":1944},[94,140059,15554],{"class":104},[94,140061,140062,140064,140066,140068],{"class":96,"line":15},[94,140063,137537],{"class":153},[94,140065,51414],{"class":104},[94,140067,7634],{"class":209},[94,140069,1271],{"class":104},[94,140071,140072,140074,140076,140078],{"class":96,"line":1160},[94,140073,128145],{"class":153},[94,140075,51414],{"class":104},[94,140077,60846],{"class":153},[94,140079,1271],{"class":104},[94,140081,140082],{"class":96,"line":1175},[94,140083,1546],{"class":104},[40,140085,139988],{},[85,140087,140088],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},[91,140089,140090,140098,140108,140118],{"__ignoreMap":14},[94,140091,140092,140094,140096],{"class":96,"line":97},[94,140093,51588],{"class":51277},[94,140095,137530],{"class":1944},[94,140097,15554],{"class":104},[94,140099,140100,140102,140104,140106],{"class":96,"line":15},[94,140101,137537],{"class":153},[94,140103,51414],{"class":104},[94,140105,7634],{"class":209},[94,140107,1271],{"class":104},[94,140109,140110,140112,140114,140116],{"class":96,"line":1160},[94,140111,128145],{"class":153},[94,140113,51414],{"class":104},[94,140115,60846],{"class":153},[94,140117,1271],{"class":104},[94,140119,140120],{"class":96,"line":1175},[94,140121,1546],{"class":104},[40,140123,140124,140125],{},"下面是",[91,140126,139949],{},[1112,140128,140129,140137],{},[51,140130,140131,140132,100995,140134,140136],{},"里面包含 ",[91,140133,1112],{},[91,140135,51],{}," 还有链接",[51,140138,139609,140139,140141,140142,140144,140145,140148,140149],{},[91,140140,51],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[91,140143,131195],{}," 2.设置 ",[91,140146,140147],{},"white-space: nowrap;"," 3. 设置 ",[91,140150,140151],{},"text-overflow: ellipsis;",[40,140153,139899],{},[85,140155,140157],{"className":126529,"code":140156,"language":126531,"meta":14,"style":14},"div {\n  overflow: hidden;\n}\n",[91,140158,140159,140165,140176],{"__ignoreMap":14},[94,140160,140161,140163],{"class":96,"line":97},[94,140162,51588],{"class":51277},[94,140164,15554],{"class":104},[94,140166,140167,140170,140172,140174],{"class":96,"line":15},[94,140168,140169],{"class":153},"  overflow",[94,140171,51414],{"class":104},[94,140173,61691],{"class":153},[94,140175,1271],{"class":104},[94,140177,140178],{"class":96,"line":1160},[94,140179,1546],{"class":104},[40,140181,139988],{},[85,140183,140184],{"className":126529,"code":140156,"language":126531,"meta":14,"style":14},[91,140185,140186,140192,140202],{"__ignoreMap":14},[94,140187,140188,140190],{"class":96,"line":97},[94,140189,51588],{"class":51277},[94,140191,15554],{"class":104},[94,140193,140194,140196,140198,140200],{"class":96,"line":15},[94,140195,140169],{"class":153},[94,140197,51414],{"class":104},[94,140199,61691],{"class":153},[94,140201,1271],{"class":104},[94,140203,140204],{"class":96,"line":1160},[94,140205,1546],{"class":104},[40,140207,140208,140209,140212],{},"2 号盒子为 ",[91,140210,140211],{},"lifeservice"," 生活服务模块 高度为 209px",[1443,140214],{"style":126385,"src":140215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1112,140217,140218,140221,140231,140255,140266],{},[51,140219,140220],{},"设置边框（左右下边框）",[51,140222,140223,140224,140227,140228,140230],{},"里面的内容 是 ",[91,140225,140226],{},"ul > 12*li","，给",[91,140229,51],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[51,140232,140233,140234],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1112,140235,140236,140241,140250],{},[51,140237,140238,140240],{},[91,140239,140211],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[51,140242,140243,140244,140246,140247,140249],{},"可以让 ",[91,140245,140211],{}," 里面的 ",[91,140248,1112],{}," 宽度为 252，就可以装的下 4 个 小 li",[51,140251,140252,140254],{},[91,140253,140211],{}," 盒子 overflow 隐藏多余的部分就可以了",[51,140256,116444,140257,140259,140260,140262,140263,140265],{},[91,140258,51],{}," 里面放一个 ",[91,140261,546],{},"（里面放图标），下面的文本用 ",[91,140264,40],{}," 标签包裹",[51,140267,139029,140268,140270,140271,140273,140274,139063,140276,140279],{},[91,140269,546],{}," 设置 24px宽和28px的高（注意 ",[91,140272,546],{}," 是行内元素， 转成行内块），给 ",[91,140275,51],{},[91,140277,140278],{},"text-align:center"," 让里面内容居中显示",[40,140281,139899],{},[85,140283,140285],{"className":126529,"code":140284,"language":126531,"meta":14,"style":14},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[91,140286,140287,140305,140310,140320],{"__ignoreMap":14},[94,140288,140289,140291,140293,140295,140297,140299,140301,140303],{"class":96,"line":97},[94,140290,94],{"class":51277},[94,140292,12417],{"class":104},[94,140294,343],{"class":51277},[94,140296,12417],{"class":104},[94,140298,23535],{"class":51277},[94,140300,12417],{"class":104},[94,140302,254],{"class":51277},[94,140304,15554],{"class":104},[94,140306,140307],{"class":96,"line":15},[94,140308,140309],{"class":163},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[94,140311,140312,140314,140316,140318],{"class":96,"line":1160},[94,140313,128145],{"class":153},[94,140315,51414],{"class":104},[94,140317,128207],{"class":153},[94,140319,1271],{"class":104},[94,140321,140322],{"class":96,"line":1175},[94,140323,1546],{"class":104},[40,140325,139988],{},[85,140327,140328],{"className":126529,"code":140284,"language":126531,"meta":14,"style":14},[91,140329,140330,140348,140352,140362],{"__ignoreMap":14},[94,140331,140332,140334,140336,140338,140340,140342,140344,140346],{"class":96,"line":97},[94,140333,94],{"class":51277},[94,140335,12417],{"class":104},[94,140337,343],{"class":51277},[94,140339,12417],{"class":104},[94,140341,23535],{"class":51277},[94,140343,12417],{"class":104},[94,140345,254],{"class":51277},[94,140347,15554],{"class":104},[94,140349,140350],{"class":96,"line":15},[94,140351,140309],{"class":163},[94,140353,140354,140356,140358,140360],{"class":96,"line":1160},[94,140355,128145],{"class":153},[94,140357,51414],{"class":104},[94,140359,128207],{"class":153},[94,140361,1271],{"class":104},[94,140363,140364],{"class":96,"line":1175},[94,140365,1546],{"class":104},[40,140367,140368,140369,140372],{},"3 号盒子为 ",[91,140370,140371],{},"bargain"," 特价商品",[1112,140374,140375],{},[51,140376,140377],{},"这个比较简单，直接插入一张图片即可",[40,140379,139899],{},[85,140381,140382],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[91,140383,140384],{"__ignoreMap":14},[94,140385,140386,140388,140390,140392,140394,140396,140398,140400,140402,140404,140406,140408],{"class":96,"line":97},[94,140387,1015],{"class":104},[94,140389,1443],{"class":51277},[94,140391,55216],{"class":1944},[94,140393,150],{"class":104},[94,140395,134046],{"class":209},[94,140397,55224],{"class":1944},[94,140399,150],{"class":104},[94,140401,134053],{"class":209},[94,140403,134056],{"class":1944},[94,140405,150],{"class":104},[94,140407,134061],{"class":209},[94,140409,51284],{"class":104},[40,140411,139988],{},[85,140413,140414],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[91,140415,140416],{"__ignoreMap":14},[94,140417,140418,140420,140422,140424,140426,140428,140430,140432,140434,140436,140438,140440],{"class":96,"line":97},[94,140419,1015],{"class":104},[94,140421,1443],{"class":51277},[94,140423,55216],{"class":1944},[94,140425,150],{"class":104},[94,140427,134046],{"class":209},[94,140429,55224],{"class":1944},[94,140431,150],{"class":104},[94,140433,134053],{"class":209},[94,140435,134056],{"class":1944},[94,140437,150],{"class":104},[94,140439,134061],{"class":209},[94,140441,51284],{"class":104},[65,140443,140445],{"id":140444},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1443,140447],{"style":126385,"src":140448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[40,140450,140451,140452,140455],{},"大盒子 ",[91,140453,140454],{},"recom"," 推荐模块 recommend",[1112,140457,140458],{},[51,140459,140460,140461,140463,140464,140467],{},"给这个 ",[91,140462,140454],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[91,140465,140466],{},"#ebebeb","），设置距离上边 12px",[40,140469,139899],{},[85,140471,140473],{"className":126529,"code":140472,"language":126531,"meta":14,"style":14},"div {\n  background-color: #f0f0f0;\n}\n",[91,140474,140475,140481,140492],{"__ignoreMap":14},[94,140476,140477,140479],{"class":96,"line":97},[94,140478,51588],{"class":51277},[94,140480,15554],{"class":104},[94,140482,140483,140485,140487,140490],{"class":96,"line":15},[94,140484,70855],{"class":153},[94,140486,51414],{"class":104},[94,140488,140489],{"class":153},"#f0f0f0",[94,140491,1271],{"class":104},[94,140493,140494],{"class":96,"line":1160},[94,140495,1546],{"class":104},[40,140497,139988],{},[85,140499,140500],{"className":126529,"code":140472,"language":126531,"meta":14,"style":14},[91,140501,140502,140508,140518],{"__ignoreMap":14},[94,140503,140504,140506],{"class":96,"line":97},[94,140505,51588],{"class":51277},[94,140507,15554],{"class":104},[94,140509,140510,140512,140514,140516],{"class":96,"line":15},[94,140511,70855],{"class":153},[94,140513,51414],{"class":104},[94,140515,140489],{"class":153},[94,140517,1271],{"class":104},[94,140519,140520],{"class":96,"line":1160},[94,140521,1546],{"class":104},[40,140523,140524],{},"里面包含 2 个盒子， 浮动即可",[40,140526,139899],{},[85,140528,140529],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[91,140530,140531,140537,140547],{"__ignoreMap":14},[94,140532,140533,140535],{"class":96,"line":97},[94,140534,130377],{"class":1944},[94,140536,15554],{"class":104},[94,140538,140539,140541,140543,140545],{"class":96,"line":15},[94,140540,131009],{"class":153},[94,140542,51414],{"class":104},[94,140544,23718],{"class":153},[94,140546,1271],{"class":104},[94,140548,140549],{"class":96,"line":1160},[94,140550,1546],{"class":104},[40,140552,140553,140554],{},"1 号盒子 ",[91,140555,140556],{},"recom_hd",[1112,140558,140559,140562],{},[51,140560,140561],{},"设置宽度205px，高度163px",[51,140563,140033,140564,140566],{},[91,140565,1443],{},"标签，插入图片即可",[40,140568,139899],{},[85,140570,140571],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[91,140572,140573],{"__ignoreMap":14},[94,140574,140575,140577,140579,140581,140583,140585,140587,140589,140591,140593,140595,140597],{"class":96,"line":97},[94,140576,1015],{"class":104},[94,140578,1443],{"class":51277},[94,140580,55216],{"class":1944},[94,140582,150],{"class":104},[94,140584,134046],{"class":209},[94,140586,55224],{"class":1944},[94,140588,150],{"class":104},[94,140590,134053],{"class":209},[94,140592,134056],{"class":1944},[94,140594,150],{"class":104},[94,140596,134061],{"class":209},[94,140598,51284],{"class":104},[40,140600,139988],{},[85,140602,140603],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[91,140604,140605],{"__ignoreMap":14},[94,140606,140607,140609,140611,140613,140615,140617,140619,140621,140623,140625,140627,140629],{"class":96,"line":97},[94,140608,1015],{"class":104},[94,140610,1443],{"class":51277},[94,140612,55216],{"class":1944},[94,140614,150],{"class":104},[94,140616,134046],{"class":209},[94,140618,55224],{"class":1944},[94,140620,150],{"class":104},[94,140622,134053],{"class":209},[94,140624,134056],{"class":1944},[94,140626,150],{"class":104},[94,140628,134061],{"class":209},[94,140630,51284],{"class":104},[40,140632,140633,140634,140637],{},"2 号盒子 ",[91,140635,140636],{},"recom_bd"," ，注意里面的小竖线",[1112,140639,140640,140651,140654,140659,140664],{},[51,140641,140642,140643,140645,140646,140648,140649],{},"右侧结构里面放 ",[91,140644,1112],{}," 包含 4个 ",[91,140647,51],{},"，每个li里面包含一个",[91,140650,1443],{},[51,140652,140653],{},"直接利用切片工具把里面的内容当成一张图片",[51,140655,139029,140656,140658],{},[91,140657,51],{}," 设置浮动",[51,140660,139029,140661,140663],{},[91,140662,1443],{}," 设置宽高，宽度 248px，高度 163px",[51,140665,140666,140667,140227,140670,140672,140673,140675,140676],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[91,140668,140669],{},"top 10px",[91,140671,51],{},"设置相对定位（注意，最后一个",[91,140674,51],{},"不用设置伪元素），可以利用 ",[91,140677,140678],{},"nth-child(-n+3){...}",[40,140680,139899],{},[85,140682,140683],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},[91,140684,140685,140693,140703,140713],{"__ignoreMap":14},[94,140686,140687,140689,140691],{"class":96,"line":97},[94,140688,51588],{"class":51277},[94,140690,137530],{"class":1944},[94,140692,15554],{"class":104},[94,140694,140695,140697,140699,140701],{"class":96,"line":15},[94,140696,137537],{"class":153},[94,140698,51414],{"class":104},[94,140700,7634],{"class":209},[94,140702,1271],{"class":104},[94,140704,140705,140707,140709,140711],{"class":96,"line":1160},[94,140706,128145],{"class":153},[94,140708,51414],{"class":104},[94,140710,60846],{"class":153},[94,140712,1271],{"class":104},[94,140714,140715],{"class":96,"line":1175},[94,140716,1546],{"class":104},[40,140718,139988],{},[85,140720,140721],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},[91,140722,140723,140731,140741,140751],{"__ignoreMap":14},[94,140724,140725,140727,140729],{"class":96,"line":97},[94,140726,51588],{"class":51277},[94,140728,137530],{"class":1944},[94,140730,15554],{"class":104},[94,140732,140733,140735,140737,140739],{"class":96,"line":15},[94,140734,137537],{"class":153},[94,140736,51414],{"class":104},[94,140738,7634],{"class":209},[94,140740,1271],{"class":104},[94,140742,140743,140745,140747,140749],{"class":96,"line":1160},[94,140744,128145],{"class":153},[94,140746,51414],{"class":104},[94,140748,60846],{"class":153},[94,140750,1271],{"class":104},[94,140752,140753],{"class":96,"line":1175},[94,140754,1546],{"class":104},[65,140756,140758],{"id":140757},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1443,140760],{"style":126385,"src":140761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[40,140763,140764],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[40,140766,140767],{},"第一楼是家用电器模块： 里面包含两个盒子",[40,140769,140770,140773],{},[91,140771,140772],{},"box_hd"," 制作",[40,140775,140553,140776,140778],{},[91,140777,140772],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1443,140780],{"style":126385,"src":140781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1112,140783,140784,140789,140794,140797],{},[51,140785,140786,140788],{},[91,140787,140772],{}," 给 30px 的高度，2个像素的下边框",[51,140790,140791,140792],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[91,140793,139040],{},[51,140795,140796],{},"左侧盒左浮动，右侧盒子右浮动",[51,140798,140799,140801,140802,140804],{},[91,140800,343],{},"标签之间的距离用左右的",[91,140803,30866],{},"撑开即可",[40,140806,140807],{},"结构代码",[85,140809,140810],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[91,140811,140812,140818,140828],{"__ignoreMap":14},[94,140813,140814,140816],{"class":96,"line":97},[94,140815,130377],{"class":1944},[94,140817,15554],{"class":104},[94,140819,140820,140822,140824,140826],{"class":96,"line":15},[94,140821,131009],{"class":153},[94,140823,51414],{"class":104},[94,140825,23718],{"class":153},[94,140827,1271],{"class":104},[94,140829,140830],{"class":96,"line":1160},[94,140831,1546],{"class":104},[40,140833,140834],{},"样式代码",[85,140836,140837],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[91,140838,140839,140845,140855],{"__ignoreMap":14},[94,140840,140841,140843],{"class":96,"line":97},[94,140842,130377],{"class":1944},[94,140844,15554],{"class":104},[94,140846,140847,140849,140851,140853],{"class":96,"line":15},[94,140848,131009],{"class":153},[94,140850,51414],{"class":104},[94,140852,23718],{"class":153},[94,140854,1271],{"class":104},[94,140856,140857],{"class":96,"line":1160},[94,140858,1546],{"class":104},[40,140860,140861,140773],{},[91,140862,140863],{},"box_bd",[40,140865,140866],{},"2 号盒子 box_bd，不要给高度",[1443,140868],{"style":126385,"src":140869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[40,140871,140872],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[40,140874,140875],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[40,140877,140878],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1112,140880,140881,140893,140909],{},[51,140882,140883,140885,140886,140889,140890,140892],{},[91,140884,140863],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[91,140887,140888],{},"tab_content","，在",[91,140891,140888],{}," 里面包裹tab选项卡对应的内容",[51,140894,140895,140896,140899,140900,140902,140903,140905,140906,140908],{},"内容被一个大盒子包裹（",[91,140897,140898],{},"tab_list_item","），里面是 ",[91,140901,1112],{}," 包裹 5个 ",[91,140904,51],{},"，每个",[91,140907,51],{},"设置对应的宽度，然后设置浮动",[51,140910,140911,140912,140914,140915,140917,140918],{},"而这5个",[91,140913,51],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[91,140916,51],{},"设置",[1112,140919,140920,140938,140941],{},[51,140921,140922,140923,140925,140926,140928,140929,140931,140932,140934,140935,140937],{},"第一个小 ",[91,140924,51],{}," 分为上下结构，上面是 ",[91,140927,1112],{}," 包裹 ",[91,140930,51],{}," ，",[91,140933,51],{},"里面包裹 ",[91,140936,343],{},"，下面插入一张图片",[51,140939,140940],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[51,140942,140943,140944,140946,140947,140949,140950,140952],{},"后面的小 ",[91,140945,51],{}," 里面先放一个",[91,140948,343],{},"标签，然后在",[91,140951,343],{},"标签里面插入图片即可",[40,140954,140807],{},[85,140956,140957],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[91,140958,140959],{"__ignoreMap":14},[94,140960,140961,140963,140965,140967,140969,140971,140973,140975,140977,140979,140981,140983],{"class":96,"line":97},[94,140962,1015],{"class":104},[94,140964,1443],{"class":51277},[94,140966,55216],{"class":1944},[94,140968,150],{"class":104},[94,140970,134046],{"class":209},[94,140972,55224],{"class":1944},[94,140974,150],{"class":104},[94,140976,134053],{"class":209},[94,140978,134056],{"class":1944},[94,140980,150],{"class":104},[94,140982,134061],{"class":209},[94,140984,51284],{"class":104},[40,140986,140834],{},[85,140988,140989],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[91,140990,140991],{"__ignoreMap":14},[94,140992,140993,140995,140997,140999,141001,141003,141005,141007,141009,141011,141013,141015],{"class":96,"line":97},[94,140994,1015],{"class":104},[94,140996,1443],{"class":51277},[94,140998,55216],{"class":1944},[94,141000,150],{"class":104},[94,141002,134046],{"class":209},[94,141004,55224],{"class":1944},[94,141006,150],{"class":104},[94,141008,134053],{"class":209},[94,141010,134056],{"class":1944},[94,141012,150],{"class":104},[94,141014,134061],{"class":209},[94,141016,51284],{"class":104},[40,141018,141019],{},"tab栏切换需求！！！！！！介绍：",[1443,141021],{"style":126385,"src":141022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1112,141024,141025,141033,141039,141042],{},[51,141026,141027,141030,141031],{},[91,141028,141029],{},"tab","栏的布局是 ",[91,141032,139040],{},[51,141034,141035,141036,141038],{},"有多少个",[91,141037,141029],{},"选项卡，那么对应就有多少个内容",[51,141040,141041],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[51,141043,141044,141045,141048,141049,141051,141052,141054],{},"等后面我们学习了",[91,141046,141047],{},"js","之后，我们就会配合",[91,141050,141047],{},"来实现，",[91,141053,141029],{},"栏的切换",[35,141056,141058],{"id":141057},"_162-列表制作","16.2 列表制作",[65,141060,141062],{"id":141061},"_1621-准备工作","16.2.1 准备工作",[1112,141064,141065,141068,141071,141074],{},[51,141066,141067],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[51,141069,141070],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[51,141072,141073],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[51,141075,141076],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[65,141078,141080,141081,100995,141083,141085],{"id":141079},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[91,141082,131534],{},[91,141084,53690],{}," 修改",[1443,141087],{"style":126385,"src":141088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1112,141090,141091],{},[51,141092,141093],{},"秒杀盒子 sk（ second kill ） 定位即可",[40,141095,139899],{},[85,141097,141098],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},[91,141099,141100,141104,141118,141122,141136,141140,141154,141158,141172,141176],{"__ignoreMap":14},[94,141101,141102],{"class":96,"line":97},[94,141103,131968],{"class":163},[94,141105,141106,141108,141110,141112,141114,141116],{"class":96,"line":15},[94,141107,131973],{"class":1944},[94,141109,79784],{"class":104},[94,141111,128889],{"class":153},[94,141113,51414],{"class":104},[94,141115,131982],{"class":153},[94,141117,129459],{"class":104},[94,141119,141120],{"class":96,"line":1160},[94,141121,131989],{"class":163},[94,141123,141124,141126,141128,141130,141132,141134],{"class":96,"line":1175},[94,141125,131994],{"class":1944},[94,141127,79784],{"class":104},[94,141129,128889],{"class":153},[94,141131,51414],{"class":104},[94,141133,54741],{"class":153},[94,141135,129459],{"class":104},[94,141137,141138],{"class":96,"line":1181},[94,141139,132009],{"class":163},[94,141141,141142,141144,141146,141148,141150,141152],{"class":96,"line":1195},[94,141143,132014],{"class":1944},[94,141145,79784],{"class":104},[94,141147,128889],{"class":153},[94,141149,51414],{"class":104},[94,141151,54808],{"class":153},[94,141153,129459],{"class":104},[94,141155,141156],{"class":96,"line":1201},[94,141157,132029],{"class":163},[94,141159,141160,141162,141164,141166,141168,141170],{"class":96,"line":1292},[94,141161,132034],{"class":1944},[94,141163,79784],{"class":104},[94,141165,128889],{"class":153},[94,141167,51414],{"class":104},[94,141169,86210],{"class":153},[94,141171,129459],{"class":104},[94,141173,141174],{"class":96,"line":1298},[94,141175,132049],{"class":163},[94,141177,141178,141180,141182,141184,141186,141188],{"class":96,"line":1310},[94,141179,132054],{"class":1944},[94,141181,79784],{"class":104},[94,141183,128889],{"class":153},[94,141185,51414],{"class":104},[94,141187,132063],{"class":153},[94,141189,129459],{"class":104},[40,141191,139988],{},[85,141193,141194],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},[91,141195,141196,141200,141214,141218,141232,141236,141250,141254,141268,141272],{"__ignoreMap":14},[94,141197,141198],{"class":96,"line":97},[94,141199,131968],{"class":163},[94,141201,141202,141204,141206,141208,141210,141212],{"class":96,"line":15},[94,141203,131973],{"class":1944},[94,141205,79784],{"class":104},[94,141207,128889],{"class":153},[94,141209,51414],{"class":104},[94,141211,131982],{"class":153},[94,141213,129459],{"class":104},[94,141215,141216],{"class":96,"line":1160},[94,141217,131989],{"class":163},[94,141219,141220,141222,141224,141226,141228,141230],{"class":96,"line":1175},[94,141221,131994],{"class":1944},[94,141223,79784],{"class":104},[94,141225,128889],{"class":153},[94,141227,51414],{"class":104},[94,141229,54741],{"class":153},[94,141231,129459],{"class":104},[94,141233,141234],{"class":96,"line":1181},[94,141235,132009],{"class":163},[94,141237,141238,141240,141242,141244,141246,141248],{"class":96,"line":1195},[94,141239,132014],{"class":1944},[94,141241,79784],{"class":104},[94,141243,128889],{"class":153},[94,141245,51414],{"class":104},[94,141247,54808],{"class":153},[94,141249,129459],{"class":104},[94,141251,141252],{"class":96,"line":1201},[94,141253,132029],{"class":163},[94,141255,141256,141258,141260,141262,141264,141266],{"class":96,"line":1292},[94,141257,132034],{"class":1944},[94,141259,79784],{"class":104},[94,141261,128889],{"class":153},[94,141263,51414],{"class":104},[94,141265,86210],{"class":153},[94,141267,129459],{"class":104},[94,141269,141270],{"class":96,"line":1298},[94,141271,132049],{"class":163},[94,141273,141274,141276,141278,141280,141282,141284],{"class":96,"line":1310},[94,141275,132054],{"class":1944},[94,141277,79784],{"class":104},[94,141279,128889],{"class":153},[94,141281,51414],{"class":104},[94,141283,132063],{"class":153},[94,141285,129459],{"class":104},[1112,141287,141288,141299],{},[51,141289,141290,141291,141294,141295,100995,141297],{},"1 号盒子左侧浮动 ",[91,141292,141293],{},"sk_list"," 里面包含 ",[91,141296,1112],{},[91,141298,51],{},[51,141300,141301,141302,141294,141305,100995,141307],{},"2 号盒子左侧浮动 ",[91,141303,141304],{},"sk_con",[91,141306,1112],{},[91,141308,51],{},[40,141310,139899],{},[85,141312,141313],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[91,141314,141315,141321,141331],{"__ignoreMap":14},[94,141316,141317,141319],{"class":96,"line":97},[94,141318,130377],{"class":1944},[94,141320,15554],{"class":104},[94,141322,141323,141325,141327,141329],{"class":96,"line":15},[94,141324,131009],{"class":153},[94,141326,51414],{"class":104},[94,141328,23718],{"class":153},[94,141330,1271],{"class":104},[94,141332,141333],{"class":96,"line":1160},[94,141334,1546],{"class":104},[40,141336,139988],{},[85,141338,141339],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[91,141340,141341,141347,141357],{"__ignoreMap":14},[94,141342,141343,141345],{"class":96,"line":97},[94,141344,130377],{"class":1944},[94,141346,15554],{"class":104},[94,141348,141349,141351,141353,141355],{"class":96,"line":15},[94,141350,131009],{"class":153},[94,141352,51414],{"class":104},[94,141354,23718],{"class":153},[94,141356,1271],{"class":104},[94,141358,141359],{"class":96,"line":1160},[94,141360,1546],{"class":104},[65,141362,141364,141365],{"id":141363},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[91,141366,141367],{},"sk_container",[1443,141369],{"style":126385,"src":141370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1112,141372,141373,141378],{},[51,141374,140553,141375,141377],{},[91,141376,141367],{}," 给宽度 1200，不要给高度",[51,141379,141380],{},"一定不要忘记清除浮动",[40,141382,139899],{},[85,141384,141385],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[91,141386,141387,141393,141403],{"__ignoreMap":14},[94,141388,141389,141391],{"class":96,"line":97},[94,141390,130377],{"class":1944},[94,141392,15554],{"class":104},[94,141394,141395,141397,141399,141401],{"class":96,"line":15},[94,141396,131009],{"class":153},[94,141398,51414],{"class":104},[94,141400,23718],{"class":153},[94,141402,1271],{"class":104},[94,141404,141405],{"class":96,"line":1160},[94,141406,1546],{"class":104},[48,141408,141409],{},[51,141410,141411],{},"sk_hd制作",[1112,141413,141414],{},[51,141415,140633,141416,141419],{},[91,141417,141418],{},"sk_hd"," ，插入图片即可",[40,141421,139899],{},[85,141423,141424],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[91,141425,141426],{"__ignoreMap":14},[94,141427,141428,141430,141432,141434,141436,141438,141440,141442,141444,141446,141448,141450],{"class":96,"line":97},[94,141429,1015],{"class":104},[94,141431,1443],{"class":51277},[94,141433,55216],{"class":1944},[94,141435,150],{"class":104},[94,141437,134046],{"class":209},[94,141439,55224],{"class":1944},[94,141441,150],{"class":104},[94,141443,134053],{"class":209},[94,141445,134056],{"class":1944},[94,141447,150],{"class":104},[94,141449,134061],{"class":209},[94,141451,51284],{"class":104},[48,141453,141454],{"start":15},[51,141455,141456],{},"sk_bd制作",[1112,141458,141459],{},[51,141460,141461,141462,141465,141466,100995,141468,141470],{},"3 号盒子 ",[91,141463,141464],{},"sk_bd"," ，里面包含很多的 ",[91,141467,1112],{},[91,141469,51],{},[1112,141471,141472,141481],{},[51,141473,141474,141475,141477,141478,141480],{},"当鼠标移入到 ",[91,141476,51],{}," 上面的时候显示红色的边框，在这里先给 ",[91,141479,51],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[51,141482,141483,141484,141486,141487,141489,141490,141493,141494,141496],{},"由于给每个 ",[91,141485,51],{}," 都设置了外边距，导致一行的最后一个 ",[91,141488,51],{}," 掉了下来，在这里我们利用 ",[91,141491,141492],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[91,141495,51],{},"，去掉外边距就好了",[40,141498,139899],{},[85,141500,141501],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[91,141502,141503,141509,141521],{"__ignoreMap":14},[94,141504,141505,141507],{"class":96,"line":97},[94,141506,51588],{"class":51277},[94,141508,15554],{"class":104},[94,141510,141511,141513,141515,141517,141519],{"class":96,"line":15},[94,141512,70447],{"class":153},[94,141514,51414],{"class":104},[94,141516,296],{"class":153},[94,141518,51533],{"class":153},[94,141520,1271],{"class":104},[94,141522,141523],{"class":96,"line":1160},[94,141524,1546],{"class":104},[40,141526,139988],{},[85,141528,141529],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[91,141530,141531,141537,141549],{"__ignoreMap":14},[94,141532,141533,141535],{"class":96,"line":97},[94,141534,51588],{"class":51277},[94,141536,15554],{"class":104},[94,141538,141539,141541,141543,141545,141547],{"class":96,"line":15},[94,141540,70447],{"class":153},[94,141542,51414],{"class":104},[94,141544,296],{"class":153},[94,141546,51533],{"class":153},[94,141548,1271],{"class":104},[94,141550,141551],{"class":96,"line":1160},[94,141552,1546],{"class":104},[35,141554,141556],{"id":141555},"_163-注册页面制作","16.3 注册页面制作",[1443,141558],{"style":126385,"src":141559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[40,141561,141562,141564],{},[254,141563,9007],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1443,141566],{"style":126385,"src":141567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[65,141569,141571],{"id":141570},"_1631-准备工作","16.3.1 准备工作",[1112,141573,141574,141577],{},[51,141575,141576],{},"创建register.html，引入 base.css，引入favicon图标",[51,141578,141579],{},"创建register.css ，在html页面进行引入",[65,141581,141583,141584,141586],{"id":141582},"_1632-header-头部实现","16.3.2 ",[91,141585,131534],{}," 头部实现",[1112,141588,141589,141592],{},[51,141590,141591],{},"整个内容用 版心 进行包裹",[51,141593,141594],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[40,141596,139899],{},[85,141598,141599],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[91,141600,141601],{"__ignoreMap":14},[94,141602,141603,141605,141607,141609,141611,141613,141615,141617,141619,141621,141623,141625],{"class":96,"line":97},[94,141604,1015],{"class":104},[94,141606,1443],{"class":51277},[94,141608,55216],{"class":1944},[94,141610,150],{"class":104},[94,141612,134046],{"class":209},[94,141614,55224],{"class":1944},[94,141616,150],{"class":104},[94,141618,134053],{"class":209},[94,141620,134056],{"class":1944},[94,141622,150],{"class":104},[94,141624,134061],{"class":209},[94,141626,51284],{"class":104},[40,141628,139988],{},[85,141630,141631],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[91,141632,141633],{"__ignoreMap":14},[94,141634,141635,141637,141639,141641,141643,141645,141647,141649,141651,141653,141655,141657],{"class":96,"line":97},[94,141636,1015],{"class":104},[94,141638,1443],{"class":51277},[94,141640,55216],{"class":1944},[94,141642,150],{"class":104},[94,141644,134046],{"class":209},[94,141646,55224],{"class":1944},[94,141648,150],{"class":104},[94,141650,134053],{"class":209},[94,141652,134056],{"class":1944},[94,141654,150],{"class":104},[94,141656,134061],{"class":209},[94,141658,51284],{"class":104},[65,141660,141662,141663,141666],{"id":141661},"_1633-registerarea-主体模块实现","16.3.3 ",[91,141664,141665],{},"registerarea"," 主体模块实现",[1443,141668],{"style":126385,"src":141669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[40,141671,141672],{},"整个大盒子 高度为 522px，设置4个边框",[40,141674,139899],{},[85,141676,141677],{"className":126529,"code":130686,"language":126531,"meta":14,"style":14},[91,141678,141679,141685,141701],{"__ignoreMap":14},[94,141680,141681,141683],{"class":96,"line":97},[94,141682,51588],{"class":51277},[94,141684,15554],{"class":104},[94,141686,141687,141689,141691,141693,141695,141697,141699],{"class":96,"line":15},[94,141688,70873],{"class":153},[94,141690,51414],{"class":104},[94,141692,322],{"class":153},[94,141694,51469],{"class":100},[94,141696,51498],{"class":153},[94,141698,129921],{"class":153},[94,141700,1271],{"class":104},[94,141702,141703],{"class":96,"line":1160},[94,141704,1546],{"class":104},[40,141706,139988],{},[85,141708,141709],{"className":126529,"code":130686,"language":126531,"meta":14,"style":14},[91,141710,141711,141717,141733],{"__ignoreMap":14},[94,141712,141713,141715],{"class":96,"line":97},[94,141714,51588],{"class":51277},[94,141716,15554],{"class":104},[94,141718,141719,141721,141723,141725,141727,141729,141731],{"class":96,"line":15},[94,141720,70873],{"class":153},[94,141722,51414],{"class":104},[94,141724,322],{"class":153},[94,141726,51469],{"class":100},[94,141728,51498],{"class":153},[94,141730,129921],{"class":153},[94,141732,1271],{"class":104},[94,141734,141735],{"class":96,"line":1160},[94,141736,1546],{"class":104},[40,141738,141739],{},"1号盒子 是一个 h3 标签，放标题",[1112,141741,141742],{},[51,141743,141744],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[40,141746,139899],{},[85,141748,141749],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[91,141750,141751,141757,141767],{"__ignoreMap":14},[94,141752,141753,141755],{"class":96,"line":97},[94,141754,130377],{"class":1944},[94,141756,15554],{"class":104},[94,141758,141759,141761,141763,141765],{"class":96,"line":15},[94,141760,131009],{"class":153},[94,141762,51414],{"class":104},[94,141764,23718],{"class":153},[94,141766,1271],{"class":104},[94,141768,141769],{"class":96,"line":1160},[94,141770,1546],{"class":104},[40,141772,139988],{},[85,141774,141775],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[91,141776,141777,141783,141793],{"__ignoreMap":14},[94,141778,141779,141781],{"class":96,"line":97},[94,141780,130377],{"class":1944},[94,141782,15554],{"class":104},[94,141784,141785,141787,141789,141791],{"class":96,"line":15},[94,141786,131009],{"class":153},[94,141788,51414],{"class":104},[94,141790,23718],{"class":153},[94,141792,1271],{"class":104},[94,141794,141795],{"class":96,"line":1160},[94,141796,1546],{"class":104},[40,141798,141799],{},"2号盒子 里面放注册的内容",[1112,141801,141802,141805,141814,141828,141841,141844,141847,141865,141879],{},[51,141803,141804],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[51,141806,141807,141808,141810,141811,141813],{},"里面的内容利用 ",[91,141809,1112],{}," 包含 ",[91,141812,51],{}," 来实现的（不需要用表格）",[51,141815,139043,141816,141818,141819,141821,141822,141824,141825,141827],{},[91,141817,51],{}," 里面，左侧放 ",[91,141820,33591],{}," 标签， 中间放",[91,141823,53798],{}," 标签， 右侧放 ",[91,141826,94],{}," 提示信息",[51,141829,141830,141831,141833,141834,141836,141837,141840],{},"左侧 ",[91,141832,33591],{},"里面的文字都是右对齐，我们可以给",[91,141835,33591],{},"设置一个宽度（88px），然后利用",[91,141838,141839],{},"text-align"," 来设置右对齐",[51,141842,141843],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[51,141845,141846],{},"右侧 span修饰一下文字颜色",[51,141848,141849,141850],{},"提示信息的样式优化",[1112,141851,141852,141855,141858],{},[51,141853,141854],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[51,141856,141857],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[51,141859,141860,141861,141864],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[91,141862,141863],{},"vertical-algin"," 来设置 图片与文字对齐方式",[51,141866,141867,141868],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1112,141869,141870,141876],{},[51,141871,141872,141873,141875],{},"设置 ",[91,141874,23535],{}," 的 左右 12px 的内边距，设置一下文字颜色",[51,141877,141878],{},"分别设置 背景颜色",[51,141880,141881,141882,141884],{},"同意协议 和 完成注册 都是用 ",[91,141883,51],{}," 进行包裹",[40,141886,139899],{},[85,141888,141889],{"className":126529,"code":140472,"language":126531,"meta":14,"style":14},[91,141890,141891,141897,141907],{"__ignoreMap":14},[94,141892,141893,141895],{"class":96,"line":97},[94,141894,51588],{"class":51277},[94,141896,15554],{"class":104},[94,141898,141899,141901,141903,141905],{"class":96,"line":15},[94,141900,70855],{"class":153},[94,141902,51414],{"class":104},[94,141904,140489],{"class":153},[94,141906,1271],{"class":104},[94,141908,141909],{"class":96,"line":1160},[94,141910,1546],{"class":104},[40,141912,139988],{},[85,141914,141915],{"className":126529,"code":140472,"language":126531,"meta":14,"style":14},[91,141916,141917,141923,141933],{"__ignoreMap":14},[94,141918,141919,141921],{"class":96,"line":97},[94,141920,51588],{"class":51277},[94,141922,15554],{"class":104},[94,141924,141925,141927,141929,141931],{"class":96,"line":15},[94,141926,70855],{"class":153},[94,141928,51414],{"class":104},[94,141930,140489],{"class":153},[94,141932,1271],{"class":104},[94,141934,141935],{"class":96,"line":1160},[94,141936,1546],{"class":104},[65,141938,141940],{"id":141939},"_1634-底部实现","16.3.4 底部实现",[40,141942,139899],{},[85,141944,141945],{"className":126529,"code":140472,"language":126531,"meta":14,"style":14},[91,141946,141947,141953,141963],{"__ignoreMap":14},[94,141948,141949,141951],{"class":96,"line":97},[94,141950,51588],{"class":51277},[94,141952,15554],{"class":104},[94,141954,141955,141957,141959,141961],{"class":96,"line":15},[94,141956,70855],{"class":153},[94,141958,51414],{"class":104},[94,141960,140489],{"class":153},[94,141962,1271],{"class":104},[94,141964,141965],{"class":96,"line":1160},[94,141966,1546],{"class":104},[40,141968,139988],{},[85,141970,141971],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[91,141972,141973,141977,141991,141995],{"__ignoreMap":14},[94,141974,141975],{"class":96,"line":97},[94,141976,130640],{"class":163},[94,141978,141979,141981,141983,141985,141987,141989],{"class":96,"line":15},[94,141980,1015],{"class":104},[94,141982,51588],{"class":51277},[94,141984,53463],{"class":1944},[94,141986,150],{"class":104},[94,141988,130653],{"class":209},[94,141990,51284],{"class":104},[94,141992,141993],{"class":96,"line":1160},[94,141994,130660],{"class":104},[94,141996,141997,141999,142001],{"class":96,"line":1175},[94,141998,51762],{"class":104},[94,142000,51588],{"class":51277},[94,142002,51284],{"class":104},[35,142004,142006],{"id":142005},"_164-项目总结","16.4 项目总结",[48,142008,142009,142012,142015,142018],{},[51,142010,142011],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[51,142013,142014],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[51,142016,142017],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[51,142019,142020],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1443,142022],{"style":126385,"src":142023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[48,142025,142026],{"start":1181},[51,142027,142028],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1443,142030],{"style":126385,"src":142031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[48,142033,142034],{"start":1195},[51,142035,142036],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1443,142038],{"style":126385,"src":142039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[85,142041,142042],{"className":127276,"code":136686,"language":127278,"meta":14,"style":14},[91,142043,142044],{"__ignoreMap":14},[94,142045,142046,142048,142050,142052,142054,142056,142058,142060,142062,142064,142066,142068],{"class":96,"line":97},[94,142047,1015],{"class":104},[94,142049,53798],{"class":51277},[94,142051,53801],{"class":1944},[94,142053,150],{"class":104},[94,142055,62676],{"class":209},[94,142057,14902],{"class":1944},[94,142059,150],{"class":104},[94,142061,136707],{"class":209},[94,142063,60997],{"class":1944},[94,142065,150],{"class":104},[94,142067,136714],{"class":209},[94,142069,51284],{"class":104},[48,142071,142072,142075],{"start":1201},[51,142073,142074],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[51,142076,142077],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5108,142079,142080],{},"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":14,"searchDepth":15,"depth":15,"links":142082},[142083,142088,142095,142103],{"id":139709,"depth":15,"text":139710,"children":142084},[142085,142086,142087],{"id":139713,"depth":1160,"text":139714},{"id":140444,"depth":1160,"text":140445},{"id":140757,"depth":1160,"text":140758},{"id":141057,"depth":15,"text":141058,"children":142089},[142090,142091,142093],{"id":141061,"depth":1160,"text":141062},{"id":141079,"depth":1160,"text":142092},"16.2.2 列表页 header 和 nav 修改",{"id":141363,"depth":1160,"text":142094},"16.2.3 列表页主体 sk_container",{"id":141555,"depth":15,"text":141556,"children":142096},[142097,142098,142100,142102],{"id":141570,"depth":1160,"text":141571},{"id":141582,"depth":1160,"text":142099},"16.3.2 header 头部实现",{"id":141661,"depth":1160,"text":142101},"16.3.3 registerarea 主体模块实现",{"id":141939,"depth":1160,"text":141940},{"id":142005,"depth":15,"text":142006},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139701,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142110,"title":142111,"body":142112,"description":17,"extension":18,"meta":142220,"navigation":20,"path":142221,"seo":142222,"stem":142223,"__hash__":142224},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142113,"toc":142215},[142114,142117,142121,142124,142127,142136,142145,142149,142154,142161,142179,142182,142185,142188,142191,142194,142197,142200,142203,142206,142209,142212],[10,142115,142111],{"id":142116},"_17-web服务器与网站发布",[35,142118,142120],{"id":142119},"_171-web服务器","17.1 Web服务器",[40,142122,142123],{},"把自己网站上传到服务器上，可以让其他人访问",[1443,142125],{"style":126385,"src":142126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[40,142128,142129,142132,142133],{},[254,142130,142131],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[254,142134,142135],{},"Web 服务器等",[40,142137,142138,142139,100995,142142,25723],{},"根据服务器在网络中所在的位置不同，又可分为 ",[254,142140,142141],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[254,142143,142144],{},"远程服务器",[65,142146,142148],{"id":142147},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[40,142150,142151],{},[254,142152,142153],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[40,142155,142156,142157],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[343,142158,142159],{"href":142159,"rel":142160},"http:\u002F\u002Ffree.3v.do\u002F",[23847],[1112,142162,142163,142166,142169,142176],{},[51,142164,142165],{},"去免费空间网站注册账号。",[51,142167,142168],{},"记录下主机名、用户名、密码、域名。",[51,142170,142171,142172,142175],{},"利用 ",[91,142173,142174],{},"utftp"," 软件 上传网站到远程服务器",[51,142177,142178],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[40,142180,142181],{},"使用软件上传，对上传软件文件进行解压",[1443,142183],{"style":126385,"src":142184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1443,142186],{"style":126385,"src":142187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[40,142189,142190],{},"输入刚刚申请的服务器账号信息：",[1443,142192],{"style":126385,"src":142193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1443,142195],{"style":126385,"src":142196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1443,142198],{"style":126385,"src":142199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1443,142201],{"style":126385,"src":142202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[40,142204,142205],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1443,142207],{"style":126385,"src":142208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[40,142210,142211],{},"浏览器输入域名即可访问",[40,142213,142214],{},"首页一定必须是index",{"title":14,"searchDepth":15,"depth":15,"links":142216},[142217],{"id":142119,"depth":15,"text":142120,"children":142218},[142219],{"id":142147,"depth":1160,"text":142148},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142111,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142226,"title":142227,"body":142228,"description":17,"extension":18,"meta":143155,"navigation":20,"path":143156,"seo":143157,"stem":143158,"__hash__":143159},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142229,"toc":143138},[142230,142233,142237,142240,142243,142254,142257,142261,142265,142270,142273,142276,142279,142282,142286,142312,142316,142320,142323,142326,142330,142363,142367,142370,142373,142437,142441,142445,142448,142451,142454,142458,142503,142507,142510,142540,142544,142548,142551,142554,142558,142561,142630,142633,142741,142743,142749,142753,142756,142759,142855,142858,142862,142886,142890,142893,142897,142900,142904,142907,142910,142913,142916,142920,142923,142926,142930,142934,142937,142940,142943,142946,142950,142953,142957,142960,142963,143008,143012,143016,143019,143022,143025,143057,143061,143064,143098,143102,143105,143135],[10,142231,142227],{"id":142232},"_18-2d动画与3d转换",[35,142234,142236],{"id":142235},"_181-css3-2d转换","18.1 CSS3 2D转换",[40,142238,142239],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[40,142241,142242],{},"转换（transform）你可以简单理解为变形",[1112,142244,142245,142248,142251],{},[51,142246,142247],{},"移动：translate",[51,142249,142250],{},"旋转：rotate",[51,142252,142253],{},"缩放：scale",[1443,142255],{"style":126385,"src":142256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[65,142258,142260],{"id":142259},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[21980,142262,142264],{"id":142263},"_18111-translate介绍","18.1.1.1 translate介绍",[40,142266,142267,142268],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[254,142269,133188],{},[1443,142271],{"style":126385,"src":142272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[40,142274,142275],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[40,142277,142278],{},"对于行内元素无效",[40,142280,142281],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[21980,142283,142285],{"id":142284},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[85,142287,142288],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[91,142289,142290,142296,142308],{"__ignoreMap":14},[94,142291,142292,142294],{"class":96,"line":97},[94,142293,51588],{"class":51277},[94,142295,15554],{"class":104},[94,142297,142298,142300,142302,142304,142306],{"class":96,"line":15},[94,142299,70447],{"class":153},[94,142301,51414],{"class":104},[94,142303,296],{"class":153},[94,142305,51533],{"class":153},[94,142307,1271],{"class":104},[94,142309,142310],{"class":96,"line":1160},[94,142311,1546],{"class":104},[65,142313,142315],{"id":142314},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[21980,142317,142319],{"id":142318},"_18121-rotate介绍","18.1.2.1 rotate介绍",[40,142321,142322],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1443,142324],{"style":126385,"src":142325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[21980,142327,142329],{"id":142328},"_18122-旋转效果","18.1.2.2 旋转效果",[85,142331,142333],{"className":126529,"code":142332,"language":126531,"meta":14,"style":14},"div {\n  transform: rotate(45deg);\n}\n",[91,142334,142335,142341,142359],{"__ignoreMap":14},[94,142336,142337,142339],{"class":96,"line":97},[94,142338,51588],{"class":51277},[94,142340,15554],{"class":104},[94,142342,142343,142345,142347,142350,142352,142354,142357],{"class":96,"line":15},[94,142344,136513],{"class":153},[94,142346,51414],{"class":104},[94,142348,142349],{"class":153},"rotate",[94,142351,105],{"class":104},[94,142353,634],{"class":153},[94,142355,142356],{"class":100},"deg",[94,142358,2700],{"class":104},[94,142360,142361],{"class":96,"line":1160},[94,142362,1546],{"class":104},[21980,142364,142366],{"id":142365},"_18123-三角做法","18.1.2.3 三角做法",[40,142368,142369],{},"该下标当经过最外层大盒子时会实现向上反转",[1443,142371],{"style":126385,"src":142372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[85,142374,142375],{"className":126529,"code":135049,"language":126531,"meta":14,"style":14},[91,142376,142377,142381,142387,142397,142407,142423,142433],{"__ignoreMap":14},[94,142378,142379],{"class":96,"line":97},[94,142380,135056],{"class":163},[94,142382,142383,142385],{"class":96,"line":15},[94,142384,135061],{"class":1944},[94,142386,15554],{"class":104},[94,142388,142389,142391,142393,142395],{"class":96,"line":1160},[94,142390,70545],{"class":153},[94,142392,51414],{"class":104},[94,142394,296],{"class":153},[94,142396,1271],{"class":104},[94,142398,142399,142401,142403,142405],{"class":96,"line":1175},[94,142400,70765],{"class":153},[94,142402,51414],{"class":104},[94,142404,296],{"class":153},[94,142406,1271],{"class":104},[94,142408,142409,142411,142413,142415,142417,142419,142421],{"class":96,"line":1181},[94,142410,70873],{"class":153},[94,142412,51414],{"class":104},[94,142414,551],{"class":153},[94,142416,51469],{"class":100},[94,142418,51498],{"class":153},[94,142420,63968],{"class":153},[94,142422,1271],{"class":104},[94,142424,142425,142427,142429,142431],{"class":96,"line":1195},[94,142426,135104],{"class":153},[94,142428,51414],{"class":104},[94,142430,62346],{"class":153},[94,142432,1271],{"class":104},[94,142434,142435],{"class":96,"line":1201},[94,142436,1546],{"class":104},[65,142438,142440],{"id":142439},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[21980,142442,142444],{"id":142443},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[40,142446,142447],{},"设置中心点",[1443,142449],{"style":126385,"src":142450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[40,142452,142453],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[21980,142455,142457],{"id":142456},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[85,142459,142461],{"className":126529,"code":142460,"language":126531,"meta":14,"style":14},"\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",[91,142462,142463,142468,142474,142489,142494,142499],{"__ignoreMap":14},[94,142464,142465],{"class":96,"line":97},[94,142466,142467],{"class":163},"\u002F* 转换中心点 *\u002F\n",[94,142469,142470,142472],{"class":96,"line":15},[94,142471,51588],{"class":51277},[94,142473,15554],{"class":104},[94,142475,142476,142479,142481,142483,142485,142487],{"class":96,"line":1160},[94,142477,142478],{"class":153},"  transform-origin",[94,142480,51414],{"class":104},[94,142482,51569],{"class":153},[94,142484,17126],{"class":153},[94,142486,130392],{"class":104},[94,142488,135202],{"class":163},[94,142490,142491],{"class":96,"line":1175},[94,142492,142493],{"class":163},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[94,142495,142496],{"class":96,"line":1181},[94,142497,142498],{"class":163},"  \u002F* transform-origin: left top; *\u002F\n",[94,142500,142501],{"class":96,"line":1195},[94,142502,1546],{"class":104},[21980,142504,142506],{"id":142505},"_18133-旋转案例","18.1.3.3 旋转案例",[1443,142508],{"style":126385,"src":142509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[85,142511,142512],{"className":126529,"code":142332,"language":126531,"meta":14,"style":14},[91,142513,142514,142520,142536],{"__ignoreMap":14},[94,142515,142516,142518],{"class":96,"line":97},[94,142517,51588],{"class":51277},[94,142519,15554],{"class":104},[94,142521,142522,142524,142526,142528,142530,142532,142534],{"class":96,"line":15},[94,142523,136513],{"class":153},[94,142525,51414],{"class":104},[94,142527,142349],{"class":153},[94,142529,105],{"class":104},[94,142531,634],{"class":153},[94,142533,142356],{"class":100},[94,142535,2700],{"class":104},[94,142537,142538],{"class":96,"line":1160},[94,142539,1546],{"class":104},[65,142541,142543],{"id":142542},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[21980,142545,142547],{"id":142546},"_18141-scale介绍","18.1.4.1 scale介绍",[40,142549,142550],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1443,142552],{"style":126385,"src":142553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[21980,142555,142557],{"id":142556},"_18142-分页按钮","18.1.4.2 分页按钮",[1443,142559],{"style":126385,"src":142560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[85,142562,142564],{"className":126529,"code":142563,"language":126531,"meta":14,"style":14},"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",[91,142565,142566,142572,142588,142592,142596,142601,142607,142621,142626],{"__ignoreMap":14},[94,142567,142568,142570],{"class":96,"line":97},[94,142569,51588],{"class":51277},[94,142571,15554],{"class":104},[94,142573,142574,142576,142578,142581,142583,142586],{"class":96,"line":15},[94,142575,136513],{"class":153},[94,142577,51414],{"class":104},[94,142579,142580],{"class":153},"scale",[94,142582,105],{"class":104},[94,142584,142585],{"class":153},"1.2",[94,142587,2700],{"class":104},[94,142589,142590],{"class":96,"line":1160},[94,142591,1546],{"class":104},[94,142593,142594],{"class":96,"line":1175},[94,142595,135990],{"class":104},[94,142597,142598],{"class":96,"line":1181},[94,142599,142600],{"class":163},"\u002F* 2D 缩放 *\u002F\n",[94,142602,142603,142605],{"class":96,"line":1195},[94,142604,51588],{"class":51277},[94,142606,15554],{"class":104},[94,142608,142609,142611,142613,142615,142617,142619],{"class":96,"line":1201},[94,142610,136513],{"class":153},[94,142612,51414],{"class":104},[94,142614,142580],{"class":153},[94,142616,105],{"class":104},[94,142618,142585],{"class":153},[94,142620,2700],{"class":104},[94,142622,142623],{"class":96,"line":1292},[94,142624,142625],{"class":163},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[94,142627,142628],{"class":96,"line":1298},[94,142629,1546],{"class":104},[40,142631,142632],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[85,142634,142636],{"className":126529,"code":142635,"language":126531,"meta":14,"style":14},"\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",[91,142637,142638,142643,142653,142674,142695,142699,142704,142710,142737],{"__ignoreMap":14},[94,142639,142640],{"class":96,"line":97},[94,142641,142642],{"class":163},"\u002F* 定义动画 *\u002F\n",[94,142644,142645,142648,142651],{"class":96,"line":15},[94,142646,142647],{"class":100},"@keyframes",[94,142649,142650],{"class":5198}," move",[94,142652,15554],{"class":104},[94,142654,142655,142658,142660,142662,142664,142667,142669,142671],{"class":96,"line":1160},[94,142656,142657],{"class":1944},"  0%",[94,142659,79784],{"class":104},[94,142661,48117],{"class":153},[94,142663,51414],{"class":104},[94,142665,142666],{"class":153},"translateX",[94,142668,105],{"class":104},[94,142670,296],{"class":153},[94,142672,142673],{"class":104},"); }\n",[94,142675,142676,142679,142681,142683,142685,142687,142689,142691,142693],{"class":96,"line":1175},[94,142677,142678],{"class":1944},"  100%",[94,142680,79784],{"class":104},[94,142682,48117],{"class":153},[94,142684,51414],{"class":104},[94,142686,142666],{"class":153},[94,142688,105],{"class":104},[94,142690,416],{"class":153},[94,142692,51469],{"class":100},[94,142694,142673],{"class":104},[94,142696,142697],{"class":96,"line":1181},[94,142698,1546],{"class":104},[94,142700,142701],{"class":96,"line":1195},[94,142702,142703],{"class":163},"\u002F* 调用动画 *\u002F\n",[94,142705,142706,142708],{"class":96,"line":1201},[94,142707,51588],{"class":51277},[94,142709,15554],{"class":104},[94,142711,142712,142715,142717,142719,142721,142723,142725,142727,142729,142732,142735],{"class":96,"line":1292},[94,142713,142714],{"class":153},"  animation",[94,142716,51414],{"class":104},[94,142718,135215],{"class":153},[94,142720,25101],{"class":153},[94,142722,800],{"class":100},[94,142724,78657],{"class":153},[94,142726,4074],{"class":153},[94,142728,800],{"class":100},[94,142730,142731],{"class":153}," infinite",[94,142733,142734],{"class":153}," alternate",[94,142736,1271],{"class":104},[94,142738,142739],{"class":96,"line":1298},[94,142740,1546],{"class":104},[40,142742,142632],{},[85,142744,142747],{"className":142745,"code":142746,"language":5169},[5167],"\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",[91,142748,142746],{"__ignoreMap":14},[21980,142750,142752],{"id":142751},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[40,142754,142755],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1443,142757],{"style":126385,"src":142758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[85,142760,142761],{"className":126529,"code":142635,"language":126531,"meta":14,"style":14},[91,142762,142763,142767,142775,142793,142813,142817,142821,142827,142851],{"__ignoreMap":14},[94,142764,142765],{"class":96,"line":97},[94,142766,142642],{"class":163},[94,142768,142769,142771,142773],{"class":96,"line":15},[94,142770,142647],{"class":100},[94,142772,142650],{"class":5198},[94,142774,15554],{"class":104},[94,142776,142777,142779,142781,142783,142785,142787,142789,142791],{"class":96,"line":1160},[94,142778,142657],{"class":1944},[94,142780,79784],{"class":104},[94,142782,48117],{"class":153},[94,142784,51414],{"class":104},[94,142786,142666],{"class":153},[94,142788,105],{"class":104},[94,142790,296],{"class":153},[94,142792,142673],{"class":104},[94,142794,142795,142797,142799,142801,142803,142805,142807,142809,142811],{"class":96,"line":1175},[94,142796,142678],{"class":1944},[94,142798,79784],{"class":104},[94,142800,48117],{"class":153},[94,142802,51414],{"class":104},[94,142804,142666],{"class":153},[94,142806,105],{"class":104},[94,142808,416],{"class":153},[94,142810,51469],{"class":100},[94,142812,142673],{"class":104},[94,142814,142815],{"class":96,"line":1181},[94,142816,1546],{"class":104},[94,142818,142819],{"class":96,"line":1195},[94,142820,142703],{"class":163},[94,142822,142823,142825],{"class":96,"line":1201},[94,142824,51588],{"class":51277},[94,142826,15554],{"class":104},[94,142828,142829,142831,142833,142835,142837,142839,142841,142843,142845,142847,142849],{"class":96,"line":1292},[94,142830,142714],{"class":153},[94,142832,51414],{"class":104},[94,142834,135215],{"class":153},[94,142836,25101],{"class":153},[94,142838,800],{"class":100},[94,142840,78657],{"class":153},[94,142842,4074],{"class":153},[94,142844,800],{"class":100},[94,142846,142731],{"class":153},[94,142848,142734],{"class":153},[94,142850,1271],{"class":104},[94,142852,142853],{"class":96,"line":1298},[94,142854,1546],{"class":104},[40,142856,142857],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[65,142859,142861],{"id":142860},"_1823-知识点回顾","18.2.3 知识点回顾",[85,142863,142864],{"className":126529,"code":128698,"language":126531,"meta":14,"style":14},[91,142865,142866,142872,142882],{"__ignoreMap":14},[94,142867,142868,142870],{"class":96,"line":97},[94,142869,51588],{"class":51277},[94,142871,15554],{"class":104},[94,142873,142874,142876,142878,142880],{"class":96,"line":15},[94,142875,128711],{"class":153},[94,142877,51414],{"class":104},[94,142879,61713],{"class":153},[94,142881,1271],{"class":104},[94,142883,142884],{"class":96,"line":1160},[94,142885,1546],{"class":104},[35,142887,142889],{"id":142888},"_183-3d-转换","18.3 3D 转换",[40,142891,142892],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[65,142894,142896],{"id":142895},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1443,142898],{"style":126385,"src":142899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[65,142901,142903],{"id":142902},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1443,142905],{"style":126385,"src":142906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[40,142908,142909],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[40,142911,142912],{},"translate3d的效果需要搭配透视perspective来使用",[1443,142914],{"style":126385,"src":142915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[65,142917,142919],{"id":142918},"_1833-透视-perspective","18.3.3 透视 perspective",[1443,142921],{"style":126385,"src":142922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[40,142924,142925],{},"透视写在父盒子上，单位为像素",[65,142927,142929],{"id":142928},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[21980,142931,142933],{"id":142932},"_18341-分开解释","18.3.4.1 分开解释",[1443,142935],{"style":126385,"src":142936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1443,142938],{"style":126385,"src":142939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1443,142941],{"style":126385,"src":142942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[40,142944,142945],{},"总结来说就是左手原则",[21980,142947,142949],{"id":142948},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1443,142951],{"style":126385,"src":142952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[65,142954,142956],{"id":142955},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1443,142958],{"style":126385,"src":142959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1443,142961],{"style":126385,"src":142962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[85,142964,142966],{"className":126529,"code":142965,"language":126531,"meta":14,"style":14},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[91,142967,142968,142974,142987,143004],{"__ignoreMap":14},[94,142969,142970,142972],{"class":96,"line":97},[94,142971,51588],{"class":51277},[94,142973,15554],{"class":104},[94,142975,142976,142979,142981,142983,142985],{"class":96,"line":15},[94,142977,142978],{"class":153},"  perspective",[94,142980,51414],{"class":104},[94,142982,65051],{"class":153},[94,142984,51469],{"class":100},[94,142986,1271],{"class":104},[94,142988,142989,142991,142993,142996,142998,143000,143002],{"class":96,"line":1160},[94,142990,136513],{"class":153},[94,142992,51414],{"class":104},[94,142994,142995],{"class":153},"rotateX",[94,142997,105],{"class":104},[94,142999,634],{"class":153},[94,143001,142356],{"class":100},[94,143003,2700],{"class":104},[94,143005,143006],{"class":96,"line":1175},[94,143007,1546],{"class":104},[65,143009,143011],{"id":143010},"_1836-案例","18.3.6 案例",[21980,143013,143015],{"id":143014},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1443,143017],{"style":126385,"src":143018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1443,143020],{"style":126385,"src":143021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1443,143023],{"style":126385,"src":143024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[85,143026,143028],{"className":126529,"code":143027,"language":126531,"meta":14,"style":14},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[91,143029,143030,143035,143041,143053],{"__ignoreMap":14},[94,143031,143032],{"class":96,"line":97},[94,143033,143034],{"class":163},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[94,143036,143037,143039],{"class":96,"line":15},[94,143038,133526],{"class":1944},[94,143040,15554],{"class":104},[94,143042,143043,143045,143047,143049,143051],{"class":96,"line":1160},[94,143044,142978],{"class":153},[94,143046,51414],{"class":104},[94,143048,65051],{"class":153},[94,143050,51469],{"class":100},[94,143052,1271],{"class":104},[94,143054,143055],{"class":96,"line":1175},[94,143056,1546],{"class":104},[21980,143058,143060],{"id":143059},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1443,143062],{"style":126385,"src":143063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[85,143065,143066],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[91,143067,143068,143072,143086,143090],{"__ignoreMap":14},[94,143069,143070],{"class":96,"line":97},[94,143071,130640],{"class":163},[94,143073,143074,143076,143078,143080,143082,143084],{"class":96,"line":15},[94,143075,1015],{"class":104},[94,143077,51588],{"class":51277},[94,143079,53463],{"class":1944},[94,143081,150],{"class":104},[94,143083,130653],{"class":209},[94,143085,51284],{"class":104},[94,143087,143088],{"class":96,"line":1160},[94,143089,130660],{"class":104},[94,143091,143092,143094,143096],{"class":96,"line":1175},[94,143093,51762],{"class":104},[94,143095,51588],{"class":51277},[94,143097,51284],{"class":104},[21980,143099,143101],{"id":143100},"_18363-旋转木马","18.3.6.3 旋转木马",[1443,143103],{"style":126385,"src":143104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[85,143106,143107],{"className":126529,"code":142332,"language":126531,"meta":14,"style":14},[91,143108,143109,143115,143131],{"__ignoreMap":14},[94,143110,143111,143113],{"class":96,"line":97},[94,143112,51588],{"class":51277},[94,143114,15554],{"class":104},[94,143116,143117,143119,143121,143123,143125,143127,143129],{"class":96,"line":15},[94,143118,136513],{"class":153},[94,143120,51414],{"class":104},[94,143122,142349],{"class":153},[94,143124,105],{"class":104},[94,143126,634],{"class":153},[94,143128,142356],{"class":100},[94,143130,2700],{"class":104},[94,143132,143133],{"class":96,"line":1160},[94,143134,1546],{"class":104},[5108,143136,143137],{},"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":14,"searchDepth":15,"depth":15,"links":143139},[143140,143147],{"id":142235,"depth":15,"text":142236,"children":143141},[143142,143143,143144,143145,143146],{"id":142259,"depth":1160,"text":142260},{"id":142314,"depth":1160,"text":142315},{"id":142439,"depth":1160,"text":142440},{"id":142542,"depth":1160,"text":142543},{"id":142860,"depth":1160,"text":142861},{"id":142888,"depth":15,"text":142889,"children":143148},[143149,143150,143151,143152,143153,143154],{"id":142895,"depth":1160,"text":142896},{"id":142902,"depth":1160,"text":142903},{"id":142918,"depth":1160,"text":142919},{"id":142928,"depth":1160,"text":142929},{"id":142955,"depth":1160,"text":142956},{"id":143010,"depth":1160,"text":143011},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142227,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143161,"title":143162,"body":143163,"description":17,"extension":18,"meta":143366,"navigation":20,"path":143367,"seo":143368,"stem":143369,"__hash__":143370},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143164,"toc":143355},[143165,143168,143172,143175,143178,143182,143185,143188,143191,143195,143198,143202,143205,143209,143212,143216,143230,143234,143259,143262,143265,143282,143286,143290,143293,143296,143300,143303,143306,143324,143328,143331,143345,143349,143352],[10,143166,143162],{"id":143167},"_19-移动端基础-前缀现状与视口",[35,143169,143171],{"id":143170},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1443,143173],{"style":126385,"src":143174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[40,143176,143177],{},"意思就是加个前缀，增加兼容性",[35,143179,143181],{"id":143180},"_192-移动端现状认识","19.2 移动端现状认识",[1443,143183],{"style":126385,"src":143184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[40,143186,143187],{},"调试方法：",[1443,143189],{"style":126385,"src":143190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[35,143192,143194],{"id":143193},"_193-视口","19.3 视口",[40,143196,143197],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[65,143199,143201],{"id":143200},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1443,143203],{"style":126385,"src":143204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[65,143206,143208],{"id":143207},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1443,143210],{"style":126385,"src":143211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[65,143213,143215],{"id":143214},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1112,143217,143218,143221,143224,143227],{},[51,143219,143220],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[51,143222,143223],{},"理想视口，对设备来讲，是最理想的视口尺寸",[51,143225,143226],{},"需要手动添写meta视口标签通知浏览器操作",[51,143228,143229],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[65,143231,143233],{"id":143232},"_1934-meta视口标签","19.3.4 meta视口标签",[85,143235,143237],{"className":127276,"code":143236,"language":127278,"meta":14,"style":14},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[91,143238,143239],{"__ignoreMap":14},[94,143240,143241,143243,143245,143247,143249,143251,143253,143255,143257],{"class":96,"line":97},[94,143242,1015],{"class":104},[94,143244,51321],{"class":51277},[94,143246,14902],{"class":1944},[94,143248,150],{"class":104},[94,143250,51368],{"class":209},[94,143252,51348],{"class":1944},[94,143254,150],{"class":104},[94,143256,51375],{"class":209},[94,143258,51284],{"class":104},[1443,143260],{"style":126385,"src":143261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[40,143263,143264],{},"标准视口设置：",[48,143266,143267,143270,143273,143276,143279],{},[51,143268,143269],{},"视口宽度和设备保持一致",[51,143271,143272],{},"视口的默认缩放比例1.0",[51,143274,143275],{},"不允许用户自行缩放",[51,143277,143278],{},"最大允许的缩放比例1.0",[51,143280,143281],{},"最小允许的缩放比例1.0",[65,143283,143285],{"id":143284},"_1935-二倍图","19.3.5 二倍图",[21980,143287,143289],{"id":143288},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1443,143291],{"style":126385,"src":143292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1443,143294],{"style":126385,"src":143295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[21980,143297,143299],{"id":143298},"_19352-多倍图","19.3.5.2 多倍图",[1443,143301],{"style":126385,"src":143302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[40,143304,143305],{},"二倍图法，代码如下：",[85,143307,143309],{"className":126529,"code":143308,"language":126531,"meta":14,"style":14},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[91,143310,143311,143316],{"__ignoreMap":14},[94,143312,143313],{"class":96,"line":97},[94,143314,143315],{"class":163},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[94,143317,143318,143321],{"class":96,"line":15},[94,143319,143320],{"class":51277},"background-size",[94,143322,143323],{"class":104},": 50% 50%;\n",[21980,143325,143327],{"id":143326},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1443,143329],{"style":126385,"src":143330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[48,143332,143333,143336,143339,143342],{},[51,143334,143335],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[51,143337,143338],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[51,143340,143341],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[51,143343,143344],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[21980,143346,143348],{"id":143347},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1443,143350],{"style":126385,"src":143351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5108,143353,143354],{},"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":14,"searchDepth":15,"depth":15,"links":143356},[143357,143358,143359],{"id":143170,"depth":15,"text":143171},{"id":143180,"depth":15,"text":143181},{"id":143193,"depth":15,"text":143194,"children":143360},[143361,143362,143363,143364,143365],{"id":143200,"depth":1160,"text":143201},{"id":143207,"depth":1160,"text":143208},{"id":143214,"depth":1160,"text":143215},{"id":143232,"depth":1160,"text":143233},{"id":143284,"depth":1160,"text":143285},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143162,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143372,"title":143373,"body":143374,"description":17,"extension":18,"meta":144251,"navigation":20,"path":144252,"seo":144253,"stem":144254,"__hash__":144255},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143375,"toc":144235},[143376,143379,143383,143390,143393,143400,143403,143408,143411,143415,143419,143426,143429,143432,143436,143439,143442,143445,143448,143451,143455,143458,143462,143464,143467,143470,143473,143476,143478,143481,143483,143513,143515,143545,143549,143552,143556,143559,143576,143579,143582,143658,143660,143663,143666,143669,143672,143674,143677,143680,143684,143706,143709,143712,143716,143719,143725,143728,143732,143735,143738,143742,143745,143748,143751,143755,143758,143761,143764,143767,143771,143774,143778,143785,143788,143791,143794,143797,143807,143810,143813,143820,143823,143827,143830,143833,143837,143840,143843,143846,143891,143894,143897,143900,143902,144031,144033,144071,144074,144077,144079,144197,144199,144233],[10,143377,143373],{"id":143378},"_20-移动端布局实战上篇",[35,143380,143382],{"id":143381},"_201-移动端主流方案","20.1 移动端主流方案",[48,143384,143385],{},[51,143386,143387],{},[254,143388,143389],{},"单独移动端页面（主流）",[1443,143391],{"style":126385,"src":143392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[48,143394,143395],{"start":15},[51,143396,143397],{},[254,143398,143399],{},"响应式兼容PC移动端",[1443,143401],{"style":126385,"src":143402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[48,143404,143405],{"start":1160},[51,143406,143407],{},"两种页面选型布局方式",[1443,143409],{"style":126385,"src":143410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[35,143412,143414],{"id":143413},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[65,143416,143418],{"id":143417},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[40,143420,143421,143422],{},"官网地址： ",[343,143423,143424],{"href":143424,"rel":143425},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23847],[1443,143427],{"style":126385,"src":143428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1443,143430],{"style":126385,"src":143431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[65,143433,143435],{"id":143434},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1443,143437],{"style":126385,"src":143438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1443,143440],{"style":126385,"src":143441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[40,143443,143444],{},"去除高亮：",[40,143446,143447],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[40,143449,143450],{},"-webkit- tap-highlight-color: transparent;",[35,143452,143454],{"id":143453},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1443,143456],{"style":126385,"src":143457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[35,143459,143461],{"id":143460},"_204-流式布局案例","20.4 流式布局案例",[40,143463,134],{},[40,143465,143466],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[40,143468,143469],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[40,143471,143472],{},"图片格式：",[1443,143474],{"style":126385,"src":143475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[40,143477,135572],{},[1443,143479],{"style":126385,"src":143480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[40,143482,139899],{},[85,143484,143485],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[91,143486,143487],{"__ignoreMap":14},[94,143488,143489,143491,143493,143495,143497,143499,143501,143503,143505,143507,143509,143511],{"class":96,"line":97},[94,143490,1015],{"class":104},[94,143492,1443],{"class":51277},[94,143494,55216],{"class":1944},[94,143496,150],{"class":104},[94,143498,134046],{"class":209},[94,143500,55224],{"class":1944},[94,143502,150],{"class":104},[94,143504,134053],{"class":209},[94,143506,134056],{"class":1944},[94,143508,150],{"class":104},[94,143510,134061],{"class":209},[94,143512,51284],{"class":104},[40,143514,139988],{},[85,143516,143517],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[91,143518,143519],{"__ignoreMap":14},[94,143520,143521,143523,143525,143527,143529,143531,143533,143535,143537,143539,143541,143543],{"class":96,"line":97},[94,143522,1015],{"class":104},[94,143524,1443],{"class":51277},[94,143526,55216],{"class":1944},[94,143528,150],{"class":104},[94,143530,134046],{"class":209},[94,143532,55224],{"class":1944},[94,143534,150],{"class":104},[94,143536,134053],{"class":209},[94,143538,134056],{"class":1944},[94,143540,150],{"class":104},[94,143542,134061],{"class":209},[94,143544,51284],{"class":104},[35,143546,143548],{"id":143547},"_205-flex布局","20.5 flex布局",[1443,143550],{"style":126385,"src":143551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[65,143553,143555],{"id":143554},"_2051-布局原理","20.5.1 布局原理",[40,143557,143558],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1112,143560,143561,143564,143567,143570,143573],{},[51,143562,143563],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[51,143565,143566],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[51,143568,143569],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[51,143571,143572],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[51,143574,143575],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[40,143577,143578],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[40,143580,143581],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[85,143583,143585],{"className":126529,"code":143584,"language":126531,"meta":14,"style":14},"\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",[91,143586,143587,143592,143599,143609,143621,143632,143643,143654],{"__ignoreMap":14},[94,143588,143589],{"class":96,"line":97},[94,143590,143591],{"class":163},"\u002F* Flex 弹性布局 *\u002F\n",[94,143593,143594,143597],{"class":96,"line":15},[94,143595,143596],{"class":1944},".container",[94,143598,15554],{"class":104},[94,143600,143601,143603,143605,143607],{"class":96,"line":1160},[94,143602,128145],{"class":153},[94,143604,51414],{"class":104},[94,143606,51454],{"class":153},[94,143608,1271],{"class":104},[94,143610,143611,143614,143616,143619],{"class":96,"line":1175},[94,143612,143613],{"class":153},"  flex-direction",[94,143615,51414],{"class":104},[94,143617,143618],{"class":153},"row",[94,143620,1271],{"class":104},[94,143622,143623,143626,143628,143630],{"class":96,"line":1181},[94,143624,143625],{"class":153},"  justify-content",[94,143627,51414],{"class":104},[94,143629,51645],{"class":153},[94,143631,1271],{"class":104},[94,143633,143634,143637,143639,143641],{"class":96,"line":1195},[94,143635,143636],{"class":153},"  align-items",[94,143638,51414],{"class":104},[94,143640,51569],{"class":153},[94,143642,1271],{"class":104},[94,143644,143645,143648,143650,143652],{"class":96,"line":1201},[94,143646,143647],{"class":153},"  flex-wrap",[94,143649,51414],{"class":104},[94,143651,78587],{"class":153},[94,143653,1271],{"class":104},[94,143655,143656],{"class":96,"line":1292},[94,143657,1546],{"class":104},[40,143659,70430],{},[40,143661,143662],{},".form-item .male-label {",[40,143664,143665],{},"   margin-right: 20px;",[40,143667,143668],{},"   display: inline-flex;",[40,143670,143671],{},"   align-items: center;",[40,143673,1051],{},[1443,143675],{"style":126385,"src":143676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1443,143678],{"style":126385,"src":143679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[65,143681,143683],{"id":143682},"_2052-常见父项属性","20.5.2 常见父项属性",[48,143685,143686,143689,143692,143695,143698,143701,143704],{},[51,143687,143688],{},"flex-direction：设置主轴的方向",[51,143690,143691],{},"justify-content：设置主轴上的子元素排列方式",[51,143693,143694],{},"flex-wrap：设置子元素是否换行",[51,143696,143697],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[51,143699,143700],{},"align-items：设置侧轴上的子元素排列方式（单行）",[51,143702,143703],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[51,143705,143688],{},[1443,143707],{"style":126385,"src":143708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1443,143710],{"style":126385,"src":143711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[48,143713,143714],{"start":15},[51,143715,143691],{},[1443,143717],{"style":126385,"src":143718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[40,143720,143721,143724],{},[91,143722,143723],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[40,143726,143727],{},"跟着主轴走",[48,143729,143730],{"start":1160},[51,143731,143694],{},[1443,143733],{"style":126385,"src":143734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[40,143736,143737],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[48,143739,143740],{"start":1175},[51,143741,143697],{},[1443,143743],{"style":126385,"src":143744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[40,143746,143747],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[40,143749,143750],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[48,143752,143753],{"start":1181},[51,143754,143700],{},[1443,143756],{"style":126385,"src":143757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[40,143759,143760],{},"align-items与align-content之间的区别：",[40,143762,143763],{},"单找items，多找content",[1443,143765],{"style":126385,"src":143766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[48,143768,143769],{"start":1195},[51,143770,143703],{},[1443,143772],{"style":126385,"src":143773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[65,143775,143777],{"id":143776},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[48,143779,143780],{},[51,143781,143782],{},[254,143783,143784],{},"flex 属性",[40,143786,143787],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1443,143789],{"style":126385,"src":143790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[40,143792,143793],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[40,143795,143796],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[48,143798,143799],{"start":15},[51,143800,143801,13777,143804],{},[254,143802,143803],{},"align-self",[254,143805,143806],{},"控制子项自己在侧轴上的排列方式",[1443,143808],{"style":126385,"src":143809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[40,143811,143812],{},"单个子盒子在父盒子侧轴上的排列方式",[48,143814,143815],{"start":1160},[51,143816,143817,143819],{},[254,143818,95274],{}," 属性定义项目的排列顺序",[1443,143821],{"style":126385,"src":143822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[65,143824,143826],{"id":143825},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1443,143828],{"style":126385,"src":143829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[40,143831,143832],{},"必须要添加浏览器的私有前缀",[65,143834,143836],{"id":143835},"_2055-携程网首页案例","20.5.5 携程网首页案例",[40,143838,143839],{},"学到最重要的知识：",[40,143841,143842],{},"flex处理这样的布局思路",[1443,143844],{"style":126385,"src":143845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[85,143847,143849],{"className":126529,"code":143848,"language":126531,"meta":14,"style":14},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[91,143850,143851,143857,143867,143877,143887],{"__ignoreMap":14},[94,143852,143853,143855],{"class":96,"line":97},[94,143854,143596],{"class":1944},[94,143856,15554],{"class":104},[94,143858,143859,143861,143863,143865],{"class":96,"line":15},[94,143860,128145],{"class":153},[94,143862,51414],{"class":104},[94,143864,51454],{"class":153},[94,143866,1271],{"class":104},[94,143868,143869,143871,143873,143875],{"class":96,"line":1160},[94,143870,143625],{"class":153},[94,143872,51414],{"class":104},[94,143874,51569],{"class":153},[94,143876,1271],{"class":104},[94,143878,143879,143881,143883,143885],{"class":96,"line":1175},[94,143880,143636],{"class":153},[94,143882,51414],{"class":104},[94,143884,51569],{"class":153},[94,143886,1271],{"class":104},[94,143888,143889],{"class":96,"line":1181},[94,143890,1546],{"class":104},[40,143892,143893],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[40,143895,143896],{},"使用属性选择器",[1443,143898],{"style":126385,"src":143899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[40,143901,68866],{},[85,143903,143905],{"className":127276,"code":143904,"language":127278,"meta":14,"style":14},"\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",[91,143906,143907,143912,143926,143931,143951,143956,143975,143980,143999,144004,144023],{"__ignoreMap":14},[94,143908,143909],{"class":96,"line":97},[94,143910,143911],{"class":163},"\u003C!-- 携程网移动端案例结构 -->\n",[94,143913,143914,143916,143918,143920,143922,143924],{"class":96,"line":15},[94,143915,1015],{"class":104},[94,143917,51588],{"class":51277},[94,143919,53463],{"class":1944},[94,143921,150],{"class":104},[94,143923,92300],{"class":209},[94,143925,51284],{"class":104},[94,143927,143928],{"class":96,"line":1160},[94,143929,143930],{"class":163},"  \u003C!-- 搜索栏 -->\n",[94,143932,143933,143935,143937,143939,143941,143944,143947,143949],{"class":96,"line":1175},[94,143934,52121],{"class":104},[94,143936,51588],{"class":51277},[94,143938,53463],{"class":1944},[94,143940,150],{"class":104},[94,143942,143943],{"class":209},"\"search-index\"",[94,143945,143946],{"class":104},">...\u003C\u002F",[94,143948,51588],{"class":51277},[94,143950,51284],{"class":104},[94,143952,143953],{"class":96,"line":1181},[94,143954,143955],{"class":163},"  \u003C!-- 焦点图 -->\n",[94,143957,143958,143960,143962,143964,143966,143969,143971,143973],{"class":96,"line":1195},[94,143959,52121],{"class":104},[94,143961,51588],{"class":51277},[94,143963,53463],{"class":1944},[94,143965,150],{"class":104},[94,143967,143968],{"class":209},"\"focus\"",[94,143970,143946],{"class":104},[94,143972,51588],{"class":51277},[94,143974,51284],{"class":104},[94,143976,143977],{"class":96,"line":1201},[94,143978,143979],{"class":163},"  \u003C!-- 主导航 -->\n",[94,143981,143982,143984,143986,143988,143990,143993,143995,143997],{"class":96,"line":1292},[94,143983,52121],{"class":104},[94,143985,51588],{"class":51277},[94,143987,53463],{"class":1944},[94,143989,150],{"class":104},[94,143991,143992],{"class":209},"\"local-nav\"",[94,143994,143946],{"class":104},[94,143996,51588],{"class":51277},[94,143998,51284],{"class":104},[94,144000,144001],{"class":96,"line":1298},[94,144002,144003],{"class":163},"  \u003C!-- 子导航 -->\n",[94,144005,144006,144008,144010,144012,144014,144017,144019,144021],{"class":96,"line":1310},[94,144007,52121],{"class":104},[94,144009,51588],{"class":51277},[94,144011,53463],{"class":1944},[94,144013,150],{"class":104},[94,144015,144016],{"class":209},"\"nav-common\"",[94,144018,143946],{"class":104},[94,144020,51588],{"class":51277},[94,144022,51284],{"class":104},[94,144024,144025,144027,144029],{"class":96,"line":1593},[94,144026,51762],{"class":104},[94,144028,51588],{"class":51277},[94,144030,51284],{"class":104},[40,144032,70430],{},[85,144034,144035],{"className":126529,"code":136981,"language":126531,"meta":14,"style":14},[91,144036,144037,144051,144067],{"__ignoreMap":14},[94,144038,144039,144041,144043,144045,144047,144049],{"class":96,"line":97},[94,144040,53798],{"class":51277},[94,144042,995],{"class":104},[94,144044,103084],{"class":1944},[94,144046,150],{"class":100},[94,144048,62676],{"class":209},[94,144050,136998],{"class":104},[94,144052,144053,144055,144057,144059,144061,144063,144065],{"class":96,"line":15},[94,144054,70873],{"class":153},[94,144056,51414],{"class":104},[94,144058,322],{"class":153},[94,144060,51469],{"class":100},[94,144062,51498],{"class":153},[94,144064,130109],{"class":153},[94,144066,1271],{"class":104},[94,144068,144069],{"class":96,"line":1160},[94,144070,1546],{"class":104},[40,144072,144073],{},"总代码和效果展示：",[1443,144075],{"style":126385,"src":144076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[40,144078,68866],{},[85,144080,144081],{"className":127276,"code":143904,"language":127278,"meta":14,"style":14},[91,144082,144083,144087,144101,144105,144123,144127,144145,144149,144167,144171,144189],{"__ignoreMap":14},[94,144084,144085],{"class":96,"line":97},[94,144086,143911],{"class":163},[94,144088,144089,144091,144093,144095,144097,144099],{"class":96,"line":15},[94,144090,1015],{"class":104},[94,144092,51588],{"class":51277},[94,144094,53463],{"class":1944},[94,144096,150],{"class":104},[94,144098,92300],{"class":209},[94,144100,51284],{"class":104},[94,144102,144103],{"class":96,"line":1160},[94,144104,143930],{"class":163},[94,144106,144107,144109,144111,144113,144115,144117,144119,144121],{"class":96,"line":1175},[94,144108,52121],{"class":104},[94,144110,51588],{"class":51277},[94,144112,53463],{"class":1944},[94,144114,150],{"class":104},[94,144116,143943],{"class":209},[94,144118,143946],{"class":104},[94,144120,51588],{"class":51277},[94,144122,51284],{"class":104},[94,144124,144125],{"class":96,"line":1181},[94,144126,143955],{"class":163},[94,144128,144129,144131,144133,144135,144137,144139,144141,144143],{"class":96,"line":1195},[94,144130,52121],{"class":104},[94,144132,51588],{"class":51277},[94,144134,53463],{"class":1944},[94,144136,150],{"class":104},[94,144138,143968],{"class":209},[94,144140,143946],{"class":104},[94,144142,51588],{"class":51277},[94,144144,51284],{"class":104},[94,144146,144147],{"class":96,"line":1201},[94,144148,143979],{"class":163},[94,144150,144151,144153,144155,144157,144159,144161,144163,144165],{"class":96,"line":1292},[94,144152,52121],{"class":104},[94,144154,51588],{"class":51277},[94,144156,53463],{"class":1944},[94,144158,150],{"class":104},[94,144160,143992],{"class":209},[94,144162,143946],{"class":104},[94,144164,51588],{"class":51277},[94,144166,51284],{"class":104},[94,144168,144169],{"class":96,"line":1298},[94,144170,144003],{"class":163},[94,144172,144173,144175,144177,144179,144181,144183,144185,144187],{"class":96,"line":1310},[94,144174,52121],{"class":104},[94,144176,51588],{"class":51277},[94,144178,53463],{"class":1944},[94,144180,150],{"class":104},[94,144182,144016],{"class":209},[94,144184,143946],{"class":104},[94,144186,51588],{"class":51277},[94,144188,51284],{"class":104},[94,144190,144191,144193,144195],{"class":96,"line":1593},[94,144192,51762],{"class":104},[94,144194,51588],{"class":51277},[94,144196,51284],{"class":104},[40,144198,70430],{},[85,144200,144201],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[91,144202,144203,144207,144221,144225],{"__ignoreMap":14},[94,144204,144205],{"class":96,"line":97},[94,144206,130640],{"class":163},[94,144208,144209,144211,144213,144215,144217,144219],{"class":96,"line":15},[94,144210,1015],{"class":104},[94,144212,51588],{"class":51277},[94,144214,53463],{"class":1944},[94,144216,150],{"class":104},[94,144218,130653],{"class":209},[94,144220,51284],{"class":104},[94,144222,144223],{"class":96,"line":1160},[94,144224,130660],{"class":104},[94,144226,144227,144229,144231],{"class":96,"line":1175},[94,144228,51762],{"class":104},[94,144230,51588],{"class":51277},[94,144232,51284],{"class":104},[5108,144234,137930],{},{"title":14,"searchDepth":15,"depth":15,"links":144236},[144237,144238,144242,144243,144244],{"id":143381,"depth":15,"text":143382},{"id":143413,"depth":15,"text":143414,"children":144239},[144240,144241],{"id":143417,"depth":1160,"text":143418},{"id":143434,"depth":1160,"text":143435},{"id":143453,"depth":15,"text":143454},{"id":143460,"depth":15,"text":143461},{"id":143547,"depth":15,"text":143548,"children":144245},[144246,144247,144248,144249,144250],{"id":143554,"depth":1160,"text":143555},{"id":143682,"depth":1160,"text":143683},{"id":143776,"depth":1160,"text":143777},{"id":143825,"depth":1160,"text":143826},{"id":143835,"depth":1160,"text":143836},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143373,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144257,"title":144258,"body":144259,"description":17,"extension":18,"meta":145486,"navigation":20,"path":145487,"seo":145488,"stem":145489,"__hash__":145490},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144260,"toc":145464},[144261,144264,144268,144272,144275,144278,144282,144287,144290,144293,144296,144299,144302,144359,144362,144367,144370,144373,144377,144388,144392,144395,144398,144405,144410,144414,144417,144423,144426,144430,144433,144440,144443,144446,144453,144456,144463,144466,144469,144476,144479,144482,144484,144501,144505,144508,144511,144514,144518,144521,144524,144527,144530,144533,144536,144538,144541,144544,144606,144609,144719,144726,144732,144735,144738,144742,144745,144749,144754,144757,144764,144767,144773,144778,144781,144784,144787,144790,144793,144796,144799,144802,144858,144860,144886,144890,144893,144896,144899,144907,144910,144913,144917,144973,144976,144980,144986,144997,145000,145005,145008,145011,145017,145020,145023,145026,145029,145032,145035,145038,145041,145066,145072,145075,145078,145081,145084,145087,145090,145095,145098,145101,145104,145112,145115,145122,145125,145128,145130,145154,145156,145159,145162,145165,145168,145171,145174,145177,145211,145214,145217,145251,145258,145261,145264,145267,145270,145273,145276,145283,145286,145289,145292,145295,145302,145305,145308,145315,145318,145321,145325,145328,145331,145334,145337,145340,145343,145346,145349,145351,145375,145377,145401,145405,145416,145419,145422,145425,145428,145431,145434,145437,145440,145443,145446,145449,145452,145455,145458,145461],[10,144262,144258],{"id":144263},"_21-移动端布局实战下篇",[35,144265,144267],{"id":144266},"_211-rem适配布局","21.1 rem适配布局",[65,144269,144271],{"id":144270},"_2111-rem单位","21.1.1 rem单位",[1443,144273],{"style":126385,"src":144274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[40,144276,144277],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[65,144279,144281],{"id":144280},"_2112-媒体查询","21.1.2 媒体查询",[48,144283,144284],{},[51,144285,144286],{},"参数介绍",[1443,144288],{"style":126385,"src":144289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1443,144291],{"style":126385,"src":144292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1443,144294],{"style":126385,"src":144295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1443,144297],{"style":126385,"src":144298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1443,144300],{"style":126385,"src":144301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[85,144303,144305],{"className":126529,"code":144304,"language":126531,"meta":14,"style":14},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[91,144306,144307,144312,144331,144338,144351,144355],{"__ignoreMap":14},[94,144308,144309],{"class":96,"line":97},[94,144310,144311],{"class":163},"\u002F* 媒体查询 *\u002F\n",[94,144313,144314,144317,144319,144322,144324,144327,144329],{"class":96,"line":15},[94,144315,144316],{"class":100},"@media",[94,144318,1639],{"class":104},[94,144320,144321],{"class":153},"max-width",[94,144323,51414],{"class":104},[94,144325,144326],{"class":153},"768",[94,144328,51469],{"class":100},[94,144330,12424],{"class":104},[94,144332,144333,144336],{"class":96,"line":1160},[94,144334,144335],{"class":1944},"  .container",[94,144337,15554],{"class":104},[94,144339,144340,144343,144345,144347,144349],{"class":96,"line":1175},[94,144341,144342],{"class":153},"    width",[94,144344,51414],{"class":104},[94,144346,416],{"class":153},[94,144348,433],{"class":100},[94,144350,1271],{"class":104},[94,144352,144353],{"class":96,"line":1181},[94,144354,127325],{"class":104},[94,144356,144357],{"class":96,"line":1195},[94,144358,1546],{"class":104},[40,144360,144361],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[48,144363,144364],{"start":15},[51,144365,144366],{},"引入资源",[1443,144368],{"style":126385,"src":144369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[40,144371,144372],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[65,144374,144376],{"id":144375},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1112,144378,144379,144382,144385],{},[51,144380,144381],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[51,144383,144384],{},"媒体查询可以根据不同设备宽度来修改样式",[51,144386,144387],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[35,144389,144391],{"id":144390},"_212-less基础","21.2 Less基础",[40,144393,144394],{},"css冗余度较高，不利于复用，没有很好的计算能力",[40,144396,144397],{},"Less可以解决该问题，它是css的扩展语言",[40,144399,144400,144401],{},"Less中文网址： ",[343,144402,144403],{"href":144403,"rel":144404},"http:\u002F\u002Flesscss.cn\u002F",[23847],[40,144406,144407],{},[254,144408,144409],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[65,144411,144413],{"id":144412},"_2121-less安装","21.2.1 less安装",[40,144415,144416],{},"如果使用vscode，则无需进行下方安装步骤",[40,144418,144419],{},[343,144420,144421],{"href":144421,"rel":144422},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23847],[1443,144424],{"style":126385,"src":144425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[65,144427,144429],{"id":144428},"_2122-less使用","21.2.2 less使用",[40,144431,144432],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[48,144434,144435],{},[51,144436,144437],{},[254,144438,144439],{},"Less 变量",[1443,144441],{"style":126385,"src":144442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1443,144444],{"style":126385,"src":144445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[48,144447,144448],{"start":15},[51,144449,144450],{},[254,144451,144452],{},"Less 编译",[1443,144454],{"style":126385,"src":144455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[48,144457,144458],{"start":1160},[51,144459,144460],{},[254,144461,144462],{},"Less 嵌套",[1443,144464],{"style":126385,"src":144465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1443,144467],{"style":126385,"src":144468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[48,144470,144471],{"start":1175},[51,144472,144473],{},[254,144474,144475],{},"Less 运算",[1443,144477],{"style":126385,"src":144478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[40,144480,144481],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[40,144483,134],{},[1112,144485,144486,144489,144492,144495,144498],{},[51,144487,144488],{},"乘号（*）和除号（\u002F）的写法",[51,144490,144491],{},"运算符中间左右有个空格隔开 1px + 5",[51,144493,144494],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[51,144496,144497],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[51,144499,144500],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[35,144502,144504],{"id":144503},"_213-rem-适配方案","21.3 rem 适配方案",[40,144506,144507],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[40,144509,144510],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1443,144512],{"style":126385,"src":144513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[65,144515,144517],{"id":144516},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[40,144519,144520],{},"rem + 媒体查询 + less 技术",[1443,144522],{"style":126385,"src":144523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[40,144525,144526],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[40,144528,144529],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1443,144531],{"style":126385,"src":144532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[40,144534,144535],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[40,144537,14615],{},[1443,144539],{"style":126385,"src":144540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[40,144542,144543],{},"index.html:",[85,144545,144547],{"className":126529,"code":144546,"language":126531,"meta":14,"style":14},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[91,144548,144549,144554,144560,144576,144580,144586,144602],{"__ignoreMap":14},[94,144550,144551],{"class":96,"line":97},[94,144552,144553],{"class":163},"\u002F* rem 适配方案 *\u002F\n",[94,144555,144556,144558],{"class":96,"line":15},[94,144557,50612],{"class":51277},[94,144559,15554],{"class":104},[94,144561,144562,144564,144566,144569,144571,144573],{"class":96,"line":1160},[94,144563,70603],{"class":153},[94,144565,51414],{"class":104},[94,144567,144568],{"class":153},"62.5",[94,144570,433],{"class":100},[94,144572,130392],{"class":104},[94,144574,144575],{"class":163},"\u002F* 1rem = 10px *\u002F\n",[94,144577,144578],{"class":96,"line":1175},[94,144579,1546],{"class":104},[94,144581,144582,144584],{"class":96,"line":1181},[94,144583,130377],{"class":1944},[94,144585,15554],{"class":104},[94,144587,144588,144590,144592,144594,144597,144599],{"class":96,"line":1195},[94,144589,70545],{"class":153},[94,144591,51414],{"class":104},[94,144593,551],{"class":153},[94,144595,144596],{"class":100},"rem",[94,144598,130392],{"class":104},[94,144600,144601],{"class":163},"\u002F* 100px *\u002F\n",[94,144603,144604],{"class":96,"line":1201},[94,144605,1546],{"class":104},[40,144607,144608],{},"common.less",[85,144610,144612],{"className":126529,"code":144611,"language":126531,"meta":14,"style":14},"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",[91,144613,144614,144620,144635,144639,144645,144659,144663,144667,144671,144677,144691,144695,144701,144715],{"__ignoreMap":14},[94,144615,144616,144618],{"class":96,"line":97},[94,144617,50612],{"class":51277},[94,144619,15554],{"class":104},[94,144621,144622,144624,144626,144628,144630,144632],{"class":96,"line":15},[94,144623,70603],{"class":153},[94,144625,51414],{"class":104},[94,144627,144568],{"class":153},[94,144629,433],{"class":100},[94,144631,26050],{"class":104},[94,144633,144634],{"class":163},"\u002F* 10px *\u002F\n",[94,144636,144637],{"class":96,"line":1160},[94,144638,1546],{"class":104},[94,144640,144641,144643],{"class":96,"line":1175},[94,144642,51588],{"class":51277},[94,144644,15554],{"class":104},[94,144646,144647,144649,144651,144653,144655,144657],{"class":96,"line":1181},[94,144648,70545],{"class":153},[94,144650,51414],{"class":104},[94,144652,551],{"class":153},[94,144654,144596],{"class":100},[94,144656,26050],{"class":104},[94,144658,144601],{"class":163},[94,144660,144661],{"class":96,"line":1195},[94,144662,1546],{"class":104},[94,144664,144665],{"class":96,"line":1201},[94,144666,135990],{"class":104},[94,144668,144669],{"class":96,"line":1292},[94,144670,144553],{"class":163},[94,144672,144673,144675],{"class":96,"line":1298},[94,144674,50612],{"class":51277},[94,144676,15554],{"class":104},[94,144678,144679,144681,144683,144685,144687,144689],{"class":96,"line":1310},[94,144680,70603],{"class":153},[94,144682,51414],{"class":104},[94,144684,144568],{"class":153},[94,144686,433],{"class":100},[94,144688,130392],{"class":104},[94,144690,144575],{"class":163},[94,144692,144693],{"class":96,"line":1593},[94,144694,1546],{"class":104},[94,144696,144697,144699],{"class":96,"line":1598},[94,144698,130377],{"class":1944},[94,144700,15554],{"class":104},[94,144702,144703,144705,144707,144709,144711,144713],{"class":96,"line":1604},[94,144704,70545],{"class":153},[94,144706,51414],{"class":104},[94,144708,551],{"class":153},[94,144710,144596],{"class":100},[94,144712,130392],{"class":104},[94,144714,144601],{"class":163},[94,144716,144717],{"class":96,"line":1609},[94,144718,1546],{"class":104},[40,144720,144721,144722,144725],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23535,144723,144724],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[85,144727,144730],{"className":144728,"code":144729,"language":5169},[5167],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[91,144731,144729],{"__ignoreMap":14},[40,144733,144734],{},"less保存时会自动变成.css文件",[40,144736,144737],{},"好好搞懂上述代码写法",[65,144739,144741],{"id":144740},"_2132-样式导入样式","21.3.2 样式导入样式",[1443,144743],{"style":126385,"src":144744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[65,144746,144748],{"id":144747},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[48,144750,144751],{},[51,144752,144753],{},"准备工作",[1443,144755],{"style":126385,"src":144756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[40,144758,144759,144760],{},"github地址：",[343,144761,144762],{"href":144762,"rel":144763},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23847],[40,144765,144766],{},"下载之后，将index.js文件拖到项目中就可以了",[40,144768,144769,144770],{},"js文件引入到index.html中使用的是",[91,144771,144772],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[48,144774,144775],{"start":15},[51,144776,144777],{},"vscode插件",[1443,144779],{"style":126385,"src":144780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[40,144782,144783],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[40,144785,144786],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1443,144788],{"style":126385,"src":144789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[40,144791,144792],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1443,144794],{"style":126385,"src":144795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[40,144797,144798],{},"修改成75就可以，alt+z为快捷键",[40,144800,144801],{},"index.css：",[85,144803,144804],{"className":126529,"code":144546,"language":126531,"meta":14,"style":14},[91,144805,144806,144810,144816,144830,144834,144840,144854],{"__ignoreMap":14},[94,144807,144808],{"class":96,"line":97},[94,144809,144553],{"class":163},[94,144811,144812,144814],{"class":96,"line":15},[94,144813,50612],{"class":51277},[94,144815,15554],{"class":104},[94,144817,144818,144820,144822,144824,144826,144828],{"class":96,"line":1160},[94,144819,70603],{"class":153},[94,144821,51414],{"class":104},[94,144823,144568],{"class":153},[94,144825,433],{"class":100},[94,144827,130392],{"class":104},[94,144829,144575],{"class":163},[94,144831,144832],{"class":96,"line":1175},[94,144833,1546],{"class":104},[94,144835,144836,144838],{"class":96,"line":1181},[94,144837,130377],{"class":1944},[94,144839,15554],{"class":104},[94,144841,144842,144844,144846,144848,144850,144852],{"class":96,"line":1195},[94,144843,70545],{"class":153},[94,144845,51414],{"class":104},[94,144847,551],{"class":153},[94,144849,144596],{"class":100},[94,144851,130392],{"class":104},[94,144853,144601],{"class":163},[94,144855,144856],{"class":96,"line":1201},[94,144857,1546],{"class":104},[40,144859,144543],{},[85,144861,144862],{"className":126529,"code":126933,"language":126531,"meta":14,"style":14},[91,144863,144864,144870,144882],{"__ignoreMap":14},[94,144865,144866,144868],{"class":96,"line":97},[94,144867,51777],{"class":51277},[94,144869,15554],{"class":104},[94,144871,144872,144874,144876,144878,144880],{"class":96,"line":15},[94,144873,70603],{"class":153},[94,144875,51414],{"class":104},[94,144877,706],{"class":153},[94,144879,51469],{"class":100},[94,144881,1271],{"class":104},[94,144883,144884],{"class":96,"line":1160},[94,144885,1546],{"class":104},[35,144887,144889],{"id":144888},"_214-响应式开发","21.4 响应式开发",[40,144891,144892],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1443,144894],{"style":126385,"src":144895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[40,144897,144898],{},"做法：",[1112,144900,144901,144904],{},[51,144902,144903],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[51,144905,144906],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1443,144908],{"style":126385,"src":144909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[40,144911,144912],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[65,144914,144916],{"id":144915},"_2141-简单代码示范","21.4.1 简单代码示范",[85,144918,144919],{"className":126529,"code":144546,"language":126531,"meta":14,"style":14},[91,144920,144921,144925,144931,144945,144949,144955,144969],{"__ignoreMap":14},[94,144922,144923],{"class":96,"line":97},[94,144924,144553],{"class":163},[94,144926,144927,144929],{"class":96,"line":15},[94,144928,50612],{"class":51277},[94,144930,15554],{"class":104},[94,144932,144933,144935,144937,144939,144941,144943],{"class":96,"line":1160},[94,144934,70603],{"class":153},[94,144936,51414],{"class":104},[94,144938,144568],{"class":153},[94,144940,433],{"class":100},[94,144942,130392],{"class":104},[94,144944,144575],{"class":163},[94,144946,144947],{"class":96,"line":1175},[94,144948,1546],{"class":104},[94,144950,144951,144953],{"class":96,"line":1181},[94,144952,130377],{"class":1944},[94,144954,15554],{"class":104},[94,144956,144957,144959,144961,144963,144965,144967],{"class":96,"line":1195},[94,144958,70545],{"class":153},[94,144960,51414],{"class":104},[94,144962,551],{"class":153},[94,144964,144596],{"class":100},[94,144966,130392],{"class":104},[94,144968,144601],{"class":163},[94,144970,144971],{"class":96,"line":1201},[94,144972,1546],{"class":104},[40,144974,144975],{},"父盒子一般命名为container",[65,144977,144979],{"id":144978},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[40,144981,144982,144983],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[254,144984,144985],{},"使得 Web 开发更加快捷",[1112,144987,144988],{},[51,144989,144990,144991],{},"官网：",[254,144992,144993],{},[343,144994,144995],{"href":144995,"rel":144996},"http:\u002F\u002Fgetbootstrap.com\u002F",[23847],[40,144998,144999],{},"可以直接去官网拿现成的东西",[48,145001,145002],{},[51,145003,145004],{},"Bootstrap的使用",[40,145006,145007],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[40,145009,145010],{},"Bootstrap 使用四步曲：",[40,145012,145013,145016],{},[254,145014,145015],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1443,145018],{"style":126385,"src":145019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[40,145021,145022],{},"打开Bootstrap官网，然后下载",[1443,145024],{"style":126385,"src":145025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1443,145027],{"style":126385,"src":145028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[40,145030,145031],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[40,145033,145034],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[40,145036,145037],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1443,145039],{"style":126385,"src":145040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[85,145042,145044],{"className":126529,"code":145043,"language":126531,"meta":14,"style":14},".center {\n  color: red;\n}\n",[91,145045,145046,145052,145062],{"__ignoreMap":14},[94,145047,145048,145050],{"class":96,"line":97},[94,145049,126820],{"class":1944},[94,145051,15554],{"class":104},[94,145053,145054,145056,145058,145060],{"class":96,"line":15},[94,145055,70882],{"class":153},[94,145057,51414],{"class":104},[94,145059,57398],{"class":153},[94,145061,1271],{"class":104},[94,145063,145064],{"class":96,"line":1160},[94,145065,1546],{"class":104},[40,145067,145068,145071],{},[91,145069,145070],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1443,145073],{"style":126385,"src":145074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1443,145076],{"style":126385,"src":145077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1443,145079],{"style":126385,"src":145080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[40,145082,145083],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1443,145085],{"style":126385,"src":145086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[40,145088,145089],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[48,145091,145092],{"start":15},[51,145093,145094],{},"布局容器",[1443,145096],{"style":126385,"src":145097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[40,145099,145100],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[40,145102,145103],{},"container-fluid用于移动式布局比较方便",[48,145105,145106],{"start":1160},[51,145107,145108,145109],{},"bootstrap ",[254,145110,145111],{},"栅格系统原理",[1443,145113],{"style":126385,"src":145114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[48,145116,145117],{"start":1175},[51,145118,145119],{},[254,145120,145121],{},"栅格选项参数",[1443,145123],{"style":126385,"src":145124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[40,145126,145127],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[40,145129,14615],{},[85,145131,145132],{"className":126529,"code":145043,"language":126531,"meta":14,"style":14},[91,145133,145134,145140,145150],{"__ignoreMap":14},[94,145135,145136,145138],{"class":96,"line":97},[94,145137,126820],{"class":1944},[94,145139,15554],{"class":104},[94,145141,145142,145144,145146,145148],{"class":96,"line":15},[94,145143,70882],{"class":153},[94,145145,51414],{"class":104},[94,145147,57398],{"class":153},[94,145149,1271],{"class":104},[94,145151,145152],{"class":96,"line":1160},[94,145153,1546],{"class":104},[40,145155,135572],{},[1443,145157],{"style":126385,"src":145158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[40,145160,145161],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[40,145163,145164],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[40,145166,145167],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[40,145169,145170],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[40,145172,145173],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[40,145175,145176],{},"汇总展示说明：",[85,145178,145179],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[91,145180,145181,145185,145199,145203],{"__ignoreMap":14},[94,145182,145183],{"class":96,"line":97},[94,145184,130640],{"class":163},[94,145186,145187,145189,145191,145193,145195,145197],{"class":96,"line":15},[94,145188,1015],{"class":104},[94,145190,51588],{"class":51277},[94,145192,53463],{"class":1944},[94,145194,150],{"class":104},[94,145196,130653],{"class":209},[94,145198,51284],{"class":104},[94,145200,145201],{"class":96,"line":1160},[94,145202,130660],{"class":104},[94,145204,145205,145207,145209],{"class":96,"line":1175},[94,145206,51762],{"class":104},[94,145208,51588],{"class":51277},[94,145210,51284],{"class":104},[1443,145212],{"style":126385,"src":145213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[40,145215,145216],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[85,145218,145219],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[91,145220,145221,145225,145239,145243],{"__ignoreMap":14},[94,145222,145223],{"class":96,"line":97},[94,145224,130640],{"class":163},[94,145226,145227,145229,145231,145233,145235,145237],{"class":96,"line":15},[94,145228,1015],{"class":104},[94,145230,51588],{"class":51277},[94,145232,53463],{"class":1944},[94,145234,150],{"class":104},[94,145236,130653],{"class":209},[94,145238,51284],{"class":104},[94,145240,145241],{"class":96,"line":1160},[94,145242,130660],{"class":104},[94,145244,145245,145247,145249],{"class":96,"line":1175},[94,145246,51762],{"class":104},[94,145248,51588],{"class":51277},[94,145250,51284],{"class":104},[48,145252,145253],{"start":1181},[51,145254,145255],{},[254,145256,145257],{},"列嵌套",[1443,145259],{"style":126385,"src":145260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[40,145262,145263],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[40,145265,145266],{},"没加row内部这样：",[1443,145268],{"style":126385,"src":145269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[40,145271,145272],{},"加上row之后内部为：",[1443,145274],{"style":126385,"src":145275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[48,145277,145278],{"start":1195},[51,145279,145280],{},[254,145281,145282],{},"列偏移",[1443,145284],{"style":126385,"src":145285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[40,145287,145288],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[40,145290,145291],{},"要加偏移量，即偏移份数",[40,145293,145294],{},"偏移的份数=12-两个盒子的份数",[48,145296,145297],{"start":1201},[51,145298,145299],{},[254,145300,145301],{},"列排序",[1443,145303],{"style":126385,"src":145304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[40,145306,145307],{},"pull拉左；push推右",[48,145309,145310],{"start":1292},[51,145311,145312],{},[254,145313,145314],{},"响应式工具",[1443,145316],{"style":126385,"src":145317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[40,145319,145320],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[65,145322,145324],{"id":145323},"_2143-响应式小项目","21.4.3 响应式小项目",[40,145326,145327],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[40,145329,145330],{},"ul {",[40,145332,145333],{},"list-style: none;",[40,145335,145336],{},"margin:0;",[40,145338,145339],{},"padding:0; }",[1443,145341],{"style":126385,"src":145342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1443,145344],{"style":126385,"src":145345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[40,145347,145348],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[40,145350,68866],{},[85,145352,145353],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[91,145354,145355,145361,145371],{"__ignoreMap":14},[94,145356,145357,145359],{"class":96,"line":97},[94,145358,130377],{"class":1944},[94,145360,15554],{"class":104},[94,145362,145363,145365,145367,145369],{"class":96,"line":15},[94,145364,131009],{"class":153},[94,145366,51414],{"class":104},[94,145368,23718],{"class":153},[94,145370,1271],{"class":104},[94,145372,145373],{"class":96,"line":1160},[94,145374,1546],{"class":104},[40,145376,70430],{},[85,145378,145379],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[91,145380,145381,145387,145397],{"__ignoreMap":14},[94,145382,145383,145385],{"class":96,"line":97},[94,145384,130377],{"class":1944},[94,145386,15554],{"class":104},[94,145388,145389,145391,145393,145395],{"class":96,"line":15},[94,145390,131009],{"class":153},[94,145392,51414],{"class":104},[94,145394,23718],{"class":153},[94,145396,1271],{"class":104},[94,145398,145399],{"class":96,"line":1160},[94,145400,1546],{"class":104},[35,145402,145404],{"id":145403},"_215-swiper-插件使用","21.5 swiper 插件使用",[1112,145406,145407,145410,145413],{},[51,145408,145409],{},"下载需要的css和js文件html页面中 引入相关文件",[51,145411,145412],{},"官网找到类似案例，复制html结构，css样式 js 语法",[51,145414,145415],{},"根据需求定制修改模块",[1443,145417],{"style":126385,"src":145418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[40,145420,145421],{},"解压后将这两部分放到项目中",[1443,145423],{"style":126385,"src":145424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[40,145426,145427],{},"这个插件可以帮助我们实现轮播图效果",[40,145429,145430],{},"用法：",[1443,145432],{"style":126385,"src":145433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[40,145435,145436],{},"找到自己喜欢的",[1443,145438],{"style":126385,"src":145439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[40,145441,145442],{},"右键，查看网页源代码",[1443,145444],{"style":126385,"src":145445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[40,145447,145448],{},"复制人家的结构内容",[40,145450,145451],{},"然后去看API文档：",[1443,145453],{"style":126385,"src":145454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[40,145456,145457],{},"可以看看如何修改样式",[40,145459,145460],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5108,145462,145463],{},"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":14,"searchDepth":15,"depth":15,"links":145465},[145466,145471,145475,145480,145485],{"id":144266,"depth":15,"text":144267,"children":145467},[145468,145469,145470],{"id":144270,"depth":1160,"text":144271},{"id":144280,"depth":1160,"text":144281},{"id":144375,"depth":1160,"text":144376},{"id":144390,"depth":15,"text":144391,"children":145472},[145473,145474],{"id":144412,"depth":1160,"text":144413},{"id":144428,"depth":1160,"text":144429},{"id":144503,"depth":15,"text":144504,"children":145476},[145477,145478,145479],{"id":144516,"depth":1160,"text":144517},{"id":144740,"depth":1160,"text":144741},{"id":144747,"depth":1160,"text":144748},{"id":144888,"depth":15,"text":144889,"children":145481},[145482,145483,145484],{"id":144915,"depth":1160,"text":144916},{"id":144978,"depth":1160,"text":144979},{"id":145323,"depth":1160,"text":145324},{"id":145403,"depth":15,"text":145404},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144258,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145492,"title":145493,"body":145494,"description":17,"extension":18,"meta":145714,"navigation":20,"path":145715,"seo":145716,"stem":145717,"__hash__":145718},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145495,"toc":145710},[145496,145499,145503,145506,145521,145526,145529,145534,145569,145574,145586,145591,145604,145609,145626,145631,145651,145656,145674,145677,145680,145683,145686,145690,145693,145696,145699,145702,145705,145708],[10,145497,145493],{"id":145498},"_22-代码提交与新型相对单位",[35,145500,145502],{"id":145501},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[40,145504,145505],{},"法1：",[48,145507,145508,145515,145518],{},[51,145509,145510,145511],{},"登录网站注册：",[343,145512,145513],{"href":145513,"rel":145514},"https:\u002F\u002Fgitee.com\u002F",[23847],[51,145516,145517],{},"码云创建新的仓库",[51,145519,145520],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1112,145522,145523],{},[51,145524,145525],{},"在网站根目录右键-- Git Bash Here",[1443,145527],{"style":126385,"src":145528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1112,145530,145531],{},[51,145532,145533],{},"如果是第一次利用git提交，请配置好全局选项",[85,145535,145537],{"className":117273,"code":145536,"language":117275,"meta":14,"style":14},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[91,145538,145539,145555],{"__ignoreMap":14},[94,145540,145541,145544,145546,145549,145552],{"class":96,"line":97},[94,145542,145543],{"class":1944},"git",[94,145545,119696],{"class":209},[94,145547,145548],{"class":153}," --global",[94,145550,145551],{"class":209}," user.name",[94,145553,145554],{"class":209}," \"你的名字\"\n",[94,145556,145557,145559,145561,145563,145566],{"class":96,"line":15},[94,145558,145543],{"class":1944},[94,145560,119696],{"class":209},[94,145562,145548],{"class":153},[94,145564,145565],{"class":209}," user.email",[94,145567,145568],{"class":209}," \"你的邮箱\"\n",[1112,145570,145571],{},[51,145572,145573],{},"初始化仓库",[85,145575,145577],{"className":117273,"code":145576,"language":117275,"meta":14,"style":14},"git init\n",[91,145578,145579],{"__ignoreMap":14},[94,145580,145581,145583],{"class":96,"line":97},[94,145582,145543],{"class":1944},[94,145584,145585],{"class":209}," init\n",[1112,145587,145588],{},[51,145589,145590],{},"把本地文件放到暂存区",[85,145592,145594],{"className":117273,"code":145593,"language":117275,"meta":14,"style":14},"git add .\n",[91,145595,145596],{"__ignoreMap":14},[94,145597,145598,145600,145602],{"class":96,"line":97},[94,145599,145543],{"class":1944},[94,145601,5191],{"class":209},[94,145603,28724],{"class":209},[1112,145605,145606],{},[51,145607,145608],{},"把本地文件放到本地仓库里面",[85,145610,145612],{"className":117273,"code":145611,"language":117275,"meta":14,"style":14},"git commit -m \"first commit\"\n",[91,145613,145614],{"__ignoreMap":14},[94,145615,145616,145618,145621,145623],{"class":96,"line":97},[94,145617,145543],{"class":1944},[94,145619,145620],{"class":209}," commit",[94,145622,100859],{"class":153},[94,145624,145625],{"class":209}," \"first commit\"\n",[1112,145627,145628],{},[51,145629,145630],{},"链接远程仓库",[85,145632,145634],{"className":117273,"code":145633,"language":117275,"meta":14,"style":14},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[91,145635,145636],{"__ignoreMap":14},[94,145637,145638,145640,145643,145645,145648],{"class":96,"line":97},[94,145639,145543],{"class":1944},[94,145641,145642],{"class":209}," remote",[94,145644,5191],{"class":209},[94,145646,145647],{"class":209}," origin",[94,145649,145650],{"class":209}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1112,145652,145653],{},[51,145654,145655],{},"把本地仓库的文件推送到远程仓库 push",[85,145657,145659],{"className":117273,"code":145658,"language":117275,"meta":14,"style":14},"git push -u origin master\n",[91,145660,145661],{"__ignoreMap":14},[94,145662,145663,145665,145667,145669,145671],{"class":96,"line":97},[94,145664,145543],{"class":1944},[94,145666,28999],{"class":209},[94,145668,28273],{"class":153},[94,145670,145647],{"class":209},[94,145672,145673],{"class":209}," master\n",[1443,145675],{"style":126385,"src":145676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[40,145678,145679],{},"上方方法暂未实现，后边学完git后在整",[40,145681,145682],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1443,145684],{"style":126385,"src":145685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[35,145687,145689],{"id":145688},"_222-新型相对单位","22.2 新型相对单位",[1443,145691],{"style":126385,"src":145692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1443,145694],{"style":126385,"src":145695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[40,145697,145698],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[40,145700,145701],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1443,145703],{"style":126385,"src":145704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[40,145706,145707],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5108,145709,23940],{},{"title":14,"searchDepth":15,"depth":15,"links":145711},[145712,145713],{"id":145501,"depth":15,"text":145502},{"id":145688,"depth":15,"text":145689},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145493,"description":17},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145720,"title":145721,"body":145722,"description":145726,"extension":18,"meta":145727,"navigation":20,"path":145728,"seo":145729,"stem":145730,"__hash__":145731},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145723,"toc":145724},[],{"title":14,"searchDepth":15,"depth":15,"links":145725},[],"自己正经开始学编程的第一门语言！",{"category":92816},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145721,"description":145726},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145733,"title":145734,"body":145735,"description":17,"extension":18,"meta":146882,"navigation":20,"path":146883,"seo":146884,"stem":146885,"__hash__":146886},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145736,"toc":146858},[145737,145740,145744,145747,145750,145775,145778,145784,145788,145791,145818,145821,145861,145864,145876,145879,145885,145889,145893,145920,145937,145944,145948,145951,145977,145980,145984,145987,146027,146030,146047,146053,146057,146062,146106,146109,146127,146130,146198,146202,146209,146212,146227,146230,146239,146242,146253,146256,146265,146268,146285,146288,146303,146307,146311,146314,146316,146336,146340,146343,146346,146357,146360,146366,146370,146376,146403,146406,146418,146421,146432,146435,146441,146445,146451,146501,146504,146546,146549,146582,146585,146619,146623,146626,146646,146649,146685,146688,146701,146705,146709,146715,146718,146731,146735,146738,146744,146747,146751,146754,146757,146806,146810,146826,146832,146839,146845,146855],[10,145738,145734],{"id":145739},"_1-python环境与第一个程序",[35,145741,145743],{"id":145742},"_11-什么是python","1.1 什么是Python",[40,145745,145746],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[40,145748,145749],{},"理解 Python 时抓住三个关键词：",[48,145751,145752,145755,145758],{},[51,145753,145754],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[51,145756,145757],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[51,145759,145760,145761,317,145764,317,145767,317,145770,317,145772,28368],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[91,145762,145763],{},"os",[91,145765,145766],{},"sys",[91,145768,145769],{},"json",[91,145771,57837],{},[91,145773,145774],{},"datetime",[40,145776,145777],{},"Python 程序的运行链路：",[85,145779,145782],{"className":145780,"code":145781,"language":5169,"meta":14},[5167],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[91,145783,145781],{"__ignoreMap":14},[35,145785,145787],{"id":145786},"_12-python解释器","1.2 Python解释器",[40,145789,145790],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[85,145792,145794],{"className":23804,"code":145793,"language":23806,"meta":14,"style":14},"python --version\npython3 --version\npython\npython3\n",[91,145795,145796,145802,145808,145813],{"__ignoreMap":14},[94,145797,145798,145800],{"class":96,"line":97},[94,145799,30363],{"class":1944},[94,145801,26276],{"class":153},[94,145803,145804,145806],{"class":96,"line":15},[94,145805,100856],{"class":1944},[94,145807,26276],{"class":153},[94,145809,145810],{"class":96,"line":1160},[94,145811,145812],{"class":1944},"python\n",[94,145814,145815],{"class":96,"line":1175},[94,145816,145817],{"class":1944},"python3\n",[40,145819,145820],{},"进入交互模式后，可以直接输入表达式：",[85,145822,145824],{"className":30361,"code":145823,"language":30363,"meta":14,"style":14},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[91,145825,145826,145837,145842,145856],{"__ignoreMap":14},[94,145827,145828,145831,145833,145835],{"class":96,"line":97},[94,145829,145830],{"class":100},">>>",[94,145832,25101],{"class":153},[94,145834,45549],{"class":100},[94,145836,47706],{"class":153},[94,145838,145839],{"class":96,"line":15},[94,145840,145841],{"class":153},"3\n",[94,145843,145844,145846,145849,145851,145854],{"class":96,"line":1160},[94,145845,145830],{"class":100},[94,145847,145848],{"class":153}," print",[94,145850,105],{"class":104},[94,145852,145853],{"class":209},"\"hello python\"",[94,145855,111],{"class":104},[94,145857,145858],{"class":96,"line":1175},[94,145859,145860],{"class":104},"hello python\n",[40,145862,145863],{},"退出交互模式：",[85,145865,145867],{"className":30361,"code":145866,"language":30363,"meta":14,"style":14},"exit()\n",[91,145868,145869],{"__ignoreMap":14},[94,145870,145871,145874],{"class":96,"line":97},[94,145872,145873],{"class":153},"exit",[94,145875,1957],{"class":104},[40,145877,145878],{},"或使用快捷键：",[85,145880,145883],{"className":145881,"code":145882,"language":5169,"meta":14},[5167],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[91,145884,145882],{"__ignoreMap":14},[35,145886,145888],{"id":145887},"_13-安装python","1.3 安装Python",[65,145890,145892],{"id":145891},"_131-windows安装","1.3.1 Windows安装",[48,145894,145895,145902,145905,145911,145917],{},[51,145896,145897,145898],{},"打开 Python 官网：",[343,145899,145900],{"href":145900,"rel":145901},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23847],[51,145903,145904],{},"下载 Windows Installer。",[51,145906,145907,145908,28368],{},"安装时勾选 ",[91,145909,145910],{},"Add Python to PATH",[51,145912,145913,145914,28368],{},"点击 ",[91,145915,145916],{},"Install Now",[51,145918,145919],{},"安装完成后打开命令提示符验证：",[85,145921,145923],{"className":23804,"code":145922,"language":23806,"meta":14,"style":14},"python --version\npip --version\n",[91,145924,145925,145931],{"__ignoreMap":14},[94,145926,145927,145929],{"class":96,"line":97},[94,145928,30363],{"class":1944},[94,145930,26276],{"class":153},[94,145932,145933,145935],{"class":96,"line":15},[94,145934,23813],{"class":1944},[94,145936,26276],{"class":153},[40,145938,145939,145940,145943],{},"如果提示 ",[91,145941,145942],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[65,145945,145947],{"id":145946},"_132-macos安装","1.3.2 macOS安装",[40,145949,145950],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[85,145952,145954],{"className":23804,"code":145953,"language":23806,"meta":14,"style":14},"brew install python\npython3 --version\npip3 --version\n",[91,145955,145956,145965,145971],{"__ignoreMap":14},[94,145957,145958,145961,145963],{"class":96,"line":97},[94,145959,145960],{"class":1944},"brew",[94,145962,23816],{"class":209},[94,145964,124295],{"class":209},[94,145966,145967,145969],{"class":96,"line":15},[94,145968,100856],{"class":1944},[94,145970,26276],{"class":153},[94,145972,145973,145975],{"class":96,"line":1160},[94,145974,119677],{"class":1944},[94,145976,26276],{"class":153},[40,145978,145979],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[65,145981,145983],{"id":145982},"_133-linux安装","1.3.3 Linux安装",[40,145985,145986],{},"Ubuntu\u002FDebian：",[85,145988,145990],{"className":23804,"code":145989,"language":23806,"meta":14,"style":14},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[91,145991,145992,146000,146015,146021],{"__ignoreMap":14},[94,145993,145994,145996,145998],{"class":96,"line":97},[94,145995,24559],{"class":1944},[94,145997,117294],{"class":209},[94,145999,26225],{"class":209},[94,146001,146002,146004,146006,146008,146010,146012],{"class":96,"line":15},[94,146003,24559],{"class":1944},[94,146005,117294],{"class":209},[94,146007,23816],{"class":209},[94,146009,104380],{"class":209},[94,146011,100775],{"class":209},[94,146013,146014],{"class":209}," python3-venv\n",[94,146016,146017,146019],{"class":96,"line":1160},[94,146018,100856],{"class":1944},[94,146020,26276],{"class":153},[94,146022,146023,146025],{"class":96,"line":1175},[94,146024,119677],{"class":1944},[94,146026,26276],{"class":153},[40,146028,146029],{},"Fedora：",[85,146031,146033],{"className":23804,"code":146032,"language":23806,"meta":14,"style":14},"sudo dnf install python3 python3-pip\n",[91,146034,146035],{"__ignoreMap":14},[94,146036,146037,146039,146041,146043,146045],{"class":96,"line":97},[94,146038,24559],{"class":1944},[94,146040,26298],{"class":209},[94,146042,23816],{"class":209},[94,146044,104380],{"class":209},[94,146046,119742],{"class":209},[40,146048,146049,146050,146052],{},"Linux 上通常使用 ",[91,146051,100856],{}," 命令，避免和系统旧版本 Python 冲突。",[35,146054,146056],{"id":146055},"_14-pip包管理器","1.4 pip包管理器",[40,146058,146059,146061],{},[91,146060,23813],{}," 用来安装第三方库。",[85,146063,146065],{"className":23804,"code":146064,"language":23806,"meta":14,"style":14},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[91,146066,146067,146076,146085,146093,146099],{"__ignoreMap":14},[94,146068,146069,146071,146073],{"class":96,"line":97},[94,146070,23813],{"class":1944},[94,146072,23816],{"class":209},[94,146074,146075],{"class":209}," requests\n",[94,146077,146078,146080,146083],{"class":96,"line":15},[94,146079,23813],{"class":1944},[94,146081,146082],{"class":209}," uninstall",[94,146084,146075],{"class":209},[94,146086,146087,146089,146091],{"class":96,"line":1160},[94,146088,23813],{"class":1944},[94,146090,117551],{"class":209},[94,146092,146075],{"class":209},[94,146094,146095,146097],{"class":96,"line":1175},[94,146096,23813],{"class":1944},[94,146098,118932],{"class":209},[94,146100,146101,146103],{"class":96,"line":1181},[94,146102,23813],{"class":1944},[94,146104,146105],{"class":209}," freeze\n",[40,146107,146108],{},"国内网络较慢时可以临时使用镜像：",[85,146110,146112],{"className":23804,"code":146111,"language":23806,"meta":14,"style":14},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[91,146113,146114],{"__ignoreMap":14},[94,146115,146116,146118,146120,146123,146125],{"class":96,"line":97},[94,146117,23813],{"class":1944},[94,146119,23816],{"class":209},[94,146121,146122],{"class":209}," requests",[94,146124,26413],{"class":153},[94,146126,119705],{"class":209},[40,146128,146129],{},"常见第三方库：",[242,146131,146132,146141],{},[245,146133,146134],{},[248,146135,146136,146139],{},[251,146137,146138],{},"库",[251,146140,102673],{},[289,146142,146143,146151,146158,146166,146174,146182,146190],{},[248,146144,146145,146148],{},[294,146146,146147],{},"requests",[294,146149,146150],{},"网络请求",[248,146152,146153,146155],{},[294,146154,100603],{},[294,146156,146157],{},"数值计算",[248,146159,146160,146163],{},[294,146161,146162],{},"pandas",[294,146164,146165],{},"表格数据处理",[248,146167,146168,146171],{},[294,146169,146170],{},"matplotlib",[294,146172,146173],{},"绘图",[248,146175,146176,146179],{},[294,146177,146178],{},"pyecharts",[294,146180,146181],{},"ECharts 图表",[248,146183,146184,146187],{},[294,146185,146186],{},"flask",[294,146188,146189],{},"Web 后端",[248,146191,146192,146195],{},[294,146193,146194],{},"pytest",[294,146196,146197],{},"自动化测试",[35,146199,146201],{"id":146200},"_15-虚拟环境","1.5 虚拟环境",[40,146203,146204,146205,146208],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[91,146206,146207],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[40,146210,146211],{},"创建虚拟环境：",[85,146213,146215],{"className":23804,"code":146214,"language":23806,"meta":14,"style":14},"python -m venv .venv\n",[91,146216,146217],{"__ignoreMap":14},[94,146218,146219,146221,146223,146225],{"class":96,"line":97},[94,146220,30363],{"class":1944},[94,146222,100859],{"class":153},[94,146224,100862],{"class":209},[94,146226,100865],{"class":209},[40,146228,146229],{},"Windows 激活：",[85,146231,146233],{"className":23804,"code":146232,"language":23806,"meta":14,"style":14},".venv\\Scripts\\activate\n",[91,146234,146235],{"__ignoreMap":14},[94,146236,146237],{"class":96,"line":97},[94,146238,146232],{"class":1944},[40,146240,146241],{},"macOS\u002FLinux 激活：",[85,146243,146245],{"className":23804,"code":146244,"language":23806,"meta":14,"style":14},"source .venv\u002Fbin\u002Factivate\n",[91,146246,146247],{"__ignoreMap":14},[94,146248,146249,146251],{"class":96,"line":97},[94,146250,100870],{"class":153},[94,146252,100873],{"class":209},[40,146254,146255],{},"退出虚拟环境：",[85,146257,146259],{"className":23804,"code":146258,"language":23806,"meta":14,"style":14},"deactivate\n",[91,146260,146261],{"__ignoreMap":14},[94,146262,146263],{"class":96,"line":97},[94,146264,146258],{"class":1944},[40,146266,146267],{},"保存依赖：",[85,146269,146271],{"className":23804,"code":146270,"language":23806,"meta":14,"style":14},"pip freeze > requirements.txt\n",[91,146272,146273],{"__ignoreMap":14},[94,146274,146275,146277,146280,146282],{"class":96,"line":97},[94,146276,23813],{"class":1944},[94,146278,146279],{"class":209}," freeze",[94,146281,26205],{"class":100},[94,146283,146284],{"class":209}," requirements.txt\n",[40,146286,146287],{},"安装依赖：",[85,146289,146291],{"className":23804,"code":146290,"language":23806,"meta":14,"style":14},"pip install -r requirements.txt\n",[91,146292,146293],{"__ignoreMap":14},[94,146294,146295,146297,146299,146301],{"class":96,"line":97},[94,146296,23813],{"class":1944},[94,146298,23816],{"class":209},[94,146300,119616],{"class":153},[94,146302,146284],{"class":209},[35,146304,146306],{"id":146305},"_16-开发工具","1.6 开发工具",[65,146308,146310],{"id":146309},"_161-pycharm","1.6.1 PyCharm",[40,146312,146313],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[40,146315,122039],{},[48,146317,146318,146321,146324,146330,146333],{},[51,146319,146320],{},"New Project：创建项目。",[51,146322,146323],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[51,146325,146326,146327,125960],{},"New Python File：创建 ",[91,146328,146329],{},".py",[51,146331,146332],{},"Run：运行当前文件。",[51,146334,146335],{},"Debug：断点调试。",[65,146337,146339],{"id":146338},"_162-vs-code","1.6.2 VS Code",[40,146341,146342],{},"VS Code 轻量，适合后续多语言开发。",[40,146344,146345],{},"建议安装插件：",[48,146347,146348,146351,146354],{},[51,146349,146350],{},"Python。",[51,146352,146353],{},"Pylance。",[51,146355,146356],{},"Jupyter。",[40,146358,146359],{},"选择解释器：",[85,146361,146364],{"className":146362,"code":146363,"language":5169,"meta":14},[5167],"Ctrl + Shift + P -> Python: Select Interpreter\n",[91,146365,146363],{"__ignoreMap":14},[35,146367,146369],{"id":146368},"_17-第一个python程序","1.7 第一个Python程序",[40,146371,146372,146373,24601],{},"创建文件 ",[91,146374,146375],{},"hello.py",[85,146377,146379],{"className":30361,"code":146378,"language":30363,"meta":14,"style":14},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[91,146380,146381,146392],{"__ignoreMap":14},[94,146382,146383,146385,146387,146390],{"class":96,"line":97},[94,146384,30398],{"class":153},[94,146386,105],{"class":104},[94,146388,146389],{"class":209},"\"Hello World\"",[94,146391,111],{"class":104},[94,146393,146394,146396,146398,146401],{"class":96,"line":15},[94,146395,30398],{"class":153},[94,146397,105],{"class":104},[94,146399,146400],{"class":209},"\"你好，Python\"",[94,146402,111],{"class":104},[40,146404,146405],{},"在终端运行：",[85,146407,146409],{"className":23804,"code":146408,"language":23806,"meta":14,"style":14},"python hello.py\n",[91,146410,146411],{"__ignoreMap":14},[94,146412,146413,146415],{"class":96,"line":97},[94,146414,30363],{"class":1944},[94,146416,146417],{"class":209}," hello.py\n",[40,146419,146420],{},"或：",[85,146422,146424],{"className":23804,"code":146423,"language":23806,"meta":14,"style":14},"python3 hello.py\n",[91,146425,146426],{"__ignoreMap":14},[94,146427,146428,146430],{"class":96,"line":97},[94,146429,100856],{"class":1944},[94,146431,146417],{"class":209},[40,146433,146434],{},"输出：",[85,146436,146439],{"className":146437,"code":146438,"language":5169,"meta":14},[5167],"Hello World\n你好，Python\n",[91,146440,146438],{"__ignoreMap":14},[35,146442,146444],{"id":146443},"_18-print函数","1.8 print函数",[40,146446,146447,146450],{},[91,146448,146449],{},"print()"," 用来输出内容。",[85,146452,146454],{"className":30361,"code":146453,"language":30363,"meta":14,"style":14},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[91,146455,146456,146466,146476,146486],{"__ignoreMap":14},[94,146457,146458,146460,146462,146464],{"class":96,"line":97},[94,146459,30398],{"class":153},[94,146461,105],{"class":104},[94,146463,5826],{"class":209},[94,146465,111],{"class":104},[94,146467,146468,146470,146472,146474],{"class":96,"line":15},[94,146469,30398],{"class":153},[94,146471,105],{"class":104},[94,146473,416],{"class":153},[94,146475,111],{"class":104},[94,146477,146478,146480,146482,146484],{"class":96,"line":1160},[94,146479,30398],{"class":153},[94,146481,105],{"class":104},[94,146483,154],{"class":153},[94,146485,111],{"class":104},[94,146487,146488,146490,146492,146495,146497,146499],{"class":96,"line":1175},[94,146489,30398],{"class":153},[94,146491,105],{"class":104},[94,146493,146494],{"class":209},"\"年龄:\"",[94,146496,12417],{"class":104},[94,146498,755],{"class":153},[94,146500,111],{"class":104},[40,146502,146503],{},"多个内容用逗号隔开，默认中间加空格：",[85,146505,146507],{"className":30361,"code":146506,"language":30363,"meta":14,"style":14},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[91,146508,146509,146519,146529],{"__ignoreMap":14},[94,146510,146511,146514,146516],{"class":96,"line":97},[94,146512,146513],{"class":104},"name ",[94,146515,150],{"class":100},[94,146517,146518],{"class":209}," \"张三\"\n",[94,146520,146521,146524,146526],{"class":96,"line":15},[94,146522,146523],{"class":104},"age ",[94,146525,150],{"class":100},[94,146527,146528],{"class":153}," 18\n",[94,146530,146531,146533,146535,146538,146541,146543],{"class":96,"line":1160},[94,146532,30398],{"class":153},[94,146534,105],{"class":104},[94,146536,146537],{"class":209},"\"姓名:\"",[94,146539,146540],{"class":104},", name, ",[94,146542,146494],{"class":209},[94,146544,146545],{"class":104},", age)\n",[40,146547,146548],{},"修改分隔符：",[85,146550,146552],{"className":30361,"code":146551,"language":30363,"meta":14,"style":14},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[91,146553,146554],{"__ignoreMap":14},[94,146555,146556,146558,146560,146563,146565,146567,146569,146571,146573,146576,146578,146580],{"class":96,"line":97},[94,146557,30398],{"class":153},[94,146559,105],{"class":104},[94,146561,146562],{"class":209},"\"2024\"",[94,146564,12417],{"class":104},[94,146566,54293],{"class":209},[94,146568,12417],{"class":104},[94,146570,54293],{"class":209},[94,146572,12417],{"class":104},[94,146574,146575],{"class":5198},"sep",[94,146577,150],{"class":100},[94,146579,32466],{"class":209},[94,146581,111],{"class":104},[40,146583,146584],{},"修改结尾符：",[85,146586,146588],{"className":30361,"code":146587,"language":30363,"meta":14,"style":14},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[91,146589,146590,146608],{"__ignoreMap":14},[94,146591,146592,146594,146596,146598,146600,146602,146604,146606],{"class":96,"line":97},[94,146593,30398],{"class":153},[94,146595,105],{"class":104},[94,146597,5826],{"class":209},[94,146599,12417],{"class":104},[94,146601,45784],{"class":5198},[94,146603,150],{"class":100},[94,146605,4340],{"class":209},[94,146607,111],{"class":104},[94,146609,146610,146612,146614,146617],{"class":96,"line":15},[94,146611,30398],{"class":153},[94,146613,105],{"class":104},[94,146615,146616],{"class":209},"\"python\"",[94,146618,111],{"class":104},[35,146620,146622],{"id":146621},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[40,146624,146625],{},"交互运行适合临时验证：",[85,146627,146629],{"className":30361,"code":146628,"language":30363,"meta":14,"style":14},">>> 10 * 3\n30\n",[91,146630,146631,146641],{"__ignoreMap":14},[94,146632,146633,146635,146637,146639],{"class":96,"line":97},[94,146634,145830],{"class":100},[94,146636,2019],{"class":153},[94,146638,6500],{"class":100},[94,146640,120013],{"class":153},[94,146642,146643],{"class":96,"line":15},[94,146644,146645],{"class":153},"30\n",[40,146647,146648],{},"脚本运行适合保存程序：",[85,146650,146652],{"className":30361,"code":146651,"language":30363,"meta":14,"style":14},"price = 8\ncount = 5\nprint(price * count)\n",[91,146653,146654,146664,146673],{"__ignoreMap":14},[94,146655,146656,146659,146661],{"class":96,"line":97},[94,146657,146658],{"class":104},"price ",[94,146660,150],{"class":100},[94,146662,146663],{"class":153}," 8\n",[94,146665,146666,146669,146671],{"class":96,"line":15},[94,146667,146668],{"class":104},"count ",[94,146670,150],{"class":100},[94,146672,54404],{"class":153},[94,146674,146675,146677,146680,146682],{"class":96,"line":1160},[94,146676,30398],{"class":153},[94,146678,146679],{"class":104},"(price ",[94,146681,560],{"class":100},[94,146683,146684],{"class":104}," count)\n",[40,146686,146687],{},"实际学习中推荐：",[48,146689,146690,146693,146698],{},[51,146691,146692],{},"临时试一个语法，用交互模式。",[51,146694,146695,146696,125960],{},"写完整练习，用 ",[91,146697,146329],{},[51,146699,146700],{},"写项目，用独立目录和虚拟环境。",[35,146702,146704],{"id":146703},"_110-常见错误","1.10 常见错误",[65,146706,146708],{"id":146707},"_1101-命令找不到","1.10.1 命令找不到",[85,146710,146713],{"className":146711,"code":146712,"language":5169,"meta":14},[5167],"python: command not found\n",[91,146714,146712],{"__ignoreMap":14},[40,146716,146717],{},"原因：",[48,146719,146720,146723,146726],{},[51,146721,146722],{},"没安装 Python。",[51,146724,146725],{},"PATH 没配置。",[51,146727,146728,146729,28368],{},"Linux\u002FmacOS 应该使用 ",[91,146730,100856],{},[65,146732,146734],{"id":146733},"_1102-文件名冲突","1.10.2 文件名冲突",[40,146736,146737],{},"不要把文件命名为：",[85,146739,146742],{"className":146740,"code":146741,"language":5169,"meta":14},[5167],"random.py\njson.py\ntime.py\nrequests.py\n",[91,146743,146741],{"__ignoreMap":14},[40,146745,146746],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[65,146748,146750],{"id":146749},"_1103-中文乱码","1.10.3 中文乱码",[40,146752,146753],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[40,146755,146756],{},"如果读写文件出现乱码，要明确指定编码：",[85,146758,146760],{"className":30361,"code":146759,"language":30363,"meta":14,"style":14},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[91,146761,146762,146796],{"__ignoreMap":14},[94,146763,146764,146766,146769,146771,146774,146776,146779,146781,146784,146786,146789,146791,146793],{"class":96,"line":97},[94,146765,107810],{"class":100},[94,146767,146768],{"class":153}," open",[94,146770,105],{"class":104},[94,146772,146773],{"class":209},"\"data.txt\"",[94,146775,12417],{"class":104},[94,146777,146778],{"class":209},"\"r\"",[94,146780,12417],{"class":104},[94,146782,146783],{"class":5198},"encoding",[94,146785,150],{"class":100},[94,146787,146788],{"class":209},"\"utf-8\"",[94,146790,13696],{"class":104},[94,146792,31366],{"class":100},[94,146794,146795],{"class":104}," f:\n",[94,146797,146798,146801,146803],{"class":96,"line":15},[94,146799,146800],{"class":104},"    content ",[94,146802,150],{"class":100},[94,146804,146805],{"class":104}," f.read()\n",[35,146807,146809],{"id":146808},"_111-本章练习","1.11 本章练习",[48,146811,146812,146815,146821],{},[51,146813,146814],{},"安装 Python，并在终端输出版本号。",[51,146816,146817,146818,146820],{},"新建 ",[91,146819,146375],{},"，输出自己的姓名、年龄、学习目标。",[51,146822,104343,146823,146825],{},[91,146824,146449],{}," 输出下面格式：",[85,146827,146830],{"className":146828,"code":146829,"language":5169,"meta":14},[5167],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[91,146831,146829],{"__ignoreMap":14},[48,146833,146834],{"start":1175},[51,146835,104343,146836,146838],{},[91,146837,146575],{}," 输出日期：",[85,146840,146843],{"className":146841,"code":146842,"language":5169,"meta":14},[5167],"2024-10-10\n",[91,146844,146842],{"__ignoreMap":14},[48,146846,146847],{"start":1181},[51,146848,104343,146849,146851,146852,146854],{},[91,146850,45784],{}," 让两次 ",[91,146853,146449],{}," 输出在同一行。",[5108,146856,146857],{},"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":14,"searchDepth":15,"depth":15,"links":146859},[146860,146861,146862,146867,146868,146869,146873,146874,146875,146876,146881],{"id":145742,"depth":15,"text":145743},{"id":145786,"depth":15,"text":145787},{"id":145887,"depth":15,"text":145888,"children":146863},[146864,146865,146866],{"id":145891,"depth":1160,"text":145892},{"id":145946,"depth":1160,"text":145947},{"id":145982,"depth":1160,"text":145983},{"id":146055,"depth":15,"text":146056},{"id":146200,"depth":15,"text":146201},{"id":146305,"depth":15,"text":146306,"children":146870},[146871,146872],{"id":146309,"depth":1160,"text":146310},{"id":146338,"depth":1160,"text":146339},{"id":146368,"depth":15,"text":146369},{"id":146443,"depth":15,"text":146444},{"id":146621,"depth":15,"text":146622},{"id":146703,"depth":15,"text":146704,"children":146877},[146878,146879,146880],{"id":146707,"depth":1160,"text":146708},{"id":146733,"depth":1160,"text":146734},{"id":146749,"depth":1160,"text":146750},{"id":146808,"depth":15,"text":146809},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145734,"description":17},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146888,"title":146889,"body":146890,"description":17,"extension":18,"meta":149294,"navigation":20,"path":149295,"seo":149296,"stem":149297,"__hash__":149298},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146891,"toc":149279},[146892,146895,146899,146902,146905,146922,146925,146967,146970,146974,146977,146980,147017,147020,147054,147057,147149,147153,147167,147170,147197,147200,147204,147307,147314,147317,147334,147338,147345,147534,147537,147610,147614,147617,147701,147704,147736,147740,147944,147947,147951,147957,148059,148062,148318,148322,148325,148328,148342,148344,148530,148534,148896,148902,148906,148909,149033,149036,149215,149218,149222,149255,149259,149276],[10,146893,146889],{"id":146894},"_10-json与pyecharts折线图",[35,146896,146898],{"id":146897},"_101-数据可视化","10.1 数据可视化",[40,146900,146901],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[40,146903,146904],{},"常见图表：",[48,146906,146907,146910,146913,146916,146919],{},[51,146908,146909],{},"折线图：看趋势。",[51,146911,146912],{},"柱状图：看分类对比。",[51,146914,146915],{},"饼图：看占比。",[51,146917,146918],{},"地图：看地域分布。",[51,146920,146921],{},"散点图：看两个变量之间的关系。",[40,146923,146924],{},"Python 可视化常用库：",[242,146926,146927,146935],{},[245,146928,146929],{},[248,146930,146931,146933],{},[251,146932,146138],{},[251,146934,23722],{},[289,146936,146937,146944,146952,146959],{},[248,146938,146939,146941],{},[294,146940,146170],{},[294,146942,146943],{},"基础、经典、可定制",[248,146945,146946,146949],{},[294,146947,146948],{},"seaborn",[294,146950,146951],{},"统计图表更美观",[248,146953,146954,146956],{},[294,146955,146178],{},[294,146957,146958],{},"生成交互式网页图表",[248,146960,146961,146964],{},[294,146962,146963],{},"plotly",[294,146965,146966],{},"交互图表能力强",[40,146968,146969],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[35,146971,146973],{"id":146972},"_102-json回顾","10.2 JSON回顾",[40,146975,146976],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[40,146978,146979],{},"Python 字典：",[85,146981,146983],{"className":30361,"code":146982,"language":30363,"meta":14,"style":14},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[91,146984,146985,146993,147004,147013],{"__ignoreMap":14},[94,146986,146987,146989,146991],{"class":96,"line":97},[94,146988,101635],{"class":104},[94,146990,150],{"class":100},[94,146992,15554],{"class":104},[94,146994,146995,146998,147000,147002],{"class":96,"line":15},[94,146996,146997],{"class":209},"    \"name\"",[94,146999,51414],{"class":104},[94,147001,69246],{"class":209},[94,147003,31449],{"class":104},[94,147005,147006,147009,147011],{"class":96,"line":1160},[94,147007,147008],{"class":209},"    \"value\"",[94,147010,51414],{"class":104},[94,147012,97435],{"class":153},[94,147014,147015],{"class":96,"line":1175},[94,147016,1546],{"class":104},[40,147018,147019],{},"JSON 字符串：",[85,147021,147024],{"className":147022,"code":147023,"language":145769,"meta":14,"style":14},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[91,147025,147026,147030,147041,147050],{"__ignoreMap":14},[94,147027,147028],{"class":96,"line":97},[94,147029,1527],{"class":104},[94,147031,147032,147035,147037,147039],{"class":96,"line":15},[94,147033,147034],{"class":153},"  \"name\"",[94,147036,51414],{"class":104},[94,147038,69246],{"class":209},[94,147040,31449],{"class":104},[94,147042,147043,147046,147048],{"class":96,"line":1160},[94,147044,147045],{"class":153},"  \"value\"",[94,147047,51414],{"class":104},[94,147049,97435],{"class":153},[94,147051,147052],{"class":96,"line":1175},[94,147053,1546],{"class":104},[40,147055,147056],{},"Python 与 JSON 的转换：",[85,147058,147060],{"className":30361,"code":147059,"language":30363,"meta":14,"style":14},"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",[91,147061,147062,147069,147073,147098,147102,147121,147128,147132,147142],{"__ignoreMap":14},[94,147063,147064,147066],{"class":96,"line":97},[94,147065,30375],{"class":100},[94,147067,147068],{"class":104}," json\n",[94,147070,147071],{"class":96,"line":15},[94,147072,2381],{"emptyLinePlaceholder":20},[94,147074,147075,147077,147079,147081,147083,147085,147087,147089,147092,147094,147096],{"class":96,"line":1160},[94,147076,101635],{"class":104},[94,147078,150],{"class":100},[94,147080,4429],{"class":104},[94,147082,62656],{"class":209},[94,147084,51414],{"class":104},[94,147086,69246],{"class":209},[94,147088,12417],{"class":104},[94,147090,147091],{"class":209},"\"value\"",[94,147093,51414],{"class":104},[94,147095,416],{"class":153},[94,147097,1546],{"class":104},[94,147099,147100],{"class":96,"line":1175},[94,147101,2381],{"emptyLinePlaceholder":20},[94,147103,147104,147107,147109,147112,147115,147117,147119],{"class":96,"line":1181},[94,147105,147106],{"class":104},"json_text ",[94,147108,150],{"class":100},[94,147110,147111],{"class":104}," json.dumps(data, ",[94,147113,147114],{"class":5198},"ensure_ascii",[94,147116,150],{"class":100},[94,147118,33970],{"class":153},[94,147120,111],{"class":104},[94,147122,147123,147125],{"class":96,"line":1195},[94,147124,30398],{"class":153},[94,147126,147127],{"class":104},"(json_text)\n",[94,147129,147130],{"class":96,"line":1201},[94,147131,2381],{"emptyLinePlaceholder":20},[94,147133,147134,147137,147139],{"class":96,"line":1292},[94,147135,147136],{"class":104},"new_data ",[94,147138,150],{"class":100},[94,147140,147141],{"class":104}," json.loads(json_text)\n",[94,147143,147144,147146],{"class":96,"line":1298},[94,147145,30398],{"class":153},[94,147147,147148],{"class":104},"(new_data)\n",[35,147150,147152],{"id":147151},"_103-安装pyecharts","10.3 安装pyecharts",[85,147154,147156],{"className":23804,"code":147155,"language":23806,"meta":14,"style":14},"pip install pyecharts\n",[91,147157,147158],{"__ignoreMap":14},[94,147159,147160,147162,147164],{"class":96,"line":97},[94,147161,23813],{"class":1944},[94,147163,23816],{"class":209},[94,147165,147166],{"class":209}," pyecharts\n",[40,147168,147169],{},"验证：",[85,147171,147173],{"className":30361,"code":147172,"language":30363,"meta":14,"style":14},"import pyecharts\n\nprint(pyecharts.__version__)\n",[91,147174,147175,147181,147185],{"__ignoreMap":14},[94,147176,147177,147179],{"class":96,"line":97},[94,147178,30375],{"class":100},[94,147180,147166],{"class":104},[94,147182,147183],{"class":96,"line":15},[94,147184,2381],{"emptyLinePlaceholder":20},[94,147186,147187,147189,147192,147195],{"class":96,"line":1160},[94,147188,30398],{"class":153},[94,147190,147191],{"class":104},"(pyecharts.",[94,147193,147194],{"class":153},"__version__",[94,147196,111],{"class":104},[40,147198,147199],{},"如果使用虚拟环境，要先激活环境再安装。",[35,147201,147203],{"id":147202},"_104-第一个折线图","10.4 第一个折线图",[85,147205,147207],{"className":30361,"code":147206,"language":30363,"meta":14,"style":14},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[91,147208,147209,147221,147225,147235,147265,147297],{"__ignoreMap":14},[94,147210,147211,147213,147216,147218],{"class":96,"line":97},[94,147212,30720],{"class":100},[94,147214,147215],{"class":104}," pyecharts.charts ",[94,147217,30375],{"class":100},[94,147219,147220],{"class":104}," Line\n",[94,147222,147223],{"class":96,"line":15},[94,147224,2381],{"emptyLinePlaceholder":20},[94,147226,147227,147230,147232],{"class":96,"line":1160},[94,147228,147229],{"class":104},"line ",[94,147231,150],{"class":100},[94,147233,147234],{"class":104}," Line()\n",[94,147236,147237,147240,147243,147245,147248,147250,147253,147255,147258,147260,147263],{"class":96,"line":1175},[94,147238,147239],{"class":104},"line.add_xaxis([",[94,147241,147242],{"class":209},"\"周一\"",[94,147244,12417],{"class":104},[94,147246,147247],{"class":209},"\"周二\"",[94,147249,12417],{"class":104},[94,147251,147252],{"class":209},"\"周三\"",[94,147254,12417],{"class":104},[94,147256,147257],{"class":209},"\"周四\"",[94,147259,12417],{"class":104},[94,147261,147262],{"class":209},"\"周五\"",[94,147264,4638],{"class":104},[94,147266,147267,147270,147273,147275,147277,147279,147281,147283,147285,147287,147290,147292,147295],{"class":96,"line":1181},[94,147268,147269],{"class":104},"line.add_yaxis(",[94,147271,147272],{"class":209},"\"销售额\"",[94,147274,77495],{"class":104},[94,147276,416],{"class":153},[94,147278,12417],{"class":104},[94,147280,922],{"class":153},[94,147282,12417],{"class":104},[94,147284,967],{"class":153},[94,147286,12417],{"class":104},[94,147288,147289],{"class":153},"150",[94,147291,12417],{"class":104},[94,147293,147294],{"class":153},"180",[94,147296,4638],{"class":104},[94,147298,147299,147302,147305],{"class":96,"line":1195},[94,147300,147301],{"class":104},"line.render(",[94,147303,147304],{"class":209},"\"line.html\"",[94,147306,111],{"class":104},[40,147308,147309,147310,147313],{},"运行后会生成 ",[91,147311,147312],{},"line.html","，用浏览器打开即可看到图表。",[40,147315,147316],{},"核心步骤：",[48,147318,147319,147322,147325,147328,147331],{},[51,147320,147321],{},"导入图表类。",[51,147323,147324],{},"创建图表对象。",[51,147326,147327],{},"添加 x 轴数据。",[51,147329,147330],{},"添加 y 轴数据。",[51,147332,147333],{},"渲染为 HTML。",[35,147335,147337],{"id":147336},"_105-全局配置","10.5 全局配置",[40,147339,147340,147341,147344],{},"常用配置在 ",[91,147342,147343],{},"pyecharts.options"," 中。",[85,147346,147348],{"className":30361,"code":147347,"language":30363,"meta":14,"style":14},"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",[91,147349,147350,147367,147377,147381,147389,147413,147441,147446,147465,147484,147502,147522,147526],{"__ignoreMap":14},[94,147351,147352,147354,147357,147359,147362,147364],{"class":96,"line":97},[94,147353,30720],{"class":100},[94,147355,147356],{"class":104}," pyecharts ",[94,147358,30375],{"class":100},[94,147360,147361],{"class":104}," options ",[94,147363,31366],{"class":100},[94,147365,147366],{"class":104}," opts\n",[94,147368,147369,147371,147373,147375],{"class":96,"line":15},[94,147370,30720],{"class":100},[94,147372,147215],{"class":104},[94,147374,30375],{"class":100},[94,147376,147220],{"class":104},[94,147378,147379],{"class":96,"line":1160},[94,147380,2381],{"emptyLinePlaceholder":20},[94,147382,147383,147385,147387],{"class":96,"line":1175},[94,147384,147229],{"class":104},[94,147386,150],{"class":100},[94,147388,147234],{"class":104},[94,147390,147391,147393,147395,147397,147399,147401,147403,147405,147407,147409,147411],{"class":96,"line":1181},[94,147392,147239],{"class":104},[94,147394,147242],{"class":209},[94,147396,12417],{"class":104},[94,147398,147247],{"class":209},[94,147400,12417],{"class":104},[94,147402,147252],{"class":209},[94,147404,12417],{"class":104},[94,147406,147257],{"class":209},[94,147408,12417],{"class":104},[94,147410,147262],{"class":209},[94,147412,4638],{"class":104},[94,147414,147415,147417,147419,147421,147423,147425,147427,147429,147431,147433,147435,147437,147439],{"class":96,"line":1195},[94,147416,147269],{"class":104},[94,147418,147272],{"class":209},[94,147420,77495],{"class":104},[94,147422,416],{"class":153},[94,147424,12417],{"class":104},[94,147426,922],{"class":153},[94,147428,12417],{"class":104},[94,147430,967],{"class":153},[94,147432,12417],{"class":104},[94,147434,147289],{"class":153},[94,147436,12417],{"class":104},[94,147438,147294],{"class":153},[94,147440,4638],{"class":104},[94,147442,147443],{"class":96,"line":1201},[94,147444,147445],{"class":104},"line.set_global_opts(\n",[94,147447,147448,147451,147453,147456,147458,147460,147463],{"class":96,"line":1292},[94,147449,147450],{"class":5198},"    title_opts",[94,147452,150],{"class":100},[94,147454,147455],{"class":104},"opts.TitleOpts(",[94,147457,51384],{"class":5198},[94,147459,150],{"class":100},[94,147461,147462],{"class":209},"\"一周销售额\"",[94,147464,38030],{"class":104},[94,147466,147467,147470,147472,147475,147477,147479,147482],{"class":96,"line":1298},[94,147468,147469],{"class":5198},"    xaxis_opts",[94,147471,150],{"class":100},[94,147473,147474],{"class":104},"opts.AxisOpts(",[94,147476,79787],{"class":5198},[94,147478,150],{"class":100},[94,147480,147481],{"class":209},"\"日期\"",[94,147483,38030],{"class":104},[94,147485,147486,147489,147491,147493,147495,147497,147500],{"class":96,"line":1310},[94,147487,147488],{"class":5198},"    yaxis_opts",[94,147490,150],{"class":100},[94,147492,147474],{"class":104},[94,147494,79787],{"class":5198},[94,147496,150],{"class":100},[94,147498,147499],{"class":209},"\"金额\"",[94,147501,38030],{"class":104},[94,147503,147504,147507,147509,147512,147515,147517,147520],{"class":96,"line":1593},[94,147505,147506],{"class":5198},"    tooltip_opts",[94,147508,150],{"class":100},[94,147510,147511],{"class":104},"opts.TooltipOpts(",[94,147513,147514],{"class":5198},"trigger",[94,147516,150],{"class":100},[94,147518,147519],{"class":209},"\"axis\"",[94,147521,38030],{"class":104},[94,147523,147524],{"class":96,"line":1598},[94,147525,111],{"class":104},[94,147527,147528,147530,147532],{"class":96,"line":1604},[94,147529,147301],{"class":104},[94,147531,147304],{"class":209},[94,147533,111],{"class":104},[40,147535,147536],{},"常见全局配置：",[242,147538,147539,147548],{},[245,147540,147541],{},[248,147542,147543,147546],{},[251,147544,147545],{},"配置",[251,147547,102673],{},[289,147549,147550,147560,147570,147580,147590,147600],{},[248,147551,147552,147557],{},[294,147553,147554],{},[91,147555,147556],{},"TitleOpts",[294,147558,147559],{},"标题",[248,147561,147562,147567],{},[294,147563,147564],{},[91,147565,147566],{},"LegendOpts",[294,147568,147569],{},"图例",[248,147571,147572,147577],{},[294,147573,147574],{},[91,147575,147576],{},"TooltipOpts",[294,147578,147579],{},"提示框",[248,147581,147582,147587],{},[294,147583,147584],{},[91,147585,147586],{},"AxisOpts",[294,147588,147589],{},"坐标轴",[248,147591,147592,147597],{},[294,147593,147594],{},[91,147595,147596],{},"VisualMapOpts",[294,147598,147599],{},"视觉映射",[248,147601,147602,147607],{},[294,147603,147604],{},[91,147605,147606],{},"DataZoomOpts",[294,147608,147609],{},"区域缩放",[35,147611,147613],{"id":147612},"_106-系列配置","10.6 系列配置",[40,147615,147616],{},"系列配置作用于某一组数据。",[85,147618,147620],{"className":30361,"code":147619,"language":30363,"meta":14,"style":14},"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",[91,147621,147622,147627,147638,147667,147678,147697],{"__ignoreMap":14},[94,147623,147624],{"class":96,"line":97},[94,147625,147626],{"class":104},"line.add_yaxis(\n",[94,147628,147629,147632,147634,147636],{"class":96,"line":15},[94,147630,147631],{"class":5198},"    series_name",[94,147633,150],{"class":100},[94,147635,147272],{"class":209},[94,147637,31449],{"class":104},[94,147639,147640,147643,147645,147647,147649,147651,147653,147655,147657,147659,147661,147663,147665],{"class":96,"line":1160},[94,147641,147642],{"class":5198},"    y_axis",[94,147644,150],{"class":100},[94,147646,995],{"class":104},[94,147648,416],{"class":153},[94,147650,12417],{"class":104},[94,147652,922],{"class":153},[94,147654,12417],{"class":104},[94,147656,967],{"class":153},[94,147658,12417],{"class":104},[94,147660,147289],{"class":153},[94,147662,12417],{"class":104},[94,147664,147294],{"class":153},[94,147666,87813],{"class":104},[94,147668,147669,147672,147674,147676],{"class":96,"line":1175},[94,147670,147671],{"class":5198},"    is_smooth",[94,147673,150],{"class":100},[94,147675,31459],{"class":153},[94,147677,31449],{"class":104},[94,147679,147680,147683,147685,147688,147691,147693,147695],{"class":96,"line":1181},[94,147681,147682],{"class":5198},"    label_opts",[94,147684,150],{"class":100},[94,147686,147687],{"class":104},"opts.LabelOpts(",[94,147689,147690],{"class":5198},"is_show",[94,147692,150],{"class":100},[94,147694,31459],{"class":153},[94,147696,38030],{"class":104},[94,147698,147699],{"class":96,"line":1195},[94,147700,111],{"class":104},[40,147702,147703],{},"常用参数：",[48,147705,147706,147712,147718,147724,147730],{},[51,147707,147708,147711],{},[91,147709,147710],{},"series_name","：系列名称。",[51,147713,147714,147717],{},[91,147715,147716],{},"y_axis","：y 轴数据。",[51,147719,147720,147723],{},[91,147721,147722],{},"is_smooth","：是否平滑曲线。",[51,147725,147726,147729],{},[91,147727,147728],{},"label_opts","：标签配置。",[51,147731,147732,147735],{},[91,147733,147734],{},"symbol_size","：标记点大小。",[35,147737,147739],{"id":147738},"_107-多条折线","10.7 多条折线",[85,147741,147743],{"className":30361,"code":147742,"language":30363,"meta":14,"style":14},"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",[91,147744,147745,147759,147769,147773,147802,147806,147814,147819,147857,147894,147898,147915,147931,147935],{"__ignoreMap":14},[94,147746,147747,147749,147751,147753,147755,147757],{"class":96,"line":97},[94,147748,30720],{"class":100},[94,147750,147356],{"class":104},[94,147752,30375],{"class":100},[94,147754,147361],{"class":104},[94,147756,31366],{"class":100},[94,147758,147366],{"class":104},[94,147760,147761,147763,147765,147767],{"class":96,"line":15},[94,147762,30720],{"class":100},[94,147764,147215],{"class":104},[94,147766,30375],{"class":100},[94,147768,147220],{"class":104},[94,147770,147771],{"class":96,"line":1160},[94,147772,2381],{"emptyLinePlaceholder":20},[94,147774,147775,147778,147780,147782,147784,147786,147788,147790,147792,147794,147796,147798,147800],{"class":96,"line":1175},[94,147776,147777],{"class":104},"dates ",[94,147779,150],{"class":100},[94,147781,52203],{"class":104},[94,147783,147242],{"class":209},[94,147785,12417],{"class":104},[94,147787,147247],{"class":209},[94,147789,12417],{"class":104},[94,147791,147252],{"class":209},[94,147793,12417],{"class":104},[94,147795,147257],{"class":209},[94,147797,12417],{"class":104},[94,147799,147262],{"class":209},[94,147801,33229],{"class":104},[94,147803,147804],{"class":96,"line":1181},[94,147805,2381],{"emptyLinePlaceholder":20},[94,147807,147808,147810,147812],{"class":96,"line":1195},[94,147809,147229],{"class":104},[94,147811,150],{"class":100},[94,147813,147234],{"class":104},[94,147815,147816],{"class":96,"line":1201},[94,147817,147818],{"class":104},"line.add_xaxis(dates)\n",[94,147820,147821,147823,147826,147828,147830,147832,147835,147837,147839,147841,147843,147845,147847,147849,147851,147853,147855],{"class":96,"line":1292},[94,147822,147269],{"class":104},[94,147824,147825],{"class":209},"\"线上销售\"",[94,147827,77495],{"class":104},[94,147829,416],{"class":153},[94,147831,12417],{"class":104},[94,147833,147834],{"class":153},"130",[94,147836,12417],{"class":104},[94,147838,922],{"class":153},[94,147840,12417],{"class":104},[94,147842,21030],{"class":153},[94,147844,12417],{"class":104},[94,147846,1703],{"class":153},[94,147848,112179],{"class":104},[94,147850,147722],{"class":5198},[94,147852,150],{"class":100},[94,147854,31459],{"class":153},[94,147856,111],{"class":104},[94,147858,147859,147861,147864,147866,147868,147870,147872,147874,147876,147878,147880,147882,147884,147886,147888,147890,147892],{"class":96,"line":1298},[94,147860,147269],{"class":104},[94,147862,147863],{"class":209},"\"线下销售\"",[94,147865,77495],{"class":104},[94,147867,717],{"class":153},[94,147869,12417],{"class":104},[94,147871,967],{"class":153},[94,147873,12417],{"class":104},[94,147875,416],{"class":153},[94,147877,12417],{"class":104},[94,147879,922],{"class":153},[94,147881,12417],{"class":104},[94,147883,147289],{"class":153},[94,147885,112179],{"class":104},[94,147887,147722],{"class":5198},[94,147889,150],{"class":100},[94,147891,31459],{"class":153},[94,147893,111],{"class":104},[94,147895,147896],{"class":96,"line":1310},[94,147897,147445],{"class":104},[94,147899,147900,147902,147904,147906,147908,147910,147913],{"class":96,"line":1593},[94,147901,147450],{"class":5198},[94,147903,150],{"class":100},[94,147905,147455],{"class":104},[94,147907,51384],{"class":5198},[94,147909,150],{"class":100},[94,147911,147912],{"class":209},"\"线上线下销售趋势\"",[94,147914,38030],{"class":104},[94,147916,147917,147919,147921,147923,147925,147927,147929],{"class":96,"line":1598},[94,147918,147506],{"class":5198},[94,147920,150],{"class":100},[94,147922,147511],{"class":104},[94,147924,147514],{"class":5198},[94,147926,150],{"class":100},[94,147928,147519],{"class":209},[94,147930,38030],{"class":104},[94,147932,147933],{"class":96,"line":1604},[94,147934,111],{"class":104},[94,147936,147937,147939,147942],{"class":96,"line":1609},[94,147938,147301],{"class":104},[94,147940,147941],{"class":209},"\"sales.html\"",[94,147943,111],{"class":104},[40,147945,147946],{},"多条折线适合比较不同指标或不同地区。",[35,147948,147950],{"id":147949},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[40,147952,147953,147954,24601],{},"假设 ",[91,147955,147956],{},"sales.json",[85,147958,147960],{"className":147022,"code":147959,"language":145769,"meta":14,"style":14},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[91,147961,147962,147967,147999,148027,148055],{"__ignoreMap":14},[94,147963,147964],{"class":96,"line":97},[94,147965,147966],{"class":104},"[\n",[94,147968,147969,147972,147975,147977,147979,147981,147984,147986,147988,147990,147993,147995,147997],{"class":96,"line":15},[94,147970,147971],{"class":104},"  {",[94,147973,147974],{"class":153},"\"date\"",[94,147976,51414],{"class":104},[94,147978,147242],{"class":209},[94,147980,12417],{"class":104},[94,147982,147983],{"class":153},"\"online\"",[94,147985,51414],{"class":104},[94,147987,416],{"class":153},[94,147989,12417],{"class":104},[94,147991,147992],{"class":153},"\"offline\"",[94,147994,51414],{"class":104},[94,147996,717],{"class":153},[94,147998,4911],{"class":104},[94,148000,148001,148003,148005,148007,148009,148011,148013,148015,148017,148019,148021,148023,148025],{"class":96,"line":1160},[94,148002,147971],{"class":104},[94,148004,147974],{"class":153},[94,148006,51414],{"class":104},[94,148008,147247],{"class":209},[94,148010,12417],{"class":104},[94,148012,147983],{"class":153},[94,148014,51414],{"class":104},[94,148016,147834],{"class":153},[94,148018,12417],{"class":104},[94,148020,147992],{"class":153},[94,148022,51414],{"class":104},[94,148024,967],{"class":153},[94,148026,4911],{"class":104},[94,148028,148029,148031,148033,148035,148037,148039,148041,148043,148045,148047,148049,148051,148053],{"class":96,"line":1175},[94,148030,147971],{"class":104},[94,148032,147974],{"class":153},[94,148034,51414],{"class":104},[94,148036,147252],{"class":209},[94,148038,12417],{"class":104},[94,148040,147983],{"class":153},[94,148042,51414],{"class":104},[94,148044,922],{"class":153},[94,148046,12417],{"class":104},[94,148048,147992],{"class":153},[94,148050,51414],{"class":104},[94,148052,416],{"class":153},[94,148054,1546],{"class":104},[94,148056,148057],{"class":96,"line":1181},[94,148058,33229],{"class":104},[40,148060,148061],{},"读取并绘图：",[85,148063,148065],{"className":30361,"code":148064,"language":30363,"meta":14,"style":14},"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",[91,148066,148067,148073,148087,148097,148101,148133,148146,148150,148158,148167,148176,148180,148192,148201,148210,148219,148223,148231,148235,148252,148269,148273,148290,148306,148310],{"__ignoreMap":14},[94,148068,148069,148071],{"class":96,"line":97},[94,148070,30375],{"class":100},[94,148072,147068],{"class":104},[94,148074,148075,148077,148079,148081,148083,148085],{"class":96,"line":15},[94,148076,30720],{"class":100},[94,148078,147356],{"class":104},[94,148080,30375],{"class":100},[94,148082,147361],{"class":104},[94,148084,31366],{"class":100},[94,148086,147366],{"class":104},[94,148088,148089,148091,148093,148095],{"class":96,"line":1160},[94,148090,30720],{"class":100},[94,148092,147215],{"class":104},[94,148094,30375],{"class":100},[94,148096,147220],{"class":104},[94,148098,148099],{"class":96,"line":1175},[94,148100,2381],{"emptyLinePlaceholder":20},[94,148102,148103,148105,148107,148109,148112,148114,148116,148118,148120,148122,148124,148126,148128,148131],{"class":96,"line":1181},[94,148104,107810],{"class":100},[94,148106,146768],{"class":153},[94,148108,105],{"class":104},[94,148110,148111],{"class":209},"\"sales.json\"",[94,148113,12417],{"class":104},[94,148115,146778],{"class":209},[94,148117,12417],{"class":104},[94,148119,146783],{"class":5198},[94,148121,150],{"class":100},[94,148123,146788],{"class":209},[94,148125,13696],{"class":104},[94,148127,31366],{"class":100},[94,148129,148130],{"class":5198}," file",[94,148132,3720],{"class":104},[94,148134,148135,148137,148139,148142,148144],{"class":96,"line":1195},[94,148136,101398],{"class":104},[94,148138,150],{"class":100},[94,148140,148141],{"class":104}," json.load(",[94,148143,45337],{"class":5198},[94,148145,111],{"class":104},[94,148147,148148],{"class":96,"line":1201},[94,148149,2381],{"emptyLinePlaceholder":20},[94,148151,148152,148154,148156],{"class":96,"line":1292},[94,148153,147777],{"class":104},[94,148155,150],{"class":100},[94,148157,51815],{"class":104},[94,148159,148160,148163,148165],{"class":96,"line":1298},[94,148161,148162],{"class":104},"online_sales ",[94,148164,150],{"class":100},[94,148166,51815],{"class":104},[94,148168,148169,148172,148174],{"class":96,"line":1310},[94,148170,148171],{"class":104},"offline_sales ",[94,148173,150],{"class":100},[94,148175,51815],{"class":104},[94,148177,148178],{"class":96,"line":1593},[94,148179,2381],{"emptyLinePlaceholder":20},[94,148181,148182,148184,148187,148189],{"class":96,"line":1598},[94,148183,3006],{"class":100},[94,148185,148186],{"class":104}," item ",[94,148188,26026],{"class":100},[94,148190,148191],{"class":104}," data:\n",[94,148193,148194,148197,148199],{"class":96,"line":1604},[94,148195,148196],{"class":104},"    dates.append(item[",[94,148198,147974],{"class":209},[94,148200,4638],{"class":104},[94,148202,148203,148206,148208],{"class":96,"line":1609},[94,148204,148205],{"class":104},"    online_sales.append(item[",[94,148207,147983],{"class":209},[94,148209,4638],{"class":104},[94,148211,148212,148215,148217],{"class":96,"line":1623},[94,148213,148214],{"class":104},"    offline_sales.append(item[",[94,148216,147992],{"class":209},[94,148218,4638],{"class":104},[94,148220,148221],{"class":96,"line":1628},[94,148222,2381],{"emptyLinePlaceholder":20},[94,148224,148225,148227,148229],{"class":96,"line":1634},[94,148226,147229],{"class":104},[94,148228,150],{"class":100},[94,148230,147234],{"class":104},[94,148232,148233],{"class":96,"line":1655},[94,148234,147818],{"class":104},[94,148236,148237,148239,148241,148244,148246,148248,148250],{"class":96,"line":1660},[94,148238,147269],{"class":104},[94,148240,147825],{"class":209},[94,148242,148243],{"class":104},", online_sales, ",[94,148245,147722],{"class":5198},[94,148247,150],{"class":100},[94,148249,31459],{"class":153},[94,148251,111],{"class":104},[94,148253,148254,148256,148258,148261,148263,148265,148267],{"class":96,"line":1674},[94,148255,147269],{"class":104},[94,148257,147863],{"class":209},[94,148259,148260],{"class":104},", offline_sales, ",[94,148262,147722],{"class":5198},[94,148264,150],{"class":100},[94,148266,31459],{"class":153},[94,148268,111],{"class":104},[94,148270,148271],{"class":96,"line":1679},[94,148272,147445],{"class":104},[94,148274,148275,148277,148279,148281,148283,148285,148288],{"class":96,"line":1708},[94,148276,147450],{"class":5198},[94,148278,150],{"class":100},[94,148280,147455],{"class":104},[94,148282,51384],{"class":5198},[94,148284,150],{"class":100},[94,148286,148287],{"class":209},"\"销售趋势\"",[94,148289,38030],{"class":104},[94,148291,148292,148294,148296,148298,148300,148302,148304],{"class":96,"line":1713},[94,148293,147506],{"class":5198},[94,148295,150],{"class":100},[94,148297,147511],{"class":104},[94,148299,147514],{"class":5198},[94,148301,150],{"class":100},[94,148303,147519],{"class":209},[94,148305,38030],{"class":104},[94,148307,148308],{"class":96,"line":1730},[94,148309,111],{"class":104},[94,148311,148312,148314,148316],{"class":96,"line":1735},[94,148313,147301],{"class":104},[94,148315,147941],{"class":209},[94,148317,111],{"class":104},[35,148319,148321],{"id":148320},"_109-数据清洗","10.9 数据清洗",[40,148323,148324],{},"真实数据经常不整齐，需要清洗。",[40,148326,148327],{},"常见问题：",[48,148329,148330,148333,148336,148339],{},[51,148331,148332],{},"数字是字符串。",[51,148334,148335],{},"字段缺失。",[51,148337,148338],{},"空值。",[51,148340,148341],{},"日期格式不统一。",[40,148343,15117],{},[85,148345,148347],{"className":30361,"code":148346,"language":30363,"meta":14,"style":14},"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",[91,148348,148349,148358,148381,148401,148422,148426,148430,148438,148447,148451,148462,148476,148485,148490,148494,148502,148512,148516,148523],{"__ignoreMap":14},[94,148350,148351,148354,148356],{"class":96,"line":97},[94,148352,148353],{"class":104},"raw_data ",[94,148355,150],{"class":100},[94,148357,55424],{"class":104},[94,148359,148360,148363,148365,148367,148369,148371,148374,148376,148379],{"class":96,"line":15},[94,148361,148362],{"class":104},"    {",[94,148364,147974],{"class":209},[94,148366,51414],{"class":104},[94,148368,147242],{"class":209},[94,148370,12417],{"class":104},[94,148372,148373],{"class":209},"\"sales\"",[94,148375,51414],{"class":104},[94,148377,148378],{"class":209},"\"100\"",[94,148380,4911],{"class":104},[94,148382,148383,148385,148387,148389,148391,148393,148395,148397,148399],{"class":96,"line":1160},[94,148384,148362],{"class":104},[94,148386,147974],{"class":209},[94,148388,51414],{"class":104},[94,148390,147247],{"class":209},[94,148392,12417],{"class":104},[94,148394,148373],{"class":209},[94,148396,51414],{"class":104},[94,148398,7634],{"class":209},[94,148400,4911],{"class":104},[94,148402,148403,148405,148407,148409,148411,148413,148415,148417,148420],{"class":96,"line":1175},[94,148404,148362],{"class":104},[94,148406,147974],{"class":209},[94,148408,51414],{"class":104},[94,148410,147252],{"class":209},[94,148412,12417],{"class":104},[94,148414,148373],{"class":209},[94,148416,51414],{"class":104},[94,148418,148419],{"class":209},"\"120\"",[94,148421,4911],{"class":104},[94,148423,148424],{"class":96,"line":1181},[94,148425,33229],{"class":104},[94,148427,148428],{"class":96,"line":1195},[94,148429,2381],{"emptyLinePlaceholder":20},[94,148431,148432,148434,148436],{"class":96,"line":1201},[94,148433,147777],{"class":104},[94,148435,150],{"class":100},[94,148437,51815],{"class":104},[94,148439,148440,148443,148445],{"class":96,"line":1292},[94,148441,148442],{"class":104},"sales ",[94,148444,150],{"class":100},[94,148446,51815],{"class":104},[94,148448,148449],{"class":96,"line":1298},[94,148450,2381],{"emptyLinePlaceholder":20},[94,148452,148453,148455,148457,148459],{"class":96,"line":1310},[94,148454,3006],{"class":100},[94,148456,148186],{"class":104},[94,148458,26026],{"class":100},[94,148460,148461],{"class":104}," raw_data:\n",[94,148463,148464,148467,148469,148472,148474],{"class":96,"line":1593},[94,148465,148466],{"class":104},"    value ",[94,148468,150],{"class":100},[94,148470,148471],{"class":104}," item.get(",[94,148473,148373],{"class":209},[94,148475,111],{"class":104},[94,148477,148478,148480,148482],{"class":96,"line":1598},[94,148479,3082],{"class":100},[94,148481,38913],{"class":100},[94,148483,148484],{"class":104}," value:\n",[94,148486,148487],{"class":96,"line":1604},[94,148488,148489],{"class":100},"        continue\n",[94,148491,148492],{"class":96,"line":1609},[94,148493,2381],{"emptyLinePlaceholder":20},[94,148495,148496,148498,148500],{"class":96,"line":1623},[94,148497,148196],{"class":104},[94,148499,147974],{"class":209},[94,148501,4638],{"class":104},[94,148503,148504,148507,148509],{"class":96,"line":1628},[94,148505,148506],{"class":104},"    sales.append(",[94,148508,108],{"class":153},[94,148510,148511],{"class":104},"(value))\n",[94,148513,148514],{"class":96,"line":1634},[94,148515,2381],{"emptyLinePlaceholder":20},[94,148517,148518,148520],{"class":96,"line":1655},[94,148519,30398],{"class":153},[94,148521,148522],{"class":104},"(dates)\n",[94,148524,148525,148527],{"class":96,"line":1660},[94,148526,30398],{"class":153},[94,148528,148529],{"class":104},"(sales)\n",[35,148531,148533],{"id":148532},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[85,148535,148537],{"className":30361,"code":148536,"language":30363,"meta":14,"style":14},"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",[91,148538,148539,148553,148563,148567,148575,148596,148618,148640,148662,148684,148688,148692,148714,148735,148739,148747,148751,148755,148765,148774,148784,148800,148804,148808,148825,148841,148857,148873,148883,148887],{"__ignoreMap":14},[94,148540,148541,148543,148545,148547,148549,148551],{"class":96,"line":97},[94,148542,30720],{"class":100},[94,148544,147356],{"class":104},[94,148546,30375],{"class":100},[94,148548,147361],{"class":104},[94,148550,31366],{"class":100},[94,148552,147366],{"class":104},[94,148554,148555,148557,148559,148561],{"class":96,"line":15},[94,148556,30720],{"class":100},[94,148558,147215],{"class":104},[94,148560,30375],{"class":100},[94,148562,147220],{"class":104},[94,148564,148565],{"class":96,"line":1160},[94,148566,2381],{"emptyLinePlaceholder":20},[94,148568,148569,148571,148573],{"class":96,"line":1175},[94,148570,148442],{"class":104},[94,148572,150],{"class":100},[94,148574,55424],{"class":104},[94,148576,148577,148579,148581,148583,148586,148588,148590,148592,148594],{"class":96,"line":1181},[94,148578,148362],{"class":104},[94,148580,147974],{"class":209},[94,148582,51414],{"class":104},[94,148584,148585],{"class":209},"\"2024-10-01\"",[94,148587,12417],{"class":104},[94,148589,84061],{"class":209},[94,148591,51414],{"class":104},[94,148593,92000],{"class":153},[94,148595,4911],{"class":104},[94,148597,148598,148600,148602,148604,148607,148609,148611,148613,148616],{"class":96,"line":1195},[94,148599,148362],{"class":104},[94,148601,147974],{"class":209},[94,148603,51414],{"class":104},[94,148605,148606],{"class":209},"\"2024-10-02\"",[94,148608,12417],{"class":104},[94,148610,84061],{"class":209},[94,148612,51414],{"class":104},[94,148614,148615],{"class":153},"1800",[94,148617,4911],{"class":104},[94,148619,148620,148622,148624,148626,148629,148631,148633,148635,148638],{"class":96,"line":1201},[94,148621,148362],{"class":104},[94,148623,147974],{"class":209},[94,148625,51414],{"class":104},[94,148627,148628],{"class":209},"\"2024-10-03\"",[94,148630,12417],{"class":104},[94,148632,84061],{"class":209},[94,148634,51414],{"class":104},[94,148636,148637],{"class":153},"1500",[94,148639,4911],{"class":104},[94,148641,148642,148644,148646,148648,148651,148653,148655,148657,148660],{"class":96,"line":1292},[94,148643,148362],{"class":104},[94,148645,147974],{"class":209},[94,148647,51414],{"class":104},[94,148649,148650],{"class":209},"\"2024-10-04\"",[94,148652,12417],{"class":104},[94,148654,84061],{"class":209},[94,148656,51414],{"class":104},[94,148658,148659],{"class":153},"2100",[94,148661,4911],{"class":104},[94,148663,148664,148666,148668,148670,148673,148675,148677,148679,148682],{"class":96,"line":1298},[94,148665,148362],{"class":104},[94,148667,147974],{"class":209},[94,148669,51414],{"class":104},[94,148671,148672],{"class":209},"\"2024-10-05\"",[94,148674,12417],{"class":104},[94,148676,84061],{"class":209},[94,148678,51414],{"class":104},[94,148680,148681],{"class":153},"2600",[94,148683,4911],{"class":104},[94,148685,148686],{"class":96,"line":1310},[94,148687,33229],{"class":104},[94,148689,148690],{"class":96,"line":1593},[94,148691,2381],{"emptyLinePlaceholder":20},[94,148693,148694,148696,148698,148701,148703,148705,148707,148709,148711],{"class":96,"line":1598},[94,148695,147777],{"class":104},[94,148697,150],{"class":100},[94,148699,148700],{"class":104}," [item[",[94,148702,147974],{"class":209},[94,148704,4424],{"class":104},[94,148706,3006],{"class":100},[94,148708,148186],{"class":104},[94,148710,26026],{"class":100},[94,148712,148713],{"class":104}," sales]\n",[94,148715,148716,148719,148721,148723,148725,148727,148729,148731,148733],{"class":96,"line":1604},[94,148717,148718],{"class":104},"amounts ",[94,148720,150],{"class":100},[94,148722,148700],{"class":104},[94,148724,84061],{"class":209},[94,148726,4424],{"class":104},[94,148728,3006],{"class":100},[94,148730,148186],{"class":104},[94,148732,26026],{"class":100},[94,148734,148713],{"class":104},[94,148736,148737],{"class":96,"line":1609},[94,148738,2381],{"emptyLinePlaceholder":20},[94,148740,148741,148743,148745],{"class":96,"line":1623},[94,148742,147229],{"class":104},[94,148744,150],{"class":100},[94,148746,147234],{"class":104},[94,148748,148749],{"class":96,"line":1628},[94,148750,147818],{"class":104},[94,148752,148753],{"class":96,"line":1634},[94,148754,147626],{"class":104},[94,148756,148757,148759,148761,148763],{"class":96,"line":1655},[94,148758,147631],{"class":5198},[94,148760,150],{"class":100},[94,148762,147272],{"class":209},[94,148764,31449],{"class":104},[94,148766,148767,148769,148771],{"class":96,"line":1660},[94,148768,147642],{"class":5198},[94,148770,150],{"class":100},[94,148772,148773],{"class":104},"amounts,\n",[94,148775,148776,148778,148780,148782],{"class":96,"line":1674},[94,148777,147671],{"class":5198},[94,148779,150],{"class":100},[94,148781,31459],{"class":153},[94,148783,31449],{"class":104},[94,148785,148786,148788,148790,148792,148794,148796,148798],{"class":96,"line":1679},[94,148787,147682],{"class":5198},[94,148789,150],{"class":100},[94,148791,147687],{"class":104},[94,148793,147690],{"class":5198},[94,148795,150],{"class":100},[94,148797,31459],{"class":153},[94,148799,38030],{"class":104},[94,148801,148802],{"class":96,"line":1708},[94,148803,111],{"class":104},[94,148805,148806],{"class":96,"line":1713},[94,148807,147445],{"class":104},[94,148809,148810,148812,148814,148816,148818,148820,148823],{"class":96,"line":1730},[94,148811,147450],{"class":5198},[94,148813,150],{"class":100},[94,148815,147455],{"class":104},[94,148817,51384],{"class":5198},[94,148819,150],{"class":100},[94,148821,148822],{"class":209},"\"每日销售额\"",[94,148824,38030],{"class":104},[94,148826,148827,148829,148831,148833,148835,148837,148839],{"class":96,"line":1735},[94,148828,147469],{"class":5198},[94,148830,150],{"class":100},[94,148832,147474],{"class":104},[94,148834,79787],{"class":5198},[94,148836,150],{"class":100},[94,148838,147481],{"class":209},[94,148840,38030],{"class":104},[94,148842,148843,148845,148847,148849,148851,148853,148855],{"class":96,"line":1740},[94,148844,147488],{"class":5198},[94,148846,150],{"class":100},[94,148848,147474],{"class":104},[94,148850,79787],{"class":5198},[94,148852,150],{"class":100},[94,148854,147499],{"class":209},[94,148856,38030],{"class":104},[94,148858,148859,148861,148863,148865,148867,148869,148871],{"class":96,"line":1745},[94,148860,147506],{"class":5198},[94,148862,150],{"class":100},[94,148864,147511],{"class":104},[94,148866,147514],{"class":5198},[94,148868,150],{"class":100},[94,148870,147519],{"class":209},[94,148872,38030],{"class":104},[94,148874,148875,148878,148880],{"class":96,"line":1759},[94,148876,148877],{"class":5198},"    datazoom_opts",[94,148879,150],{"class":100},[94,148881,148882],{"class":104},"[opts.DataZoomOpts()],\n",[94,148884,148885],{"class":96,"line":1764},[94,148886,111],{"class":104},[94,148888,148889,148891,148894],{"class":96,"line":2558},[94,148890,147301],{"class":104},[94,148892,148893],{"class":209},"\"daily_sales.html\"",[94,148895,111],{"class":104},[40,148897,148898,148901],{},[91,148899,148900],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[35,148903,148905],{"id":148904},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[40,148907,148908],{},"如果数据结构如下：",[85,148910,148912],{"className":30361,"code":148911,"language":30363,"meta":14,"style":14},"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",[91,148913,148914,148922,148930,148952,148973,148978,148985,149005,149025,149029],{"__ignoreMap":14},[94,148915,148916,148918,148920],{"class":96,"line":97},[94,148917,101635],{"class":104},[94,148919,150],{"class":100},[94,148921,15554],{"class":104},[94,148923,148924,148927],{"class":96,"line":15},[94,148925,148926],{"class":209},"    \"北京\"",[94,148928,148929],{"class":104},": [\n",[94,148931,148932,148934,148936,148938,148941,148943,148946,148948,148950],{"class":96,"line":1160},[94,148933,4898],{"class":104},[94,148935,147974],{"class":209},[94,148937,51414],{"class":104},[94,148939,148940],{"class":209},"\"2024-01-01\"",[94,148942,12417],{"class":104},[94,148944,148945],{"class":209},"\"confirm\"",[94,148947,51414],{"class":104},[94,148949,551],{"class":153},[94,148951,4911],{"class":104},[94,148953,148954,148956,148958,148960,148963,148965,148967,148969,148971],{"class":96,"line":1175},[94,148955,4898],{"class":104},[94,148957,147974],{"class":209},[94,148959,51414],{"class":104},[94,148961,148962],{"class":209},"\"2024-01-02\"",[94,148964,12417],{"class":104},[94,148966,148945],{"class":209},[94,148968,51414],{"class":104},[94,148970,603],{"class":153},[94,148972,4911],{"class":104},[94,148974,148975],{"class":96,"line":1181},[94,148976,148977],{"class":104},"    ],\n",[94,148979,148980,148983],{"class":96,"line":1195},[94,148981,148982],{"class":209},"    \"上海\"",[94,148984,148929],{"class":104},[94,148986,148987,148989,148991,148993,148995,148997,148999,149001,149003],{"class":96,"line":1201},[94,148988,4898],{"class":104},[94,148990,147974],{"class":209},[94,148992,51414],{"class":104},[94,148994,148940],{"class":209},[94,148996,12417],{"class":104},[94,148998,148945],{"class":209},[94,149000,51414],{"class":104},[94,149002,500],{"class":153},[94,149004,4911],{"class":104},[94,149006,149007,149009,149011,149013,149015,149017,149019,149021,149023],{"class":96,"line":1292},[94,149008,4898],{"class":104},[94,149010,147974],{"class":209},[94,149012,51414],{"class":104},[94,149014,148962],{"class":209},[94,149016,12417],{"class":104},[94,149018,148945],{"class":209},[94,149020,51414],{"class":104},[94,149022,628],{"class":153},[94,149024,4911],{"class":104},[94,149026,149027],{"class":96,"line":1298},[94,149028,148977],{"class":104},[94,149030,149031],{"class":96,"line":1310},[94,149032,1546],{"class":104},[40,149034,149035],{},"绘制多地区趋势：",[85,149037,149039],{"className":30361,"code":149038,"language":30363,"meta":14,"style":14},"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",[91,149040,149041,149055,149065,149069,149094,149098,149106,149110,149114,149126,149148,149161,149165,149169,149186,149202,149206],{"__ignoreMap":14},[94,149042,149043,149045,149047,149049,149051,149053],{"class":96,"line":97},[94,149044,30720],{"class":100},[94,149046,147356],{"class":104},[94,149048,30375],{"class":100},[94,149050,147361],{"class":104},[94,149052,31366],{"class":100},[94,149054,147366],{"class":104},[94,149056,149057,149059,149061,149063],{"class":96,"line":15},[94,149058,30720],{"class":100},[94,149060,147215],{"class":104},[94,149062,30375],{"class":100},[94,149064,147220],{"class":104},[94,149066,149067],{"class":96,"line":1160},[94,149068,2381],{"emptyLinePlaceholder":20},[94,149070,149071,149073,149075,149077,149079,149081,149083,149085,149087,149090,149092],{"class":96,"line":1175},[94,149072,147777],{"class":104},[94,149074,150],{"class":100},[94,149076,148700],{"class":104},[94,149078,147974],{"class":209},[94,149080,4424],{"class":104},[94,149082,3006],{"class":100},[94,149084,148186],{"class":104},[94,149086,26026],{"class":100},[94,149088,149089],{"class":104}," data[",[94,149091,69246],{"class":209},[94,149093,77504],{"class":104},[94,149095,149096],{"class":96,"line":1181},[94,149097,2381],{"emptyLinePlaceholder":20},[94,149099,149100,149102,149104],{"class":96,"line":1195},[94,149101,147229],{"class":104},[94,149103,150],{"class":100},[94,149105,147234],{"class":104},[94,149107,149108],{"class":96,"line":1201},[94,149109,147818],{"class":104},[94,149111,149112],{"class":96,"line":1292},[94,149113,2381],{"emptyLinePlaceholder":20},[94,149115,149116,149118,149121,149123],{"class":96,"line":1298},[94,149117,3006],{"class":100},[94,149119,149120],{"class":104}," city, records ",[94,149122,26026],{"class":100},[94,149124,149125],{"class":104}," data.items():\n",[94,149127,149128,149131,149133,149135,149137,149139,149141,149143,149145],{"class":96,"line":1310},[94,149129,149130],{"class":104},"    values ",[94,149132,150],{"class":100},[94,149134,148700],{"class":104},[94,149136,148945],{"class":209},[94,149138,4424],{"class":104},[94,149140,3006],{"class":100},[94,149142,148186],{"class":104},[94,149144,26026],{"class":100},[94,149146,149147],{"class":104}," records]\n",[94,149149,149150,149153,149155,149157,149159],{"class":96,"line":1593},[94,149151,149152],{"class":104},"    line.add_yaxis(city, values, ",[94,149154,147722],{"class":5198},[94,149156,150],{"class":100},[94,149158,31459],{"class":153},[94,149160,111],{"class":104},[94,149162,149163],{"class":96,"line":1598},[94,149164,2381],{"emptyLinePlaceholder":20},[94,149166,149167],{"class":96,"line":1604},[94,149168,147445],{"class":104},[94,149170,149171,149173,149175,149177,149179,149181,149184],{"class":96,"line":1609},[94,149172,147450],{"class":5198},[94,149174,150],{"class":100},[94,149176,147455],{"class":104},[94,149178,51384],{"class":5198},[94,149180,150],{"class":100},[94,149182,149183],{"class":209},"\"多地区趋势图\"",[94,149185,38030],{"class":104},[94,149187,149188,149190,149192,149194,149196,149198,149200],{"class":96,"line":1623},[94,149189,147506],{"class":5198},[94,149191,150],{"class":100},[94,149193,147511],{"class":104},[94,149195,147514],{"class":5198},[94,149197,150],{"class":100},[94,149199,147519],{"class":209},[94,149201,38030],{"class":104},[94,149203,149204],{"class":96,"line":1628},[94,149205,111],{"class":104},[94,149207,149208,149210,149213],{"class":96,"line":1634},[94,149209,147301],{"class":104},[94,149211,149212],{"class":209},"\"trend.html\"",[94,149214,111],{"class":104},[40,149216,149217],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[35,149219,149221],{"id":149220},"_1012-易错点","10.12 易错点",[48,149223,149224,149230,149236,149246,149252],{},[51,149225,149226,149229],{},[91,149227,149228],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[51,149231,149232,149235],{},[91,149233,149234],{},"render()"," 生成的是 HTML，不是图片。",[51,149237,149238,149239,149242,149243,28368],{},"JSON 字符串用 ",[91,149240,149241],{},"json.loads()","，JSON 文件用 ",[91,149244,149245],{},"json.load()",[51,149247,149248,149249,28368],{},"中文 JSON 保存时加 ",[91,149250,149251],{},"ensure_ascii=False",[51,149253,149254],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[35,149256,149258],{"id":149257},"_1013-本章练习","10.13 本章练习",[48,149260,149261,149264,149267,149270,149273],{},[51,149262,149263],{},"安装 pyecharts 并生成第一个折线图。",[51,149265,149266],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[51,149268,149269],{},"绘制两条折线，对比线上和线下销售额。",[51,149271,149272],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[51,149274,149275],{},"对含有空值的销售数据进行清洗后再绘图。",[5108,149277,149278],{},"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":14,"searchDepth":15,"depth":15,"links":149280},[149281,149282,149283,149284,149285,149286,149287,149288,149289,149290,149291,149292,149293],{"id":146897,"depth":15,"text":146898},{"id":146972,"depth":15,"text":146973},{"id":147151,"depth":15,"text":147152},{"id":147202,"depth":15,"text":147203},{"id":147336,"depth":15,"text":147337},{"id":147612,"depth":15,"text":147613},{"id":147738,"depth":15,"text":147739},{"id":147949,"depth":15,"text":147950},{"id":148320,"depth":15,"text":148321},{"id":148532,"depth":15,"text":148533},{"id":148904,"depth":15,"text":148905},{"id":149220,"depth":15,"text":149221},{"id":149257,"depth":15,"text":149258},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146889,"description":17},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149300,"title":149301,"body":149302,"description":17,"extension":18,"meta":151662,"navigation":20,"path":151663,"seo":151664,"stem":151665,"__hash__":151666},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149303,"toc":151639},[149304,149307,149311,149314,149317,149393,149396,149487,149490,149494,149497,149541,149554,149558,149561,149628,149631,149635,149638,149722,149730,149734,149739,149880,149883,149894,149900,149906,150020,150024,150027,150030,150283,150286,150290,150293,150397,150400,150404,150555,150559,150566,150679,150683,150686,150792,150795,150799,150802,150833,150836,150941,150944,150948,150952,150962,151030,151034,151041,151105,151108,151112,151118,151214,151223,151227,151551,151560,151564,151592,151596,151636],[10,149305,149301],{"id":149306},"_11-面向对象基础",[35,149308,149310],{"id":149309},"_111-什么是面向对象","11.1 什么是面向对象",[40,149312,149313],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[40,149315,149316],{},"面向过程：",[85,149318,149320],{"className":30361,"code":149319,"language":30363,"meta":14,"style":14},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[91,149321,149322,149331,149339,149343,149353,149384,149388],{"__ignoreMap":14},[94,149323,149324,149326,149328],{"class":96,"line":97},[94,149325,146513],{"class":104},[94,149327,150],{"class":100},[94,149329,149330],{"class":209}," \"小明\"\n",[94,149332,149333,149335,149337],{"class":96,"line":15},[94,149334,146523],{"class":104},[94,149336,150],{"class":100},[94,149338,146528],{"class":153},[94,149340,149341],{"class":96,"line":1160},[94,149342,2381],{"emptyLinePlaceholder":20},[94,149344,149345,149347,149350],{"class":96,"line":1175},[94,149346,31930],{"class":100},[94,149348,149349],{"class":1944}," introduce",[94,149351,149352],{"class":104},"(name, age):\n",[94,149354,149355,149357,149359,149361,149364,149366,149368,149370,149373,149375,149377,149379,149382],{"class":96,"line":1181},[94,149356,31282],{"class":153},[94,149358,105],{"class":104},[94,149360,157],{"class":100},[94,149362,149363],{"class":209},"\"我叫",[94,149365,1001],{"class":153},[94,149367,79787],{"class":104},[94,149369,1051],{"class":153},[94,149371,149372],{"class":209},"，今年",[94,149374,1001],{"class":153},[94,149376,70198],{"class":104},[94,149378,1051],{"class":153},[94,149380,149381],{"class":209},"岁\"",[94,149383,111],{"class":104},[94,149385,149386],{"class":96,"line":1195},[94,149387,2381],{"emptyLinePlaceholder":20},[94,149389,149390],{"class":96,"line":1201},[94,149391,149392],{"class":104},"introduce(name, age)\n",[40,149394,149395],{},"面向对象：",[85,149397,149399],{"className":30361,"code":149398,"language":30363,"meta":14,"style":14},"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",[91,149400,149401,149409,149417,149446,149450,149454,149464,149473,149482],{"__ignoreMap":14},[94,149402,149403,149405,149407],{"class":96,"line":97},[94,149404,14676],{"class":100},[94,149406,7880],{"class":1944},[94,149408,3720],{"class":104},[94,149410,149411,149413,149415],{"class":96,"line":15},[94,149412,30784],{"class":100},[94,149414,149349],{"class":1944},[94,149416,30790],{"class":104},[94,149418,149419,149421,149423,149425,149427,149430,149432,149434,149436,149438,149440,149442,149444],{"class":96,"line":1160},[94,149420,32434],{"class":153},[94,149422,105],{"class":104},[94,149424,157],{"class":100},[94,149426,149363],{"class":209},[94,149428,149429],{"class":153},"{self",[94,149431,80278],{"class":104},[94,149433,1051],{"class":153},[94,149435,149372],{"class":209},[94,149437,149429],{"class":153},[94,149439,80290],{"class":104},[94,149441,1051],{"class":153},[94,149443,149381],{"class":209},[94,149445,111],{"class":104},[94,149447,149448],{"class":96,"line":1175},[94,149449,2381],{"emptyLinePlaceholder":20},[94,149451,149452],{"class":96,"line":1181},[94,149453,2381],{"emptyLinePlaceholder":20},[94,149455,149456,149459,149461],{"class":96,"line":1195},[94,149457,149458],{"class":104},"student ",[94,149460,150],{"class":100},[94,149462,149463],{"class":104}," Student()\n",[94,149465,149466,149469,149471],{"class":96,"line":1201},[94,149467,149468],{"class":104},"student.name ",[94,149470,150],{"class":100},[94,149472,149330],{"class":209},[94,149474,149475,149478,149480],{"class":96,"line":1292},[94,149476,149477],{"class":104},"student.age ",[94,149479,150],{"class":100},[94,149481,146528],{"class":153},[94,149483,149484],{"class":96,"line":1298},[94,149485,149486],{"class":104},"student.introduce()\n",[40,149488,149489],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[35,149491,149493],{"id":149492},"_112-类和对象","11.2 类和对象",[40,149495,149496],{},"类是模板，对象是根据模板创建出来的具体实例。",[85,149498,149500],{"className":30361,"code":149499,"language":30363,"meta":14,"style":14},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[91,149501,149502,149510,149515,149519,149523,149532],{"__ignoreMap":14},[94,149503,149504,149506,149508],{"class":96,"line":97},[94,149505,14676],{"class":100},[94,149507,7880],{"class":1944},[94,149509,3720],{"class":104},[94,149511,149512],{"class":96,"line":15},[94,149513,149514],{"class":100},"    pass\n",[94,149516,149517],{"class":96,"line":1160},[94,149518,2381],{"emptyLinePlaceholder":20},[94,149520,149521],{"class":96,"line":1175},[94,149522,2381],{"emptyLinePlaceholder":20},[94,149524,149525,149528,149530],{"class":96,"line":1181},[94,149526,149527],{"class":104},"student1 ",[94,149529,150],{"class":100},[94,149531,149463],{"class":104},[94,149533,149534,149537,149539],{"class":96,"line":1195},[94,149535,149536],{"class":104},"student2 ",[94,149538,150],{"class":100},[94,149540,149463],{"class":104},[40,149542,149543,149546,149547,100995,149550,149553],{},[91,149544,149545],{},"Student"," 是类，",[91,149548,149549],{},"student1",[91,149551,149552],{},"student2"," 是对象。",[35,149555,149557],{"id":149556},"_113-属性","11.3 属性",[40,149559,149560],{},"属性是对象保存的数据。",[85,149562,149564],{"className":30361,"code":149563,"language":30363,"meta":14,"style":14},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[91,149565,149566,149574,149578,149582,149586,149594,149602,149610,149614,149621],{"__ignoreMap":14},[94,149567,149568,149570,149572],{"class":96,"line":97},[94,149569,14676],{"class":100},[94,149571,7880],{"class":1944},[94,149573,3720],{"class":104},[94,149575,149576],{"class":96,"line":15},[94,149577,149514],{"class":100},[94,149579,149580],{"class":96,"line":1160},[94,149581,2381],{"emptyLinePlaceholder":20},[94,149583,149584],{"class":96,"line":1175},[94,149585,2381],{"emptyLinePlaceholder":20},[94,149587,149588,149590,149592],{"class":96,"line":1181},[94,149589,149458],{"class":104},[94,149591,150],{"class":100},[94,149593,149463],{"class":104},[94,149595,149596,149598,149600],{"class":96,"line":1195},[94,149597,149468],{"class":104},[94,149599,150],{"class":100},[94,149601,149330],{"class":209},[94,149603,149604,149606,149608],{"class":96,"line":1201},[94,149605,149477],{"class":104},[94,149607,150],{"class":100},[94,149609,146528],{"class":153},[94,149611,149612],{"class":96,"line":1292},[94,149613,2381],{"emptyLinePlaceholder":20},[94,149615,149616,149618],{"class":96,"line":1298},[94,149617,30398],{"class":153},[94,149619,149620],{"class":104},"(student.name)\n",[94,149622,149623,149625],{"class":96,"line":1310},[94,149624,30398],{"class":153},[94,149626,149627],{"class":104},"(student.age)\n",[40,149629,149630],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[35,149632,149634],{"id":149633},"_114-方法","11.4 方法",[40,149636,149637],{},"类中的函数叫方法。",[85,149639,149640],{"className":30361,"code":149398,"language":30363,"meta":14,"style":14},[91,149641,149642,149650,149658,149686,149690,149694,149702,149710,149718],{"__ignoreMap":14},[94,149643,149644,149646,149648],{"class":96,"line":97},[94,149645,14676],{"class":100},[94,149647,7880],{"class":1944},[94,149649,3720],{"class":104},[94,149651,149652,149654,149656],{"class":96,"line":15},[94,149653,30784],{"class":100},[94,149655,149349],{"class":1944},[94,149657,30790],{"class":104},[94,149659,149660,149662,149664,149666,149668,149670,149672,149674,149676,149678,149680,149682,149684],{"class":96,"line":1160},[94,149661,32434],{"class":153},[94,149663,105],{"class":104},[94,149665,157],{"class":100},[94,149667,149363],{"class":209},[94,149669,149429],{"class":153},[94,149671,80278],{"class":104},[94,149673,1051],{"class":153},[94,149675,149372],{"class":209},[94,149677,149429],{"class":153},[94,149679,80290],{"class":104},[94,149681,1051],{"class":153},[94,149683,149381],{"class":209},[94,149685,111],{"class":104},[94,149687,149688],{"class":96,"line":1175},[94,149689,2381],{"emptyLinePlaceholder":20},[94,149691,149692],{"class":96,"line":1181},[94,149693,2381],{"emptyLinePlaceholder":20},[94,149695,149696,149698,149700],{"class":96,"line":1195},[94,149697,149458],{"class":104},[94,149699,150],{"class":100},[94,149701,149463],{"class":104},[94,149703,149704,149706,149708],{"class":96,"line":1201},[94,149705,149468],{"class":104},[94,149707,150],{"class":100},[94,149709,149330],{"class":209},[94,149711,149712,149714,149716],{"class":96,"line":1292},[94,149713,149477],{"class":104},[94,149715,150],{"class":100},[94,149717,146528],{"class":153},[94,149719,149720],{"class":96,"line":1298},[94,149721,149486],{"class":104},[40,149723,149724,149726,149727,149729],{},[91,149725,30806],{}," 表示当前对象。调用方法时不需要手动传入 ",[91,149728,30806],{},"，Python 会自动传。",[35,149731,149733],{"id":149732},"_115-构造方法__init__","11.5 构造方法__init__",[40,149735,149736,149738],{},[91,149737,30812],{}," 在对象创建时自动执行，用于初始化属性。",[85,149740,149742],{"className":30361,"code":149741,"language":30363,"meta":14,"style":14},"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",[91,149743,149744,149752,149761,149773,149785,149796,149800,149808,149846,149850,149854,149876],{"__ignoreMap":14},[94,149745,149746,149748,149750],{"class":96,"line":97},[94,149747,14676],{"class":100},[94,149749,7880],{"class":1944},[94,149751,3720],{"class":104},[94,149753,149754,149756,149758],{"class":96,"line":15},[94,149755,30784],{"class":100},[94,149757,30787],{"class":153},[94,149759,149760],{"class":104},"(self, name, age, score):\n",[94,149762,149763,149765,149768,149770],{"class":96,"line":1160},[94,149764,30828],{"class":153},[94,149766,149767],{"class":104},".name ",[94,149769,150],{"class":100},[94,149771,149772],{"class":104}," name\n",[94,149774,149775,149777,149780,149782],{"class":96,"line":1175},[94,149776,30828],{"class":153},[94,149778,149779],{"class":104},".age ",[94,149781,150],{"class":100},[94,149783,149784],{"class":104}," age\n",[94,149786,149787,149789,149792,149794],{"class":96,"line":1181},[94,149788,30828],{"class":153},[94,149790,149791],{"class":104},".score ",[94,149793,150],{"class":100},[94,149795,1560],{"class":104},[94,149797,149798],{"class":96,"line":1195},[94,149799,2381],{"emptyLinePlaceholder":20},[94,149801,149802,149804,149806],{"class":96,"line":1201},[94,149803,30784],{"class":100},[94,149805,149349],{"class":1944},[94,149807,30790],{"class":104},[94,149809,149810,149812,149814,149816,149818,149820,149822,149824,149826,149828,149830,149832,149835,149837,149840,149842,149844],{"class":96,"line":1292},[94,149811,32434],{"class":153},[94,149813,105],{"class":104},[94,149815,157],{"class":100},[94,149817,149363],{"class":209},[94,149819,149429],{"class":153},[94,149821,80278],{"class":104},[94,149823,1051],{"class":153},[94,149825,149372],{"class":209},[94,149827,149429],{"class":153},[94,149829,80290],{"class":104},[94,149831,1051],{"class":153},[94,149833,149834],{"class":209},"岁，成绩",[94,149836,149429],{"class":153},[94,149838,149839],{"class":104},".score",[94,149841,1051],{"class":153},[94,149843,356],{"class":209},[94,149845,111],{"class":104},[94,149847,149848],{"class":96,"line":1298},[94,149849,2381],{"emptyLinePlaceholder":20},[94,149851,149852],{"class":96,"line":1310},[94,149853,2381],{"emptyLinePlaceholder":20},[94,149855,149856,149858,149860,149863,149866,149868,149870,149872,149874],{"class":96,"line":1593},[94,149857,149458],{"class":104},[94,149859,150],{"class":100},[94,149861,149862],{"class":104}," Student(",[94,149864,149865],{"class":209},"\"小明\"",[94,149867,12417],{"class":104},[94,149869,755],{"class":153},[94,149871,12417],{"class":104},[94,149873,1094],{"class":153},[94,149875,111],{"class":104},[94,149877,149878],{"class":96,"line":1598},[94,149879,149486],{"class":104},[40,149881,149882],{},"构造方法的好处：",[48,149884,149885,149888,149891],{},[51,149886,149887],{},"创建对象时必须提供必要数据。",[51,149889,149890],{},"属性初始化集中，不容易漏。",[51,149892,149893],{},"对象状态更完整。",[35,149895,149897,149898],{"id":149896},"_116-str","11.6 ",[254,149899,1280],{},[40,149901,149902,149903,28368],{},"直接打印对象时，默认输出不直观。可以定义 ",[91,149904,149905],{},"__str__",[85,149907,149909],{"className":30361,"code":149908,"language":30363,"meta":14,"style":14},"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",[91,149910,149911,149919,149928,149938,149948,149952,149961,149989,149993,149997,150013],{"__ignoreMap":14},[94,149912,149913,149915,149917],{"class":96,"line":97},[94,149914,14676],{"class":100},[94,149916,7880],{"class":1944},[94,149918,3720],{"class":104},[94,149920,149921,149923,149925],{"class":96,"line":15},[94,149922,30784],{"class":100},[94,149924,30787],{"class":153},[94,149926,149927],{"class":104},"(self, name, age):\n",[94,149929,149930,149932,149934,149936],{"class":96,"line":1160},[94,149931,30828],{"class":153},[94,149933,149767],{"class":104},[94,149935,150],{"class":100},[94,149937,149772],{"class":104},[94,149939,149940,149942,149944,149946],{"class":96,"line":1175},[94,149941,30828],{"class":153},[94,149943,149779],{"class":104},[94,149945,150],{"class":100},[94,149947,149784],{"class":104},[94,149949,149950],{"class":96,"line":1181},[94,149951,2381],{"emptyLinePlaceholder":20},[94,149953,149954,149956,149959],{"class":96,"line":1195},[94,149955,30784],{"class":100},[94,149957,149958],{"class":153}," __str__",[94,149960,30790],{"class":104},[94,149962,149963,149965,149968,149971,149973,149975,149977,149980,149982,149984,149986],{"class":96,"line":1201},[94,149964,14734],{"class":100},[94,149966,149967],{"class":100}," f",[94,149969,149970],{"class":209},"\"Student(name=",[94,149972,149429],{"class":153},[94,149974,80278],{"class":104},[94,149976,1051],{"class":153},[94,149978,149979],{"class":209},", age=",[94,149981,149429],{"class":153},[94,149983,80290],{"class":104},[94,149985,1051],{"class":153},[94,149987,149988],{"class":209},")\"\n",[94,149990,149991],{"class":96,"line":1292},[94,149992,2381],{"emptyLinePlaceholder":20},[94,149994,149995],{"class":96,"line":1298},[94,149996,2381],{"emptyLinePlaceholder":20},[94,149998,149999,150001,150003,150005,150007,150009,150011],{"class":96,"line":1310},[94,150000,149458],{"class":104},[94,150002,150],{"class":100},[94,150004,149862],{"class":104},[94,150006,149865],{"class":209},[94,150008,12417],{"class":104},[94,150010,755],{"class":153},[94,150012,111],{"class":104},[94,150014,150015,150017],{"class":96,"line":1593},[94,150016,30398],{"class":153},[94,150018,150019],{"class":104},"(student)\n",[35,150021,150023],{"id":150022},"_117-封装","11.7 封装",[40,150025,150026],{},"封装就是把数据和方法放到类中，并控制访问方式。",[40,150028,150029],{},"Python 中以双下划线开头的属性通常视为私有属性。",[85,150031,150033],{"className":30361,"code":150032,"language":30363,"meta":14,"style":14},"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",[91,150034,150035,150044,150053,150065,150077,150081,150090,150099,150103,150113,150126,150137,150142,150153,150157,150166,150178,150189,150193,150206,150217,150221,150232,150236,150240,150258,150267,150276],{"__ignoreMap":14},[94,150036,150037,150039,150042],{"class":96,"line":97},[94,150038,14676],{"class":100},[94,150040,150041],{"class":1944}," Account",[94,150043,3720],{"class":104},[94,150045,150046,150048,150050],{"class":96,"line":15},[94,150047,30784],{"class":100},[94,150049,30787],{"class":153},[94,150051,150052],{"class":104},"(self, owner, balance):\n",[94,150054,150055,150057,150060,150062],{"class":96,"line":1160},[94,150056,30828],{"class":153},[94,150058,150059],{"class":104},".owner ",[94,150061,150],{"class":100},[94,150063,150064],{"class":104}," owner\n",[94,150066,150067,150069,150072,150074],{"class":96,"line":1175},[94,150068,30828],{"class":153},[94,150070,150071],{"class":104},".__balance ",[94,150073,150],{"class":100},[94,150075,150076],{"class":104}," balance\n",[94,150078,150079],{"class":96,"line":1181},[94,150080,2381],{"emptyLinePlaceholder":20},[94,150082,150083,150085,150088],{"class":96,"line":1195},[94,150084,30784],{"class":100},[94,150086,150087],{"class":1944}," get_balance",[94,150089,30790],{"class":104},[94,150091,150092,150094,150096],{"class":96,"line":1201},[94,150093,14734],{"class":100},[94,150095,38856],{"class":153},[94,150097,150098],{"class":104},".__balance\n",[94,150100,150101],{"class":96,"line":1292},[94,150102,2381],{"emptyLinePlaceholder":20},[94,150104,150105,150107,150110],{"class":96,"line":1298},[94,150106,30784],{"class":100},[94,150108,150109],{"class":1944}," deposit",[94,150111,150112],{"class":104},"(self, money):\n",[94,150114,150115,150117,150120,150122,150124],{"class":96,"line":1310},[94,150116,2478],{"class":100},[94,150118,150119],{"class":104}," money ",[94,150121,1569],{"class":100},[94,150123,4074],{"class":153},[94,150125,3720],{"class":104},[94,150127,150128,150130,150132,150135],{"class":96,"line":1593},[94,150129,34633],{"class":153},[94,150131,105],{"class":104},[94,150133,150134],{"class":209},"\"存款金额必须大于0\"",[94,150136,111],{"class":104},[94,150138,150139],{"class":96,"line":1598},[94,150140,150141],{"class":100},"            return\n",[94,150143,150144,150146,150148,150150],{"class":96,"line":1604},[94,150145,30828],{"class":153},[94,150147,150071],{"class":104},[94,150149,9459],{"class":100},[94,150151,150152],{"class":104}," money\n",[94,150154,150155],{"class":96,"line":1609},[94,150156,2381],{"emptyLinePlaceholder":20},[94,150158,150159,150161,150164],{"class":96,"line":1623},[94,150160,30784],{"class":100},[94,150162,150163],{"class":1944}," withdraw",[94,150165,150112],{"class":104},[94,150167,150168,150170,150172,150174,150176],{"class":96,"line":1628},[94,150169,2478],{"class":100},[94,150171,150119],{"class":104},[94,150173,1569],{"class":100},[94,150175,4074],{"class":153},[94,150177,3720],{"class":104},[94,150179,150180,150182,150184,150187],{"class":96,"line":1634},[94,150181,34633],{"class":153},[94,150183,105],{"class":104},[94,150185,150186],{"class":209},"\"取款金额必须大于0\"",[94,150188,111],{"class":104},[94,150190,150191],{"class":96,"line":1655},[94,150192,150141],{"class":100},[94,150194,150195,150197,150199,150201,150203],{"class":96,"line":1660},[94,150196,2478],{"class":100},[94,150198,150119],{"class":104},[94,150200,1065],{"class":100},[94,150202,38856],{"class":153},[94,150204,150205],{"class":104},".__balance:\n",[94,150207,150208,150210,150212,150215],{"class":96,"line":1674},[94,150209,34633],{"class":153},[94,150211,105],{"class":104},[94,150213,150214],{"class":209},"\"余额不足\"",[94,150216,111],{"class":104},[94,150218,150219],{"class":96,"line":1679},[94,150220,150141],{"class":100},[94,150222,150223,150225,150227,150230],{"class":96,"line":1708},[94,150224,30828],{"class":153},[94,150226,150071],{"class":104},[94,150228,150229],{"class":100},"-=",[94,150231,150152],{"class":104},[94,150233,150234],{"class":96,"line":1713},[94,150235,2381],{"emptyLinePlaceholder":20},[94,150237,150238],{"class":96,"line":1730},[94,150239,2381],{"emptyLinePlaceholder":20},[94,150241,150242,150245,150247,150250,150252,150254,150256],{"class":96,"line":1735},[94,150243,150244],{"class":104},"account ",[94,150246,150],{"class":100},[94,150248,150249],{"class":104}," Account(",[94,150251,149865],{"class":209},[94,150253,12417],{"class":104},[94,150255,6392],{"class":153},[94,150257,111],{"class":104},[94,150259,150260,150263,150265],{"class":96,"line":1740},[94,150261,150262],{"class":104},"account.deposit(",[94,150264,1703],{"class":153},[94,150266,111],{"class":104},[94,150268,150269,150272,150274],{"class":96,"line":1745},[94,150270,150271],{"class":104},"account.withdraw(",[94,150273,416],{"class":153},[94,150275,111],{"class":104},[94,150277,150278,150280],{"class":96,"line":1759},[94,150279,30398],{"class":153},[94,150281,150282],{"class":104},"(account.get_balance())\n",[40,150284,150285],{},"封装的意义是避免外部随意修改内部状态。",[35,150287,150289],{"id":150288},"_118-继承","11.8 继承",[40,150291,150292],{},"继承可以让子类复用父类的属性和方法。",[85,150294,150296],{"className":30361,"code":150295,"language":30363,"meta":14,"style":14},"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",[91,150297,150298,150307,150316,150327,150331,150335,150349,150358,150369,150373,150377,150387,150392],{"__ignoreMap":14},[94,150299,150300,150302,150305],{"class":96,"line":97},[94,150301,14676],{"class":100},[94,150303,150304],{"class":1944}," Animal",[94,150306,3720],{"class":104},[94,150308,150309,150311,150314],{"class":96,"line":15},[94,150310,30784],{"class":100},[94,150312,150313],{"class":1944}," eat",[94,150315,30790],{"class":104},[94,150317,150318,150320,150322,150325],{"class":96,"line":1160},[94,150319,32434],{"class":153},[94,150321,105],{"class":104},[94,150323,150324],{"class":209},"\"吃东西\"",[94,150326,111],{"class":104},[94,150328,150329],{"class":96,"line":1175},[94,150330,2381],{"emptyLinePlaceholder":20},[94,150332,150333],{"class":96,"line":1181},[94,150334,2381],{"emptyLinePlaceholder":20},[94,150336,150337,150339,150342,150344,150347],{"class":96,"line":1195},[94,150338,14676],{"class":100},[94,150340,150341],{"class":1944}," Dog",[94,150343,105],{"class":104},[94,150345,150346],{"class":1944},"Animal",[94,150348,30769],{"class":104},[94,150350,150351,150353,150356],{"class":96,"line":1201},[94,150352,30784],{"class":100},[94,150354,150355],{"class":1944}," bark",[94,150357,30790],{"class":104},[94,150359,150360,150362,150364,150367],{"class":96,"line":1292},[94,150361,32434],{"class":153},[94,150363,105],{"class":104},[94,150365,150366],{"class":209},"\"汪汪\"",[94,150368,111],{"class":104},[94,150370,150371],{"class":96,"line":1298},[94,150372,2381],{"emptyLinePlaceholder":20},[94,150374,150375],{"class":96,"line":1310},[94,150376,2381],{"emptyLinePlaceholder":20},[94,150378,150379,150382,150384],{"class":96,"line":1593},[94,150380,150381],{"class":104},"dog ",[94,150383,150],{"class":100},[94,150385,150386],{"class":104}," Dog()\n",[94,150388,150389],{"class":96,"line":1598},[94,150390,150391],{"class":104},"dog.eat()\n",[94,150393,150394],{"class":96,"line":1604},[94,150395,150396],{"class":104},"dog.bark()\n",[40,150398,150399],{},"子类可以扩展新方法，也可以重写父类方法。",[35,150401,150403],{"id":150402},"_119-方法重写","11.9 方法重写",[85,150405,150407],{"className":30361,"code":150406,"language":30363,"meta":14,"style":14},"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",[91,150408,150409,150417,150426,150437,150441,150445,150457,150465,150475,150479,150483,150496,150504,150515,150519,150523,150531,150541,150545,150550],{"__ignoreMap":14},[94,150410,150411,150413,150415],{"class":96,"line":97},[94,150412,14676],{"class":100},[94,150414,150304],{"class":1944},[94,150416,3720],{"class":104},[94,150418,150419,150421,150424],{"class":96,"line":15},[94,150420,30784],{"class":100},[94,150422,150423],{"class":1944}," speak",[94,150425,30790],{"class":104},[94,150427,150428,150430,150432,150435],{"class":96,"line":1160},[94,150429,32434],{"class":153},[94,150431,105],{"class":104},[94,150433,150434],{"class":209},"\"动物叫\"",[94,150436,111],{"class":104},[94,150438,150439],{"class":96,"line":1175},[94,150440,2381],{"emptyLinePlaceholder":20},[94,150442,150443],{"class":96,"line":1181},[94,150444,2381],{"emptyLinePlaceholder":20},[94,150446,150447,150449,150451,150453,150455],{"class":96,"line":1195},[94,150448,14676],{"class":100},[94,150450,150341],{"class":1944},[94,150452,105],{"class":104},[94,150454,150346],{"class":1944},[94,150456,30769],{"class":104},[94,150458,150459,150461,150463],{"class":96,"line":1201},[94,150460,30784],{"class":100},[94,150462,150423],{"class":1944},[94,150464,30790],{"class":104},[94,150466,150467,150469,150471,150473],{"class":96,"line":1292},[94,150468,32434],{"class":153},[94,150470,105],{"class":104},[94,150472,150366],{"class":209},[94,150474,111],{"class":104},[94,150476,150477],{"class":96,"line":1298},[94,150478,2381],{"emptyLinePlaceholder":20},[94,150480,150481],{"class":96,"line":1310},[94,150482,2381],{"emptyLinePlaceholder":20},[94,150484,150485,150487,150490,150492,150494],{"class":96,"line":1593},[94,150486,14676],{"class":100},[94,150488,150489],{"class":1944}," Cat",[94,150491,105],{"class":104},[94,150493,150346],{"class":1944},[94,150495,30769],{"class":104},[94,150497,150498,150500,150502],{"class":96,"line":1598},[94,150499,30784],{"class":100},[94,150501,150423],{"class":1944},[94,150503,30790],{"class":104},[94,150505,150506,150508,150510,150513],{"class":96,"line":1604},[94,150507,32434],{"class":153},[94,150509,105],{"class":104},[94,150511,150512],{"class":209},"\"喵喵\"",[94,150514,111],{"class":104},[94,150516,150517],{"class":96,"line":1609},[94,150518,2381],{"emptyLinePlaceholder":20},[94,150520,150521],{"class":96,"line":1623},[94,150522,2381],{"emptyLinePlaceholder":20},[94,150524,150525,150527,150529],{"class":96,"line":1628},[94,150526,150381],{"class":104},[94,150528,150],{"class":100},[94,150530,150386],{"class":104},[94,150532,150533,150536,150538],{"class":96,"line":1634},[94,150534,150535],{"class":104},"cat ",[94,150537,150],{"class":100},[94,150539,150540],{"class":104}," Cat()\n",[94,150542,150543],{"class":96,"line":1655},[94,150544,2381],{"emptyLinePlaceholder":20},[94,150546,150547],{"class":96,"line":1660},[94,150548,150549],{"class":104},"dog.speak()\n",[94,150551,150552],{"class":96,"line":1674},[94,150553,150554],{"class":104},"cat.speak()\n",[35,150556,150558],{"id":150557},"_1110-super","11.10 super",[40,150560,150561,150562,150565],{},"子类可以通过 ",[91,150563,150564],{},"super()"," 调用父类方法。",[85,150567,150569],{"className":30361,"code":150568,"language":30363,"meta":14,"style":14},"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",[91,150570,150571,150579,150588,150598,150602,150606,150618,150627,150638,150648,150652,150656,150672],{"__ignoreMap":14},[94,150572,150573,150575,150577],{"class":96,"line":97},[94,150574,14676],{"class":100},[94,150576,15551],{"class":1944},[94,150578,3720],{"class":104},[94,150580,150581,150583,150585],{"class":96,"line":15},[94,150582,30784],{"class":100},[94,150584,30787],{"class":153},[94,150586,150587],{"class":104},"(self, name):\n",[94,150589,150590,150592,150594,150596],{"class":96,"line":1160},[94,150591,30828],{"class":153},[94,150593,149767],{"class":104},[94,150595,150],{"class":100},[94,150597,149772],{"class":104},[94,150599,150600],{"class":96,"line":1175},[94,150601,2381],{"emptyLinePlaceholder":20},[94,150603,150604],{"class":96,"line":1181},[94,150605,2381],{"emptyLinePlaceholder":20},[94,150607,150608,150610,150612,150614,150616],{"class":96,"line":1195},[94,150609,14676],{"class":100},[94,150611,7880],{"class":1944},[94,150613,105],{"class":104},[94,150615,19028],{"class":1944},[94,150617,30769],{"class":104},[94,150619,150620,150622,150624],{"class":96,"line":1201},[94,150621,30784],{"class":100},[94,150623,30787],{"class":153},[94,150625,150626],{"class":104},"(self, name, score):\n",[94,150628,150629,150631,150633,150635],{"class":96,"line":1292},[94,150630,30800],{"class":153},[94,150632,17243],{"class":104},[94,150634,30812],{"class":153},[94,150636,150637],{"class":104},"(name)\n",[94,150639,150640,150642,150644,150646],{"class":96,"line":1298},[94,150641,30828],{"class":153},[94,150643,149791],{"class":104},[94,150645,150],{"class":100},[94,150647,1560],{"class":104},[94,150649,150650],{"class":96,"line":1310},[94,150651,2381],{"emptyLinePlaceholder":20},[94,150653,150654],{"class":96,"line":1593},[94,150655,2381],{"emptyLinePlaceholder":20},[94,150657,150658,150660,150662,150664,150666,150668,150670],{"class":96,"line":1598},[94,150659,149458],{"class":104},[94,150661,150],{"class":100},[94,150663,149862],{"class":104},[94,150665,149865],{"class":209},[94,150667,12417],{"class":104},[94,150669,1094],{"class":153},[94,150671,111],{"class":104},[94,150673,150674,150676],{"class":96,"line":1604},[94,150675,30398],{"class":153},[94,150677,150678],{"class":104},"(student.name, student.score)\n",[35,150680,150682],{"id":150681},"_1111-多态","11.11 多态",[40,150684,150685],{},"多态指不同对象响应同一个方法，表现出不同结果。",[85,150687,150689],{"className":30361,"code":150688,"language":30363,"meta":14,"style":14},"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",[91,150690,150691,150699,150707,150717,150721,150725,150733,150741,150751,150755,150759,150769,150774,150778,150782,150787],{"__ignoreMap":14},[94,150692,150693,150695,150697],{"class":96,"line":97},[94,150694,14676],{"class":100},[94,150696,150341],{"class":1944},[94,150698,3720],{"class":104},[94,150700,150701,150703,150705],{"class":96,"line":15},[94,150702,30784],{"class":100},[94,150704,150423],{"class":1944},[94,150706,30790],{"class":104},[94,150708,150709,150711,150713,150715],{"class":96,"line":1160},[94,150710,32434],{"class":153},[94,150712,105],{"class":104},[94,150714,150366],{"class":209},[94,150716,111],{"class":104},[94,150718,150719],{"class":96,"line":1175},[94,150720,2381],{"emptyLinePlaceholder":20},[94,150722,150723],{"class":96,"line":1181},[94,150724,2381],{"emptyLinePlaceholder":20},[94,150726,150727,150729,150731],{"class":96,"line":1195},[94,150728,14676],{"class":100},[94,150730,150489],{"class":1944},[94,150732,3720],{"class":104},[94,150734,150735,150737,150739],{"class":96,"line":1201},[94,150736,30784],{"class":100},[94,150738,150423],{"class":1944},[94,150740,30790],{"class":104},[94,150742,150743,150745,150747,150749],{"class":96,"line":1292},[94,150744,32434],{"class":153},[94,150746,105],{"class":104},[94,150748,150512],{"class":209},[94,150750,111],{"class":104},[94,150752,150753],{"class":96,"line":1298},[94,150754,2381],{"emptyLinePlaceholder":20},[94,150756,150757],{"class":96,"line":1310},[94,150758,2381],{"emptyLinePlaceholder":20},[94,150760,150761,150763,150766],{"class":96,"line":1593},[94,150762,31930],{"class":100},[94,150764,150765],{"class":1944}," make_sound",[94,150767,150768],{"class":104},"(animal):\n",[94,150770,150771],{"class":96,"line":1598},[94,150772,150773],{"class":104},"    animal.speak()\n",[94,150775,150776],{"class":96,"line":1604},[94,150777,2381],{"emptyLinePlaceholder":20},[94,150779,150780],{"class":96,"line":1609},[94,150781,2381],{"emptyLinePlaceholder":20},[94,150783,150784],{"class":96,"line":1623},[94,150785,150786],{"class":104},"make_sound(Dog())\n",[94,150788,150789],{"class":96,"line":1628},[94,150790,150791],{"class":104},"make_sound(Cat())\n",[40,150793,150794],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[35,150796,150798],{"id":150797},"_1112-类属性和实例属性","11.12 类属性和实例属性",[40,150800,150801],{},"实例属性属于对象：",[85,150803,150805],{"className":30361,"code":150804,"language":30363,"meta":14,"style":14},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[91,150806,150807,150815,150823],{"__ignoreMap":14},[94,150808,150809,150811,150813],{"class":96,"line":97},[94,150810,14676],{"class":100},[94,150812,7880],{"class":1944},[94,150814,3720],{"class":104},[94,150816,150817,150819,150821],{"class":96,"line":15},[94,150818,30784],{"class":100},[94,150820,30787],{"class":153},[94,150822,150587],{"class":104},[94,150824,150825,150827,150829,150831],{"class":96,"line":1160},[94,150826,30828],{"class":153},[94,150828,149767],{"class":104},[94,150830,150],{"class":100},[94,150832,149772],{"class":104},[40,150834,150835],{},"类属性属于类，所有对象共享：",[85,150837,150839],{"className":30361,"code":150838,"language":30363,"meta":14,"style":14},"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",[91,150840,150841,150849,150859,150863,150871,150881,150885,150889,150902,150916,150920,150927,150934],{"__ignoreMap":14},[94,150842,150843,150845,150847],{"class":96,"line":97},[94,150844,14676],{"class":100},[94,150846,7880],{"class":1944},[94,150848,3720],{"class":104},[94,150850,150851,150854,150856],{"class":96,"line":15},[94,150852,150853],{"class":104},"    school ",[94,150855,150],{"class":100},[94,150857,150858],{"class":209}," \"黑马学校\"\n",[94,150860,150861],{"class":96,"line":1160},[94,150862,2381],{"emptyLinePlaceholder":20},[94,150864,150865,150867,150869],{"class":96,"line":1175},[94,150866,30784],{"class":100},[94,150868,30787],{"class":153},[94,150870,150587],{"class":104},[94,150872,150873,150875,150877,150879],{"class":96,"line":1181},[94,150874,30828],{"class":153},[94,150876,149767],{"class":104},[94,150878,150],{"class":100},[94,150880,149772],{"class":104},[94,150882,150883],{"class":96,"line":1195},[94,150884,2381],{"emptyLinePlaceholder":20},[94,150886,150887],{"class":96,"line":1201},[94,150888,2381],{"emptyLinePlaceholder":20},[94,150890,150891,150894,150896,150898,150900],{"class":96,"line":1292},[94,150892,150893],{"class":104},"s1 ",[94,150895,150],{"class":100},[94,150897,149862],{"class":104},[94,150899,149865],{"class":209},[94,150901,111],{"class":104},[94,150903,150904,150907,150909,150911,150914],{"class":96,"line":1298},[94,150905,150906],{"class":104},"s2 ",[94,150908,150],{"class":100},[94,150910,149862],{"class":104},[94,150912,150913],{"class":209},"\"小红\"",[94,150915,111],{"class":104},[94,150917,150918],{"class":96,"line":1310},[94,150919,2381],{"emptyLinePlaceholder":20},[94,150921,150922,150924],{"class":96,"line":1593},[94,150923,30398],{"class":153},[94,150925,150926],{"class":104},"(s1.school)\n",[94,150928,150929,150931],{"class":96,"line":1598},[94,150930,30398],{"class":153},[94,150932,150933],{"class":104},"(s2.school)\n",[94,150935,150936,150938],{"class":96,"line":1604},[94,150937,30398],{"class":153},[94,150939,150940],{"class":104},"(Student.school)\n",[40,150942,150943],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[35,150945,150947],{"id":150946},"_1113-类方法和静态方法","11.13 类方法和静态方法",[65,150949,150951],{"id":150950},"_11131-类方法","11.13.1 类方法",[40,150953,150954,150955,150958,150959,28368],{},"类方法使用 ",[91,150956,150957],{},"@classmethod","，第一个参数通常是 ",[91,150960,150961],{},"cls",[85,150963,150965],{"className":30361,"code":150964,"language":30363,"meta":14,"style":14},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[91,150966,150967,150975,150983,150987,150995,151005,151015,151019,151023],{"__ignoreMap":14},[94,150968,150969,150971,150973],{"class":96,"line":97},[94,150970,14676],{"class":100},[94,150972,7880],{"class":1944},[94,150974,3720],{"class":104},[94,150976,150977,150979,150981],{"class":96,"line":15},[94,150978,150853],{"class":104},[94,150980,150],{"class":100},[94,150982,150858],{"class":209},[94,150984,150985],{"class":96,"line":1160},[94,150986,2381],{"emptyLinePlaceholder":20},[94,150988,150989,150992],{"class":96,"line":1175},[94,150990,150991],{"class":1944},"    @",[94,150993,150994],{"class":153},"classmethod\n",[94,150996,150997,150999,151002],{"class":96,"line":1181},[94,150998,30784],{"class":100},[94,151000,151001],{"class":1944}," get_school",[94,151003,151004],{"class":104},"(cls):\n",[94,151006,151007,151009,151012],{"class":96,"line":1195},[94,151008,14734],{"class":100},[94,151010,151011],{"class":153}," cls",[94,151013,151014],{"class":104},".school\n",[94,151016,151017],{"class":96,"line":1201},[94,151018,2381],{"emptyLinePlaceholder":20},[94,151020,151021],{"class":96,"line":1292},[94,151022,2381],{"emptyLinePlaceholder":20},[94,151024,151025,151027],{"class":96,"line":1298},[94,151026,30398],{"class":153},[94,151028,151029],{"class":104},"(Student.get_school())\n",[65,151031,151033],{"id":151032},"_11132-静态方法","11.13.2 静态方法",[40,151035,151036,151037,151040],{},"静态方法使用 ",[91,151038,151039],{},"@staticmethod","，不需要访问实例和类。",[85,151042,151044],{"className":30361,"code":151043,"language":30363,"meta":14,"style":14},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[91,151045,151046,151055,151062,151071,151082,151086,151090],{"__ignoreMap":14},[94,151047,151048,151050,151053],{"class":96,"line":97},[94,151049,14676],{"class":100},[94,151051,151052],{"class":1944}," MathUtils",[94,151054,3720],{"class":104},[94,151056,151057,151059],{"class":96,"line":15},[94,151058,150991],{"class":1944},[94,151060,151061],{"class":153},"staticmethod\n",[94,151063,151064,151066,151068],{"class":96,"line":1160},[94,151065,30784],{"class":100},[94,151067,5191],{"class":1944},[94,151069,151070],{"class":104},"(a, b):\n",[94,151072,151073,151075,151077,151079],{"class":96,"line":1175},[94,151074,14734],{"class":100},[94,151076,10851],{"class":104},[94,151078,586],{"class":100},[94,151080,151081],{"class":104}," b\n",[94,151083,151084],{"class":96,"line":1181},[94,151085,2381],{"emptyLinePlaceholder":20},[94,151087,151088],{"class":96,"line":1195},[94,151089,2381],{"emptyLinePlaceholder":20},[94,151091,151092,151094,151097,151099,151101,151103],{"class":96,"line":1201},[94,151093,30398],{"class":153},[94,151095,151096],{"class":104},"(MathUtils.add(",[94,151098,322],{"class":153},[94,151100,12417],{"class":104},[94,151102,182],{"class":153},[94,151104,30480],{"class":104},[40,151106,151107],{},"静态方法本质上是放在类命名空间里的普通函数。",[35,151109,151111],{"id":151110},"_1114-dataclass","11.14 dataclass",[40,151113,151114,151117],{},[91,151115,151116],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[85,151119,151121],{"className":30361,"code":151120,"language":30363,"meta":14,"style":14},"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",[91,151122,151123,151135,151139,151143,151148,151156,151164,151172,151180,151184,151188,151208],{"__ignoreMap":14},[94,151124,151125,151127,151130,151132],{"class":96,"line":97},[94,151126,30720],{"class":100},[94,151128,151129],{"class":104}," dataclasses ",[94,151131,30375],{"class":100},[94,151133,151134],{"class":104}," dataclass\n",[94,151136,151137],{"class":96,"line":15},[94,151138,2381],{"emptyLinePlaceholder":20},[94,151140,151141],{"class":96,"line":1160},[94,151142,2381],{"emptyLinePlaceholder":20},[94,151144,151145],{"class":96,"line":1175},[94,151146,151147],{"class":1944},"@dataclass\n",[94,151149,151150,151152,151154],{"class":96,"line":1181},[94,151151,14676],{"class":100},[94,151153,7880],{"class":1944},[94,151155,3720],{"class":104},[94,151157,151158,151161],{"class":96,"line":1195},[94,151159,151160],{"class":104},"    name: ",[94,151162,151163],{"class":153},"str\n",[94,151165,151166,151169],{"class":96,"line":1201},[94,151167,151168],{"class":104},"    age: ",[94,151170,151171],{"class":153},"int\n",[94,151173,151174,151177],{"class":96,"line":1292},[94,151175,151176],{"class":104},"    score: ",[94,151178,151179],{"class":153},"float\n",[94,151181,151182],{"class":96,"line":1298},[94,151183,2381],{"emptyLinePlaceholder":20},[94,151185,151186],{"class":96,"line":1310},[94,151187,2381],{"emptyLinePlaceholder":20},[94,151189,151190,151192,151194,151196,151198,151200,151202,151204,151206],{"class":96,"line":1593},[94,151191,149458],{"class":104},[94,151193,150],{"class":100},[94,151195,149862],{"class":104},[94,151197,149865],{"class":209},[94,151199,12417],{"class":104},[94,151201,755],{"class":153},[94,151203,12417],{"class":104},[94,151205,1094],{"class":153},[94,151207,111],{"class":104},[94,151209,151210,151212],{"class":96,"line":1598},[94,151211,30398],{"class":153},[94,151213,150019],{"class":104},[40,151215,151216,151217,317,151219,151222],{},"它会自动生成 ",[91,151218,30812],{},[91,151220,151221],{},"__repr__"," 等方法。适合数据模型类。",[35,151224,151226],{"id":151225},"_1115-小案例学生类","11.15 小案例：学生类",[85,151228,151230],{"className":30361,"code":151229,"language":30363,"meta":14,"style":14},"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",[91,151231,151232,151240,151249,151261,151271,151281,151291,151295,151304,151317,151321,151330,151336,151348,151360,151372,151384,151388,151392,151398,151408,151417,151427,151435,151443,151452,151456,151460,151468,151504,151508,151512,151537,151544],{"__ignoreMap":14},[94,151233,151234,151236,151238],{"class":96,"line":97},[94,151235,14676],{"class":100},[94,151237,7880],{"class":1944},[94,151239,3720],{"class":104},[94,151241,151242,151244,151246],{"class":96,"line":15},[94,151243,30784],{"class":100},[94,151245,30787],{"class":153},[94,151247,151248],{"class":104},"(self, student_id, name, age, score):\n",[94,151250,151251,151253,151256,151258],{"class":96,"line":1160},[94,151252,30828],{"class":153},[94,151254,151255],{"class":104},".student_id ",[94,151257,150],{"class":100},[94,151259,151260],{"class":104}," student_id\n",[94,151262,151263,151265,151267,151269],{"class":96,"line":1175},[94,151264,30828],{"class":153},[94,151266,149767],{"class":104},[94,151268,150],{"class":100},[94,151270,149772],{"class":104},[94,151272,151273,151275,151277,151279],{"class":96,"line":1181},[94,151274,30828],{"class":153},[94,151276,149779],{"class":104},[94,151278,150],{"class":100},[94,151280,149784],{"class":104},[94,151282,151283,151285,151287,151289],{"class":96,"line":1195},[94,151284,30828],{"class":153},[94,151286,149791],{"class":104},[94,151288,150],{"class":100},[94,151290,1560],{"class":104},[94,151292,151293],{"class":96,"line":1201},[94,151294,2381],{"emptyLinePlaceholder":20},[94,151296,151297,151299,151302],{"class":96,"line":1292},[94,151298,30784],{"class":100},[94,151300,151301],{"class":1944}," is_passed",[94,151303,30790],{"class":104},[94,151305,151306,151308,151310,151312,151314],{"class":96,"line":1298},[94,151307,14734],{"class":100},[94,151309,38856],{"class":153},[94,151311,149791],{"class":104},[94,151313,1691],{"class":100},[94,151315,151316],{"class":153}," 60\n",[94,151318,151319],{"class":96,"line":1310},[94,151320,2381],{"emptyLinePlaceholder":20},[94,151322,151323,151325,151328],{"class":96,"line":1593},[94,151324,30784],{"class":100},[94,151326,151327],{"class":1944}," to_dict",[94,151329,30790],{"class":104},[94,151331,151332,151334],{"class":96,"line":1598},[94,151333,14734],{"class":100},[94,151335,15554],{"class":104},[94,151337,151338,151341,151343,151345],{"class":96,"line":1604},[94,151339,151340],{"class":209},"            \"student_id\"",[94,151342,51414],{"class":104},[94,151344,30806],{"class":153},[94,151346,151347],{"class":104},".student_id,\n",[94,151349,151350,151353,151355,151357],{"class":96,"line":1609},[94,151351,151352],{"class":209},"            \"name\"",[94,151354,51414],{"class":104},[94,151356,30806],{"class":153},[94,151358,151359],{"class":104},".name,\n",[94,151361,151362,151365,151367,151369],{"class":96,"line":1623},[94,151363,151364],{"class":209},"            \"age\"",[94,151366,51414],{"class":104},[94,151368,30806],{"class":153},[94,151370,151371],{"class":104},".age,\n",[94,151373,151374,151377,151379,151381],{"class":96,"line":1628},[94,151375,151376],{"class":209},"            \"score\"",[94,151378,51414],{"class":104},[94,151380,30806],{"class":153},[94,151382,151383],{"class":104},".score,\n",[94,151385,151386],{"class":96,"line":1634},[94,151387,2510],{"class":104},[94,151389,151390],{"class":96,"line":1655},[94,151391,2381],{"emptyLinePlaceholder":20},[94,151393,151394,151396],{"class":96,"line":1660},[94,151395,150991],{"class":1944},[94,151397,150994],{"class":153},[94,151399,151400,151402,151405],{"class":96,"line":1674},[94,151401,30784],{"class":100},[94,151403,151404],{"class":1944}," from_dict",[94,151406,151407],{"class":104},"(cls, data):\n",[94,151409,151410,151412,151414],{"class":96,"line":1679},[94,151411,14734],{"class":100},[94,151413,151011],{"class":153},[94,151415,151416],{"class":104},"(\n",[94,151418,151419,151422,151425],{"class":96,"line":1708},[94,151420,151421],{"class":104},"            data[",[94,151423,151424],{"class":209},"\"student_id\"",[94,151426,87813],{"class":104},[94,151428,151429,151431,151433],{"class":96,"line":1713},[94,151430,151421],{"class":104},[94,151432,62656],{"class":209},[94,151434,87813],{"class":104},[94,151436,151437,151439,151441],{"class":96,"line":1730},[94,151438,151421],{"class":104},[94,151440,69101],{"class":209},[94,151442,87813],{"class":104},[94,151444,151445,151447,151450],{"class":96,"line":1735},[94,151446,151421],{"class":104},[94,151448,151449],{"class":209},"\"score\"",[94,151451,87813],{"class":104},[94,151453,151454],{"class":96,"line":1740},[94,151455,38109],{"class":104},[94,151457,151458],{"class":96,"line":1745},[94,151459,2381],{"emptyLinePlaceholder":20},[94,151461,151462,151464,151466],{"class":96,"line":1759},[94,151463,30784],{"class":100},[94,151465,149958],{"class":153},[94,151467,30790],{"class":104},[94,151469,151470,151472,151474,151476,151478,151481,151483,151486,151488,151490,151492,151494,151496,151498,151500,151502],{"class":96,"line":1764},[94,151471,14734],{"class":100},[94,151473,149967],{"class":100},[94,151475,356],{"class":209},[94,151477,149429],{"class":153},[94,151479,151480],{"class":104},".student_id",[94,151482,1051],{"class":153},[94,151484,151485],{"class":153}," {self",[94,151487,80278],{"class":104},[94,151489,1051],{"class":153},[94,151491,151485],{"class":153},[94,151493,80290],{"class":104},[94,151495,1051],{"class":153},[94,151497,151485],{"class":153},[94,151499,149839],{"class":104},[94,151501,1051],{"class":153},[94,151503,25116],{"class":209},[94,151505,151506],{"class":96,"line":2558},[94,151507,2381],{"emptyLinePlaceholder":20},[94,151509,151510],{"class":96,"line":2572},[94,151511,2381],{"emptyLinePlaceholder":20},[94,151513,151514,151516,151518,151520,151523,151525,151527,151529,151531,151533,151535],{"class":96,"line":2580},[94,151515,149458],{"class":104},[94,151517,150],{"class":100},[94,151519,149862],{"class":104},[94,151521,151522],{"class":209},"\"001\"",[94,151524,12417],{"class":104},[94,151526,149865],{"class":209},[94,151528,12417],{"class":104},[94,151530,755],{"class":153},[94,151532,12417],{"class":104},[94,151534,1094],{"class":153},[94,151536,111],{"class":104},[94,151538,151539,151541],{"class":96,"line":2585},[94,151540,30398],{"class":153},[94,151542,151543],{"class":104},"(student.is_passed())\n",[94,151545,151546,151548],{"class":96,"line":2591},[94,151547,30398],{"class":153},[94,151549,151550],{"class":104},"(student.to_dict())\n",[40,151552,151553,100995,151556,151559],{},[91,151554,151555],{},"to_dict()",[91,151557,151558],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[35,151561,151563],{"id":151562},"_1116-易错点","11.16 易错点",[48,151565,151566,151572,151578,151583,151586,151589],{},[51,151567,151568,151569,28368],{},"类名推荐使用大驼峰，如 ",[91,151570,151571],{},"StudentManager",[51,151573,151574,151575,151577],{},"方法第一个参数必须写 ",[91,151576,30806],{},"，调用时不用传。",[51,151579,151580,151582],{},[91,151581,30812],{}," 不是普通方法，它在创建对象时自动执行。",[51,151584,151585],{},"私有属性不是绝对安全，只是约定和名称改写。",[51,151587,151588],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[51,151590,151591],{},"类中方法太多时，说明职责可能过重。",[35,151593,151595],{"id":151594},"_1117-本章练习","11.17 本章练习",[48,151597,151598,151604,151610,151615,151628],{},[51,151599,151600,151601,151603],{},"定义 ",[91,151602,149545],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[51,151605,151600,151606,151609],{},[91,151607,151608],{},"Account"," 类，实现存款、取款、查询余额。",[51,151611,151600,151612,151614],{},[91,151613,17208],{}," 类，计算圆的周长和面积。",[51,151616,151600,151617,317,151620,151623,151624,151627],{},[91,151618,151619],{},"Dog",[91,151621,151622],{},"Cat"," 类，并用同一个函数调用它们的 ",[91,151625,151626],{},"speak()"," 方法。",[51,151629,104343,151630,151632,151633,28368],{},[91,151631,151116],{}," 定义一个商品类 ",[91,151634,151635],{},"Product",[5108,151637,151638],{},"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":14,"searchDepth":15,"depth":15,"links":151640},[151641,151642,151643,151644,151645,151646,151648,151649,151650,151651,151652,151653,151654,151658,151659,151660,151661],{"id":149309,"depth":15,"text":149310},{"id":149492,"depth":15,"text":149493},{"id":149556,"depth":15,"text":149557},{"id":149633,"depth":15,"text":149634},{"id":149732,"depth":15,"text":149733},{"id":149896,"depth":15,"text":151647},"11.6 str",{"id":150022,"depth":15,"text":150023},{"id":150288,"depth":15,"text":150289},{"id":150402,"depth":15,"text":150403},{"id":150557,"depth":15,"text":150558},{"id":150681,"depth":15,"text":150682},{"id":150797,"depth":15,"text":150798},{"id":150946,"depth":15,"text":150947,"children":151655},[151656,151657],{"id":150950,"depth":1160,"text":150951},{"id":151032,"depth":1160,"text":151033},{"id":151110,"depth":15,"text":151111},{"id":151225,"depth":15,"text":151226},{"id":151562,"depth":15,"text":151563},{"id":151594,"depth":15,"text":151595},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149301,"description":17},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151668,"title":151669,"body":151670,"description":17,"extension":18,"meta":154983,"navigation":20,"path":154984,"seo":154985,"stem":154986,"__hash__":154987},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151671,"toc":154959},[151672,151675,151679,151682,151685,151714,151717,151725,151729,151733,151736,151759,151762,151768,151772,153218,153221,153242,153246,153249,153261,153264,153448,153451,153577,153580,153584,153588,153724,153728,153814,153818,153900,153904,153941,153945,154134,154138,154141,154371,154375,154378,154559,154562,154566,154569,154575,154578,154604,154608,154611,154625,154628,154653,154656,154670,154673,154690,154693,154710,154713,154730,154734,154760,154764,154787,154791,154794,154796,154802,154804,154825,154828,154834,154840,154844,154847,154923,154926,154930,154956],[10,151673,151669],{"id":151674},"_12-综合案例与复习路线",[35,151676,151678],{"id":151677},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[40,151680,151681],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[40,151683,151684],{},"一个合格的入门综合项目最好覆盖：",[48,151686,151687,151690,151693,151696,151699,151702,151705,151708,151711],{},[51,151688,151689],{},"输入输出。",[51,151691,151692],{},"判断和循环。",[51,151694,151695],{},"函数拆分。",[51,151697,151698],{},"列表、字典等容器。",[51,151700,151701],{},"文件持久化。",[51,151703,151704],{},"异常处理。",[51,151706,151707],{},"模块拆分。",[51,151709,151710],{},"可选：面向对象。",[51,151712,151713],{},"可选：数据可视化。",[40,151715,151716],{},"本章整理两个方向：",[48,151718,151719,151722],{},[51,151720,151721],{},"学生管理系统。",[51,151723,151724],{},"销售数据统计和可视化。",[35,151726,151728],{"id":151727},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[65,151730,151732],{"id":151731},"_1221-需求","12.2.1 需求",[40,151734,151735],{},"实现一个命令行学生管理系统：",[48,151737,151738,151741,151744,151747,151750,151753,151756],{},[51,151739,151740],{},"添加学生。",[51,151742,151743],{},"删除学生。",[51,151745,151746],{},"修改学生。",[51,151748,151749],{},"查询学生。",[51,151751,151752],{},"显示所有学生。",[51,151754,151755],{},"保存到 JSON 文件。",[51,151757,151758],{},"程序启动时自动读取 JSON 文件。",[40,151760,151761],{},"学生字段：",[85,151763,151766],{"className":151764,"code":151765,"language":5169,"meta":14},[5167],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[91,151767,151765],{"__ignoreMap":14},[35,151769,151771],{"id":151770},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[85,151773,151775],{"className":30361,"code":151774,"language":30363,"meta":14,"style":14},"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",[91,151776,151777,151783,151793,151797,151811,151815,151819,151828,151840,151846,151850,151856,151887,151897,151904,151915,151921,151925,151929,151939,151970,151996,152000,152004,152013,152024,152035,152046,152057,152068,152079,152090,152094,152098,152108,152120,152136,152143,152150,152154,152158,152168,152176,152183,152196,152206,152217,152221,152225,152234,152242,152248,152260,152268,152279,152283,152287,152296,152312,152316,152323,152334,152339,152343,152359,152374,152389,152393,152398,152406,152414,152422,152430,152434,152439,152450,152454,152458,152467,152482,152492,152496,152508,152519,152523,152527,152532,152536,152547,152551,152555,152564,152579,152587,152591,152603,152613,152617,152621,152636,152649,152662,152666,152679,152691,152703,152707,152711,152722,152726,152730,152739,152754,152762,152766,152778,152788,152792,152796,152801,152805,152809,152819,152825,152847,152866,152885,152904,152909,152913,152917,152926,152934,152945,152949,152953,152979,152989,152994,152998,153002,153010,153020,153024,153032,153037,153053,153057,153071,153076,153090,153095,153108,153113,153126,153131,153144,153149,153162,153173,153177,153183,153194,153198,153202,153214],{"__ignoreMap":14},[94,151778,151779,151781],{"class":96,"line":97},[94,151780,30375],{"class":100},[94,151782,147068],{"class":104},[94,151784,151785,151787,151789,151791],{"class":96,"line":15},[94,151786,30720],{"class":100},[94,151788,108288],{"class":104},[94,151790,30375],{"class":100},[94,151792,108293],{"class":104},[94,151794,151795],{"class":96,"line":1160},[94,151796,2381],{"emptyLinePlaceholder":20},[94,151798,151799,151802,151804,151806,151809],{"class":96,"line":1175},[94,151800,151801],{"class":153},"DATA_FILE",[94,151803,13546],{"class":100},[94,151805,108522],{"class":104},[94,151807,151808],{"class":209},"\"students.json\"",[94,151810,111],{"class":104},[94,151812,151813],{"class":96,"line":1181},[94,151814,2381],{"emptyLinePlaceholder":20},[94,151816,151817],{"class":96,"line":1195},[94,151818,2381],{"emptyLinePlaceholder":20},[94,151820,151821,151823,151826],{"class":96,"line":1201},[94,151822,31930],{"class":100},[94,151824,151825],{"class":1944}," load_students",[94,151827,31936],{"class":104},[94,151829,151830,151832,151834,151837],{"class":96,"line":1292},[94,151831,3082],{"class":100},[94,151833,38913],{"class":100},[94,151835,151836],{"class":153}," DATA_FILE",[94,151838,151839],{"class":104},".exists():\n",[94,151841,151842,151844],{"class":96,"line":1298},[94,151843,14734],{"class":100},[94,151845,51815],{"class":104},[94,151847,151848],{"class":96,"line":1310},[94,151849,2381],{"emptyLinePlaceholder":20},[94,151851,151852,151854],{"class":96,"line":1593},[94,151853,125761],{"class":100},[94,151855,3720],{"class":104},[94,151857,151858,151861,151863,151865,151867,151869,151871,151873,151875,151877,151879,151881,151883,151885],{"class":96,"line":1598},[94,151859,151860],{"class":100},"        with",[94,151862,146768],{"class":153},[94,151864,105],{"class":104},[94,151866,151801],{"class":153},[94,151868,12417],{"class":104},[94,151870,146778],{"class":209},[94,151872,12417],{"class":104},[94,151874,146783],{"class":5198},[94,151876,150],{"class":100},[94,151878,146788],{"class":209},[94,151880,13696],{"class":104},[94,151882,31366],{"class":100},[94,151884,148130],{"class":5198},[94,151886,3720],{"class":104},[94,151888,151889,151891,151893,151895],{"class":96,"line":1604},[94,151890,15714],{"class":100},[94,151892,148141],{"class":104},[94,151894,45337],{"class":5198},[94,151896,111],{"class":104},[94,151898,151899,151901],{"class":96,"line":1609},[94,151900,125789],{"class":100},[94,151902,151903],{"class":104}," json.JSONDecodeError:\n",[94,151905,151906,151908,151910,151913],{"class":96,"line":1623},[94,151907,32434],{"class":153},[94,151909,105],{"class":104},[94,151911,151912],{"class":209},"\"数据文件格式错误，已使用空数据启动\"",[94,151914,111],{"class":104},[94,151916,151917,151919],{"class":96,"line":1628},[94,151918,14734],{"class":100},[94,151920,51815],{"class":104},[94,151922,151923],{"class":96,"line":1634},[94,151924,2381],{"emptyLinePlaceholder":20},[94,151926,151927],{"class":96,"line":1655},[94,151928,2381],{"emptyLinePlaceholder":20},[94,151930,151931,151933,151936],{"class":96,"line":1660},[94,151932,31930],{"class":100},[94,151934,151935],{"class":1944}," save_students",[94,151937,151938],{"class":104},"(students):\n",[94,151940,151941,151943,151945,151947,151949,151951,151954,151956,151958,151960,151962,151964,151966,151968],{"class":96,"line":1674},[94,151942,34161],{"class":100},[94,151944,146768],{"class":153},[94,151946,105],{"class":104},[94,151948,151801],{"class":153},[94,151950,12417],{"class":104},[94,151952,151953],{"class":209},"\"w\"",[94,151955,12417],{"class":104},[94,151957,146783],{"class":5198},[94,151959,150],{"class":100},[94,151961,146788],{"class":209},[94,151963,13696],{"class":104},[94,151965,31366],{"class":100},[94,151967,148130],{"class":5198},[94,151969,3720],{"class":104},[94,151971,151972,151975,151977,151979,151981,151983,151985,151987,151990,151992,151994],{"class":96,"line":1679},[94,151973,151974],{"class":104},"        json.dump(students, ",[94,151976,45337],{"class":5198},[94,151978,12417],{"class":104},[94,151980,147114],{"class":5198},[94,151982,150],{"class":100},[94,151984,33970],{"class":153},[94,151986,12417],{"class":104},[94,151988,151989],{"class":5198},"indent",[94,151991,150],{"class":100},[94,151993,182],{"class":153},[94,151995,111],{"class":104},[94,151997,151998],{"class":96,"line":1708},[94,151999,2381],{"emptyLinePlaceholder":20},[94,152001,152002],{"class":96,"line":1713},[94,152003,2381],{"emptyLinePlaceholder":20},[94,152005,152006,152008,152011],{"class":96,"line":1730},[94,152007,31930],{"class":100},[94,152009,152010],{"class":1944}," show_menu",[94,152012,31936],{"class":104},[94,152014,152015,152017,152019,152022],{"class":96,"line":1735},[94,152016,31282],{"class":153},[94,152018,105],{"class":104},[94,152020,152021],{"class":209},"\"====== 学生管理系统 ======\"",[94,152023,111],{"class":104},[94,152025,152026,152028,152030,152033],{"class":96,"line":1740},[94,152027,31282],{"class":153},[94,152029,105],{"class":104},[94,152031,152032],{"class":209},"\"1. 添加学生\"",[94,152034,111],{"class":104},[94,152036,152037,152039,152041,152044],{"class":96,"line":1745},[94,152038,31282],{"class":153},[94,152040,105],{"class":104},[94,152042,152043],{"class":209},"\"2. 删除学生\"",[94,152045,111],{"class":104},[94,152047,152048,152050,152052,152055],{"class":96,"line":1759},[94,152049,31282],{"class":153},[94,152051,105],{"class":104},[94,152053,152054],{"class":209},"\"3. 修改学生\"",[94,152056,111],{"class":104},[94,152058,152059,152061,152063,152066],{"class":96,"line":1764},[94,152060,31282],{"class":153},[94,152062,105],{"class":104},[94,152064,152065],{"class":209},"\"4. 查询学生\"",[94,152067,111],{"class":104},[94,152069,152070,152072,152074,152077],{"class":96,"line":2558},[94,152071,31282],{"class":153},[94,152073,105],{"class":104},[94,152075,152076],{"class":209},"\"5. 显示所有学生\"",[94,152078,111],{"class":104},[94,152080,152081,152083,152085,152088],{"class":96,"line":2572},[94,152082,31282],{"class":153},[94,152084,105],{"class":104},[94,152086,152087],{"class":209},"\"0. 退出系统\"",[94,152089,111],{"class":104},[94,152091,152092],{"class":96,"line":2580},[94,152093,2381],{"emptyLinePlaceholder":20},[94,152095,152096],{"class":96,"line":2585},[94,152097,2381],{"emptyLinePlaceholder":20},[94,152099,152100,152102,152105],{"class":96,"line":2591},[94,152101,31930],{"class":100},[94,152103,152104],{"class":1944}," find_student",[94,152106,152107],{"class":104},"(students, student_id):\n",[94,152109,152110,152112,152115,152117],{"class":96,"line":2597},[94,152111,3182],{"class":100},[94,152113,152114],{"class":104}," student ",[94,152116,26026],{"class":100},[94,152118,152119],{"class":104}," students:\n",[94,152121,152122,152124,152127,152129,152131,152133],{"class":96,"line":2602},[94,152123,2478],{"class":100},[94,152125,152126],{"class":104}," student[",[94,152128,151424],{"class":209},[94,152130,4424],{"class":104},[94,152132,2930],{"class":100},[94,152134,152135],{"class":104}," student_id:\n",[94,152137,152138,152140],{"class":96,"line":7930},[94,152139,15714],{"class":100},[94,152141,152142],{"class":104}," student\n",[94,152144,152145,152147],{"class":96,"line":7954},[94,152146,4071],{"class":100},[94,152148,152149],{"class":153}," None\n",[94,152151,152152],{"class":96,"line":7959},[94,152153,2381],{"emptyLinePlaceholder":20},[94,152155,152156],{"class":96,"line":7965},[94,152157,2381],{"emptyLinePlaceholder":20},[94,152159,152160,152162,152165],{"class":96,"line":7992},[94,152161,31930],{"class":100},[94,152163,152164],{"class":1944}," input_int",[94,152166,152167],{"class":104},"(prompt):\n",[94,152169,152170,152172,152174],{"class":96,"line":7997},[94,152171,2232],{"class":100},[94,152173,95269],{"class":153},[94,152175,3720],{"class":104},[94,152177,152178,152181],{"class":96,"line":8003},[94,152179,152180],{"class":100},"        try",[94,152182,3720],{"class":104},[94,152184,152185,152187,152189,152191,152193],{"class":96,"line":8015},[94,152186,15714],{"class":100},[94,152188,2363],{"class":153},[94,152190,105],{"class":104},[94,152192,53798],{"class":153},[94,152194,152195],{"class":104},"(prompt))\n",[94,152197,152198,152201,152204],{"class":96,"line":8027},[94,152199,152200],{"class":100},"        except",[94,152202,152203],{"class":153}," ValueError",[94,152205,3720],{"class":104},[94,152207,152208,152210,152212,152215],{"class":96,"line":8039},[94,152209,34633],{"class":153},[94,152211,105],{"class":104},[94,152213,152214],{"class":209},"\"请输入整数\"",[94,152216,111],{"class":104},[94,152218,152219],{"class":96,"line":9698},[94,152220,2381],{"emptyLinePlaceholder":20},[94,152222,152223],{"class":96,"line":9723},[94,152224,2381],{"emptyLinePlaceholder":20},[94,152226,152227,152229,152232],{"class":96,"line":9746},[94,152228,31930],{"class":100},[94,152230,152231],{"class":1944}," input_float",[94,152233,152167],{"class":104},[94,152235,152236,152238,152240],{"class":96,"line":9770},[94,152237,2232],{"class":100},[94,152239,95269],{"class":153},[94,152241,3720],{"class":104},[94,152243,152244,152246],{"class":96,"line":9775},[94,152245,152180],{"class":100},[94,152247,3720],{"class":104},[94,152249,152250,152252,152254,152256,152258],{"class":96,"line":9780},[94,152251,15714],{"class":100},[94,152253,109774],{"class":153},[94,152255,105],{"class":104},[94,152257,53798],{"class":153},[94,152259,152195],{"class":104},[94,152261,152262,152264,152266],{"class":96,"line":9785},[94,152263,152200],{"class":100},[94,152265,152203],{"class":153},[94,152267,3720],{"class":104},[94,152269,152270,152272,152274,152277],{"class":96,"line":9794},[94,152271,34633],{"class":153},[94,152273,105],{"class":104},[94,152275,152276],{"class":209},"\"请输入数字\"",[94,152278,111],{"class":104},[94,152280,152281],{"class":96,"line":9799},[94,152282,2381],{"emptyLinePlaceholder":20},[94,152284,152285],{"class":96,"line":9805},[94,152286,2381],{"emptyLinePlaceholder":20},[94,152288,152289,152291,152294],{"class":96,"line":9826},[94,152290,31930],{"class":100},[94,152292,152293],{"class":1944}," add_student",[94,152295,151938],{"class":104},[94,152297,152298,152301,152303,152305,152307,152310],{"class":96,"line":9832},[94,152299,152300],{"class":104},"    student_id ",[94,152302,150],{"class":100},[94,152304,60582],{"class":153},[94,152306,105],{"class":104},[94,152308,152309],{"class":209},"\"请输入学号:\"",[94,152311,111],{"class":104},[94,152313,152314],{"class":96,"line":9846},[94,152315,2381],{"emptyLinePlaceholder":20},[94,152317,152318,152320],{"class":96,"line":9852},[94,152319,3082],{"class":100},[94,152321,152322],{"class":104}," find_student(students, student_id):\n",[94,152324,152325,152327,152329,152332],{"class":96,"line":9879},[94,152326,32434],{"class":153},[94,152328,105],{"class":104},[94,152330,152331],{"class":209},"\"学号已存在\"",[94,152333,111],{"class":104},[94,152335,152336],{"class":96,"line":9888},[94,152337,152338],{"class":100},"        return\n",[94,152340,152341],{"class":96,"line":9894},[94,152342,2381],{"emptyLinePlaceholder":20},[94,152344,152345,152348,152350,152352,152354,152357],{"class":96,"line":9902},[94,152346,152347],{"class":104},"    name ",[94,152349,150],{"class":100},[94,152351,60582],{"class":153},[94,152353,105],{"class":104},[94,152355,152356],{"class":209},"\"请输入姓名:\"",[94,152358,111],{"class":104},[94,152360,152361,152364,152366,152369,152372],{"class":96,"line":9907},[94,152362,152363],{"class":104},"    age ",[94,152365,150],{"class":100},[94,152367,152368],{"class":104}," input_int(",[94,152370,152371],{"class":209},"\"请输入年龄:\"",[94,152373,111],{"class":104},[94,152375,152376,152379,152381,152384,152387],{"class":96,"line":16586},[94,152377,152378],{"class":104},"    score ",[94,152380,150],{"class":100},[94,152382,152383],{"class":104}," input_float(",[94,152385,152386],{"class":209},"\"请输入成绩:\"",[94,152388,111],{"class":104},[94,152390,152391],{"class":96,"line":16592},[94,152392,2381],{"emptyLinePlaceholder":20},[94,152394,152395],{"class":96,"line":16615},[94,152396,152397],{"class":104},"    students.append({\n",[94,152399,152400,152403],{"class":96,"line":16621},[94,152401,152402],{"class":209},"        \"student_id\"",[94,152404,152405],{"class":104},": student_id,\n",[94,152407,152408,152411],{"class":96,"line":16644},[94,152409,152410],{"class":209},"        \"name\"",[94,152412,152413],{"class":104},": name,\n",[94,152415,152416,152419],{"class":96,"line":16658},[94,152417,152418],{"class":209},"        \"age\"",[94,152420,152421],{"class":104},": age,\n",[94,152423,152424,152427],{"class":96,"line":16678},[94,152425,152426],{"class":209},"        \"score\"",[94,152428,152429],{"class":104},": score,\n",[94,152431,152432],{"class":96,"line":16684},[94,152433,33444],{"class":104},[94,152435,152436],{"class":96,"line":16695},[94,152437,152438],{"class":104},"    save_students(students)\n",[94,152440,152441,152443,152445,152448],{"class":96,"line":16718},[94,152442,31282],{"class":153},[94,152444,105],{"class":104},[94,152446,152447],{"class":209},"\"添加成功\"",[94,152449,111],{"class":104},[94,152451,152452],{"class":96,"line":16740},[94,152453,2381],{"emptyLinePlaceholder":20},[94,152455,152456],{"class":96,"line":16745},[94,152457,2381],{"emptyLinePlaceholder":20},[94,152459,152460,152462,152465],{"class":96,"line":16751},[94,152461,31930],{"class":100},[94,152463,152464],{"class":1944}," delete_student",[94,152466,151938],{"class":104},[94,152468,152469,152471,152473,152475,152477,152480],{"class":96,"line":16765},[94,152470,152300],{"class":104},[94,152472,150],{"class":100},[94,152474,60582],{"class":153},[94,152476,105],{"class":104},[94,152478,152479],{"class":209},"\"请输入要删除的学号:\"",[94,152481,111],{"class":104},[94,152483,152484,152487,152489],{"class":96,"line":16778},[94,152485,152486],{"class":104},"    student ",[94,152488,150],{"class":100},[94,152490,152491],{"class":104}," find_student(students, student_id)\n",[94,152493,152494],{"class":96,"line":16783},[94,152495,2381],{"emptyLinePlaceholder":20},[94,152497,152498,152500,152502,152504,152506],{"class":96,"line":16797},[94,152499,3082],{"class":100},[94,152501,152114],{"class":104},[94,152503,38910],{"class":100},[94,152505,38916],{"class":153},[94,152507,3720],{"class":104},[94,152509,152510,152512,152514,152517],{"class":96,"line":16802},[94,152511,32434],{"class":153},[94,152513,105],{"class":104},[94,152515,152516],{"class":209},"\"学生不存在\"",[94,152518,111],{"class":104},[94,152520,152521],{"class":96,"line":16808},[94,152522,152338],{"class":100},[94,152524,152525],{"class":96,"line":16813},[94,152526,2381],{"emptyLinePlaceholder":20},[94,152528,152529],{"class":96,"line":16827},[94,152530,152531],{"class":104},"    students.remove(student)\n",[94,152533,152534],{"class":96,"line":16832},[94,152535,152438],{"class":104},[94,152537,152538,152540,152542,152545],{"class":96,"line":16837},[94,152539,31282],{"class":153},[94,152541,105],{"class":104},[94,152543,152544],{"class":209},"\"删除成功\"",[94,152546,111],{"class":104},[94,152548,152549],{"class":96,"line":16851},[94,152550,2381],{"emptyLinePlaceholder":20},[94,152552,152553],{"class":96,"line":16863},[94,152554,2381],{"emptyLinePlaceholder":20},[94,152556,152557,152559,152562],{"class":96,"line":16868},[94,152558,31930],{"class":100},[94,152560,152561],{"class":1944}," update_student",[94,152563,151938],{"class":104},[94,152565,152566,152568,152570,152572,152574,152577],{"class":96,"line":16881},[94,152567,152300],{"class":104},[94,152569,150],{"class":100},[94,152571,60582],{"class":153},[94,152573,105],{"class":104},[94,152575,152576],{"class":209},"\"请输入要修改的学号:\"",[94,152578,111],{"class":104},[94,152580,152581,152583,152585],{"class":96,"line":16886},[94,152582,152486],{"class":104},[94,152584,150],{"class":100},[94,152586,152491],{"class":104},[94,152588,152589],{"class":96,"line":16891},[94,152590,2381],{"emptyLinePlaceholder":20},[94,152592,152593,152595,152597,152599,152601],{"class":96,"line":16896},[94,152594,3082],{"class":100},[94,152596,152114],{"class":104},[94,152598,38910],{"class":100},[94,152600,38916],{"class":153},[94,152602,3720],{"class":104},[94,152604,152605,152607,152609,152611],{"class":96,"line":16909},[94,152606,32434],{"class":153},[94,152608,105],{"class":104},[94,152610,152516],{"class":209},[94,152612,111],{"class":104},[94,152614,152615],{"class":96,"line":16914},[94,152616,152338],{"class":100},[94,152618,152619],{"class":96,"line":32616},[94,152620,2381],{"emptyLinePlaceholder":20},[94,152622,152623,152625,152627,152629,152631,152634],{"class":96,"line":32622},[94,152624,152347],{"class":104},[94,152626,150],{"class":100},[94,152628,60582],{"class":153},[94,152630,105],{"class":104},[94,152632,152633],{"class":209},"\"请输入新姓名:\"",[94,152635,111],{"class":104},[94,152637,152638,152640,152642,152644,152647],{"class":96,"line":32628},[94,152639,152363],{"class":104},[94,152641,150],{"class":100},[94,152643,152368],{"class":104},[94,152645,152646],{"class":209},"\"请输入新年龄:\"",[94,152648,111],{"class":104},[94,152650,152651,152653,152655,152657,152660],{"class":96,"line":32634},[94,152652,152378],{"class":104},[94,152654,150],{"class":100},[94,152656,152383],{"class":104},[94,152658,152659],{"class":209},"\"请输入新成绩:\"",[94,152661,111],{"class":104},[94,152663,152664],{"class":96,"line":32640},[94,152665,2381],{"emptyLinePlaceholder":20},[94,152667,152668,152671,152673,152675,152677],{"class":96,"line":32651},[94,152669,152670],{"class":104},"    student[",[94,152672,62656],{"class":209},[94,152674,4424],{"class":104},[94,152676,150],{"class":100},[94,152678,149772],{"class":104},[94,152680,152681,152683,152685,152687,152689],{"class":96,"line":32657},[94,152682,152670],{"class":104},[94,152684,69101],{"class":209},[94,152686,4424],{"class":104},[94,152688,150],{"class":100},[94,152690,149784],{"class":104},[94,152692,152693,152695,152697,152699,152701],{"class":96,"line":32677},[94,152694,152670],{"class":104},[94,152696,151449],{"class":209},[94,152698,4424],{"class":104},[94,152700,150],{"class":100},[94,152702,1560],{"class":104},[94,152704,152705],{"class":96,"line":32683},[94,152706,2381],{"emptyLinePlaceholder":20},[94,152708,152709],{"class":96,"line":32694},[94,152710,152438],{"class":104},[94,152712,152713,152715,152717,152720],{"class":96,"line":32700},[94,152714,31282],{"class":153},[94,152716,105],{"class":104},[94,152718,152719],{"class":209},"\"修改成功\"",[94,152721,111],{"class":104},[94,152723,152724],{"class":96,"line":32706},[94,152725,2381],{"emptyLinePlaceholder":20},[94,152727,152728],{"class":96,"line":32712},[94,152729,2381],{"emptyLinePlaceholder":20},[94,152731,152732,152734,152737],{"class":96,"line":32718},[94,152733,31930],{"class":100},[94,152735,152736],{"class":1944}," query_student",[94,152738,151938],{"class":104},[94,152740,152741,152743,152745,152747,152749,152752],{"class":96,"line":32724},[94,152742,152300],{"class":104},[94,152744,150],{"class":100},[94,152746,60582],{"class":153},[94,152748,105],{"class":104},[94,152750,152751],{"class":209},"\"请输入要查询的学号:\"",[94,152753,111],{"class":104},[94,152755,152756,152758,152760],{"class":96,"line":32730},[94,152757,152486],{"class":104},[94,152759,150],{"class":100},[94,152761,152491],{"class":104},[94,152763,152764],{"class":96,"line":32736},[94,152765,2381],{"emptyLinePlaceholder":20},[94,152767,152768,152770,152772,152774,152776],{"class":96,"line":32756},[94,152769,3082],{"class":100},[94,152771,152114],{"class":104},[94,152773,38910],{"class":100},[94,152775,38916],{"class":153},[94,152777,3720],{"class":104},[94,152779,152780,152782,152784,152786],{"class":96,"line":32762},[94,152781,32434],{"class":153},[94,152783,105],{"class":104},[94,152785,152516],{"class":209},[94,152787,111],{"class":104},[94,152789,152790],{"class":96,"line":32778},[94,152791,152338],{"class":100},[94,152793,152794],{"class":96,"line":32784},[94,152795,2381],{"emptyLinePlaceholder":20},[94,152797,152798],{"class":96,"line":32798},[94,152799,152800],{"class":104},"    print_student(student)\n",[94,152802,152803],{"class":96,"line":32804},[94,152804,2381],{"emptyLinePlaceholder":20},[94,152806,152807],{"class":96,"line":32819},[94,152808,2381],{"emptyLinePlaceholder":20},[94,152810,152811,152813,152816],{"class":96,"line":32825},[94,152812,31930],{"class":100},[94,152814,152815],{"class":1944}," print_student",[94,152817,152818],{"class":104},"(student):\n",[94,152820,152821,152823],{"class":96,"line":32834},[94,152822,31282],{"class":153},[94,152824,151416],{"class":104},[94,152826,152827,152830,152832,152834,152837,152840,152842,152845],{"class":96,"line":32840},[94,152828,152829],{"class":100},"        f",[94,152831,356],{"class":209},[94,152833,1001],{"class":153},[94,152835,152836],{"class":104},"student[",[94,152838,152839],{"class":209},"'student_id'",[94,152841,1045],{"class":104},[94,152843,152844],{"class":153},"}\\t",[94,152846,25116],{"class":209},[94,152848,152849,152851,152853,152855,152857,152860,152862,152864],{"class":96,"line":32849},[94,152850,152829],{"class":100},[94,152852,356],{"class":209},[94,152854,1001],{"class":153},[94,152856,152836],{"class":104},[94,152858,152859],{"class":209},"'name'",[94,152861,1045],{"class":104},[94,152863,152844],{"class":153},[94,152865,25116],{"class":209},[94,152867,152868,152870,152872,152874,152876,152879,152881,152883],{"class":96,"line":32855},[94,152869,152829],{"class":100},[94,152871,356],{"class":209},[94,152873,1001],{"class":153},[94,152875,152836],{"class":104},[94,152877,152878],{"class":209},"'age'",[94,152880,1045],{"class":104},[94,152882,152844],{"class":153},[94,152884,25116],{"class":209},[94,152886,152887,152889,152891,152893,152895,152898,152900,152902],{"class":96,"line":32861},[94,152888,152829],{"class":100},[94,152890,356],{"class":209},[94,152892,1001],{"class":153},[94,152894,152836],{"class":104},[94,152896,152897],{"class":209},"'score'",[94,152899,1045],{"class":104},[94,152901,1051],{"class":153},[94,152903,25116],{"class":209},[94,152905,152906],{"class":96,"line":32870},[94,152907,152908],{"class":104},"    )\n",[94,152910,152911],{"class":96,"line":32876},[94,152912,2381],{"emptyLinePlaceholder":20},[94,152914,152915],{"class":96,"line":32887},[94,152916,2381],{"emptyLinePlaceholder":20},[94,152918,152919,152921,152924],{"class":96,"line":32893},[94,152920,31930],{"class":100},[94,152922,152923],{"class":1944}," show_all_students",[94,152925,151938],{"class":104},[94,152927,152928,152930,152932],{"class":96,"line":32912},[94,152929,3082],{"class":100},[94,152931,38913],{"class":100},[94,152933,152119],{"class":104},[94,152935,152936,152938,152940,152943],{"class":96,"line":32918},[94,152937,32434],{"class":153},[94,152939,105],{"class":104},[94,152941,152942],{"class":209},"\"暂无学生\"",[94,152944,111],{"class":104},[94,152946,152947],{"class":96,"line":32929},[94,152948,152338],{"class":100},[94,152950,152951],{"class":96,"line":32935},[94,152952,2381],{"emptyLinePlaceholder":20},[94,152954,152955,152957,152959,152962,152964,152967,152969,152972,152974,152977],{"class":96,"line":32955},[94,152956,31282],{"class":153},[94,152958,105],{"class":104},[94,152960,152961],{"class":209},"\"学号",[94,152963,1211],{"class":153},[94,152965,152966],{"class":209},"姓名",[94,152968,1211],{"class":153},[94,152970,152971],{"class":209},"年龄",[94,152973,1211],{"class":153},[94,152975,152976],{"class":209},"成绩\"",[94,152978,111],{"class":104},[94,152980,152981,152983,152985,152987],{"class":96,"line":32971},[94,152982,3182],{"class":100},[94,152984,152114],{"class":104},[94,152986,26026],{"class":100},[94,152988,152119],{"class":104},[94,152990,152991],{"class":96,"line":32977},[94,152992,152993],{"class":104},"        print_student(student)\n",[94,152995,152996],{"class":96,"line":32991},[94,152997,2381],{"emptyLinePlaceholder":20},[94,152999,153000],{"class":96,"line":32997},[94,153001,2381],{"emptyLinePlaceholder":20},[94,153003,153004,153006,153008],{"class":96,"line":33003},[94,153005,31930],{"class":100},[94,153007,1954],{"class":1944},[94,153009,31936],{"class":104},[94,153011,153012,153015,153017],{"class":96,"line":33014},[94,153013,153014],{"class":104},"    students ",[94,153016,150],{"class":100},[94,153018,153019],{"class":104}," load_students()\n",[94,153021,153022],{"class":96,"line":33020},[94,153023,2381],{"emptyLinePlaceholder":20},[94,153025,153026,153028,153030],{"class":96,"line":33026},[94,153027,2232],{"class":100},[94,153029,95269],{"class":153},[94,153031,3720],{"class":104},[94,153033,153034],{"class":96,"line":33036},[94,153035,153036],{"class":104},"        show_menu()\n",[94,153038,153039,153042,153044,153046,153048,153051],{"class":96,"line":33042},[94,153040,153041],{"class":104},"        choice ",[94,153043,150],{"class":100},[94,153045,60582],{"class":153},[94,153047,105],{"class":104},[94,153049,153050],{"class":209},"\"请输入操作:\"",[94,153052,111],{"class":104},[94,153054,153055],{"class":96,"line":33053},[94,153056,2381],{"emptyLinePlaceholder":20},[94,153058,153059,153061,153064,153066,153069],{"class":96,"line":33059},[94,153060,2478],{"class":100},[94,153062,153063],{"class":104}," choice ",[94,153065,2930],{"class":100},[94,153067,153068],{"class":209}," \"1\"",[94,153070,3720],{"class":104},[94,153072,153073],{"class":96,"line":33069},[94,153074,153075],{"class":104},"            add_student(students)\n",[94,153077,153078,153081,153083,153085,153088],{"class":96,"line":33074},[94,153079,153080],{"class":100},"        elif",[94,153082,153063],{"class":104},[94,153084,2930],{"class":100},[94,153086,153087],{"class":209}," \"2\"",[94,153089,3720],{"class":104},[94,153091,153092],{"class":96,"line":33080},[94,153093,153094],{"class":104},"            delete_student(students)\n",[94,153096,153097,153099,153101,153103,153106],{"class":96,"line":33129},[94,153098,153080],{"class":100},[94,153100,153063],{"class":104},[94,153102,2930],{"class":100},[94,153104,153105],{"class":209}," \"3\"",[94,153107,3720],{"class":104},[94,153109,153110],{"class":96,"line":33176},[94,153111,153112],{"class":104},"            update_student(students)\n",[94,153114,153115,153117,153119,153121,153124],{"class":96,"line":33181},[94,153116,153080],{"class":100},[94,153118,153063],{"class":104},[94,153120,2930],{"class":100},[94,153122,153123],{"class":209}," \"4\"",[94,153125,3720],{"class":104},[94,153127,153128],{"class":96,"line":33187},[94,153129,153130],{"class":104},"            query_student(students)\n",[94,153132,153133,153135,153137,153139,153142],{"class":96,"line":33206},[94,153134,153080],{"class":100},[94,153136,153063],{"class":104},[94,153138,2930],{"class":100},[94,153140,153141],{"class":209}," \"5\"",[94,153143,3720],{"class":104},[94,153145,153146],{"class":96,"line":33212},[94,153147,153148],{"class":104},"            show_all_students(students)\n",[94,153150,153151,153153,153155,153157,153160],{"class":96,"line":33232},[94,153152,153080],{"class":100},[94,153154,153063],{"class":104},[94,153156,2930],{"class":100},[94,153158,153159],{"class":209}," \"0\"",[94,153161,3720],{"class":104},[94,153163,153164,153166,153168,153171],{"class":96,"line":33238},[94,153165,34633],{"class":153},[94,153167,105],{"class":104},[94,153169,153170],{"class":209},"\"退出系统\"",[94,153172,111],{"class":104},[94,153174,153175],{"class":96,"line":33244},[94,153176,115075],{"class":100},[94,153178,153179,153181],{"class":96,"line":33254},[94,153180,2515],{"class":100},[94,153182,3720],{"class":104},[94,153184,153185,153187,153189,153192],{"class":96,"line":33259},[94,153186,34633],{"class":153},[94,153188,105],{"class":104},[94,153190,153191],{"class":209},"\"输入错误\"",[94,153193,111],{"class":104},[94,153195,153196],{"class":96,"line":33265},[94,153197,2381],{"emptyLinePlaceholder":20},[94,153199,153200],{"class":96,"line":33281},[94,153201,2381],{"emptyLinePlaceholder":20},[94,153203,153204,153206,153208,153210,153212],{"class":96,"line":33326},[94,153205,1512],{"class":100},[94,153207,31203],{"class":153},[94,153209,101536],{"class":100},[94,153211,101539],{"class":209},[94,153213,3720],{"class":104},[94,153215,153216],{"class":96,"line":33332},[94,153217,101546],{"class":104},[40,153219,153220],{},"这个项目串联了：",[48,153222,153223,153226,153229,153232,153235,153237],{},[51,153224,153225],{},"菜单循环。",[51,153227,153228],{},"函数封装。",[51,153230,153231],{},"列表字典。",[51,153233,153234],{},"JSON 读写。",[51,153236,151704],{},[51,153238,153239,28368],{},[91,153240,153241],{},"if __name__ == \"__main__\"",[35,153243,153245],{"id":153244},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[40,153247,153248],{},"可以进一步拆成两个类：",[48,153250,153251,153256],{},[51,153252,153253,153255],{},[91,153254,149545],{},"：表示单个学生。",[51,153257,153258,153260],{},[91,153259,151571],{},"：负责学生增删改查和文件保存。",[40,153262,153263],{},"示意代码：",[85,153265,153267],{"className":30361,"code":153266,"language":30363,"meta":14,"style":14},"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",[91,153268,153269,153279,153283,153287,153291,153299,153306,153312,153318,153324,153328,153336,153342,153352,153362,153372,153382,153386,153390,153396,153404,153412,153420,153428,153436,153444],{"__ignoreMap":14},[94,153270,153271,153273,153275,153277],{"class":96,"line":97},[94,153272,30720],{"class":100},[94,153274,151129],{"class":104},[94,153276,30375],{"class":100},[94,153278,151134],{"class":104},[94,153280,153281],{"class":96,"line":15},[94,153282,2381],{"emptyLinePlaceholder":20},[94,153284,153285],{"class":96,"line":1160},[94,153286,2381],{"emptyLinePlaceholder":20},[94,153288,153289],{"class":96,"line":1175},[94,153290,151147],{"class":1944},[94,153292,153293,153295,153297],{"class":96,"line":1181},[94,153294,14676],{"class":100},[94,153296,7880],{"class":1944},[94,153298,3720],{"class":104},[94,153300,153301,153304],{"class":96,"line":1195},[94,153302,153303],{"class":104},"    student_id: ",[94,153305,151163],{"class":153},[94,153307,153308,153310],{"class":96,"line":1201},[94,153309,151160],{"class":104},[94,153311,151163],{"class":153},[94,153313,153314,153316],{"class":96,"line":1292},[94,153315,151168],{"class":104},[94,153317,151171],{"class":153},[94,153319,153320,153322],{"class":96,"line":1298},[94,153321,151176],{"class":104},[94,153323,151179],{"class":153},[94,153325,153326],{"class":96,"line":1310},[94,153327,2381],{"emptyLinePlaceholder":20},[94,153329,153330,153332,153334],{"class":96,"line":1593},[94,153331,30784],{"class":100},[94,153333,151327],{"class":1944},[94,153335,30790],{"class":104},[94,153337,153338,153340],{"class":96,"line":1598},[94,153339,14734],{"class":100},[94,153341,15554],{"class":104},[94,153343,153344,153346,153348,153350],{"class":96,"line":1604},[94,153345,151340],{"class":209},[94,153347,51414],{"class":104},[94,153349,30806],{"class":153},[94,153351,151347],{"class":104},[94,153353,153354,153356,153358,153360],{"class":96,"line":1609},[94,153355,151352],{"class":209},[94,153357,51414],{"class":104},[94,153359,30806],{"class":153},[94,153361,151359],{"class":104},[94,153363,153364,153366,153368,153370],{"class":96,"line":1623},[94,153365,151364],{"class":209},[94,153367,51414],{"class":104},[94,153369,30806],{"class":153},[94,153371,151371],{"class":104},[94,153373,153374,153376,153378,153380],{"class":96,"line":1628},[94,153375,151376],{"class":209},[94,153377,51414],{"class":104},[94,153379,30806],{"class":153},[94,153381,151383],{"class":104},[94,153383,153384],{"class":96,"line":1634},[94,153385,2510],{"class":104},[94,153387,153388],{"class":96,"line":1655},[94,153389,2381],{"emptyLinePlaceholder":20},[94,153391,153392,153394],{"class":96,"line":1660},[94,153393,150991],{"class":1944},[94,153395,150994],{"class":153},[94,153397,153398,153400,153402],{"class":96,"line":1674},[94,153399,30784],{"class":100},[94,153401,151404],{"class":1944},[94,153403,151407],{"class":104},[94,153405,153406,153408,153410],{"class":96,"line":1679},[94,153407,14734],{"class":100},[94,153409,151011],{"class":153},[94,153411,151416],{"class":104},[94,153413,153414,153416,153418],{"class":96,"line":1708},[94,153415,151421],{"class":104},[94,153417,151424],{"class":209},[94,153419,87813],{"class":104},[94,153421,153422,153424,153426],{"class":96,"line":1713},[94,153423,151421],{"class":104},[94,153425,62656],{"class":209},[94,153427,87813],{"class":104},[94,153429,153430,153432,153434],{"class":96,"line":1730},[94,153431,151421],{"class":104},[94,153433,69101],{"class":209},[94,153435,87813],{"class":104},[94,153437,153438,153440,153442],{"class":96,"line":1735},[94,153439,151421],{"class":104},[94,153441,151449],{"class":209},[94,153443,87813],{"class":104},[94,153445,153446],{"class":96,"line":1740},[94,153447,38109],{"class":104},[40,153449,153450],{},"管理器示意：",[85,153452,153454],{"className":30361,"code":153453,"language":30363,"meta":14,"style":14},"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",[91,153455,153456,153465,153473,153484,153488,153498,153511,153522,153529,153535,153539,153548,153557,153563,153570],{"__ignoreMap":14},[94,153457,153458,153460,153463],{"class":96,"line":97},[94,153459,14676],{"class":100},[94,153461,153462],{"class":1944}," StudentManager",[94,153464,3720],{"class":104},[94,153466,153467,153469,153471],{"class":96,"line":15},[94,153468,30784],{"class":100},[94,153470,30787],{"class":153},[94,153472,30790],{"class":104},[94,153474,153475,153477,153480,153482],{"class":96,"line":1160},[94,153476,30828],{"class":153},[94,153478,153479],{"class":104},".students ",[94,153481,150],{"class":100},[94,153483,51815],{"class":104},[94,153485,153486],{"class":96,"line":1175},[94,153487,2381],{"emptyLinePlaceholder":20},[94,153489,153490,153492,153495],{"class":96,"line":1181},[94,153491,30784],{"class":100},[94,153493,153494],{"class":1944}," find_by_id",[94,153496,153497],{"class":104},"(self, student_id):\n",[94,153499,153500,153502,153504,153506,153508],{"class":96,"line":1195},[94,153501,3384],{"class":100},[94,153503,152114],{"class":104},[94,153505,26026],{"class":100},[94,153507,38856],{"class":153},[94,153509,153510],{"class":104},".students:\n",[94,153512,153513,153515,153518,153520],{"class":96,"line":1201},[94,153514,4623],{"class":100},[94,153516,153517],{"class":104}," student.student_id ",[94,153519,2930],{"class":100},[94,153521,152135],{"class":104},[94,153523,153524,153527],{"class":96,"line":1292},[94,153525,153526],{"class":100},"                return",[94,153528,152142],{"class":104},[94,153530,153531,153533],{"class":96,"line":1298},[94,153532,14734],{"class":100},[94,153534,152149],{"class":153},[94,153536,153537],{"class":96,"line":1310},[94,153538,2381],{"emptyLinePlaceholder":20},[94,153540,153541,153543,153545],{"class":96,"line":1593},[94,153542,30784],{"class":100},[94,153544,5191],{"class":1944},[94,153546,153547],{"class":104},"(self, student):\n",[94,153549,153550,153552,153554],{"class":96,"line":1598},[94,153551,2478],{"class":100},[94,153553,38856],{"class":153},[94,153555,153556],{"class":104},".find_by_id(student.student_id):\n",[94,153558,153559,153561],{"class":96,"line":1604},[94,153560,15714],{"class":100},[94,153562,125784],{"class":153},[94,153564,153565,153567],{"class":96,"line":1609},[94,153566,30828],{"class":153},[94,153568,153569],{"class":104},".students.append(student)\n",[94,153571,153572,153574],{"class":96,"line":1623},[94,153573,14734],{"class":100},[94,153575,153576],{"class":153}," True\n",[40,153578,153579],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[35,153581,153583],{"id":153582},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[65,153585,153587],{"id":153586},"_1251-数据结构","12.5.1 数据结构",[85,153589,153591],{"className":30361,"code":153590,"language":30363,"meta":14,"style":14},"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",[91,153592,153593,153601,153632,153662,153691,153720],{"__ignoreMap":14},[94,153594,153595,153597,153599],{"class":96,"line":97},[94,153596,148442],{"class":104},[94,153598,150],{"class":100},[94,153600,55424],{"class":104},[94,153602,153603,153605,153607,153609,153611,153613,153616,153618,153621,153623,153625,153627,153630],{"class":96,"line":15},[94,153604,148362],{"class":104},[94,153606,147974],{"class":209},[94,153608,51414],{"class":104},[94,153610,148585],{"class":209},[94,153612,12417],{"class":104},[94,153614,153615],{"class":209},"\"category\"",[94,153617,51414],{"class":104},[94,153619,153620],{"class":209},"\"手机\"",[94,153622,12417],{"class":104},[94,153624,84061],{"class":209},[94,153626,51414],{"class":104},[94,153628,153629],{"class":153},"12000",[94,153631,4911],{"class":104},[94,153633,153634,153636,153638,153640,153642,153644,153646,153648,153651,153653,153655,153657,153660],{"class":96,"line":1160},[94,153635,148362],{"class":104},[94,153637,147974],{"class":209},[94,153639,51414],{"class":104},[94,153641,148585],{"class":209},[94,153643,12417],{"class":104},[94,153645,153615],{"class":209},[94,153647,51414],{"class":104},[94,153649,153650],{"class":209},"\"电脑\"",[94,153652,12417],{"class":104},[94,153654,84061],{"class":209},[94,153656,51414],{"class":104},[94,153658,153659],{"class":153},"18000",[94,153661,4911],{"class":104},[94,153663,153664,153666,153668,153670,153672,153674,153676,153678,153680,153682,153684,153686,153689],{"class":96,"line":1175},[94,153665,148362],{"class":104},[94,153667,147974],{"class":209},[94,153669,51414],{"class":104},[94,153671,148606],{"class":209},[94,153673,12417],{"class":104},[94,153675,153615],{"class":209},[94,153677,51414],{"class":104},[94,153679,153620],{"class":209},[94,153681,12417],{"class":104},[94,153683,84061],{"class":209},[94,153685,51414],{"class":104},[94,153687,153688],{"class":153},"15000",[94,153690,4911],{"class":104},[94,153692,153693,153695,153697,153699,153701,153703,153705,153707,153709,153711,153713,153715,153718],{"class":96,"line":1181},[94,153694,148362],{"class":104},[94,153696,147974],{"class":209},[94,153698,51414],{"class":104},[94,153700,148606],{"class":209},[94,153702,12417],{"class":104},[94,153704,153615],{"class":209},[94,153706,51414],{"class":104},[94,153708,153650],{"class":209},[94,153710,12417],{"class":104},[94,153712,84061],{"class":209},[94,153714,51414],{"class":104},[94,153716,153717],{"class":153},"16000",[94,153719,4911],{"class":104},[94,153721,153722],{"class":96,"line":1195},[94,153723,33229],{"class":104},[65,153725,153727],{"id":153726},"_1252-按日期统计","12.5.2 按日期统计",[85,153729,153731],{"className":30361,"code":153730,"language":30363,"meta":14,"style":14},"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",[91,153732,153733,153742,153746,153757,153771,153784,153803,153807],{"__ignoreMap":14},[94,153734,153735,153738,153740],{"class":96,"line":97},[94,153736,153737],{"class":104},"daily_total ",[94,153739,150],{"class":100},[94,153741,87845],{"class":104},[94,153743,153744],{"class":96,"line":15},[94,153745,2381],{"emptyLinePlaceholder":20},[94,153747,153748,153750,153752,153754],{"class":96,"line":1160},[94,153749,3006],{"class":100},[94,153751,148186],{"class":104},[94,153753,26026],{"class":100},[94,153755,153756],{"class":104}," sales:\n",[94,153758,153759,153762,153764,153767,153769],{"class":96,"line":1175},[94,153760,153761],{"class":104},"    date ",[94,153763,150],{"class":100},[94,153765,153766],{"class":104}," item[",[94,153768,147974],{"class":209},[94,153770,33229],{"class":104},[94,153772,153773,153776,153778,153780,153782],{"class":96,"line":1181},[94,153774,153775],{"class":104},"    amount ",[94,153777,150],{"class":100},[94,153779,153766],{"class":104},[94,153781,84061],{"class":209},[94,153783,33229],{"class":104},[94,153785,153786,153789,153791,153794,153796,153798,153800],{"class":96,"line":1195},[94,153787,153788],{"class":104},"    daily_total[date] ",[94,153790,150],{"class":100},[94,153792,153793],{"class":104}," daily_total.get(date, ",[94,153795,296],{"class":153},[94,153797,13696],{"class":104},[94,153799,586],{"class":100},[94,153801,153802],{"class":104}," amount\n",[94,153804,153805],{"class":96,"line":1201},[94,153806,2381],{"emptyLinePlaceholder":20},[94,153808,153809,153811],{"class":96,"line":1292},[94,153810,30398],{"class":153},[94,153812,153813],{"class":104},"(daily_total)\n",[65,153815,153817],{"id":153816},"_1253-按类别统计","12.5.3 按类别统计",[85,153819,153821],{"className":30361,"code":153820,"language":30363,"meta":14,"style":14},"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",[91,153822,153823,153832,153836,153846,153859,153871,153889,153893],{"__ignoreMap":14},[94,153824,153825,153828,153830],{"class":96,"line":97},[94,153826,153827],{"class":104},"category_total ",[94,153829,150],{"class":100},[94,153831,87845],{"class":104},[94,153833,153834],{"class":96,"line":15},[94,153835,2381],{"emptyLinePlaceholder":20},[94,153837,153838,153840,153842,153844],{"class":96,"line":1160},[94,153839,3006],{"class":100},[94,153841,148186],{"class":104},[94,153843,26026],{"class":100},[94,153845,153756],{"class":104},[94,153847,153848,153851,153853,153855,153857],{"class":96,"line":1175},[94,153849,153850],{"class":104},"    category ",[94,153852,150],{"class":100},[94,153854,153766],{"class":104},[94,153856,153615],{"class":209},[94,153858,33229],{"class":104},[94,153860,153861,153863,153865,153867,153869],{"class":96,"line":1181},[94,153862,153775],{"class":104},[94,153864,150],{"class":100},[94,153866,153766],{"class":104},[94,153868,84061],{"class":209},[94,153870,33229],{"class":104},[94,153872,153873,153876,153878,153881,153883,153885,153887],{"class":96,"line":1195},[94,153874,153875],{"class":104},"    category_total[category] ",[94,153877,150],{"class":100},[94,153879,153880],{"class":104}," category_total.get(category, ",[94,153882,296],{"class":153},[94,153884,13696],{"class":104},[94,153886,586],{"class":100},[94,153888,153802],{"class":104},[94,153890,153891],{"class":96,"line":1201},[94,153892,2381],{"emptyLinePlaceholder":20},[94,153894,153895,153897],{"class":96,"line":1292},[94,153896,30398],{"class":153},[94,153898,153899],{"class":104},"(category_total)\n",[65,153901,153903],{"id":153902},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[85,153905,153907],{"className":30361,"code":153906,"language":30363,"meta":14,"style":14},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[91,153908,153909,153934],{"__ignoreMap":14},[94,153910,153911,153914,153916,153918,153921,153924,153927,153930,153932],{"class":96,"line":97},[94,153912,153913],{"class":104},"top_date, top_amount ",[94,153915,150],{"class":100},[94,153917,5933],{"class":153},[94,153919,153920],{"class":104},"(daily_total.items(), ",[94,153922,153923],{"class":5198},"key",[94,153925,153926],{"class":100},"=lambda",[94,153928,153929],{"class":104}," item: item[",[94,153931,322],{"class":153},[94,153933,4638],{"class":104},[94,153935,153936,153938],{"class":96,"line":15},[94,153937,30398],{"class":153},[94,153939,153940],{"class":104},"(top_date, top_amount)\n",[35,153942,153944],{"id":153943},"_126-绘制柱状图","12.6 绘制柱状图",[85,153946,153948],{"className":30361,"code":153947,"language":30363,"meta":14,"style":14},"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",[91,153949,153950,153964,153975,153979,153987,153999,154011,154022,154026,154030,154040,154051,154065,154070,154087,154104,154120,154124],{"__ignoreMap":14},[94,153951,153952,153954,153956,153958,153960,153962],{"class":96,"line":97},[94,153953,30720],{"class":100},[94,153955,147356],{"class":104},[94,153957,30375],{"class":100},[94,153959,147361],{"class":104},[94,153961,31366],{"class":100},[94,153963,147366],{"class":104},[94,153965,153966,153968,153970,153972],{"class":96,"line":15},[94,153967,30720],{"class":100},[94,153969,147215],{"class":104},[94,153971,30375],{"class":100},[94,153973,153974],{"class":104}," Bar\n",[94,153976,153977],{"class":96,"line":1160},[94,153978,2381],{"emptyLinePlaceholder":20},[94,153980,153981,153983,153985],{"class":96,"line":1175},[94,153982,153827],{"class":104},[94,153984,150],{"class":100},[94,153986,15554],{"class":104},[94,153988,153989,153992,153994,153997],{"class":96,"line":1181},[94,153990,153991],{"class":209},"    \"手机\"",[94,153993,51414],{"class":104},[94,153995,153996],{"class":153},"27000",[94,153998,31449],{"class":104},[94,154000,154001,154004,154006,154009],{"class":96,"line":1195},[94,154002,154003],{"class":209},"    \"电脑\"",[94,154005,51414],{"class":104},[94,154007,154008],{"class":153},"34000",[94,154010,31449],{"class":104},[94,154012,154013,154016,154018,154020],{"class":96,"line":1201},[94,154014,154015],{"class":209},"    \"耳机\"",[94,154017,51414],{"class":104},[94,154019,124376],{"class":153},[94,154021,31449],{"class":104},[94,154023,154024],{"class":96,"line":1292},[94,154025,1546],{"class":104},[94,154027,154028],{"class":96,"line":1298},[94,154029,2381],{"emptyLinePlaceholder":20},[94,154031,154032,154035,154037],{"class":96,"line":1310},[94,154033,154034],{"class":104},"bar ",[94,154036,150],{"class":100},[94,154038,154039],{"class":104}," Bar()\n",[94,154041,154042,154045,154048],{"class":96,"line":1593},[94,154043,154044],{"class":104},"bar.add_xaxis(",[94,154046,154047],{"class":153},"list",[94,154049,154050],{"class":104},"(category_total.keys()))\n",[94,154052,154053,154056,154058,154060,154062],{"class":96,"line":1598},[94,154054,154055],{"class":104},"bar.add_yaxis(",[94,154057,147272],{"class":209},[94,154059,12417],{"class":104},[94,154061,154047],{"class":153},[94,154063,154064],{"class":104},"(category_total.values()))\n",[94,154066,154067],{"class":96,"line":1604},[94,154068,154069],{"class":104},"bar.set_global_opts(\n",[94,154071,154072,154074,154076,154078,154080,154082,154085],{"class":96,"line":1609},[94,154073,147450],{"class":5198},[94,154075,150],{"class":100},[94,154077,147455],{"class":104},[94,154079,51384],{"class":5198},[94,154081,150],{"class":100},[94,154083,154084],{"class":209},"\"品类销售额\"",[94,154086,38030],{"class":104},[94,154088,154089,154091,154093,154095,154097,154099,154102],{"class":96,"line":1623},[94,154090,147469],{"class":5198},[94,154092,150],{"class":100},[94,154094,147474],{"class":104},[94,154096,79787],{"class":5198},[94,154098,150],{"class":100},[94,154100,154101],{"class":209},"\"品类\"",[94,154103,38030],{"class":104},[94,154105,154106,154108,154110,154112,154114,154116,154118],{"class":96,"line":1628},[94,154107,147488],{"class":5198},[94,154109,150],{"class":100},[94,154111,147474],{"class":104},[94,154113,79787],{"class":5198},[94,154115,150],{"class":100},[94,154117,147272],{"class":209},[94,154119,38030],{"class":104},[94,154121,154122],{"class":96,"line":1634},[94,154123,111],{"class":104},[94,154125,154126,154129,154132],{"class":96,"line":1655},[94,154127,154128],{"class":104},"bar.render(",[94,154130,154131],{"class":209},"\"category_sales.html\"",[94,154133,111],{"class":104},[35,154135,154137],{"id":154136},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[40,154139,154140],{},"时间线适合展示不同日期、月份、年份的数据变化。",[85,154142,154144],{"className":30361,"code":154143,"language":30363,"meta":14,"style":14},"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",[91,154145,154146,154160,154171,154175,154183,154207,154230,154255,154259,154263,154273,154277,154288,154297,154307,154321,154352,154357,154361],{"__ignoreMap":14},[94,154147,154148,154150,154152,154154,154156,154158],{"class":96,"line":97},[94,154149,30720],{"class":100},[94,154151,147356],{"class":104},[94,154153,30375],{"class":100},[94,154155,147361],{"class":104},[94,154157,31366],{"class":100},[94,154159,147366],{"class":104},[94,154161,154162,154164,154166,154168],{"class":96,"line":15},[94,154163,30720],{"class":100},[94,154165,147215],{"class":104},[94,154167,30375],{"class":100},[94,154169,154170],{"class":104}," Bar, Timeline\n",[94,154172,154173],{"class":96,"line":1160},[94,154174,2381],{"emptyLinePlaceholder":20},[94,154176,154177,154179,154181],{"class":96,"line":1175},[94,154178,101635],{"class":104},[94,154180,150],{"class":100},[94,154182,15554],{"class":104},[94,154184,154185,154188,154191,154193,154195,154197,154199,154201,154203,154205],{"class":96,"line":1181},[94,154186,154187],{"class":209},"    \"2024-10-01\"",[94,154189,154190],{"class":104},": {",[94,154192,153620],{"class":209},[94,154194,51414],{"class":104},[94,154196,153629],{"class":153},[94,154198,12417],{"class":104},[94,154200,153650],{"class":209},[94,154202,51414],{"class":104},[94,154204,153659],{"class":153},[94,154206,4911],{"class":104},[94,154208,154209,154212,154214,154216,154218,154220,154222,154224,154226,154228],{"class":96,"line":1195},[94,154210,154211],{"class":209},"    \"2024-10-02\"",[94,154213,154190],{"class":104},[94,154215,153620],{"class":209},[94,154217,51414],{"class":104},[94,154219,153688],{"class":153},[94,154221,12417],{"class":104},[94,154223,153650],{"class":209},[94,154225,51414],{"class":104},[94,154227,153717],{"class":153},[94,154229,4911],{"class":104},[94,154231,154232,154235,154237,154239,154241,154244,154246,154248,154250,154253],{"class":96,"line":1201},[94,154233,154234],{"class":209},"    \"2024-10-03\"",[94,154236,154190],{"class":104},[94,154238,153620],{"class":209},[94,154240,51414],{"class":104},[94,154242,154243],{"class":153},"17000",[94,154245,12417],{"class":104},[94,154247,153650],{"class":209},[94,154249,51414],{"class":104},[94,154251,154252],{"class":153},"19000",[94,154254,4911],{"class":104},[94,154256,154257],{"class":96,"line":1292},[94,154258,1546],{"class":104},[94,154260,154261],{"class":96,"line":1298},[94,154262,2381],{"emptyLinePlaceholder":20},[94,154264,154265,154268,154270],{"class":96,"line":1310},[94,154266,154267],{"class":104},"timeline ",[94,154269,150],{"class":100},[94,154271,154272],{"class":104}," Timeline()\n",[94,154274,154275],{"class":96,"line":1593},[94,154276,2381],{"emptyLinePlaceholder":20},[94,154278,154279,154281,154284,154286],{"class":96,"line":1598},[94,154280,3006],{"class":100},[94,154282,154283],{"class":104}," date, category_data ",[94,154285,26026],{"class":100},[94,154287,149125],{"class":104},[94,154289,154290,154293,154295],{"class":96,"line":1604},[94,154291,154292],{"class":104},"    bar ",[94,154294,150],{"class":100},[94,154296,154039],{"class":104},[94,154298,154299,154302,154304],{"class":96,"line":1609},[94,154300,154301],{"class":104},"    bar.add_xaxis(",[94,154303,154047],{"class":153},[94,154305,154306],{"class":104},"(category_data.keys()))\n",[94,154308,154309,154312,154314,154316,154318],{"class":96,"line":1623},[94,154310,154311],{"class":104},"    bar.add_yaxis(",[94,154313,147272],{"class":209},[94,154315,12417],{"class":104},[94,154317,154047],{"class":153},[94,154319,154320],{"class":104},"(category_data.values()))\n",[94,154322,154323,154326,154329,154331,154333,154335,154337,154339,154341,154343,154345,154347,154350],{"class":96,"line":1628},[94,154324,154325],{"class":104},"    bar.set_global_opts(",[94,154327,154328],{"class":5198},"title_opts",[94,154330,150],{"class":100},[94,154332,147455],{"class":104},[94,154334,51384],{"class":5198},[94,154336,150],{"class":100},[94,154338,157],{"class":100},[94,154340,356],{"class":209},[94,154342,1001],{"class":153},[94,154344,73903],{"class":104},[94,154346,1051],{"class":153},[94,154348,154349],{"class":209},"销售额\"",[94,154351,30480],{"class":104},[94,154353,154354],{"class":96,"line":1634},[94,154355,154356],{"class":104},"    timeline.add(bar, date)\n",[94,154358,154359],{"class":96,"line":1655},[94,154360,2381],{"emptyLinePlaceholder":20},[94,154362,154363,154366,154369],{"class":96,"line":1660},[94,154364,154365],{"class":104},"timeline.render(",[94,154367,154368],{"class":209},"\"timeline_sales.html\"",[94,154370,111],{"class":104},[35,154372,154374],{"id":154373},"_128-绘制地图","12.8 绘制地图",[40,154376,154377],{},"地图适合展示地区数据。",[85,154379,154381],{"className":30361,"code":154380,"language":30363,"meta":14,"style":14},"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",[91,154382,154383,154397,154408,154412,154420,154433,154445,154458,154471,154475,154479,154489,154504,154509,154526,154545,154549],{"__ignoreMap":14},[94,154384,154385,154387,154389,154391,154393,154395],{"class":96,"line":97},[94,154386,30720],{"class":100},[94,154388,147356],{"class":104},[94,154390,30375],{"class":100},[94,154392,147361],{"class":104},[94,154394,31366],{"class":100},[94,154396,147366],{"class":104},[94,154398,154399,154401,154403,154405],{"class":96,"line":15},[94,154400,30720],{"class":100},[94,154402,147215],{"class":104},[94,154404,30375],{"class":100},[94,154406,154407],{"class":104}," Map\n",[94,154409,154410],{"class":96,"line":1160},[94,154411,2381],{"emptyLinePlaceholder":20},[94,154413,154414,154416,154418],{"class":96,"line":1175},[94,154415,101635],{"class":104},[94,154417,150],{"class":100},[94,154419,55424],{"class":104},[94,154421,154422,154425,154427,154429,154431],{"class":96,"line":1181},[94,154423,154424],{"class":104},"    (",[94,154426,69246],{"class":209},[94,154428,12417],{"class":104},[94,154430,922],{"class":153},[94,154432,38030],{"class":104},[94,154434,154435,154437,154439,154441,154443],{"class":96,"line":1195},[94,154436,154424],{"class":104},[94,154438,69266],{"class":209},[94,154440,12417],{"class":104},[94,154442,147289],{"class":153},[94,154444,38030],{"class":104},[94,154446,154447,154449,154452,154454,154456],{"class":96,"line":1201},[94,154448,154424],{"class":104},[94,154450,154451],{"class":209},"\"广东\"",[94,154453,12417],{"class":104},[94,154455,1703],{"class":153},[94,154457,38030],{"class":104},[94,154459,154460,154462,154465,154467,154469],{"class":96,"line":1292},[94,154461,154424],{"class":104},[94,154463,154464],{"class":209},"\"浙江\"",[94,154466,12417],{"class":104},[94,154468,147294],{"class":153},[94,154470,38030],{"class":104},[94,154472,154473],{"class":96,"line":1298},[94,154474,33229],{"class":104},[94,154476,154477],{"class":96,"line":1310},[94,154478,2381],{"emptyLinePlaceholder":20},[94,154480,154481,154484,154486],{"class":96,"line":1593},[94,154482,154483],{"class":104},"map_chart ",[94,154485,150],{"class":100},[94,154487,154488],{"class":104}," Map()\n",[94,154490,154491,154494,154496,154499,154502],{"class":96,"line":1598},[94,154492,154493],{"class":104},"map_chart.add(",[94,154495,147272],{"class":209},[94,154497,154498],{"class":104},", data, ",[94,154500,154501],{"class":209},"\"china\"",[94,154503,111],{"class":104},[94,154505,154506],{"class":96,"line":1604},[94,154507,154508],{"class":104},"map_chart.set_global_opts(\n",[94,154510,154511,154513,154515,154517,154519,154521,154524],{"class":96,"line":1609},[94,154512,147450],{"class":5198},[94,154514,150],{"class":100},[94,154516,147455],{"class":104},[94,154518,51384],{"class":5198},[94,154520,150],{"class":100},[94,154522,154523],{"class":209},"\"地区销售额\"",[94,154525,38030],{"class":104},[94,154527,154528,154531,154533,154536,154539,154541,154543],{"class":96,"line":1623},[94,154529,154530],{"class":5198},"    visualmap_opts",[94,154532,150],{"class":100},[94,154534,154535],{"class":104},"opts.VisualMapOpts(",[94,154537,154538],{"class":5198},"max_",[94,154540,150],{"class":100},[94,154542,1703],{"class":153},[94,154544,38030],{"class":104},[94,154546,154547],{"class":96,"line":1628},[94,154548,111],{"class":104},[94,154550,154551,154554,154557],{"class":96,"line":1634},[94,154552,154553],{"class":104},"map_chart.render(",[94,154555,154556],{"class":209},"\"map_sales.html\"",[94,154558,111],{"class":104},[40,154560,154561],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[35,154563,154565],{"id":154564},"_129-项目拆分建议","12.9 项目拆分建议",[40,154567,154568],{},"当代码超过一个文件时，可以这样组织：",[85,154570,154573],{"className":154571,"code":154572,"language":5169,"meta":14},[5167],"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",[91,154574,154572],{"__ignoreMap":14},[40,154576,154577],{},"职责：",[48,154579,154580,154586,154592,154598],{},[51,154581,154582,154585],{},[91,154583,154584],{},"main.py","：程序入口。",[51,154587,154588,154591],{},[91,154589,154590],{},"file_utils.py","：读写 JSON。",[51,154593,154594,154597],{},[91,154595,154596],{},"sales_service.py","：统计销售数据。",[51,154599,154600,154603],{},[91,154601,154602],{},"chart_builder.py","：生成图表。",[35,154605,154607],{"id":154606},"_1210-python基础复习清单","12.10 Python基础复习清单",[40,154609,154610],{},"语法基础：",[48,154612,154613,154616,154619,154622],{},[51,154614,154615],{},"会写变量、注释、输入输出。",[51,154617,154618],{},"会使用 int、float、str、bool。",[51,154620,154621],{},"会做类型转换。",[51,154623,154624],{},"会使用 f-string 格式化输出。",[40,154626,154627],{},"流程控制：",[48,154629,154630,154636,154642,154650],{},[51,154631,154632,154633,28368],{},"会写 ",[91,154634,154635],{},"if elif else",[51,154637,154632,154638,100995,154640,28368],{},[91,154639,108640],{},[91,154641,3006],{},[51,154643,154644,154645,100995,154647,28368],{},"理解 ",[91,154646,2034],{},[91,154648,154649],{},"continue",[51,154651,154652],{},"能写嵌套循环。",[40,154654,154655],{},"函数：",[48,154657,154658,154661,154664,154667],{},[51,154659,154660],{},"会定义和调用函数。",[51,154662,154663],{},"理解参数和返回值。",[51,154665,154666],{},"知道局部变量和全局变量。",[51,154668,154669],{},"会使用默认参数、关键字参数、不定长参数。",[40,154671,154672],{},"容器：",[48,154674,154675,154678,154681,154684,154687],{},[51,154676,154677],{},"会使用列表增删改查。",[51,154679,154680],{},"会遍历列表、字典。",[51,154682,154683],{},"会使用切片。",[51,154685,154686],{},"会用集合去重。",[51,154688,154689],{},"会处理列表嵌套字典。",[40,154691,154692],{},"文件和模块：",[48,154694,154695,154698,154701,154704,154707],{},[51,154696,154697],{},"会读写文本文件。",[51,154699,154700],{},"会读写 JSON。",[51,154702,154703],{},"会捕获常见异常。",[51,154705,154706],{},"会导入模块和第三方包。",[51,154708,154709],{},"会创建简单包结构。",[40,154711,154712],{},"项目能力：",[48,154714,154715,154718,154721,154724,154727],{},[51,154716,154717],{},"能把代码拆成函数。",[51,154719,154720],{},"能把数据保存到文件。",[51,154722,154723],{},"能处理用户输入错误。",[51,154725,154726],{},"能写一个完整菜单程序。",[51,154728,154729],{},"能用 pyecharts 生成图表。",[35,154731,154733],{"id":154732},"_1211-推荐练习顺序","12.11 推荐练习顺序",[48,154735,154736,154739,154742,154745,154748,154751,154754,154757],{},[51,154737,154738],{},"猜数字游戏。",[51,154740,154741],{},"ATM 菜单程序。",[51,154743,154744],{},"学生成绩统计。",[51,154746,154747],{},"学生管理系统函数版。",[51,154749,154750],{},"学生管理系统文件持久化版。",[51,154752,154753],{},"学生管理系统面向对象版。",[51,154755,154756],{},"销售数据统计。",[51,154758,154759],{},"销售数据可视化。",[35,154761,154763],{"id":154762},"_1212-常见学习误区","12.12 常见学习误区",[48,154765,154766,154769,154772,154775,154778,154781,154784],{},[51,154767,154768],{},"只看视频不敲代码。",[51,154770,154771],{},"一报错就复制错误去搜，不先读报错位置。",[51,154773,154774],{},"变量名随便写，后续自己看不懂。",[51,154776,154777],{},"所有代码都写在一个文件一个函数里。",[51,154779,154780],{},"不保存练习代码，复习时没有材料。",[51,154782,154783],{},"还没掌握列表字典就急着学框架。",[51,154785,154786],{},"不会读官方文档，只依赖教程。",[35,154788,154790],{"id":154789},"_1213-如何读报错","12.13 如何读报错",[40,154792,154793],{},"报错通常从下往上看最后几行。",[40,154795,15117],{},[85,154797,154800],{"className":154798,"code":154799,"language":5169,"meta":14},[5167],"ValueError: invalid literal for int() with base 10: 'abc'\n",[91,154801,154799],{"__ignoreMap":14},[40,154803,24582],{},[48,154805,154806,154812,154822],{},[51,154807,154808,154809,28368],{},"异常类型是 ",[91,154810,154811],{},"ValueError",[51,154813,107322,154814,154817,154818,154821],{},[91,154815,154816],{},"int()"," 无法把 ",[91,154819,154820],{},"'abc'"," 转成整数。",[51,154823,154824],{},"应该检查输入内容或增加异常处理。",[40,154826,154827],{},"再看文件名和行号：",[85,154829,154832],{"className":154830,"code":154831,"language":5169,"meta":14},[5167],"File \"main.py\", line 10, in \u003Cmodule>\n",[91,154833,154831],{"__ignoreMap":14},[40,154835,154836,154837,154839],{},"表示错误发生在 ",[91,154838,154584],{}," 第 10 行。",[35,154841,154843],{"id":154842},"_1214-后续学习方向","12.14 后续学习方向",[40,154845,154846],{},"Python 基础完成后，可以按兴趣选择方向：",[48,154848,154849,154861,154870,154882,154893,154902,154912],{},[51,154850,154851,154852,317,154855,317,154858,28368],{},"自动化办公：",[91,154853,154854],{},"openpyxl",[91,154856,154857],{},"python-docx",[91,154859,154860],{},"pdfplumber",[51,154862,154863,154864,317,154866,317,154868,28368],{},"数据分析：",[91,154865,100603],{},[91,154867,146162],{},[91,154869,146170],{},[51,154871,154872,154873,317,154876,317,154879,28368],{},"Web 后端：",[91,154874,154875],{},"Flask",[91,154877,154878],{},"FastAPI",[91,154880,154881],{},"Django",[51,154883,154884,154885,317,154887,317,154890,28368],{},"爬虫：",[91,154886,146147],{},[91,154888,154889],{},"BeautifulSoup",[91,154891,154892],{},"Scrapy",[51,154894,154895,154896,317,154898,154901],{},"测试开发：",[91,154897,146194],{},[91,154899,154900],{},"selenium","、接口测试。",[51,154903,154904,154905,317,154907,317,154909,28368],{},"人工智能：",[91,154906,100603],{},[91,154908,146162],{},[91,154910,154911],{},"pytorch",[51,154913,154914,154915,317,154917,317,154920,28368],{},"运维脚本：",[91,154916,145763],{},[91,154918,154919],{},"subprocess",[91,154921,154922],{},"paramiko",[40,154924,154925],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[35,154927,154929],{"id":154928},"_1215-结课练习","12.15 结课练习",[48,154931,154932,154935,154938,154941,154944,154947,154950,154953],{},[51,154933,154934],{},"完成函数版学生管理系统。",[51,154936,154937],{},"给学生管理系统增加 JSON 持久化。",[51,154939,154940],{},"给学生管理系统增加异常处理。",[51,154942,154943],{},"把学生管理系统改成面向对象版。",[51,154945,154946],{},"使用 pyecharts 绘制学生成绩柱状图。",[51,154948,154949],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[51,154951,154952],{},"按品类统计销售额并绘制柱状图。",[51,154954,154955],{},"写一份自己的 Python 学习路线图。",[5108,154957,154958],{},"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":14,"searchDepth":15,"depth":15,"links":154960},[154961,154962,154965,154966,154967,154973,154974,154975,154976,154977,154978,154979,154980,154981,154982],{"id":151677,"depth":15,"text":151678},{"id":151727,"depth":15,"text":151728,"children":154963},[154964],{"id":151731,"depth":1160,"text":151732},{"id":151770,"depth":15,"text":151771},{"id":153244,"depth":15,"text":153245},{"id":153582,"depth":15,"text":153583,"children":154968},[154969,154970,154971,154972],{"id":153586,"depth":1160,"text":153587},{"id":153726,"depth":1160,"text":153727},{"id":153816,"depth":1160,"text":153817},{"id":153902,"depth":1160,"text":153903},{"id":153943,"depth":15,"text":153944},{"id":154136,"depth":15,"text":154137},{"id":154373,"depth":15,"text":154374},{"id":154564,"depth":15,"text":154565},{"id":154606,"depth":15,"text":154607},{"id":154732,"depth":15,"text":154733},{"id":154762,"depth":15,"text":154763},{"id":154789,"depth":15,"text":154790},{"id":154842,"depth":15,"text":154843},{"id":154928,"depth":15,"text":154929},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151669,"description":17},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":154989,"title":154990,"body":154991,"description":17,"extension":18,"meta":157460,"navigation":20,"path":157461,"seo":157462,"stem":157463,"__hash__":157464},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":154992,"toc":157435},[154993,154996,155000,155003,155006,155026,155029,155052,155055,155058,155080,155083,155105,155109,155112,155152,155155,155276,155280,155283,155323,155326,155350,155353,155357,155360,155374,155407,155410,155445,155448,155471,155474,155507,155510,155512,155518,155593,155596,155602,155619,155659,155663,155666,155712,155714,155752,155755,155790,155793,155828,155831,155863,155866,155885,155889,155893,156006,156008,156083,156087,156133,156136,156162,156171,156175,156178,156241,156249,156277,156281,156321,156386,156390,156393,156432,156435,156480,156483,156544,156548,156575,156578,156606,156609,156613,156617,156682,156685,156723,156726,156758,156762,156861,156865,156868,156941,156944,156992,156996,157002,157042,157045,157092,157095,157144,157148,157150,157164,157166,157347,157351,157378,157398,157405,157409,157426,157432],[10,154994,154990],{"id":154995},"_2-基础语法变量与字符串",[35,154997,154999],{"id":154998},"_21-注释","2.1 注释",[40,155001,155002],{},"注释是给人看的说明文字，不会被 Python 执行。",[40,155004,155005],{},"单行注释：",[85,155007,155009],{"className":30361,"code":155008,"language":30363,"meta":14,"style":14},"# 这是单行注释\nprint(\"hello\")\n",[91,155010,155011,155016],{"__ignoreMap":14},[94,155012,155013],{"class":96,"line":97},[94,155014,155015],{"class":163},"# 这是单行注释\n",[94,155017,155018,155020,155022,155024],{"class":96,"line":15},[94,155019,30398],{"class":153},[94,155021,105],{"class":104},[94,155023,5826],{"class":209},[94,155025,111],{"class":104},[40,155027,155028],{},"多行说明常用三引号：",[85,155030,155032],{"className":30361,"code":155031,"language":30363,"meta":14,"style":14},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[91,155033,155034,155038,155043,155048],{"__ignoreMap":14},[94,155035,155036],{"class":96,"line":97},[94,155037,95675],{"class":209},[94,155039,155040],{"class":96,"line":15},[94,155041,155042],{"class":209},"这是多行说明。\n",[94,155044,155045],{"class":96,"line":1160},[94,155046,155047],{"class":209},"常用于文件顶部说明、函数说明等。\n",[94,155049,155050],{"class":96,"line":1175},[94,155051,95675],{"class":209},[40,155053,155054],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[40,155056,155057],{},"不好：",[85,155059,155061],{"className":30361,"code":155060,"language":30363,"meta":14,"style":14},"# age 加 1\nage = age + 1\n",[91,155062,155063,155068],{"__ignoreMap":14},[94,155064,155065],{"class":96,"line":97},[94,155066,155067],{"class":163},"# age 加 1\n",[94,155069,155070,155072,155074,155076,155078],{"class":96,"line":15},[94,155071,146523],{"class":104},[94,155073,150],{"class":100},[94,155075,15689],{"class":104},[94,155077,586],{"class":100},[94,155079,55676],{"class":153},[40,155081,155082],{},"较好：",[85,155084,155086],{"className":30361,"code":155085,"language":30363,"meta":14,"style":14},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[91,155087,155088,155093],{"__ignoreMap":14},[94,155089,155090],{"class":96,"line":97},[94,155091,155092],{"class":163},"# 用户过完生日后，年龄增加一岁\n",[94,155094,155095,155097,155099,155101,155103],{"class":96,"line":15},[94,155096,146523],{"class":104},[94,155098,150],{"class":100},[94,155100,15689],{"class":104},[94,155102,586],{"class":100},[94,155104,55676],{"class":153},[35,155106,155108],{"id":155107},"_22-字面量","2.2 字面量",[40,155110,155111],{},"字面量就是代码中直接写出来的数据。",[85,155113,155115],{"className":30361,"code":155114,"language":30363,"meta":14,"style":14},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[91,155116,155117,155124,155131,155138,155145],{"__ignoreMap":14},[94,155118,155119,155121],{"class":96,"line":97},[94,155120,416],{"class":153},[94,155122,155123],{"class":163},"          # 整数\n",[94,155125,155126,155128],{"class":96,"line":15},[94,155127,154],{"class":153},[94,155129,155130],{"class":163},"         # 小数\n",[94,155132,155133,155135],{"class":96,"line":1160},[94,155134,5826],{"class":209},[94,155136,155137],{"class":163},"      # 字符串\n",[94,155139,155140,155142],{"class":96,"line":1175},[94,155141,31459],{"class":153},[94,155143,155144],{"class":163},"         # 布尔值\n",[94,155146,155147,155149],{"class":96,"line":1181},[94,155148,95663],{"class":153},[94,155150,155151],{"class":163},"         # 空值\n",[40,155153,155154],{},"常见字面量类型：",[242,155156,155157,155167],{},[245,155158,155159],{},[248,155160,155161,155163,155165],{},[251,155162,23719],{},[251,155164,27475],{},[251,155166,25852],{},[289,155168,155169,155180,155191,155202,155214,155226,155238,155251,155263],{},[248,155170,155171,155173,155177],{},[294,155172,108],{},[294,155174,155175],{},[91,155176,416],{},[294,155178,155179],{},"整数",[248,155181,155182,155184,155188],{},[294,155183,144],{},[294,155185,155186],{},[91,155187,154],{},[294,155189,155190],{},"浮点数",[248,155192,155193,155195,155199],{},[294,155194,1280],{},[294,155196,155197],{},[91,155198,5826],{},[294,155200,155201],{},"字符串",[248,155203,155204,155206,155212],{},[294,155205,1335],{},[294,155207,155208,317,155210],{},[91,155209,31459],{},[91,155211,33970],{},[294,155213,65992],{},[248,155215,155216,155219,155223],{},[294,155217,155218],{},"NoneType",[294,155220,155221],{},[91,155222,95663],{},[294,155224,155225],{},"空值",[248,155227,155228,155230,155235],{},[294,155229,154047],{},[294,155231,155232],{},[91,155233,155234],{},"[1, 2, 3]",[294,155236,155237],{},"列表",[248,155239,155240,155243,155248],{},[294,155241,155242],{},"tuple",[294,155244,155245],{},[91,155246,155247],{},"(1, 2, 3)",[294,155249,155250],{},"元组",[248,155252,155253,155255,155260],{},[294,155254,114523],{},[294,155256,155257],{},[91,155258,155259],{},"{\"name\": \"张三\"}",[294,155261,155262],{},"字典",[248,155264,155265,155268,155273],{},[294,155266,155267],{},"set",[294,155269,155270],{},[91,155271,155272],{},"{1, 2, 3}",[294,155274,155275],{},"集合",[35,155277,155279],{"id":155278},"_23-变量","2.3 变量",[40,155281,155282],{},"变量是保存数据的名字。",[85,155284,155286],{"className":30361,"code":155285,"language":30363,"meta":14,"style":14},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[91,155287,155288,155296,155304,155314],{"__ignoreMap":14},[94,155289,155290,155292,155294],{"class":96,"line":97},[94,155291,146513],{"class":104},[94,155293,150],{"class":100},[94,155295,149330],{"class":209},[94,155297,155298,155300,155302],{"class":96,"line":15},[94,155299,146523],{"class":104},[94,155301,150],{"class":100},[94,155303,146528],{"class":153},[94,155305,155306,155309,155311],{"class":96,"line":1160},[94,155307,155308],{"class":104},"height ",[94,155310,150],{"class":100},[94,155312,155313],{"class":153}," 1.75\n",[94,155315,155316,155319,155321],{"class":96,"line":1175},[94,155317,155318],{"class":104},"is_student ",[94,155320,150],{"class":100},[94,155322,153576],{"class":153},[40,155324,155325],{},"Python 的变量不需要提前声明类型：",[85,155327,155329],{"className":30361,"code":155328,"language":30363,"meta":14,"style":14},"score = 100\nscore = \"满分\"\n",[91,155330,155331,155341],{"__ignoreMap":14},[94,155332,155333,155336,155338],{"class":96,"line":97},[94,155334,155335],{"class":104},"score ",[94,155337,150],{"class":100},[94,155339,155340],{"class":153}," 100\n",[94,155342,155343,155345,155347],{"class":96,"line":15},[94,155344,155335],{"class":104},[94,155346,150],{"class":100},[94,155348,155349],{"class":209}," \"满分\"\n",[40,155351,155352],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[35,155354,155356],{"id":155355},"_24-变量命名规则","2.4 变量命名规则",[40,155358,155359],{},"硬性规则：",[48,155361,155362,155365,155368,155371],{},[51,155363,155364],{},"只能由字母、数字、下划线组成。",[51,155366,155367],{},"不能以数字开头。",[51,155369,155370],{},"不能使用 Python 关键字。",[51,155372,155373],{},"区分大小写。",[85,155375,155377],{"className":30361,"code":155376,"language":30363,"meta":14,"style":14},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[91,155378,155379,155388,155397],{"__ignoreMap":14},[94,155380,155381,155384,155386],{"class":96,"line":97},[94,155382,155383],{"class":104},"user_name ",[94,155385,150],{"class":100},[94,155387,146518],{"class":209},[94,155389,155390,155393,155395],{"class":96,"line":15},[94,155391,155392],{"class":104},"age2 ",[94,155394,150],{"class":100},[94,155396,146528],{"class":153},[94,155398,155399,155402,155404],{"class":96,"line":1160},[94,155400,155401],{"class":104},"_token ",[94,155403,150],{"class":100},[94,155405,155406],{"class":209}," \"abc\"\n",[40,155408,155409],{},"错误写法：",[85,155411,155413],{"className":30361,"code":155412,"language":30363,"meta":14,"style":14},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[91,155414,155415,155424,155436],{"__ignoreMap":14},[94,155416,155417,155420,155422],{"class":96,"line":97},[94,155418,155419],{"class":77380},"2age",[94,155421,13546],{"class":100},[94,155423,146528],{"class":153},[94,155425,155426,155428,155430,155432,155434],{"class":96,"line":15},[94,155427,131561],{"class":104},[94,155429,637],{"class":100},[94,155431,146513],{"class":104},[94,155433,150],{"class":100},[94,155435,146518],{"class":209},[94,155437,155438,155440,155442],{"class":96,"line":1160},[94,155439,14676],{"class":100},[94,155441,13546],{"class":100},[94,155443,155444],{"class":209}," \"一班\"\n",[40,155446,155447],{},"查看关键字：",[85,155449,155451],{"className":30361,"code":155450,"language":30363,"meta":14,"style":14},"import keyword\n\nprint(keyword.kwlist)\n",[91,155452,155453,155460,155464],{"__ignoreMap":14},[94,155454,155455,155457],{"class":96,"line":97},[94,155456,30375],{"class":100},[94,155458,155459],{"class":104}," keyword\n",[94,155461,155462],{"class":96,"line":15},[94,155463,2381],{"emptyLinePlaceholder":20},[94,155465,155466,155468],{"class":96,"line":1160},[94,155467,30398],{"class":153},[94,155469,155470],{"class":104},"(keyword.kwlist)\n",[40,155472,155473],{},"推荐命名风格：",[85,155475,155477],{"className":30361,"code":155476,"language":30363,"meta":14,"style":14},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[91,155478,155479,155488,155498],{"__ignoreMap":14},[94,155480,155481,155484,155486],{"class":96,"line":97},[94,155482,155483],{"class":104},"student_name ",[94,155485,150],{"class":100},[94,155487,149330],{"class":209},[94,155489,155490,155493,155495],{"class":96,"line":15},[94,155491,155492],{"class":104},"total_price ",[94,155494,150],{"class":100},[94,155496,155497],{"class":153}," 99.8\n",[94,155499,155500,155503,155505],{"class":96,"line":1160},[94,155501,155502],{"class":104},"is_finished ",[94,155504,150],{"class":100},[94,155506,125784],{"class":153},[40,155508,155509],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[35,155511,50709],{"id":50708},[40,155513,104343,155514,155517],{},[91,155515,155516],{},"type()"," 查看数据类型：",[85,155519,155521],{"className":30361,"code":155520,"language":30363,"meta":14,"style":14},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[91,155522,155523,155537,155551,155565,155579],{"__ignoreMap":14},[94,155524,155525,155527,155529,155531,155533,155535],{"class":96,"line":97},[94,155526,30398],{"class":153},[94,155528,105],{"class":104},[94,155530,103084],{"class":153},[94,155532,105],{"class":104},[94,155534,416],{"class":153},[94,155536,30480],{"class":104},[94,155538,155539,155541,155543,155545,155547,155549],{"class":96,"line":15},[94,155540,30398],{"class":153},[94,155542,105],{"class":104},[94,155544,103084],{"class":153},[94,155546,105],{"class":104},[94,155548,154],{"class":153},[94,155550,30480],{"class":104},[94,155552,155553,155555,155557,155559,155561,155563],{"class":96,"line":1160},[94,155554,30398],{"class":153},[94,155556,105],{"class":104},[94,155558,103084],{"class":153},[94,155560,105],{"class":104},[94,155562,5826],{"class":209},[94,155564,30480],{"class":104},[94,155566,155567,155569,155571,155573,155575,155577],{"class":96,"line":1175},[94,155568,30398],{"class":153},[94,155570,105],{"class":104},[94,155572,103084],{"class":153},[94,155574,105],{"class":104},[94,155576,31459],{"class":153},[94,155578,30480],{"class":104},[94,155580,155581,155583,155585,155587,155589,155591],{"class":96,"line":1181},[94,155582,30398],{"class":153},[94,155584,105],{"class":104},[94,155586,103084],{"class":153},[94,155588,105],{"class":104},[94,155590,95663],{"class":153},[94,155592,30480],{"class":104},[40,155594,155595],{},"输出类似：",[85,155597,155600],{"className":155598,"code":155599,"language":5169,"meta":14},[5167],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[91,155601,155599],{"__ignoreMap":14},[40,155603,9007,155604,107260,155606,155608,155609,155611,155612,21482,155614,155611,155616,155618],{},[91,155605,1335],{},[91,155607,108],{}," 的子类，",[91,155610,31459],{}," 可以当作 ",[91,155613,322],{},[91,155615,33970],{},[91,155617,296],{},"，但业务代码中不要滥用。",[85,155620,155622],{"className":30361,"code":155621,"language":30363,"meta":14,"style":14},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[91,155623,155624,155642],{"__ignoreMap":14},[94,155625,155626,155628,155630,155632,155634,155636,155639],{"class":96,"line":97},[94,155627,30398],{"class":153},[94,155629,105],{"class":104},[94,155631,31459],{"class":153},[94,155633,45549],{"class":100},[94,155635,25101],{"class":153},[94,155637,155638],{"class":104},")   ",[94,155640,155641],{"class":163},"# 2\n",[94,155643,155644,155646,155648,155650,155652,155654,155656],{"class":96,"line":15},[94,155645,30398],{"class":153},[94,155647,105],{"class":104},[94,155649,33970],{"class":153},[94,155651,45549],{"class":100},[94,155653,25101],{"class":153},[94,155655,45791],{"class":104},[94,155657,155658],{"class":163},"# 1\n",[35,155660,155662],{"id":155661},"_26-类型转换","2.6 类型转换",[40,155664,155665],{},"常用转换函数：",[85,155667,155669],{"className":30361,"code":155668,"language":30363,"meta":14,"style":14},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[91,155670,155671,155681,155692,155702],{"__ignoreMap":14},[94,155672,155673,155675,155677,155679],{"class":96,"line":97},[94,155674,108],{"class":153},[94,155676,105],{"class":104},[94,155678,54293],{"class":209},[94,155680,111],{"class":104},[94,155682,155683,155685,155687,155690],{"class":96,"line":15},[94,155684,144],{"class":153},[94,155686,105],{"class":104},[94,155688,155689],{"class":209},"\"3.14\"",[94,155691,111],{"class":104},[94,155693,155694,155696,155698,155700],{"class":96,"line":1160},[94,155695,1280],{"class":153},[94,155697,105],{"class":104},[94,155699,416],{"class":153},[94,155701,111],{"class":104},[94,155703,155704,155706,155708,155710],{"class":96,"line":1175},[94,155705,1335],{"class":153},[94,155707,105],{"class":104},[94,155709,322],{"class":153},[94,155711,111],{"class":104},[40,155713,15117],{},[85,155715,155717],{"className":30361,"code":155716,"language":30363,"meta":14,"style":14},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[91,155718,155719,155728,155739],{"__ignoreMap":14},[94,155720,155721,155723,155725],{"class":96,"line":97},[94,155722,146523],{"class":104},[94,155724,150],{"class":100},[94,155726,155727],{"class":209}," \"18\"\n",[94,155729,155730,155732,155734,155736],{"class":96,"line":15},[94,155731,146523],{"class":104},[94,155733,150],{"class":100},[94,155735,2363],{"class":153},[94,155737,155738],{"class":104},"(age)\n",[94,155740,155741,155743,155746,155748,155750],{"class":96,"line":1160},[94,155742,30398],{"class":153},[94,155744,155745],{"class":104},"(age ",[94,155747,586],{"class":100},[94,155749,25101],{"class":153},[94,155751,111],{"class":104},[40,155753,155754],{},"输入得到的内容永远是字符串：",[85,155756,155758],{"className":30361,"code":155757,"language":30363,"meta":14,"style":14},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[91,155759,155760,155776],{"__ignoreMap":14},[94,155761,155762,155765,155767,155769,155771,155774],{"class":96,"line":97},[94,155763,155764],{"class":104},"num ",[94,155766,150],{"class":100},[94,155768,60582],{"class":153},[94,155770,105],{"class":104},[94,155772,155773],{"class":209},"\"请输入数字:\"",[94,155775,111],{"class":104},[94,155777,155778,155780,155782,155784,155787],{"class":96,"line":15},[94,155779,30398],{"class":153},[94,155781,105],{"class":104},[94,155783,103084],{"class":153},[94,155785,155786],{"class":104},"(num))  ",[94,155788,155789],{"class":163},"# str\n",[40,155791,155792],{},"如果要做数学运算，必须转换：",[85,155794,155796],{"className":30361,"code":155795,"language":30363,"meta":14,"style":14},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[91,155797,155798,155816],{"__ignoreMap":14},[94,155799,155800,155802,155804,155806,155808,155810,155812,155814],{"class":96,"line":97},[94,155801,155764],{"class":104},[94,155803,150],{"class":100},[94,155805,2363],{"class":153},[94,155807,105],{"class":104},[94,155809,53798],{"class":153},[94,155811,105],{"class":104},[94,155813,155773],{"class":209},[94,155815,30480],{"class":104},[94,155817,155818,155820,155822,155824,155826],{"class":96,"line":15},[94,155819,30398],{"class":153},[94,155821,45602],{"class":104},[94,155823,586],{"class":100},[94,155825,2019],{"class":153},[94,155827,111],{"class":104},[40,155829,155830],{},"常见错误：",[85,155832,155834],{"className":30361,"code":155833,"language":30363,"meta":14,"style":14},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[91,155835,155836,155849],{"__ignoreMap":14},[94,155837,155838,155840,155842,155844,155846],{"class":96,"line":97},[94,155839,108],{"class":153},[94,155841,105],{"class":104},[94,155843,155689],{"class":209},[94,155845,155638],{"class":104},[94,155847,155848],{"class":163},"# 错误\n",[94,155850,155851,155853,155855,155858,155861],{"class":96,"line":15},[94,155852,108],{"class":153},[94,155854,105],{"class":104},[94,155856,155857],{"class":209},"\"abc\"",[94,155859,155860],{"class":104},")    ",[94,155862,155848],{"class":163},[40,155864,155865],{},"正确写法：",[85,155867,155869],{"className":30361,"code":155868,"language":30363,"meta":14,"style":14},"num = float(\"3.14\")\n",[91,155870,155871],{"__ignoreMap":14},[94,155872,155873,155875,155877,155879,155881,155883],{"class":96,"line":97},[94,155874,155764],{"class":104},[94,155876,150],{"class":100},[94,155878,109774],{"class":153},[94,155880,105],{"class":104},[94,155882,155689],{"class":209},[94,155884,111],{"class":104},[35,155886,155888],{"id":155887},"_27-运算符","2.7 运算符",[65,155890,155892],{"id":155891},"_271-算术运算符","2.7.1 算术运算符",[242,155894,155895,155906],{},[245,155896,155897],{},[248,155898,155899,155902,155904],{},[251,155900,155901],{},"运算符",[251,155903,25852],{},[251,155905,27475],{},[289,155907,155908,155922,155936,155950,155964,155978,155992],{},[248,155909,155910,155914,155917],{},[294,155911,155912],{},[91,155913,586],{},[294,155915,155916],{},"加法",[294,155918,155919],{},[91,155920,155921],{},"1 + 2",[248,155923,155924,155928,155931],{},[294,155925,155926],{},[91,155927,637],{},[294,155929,155930],{},"减法",[294,155932,155933],{},[91,155934,155935],{},"5 - 3",[248,155937,155938,155942,155945],{},[294,155939,155940],{},[91,155941,560],{},[294,155943,155944],{},"乘法",[294,155946,155947],{},[91,155948,155949],{},"2 * 3",[248,155951,155952,155956,155959],{},[294,155953,155954],{},[91,155955,689],{},[294,155957,155958],{},"除法，结果是浮点数",[294,155960,155961],{},[91,155962,155963],{},"5 \u002F 2",[248,155965,155966,155970,155973],{},[294,155967,155968],{},[91,155969,33312],{},[294,155971,155972],{},"整除",[294,155974,155975],{},[91,155976,155977],{},"5 \u002F\u002F 2",[248,155979,155980,155984,155987],{},[294,155981,155982],{},[91,155983,433],{},[294,155985,155986],{},"取余",[294,155988,155989],{},[91,155990,155991],{},"5 % 2",[248,155993,155994,155998,156001],{},[294,155995,155996],{},[91,155997,10643],{},[294,155999,156000],{},"幂运算",[294,156002,156003],{},[91,156004,156005],{},"2 ** 3",[40,156007,15117],{},[85,156009,156011],{"className":30361,"code":156010,"language":30363,"meta":14,"style":14},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[91,156012,156013,156031,156048,156065],{"__ignoreMap":14},[94,156014,156015,156017,156019,156021,156024,156026,156028],{"class":96,"line":97},[94,156016,30398],{"class":153},[94,156018,105],{"class":104},[94,156020,424],{"class":153},[94,156022,156023],{"class":100}," \u002F",[94,156025,14737],{"class":153},[94,156027,155638],{"class":104},[94,156029,156030],{"class":163},"# 2.5\n",[94,156032,156033,156035,156037,156039,156042,156044,156046],{"class":96,"line":15},[94,156034,30398],{"class":153},[94,156036,105],{"class":104},[94,156038,424],{"class":153},[94,156040,156041],{"class":100}," \u002F\u002F",[94,156043,14737],{"class":153},[94,156045,45791],{"class":104},[94,156047,155641],{"class":163},[94,156049,156050,156052,156054,156056,156059,156061,156063],{"class":96,"line":1160},[94,156051,30398],{"class":153},[94,156053,105],{"class":104},[94,156055,424],{"class":153},[94,156057,156058],{"class":100}," %",[94,156060,14737],{"class":153},[94,156062,155638],{"class":104},[94,156064,155658],{"class":163},[94,156066,156067,156069,156071,156073,156076,156078,156080],{"class":96,"line":1175},[94,156068,30398],{"class":153},[94,156070,105],{"class":104},[94,156072,182],{"class":153},[94,156074,156075],{"class":100}," **",[94,156077,78047],{"class":153},[94,156079,45791],{"class":104},[94,156081,156082],{"class":163},"# 8\n",[65,156084,156086],{"id":156085},"_272-赋值运算符","2.7.2 赋值运算符",[85,156088,156090],{"className":30361,"code":156089,"language":30363,"meta":14,"style":14},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[91,156091,156092,156100,156108,156116,156124],{"__ignoreMap":14},[94,156093,156094,156096,156098],{"class":96,"line":97},[94,156095,155764],{"class":104},[94,156097,150],{"class":100},[94,156099,58405],{"class":153},[94,156101,156102,156104,156106],{"class":96,"line":15},[94,156103,155764],{"class":104},[94,156105,9459],{"class":100},[94,156107,54404],{"class":153},[94,156109,156110,156112,156114],{"class":96,"line":1160},[94,156111,155764],{"class":104},[94,156113,150229],{"class":100},[94,156115,47706],{"class":153},[94,156117,156118,156120,156122],{"class":96,"line":1175},[94,156119,155764],{"class":104},[94,156121,137125],{"class":100},[94,156123,120013],{"class":153},[94,156125,156126,156128,156131],{"class":96,"line":1181},[94,156127,155764],{"class":104},[94,156129,156130],{"class":100},"\u002F=",[94,156132,47706],{"class":153},[40,156134,156135],{},"等价关系：",[85,156137,156139],{"className":30361,"code":156138,"language":30363,"meta":14,"style":14},"num += 1\nnum = num + 1\n",[91,156140,156141,156149],{"__ignoreMap":14},[94,156142,156143,156145,156147],{"class":96,"line":97},[94,156144,155764],{"class":104},[94,156146,9459],{"class":100},[94,156148,55676],{"class":153},[94,156150,156151,156153,156155,156158,156160],{"class":96,"line":15},[94,156152,155764],{"class":104},[94,156154,150],{"class":100},[94,156156,156157],{"class":104}," num ",[94,156159,586],{"class":100},[94,156161,55676],{"class":153},[40,156163,156164,156165,100995,156168,28368],{},"Python 没有 ",[91,156166,156167],{},"num++",[91,156169,156170],{},"num--",[65,156172,156174],{"id":156173},"_273-比较运算符","2.7.3 比较运算符",[40,156176,156177],{},"比较运算结果是布尔值。",[85,156179,156181],{"className":30361,"code":156180,"language":30363,"meta":14,"style":14},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[91,156182,156183,156197,156212,156226],{"__ignoreMap":14},[94,156184,156185,156187,156189,156191,156193,156195],{"class":96,"line":97},[94,156186,30398],{"class":153},[94,156188,105],{"class":104},[94,156190,551],{"class":153},[94,156192,26205],{"class":100},[94,156194,2129],{"class":153},[94,156196,111],{"class":104},[94,156198,156199,156201,156203,156205,156208,156210],{"class":96,"line":15},[94,156200,30398],{"class":153},[94,156202,105],{"class":104},[94,156204,551],{"class":153},[94,156206,156207],{"class":100}," >=",[94,156209,2019],{"class":153},[94,156211,111],{"class":104},[94,156213,156214,156216,156218,156220,156222,156224],{"class":96,"line":1160},[94,156215,30398],{"class":153},[94,156217,105],{"class":104},[94,156219,551],{"class":153},[94,156221,101536],{"class":100},[94,156223,2064],{"class":153},[94,156225,111],{"class":104},[94,156227,156228,156230,156232,156234,156237,156239],{"class":96,"line":1175},[94,156229,30398],{"class":153},[94,156231,105],{"class":104},[94,156233,551],{"class":153},[94,156235,156236],{"class":100}," !=",[94,156238,2064],{"class":153},[94,156240,111],{"class":104},[40,156242,156243,156244,156246,156247,28368],{},"注意：判断相等用 ",[91,156245,2930],{},"，赋值用 ",[91,156248,150],{},[85,156250,156252],{"className":30361,"code":156251,"language":30363,"meta":14,"style":14},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[91,156253,156254,156266],{"__ignoreMap":14},[94,156255,156256,156258,156260,156263],{"class":96,"line":97},[94,156257,146523],{"class":104},[94,156259,150],{"class":100},[94,156261,156262],{"class":153}," 18",[94,156264,156265],{"class":163},"       # 赋值\n",[94,156267,156268,156270,156272,156274],{"class":96,"line":15},[94,156269,146523],{"class":104},[94,156271,2930],{"class":100},[94,156273,156262],{"class":153},[94,156275,156276],{"class":163},"      # 判断是否相等\n",[65,156278,156280],{"id":156279},"_274-逻辑运算符","2.7.4 逻辑运算符",[242,156282,156283,156291],{},[245,156284,156285],{},[248,156286,156287,156289],{},[251,156288,155901],{},[251,156290,25852],{},[289,156292,156293,156302,156311],{},[248,156294,156295,156299],{},[294,156296,156297],{},[91,156298,30445],{},[294,156300,156301],{},"并且",[248,156303,156304,156308],{},[294,156305,156306],{},[91,156307,115067],{},[294,156309,156310],{},"或者",[248,156312,156313,156318],{},[294,156314,156315],{},[91,156316,156317],{},"not",[294,156319,156320],{},"取反",[85,156322,156324],{"className":30361,"code":156323,"language":30363,"meta":14,"style":14},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[91,156325,156326,156334,156343,156347,156362,156376],{"__ignoreMap":14},[94,156327,156328,156330,156332],{"class":96,"line":97},[94,156329,146523],{"class":104},[94,156331,150],{"class":100},[94,156333,88042],{"class":153},[94,156335,156336,156339,156341],{"class":96,"line":15},[94,156337,156338],{"class":104},"has_ticket ",[94,156340,150],{"class":100},[94,156342,153576],{"class":153},[94,156344,156345],{"class":96,"line":1160},[94,156346,2381],{"emptyLinePlaceholder":20},[94,156348,156349,156351,156353,156355,156357,156359],{"class":96,"line":1175},[94,156350,30398],{"class":153},[94,156352,155745],{"class":104},[94,156354,1691],{"class":100},[94,156356,156262],{"class":153},[94,156358,120406],{"class":100},[94,156360,156361],{"class":104}," has_ticket)\n",[94,156363,156364,156366,156368,156370,156372,156374],{"class":96,"line":1181},[94,156365,30398],{"class":153},[94,156367,155745],{"class":104},[94,156369,1015],{"class":100},[94,156371,156262],{"class":153},[94,156373,114178],{"class":100},[94,156375,156361],{"class":104},[94,156377,156378,156380,156382,156384],{"class":96,"line":1195},[94,156379,30398],{"class":153},[94,156381,105],{"class":104},[94,156383,156317],{"class":100},[94,156385,156361],{"class":104},[35,156387,156389],{"id":156388},"_28-字符串定义","2.8 字符串定义",[40,156391,156392],{},"三种常见写法：",[85,156394,156396],{"className":30361,"code":156395,"language":30363,"meta":14,"style":14},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[91,156397,156398,156408,156417,156427],{"__ignoreMap":14},[94,156399,156400,156403,156405],{"class":96,"line":97},[94,156401,156402],{"class":104},"name1 ",[94,156404,150],{"class":100},[94,156406,156407],{"class":209}," '小明'\n",[94,156409,156410,156413,156415],{"class":96,"line":15},[94,156411,156412],{"class":104},"name2 ",[94,156414,150],{"class":100},[94,156416,149330],{"class":209},[94,156418,156419,156422,156424],{"class":96,"line":1160},[94,156420,156421],{"class":104},"text ",[94,156423,150],{"class":100},[94,156425,156426],{"class":209}," \"\"\"这是多行字符串\n",[94,156428,156429],{"class":96,"line":1175},[94,156430,156431],{"class":209},"可以换行\"\"\"\n",[40,156433,156434],{},"字符串中包含引号：",[85,156436,156438],{"className":30361,"code":156437,"language":30363,"meta":14,"style":14},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[91,156439,156440,156450,156460],{"__ignoreMap":14},[94,156441,156442,156445,156447],{"class":96,"line":97},[94,156443,156444],{"class":104},"msg ",[94,156446,150],{"class":100},[94,156448,156449],{"class":209}," \"他说:'你好'\"\n",[94,156451,156452,156455,156457],{"class":96,"line":15},[94,156453,156454],{"class":104},"msg2 ",[94,156456,150],{"class":100},[94,156458,156459],{"class":209}," '他说:\"你好\"'\n",[94,156461,156462,156465,156467,156470,156473,156476,156478],{"class":96,"line":1160},[94,156463,156464],{"class":104},"msg3 ",[94,156466,150],{"class":100},[94,156468,156469],{"class":209}," \"他说:",[94,156471,156472],{"class":153},"\\\"",[94,156474,156475],{"class":209},"你好",[94,156477,156472],{"class":153},[94,156479,25116],{"class":209},[40,156481,156482],{},"常见转义字符：",[242,156484,156485,156494],{},[245,156486,156487],{},[248,156488,156489,156492],{},[251,156490,156491],{},"写法",[251,156493,100677],{},[289,156495,156496,156506,156515,156525,156534],{},[248,156497,156498,156503],{},[294,156499,156500],{},[91,156501,156502],{},"\\n",[294,156504,156505],{},"换行",[248,156507,156508,156512],{},[294,156509,156510],{},[91,156511,1211],{},[294,156513,156514],{},"制表符",[248,156516,156517,156522],{},[294,156518,156519],{},[91,156520,156521],{},"\\\\",[294,156523,156524],{},"反斜杠",[248,156526,156527,156531],{},[294,156528,156529],{},[91,156530,156472],{},[294,156532,156533],{},"双引号",[248,156535,156536,156541],{},[294,156537,156538],{},[91,156539,156540],{},"\\'",[294,156542,156543],{},"单引号",[35,156545,156547],{"id":156546},"_29-字符串拼接","2.9 字符串拼接",[85,156549,156551],{"className":30361,"code":156550,"language":30363,"meta":14,"style":14},"name = \"小明\"\nprint(\"你好，\" + name)\n",[91,156552,156553,156561],{"__ignoreMap":14},[94,156554,156555,156557,156559],{"class":96,"line":97},[94,156556,146513],{"class":104},[94,156558,150],{"class":100},[94,156560,149330],{"class":209},[94,156562,156563,156565,156567,156570,156572],{"class":96,"line":15},[94,156564,30398],{"class":153},[94,156566,105],{"class":104},[94,156568,156569],{"class":209},"\"你好，\"",[94,156571,45549],{"class":100},[94,156573,156574],{"class":104}," name)\n",[40,156576,156577],{},"字符串只能和字符串拼接：",[85,156579,156581],{"className":30361,"code":156580,"language":30363,"meta":14,"style":14},"age = 18\nprint(\"年龄:\" + str(age))\n",[91,156582,156583,156591],{"__ignoreMap":14},[94,156584,156585,156587,156589],{"class":96,"line":97},[94,156586,146523],{"class":104},[94,156588,150],{"class":100},[94,156590,146528],{"class":153},[94,156592,156593,156595,156597,156599,156601,156603],{"class":96,"line":15},[94,156594,30398],{"class":153},[94,156596,105],{"class":104},[94,156598,146494],{"class":209},[94,156600,45549],{"class":100},[94,156602,73896],{"class":153},[94,156604,156605],{"class":104},"(age))\n",[40,156607,156608],{},"更推荐使用格式化字符串。",[35,156610,156612],{"id":156611},"_210-字符串格式化","2.10 字符串格式化",[65,156614,156616],{"id":156615},"_2101-百分号格式化","2.10.1 百分号格式化",[85,156618,156620],{"className":30361,"code":156619,"language":30363,"meta":14,"style":14},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[91,156621,156622,156630,156638,156647,156651],{"__ignoreMap":14},[94,156623,156624,156626,156628],{"class":96,"line":97},[94,156625,146513],{"class":104},[94,156627,150],{"class":100},[94,156629,149330],{"class":209},[94,156631,156632,156634,156636],{"class":96,"line":15},[94,156633,146523],{"class":104},[94,156635,150],{"class":100},[94,156637,146528],{"class":153},[94,156639,156640,156642,156644],{"class":96,"line":1160},[94,156641,155335],{"class":104},[94,156643,150],{"class":100},[94,156645,156646],{"class":153}," 95.5\n",[94,156648,156649],{"class":96,"line":1175},[94,156650,2381],{"emptyLinePlaceholder":20},[94,156652,156653,156655,156657,156660,156663,156666,156669,156672,156675,156677,156679],{"class":96,"line":1181},[94,156654,30398],{"class":153},[94,156656,105],{"class":104},[94,156658,156659],{"class":209},"\"姓名:",[94,156661,156662],{"class":153},"%s",[94,156664,156665],{"class":209}," 年龄:",[94,156667,156668],{"class":153},"%d",[94,156670,156671],{"class":209}," 分数:",[94,156673,156674],{"class":153},"%.1f",[94,156676,356],{"class":209},[94,156678,156058],{"class":100},[94,156680,156681],{"class":104}," (name, age, score))\n",[40,156683,156684],{},"常用占位符：",[242,156686,156687,156696],{},[245,156688,156689],{},[248,156690,156691,156694],{},[251,156692,156693],{},"占位符",[251,156695,25852],{},[289,156697,156698,156706,156714],{},[248,156699,156700,156704],{},[294,156701,156702],{},[91,156703,156662],{},[294,156705,155201],{},[248,156707,156708,156712],{},[294,156709,156710],{},[91,156711,156668],{},[294,156713,155179],{},[248,156715,156716,156721],{},[294,156717,156718],{},[91,156719,156720],{},"%f",[294,156722,155190],{},[40,156724,156725],{},"精度控制：",[85,156727,156729],{"className":30361,"code":156728,"language":30363,"meta":14,"style":14},"price = 12.3456\nprint(\"%.2f\" % price)\n",[91,156730,156731,156740],{"__ignoreMap":14},[94,156732,156733,156735,156737],{"class":96,"line":97},[94,156734,146658],{"class":104},[94,156736,150],{"class":100},[94,156738,156739],{"class":153}," 12.3456\n",[94,156741,156742,156744,156746,156748,156751,156753,156755],{"class":96,"line":15},[94,156743,30398],{"class":153},[94,156745,105],{"class":104},[94,156747,356],{"class":209},[94,156749,156750],{"class":153},"%.2f",[94,156752,356],{"class":209},[94,156754,156058],{"class":100},[94,156756,156757],{"class":104}," price)\n",[65,156759,156761],{"id":156760},"_2102-format方法","2.10.2 format方法",[85,156763,156765],{"className":30361,"code":156764,"language":30363,"meta":14,"style":14},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[91,156766,156767,156775,156783,156787,156806,156826],{"__ignoreMap":14},[94,156768,156769,156771,156773],{"class":96,"line":97},[94,156770,146513],{"class":104},[94,156772,150],{"class":100},[94,156774,149330],{"class":209},[94,156776,156777,156779,156781],{"class":96,"line":15},[94,156778,146523],{"class":104},[94,156780,150],{"class":100},[94,156782,146528],{"class":153},[94,156784,156785],{"class":96,"line":1160},[94,156786,2381],{"emptyLinePlaceholder":20},[94,156788,156789,156791,156793,156795,156797,156799,156801,156803],{"class":96,"line":1175},[94,156790,30398],{"class":153},[94,156792,105],{"class":104},[94,156794,156659],{"class":209},[94,156796,32442],{"class":153},[94,156798,156665],{"class":209},[94,156800,32442],{"class":153},[94,156802,356],{"class":209},[94,156804,156805],{"class":104},".format(name, age))\n",[94,156807,156808,156810,156812,156814,156817,156819,156822,156824],{"class":96,"line":1181},[94,156809,30398],{"class":153},[94,156811,105],{"class":104},[94,156813,156659],{"class":209},[94,156815,156816],{"class":153},"{0}",[94,156818,156665],{"class":209},[94,156820,156821],{"class":153},"{1}",[94,156823,356],{"class":209},[94,156825,156805],{"class":104},[94,156827,156828,156830,156832,156834,156837,156839,156842,156844,156847,156849,156851,156854,156856,156858],{"class":96,"line":1195},[94,156829,30398],{"class":153},[94,156831,105],{"class":104},[94,156833,156659],{"class":209},[94,156835,156836],{"class":153},"{name}",[94,156838,156665],{"class":209},[94,156840,156841],{"class":153},"{age}",[94,156843,356],{"class":209},[94,156845,156846],{"class":104},".format(",[94,156848,79787],{"class":5198},[94,156850,150],{"class":100},[94,156852,156853],{"class":104},"name, ",[94,156855,70198],{"class":5198},[94,156857,150],{"class":100},[94,156859,156860],{"class":104},"age))\n",[65,156862,156864],{"id":156863},"_2103-f-string","2.10.3 f-string",[40,156866,156867],{},"推荐写法：",[85,156869,156871],{"className":30361,"code":156870,"language":30363,"meta":14,"style":14},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[91,156872,156873,156881,156889,156897,156901],{"__ignoreMap":14},[94,156874,156875,156877,156879],{"class":96,"line":97},[94,156876,146513],{"class":104},[94,156878,150],{"class":100},[94,156880,149330],{"class":209},[94,156882,156883,156885,156887],{"class":96,"line":15},[94,156884,146523],{"class":104},[94,156886,150],{"class":100},[94,156888,146528],{"class":153},[94,156890,156891,156893,156895],{"class":96,"line":1160},[94,156892,155335],{"class":104},[94,156894,150],{"class":100},[94,156896,156646],{"class":153},[94,156898,156899],{"class":96,"line":1175},[94,156900,2381],{"emptyLinePlaceholder":20},[94,156902,156903,156905,156907,156909,156911,156913,156915,156917,156919,156921,156923,156925,156927,156929,156932,156935,156937,156939],{"class":96,"line":1181},[94,156904,30398],{"class":153},[94,156906,105],{"class":104},[94,156908,157],{"class":100},[94,156910,156659],{"class":209},[94,156912,1001],{"class":153},[94,156914,79787],{"class":104},[94,156916,1051],{"class":153},[94,156918,156665],{"class":209},[94,156920,1001],{"class":153},[94,156922,70198],{"class":104},[94,156924,1051],{"class":153},[94,156926,156671],{"class":209},[94,156928,1001],{"class":153},[94,156930,156931],{"class":104},"score",[94,156933,156934],{"class":100},":.1f",[94,156936,1051],{"class":153},[94,156938,356],{"class":209},[94,156940,111],{"class":104},[40,156942,156943],{},"表达式也可以放进去：",[85,156945,156947],{"className":30361,"code":156946,"language":30363,"meta":14,"style":14},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[91,156948,156949,156957,156965],{"__ignoreMap":14},[94,156950,156951,156953,156955],{"class":96,"line":97},[94,156952,146658],{"class":104},[94,156954,150],{"class":100},[94,156956,146663],{"class":153},[94,156958,156959,156961,156963],{"class":96,"line":15},[94,156960,146668],{"class":104},[94,156962,150],{"class":100},[94,156964,54404],{"class":153},[94,156966,156967,156969,156971,156973,156976,156978,156980,156982,156985,156987,156990],{"class":96,"line":1160},[94,156968,30398],{"class":153},[94,156970,105],{"class":104},[94,156972,157],{"class":100},[94,156974,156975],{"class":209},"\"总价:",[94,156977,1001],{"class":153},[94,156979,146658],{"class":104},[94,156981,560],{"class":100},[94,156983,156984],{"class":104}," count",[94,156986,1051],{"class":153},[94,156988,156989],{"class":209},"元\"",[94,156991,111],{"class":104},[35,156993,156995],{"id":156994},"_211-input输入","2.11 input输入",[40,156997,156998,157001],{},[91,156999,157000],{},"input()"," 会暂停程序，等待用户输入。",[85,157003,157005],{"className":30361,"code":157004,"language":30363,"meta":14,"style":14},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[91,157006,157007,157021],{"__ignoreMap":14},[94,157008,157009,157011,157013,157015,157017,157019],{"class":96,"line":97},[94,157010,146513],{"class":104},[94,157012,150],{"class":100},[94,157014,60582],{"class":153},[94,157016,105],{"class":104},[94,157018,152356],{"class":209},[94,157020,111],{"class":104},[94,157022,157023,157025,157027,157029,157032,157034,157036,157038,157040],{"class":96,"line":15},[94,157024,30398],{"class":153},[94,157026,105],{"class":104},[94,157028,157],{"class":100},[94,157030,157031],{"class":209},"\"你好，",[94,157033,1001],{"class":153},[94,157035,79787],{"class":104},[94,157037,1051],{"class":153},[94,157039,356],{"class":209},[94,157041,111],{"class":104},[40,157043,157044],{},"输入整数：",[85,157046,157048],{"className":30361,"code":157047,"language":30363,"meta":14,"style":14},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[91,157049,157050,157068],{"__ignoreMap":14},[94,157051,157052,157054,157056,157058,157060,157062,157064,157066],{"class":96,"line":97},[94,157053,146523],{"class":104},[94,157055,150],{"class":100},[94,157057,2363],{"class":153},[94,157059,105],{"class":104},[94,157061,53798],{"class":153},[94,157063,105],{"class":104},[94,157065,152371],{"class":209},[94,157067,30480],{"class":104},[94,157069,157070,157072,157074,157076,157079,157081,157083,157085,157088,157090],{"class":96,"line":15},[94,157071,30398],{"class":153},[94,157073,105],{"class":104},[94,157075,157],{"class":100},[94,157077,157078],{"class":209},"\"明年你",[94,157080,1001],{"class":153},[94,157082,146523],{"class":104},[94,157084,586],{"class":100},[94,157086,157087],{"class":153}," 1}",[94,157089,149381],{"class":209},[94,157091,111],{"class":104},[40,157093,157094],{},"输入小数：",[85,157096,157098],{"className":30361,"code":157097,"language":30363,"meta":14,"style":14},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[91,157099,157100,157119],{"__ignoreMap":14},[94,157101,157102,157104,157106,157108,157110,157112,157114,157117],{"class":96,"line":97},[94,157103,155308],{"class":104},[94,157105,150],{"class":100},[94,157107,109774],{"class":153},[94,157109,105],{"class":104},[94,157111,53798],{"class":153},[94,157113,105],{"class":104},[94,157115,157116],{"class":209},"\"请输入身高:\"",[94,157118,30480],{"class":104},[94,157120,157121,157123,157125,157127,157130,157132,157134,157137,157139,157142],{"class":96,"line":15},[94,157122,30398],{"class":153},[94,157124,105],{"class":104},[94,157126,157],{"class":100},[94,157128,157129],{"class":209},"\"身高:",[94,157131,1001],{"class":153},[94,157133,24964],{"class":104},[94,157135,157136],{"class":100},":.2f",[94,157138,1051],{"class":153},[94,157140,157141],{"class":209},"米\"",[94,157143,111],{"class":104},[35,157145,157147],{"id":157146},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[40,157149,123269],{},[48,157151,157152,157155,157158,157161],{},[51,157153,157154],{},"输入商品单价。",[51,157156,157157],{},"输入购买数量。",[51,157159,157160],{},"输入折扣，例如 0.8 表示八折。",[51,157162,157163],{},"输出最终金额，保留两位小数。",[40,157165,10017],{},[85,157167,157169],{"className":30361,"code":157168,"language":30363,"meta":14,"style":14},"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",[91,157170,157171,157190,157209,157229,157233,157253,157257,157280,157301,157323],{"__ignoreMap":14},[94,157172,157173,157175,157177,157179,157181,157183,157185,157188],{"class":96,"line":97},[94,157174,146658],{"class":104},[94,157176,150],{"class":100},[94,157178,109774],{"class":153},[94,157180,105],{"class":104},[94,157182,53798],{"class":153},[94,157184,105],{"class":104},[94,157186,157187],{"class":209},"\"请输入商品单价:\"",[94,157189,30480],{"class":104},[94,157191,157192,157194,157196,157198,157200,157202,157204,157207],{"class":96,"line":15},[94,157193,146668],{"class":104},[94,157195,150],{"class":100},[94,157197,2363],{"class":153},[94,157199,105],{"class":104},[94,157201,53798],{"class":153},[94,157203,105],{"class":104},[94,157205,157206],{"class":209},"\"请输入购买数量:\"",[94,157208,30480],{"class":104},[94,157210,157211,157214,157216,157218,157220,157222,157224,157227],{"class":96,"line":1160},[94,157212,157213],{"class":104},"discount ",[94,157215,150],{"class":100},[94,157217,109774],{"class":153},[94,157219,105],{"class":104},[94,157221,53798],{"class":153},[94,157223,105],{"class":104},[94,157225,157226],{"class":209},"\"请输入折扣:\"",[94,157228,30480],{"class":104},[94,157230,157231],{"class":96,"line":1175},[94,157232,2381],{"emptyLinePlaceholder":20},[94,157234,157235,157238,157240,157243,157245,157248,157250],{"class":96,"line":1181},[94,157236,157237],{"class":104},"total ",[94,157239,150],{"class":100},[94,157241,157242],{"class":104}," price ",[94,157244,560],{"class":100},[94,157246,157247],{"class":104}," count ",[94,157249,560],{"class":100},[94,157251,157252],{"class":104}," discount\n",[94,157254,157255],{"class":96,"line":1195},[94,157256,2381],{"emptyLinePlaceholder":20},[94,157258,157259,157261,157263,157265,157268,157270,157272,157274,157276,157278],{"class":96,"line":1201},[94,157260,30398],{"class":153},[94,157262,105],{"class":104},[94,157264,157],{"class":100},[94,157266,157267],{"class":209},"\"商品单价:",[94,157269,1001],{"class":153},[94,157271,79792],{"class":104},[94,157273,157136],{"class":100},[94,157275,1051],{"class":153},[94,157277,356],{"class":209},[94,157279,111],{"class":104},[94,157281,157282,157284,157286,157288,157291,157293,157295,157297,157299],{"class":96,"line":1292},[94,157283,30398],{"class":153},[94,157285,105],{"class":104},[94,157287,157],{"class":100},[94,157289,157290],{"class":209},"\"购买数量:",[94,157292,1001],{"class":153},[94,157294,84411],{"class":104},[94,157296,1051],{"class":153},[94,157298,356],{"class":209},[94,157300,111],{"class":104},[94,157302,157303,157305,157307,157309,157312,157314,157317,157319,157321],{"class":96,"line":1298},[94,157304,30398],{"class":153},[94,157306,105],{"class":104},[94,157308,157],{"class":100},[94,157310,157311],{"class":209},"\"折扣:",[94,157313,1001],{"class":153},[94,157315,157316],{"class":104},"discount",[94,157318,1051],{"class":153},[94,157320,356],{"class":209},[94,157322,111],{"class":104},[94,157324,157325,157327,157329,157331,157334,157336,157339,157341,157343,157345],{"class":96,"line":1310},[94,157326,30398],{"class":153},[94,157328,105],{"class":104},[94,157330,157],{"class":100},[94,157332,157333],{"class":209},"\"应付金额:",[94,157335,1001],{"class":153},[94,157337,157338],{"class":104},"total",[94,157340,157136],{"class":100},[94,157342,1051],{"class":153},[94,157344,156989],{"class":209},[94,157346,111],{"class":104},[35,157348,157350],{"id":157349},"_213-易错点","2.13 易错点",[48,157352,157353,157358,157364,157372,157375],{},[51,157354,157355,157357],{},[91,157356,157000],{}," 的结果是字符串，做运算前要转换。",[51,157359,157360,157361,28368],{},"字符串拼接时，数字要先 ",[91,157362,157363],{},"str()",[51,157365,157366,157368,157369,157371],{},[91,157367,150],{}," 是赋值，",[91,157370,2930],{}," 是比较。",[51,157373,157374],{},"Python 没有自增自减运算符。",[51,157376,157377],{},"浮点数计算可能有精度误差：",[85,157379,157381],{"className":30361,"code":157380,"language":30363,"meta":14,"style":14},"print(0.1 + 0.2)\n",[91,157382,157383],{"__ignoreMap":14},[94,157384,157385,157387,157389,157391,157393,157396],{"class":96,"line":97},[94,157386,30398],{"class":153},[94,157388,105],{"class":104},[94,157390,86187],{"class":153},[94,157392,45549],{"class":100},[94,157394,157395],{"class":153}," 0.2",[94,157397,111],{"class":104},[40,157399,157400,157401,157404],{},"金额计算如果要求严格，可以后续学习 ",[91,157402,157403],{},"decimal"," 模块。",[35,157406,157408],{"id":157407},"_214-本章练习","2.14 本章练习",[48,157410,157411,157414,157417,157420,157423],{},[51,157412,157413],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[51,157415,157416],{},"输入圆的半径，计算面积，保留两位小数。",[51,157418,157419],{},"输入工资和奖金，计算总收入。",[51,157421,157422],{},"输入摄氏温度，转换为华氏温度。",[51,157424,157425],{},"写一个 BMI 计算程序：",[85,157427,157430],{"className":157428,"code":157429,"language":5169,"meta":14},[5167],"BMI = 体重kg \u002F 身高m ** 2\n",[91,157431,157429],{"__ignoreMap":14},[5108,157433,157434],{},"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":14,"searchDepth":15,"depth":15,"links":157436},[157437,157438,157439,157440,157441,157442,157443,157449,157450,157451,157456,157457,157458,157459],{"id":154998,"depth":15,"text":154999},{"id":155107,"depth":15,"text":155108},{"id":155278,"depth":15,"text":155279},{"id":155355,"depth":15,"text":155356},{"id":50708,"depth":15,"text":50709},{"id":155661,"depth":15,"text":155662},{"id":155887,"depth":15,"text":155888,"children":157444},[157445,157446,157447,157448],{"id":155891,"depth":1160,"text":155892},{"id":156085,"depth":1160,"text":156086},{"id":156173,"depth":1160,"text":156174},{"id":156279,"depth":1160,"text":156280},{"id":156388,"depth":15,"text":156389},{"id":156546,"depth":15,"text":156547},{"id":156611,"depth":15,"text":156612,"children":157452},[157453,157454,157455],{"id":156615,"depth":1160,"text":156616},{"id":156760,"depth":1160,"text":156761},{"id":156863,"depth":1160,"text":156864},{"id":156994,"depth":15,"text":156995},{"id":157146,"depth":15,"text":157147},{"id":157349,"depth":15,"text":157350},{"id":157407,"depth":15,"text":157408},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":154990,"description":17},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157466,"title":157467,"body":157468,"description":17,"extension":18,"meta":159104,"navigation":20,"path":159105,"seo":159106,"stem":159107,"__hash__":159108},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157469,"toc":159085},[157470,157473,157477,157480,157495,157498,157526,157530,157580,157582,157598,157601,157627,157630,157634,157701,157704,157720,157724,157727,157845,157848,157855,157904,157910,157914,157917,158030,158033,158037,158041,158044,158094,158098,158101,158151,158155,158158,158196,158200,158203,158249,158252,158287,158291,158296,158299,158345,158347,158414,158418,158424,158535,158544,158548,158550,158561,158563,158729,158733,158735,158749,158751,158965,158969,158988,159005,159008,159054,159058,159082],[10,157471,157467],{"id":157472},"_3-判断语句",[35,157474,157476],{"id":157475},"_31-布尔值","3.1 布尔值",[40,157478,157479],{},"判断语句依赖布尔值：",[85,157481,157483],{"className":30361,"code":157482,"language":30363,"meta":14,"style":14},"True\nFalse\n",[91,157484,157485,157490],{"__ignoreMap":14},[94,157486,157487],{"class":96,"line":97},[94,157488,157489],{"class":153},"True\n",[94,157491,157492],{"class":96,"line":15},[94,157493,157494],{"class":153},"False\n",[40,157496,157497],{},"比较表达式会产生布尔值：",[85,157499,157501],{"className":30361,"code":157500,"language":30363,"meta":14,"style":14},"age = 18\nprint(age >= 18)  # True\n",[91,157502,157503,157511],{"__ignoreMap":14},[94,157504,157505,157507,157509],{"class":96,"line":97},[94,157506,146523],{"class":104},[94,157508,150],{"class":100},[94,157510,146528],{"class":153},[94,157512,157513,157515,157517,157519,157521,157523],{"class":96,"line":15},[94,157514,30398],{"class":153},[94,157516,155745],{"class":104},[94,157518,1691],{"class":100},[94,157520,156262],{"class":153},[94,157522,45791],{"class":104},[94,157524,157525],{"class":163},"# True\n",[35,157527,157529],{"id":157528},"_32-if基础语法","3.2 if基础语法",[85,157531,157533],{"className":30361,"code":157532,"language":30363,"meta":14,"style":14},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[91,157534,157535,157553,157557,157569],{"__ignoreMap":14},[94,157536,157537,157539,157541,157543,157545,157547,157549,157551],{"class":96,"line":97},[94,157538,146523],{"class":104},[94,157540,150],{"class":100},[94,157542,2363],{"class":153},[94,157544,105],{"class":104},[94,157546,53798],{"class":153},[94,157548,105],{"class":104},[94,157550,152371],{"class":209},[94,157552,30480],{"class":104},[94,157554,157555],{"class":96,"line":15},[94,157556,2381],{"emptyLinePlaceholder":20},[94,157558,157559,157561,157563,157565,157567],{"class":96,"line":1160},[94,157560,1512],{"class":100},[94,157562,15689],{"class":104},[94,157564,1691],{"class":100},[94,157566,156262],{"class":153},[94,157568,3720],{"class":104},[94,157570,157571,157573,157575,157578],{"class":96,"line":1175},[94,157572,31282],{"class":153},[94,157574,105],{"class":104},[94,157576,157577],{"class":209},"\"可以进入网吧\"",[94,157579,111],{"class":104},[40,157581,9007],{},[48,157583,157584,157589,157592,157595],{},[51,157585,157586,157588],{},[91,157587,1512],{}," 后面是条件表达式。",[51,157590,157591],{},"条件后面必须写冒号。",[51,157593,157594],{},"条件成立时执行缩进代码块。",[51,157596,157597],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[40,157599,157600],{},"错误示例：",[85,157602,157604],{"className":30361,"code":157603,"language":30363,"meta":14,"style":14},"if age >= 18\n    print(\"可以进入\")\n",[91,157605,157606,157616],{"__ignoreMap":14},[94,157607,157608,157610,157612,157614],{"class":96,"line":97},[94,157609,1512],{"class":100},[94,157611,15689],{"class":104},[94,157613,1691],{"class":100},[94,157615,146528],{"class":153},[94,157617,157618,157620,157622,157625],{"class":96,"line":15},[94,157619,31282],{"class":153},[94,157621,105],{"class":104},[94,157623,157624],{"class":209},"\"可以进入\"",[94,157626,111],{"class":104},[40,157628,157629],{},"缺少冒号。",[35,157631,157633],{"id":157632},"_33-if-else","3.3 if else",[85,157635,157637],{"className":30361,"code":157636,"language":30363,"meta":14,"style":14},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[91,157638,157639,157657,157661,157673,157684,157690],{"__ignoreMap":14},[94,157640,157641,157643,157645,157647,157649,157651,157653,157655],{"class":96,"line":97},[94,157642,146523],{"class":104},[94,157644,150],{"class":100},[94,157646,2363],{"class":153},[94,157648,105],{"class":104},[94,157650,53798],{"class":153},[94,157652,105],{"class":104},[94,157654,152371],{"class":209},[94,157656,30480],{"class":104},[94,157658,157659],{"class":96,"line":15},[94,157660,2381],{"emptyLinePlaceholder":20},[94,157662,157663,157665,157667,157669,157671],{"class":96,"line":1160},[94,157664,1512],{"class":100},[94,157666,15689],{"class":104},[94,157668,1691],{"class":100},[94,157670,156262],{"class":153},[94,157672,3720],{"class":104},[94,157674,157675,157677,157679,157682],{"class":96,"line":1175},[94,157676,31282],{"class":153},[94,157678,105],{"class":104},[94,157680,157681],{"class":209},"\"成年人\"",[94,157683,111],{"class":104},[94,157685,157686,157688],{"class":96,"line":1181},[94,157687,1682],{"class":100},[94,157689,3720],{"class":104},[94,157691,157692,157694,157696,157699],{"class":96,"line":1195},[94,157693,31282],{"class":153},[94,157695,105],{"class":104},[94,157697,157698],{"class":209},"\"未成年人\"",[94,157700,111],{"class":104},[40,157702,157703],{},"执行逻辑：",[48,157705,157706,157712,157717],{},[51,157707,157708,157709,157711],{},"条件成立，执行 ",[91,157710,1512],{}," 代码块。",[51,157713,157714,157715,157711],{},"条件不成立，执行 ",[91,157716,1682],{},[51,157718,157719],{},"两个代码块只会执行其中一个。",[35,157721,157723],{"id":157722},"_34-if-elif-else","3.4 if elif else",[40,157725,157726],{},"多条件判断：",[85,157728,157730],{"className":30361,"code":157729,"language":30363,"meta":14,"style":14},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[91,157731,157732,157750,157754,157768,157779,157793,157804,157817,157828,157834],{"__ignoreMap":14},[94,157733,157734,157736,157738,157740,157742,157744,157746,157748],{"class":96,"line":97},[94,157735,155335],{"class":104},[94,157737,150],{"class":100},[94,157739,2363],{"class":153},[94,157741,105],{"class":104},[94,157743,53798],{"class":153},[94,157745,105],{"class":104},[94,157747,152386],{"class":209},[94,157749,30480],{"class":104},[94,157751,157752],{"class":96,"line":15},[94,157753,2381],{"emptyLinePlaceholder":20},[94,157755,157756,157758,157761,157763,157766],{"class":96,"line":1160},[94,157757,1512],{"class":100},[94,157759,157760],{"class":104}," score ",[94,157762,1691],{"class":100},[94,157764,157765],{"class":153}," 90",[94,157767,3720],{"class":104},[94,157769,157770,157772,157774,157777],{"class":96,"line":1175},[94,157771,31282],{"class":153},[94,157773,105],{"class":104},[94,157775,157776],{"class":209},"\"优秀\"",[94,157778,111],{"class":104},[94,157780,157781,157784,157786,157788,157791],{"class":96,"line":1181},[94,157782,157783],{"class":100},"elif",[94,157785,157760],{"class":104},[94,157787,1691],{"class":100},[94,157789,157790],{"class":153}," 80",[94,157792,3720],{"class":104},[94,157794,157795,157797,157799,157802],{"class":96,"line":1195},[94,157796,31282],{"class":153},[94,157798,105],{"class":104},[94,157800,157801],{"class":209},"\"良好\"",[94,157803,111],{"class":104},[94,157805,157806,157808,157810,157812,157815],{"class":96,"line":1201},[94,157807,157783],{"class":100},[94,157809,157760],{"class":104},[94,157811,1691],{"class":100},[94,157813,157814],{"class":153}," 60",[94,157816,3720],{"class":104},[94,157818,157819,157821,157823,157826],{"class":96,"line":1292},[94,157820,31282],{"class":153},[94,157822,105],{"class":104},[94,157824,157825],{"class":209},"\"及格\"",[94,157827,111],{"class":104},[94,157829,157830,157832],{"class":96,"line":1298},[94,157831,1682],{"class":100},[94,157833,3720],{"class":104},[94,157835,157836,157838,157840,157843],{"class":96,"line":1310},[94,157837,31282],{"class":153},[94,157839,105],{"class":104},[94,157841,157842],{"class":209},"\"不及格\"",[94,157844,111],{"class":104},[40,157846,157847],{},"注意判断顺序很重要。",[40,157849,157850,157851,157854],{},"如果把 ",[91,157852,157853],{},"score >= 60"," 放在最前面：",[85,157856,157858],{"className":30361,"code":157857,"language":30363,"meta":14,"style":14},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[91,157859,157860,157872,157882,157894],{"__ignoreMap":14},[94,157861,157862,157864,157866,157868,157870],{"class":96,"line":97},[94,157863,1512],{"class":100},[94,157865,157760],{"class":104},[94,157867,1691],{"class":100},[94,157869,157814],{"class":153},[94,157871,3720],{"class":104},[94,157873,157874,157876,157878,157880],{"class":96,"line":15},[94,157875,31282],{"class":153},[94,157877,105],{"class":104},[94,157879,157825],{"class":209},[94,157881,111],{"class":104},[94,157883,157884,157886,157888,157890,157892],{"class":96,"line":1160},[94,157885,157783],{"class":100},[94,157887,157760],{"class":104},[94,157889,1691],{"class":100},[94,157891,157765],{"class":153},[94,157893,3720],{"class":104},[94,157895,157896,157898,157900,157902],{"class":96,"line":1175},[94,157897,31282],{"class":153},[94,157899,105],{"class":104},[94,157901,157776],{"class":209},[94,157903,111],{"class":104},[40,157905,157906,157907,157909],{},"成绩 95 会先满足 ",[91,157908,157853],{},"，后面的优秀分支就不会执行。",[35,157911,157913],{"id":157912},"_35-判断语句嵌套","3.5 判断语句嵌套",[40,157915,157916],{},"嵌套判断就是在一个判断内部再写判断。",[85,157918,157920],{"className":30361,"code":157919,"language":30363,"meta":14,"style":14},"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",[91,157921,157922,157940,157955,157959,157971,157985,157995,158002,158013,158019],{"__ignoreMap":14},[94,157923,157924,157926,157928,157930,157932,157934,157936,157938],{"class":96,"line":97},[94,157925,146523],{"class":104},[94,157927,150],{"class":100},[94,157929,2363],{"class":153},[94,157931,105],{"class":104},[94,157933,53798],{"class":153},[94,157935,105],{"class":104},[94,157937,152371],{"class":209},[94,157939,30480],{"class":104},[94,157941,157942,157944,157946,157948,157950,157953],{"class":96,"line":15},[94,157943,156338],{"class":104},[94,157945,150],{"class":100},[94,157947,60582],{"class":153},[94,157949,105],{"class":104},[94,157951,157952],{"class":209},"\"是否有票(y\u002Fn):\"",[94,157954,111],{"class":104},[94,157956,157957],{"class":96,"line":1160},[94,157958,2381],{"emptyLinePlaceholder":20},[94,157960,157961,157963,157965,157967,157969],{"class":96,"line":1175},[94,157962,1512],{"class":100},[94,157964,15689],{"class":104},[94,157966,1691],{"class":100},[94,157968,156262],{"class":153},[94,157970,3720],{"class":104},[94,157972,157973,157975,157978,157980,157983],{"class":96,"line":1181},[94,157974,3082],{"class":100},[94,157976,157977],{"class":104}," has_ticket ",[94,157979,2930],{"class":100},[94,157981,157982],{"class":209}," \"y\"",[94,157984,3720],{"class":104},[94,157986,157987,157989,157991,157993],{"class":96,"line":1195},[94,157988,32434],{"class":153},[94,157990,105],{"class":104},[94,157992,157624],{"class":209},[94,157994,111],{"class":104},[94,157996,157997,158000],{"class":96,"line":1201},[94,157998,157999],{"class":100},"    else",[94,158001,3720],{"class":104},[94,158003,158004,158006,158008,158011],{"class":96,"line":1292},[94,158005,32434],{"class":153},[94,158007,105],{"class":104},[94,158009,158010],{"class":209},"\"请先买票\"",[94,158012,111],{"class":104},[94,158014,158015,158017],{"class":96,"line":1298},[94,158016,1682],{"class":100},[94,158018,3720],{"class":104},[94,158020,158021,158023,158025,158028],{"class":96,"line":1310},[94,158022,31282],{"class":153},[94,158024,105],{"class":104},[94,158026,158027],{"class":209},"\"未成年人禁止进入\"",[94,158029,111],{"class":104},[40,158031,158032],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[35,158034,158036],{"id":158035},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[65,158038,158040],{"id":158039},"_361-and","3.6.1 and",[40,158042,158043],{},"两个条件都成立才成立。",[85,158045,158047],{"className":30361,"code":158046,"language":30363,"meta":14,"style":14},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[91,158048,158049,158057,158065,158069,158084],{"__ignoreMap":14},[94,158050,158051,158053,158055],{"class":96,"line":97},[94,158052,146523],{"class":104},[94,158054,150],{"class":100},[94,158056,88042],{"class":153},[94,158058,158059,158061,158063],{"class":96,"line":15},[94,158060,156338],{"class":104},[94,158062,150],{"class":100},[94,158064,153576],{"class":153},[94,158066,158067],{"class":96,"line":1160},[94,158068,2381],{"emptyLinePlaceholder":20},[94,158070,158071,158073,158075,158077,158079,158081],{"class":96,"line":1175},[94,158072,1512],{"class":100},[94,158074,15689],{"class":104},[94,158076,1691],{"class":100},[94,158078,156262],{"class":153},[94,158080,120406],{"class":100},[94,158082,158083],{"class":104}," has_ticket:\n",[94,158085,158086,158088,158090,158092],{"class":96,"line":1181},[94,158087,31282],{"class":153},[94,158089,105],{"class":104},[94,158091,157624],{"class":209},[94,158093,111],{"class":104},[65,158095,158097],{"id":158096},"_362-or","3.6.2 or",[40,158099,158100],{},"只要一个条件成立就成立。",[85,158102,158104],{"className":30361,"code":158103,"language":30363,"meta":14,"style":14},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[91,158105,158106,158115,158124,158128,158140],{"__ignoreMap":14},[94,158107,158108,158111,158113],{"class":96,"line":97},[94,158109,158110],{"class":104},"is_vip ",[94,158112,150],{"class":100},[94,158114,125784],{"class":153},[94,158116,158117,158120,158122],{"class":96,"line":15},[94,158118,158119],{"class":104},"coupon ",[94,158121,150],{"class":100},[94,158123,153576],{"class":153},[94,158125,158126],{"class":96,"line":1160},[94,158127,2381],{"emptyLinePlaceholder":20},[94,158129,158130,158132,158135,158137],{"class":96,"line":1175},[94,158131,1512],{"class":100},[94,158133,158134],{"class":104}," is_vip ",[94,158136,115067],{"class":100},[94,158138,158139],{"class":104}," coupon:\n",[94,158141,158142,158144,158146,158149],{"class":96,"line":1181},[94,158143,31282],{"class":153},[94,158145,105],{"class":104},[94,158147,158148],{"class":209},"\"可以享受优惠\"",[94,158150,111],{"class":104},[65,158152,158154],{"id":158153},"_363-not","3.6.3 not",[40,158156,158157],{},"取反。",[85,158159,158161],{"className":30361,"code":158160,"language":30363,"meta":14,"style":14},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[91,158162,158163,158172,158176,158185],{"__ignoreMap":14},[94,158164,158165,158168,158170],{"class":96,"line":97},[94,158166,158167],{"class":104},"is_closed ",[94,158169,150],{"class":100},[94,158171,125784],{"class":153},[94,158173,158174],{"class":96,"line":15},[94,158175,2381],{"emptyLinePlaceholder":20},[94,158177,158178,158180,158182],{"class":96,"line":1160},[94,158179,1512],{"class":100},[94,158181,38913],{"class":100},[94,158183,158184],{"class":104}," is_closed:\n",[94,158186,158187,158189,158191,158194],{"class":96,"line":1175},[94,158188,31282],{"class":153},[94,158190,105],{"class":104},[94,158192,158193],{"class":209},"\"店铺营业中\"",[94,158195,111],{"class":104},[35,158197,158199],{"id":158198},"_37-链式比较","3.7 链式比较",[40,158201,158202],{},"Python 支持链式比较：",[85,158204,158206],{"className":30361,"code":158205,"language":30363,"meta":14,"style":14},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[91,158207,158208,158217,158221,158238],{"__ignoreMap":14},[94,158209,158210,158212,158214],{"class":96,"line":97},[94,158211,155335],{"class":104},[94,158213,150],{"class":100},[94,158215,158216],{"class":153}," 85\n",[94,158218,158219],{"class":96,"line":15},[94,158220,2381],{"emptyLinePlaceholder":20},[94,158222,158223,158225,158227,158230,158232,158234,158236],{"class":96,"line":1160},[94,158224,1512],{"class":100},[94,158226,4074],{"class":153},[94,158228,158229],{"class":100}," \u003C=",[94,158231,157760],{"class":104},[94,158233,1569],{"class":100},[94,158235,5736],{"class":153},[94,158237,3720],{"class":104},[94,158239,158240,158242,158244,158247],{"class":96,"line":1175},[94,158241,31282],{"class":153},[94,158243,105],{"class":104},[94,158245,158246],{"class":209},"\"成绩合法\"",[94,158248,111],{"class":104},[40,158250,158251],{},"等价于：",[85,158253,158255],{"className":30361,"code":158254,"language":30363,"meta":14,"style":14},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[91,158256,158257,158277],{"__ignoreMap":14},[94,158258,158259,158261,158263,158265,158267,158269,158271,158273,158275],{"class":96,"line":97},[94,158260,1512],{"class":100},[94,158262,157760],{"class":104},[94,158264,1691],{"class":100},[94,158266,4074],{"class":153},[94,158268,120406],{"class":100},[94,158270,157760],{"class":104},[94,158272,1569],{"class":100},[94,158274,5736],{"class":153},[94,158276,3720],{"class":104},[94,158278,158279,158281,158283,158285],{"class":96,"line":15},[94,158280,31282],{"class":153},[94,158282,105],{"class":104},[94,158284,158246],{"class":209},[94,158286,111],{"class":104},[35,158288,158290],{"id":158289},"_38-真值和假值","3.8 真值和假值",[40,158292,116444,158293,158295],{},[91,158294,1512],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[40,158297,158298],{},"假值：",[85,158300,158302],{"className":30361,"code":158301,"language":30363,"meta":14,"style":14},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[91,158303,158304,158308,158313,158317,158321,158326,158330,158334,158339],{"__ignoreMap":14},[94,158305,158306],{"class":96,"line":97},[94,158307,157494],{"class":153},[94,158309,158310],{"class":96,"line":15},[94,158311,158312],{"class":153},"None\n",[94,158314,158315],{"class":96,"line":1160},[94,158316,3066],{"class":153},[94,158318,158319],{"class":96,"line":1175},[94,158320,32325],{"class":153},[94,158322,158323],{"class":96,"line":1181},[94,158324,158325],{"class":209},"\"\"\n",[94,158327,158328],{"class":96,"line":1195},[94,158329,32340],{"class":104},[94,158331,158332],{"class":96,"line":1201},[94,158333,1957],{"class":104},[94,158335,158336],{"class":96,"line":1292},[94,158337,158338],{"class":104},"{}\n",[94,158340,158341,158343],{"class":96,"line":1298},[94,158342,155267],{"class":153},[94,158344,1957],{"class":104},[40,158346,15117],{},[85,158348,158350],{"className":30361,"code":158349,"language":30363,"meta":14,"style":14},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[91,158351,158352,158366,158370,158377,158397,158403],{"__ignoreMap":14},[94,158353,158354,158356,158358,158360,158362,158364],{"class":96,"line":97},[94,158355,146513],{"class":104},[94,158357,150],{"class":100},[94,158359,60582],{"class":153},[94,158361,105],{"class":104},[94,158363,152356],{"class":209},[94,158365,111],{"class":104},[94,158367,158368],{"class":96,"line":15},[94,158369,2381],{"emptyLinePlaceholder":20},[94,158371,158372,158374],{"class":96,"line":1160},[94,158373,1512],{"class":100},[94,158375,158376],{"class":104}," name:\n",[94,158378,158379,158381,158383,158385,158387,158389,158391,158393,158395],{"class":96,"line":1175},[94,158380,31282],{"class":153},[94,158382,105],{"class":104},[94,158384,157],{"class":100},[94,158386,157031],{"class":209},[94,158388,1001],{"class":153},[94,158390,79787],{"class":104},[94,158392,1051],{"class":153},[94,158394,356],{"class":209},[94,158396,111],{"class":104},[94,158398,158399,158401],{"class":96,"line":1181},[94,158400,1682],{"class":100},[94,158402,3720],{"class":104},[94,158404,158405,158407,158409,158412],{"class":96,"line":1195},[94,158406,31282],{"class":153},[94,158408,105],{"class":104},[94,158410,158411],{"class":209},"\"姓名不能为空\"",[94,158413,111],{"class":104},[35,158415,158417],{"id":158416},"_39-match语句","3.9 match语句",[40,158419,158420,158421,158423],{},"Python 3.10 开始支持 ",[91,158422,71242],{},"。它适合处理固定选项。",[85,158425,158427],{"className":30361,"code":158426,"language":30363,"meta":14,"style":14},"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",[91,158428,158429,158445,158449,158456,158466,158477,158486,158497,158506,158517,158524],{"__ignoreMap":14},[94,158430,158431,158434,158436,158438,158440,158443],{"class":96,"line":97},[94,158432,158433],{"class":104},"command ",[94,158435,150],{"class":100},[94,158437,60582],{"class":153},[94,158439,105],{"class":104},[94,158441,158442],{"class":209},"\"请输入命令:\"",[94,158444,111],{"class":104},[94,158446,158447],{"class":96,"line":15},[94,158448,2381],{"emptyLinePlaceholder":20},[94,158450,158451,158453],{"class":96,"line":1160},[94,158452,71242],{"class":100},[94,158454,158455],{"class":104}," command:\n",[94,158457,158458,158461,158464],{"class":96,"line":1175},[94,158459,158460],{"class":100},"    case",[94,158462,158463],{"class":209}," \"start\"",[94,158465,3720],{"class":104},[94,158467,158468,158470,158472,158475],{"class":96,"line":1181},[94,158469,32434],{"class":153},[94,158471,105],{"class":104},[94,158473,158474],{"class":209},"\"启动\"",[94,158476,111],{"class":104},[94,158478,158479,158481,158484],{"class":96,"line":1195},[94,158480,158460],{"class":100},[94,158482,158483],{"class":209}," \"stop\"",[94,158485,3720],{"class":104},[94,158487,158488,158490,158492,158495],{"class":96,"line":1201},[94,158489,32434],{"class":153},[94,158491,105],{"class":104},[94,158493,158494],{"class":209},"\"停止\"",[94,158496,111],{"class":104},[94,158498,158499,158501,158504],{"class":96,"line":1292},[94,158500,158460],{"class":100},[94,158502,158503],{"class":209}," \"restart\"",[94,158505,3720],{"class":104},[94,158507,158508,158510,158512,158515],{"class":96,"line":1298},[94,158509,32434],{"class":153},[94,158511,105],{"class":104},[94,158513,158514],{"class":209},"\"重启\"",[94,158516,111],{"class":104},[94,158518,158519,158521],{"class":96,"line":1310},[94,158520,158460],{"class":100},[94,158522,158523],{"class":104}," _:\n",[94,158525,158526,158528,158530,158533],{"class":96,"line":1593},[94,158527,32434],{"class":153},[94,158529,105],{"class":104},[94,158531,158532],{"class":209},"\"未知命令\"",[94,158534,111],{"class":104},[40,158536,158537,158538,158540,158541,158543],{},"入门阶段掌握 ",[91,158539,154635],{}," 更重要，",[91,158542,71242],{}," 可以作为补充。",[35,158545,158547],{"id":158546},"_310-小案例成绩等级","3.10 小案例：成绩等级",[40,158549,123269],{},[48,158551,158552,158555,158558],{},[51,158553,158554],{},"输入成绩。",[51,158556,158557],{},"判断成绩是否合法。",[51,158559,158560],{},"输出等级。",[40,158562,10017],{},[85,158564,158566],{"className":30361,"code":158565,"language":30363,"meta":14,"style":14},"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",[91,158567,158568,158586,158590,158608,158619,158631,158642,158654,158665,158678,158689,158701,158712,158718],{"__ignoreMap":14},[94,158569,158570,158572,158574,158576,158578,158580,158582,158584],{"class":96,"line":97},[94,158571,155335],{"class":104},[94,158573,150],{"class":100},[94,158575,109774],{"class":153},[94,158577,105],{"class":104},[94,158579,53798],{"class":153},[94,158581,105],{"class":104},[94,158583,152386],{"class":209},[94,158585,30480],{"class":104},[94,158587,158588],{"class":96,"line":15},[94,158589,2381],{"emptyLinePlaceholder":20},[94,158591,158592,158594,158596,158598,158600,158602,158604,158606],{"class":96,"line":1160},[94,158593,1512],{"class":100},[94,158595,38913],{"class":100},[94,158597,4074],{"class":153},[94,158599,158229],{"class":100},[94,158601,157760],{"class":104},[94,158603,1569],{"class":100},[94,158605,5736],{"class":153},[94,158607,3720],{"class":104},[94,158609,158610,158612,158614,158617],{"class":96,"line":1175},[94,158611,31282],{"class":153},[94,158613,105],{"class":104},[94,158615,158616],{"class":209},"\"成绩不合法\"",[94,158618,111],{"class":104},[94,158620,158621,158623,158625,158627,158629],{"class":96,"line":1181},[94,158622,157783],{"class":100},[94,158624,157760],{"class":104},[94,158626,1691],{"class":100},[94,158628,157765],{"class":153},[94,158630,3720],{"class":104},[94,158632,158633,158635,158637,158640],{"class":96,"line":1195},[94,158634,31282],{"class":153},[94,158636,105],{"class":104},[94,158638,158639],{"class":209},"\"等级:A\"",[94,158641,111],{"class":104},[94,158643,158644,158646,158648,158650,158652],{"class":96,"line":1201},[94,158645,157783],{"class":100},[94,158647,157760],{"class":104},[94,158649,1691],{"class":100},[94,158651,157790],{"class":153},[94,158653,3720],{"class":104},[94,158655,158656,158658,158660,158663],{"class":96,"line":1292},[94,158657,31282],{"class":153},[94,158659,105],{"class":104},[94,158661,158662],{"class":209},"\"等级:B\"",[94,158664,111],{"class":104},[94,158666,158667,158669,158671,158673,158676],{"class":96,"line":1298},[94,158668,157783],{"class":100},[94,158670,157760],{"class":104},[94,158672,1691],{"class":100},[94,158674,158675],{"class":153}," 70",[94,158677,3720],{"class":104},[94,158679,158680,158682,158684,158687],{"class":96,"line":1310},[94,158681,31282],{"class":153},[94,158683,105],{"class":104},[94,158685,158686],{"class":209},"\"等级:C\"",[94,158688,111],{"class":104},[94,158690,158691,158693,158695,158697,158699],{"class":96,"line":1593},[94,158692,157783],{"class":100},[94,158694,157760],{"class":104},[94,158696,1691],{"class":100},[94,158698,157814],{"class":153},[94,158700,3720],{"class":104},[94,158702,158703,158705,158707,158710],{"class":96,"line":1598},[94,158704,31282],{"class":153},[94,158706,105],{"class":104},[94,158708,158709],{"class":209},"\"等级:D\"",[94,158711,111],{"class":104},[94,158713,158714,158716],{"class":96,"line":1604},[94,158715,1682],{"class":100},[94,158717,3720],{"class":104},[94,158719,158720,158722,158724,158727],{"class":96,"line":1609},[94,158721,31282],{"class":153},[94,158723,105],{"class":104},[94,158725,158726],{"class":209},"\"等级:E\"",[94,158728,111],{"class":104},[35,158730,158732],{"id":158731},"_311-小案例会员折扣","3.11 小案例：会员折扣",[40,158734,123269],{},[48,158736,158737,158740,158743,158746],{},[51,158738,158739],{},"输入消费金额。",[51,158741,158742],{},"输入会员等级，普通、银卡、金卡。",[51,158744,158745],{},"普通不打折，银卡 9 折，金卡 8 折。",[51,158747,158748],{},"满 500 再减 50。",[40,158750,10017],{},[85,158752,158754],{"className":30361,"code":158753,"language":30363,"meta":14,"style":14},"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",[91,158755,158756,158776,158792,158796,158804,158808,158822,158832,158845,158854,158867,158875,158881,158892,158896,158910,158914,158928,158938,158942],{"__ignoreMap":14},[94,158757,158758,158761,158763,158765,158767,158769,158771,158774],{"class":96,"line":97},[94,158759,158760],{"class":104},"amount ",[94,158762,150],{"class":100},[94,158764,109774],{"class":153},[94,158766,105],{"class":104},[94,158768,53798],{"class":153},[94,158770,105],{"class":104},[94,158772,158773],{"class":209},"\"请输入消费金额:\"",[94,158775,30480],{"class":104},[94,158777,158778,158781,158783,158785,158787,158790],{"class":96,"line":15},[94,158779,158780],{"class":104},"level ",[94,158782,150],{"class":100},[94,158784,60582],{"class":153},[94,158786,105],{"class":104},[94,158788,158789],{"class":209},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[94,158791,111],{"class":104},[94,158793,158794],{"class":96,"line":1160},[94,158795,2381],{"emptyLinePlaceholder":20},[94,158797,158798,158800,158802],{"class":96,"line":1175},[94,158799,157213],{"class":104},[94,158801,150],{"class":100},[94,158803,55676],{"class":153},[94,158805,158806],{"class":96,"line":1181},[94,158807,2381],{"emptyLinePlaceholder":20},[94,158809,158810,158812,158815,158817,158820],{"class":96,"line":1195},[94,158811,1512],{"class":100},[94,158813,158814],{"class":104}," level ",[94,158816,2930],{"class":100},[94,158818,158819],{"class":209}," \"银卡\"",[94,158821,3720],{"class":104},[94,158823,158824,158827,158829],{"class":96,"line":1201},[94,158825,158826],{"class":104},"    discount ",[94,158828,150],{"class":100},[94,158830,158831],{"class":153}," 0.9\n",[94,158833,158834,158836,158838,158840,158843],{"class":96,"line":1292},[94,158835,157783],{"class":100},[94,158837,158814],{"class":104},[94,158839,2930],{"class":100},[94,158841,158842],{"class":209}," \"金卡\"",[94,158844,3720],{"class":104},[94,158846,158847,158849,158851],{"class":96,"line":1298},[94,158848,158826],{"class":104},[94,158850,150],{"class":100},[94,158852,158853],{"class":153}," 0.8\n",[94,158855,158856,158858,158860,158862,158865],{"class":96,"line":1310},[94,158857,157783],{"class":100},[94,158859,158814],{"class":104},[94,158861,2930],{"class":100},[94,158863,158864],{"class":209}," \"普通\"",[94,158866,3720],{"class":104},[94,158868,158869,158871,158873],{"class":96,"line":1593},[94,158870,158826],{"class":104},[94,158872,150],{"class":100},[94,158874,55676],{"class":153},[94,158876,158877,158879],{"class":96,"line":1598},[94,158878,1682],{"class":100},[94,158880,3720],{"class":104},[94,158882,158883,158885,158887,158890],{"class":96,"line":1604},[94,158884,31282],{"class":153},[94,158886,105],{"class":104},[94,158888,158889],{"class":209},"\"会员等级输入错误，按普通会员计算\"",[94,158891,111],{"class":104},[94,158893,158894],{"class":96,"line":1609},[94,158895,2381],{"emptyLinePlaceholder":20},[94,158897,158898,158901,158903,158906,158908],{"class":96,"line":1623},[94,158899,158900],{"class":104},"pay ",[94,158902,150],{"class":100},[94,158904,158905],{"class":104}," amount ",[94,158907,560],{"class":100},[94,158909,157252],{"class":104},[94,158911,158912],{"class":96,"line":1628},[94,158913,2381],{"emptyLinePlaceholder":20},[94,158915,158916,158918,158921,158923,158926],{"class":96,"line":1634},[94,158917,1512],{"class":100},[94,158919,158920],{"class":104}," pay ",[94,158922,1691],{"class":100},[94,158924,158925],{"class":153}," 500",[94,158927,3720],{"class":104},[94,158929,158930,158933,158935],{"class":96,"line":1655},[94,158931,158932],{"class":104},"    pay ",[94,158934,150229],{"class":100},[94,158936,158937],{"class":153}," 50\n",[94,158939,158940],{"class":96,"line":1660},[94,158941,2381],{"emptyLinePlaceholder":20},[94,158943,158944,158946,158948,158950,158952,158954,158957,158959,158961,158963],{"class":96,"line":1674},[94,158945,30398],{"class":153},[94,158947,105],{"class":104},[94,158949,157],{"class":100},[94,158951,157333],{"class":209},[94,158953,1001],{"class":153},[94,158955,158956],{"class":104},"pay",[94,158958,157136],{"class":100},[94,158960,1051],{"class":153},[94,158962,156989],{"class":209},[94,158964,111],{"class":104},[35,158966,158968],{"id":158967},"_312-易错点","3.12 易错点",[48,158970,158971,158974,158977,158980,158985],{},[51,158972,158973],{},"冒号不能漏。",[51,158975,158976],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[51,158978,158979],{},"多分支判断要注意顺序。",[51,158981,158982,158983,28368],{},"判断相等用 ",[91,158984,2930],{},[51,158986,158987],{},"字符串比较区分大小写：",[85,158989,158991],{"className":30361,"code":158990,"language":30363,"meta":14,"style":14},"\"Y\" == \"y\"  # False\n",[91,158992,158993],{"__ignoreMap":14},[94,158994,158995,158998,159000,159002],{"class":96,"line":97},[94,158996,158997],{"class":209},"\"Y\"",[94,158999,101536],{"class":100},[94,159001,157982],{"class":209},[94,159003,159004],{"class":163},"  # False\n",[40,159006,159007],{},"可转换后再判断：",[85,159009,159011],{"className":30361,"code":159010,"language":30363,"meta":14,"style":14},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[91,159012,159013,159030,159043],{"__ignoreMap":14},[94,159014,159015,159018,159020,159022,159024,159027],{"class":96,"line":97},[94,159016,159017],{"class":104},"answer ",[94,159019,150],{"class":100},[94,159021,60582],{"class":153},[94,159023,105],{"class":104},[94,159025,159026],{"class":209},"\"是否继续(y\u002Fn):\"",[94,159028,159029],{"class":104},").lower()\n",[94,159031,159032,159034,159037,159039,159041],{"class":96,"line":15},[94,159033,1512],{"class":100},[94,159035,159036],{"class":104}," answer ",[94,159038,2930],{"class":100},[94,159040,157982],{"class":209},[94,159042,3720],{"class":104},[94,159044,159045,159047,159049,159052],{"class":96,"line":1160},[94,159046,31282],{"class":153},[94,159048,105],{"class":104},[94,159050,159051],{"class":209},"\"继续\"",[94,159053,111],{"class":104},[35,159055,159057],{"id":159056},"_313-本章练习","3.13 本章练习",[48,159059,159060,159063,159066,159069,159079],{},[51,159061,159062],{},"输入年龄，判断是否成年。",[51,159064,159065],{},"输入年份，判断是否为闰年。",[51,159067,159068],{},"输入三个数字，输出最大值。",[51,159070,159071,159072,159075,159076,159078],{},"写登录判断：用户名是 ",[91,159073,159074],{},"admin"," 且密码是 ",[91,159077,15066],{}," 才登录成功。",[51,159080,159081],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5108,159083,159084],{},"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":14,"searchDepth":15,"depth":15,"links":159086},[159087,159088,159089,159090,159091,159092,159097,159098,159099,159100,159101,159102,159103],{"id":157475,"depth":15,"text":157476},{"id":157528,"depth":15,"text":157529},{"id":157632,"depth":15,"text":157633},{"id":157722,"depth":15,"text":157723},{"id":157912,"depth":15,"text":157913},{"id":158035,"depth":15,"text":158036,"children":159093},[159094,159095,159096],{"id":158039,"depth":1160,"text":158040},{"id":158096,"depth":1160,"text":158097},{"id":158153,"depth":1160,"text":158154},{"id":158198,"depth":15,"text":158199},{"id":158289,"depth":15,"text":158290},{"id":158416,"depth":15,"text":158417},{"id":158546,"depth":15,"text":158547},{"id":158731,"depth":15,"text":158732},{"id":158967,"depth":15,"text":158968},{"id":159056,"depth":15,"text":159057},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157467,"description":17},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159110,"title":159111,"body":159112,"description":17,"extension":18,"meta":160881,"navigation":20,"path":160882,"seo":160883,"stem":160884,"__hash__":160885},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159113,"toc":160861},[159114,159117,159121,159127,159130,159147,159151,159153,159170,159172,159217,159219,159236,159240,159243,159309,159312,159330,159334,159495,159504,159508,159512,159517,159564,159566,159572,159576,159581,159628,159630,159636,159640,159645,159681,159684,159731,159735,159741,159799,159804,159835,159840,159844,159899,159902,159974,159977,160036,160040,160043,160118,160121,160125,160231,160234,160260,160264,160276,160345,160348,160440,160444,160446,160457,160459,160589,160593,160795,160803,160807,160837,160841,160858],[10,159115,159111],{"id":159116},"_4-循环语句",[35,159118,159120],{"id":159119},"_41-为什么需要循环","4.1 为什么需要循环",[40,159122,159123,159124,159126],{},"如果要输出 1 到 100，不应该写 100 行 ",[91,159125,146449],{},"，而应该用循环。",[40,159128,159129],{},"循环适合处理重复任务：",[48,159131,159132,159135,159138,159141,159144],{},[51,159133,159134],{},"重复输出。",[51,159136,159137],{},"重复输入。",[51,159139,159140],{},"遍历数据。",[51,159142,159143],{},"持续执行菜单。",[51,159145,159146],{},"批量处理文件或数据。",[35,159148,159150],{"id":159149},"_42-while循环","4.2 while循环",[40,159152,5163],{},[85,159154,159156],{"className":30361,"code":159155,"language":30363,"meta":14,"style":14},"while 条件:\n    循环体\n",[91,159157,159158,159165],{"__ignoreMap":14},[94,159159,159160,159162],{"class":96,"line":97},[94,159161,108640],{"class":100},[94,159163,159164],{"class":104}," 条件:\n",[94,159166,159167],{"class":96,"line":15},[94,159168,159169],{"class":104},"    循环体\n",[40,159171,15117],{},[85,159173,159175],{"className":30361,"code":159174,"language":30363,"meta":14,"style":14},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[91,159176,159177,159185,159189,159201,159208],{"__ignoreMap":14},[94,159178,159179,159181,159183],{"class":96,"line":97},[94,159180,100125],{"class":104},[94,159182,150],{"class":100},[94,159184,55676],{"class":153},[94,159186,159187],{"class":96,"line":15},[94,159188,2381],{"emptyLinePlaceholder":20},[94,159190,159191,159193,159195,159197,159199],{"class":96,"line":1160},[94,159192,108640],{"class":100},[94,159194,9420],{"class":104},[94,159196,1569],{"class":100},[94,159198,2129],{"class":153},[94,159200,3720],{"class":104},[94,159202,159203,159205],{"class":96,"line":1175},[94,159204,31282],{"class":153},[94,159206,159207],{"class":104},"(i)\n",[94,159209,159210,159213,159215],{"class":96,"line":1181},[94,159211,159212],{"class":104},"    i ",[94,159214,9459],{"class":100},[94,159216,55676],{"class":153},[40,159218,80906],{},[48,159220,159221,159227,159230,159233],{},[51,159222,159223,159224,28368],{},"判断条件 ",[91,159225,159226],{},"i \u003C= 5",[51,159228,159229],{},"条件成立，执行循环体。",[51,159231,159232],{},"执行完后回到条件判断。",[51,159234,159235],{},"条件不成立，退出循环。",[35,159237,159239],{"id":159238},"_43-while累加","4.3 while累加",[40,159241,159242],{},"计算 1 到 100 的和：",[85,159244,159246],{"className":30361,"code":159245,"language":30363,"meta":14,"style":14},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[91,159247,159248,159256,159264,159268,159280,159290,159298,159302],{"__ignoreMap":14},[94,159249,159250,159252,159254],{"class":96,"line":97},[94,159251,100125],{"class":104},[94,159253,150],{"class":100},[94,159255,55676],{"class":153},[94,159257,159258,159260,159262],{"class":96,"line":15},[94,159259,157237],{"class":104},[94,159261,150],{"class":100},[94,159263,47316],{"class":153},[94,159265,159266],{"class":96,"line":1160},[94,159267,2381],{"emptyLinePlaceholder":20},[94,159269,159270,159272,159274,159276,159278],{"class":96,"line":1175},[94,159271,108640],{"class":100},[94,159273,9420],{"class":104},[94,159275,1569],{"class":100},[94,159277,5736],{"class":153},[94,159279,3720],{"class":104},[94,159281,159282,159285,159287],{"class":96,"line":1181},[94,159283,159284],{"class":104},"    total ",[94,159286,9459],{"class":100},[94,159288,159289],{"class":104}," i\n",[94,159291,159292,159294,159296],{"class":96,"line":1195},[94,159293,159212],{"class":104},[94,159295,9459],{"class":100},[94,159297,55676],{"class":153},[94,159299,159300],{"class":96,"line":1201},[94,159301,2381],{"emptyLinePlaceholder":20},[94,159303,159304,159306],{"class":96,"line":1292},[94,159305,30398],{"class":153},[94,159307,159308],{"class":104},"(total)\n",[40,159310,159311],{},"核心思想：",[48,159313,159314,159319,159324],{},[51,159315,159316,159318],{},[91,159317,546],{}," 控制循环次数。",[51,159320,159321,159323],{},[91,159322,157338],{}," 保存累加结果。",[51,159325,159326,159327,159329],{},"每轮循环都要更新 ",[91,159328,546],{},"，否则可能死循环。",[35,159331,159333],{"id":159332},"_44-while猜数字","4.4 while猜数字",[85,159335,159337],{"className":30361,"code":159336,"language":30363,"meta":14,"style":14},"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",[91,159338,159339,159345,159349,159366,159374,159378,159386,159406,159415,159419,159431,159442,159452,159463,159469,159491],{"__ignoreMap":14},[94,159340,159341,159343],{"class":96,"line":97},[94,159342,30375],{"class":100},[94,159344,45311],{"class":104},[94,159346,159347],{"class":96,"line":15},[94,159348,2381],{"emptyLinePlaceholder":20},[94,159350,159351,159353,159355,159358,159360,159362,159364],{"class":96,"line":1160},[94,159352,159017],{"class":104},[94,159354,150],{"class":100},[94,159356,159357],{"class":104}," random.randint(",[94,159359,322],{"class":153},[94,159361,12417],{"class":104},[94,159363,416],{"class":153},[94,159365,111],{"class":104},[94,159367,159368,159370,159372],{"class":96,"line":1175},[94,159369,146668],{"class":104},[94,159371,150],{"class":100},[94,159373,47316],{"class":153},[94,159375,159376],{"class":96,"line":1181},[94,159377,2381],{"emptyLinePlaceholder":20},[94,159379,159380,159382,159384],{"class":96,"line":1195},[94,159381,108640],{"class":100},[94,159383,95269],{"class":153},[94,159385,3720],{"class":104},[94,159387,159388,159391,159393,159395,159397,159399,159401,159404],{"class":96,"line":1201},[94,159389,159390],{"class":104},"    guess ",[94,159392,150],{"class":100},[94,159394,2363],{"class":153},[94,159396,105],{"class":104},[94,159398,53798],{"class":153},[94,159400,105],{"class":104},[94,159402,159403],{"class":209},"\"请输入1到100之间的数字:\"",[94,159405,30480],{"class":104},[94,159407,159408,159411,159413],{"class":96,"line":1292},[94,159409,159410],{"class":104},"    count ",[94,159412,9459],{"class":100},[94,159414,55676],{"class":153},[94,159416,159417],{"class":96,"line":1298},[94,159418,2381],{"emptyLinePlaceholder":20},[94,159420,159421,159423,159426,159428],{"class":96,"line":1310},[94,159422,3082],{"class":100},[94,159424,159425],{"class":104}," guess ",[94,159427,1065],{"class":100},[94,159429,159430],{"class":104}," answer:\n",[94,159432,159433,159435,159437,159440],{"class":96,"line":1593},[94,159434,32434],{"class":153},[94,159436,105],{"class":104},[94,159438,159439],{"class":209},"\"猜大了\"",[94,159441,111],{"class":104},[94,159443,159444,159446,159448,159450],{"class":96,"line":1598},[94,159445,39276],{"class":100},[94,159447,159425],{"class":104},[94,159449,1015],{"class":100},[94,159451,159430],{"class":104},[94,159453,159454,159456,159458,159461],{"class":96,"line":1604},[94,159455,32434],{"class":153},[94,159457,105],{"class":104},[94,159459,159460],{"class":209},"\"猜小了\"",[94,159462,111],{"class":104},[94,159464,159465,159467],{"class":96,"line":1609},[94,159466,157999],{"class":100},[94,159468,3720],{"class":104},[94,159470,159471,159473,159475,159477,159480,159482,159484,159486,159489],{"class":96,"line":1623},[94,159472,32434],{"class":153},[94,159474,105],{"class":104},[94,159476,157],{"class":100},[94,159478,159479],{"class":209},"\"猜对了，一共猜了",[94,159481,1001],{"class":153},[94,159483,84411],{"class":104},[94,159485,1051],{"class":153},[94,159487,159488],{"class":209},"次\"",[94,159490,111],{"class":104},[94,159492,159493],{"class":96,"line":1628},[94,159494,31610],{"class":100},[40,159496,159497,159500,159501,159503],{},[91,159498,159499],{},"while True"," 表示无限循环，通常配合 ",[91,159502,2034],{}," 使用。",[35,159505,159507],{"id":159506},"_45-break和continue","4.5 break和continue",[65,159509,159511],{"id":159510},"_451-break","4.5.1 break",[40,159513,159514,159516],{},[91,159515,2034],{}," 直接结束整个循环。",[85,159518,159520],{"className":30361,"code":159519,"language":30363,"meta":14,"style":14},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[91,159521,159522,159542,159554,159558],{"__ignoreMap":14},[94,159523,159524,159526,159528,159530,159532,159534,159536,159538,159540],{"class":96,"line":97},[94,159525,3006],{"class":100},[94,159527,9420],{"class":104},[94,159529,26026],{"class":100},[94,159531,32426],{"class":153},[94,159533,105],{"class":104},[94,159535,322],{"class":153},[94,159537,12417],{"class":104},[94,159539,449],{"class":153},[94,159541,30769],{"class":104},[94,159543,159544,159546,159548,159550,159552],{"class":96,"line":15},[94,159545,3082],{"class":100},[94,159547,9420],{"class":104},[94,159549,2930],{"class":100},[94,159551,78047],{"class":153},[94,159553,3720],{"class":104},[94,159555,159556],{"class":96,"line":1160},[94,159557,31610],{"class":100},[94,159559,159560,159562],{"class":96,"line":1175},[94,159561,31282],{"class":153},[94,159563,159207],{"class":104},[40,159565,146434],{},[85,159567,159570],{"className":159568,"code":159569,"language":5169,"meta":14},[5167],"1\n2\n",[91,159571,159569],{"__ignoreMap":14},[65,159573,159575],{"id":159574},"_452-continue","4.5.2 continue",[40,159577,159578,159580],{},[91,159579,154649],{}," 跳过本轮剩余代码，进入下一轮循环。",[85,159582,159584],{"className":30361,"code":159583,"language":30363,"meta":14,"style":14},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[91,159585,159586,159606,159618,159622],{"__ignoreMap":14},[94,159587,159588,159590,159592,159594,159596,159598,159600,159602,159604],{"class":96,"line":97},[94,159589,3006],{"class":100},[94,159591,9420],{"class":104},[94,159593,26026],{"class":100},[94,159595,32426],{"class":153},[94,159597,105],{"class":104},[94,159599,322],{"class":153},[94,159601,12417],{"class":104},[94,159603,449],{"class":153},[94,159605,30769],{"class":104},[94,159607,159608,159610,159612,159614,159616],{"class":96,"line":15},[94,159609,3082],{"class":100},[94,159611,9420],{"class":104},[94,159613,2930],{"class":100},[94,159615,78047],{"class":153},[94,159617,3720],{"class":104},[94,159619,159620],{"class":96,"line":1160},[94,159621,148489],{"class":100},[94,159623,159624,159626],{"class":96,"line":1175},[94,159625,31282],{"class":153},[94,159627,159207],{"class":104},[40,159629,146434],{},[85,159631,159634],{"className":159632,"code":159633,"language":5169,"meta":14},[5167],"1\n2\n4\n5\n",[91,159635,159633],{"__ignoreMap":14},[35,159637,159639],{"id":159638},"_46-for循环","4.6 for循环",[40,159641,159642,159644],{},[91,159643,3006],{}," 常用于遍历序列。",[85,159646,159648],{"className":30361,"code":159647,"language":30363,"meta":14,"style":14},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[91,159649,159650,159659,159663,159674],{"__ignoreMap":14},[94,159651,159652,159654,159656],{"class":96,"line":97},[94,159653,146513],{"class":104},[94,159655,150],{"class":100},[94,159657,159658],{"class":209}," \"python\"\n",[94,159660,159661],{"class":96,"line":15},[94,159662,2381],{"emptyLinePlaceholder":20},[94,159664,159665,159667,159670,159672],{"class":96,"line":1160},[94,159666,3006],{"class":100},[94,159668,159669],{"class":104}," ch ",[94,159671,26026],{"class":100},[94,159673,158376],{"class":104},[94,159675,159676,159678],{"class":96,"line":1175},[94,159677,31282],{"class":153},[94,159679,159680],{"class":104},"(ch)\n",[40,159682,159683],{},"遍历列表：",[85,159685,159687],{"className":30361,"code":159686,"language":30363,"meta":14,"style":14},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[91,159688,159689,159711,159715,159725],{"__ignoreMap":14},[94,159690,159691,159694,159696,159698,159700,159702,159704,159706,159709],{"class":96,"line":97},[94,159692,159693],{"class":104},"students ",[94,159695,150],{"class":100},[94,159697,52203],{"class":104},[94,159699,149865],{"class":209},[94,159701,12417],{"class":104},[94,159703,150913],{"class":209},[94,159705,12417],{"class":104},[94,159707,159708],{"class":209},"\"小刚\"",[94,159710,33229],{"class":104},[94,159712,159713],{"class":96,"line":15},[94,159714,2381],{"emptyLinePlaceholder":20},[94,159716,159717,159719,159721,159723],{"class":96,"line":1160},[94,159718,3006],{"class":100},[94,159720,152114],{"class":104},[94,159722,26026],{"class":100},[94,159724,152119],{"class":104},[94,159726,159727,159729],{"class":96,"line":1175},[94,159728,31282],{"class":153},[94,159730,150019],{"class":104},[35,159732,159734],{"id":159733},"_47-range函数","4.7 range函数",[40,159736,159737,159740],{},[91,159738,159739],{},"range()"," 用于生成整数序列。",[85,159742,159744],{"className":30361,"code":159743,"language":30363,"meta":14,"style":14},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[91,159745,159746,159760,159778],{"__ignoreMap":14},[94,159747,159748,159750,159752,159754,159757],{"class":96,"line":97},[94,159749,33399],{"class":153},[94,159751,105],{"class":104},[94,159753,424],{"class":153},[94,159755,159756],{"class":104},")          ",[94,159758,159759],{"class":163},"# 0,1,2,3,4\n",[94,159761,159762,159764,159766,159768,159770,159772,159775],{"class":96,"line":15},[94,159763,33399],{"class":153},[94,159765,105],{"class":104},[94,159767,322],{"class":153},[94,159769,12417],{"class":104},[94,159771,424],{"class":153},[94,159773,159774],{"class":104},")       ",[94,159776,159777],{"class":163},"# 1,2,3,4\n",[94,159779,159780,159782,159784,159786,159788,159790,159792,159794,159796],{"class":96,"line":1160},[94,159781,33399],{"class":153},[94,159783,105],{"class":104},[94,159785,322],{"class":153},[94,159787,12417],{"class":104},[94,159789,551],{"class":153},[94,159791,12417],{"class":104},[94,159793,182],{"class":153},[94,159795,155638],{"class":104},[94,159797,159798],{"class":163},"# 1,3,5,7,9\n",[40,159800,159801,159802,24601],{},"配合 ",[91,159803,3006],{},[85,159805,159807],{"className":30361,"code":159806,"language":30363,"meta":14,"style":14},"for i in range(1, 6):\n    print(i)\n",[91,159808,159809,159829],{"__ignoreMap":14},[94,159810,159811,159813,159815,159817,159819,159821,159823,159825,159827],{"class":96,"line":97},[94,159812,3006],{"class":100},[94,159814,9420],{"class":104},[94,159816,26026],{"class":100},[94,159818,32426],{"class":153},[94,159820,105],{"class":104},[94,159822,322],{"class":153},[94,159824,12417],{"class":104},[94,159826,449],{"class":153},[94,159828,30769],{"class":104},[94,159830,159831,159833],{"class":96,"line":15},[94,159832,31282],{"class":153},[94,159834,159207],{"class":104},[40,159836,9007,159837,159839],{},[91,159838,33399],{}," 的结束值不包含在内。",[35,159841,159843],{"id":159842},"_48-for循环求和","4.8 for循环求和",[85,159845,159847],{"className":30361,"code":159846,"language":30363,"meta":14,"style":14},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[91,159848,159849,159857,159861,159881,159889,159893],{"__ignoreMap":14},[94,159850,159851,159853,159855],{"class":96,"line":97},[94,159852,157237],{"class":104},[94,159854,150],{"class":100},[94,159856,47316],{"class":153},[94,159858,159859],{"class":96,"line":15},[94,159860,2381],{"emptyLinePlaceholder":20},[94,159862,159863,159865,159867,159869,159871,159873,159875,159877,159879],{"class":96,"line":1160},[94,159864,3006],{"class":100},[94,159866,9420],{"class":104},[94,159868,26026],{"class":100},[94,159870,32426],{"class":153},[94,159872,105],{"class":104},[94,159874,322],{"class":153},[94,159876,12417],{"class":104},[94,159878,442],{"class":153},[94,159880,30769],{"class":104},[94,159882,159883,159885,159887],{"class":96,"line":1175},[94,159884,159284],{"class":104},[94,159886,9459],{"class":100},[94,159888,159289],{"class":104},[94,159890,159891],{"class":96,"line":1181},[94,159892,2381],{"emptyLinePlaceholder":20},[94,159894,159895,159897],{"class":96,"line":1195},[94,159896,30398],{"class":153},[94,159898,159308],{"class":104},[40,159900,159901],{},"求偶数和：",[85,159903,159905],{"className":30361,"code":159904,"language":30363,"meta":14,"style":14},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[91,159906,159907,159915,159919,159939,159955,159964,159968],{"__ignoreMap":14},[94,159908,159909,159911,159913],{"class":96,"line":97},[94,159910,157237],{"class":104},[94,159912,150],{"class":100},[94,159914,47316],{"class":153},[94,159916,159917],{"class":96,"line":15},[94,159918,2381],{"emptyLinePlaceholder":20},[94,159920,159921,159923,159925,159927,159929,159931,159933,159935,159937],{"class":96,"line":1160},[94,159922,3006],{"class":100},[94,159924,9420],{"class":104},[94,159926,26026],{"class":100},[94,159928,32426],{"class":153},[94,159930,105],{"class":104},[94,159932,322],{"class":153},[94,159934,12417],{"class":104},[94,159936,442],{"class":153},[94,159938,30769],{"class":104},[94,159940,159941,159943,159945,159947,159949,159951,159953],{"class":96,"line":1175},[94,159942,3082],{"class":100},[94,159944,9420],{"class":104},[94,159946,433],{"class":100},[94,159948,14737],{"class":153},[94,159950,101536],{"class":100},[94,159952,4074],{"class":153},[94,159954,3720],{"class":104},[94,159956,159957,159960,159962],{"class":96,"line":1181},[94,159958,159959],{"class":104},"        total ",[94,159961,9459],{"class":100},[94,159963,159289],{"class":104},[94,159965,159966],{"class":96,"line":1195},[94,159967,2381],{"emptyLinePlaceholder":20},[94,159969,159970,159972],{"class":96,"line":1201},[94,159971,30398],{"class":153},[94,159973,159308],{"class":104},[40,159975,159976],{},"也可以：",[85,159978,159980],{"className":30361,"code":159979,"language":30363,"meta":14,"style":14},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[91,159981,159982,159990,159994,160018,160026,160030],{"__ignoreMap":14},[94,159983,159984,159986,159988],{"class":96,"line":97},[94,159985,157237],{"class":104},[94,159987,150],{"class":100},[94,159989,47316],{"class":153},[94,159991,159992],{"class":96,"line":15},[94,159993,2381],{"emptyLinePlaceholder":20},[94,159995,159996,159998,160000,160002,160004,160006,160008,160010,160012,160014,160016],{"class":96,"line":1160},[94,159997,3006],{"class":100},[94,159999,9420],{"class":104},[94,160001,26026],{"class":100},[94,160003,32426],{"class":153},[94,160005,105],{"class":104},[94,160007,182],{"class":153},[94,160009,12417],{"class":104},[94,160011,442],{"class":153},[94,160013,12417],{"class":104},[94,160015,182],{"class":153},[94,160017,30769],{"class":104},[94,160019,160020,160022,160024],{"class":96,"line":1175},[94,160021,159284],{"class":104},[94,160023,9459],{"class":100},[94,160025,159289],{"class":104},[94,160027,160028],{"class":96,"line":1181},[94,160029,2381],{"emptyLinePlaceholder":20},[94,160031,160032,160034],{"class":96,"line":1195},[94,160033,30398],{"class":153},[94,160035,159308],{"class":104},[35,160037,160039],{"id":160038},"_49-循环嵌套","4.9 循环嵌套",[40,160041,160042],{},"嵌套循环就是循环里面再写循环。",[85,160044,160046],{"className":30361,"code":160045,"language":30363,"meta":14,"style":14},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[91,160047,160048,160068,160088],{"__ignoreMap":14},[94,160049,160050,160052,160054,160056,160058,160060,160062,160064,160066],{"class":96,"line":97},[94,160051,3006],{"class":100},[94,160053,9420],{"class":104},[94,160055,26026],{"class":100},[94,160057,32426],{"class":153},[94,160059,105],{"class":104},[94,160061,322],{"class":153},[94,160063,12417],{"class":104},[94,160065,398],{"class":153},[94,160067,30769],{"class":104},[94,160069,160070,160072,160074,160076,160078,160080,160082,160084,160086],{"class":96,"line":15},[94,160071,3182],{"class":100},[94,160073,9482],{"class":104},[94,160075,26026],{"class":100},[94,160077,32426],{"class":153},[94,160079,105],{"class":104},[94,160081,322],{"class":153},[94,160083,12417],{"class":104},[94,160085,398],{"class":153},[94,160087,30769],{"class":104},[94,160089,160090,160092,160094,160096,160099,160101,160103,160105,160108,160110,160112,160114,160116],{"class":96,"line":1160},[94,160091,32434],{"class":153},[94,160093,105],{"class":104},[94,160095,157],{"class":100},[94,160097,160098],{"class":209},"\"i=",[94,160100,1001],{"class":153},[94,160102,546],{"class":104},[94,160104,1051],{"class":153},[94,160106,160107],{"class":209},", j=",[94,160109,1001],{"class":153},[94,160111,572],{"class":104},[94,160113,1051],{"class":153},[94,160115,356],{"class":209},[94,160117,111],{"class":104},[40,160119,160120],{},"外层循环执行一次，内层循环执行完整一轮。",[35,160122,160124],{"id":160123},"_410-九九乘法表","4.10 九九乘法表",[85,160126,160128],{"className":30361,"code":160127,"language":30363,"meta":14,"style":14},"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",[91,160129,160130,160150,160173,160225],{"__ignoreMap":14},[94,160131,160132,160134,160136,160138,160140,160142,160144,160146,160148],{"class":96,"line":97},[94,160133,3006],{"class":100},[94,160135,9420],{"class":104},[94,160137,26026],{"class":100},[94,160139,32426],{"class":153},[94,160141,105],{"class":104},[94,160143,322],{"class":153},[94,160145,12417],{"class":104},[94,160147,551],{"class":153},[94,160149,30769],{"class":104},[94,160151,160152,160154,160156,160158,160160,160162,160164,160167,160169,160171],{"class":96,"line":15},[94,160153,3182],{"class":100},[94,160155,9482],{"class":104},[94,160157,26026],{"class":100},[94,160159,32426],{"class":153},[94,160161,105],{"class":104},[94,160163,322],{"class":153},[94,160165,160166],{"class":104},", i ",[94,160168,586],{"class":100},[94,160170,25101],{"class":153},[94,160172,30769],{"class":104},[94,160174,160175,160177,160179,160181,160183,160185,160187,160189,160191,160193,160195,160197,160199,160201,160203,160205,160207,160209,160211,160213,160215,160217,160219,160221,160223],{"class":96,"line":1160},[94,160176,32434],{"class":153},[94,160178,105],{"class":104},[94,160180,157],{"class":100},[94,160182,356],{"class":209},[94,160184,1001],{"class":153},[94,160186,572],{"class":104},[94,160188,1051],{"class":153},[94,160190,560],{"class":209},[94,160192,1001],{"class":153},[94,160194,546],{"class":104},[94,160196,1051],{"class":153},[94,160198,150],{"class":209},[94,160200,1001],{"class":153},[94,160202,100125],{"class":104},[94,160204,560],{"class":100},[94,160206,3391],{"class":104},[94,160208,1051],{"class":153},[94,160210,356],{"class":209},[94,160212,12417],{"class":104},[94,160214,45784],{"class":5198},[94,160216,150],{"class":100},[94,160218,356],{"class":209},[94,160220,1211],{"class":153},[94,160222,356],{"class":209},[94,160224,111],{"class":104},[94,160226,160227,160229],{"class":96,"line":1175},[94,160228,31282],{"class":153},[94,160230,1957],{"class":104},[40,160232,160233],{},"关键点：",[48,160235,160236,160242,160248,160254],{},[51,160237,160238,160239,160241],{},"外层 ",[91,160240,546],{}," 控制行。",[51,160243,160244,160245,160247],{},"内层 ",[91,160246,572],{}," 控制列。",[51,160249,160250,160251,160253],{},"每行结束后用 ",[91,160252,146449],{}," 换行。",[51,160255,160256,160259],{},[91,160257,160258],{},"end=\"\\t\""," 让同一行的内容横向排列。",[35,160261,160263],{"id":160262},"_411-循环else","4.11 循环else",[40,160265,160266,160267,160269,160270,160272,160273,160275],{},"Python 的循环可以带 ",[91,160268,1682],{},"。当循环正常结束时执行 ",[91,160271,1682],{},"，如果被 ",[91,160274,2034],{}," 打断，则不执行。",[85,160277,160279],{"className":30361,"code":160278,"language":30363,"meta":14,"style":14},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[91,160280,160281,160301,160313,160324,160328,160334],{"__ignoreMap":14},[94,160282,160283,160285,160287,160289,160291,160293,160295,160297,160299],{"class":96,"line":97},[94,160284,3006],{"class":100},[94,160286,9420],{"class":104},[94,160288,26026],{"class":100},[94,160290,32426],{"class":153},[94,160292,105],{"class":104},[94,160294,322],{"class":153},[94,160296,12417],{"class":104},[94,160298,449],{"class":153},[94,160300,30769],{"class":104},[94,160302,160303,160305,160307,160309,160311],{"class":96,"line":15},[94,160304,3082],{"class":100},[94,160306,9420],{"class":104},[94,160308,2930],{"class":100},[94,160310,2019],{"class":153},[94,160312,3720],{"class":104},[94,160314,160315,160317,160319,160322],{"class":96,"line":1160},[94,160316,32434],{"class":153},[94,160318,105],{"class":104},[94,160320,160321],{"class":209},"\"找到了\"",[94,160323,111],{"class":104},[94,160325,160326],{"class":96,"line":1175},[94,160327,31610],{"class":100},[94,160329,160330,160332],{"class":96,"line":1181},[94,160331,1682],{"class":100},[94,160333,3720],{"class":104},[94,160335,160336,160338,160340,160343],{"class":96,"line":1195},[94,160337,31282],{"class":153},[94,160339,105],{"class":104},[94,160341,160342],{"class":209},"\"没找到\"",[94,160344,111],{"class":104},[40,160346,160347],{},"常用于搜索。",[85,160349,160351],{"className":30361,"code":160350,"language":30363,"meta":14,"style":14},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[91,160352,160353,160374,160383,160387,160399,160410,160420,160424,160430],{"__ignoreMap":14},[94,160354,160355,160358,160360,160362,160364,160366,160368,160370,160372],{"class":96,"line":97},[94,160356,160357],{"class":104},"names ",[94,160359,150],{"class":100},[94,160361,52203],{"class":104},[94,160363,149865],{"class":209},[94,160365,12417],{"class":104},[94,160367,150913],{"class":209},[94,160369,12417],{"class":104},[94,160371,159708],{"class":209},[94,160373,33229],{"class":104},[94,160375,160376,160378,160380],{"class":96,"line":15},[94,160377,111555],{"class":104},[94,160379,150],{"class":100},[94,160381,160382],{"class":209}," \"小李\"\n",[94,160384,160385],{"class":96,"line":1160},[94,160386,2381],{"emptyLinePlaceholder":20},[94,160388,160389,160391,160394,160396],{"class":96,"line":1175},[94,160390,3006],{"class":100},[94,160392,160393],{"class":104}," name ",[94,160395,26026],{"class":100},[94,160397,160398],{"class":104}," names:\n",[94,160400,160401,160403,160405,160407],{"class":96,"line":1181},[94,160402,3082],{"class":100},[94,160404,160393],{"class":104},[94,160406,2930],{"class":100},[94,160408,160409],{"class":104}," target:\n",[94,160411,160412,160414,160416,160418],{"class":96,"line":1195},[94,160413,32434],{"class":153},[94,160415,105],{"class":104},[94,160417,160321],{"class":209},[94,160419,111],{"class":104},[94,160421,160422],{"class":96,"line":1201},[94,160423,31610],{"class":100},[94,160425,160426,160428],{"class":96,"line":1292},[94,160427,1682],{"class":100},[94,160429,3720],{"class":104},[94,160431,160432,160434,160436,160438],{"class":96,"line":1298},[94,160433,31282],{"class":153},[94,160435,105],{"class":104},[94,160437,160342],{"class":209},[94,160439,111],{"class":104},[35,160441,160443],{"id":160442},"_412-小案例登录重试","4.12 小案例：登录重试",[40,160445,123269],{},[48,160447,160448,160451,160454],{},[51,160449,160450],{},"用户最多输入 3 次密码。",[51,160452,160453],{},"密码正确则登录成功。",[51,160455,160456],{},"3 次都错误则锁定账号。",[40,160458,10017],{},[85,160460,160462],{"className":30361,"code":160461,"language":30363,"meta":14,"style":14},"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",[91,160463,160464,160474,160478,160494,160510,160514,160526,160537,160541,160547,160572,160578],{"__ignoreMap":14},[94,160465,160466,160469,160471],{"class":96,"line":97},[94,160467,160468],{"class":104},"password ",[94,160470,150],{"class":100},[94,160472,160473],{"class":209}," \"123456\"\n",[94,160475,160476],{"class":96,"line":15},[94,160477,2381],{"emptyLinePlaceholder":20},[94,160479,160480,160482,160484,160486,160488,160490,160492],{"class":96,"line":1160},[94,160481,3006],{"class":100},[94,160483,9420],{"class":104},[94,160485,26026],{"class":100},[94,160487,32426],{"class":153},[94,160489,105],{"class":104},[94,160491,176],{"class":153},[94,160493,30769],{"class":104},[94,160495,160496,160499,160501,160503,160505,160508],{"class":96,"line":1175},[94,160497,160498],{"class":104},"    user_password ",[94,160500,150],{"class":100},[94,160502,60582],{"class":153},[94,160504,105],{"class":104},[94,160506,160507],{"class":209},"\"请输入密码:\"",[94,160509,111],{"class":104},[94,160511,160512],{"class":96,"line":1181},[94,160513,2381],{"emptyLinePlaceholder":20},[94,160515,160516,160518,160521,160523],{"class":96,"line":1195},[94,160517,3082],{"class":100},[94,160519,160520],{"class":104}," user_password ",[94,160522,2930],{"class":100},[94,160524,160525],{"class":104}," password:\n",[94,160527,160528,160530,160532,160535],{"class":96,"line":1201},[94,160529,32434],{"class":153},[94,160531,105],{"class":104},[94,160533,160534],{"class":209},"\"登录成功\"",[94,160536,111],{"class":104},[94,160538,160539],{"class":96,"line":1292},[94,160540,31610],{"class":100},[94,160542,160543,160545],{"class":96,"line":1298},[94,160544,157999],{"class":100},[94,160546,3720],{"class":104},[94,160548,160549,160551,160553,160555,160558,160561,160563,160565,160567,160570],{"class":96,"line":1310},[94,160550,32434],{"class":153},[94,160552,105],{"class":104},[94,160554,157],{"class":100},[94,160556,160557],{"class":209},"\"密码错误，还剩",[94,160559,160560],{"class":153},"{2",[94,160562,52248],{"class":100},[94,160564,3013],{"class":104},[94,160566,1051],{"class":153},[94,160568,160569],{"class":209},"次机会\"",[94,160571,111],{"class":104},[94,160573,160574,160576],{"class":96,"line":1593},[94,160575,1682],{"class":100},[94,160577,3720],{"class":104},[94,160579,160580,160582,160584,160587],{"class":96,"line":1598},[94,160581,31282],{"class":153},[94,160583,105],{"class":104},[94,160585,160586],{"class":209},"\"账号已锁定\"",[94,160588,111],{"class":104},[35,160590,160592],{"id":160591},"_413-小案例菜单程序","4.13 小案例：菜单程序",[85,160594,160596],{"className":30361,"code":160595,"language":30363,"meta":14,"style":14},"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",[91,160597,160598,160606,160617,160628,160639,160650,160661,160665,160680,160684,160696,160707,160719,160730,160742,160753,160765,160775,160779,160785],{"__ignoreMap":14},[94,160599,160600,160602,160604],{"class":96,"line":97},[94,160601,108640],{"class":100},[94,160603,95269],{"class":153},[94,160605,3720],{"class":104},[94,160607,160608,160610,160612,160615],{"class":96,"line":15},[94,160609,31282],{"class":153},[94,160611,105],{"class":104},[94,160613,160614],{"class":209},"\"====== 菜单 ======\"",[94,160616,111],{"class":104},[94,160618,160619,160621,160623,160626],{"class":96,"line":1160},[94,160620,31282],{"class":153},[94,160622,105],{"class":104},[94,160624,160625],{"class":209},"\"1. 查询余额\"",[94,160627,111],{"class":104},[94,160629,160630,160632,160634,160637],{"class":96,"line":1175},[94,160631,31282],{"class":153},[94,160633,105],{"class":104},[94,160635,160636],{"class":209},"\"2. 存款\"",[94,160638,111],{"class":104},[94,160640,160641,160643,160645,160648],{"class":96,"line":1181},[94,160642,31282],{"class":153},[94,160644,105],{"class":104},[94,160646,160647],{"class":209},"\"3. 取款\"",[94,160649,111],{"class":104},[94,160651,160652,160654,160656,160659],{"class":96,"line":1195},[94,160653,31282],{"class":153},[94,160655,105],{"class":104},[94,160657,160658],{"class":209},"\"0. 退出\"",[94,160660,111],{"class":104},[94,160662,160663],{"class":96,"line":1201},[94,160664,2381],{"emptyLinePlaceholder":20},[94,160666,160667,160670,160672,160674,160676,160678],{"class":96,"line":1292},[94,160668,160669],{"class":104},"    choice ",[94,160671,150],{"class":100},[94,160673,60582],{"class":153},[94,160675,105],{"class":104},[94,160677,153050],{"class":209},[94,160679,111],{"class":104},[94,160681,160682],{"class":96,"line":1298},[94,160683,2381],{"emptyLinePlaceholder":20},[94,160685,160686,160688,160690,160692,160694],{"class":96,"line":1310},[94,160687,3082],{"class":100},[94,160689,153063],{"class":104},[94,160691,2930],{"class":100},[94,160693,153068],{"class":209},[94,160695,3720],{"class":104},[94,160697,160698,160700,160702,160705],{"class":96,"line":1593},[94,160699,32434],{"class":153},[94,160701,105],{"class":104},[94,160703,160704],{"class":209},"\"余额为1000元\"",[94,160706,111],{"class":104},[94,160708,160709,160711,160713,160715,160717],{"class":96,"line":1598},[94,160710,39276],{"class":100},[94,160712,153063],{"class":104},[94,160714,2930],{"class":100},[94,160716,153087],{"class":209},[94,160718,3720],{"class":104},[94,160720,160721,160723,160725,160728],{"class":96,"line":1604},[94,160722,32434],{"class":153},[94,160724,105],{"class":104},[94,160726,160727],{"class":209},"\"存款功能\"",[94,160729,111],{"class":104},[94,160731,160732,160734,160736,160738,160740],{"class":96,"line":1609},[94,160733,39276],{"class":100},[94,160735,153063],{"class":104},[94,160737,2930],{"class":100},[94,160739,153105],{"class":209},[94,160741,3720],{"class":104},[94,160743,160744,160746,160748,160751],{"class":96,"line":1623},[94,160745,32434],{"class":153},[94,160747,105],{"class":104},[94,160749,160750],{"class":209},"\"取款功能\"",[94,160752,111],{"class":104},[94,160754,160755,160757,160759,160761,160763],{"class":96,"line":1628},[94,160756,39276],{"class":100},[94,160758,153063],{"class":104},[94,160760,2930],{"class":100},[94,160762,153159],{"class":209},[94,160764,3720],{"class":104},[94,160766,160767,160769,160771,160773],{"class":96,"line":1634},[94,160768,32434],{"class":153},[94,160770,105],{"class":104},[94,160772,153170],{"class":209},[94,160774,111],{"class":104},[94,160776,160777],{"class":96,"line":1655},[94,160778,31610],{"class":100},[94,160780,160781,160783],{"class":96,"line":1660},[94,160782,157999],{"class":100},[94,160784,3720],{"class":104},[94,160786,160787,160789,160791,160793],{"class":96,"line":1674},[94,160788,32434],{"class":153},[94,160790,105],{"class":104},[94,160792,153191],{"class":209},[94,160794,111],{"class":104},[40,160796,160797,160798,160800,160801,28368],{},"菜单类程序通常使用 ",[91,160799,159499],{},"，用户选择退出时 ",[91,160802,2034],{},[35,160804,160806],{"id":160805},"_414-易错点","4.14 易错点",[48,160808,160809,160814,160820,160828,160834],{},[51,160810,160811,160813],{},[91,160812,108640],{}," 循环必须更新控制变量。",[51,160815,160816,160819],{},[91,160817,160818],{},"range(1, 10)"," 不包含 10。",[51,160821,160822,160824,160825,160827],{},[91,160823,2034],{}," 结束整个循环，",[91,160826,154649],{}," 只跳过本轮。",[51,160829,160830,160831,160833],{},"嵌套循环中，",[91,160832,2034],{}," 只跳出当前所在的一层循环。",[51,160835,160836],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[35,160838,160840],{"id":160839},"_415-本章练习","4.15 本章练习",[48,160842,160843,160846,160849,160852,160855],{},[51,160844,160845],{},"输出 1 到 100。",[51,160847,160848],{},"计算 1 到 100 的偶数和。",[51,160850,160851],{},"输出 100 以内能被 3 和 5 同时整除的数。",[51,160853,160854],{},"编写猜数字游戏，限制最多猜 7 次。",[51,160856,160857],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5108,160859,160860],{},"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":14,"searchDepth":15,"depth":15,"links":160862},[160863,160864,160865,160866,160867,160871,160872,160873,160874,160875,160876,160877,160878,160879,160880],{"id":159119,"depth":15,"text":159120},{"id":159149,"depth":15,"text":159150},{"id":159238,"depth":15,"text":159239},{"id":159332,"depth":15,"text":159333},{"id":159506,"depth":15,"text":159507,"children":160868},[160869,160870],{"id":159510,"depth":1160,"text":159511},{"id":159574,"depth":1160,"text":159575},{"id":159638,"depth":15,"text":159639},{"id":159733,"depth":15,"text":159734},{"id":159842,"depth":15,"text":159843},{"id":160038,"depth":15,"text":160039},{"id":160123,"depth":15,"text":160124},{"id":160262,"depth":15,"text":160263},{"id":160442,"depth":15,"text":160443},{"id":160591,"depth":15,"text":160592},{"id":160805,"depth":15,"text":160806},{"id":160839,"depth":15,"text":160840},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159111,"description":17},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160887,"title":160888,"body":160889,"description":17,"extension":18,"meta":162894,"navigation":20,"path":162895,"seo":162896,"stem":162897,"__hash__":162898},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160890,"toc":162874},[160891,160894,160898,160901,160904,160918,160921,160935,160939,160941,160960,160962,161009,161011,161025,161029,161103,161106,161110,161113,161172,161180,161183,161236,161239,161243,161248,161303,161311,161361,161365,161370,161378,161477,161483,161487,161492,161495,161506,161547,161560,161564,161567,161603,161606,161619,161622,161682,161686,161690,161693,161744,161748,161751,161798,161804,161870,161873,161877,161880,161996,161999,162003,162006,162112,162116,162119,162157,162160,162202,162205,162265,162268,162272,162736,162739,162743,162770,162776,162837,162841,162871],[10,160892,160888],{"id":160893},"_5-函数基础",[35,160895,160897],{"id":160896},"_51-为什么需要函数","5.1 为什么需要函数",[40,160899,160900],{},"函数用于封装一段可以重复使用的代码。",[40,160902,160903],{},"不使用函数的问题：",[48,160905,160906,160909,160912,160915],{},[51,160907,160908],{},"重复代码多。",[51,160910,160911],{},"修改逻辑时容易漏改。",[51,160913,160914],{},"主流程不清晰。",[51,160916,160917],{},"程序越写越长，难以维护。",[40,160919,160920],{},"使用函数后的好处：",[48,160922,160923,160926,160929,160932],{},[51,160924,160925],{},"提高复用性。",[51,160927,160928],{},"提高可读性。",[51,160930,160931],{},"便于调试。",[51,160933,160934],{},"便于分工。",[35,160936,160938],{"id":160937},"_52-函数定义","5.2 函数定义",[40,160940,5163],{},[85,160942,160944],{"className":30361,"code":160943,"language":30363,"meta":14,"style":14},"def 函数名():\n    函数体\n",[91,160945,160946,160955],{"__ignoreMap":14},[94,160947,160948,160950,160953],{"class":96,"line":97},[94,160949,31930],{"class":100},[94,160951,160952],{"class":1944}," 函数名",[94,160954,31936],{"class":104},[94,160956,160957],{"class":96,"line":15},[94,160958,160959],{"class":104},"    函数体\n",[40,160961,15117],{},[85,160963,160965],{"className":30361,"code":160964,"language":30363,"meta":14,"style":14},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[91,160966,160967,160976,160986,160996,161000,161004],{"__ignoreMap":14},[94,160968,160969,160971,160974],{"class":96,"line":97},[94,160970,31930],{"class":100},[94,160972,160973],{"class":1944}," say_hello",[94,160975,31936],{"class":104},[94,160977,160978,160980,160982,160984],{"class":96,"line":15},[94,160979,31282],{"class":153},[94,160981,105],{"class":104},[94,160983,5826],{"class":209},[94,160985,111],{"class":104},[94,160987,160988,160990,160992,160994],{"class":96,"line":1160},[94,160989,31282],{"class":153},[94,160991,105],{"class":104},[94,160993,146616],{"class":209},[94,160995,111],{"class":104},[94,160997,160998],{"class":96,"line":1175},[94,160999,2381],{"emptyLinePlaceholder":20},[94,161001,161002],{"class":96,"line":1181},[94,161003,2381],{"emptyLinePlaceholder":20},[94,161005,161006],{"class":96,"line":1195},[94,161007,161008],{"class":104},"say_hello()\n",[40,161010,9007],{},[48,161012,161013,161016,161019,161022],{},[51,161014,161015],{},"函数必须先定义，再调用。",[51,161017,161018],{},"函数名遵循变量命名规则。",[51,161020,161021],{},"函数体需要缩进。",[51,161023,161024],{},"函数不调用就不会执行。",[35,161026,161028],{"id":161027},"_53-函数调用","5.3 函数调用",[85,161030,161032],{"className":30361,"code":161031,"language":30363,"meta":14,"style":14},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[91,161033,161034,161043,161054,161065,161076,161086,161090,161094,161099],{"__ignoreMap":14},[94,161035,161036,161038,161041],{"class":96,"line":97},[94,161037,31930],{"class":100},[94,161039,161040],{"class":1944}," print_menu",[94,161042,31936],{"class":104},[94,161044,161045,161047,161049,161052],{"class":96,"line":15},[94,161046,31282],{"class":153},[94,161048,105],{"class":104},[94,161050,161051],{"class":209},"\"1. 查询\"",[94,161053,111],{"class":104},[94,161055,161056,161058,161060,161063],{"class":96,"line":1160},[94,161057,31282],{"class":153},[94,161059,105],{"class":104},[94,161061,161062],{"class":209},"\"2. 添加\"",[94,161064,111],{"class":104},[94,161066,161067,161069,161071,161074],{"class":96,"line":1175},[94,161068,31282],{"class":153},[94,161070,105],{"class":104},[94,161072,161073],{"class":209},"\"3. 删除\"",[94,161075,111],{"class":104},[94,161077,161078,161080,161082,161084],{"class":96,"line":1181},[94,161079,31282],{"class":153},[94,161081,105],{"class":104},[94,161083,160658],{"class":209},[94,161085,111],{"class":104},[94,161087,161088],{"class":96,"line":1195},[94,161089,2381],{"emptyLinePlaceholder":20},[94,161091,161092],{"class":96,"line":1201},[94,161093,2381],{"emptyLinePlaceholder":20},[94,161095,161096],{"class":96,"line":1292},[94,161097,161098],{"class":104},"print_menu()\n",[94,161100,161101],{"class":96,"line":1298},[94,161102,161098],{"class":104},[40,161104,161105],{},"函数可以多次调用，每次调用都会执行函数体。",[35,161107,161109],{"id":161108},"_54-参数","5.4 参数",[40,161111,161112],{},"参数用于向函数传递数据。",[85,161114,161116],{"className":30361,"code":161115,"language":30363,"meta":14,"style":14},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[91,161117,161118,161127,161147,161151,161155,161164],{"__ignoreMap":14},[94,161119,161120,161122,161124],{"class":96,"line":97},[94,161121,31930],{"class":100},[94,161123,160973],{"class":1944},[94,161125,161126],{"class":104},"(name):\n",[94,161128,161129,161131,161133,161135,161137,161139,161141,161143,161145],{"class":96,"line":15},[94,161130,31282],{"class":153},[94,161132,105],{"class":104},[94,161134,157],{"class":100},[94,161136,157031],{"class":209},[94,161138,1001],{"class":153},[94,161140,79787],{"class":104},[94,161142,1051],{"class":153},[94,161144,356],{"class":209},[94,161146,111],{"class":104},[94,161148,161149],{"class":96,"line":1160},[94,161150,2381],{"emptyLinePlaceholder":20},[94,161152,161153],{"class":96,"line":1175},[94,161154,2381],{"emptyLinePlaceholder":20},[94,161156,161157,161160,161162],{"class":96,"line":1181},[94,161158,161159],{"class":104},"say_hello(",[94,161161,149865],{"class":209},[94,161163,111],{"class":104},[94,161165,161166,161168,161170],{"class":96,"line":1195},[94,161167,161159],{"class":104},[94,161169,150913],{"class":209},[94,161171,111],{"class":104},[40,161173,161174,161176,161177,161179],{},[91,161175,79787],{}," 是形参，",[91,161178,149865],{}," 是实参。",[40,161181,161182],{},"多个参数：",[85,161184,161186],{"className":30361,"code":161185,"language":30363,"meta":14,"style":14},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[91,161187,161188,161196,161209,161215,161219,161223],{"__ignoreMap":14},[94,161189,161190,161192,161194],{"class":96,"line":97},[94,161191,31930],{"class":100},[94,161193,5191],{"class":1944},[94,161195,151070],{"class":104},[94,161197,161198,161201,161203,161205,161207],{"class":96,"line":15},[94,161199,161200],{"class":104},"    result ",[94,161202,150],{"class":100},[94,161204,10851],{"class":104},[94,161206,586],{"class":100},[94,161208,151081],{"class":104},[94,161210,161211,161213],{"class":96,"line":1160},[94,161212,31282],{"class":153},[94,161214,76562],{"class":104},[94,161216,161217],{"class":96,"line":1175},[94,161218,2381],{"emptyLinePlaceholder":20},[94,161220,161221],{"class":96,"line":1181},[94,161222,2381],{"emptyLinePlaceholder":20},[94,161224,161225,161228,161230,161232,161234],{"class":96,"line":1195},[94,161226,161227],{"class":104},"add(",[94,161229,551],{"class":153},[94,161231,12417],{"class":104},[94,161233,805],{"class":153},[94,161235,111],{"class":104},[40,161237,161238],{},"调用时参数数量必须匹配。",[35,161240,161242],{"id":161241},"_55-返回值","5.5 返回值",[40,161244,161245,161247],{},[91,161246,17028],{}," 用于把函数内部的结果返回给调用者。",[85,161249,161251],{"className":30361,"code":161250,"language":30363,"meta":14,"style":14},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[91,161252,161253,161261,161271,161275,161279,161297],{"__ignoreMap":14},[94,161254,161255,161257,161259],{"class":96,"line":97},[94,161256,31930],{"class":100},[94,161258,5191],{"class":1944},[94,161260,151070],{"class":104},[94,161262,161263,161265,161267,161269],{"class":96,"line":15},[94,161264,4071],{"class":100},[94,161266,10851],{"class":104},[94,161268,586],{"class":100},[94,161270,151081],{"class":104},[94,161272,161273],{"class":96,"line":1160},[94,161274,2381],{"emptyLinePlaceholder":20},[94,161276,161277],{"class":96,"line":1175},[94,161278,2381],{"emptyLinePlaceholder":20},[94,161280,161281,161284,161286,161289,161291,161293,161295],{"class":96,"line":1181},[94,161282,161283],{"class":104},"result ",[94,161285,150],{"class":100},[94,161287,161288],{"class":104}," add(",[94,161290,551],{"class":153},[94,161292,12417],{"class":104},[94,161294,805],{"class":153},[94,161296,111],{"class":104},[94,161298,161299,161301],{"class":96,"line":1195},[94,161300,30398],{"class":153},[94,161302,76562],{"class":104},[40,161304,161305,161306,161308,161309,28368],{},"如果函数没有写 ",[91,161307,17028],{},"，默认返回 ",[91,161310,95663],{},[85,161312,161314],{"className":30361,"code":161313,"language":30363,"meta":14,"style":14},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[91,161315,161316,161324,161334,161338,161342,161351],{"__ignoreMap":14},[94,161317,161318,161320,161322],{"class":96,"line":97},[94,161319,31930],{"class":100},[94,161321,160973],{"class":1944},[94,161323,31936],{"class":104},[94,161325,161326,161328,161330,161332],{"class":96,"line":15},[94,161327,31282],{"class":153},[94,161329,105],{"class":104},[94,161331,5826],{"class":209},[94,161333,111],{"class":104},[94,161335,161336],{"class":96,"line":1160},[94,161337,2381],{"emptyLinePlaceholder":20},[94,161339,161340],{"class":96,"line":1175},[94,161341,2381],{"emptyLinePlaceholder":20},[94,161343,161344,161346,161348],{"class":96,"line":1181},[94,161345,161283],{"class":104},[94,161347,150],{"class":100},[94,161349,161350],{"class":104}," say_hello()\n",[94,161352,161353,161355,161358],{"class":96,"line":1195},[94,161354,30398],{"class":153},[94,161356,161357],{"class":104},"(result)  ",[94,161359,161360],{"class":163},"# None\n",[35,161362,161364],{"id":161363},"_56-return的作用","5.6 return的作用",[40,161366,161367,161369],{},[91,161368,17028],{}," 有两个作用：",[48,161371,161372,161375],{},[51,161373,161374],{},"返回结果。",[51,161376,161377],{},"结束函数。",[85,161379,161381],{"className":30361,"code":161380,"language":30363,"meta":14,"style":14},"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",[91,161382,161383,161393,161405,161412,161416,161428,161435,161439,161446,161450,161454,161465],{"__ignoreMap":14},[94,161384,161385,161387,161390],{"class":96,"line":97},[94,161386,31930],{"class":100},[94,161388,161389],{"class":1944}," check_age",[94,161391,161392],{"class":104},"(age):\n",[94,161394,161395,161397,161399,161401,161403],{"class":96,"line":15},[94,161396,3082],{"class":100},[94,161398,15689],{"class":104},[94,161400,1015],{"class":100},[94,161402,4074],{"class":153},[94,161404,3720],{"class":104},[94,161406,161407,161409],{"class":96,"line":1160},[94,161408,14734],{"class":100},[94,161410,161411],{"class":209}," \"年龄不合法\"\n",[94,161413,161414],{"class":96,"line":1175},[94,161415,2381],{"emptyLinePlaceholder":20},[94,161417,161418,161420,161422,161424,161426],{"class":96,"line":1181},[94,161419,3082],{"class":100},[94,161421,15689],{"class":104},[94,161423,1691],{"class":100},[94,161425,156262],{"class":153},[94,161427,3720],{"class":104},[94,161429,161430,161432],{"class":96,"line":1195},[94,161431,14734],{"class":100},[94,161433,161434],{"class":209}," \"成年人\"\n",[94,161436,161437],{"class":96,"line":1201},[94,161438,2381],{"emptyLinePlaceholder":20},[94,161440,161441,161443],{"class":96,"line":1292},[94,161442,4071],{"class":100},[94,161444,161445],{"class":209}," \"未成年人\"\n",[94,161447,161448],{"class":96,"line":1298},[94,161449,2381],{"emptyLinePlaceholder":20},[94,161451,161452],{"class":96,"line":1310},[94,161453,2381],{"emptyLinePlaceholder":20},[94,161455,161456,161458,161461,161463],{"class":96,"line":1593},[94,161457,30398],{"class":153},[94,161459,161460],{"class":104},"(check_age(",[94,161462,805],{"class":153},[94,161464,30480],{"class":104},[94,161466,161467,161469,161471,161473,161475],{"class":96,"line":1598},[94,161468,30398],{"class":153},[94,161470,161460],{"class":104},[94,161472,637],{"class":100},[94,161474,322],{"class":153},[94,161476,30480],{"class":104},[40,161478,161479,161480,161482],{},"函数执行到 ",[91,161481,17028],{}," 后，后面的代码不会继续执行。",[35,161484,161486],{"id":161485},"_57-none","5.7 None",[40,161488,161489,161491],{},[91,161490,95663],{}," 表示空值或没有结果。",[40,161493,161494],{},"常见使用场景：",[48,161496,161497,161500,161503],{},[51,161498,161499],{},"函数没有返回值。",[51,161501,161502],{},"变量暂时没有具体值。",[51,161504,161505],{},"表示查询不到结果。",[85,161507,161509],{"className":30361,"code":161508,"language":30363,"meta":14,"style":14},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[91,161510,161511,161519,161523,161536],{"__ignoreMap":14},[94,161512,161513,161515,161517],{"class":96,"line":97},[94,161514,161283],{"class":104},[94,161516,150],{"class":100},[94,161518,152149],{"class":153},[94,161520,161521],{"class":96,"line":15},[94,161522,2381],{"emptyLinePlaceholder":20},[94,161524,161525,161527,161530,161532,161534],{"class":96,"line":1160},[94,161526,1512],{"class":100},[94,161528,161529],{"class":104}," result ",[94,161531,38910],{"class":100},[94,161533,38916],{"class":153},[94,161535,3720],{"class":104},[94,161537,161538,161540,161542,161545],{"class":96,"line":1175},[94,161539,31282],{"class":153},[94,161541,105],{"class":104},[94,161543,161544],{"class":209},"\"没有数据\"",[94,161546,111],{"class":104},[40,161548,161549,161550,161552,161553,161556,161557,28368],{},"判断 ",[91,161551,95663],{}," 推荐使用 ",[91,161554,161555],{},"is None","，不要写成 ",[91,161558,161559],{},"== None",[35,161561,161563],{"id":161562},"_58-函数文档字符串","5.8 函数文档字符串",[40,161565,161566],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[85,161568,161570],{"className":30361,"code":161569,"language":30363,"meta":14,"style":14},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[91,161571,161572,161582,161587],{"__ignoreMap":14},[94,161573,161574,161576,161579],{"class":96,"line":97},[94,161575,31930],{"class":100},[94,161577,161578],{"class":1944}," calculate_bmi",[94,161580,161581],{"class":104},"(weight, height):\n",[94,161583,161584],{"class":96,"line":15},[94,161585,161586],{"class":209},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[94,161588,161589,161591,161594,161596,161599,161601],{"class":96,"line":1160},[94,161590,4071],{"class":100},[94,161592,161593],{"class":104}," weight ",[94,161595,689],{"class":100},[94,161597,161598],{"class":104}," height ",[94,161600,10643],{"class":100},[94,161602,47706],{"class":153},[40,161604,161605],{},"查看说明：",[85,161607,161609],{"className":30361,"code":161608,"language":30363,"meta":14,"style":14},"help(calculate_bmi)\n",[91,161610,161611],{"__ignoreMap":14},[94,161612,161613,161616],{"class":96,"line":97},[94,161614,161615],{"class":153},"help",[94,161617,161618],{"class":104},"(calculate_bmi)\n",[40,161620,161621],{},"较完整的写法：",[85,161623,161625],{"className":30361,"code":161624,"language":30363,"meta":14,"style":14},"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",[91,161626,161627,161635,161640,161645,161649,161654,161659,161664,161668],{"__ignoreMap":14},[94,161628,161629,161631,161633],{"class":96,"line":97},[94,161630,31930],{"class":100},[94,161632,161578],{"class":1944},[94,161634,161581],{"class":104},[94,161636,161637],{"class":96,"line":15},[94,161638,161639],{"class":209},"    \"\"\"\n",[94,161641,161642],{"class":96,"line":1160},[94,161643,161644],{"class":209},"    计算BMI。\n",[94,161646,161647],{"class":96,"line":1175},[94,161648,2381],{"emptyLinePlaceholder":20},[94,161650,161651],{"class":96,"line":1181},[94,161652,161653],{"class":209},"    :param weight: 体重，单位kg\n",[94,161655,161656],{"class":96,"line":1195},[94,161657,161658],{"class":209},"    :param height: 身高，单位m\n",[94,161660,161661],{"class":96,"line":1201},[94,161662,161663],{"class":209},"    :return: BMI数值\n",[94,161665,161666],{"class":96,"line":1292},[94,161667,161639],{"class":209},[94,161669,161670,161672,161674,161676,161678,161680],{"class":96,"line":1298},[94,161671,4071],{"class":100},[94,161673,161593],{"class":104},[94,161675,689],{"class":100},[94,161677,161598],{"class":104},[94,161679,10643],{"class":100},[94,161681,47706],{"class":153},[35,161683,161685],{"id":161684},"_59-变量作用域","5.9 变量作用域",[65,161687,161689],{"id":161688},"_591-局部变量","5.9.1 局部变量",[40,161691,161692],{},"在函数内部定义的变量，只能在函数内部使用。",[85,161694,161696],{"className":30361,"code":161695,"language":30363,"meta":14,"style":14},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[91,161697,161698,161707,161715,161721,161725,161729,161734],{"__ignoreMap":14},[94,161699,161700,161702,161705],{"class":96,"line":97},[94,161701,31930],{"class":100},[94,161703,161704],{"class":1944}," test",[94,161706,31936],{"class":104},[94,161708,161709,161711,161713],{"class":96,"line":15},[94,161710,45576],{"class":104},[94,161712,150],{"class":100},[94,161714,58405],{"class":153},[94,161716,161717,161719],{"class":96,"line":1160},[94,161718,31282],{"class":153},[94,161720,118],{"class":104},[94,161722,161723],{"class":96,"line":1175},[94,161724,2381],{"emptyLinePlaceholder":20},[94,161726,161727],{"class":96,"line":1181},[94,161728,2381],{"emptyLinePlaceholder":20},[94,161730,161731],{"class":96,"line":1195},[94,161732,161733],{"class":104},"test()\n",[94,161735,161736,161738,161741],{"class":96,"line":1201},[94,161737,30398],{"class":153},[94,161739,161740],{"class":104},"(num)  ",[94,161742,161743],{"class":163},"# 报错\n",[65,161745,161747],{"id":161746},"_592-全局变量","5.9.2 全局变量",[40,161749,161750],{},"在函数外部定义的变量，可以在函数内部读取。",[85,161752,161754],{"className":30361,"code":161753,"language":30363,"meta":14,"style":14},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[91,161755,161756,161764,161768,161772,161780,161786,161790,161794],{"__ignoreMap":14},[94,161757,161758,161760,161762],{"class":96,"line":97},[94,161759,146513],{"class":104},[94,161761,150],{"class":100},[94,161763,149330],{"class":209},[94,161765,161766],{"class":96,"line":15},[94,161767,2381],{"emptyLinePlaceholder":20},[94,161769,161770],{"class":96,"line":1160},[94,161771,2381],{"emptyLinePlaceholder":20},[94,161773,161774,161776,161778],{"class":96,"line":1175},[94,161775,31930],{"class":100},[94,161777,160973],{"class":1944},[94,161779,31936],{"class":104},[94,161781,161782,161784],{"class":96,"line":1181},[94,161783,31282],{"class":153},[94,161785,150637],{"class":104},[94,161787,161788],{"class":96,"line":1195},[94,161789,2381],{"emptyLinePlaceholder":20},[94,161791,161792],{"class":96,"line":1201},[94,161793,2381],{"emptyLinePlaceholder":20},[94,161795,161796],{"class":96,"line":1292},[94,161797,161008],{"class":104},[40,161799,161800,161801,28368],{},"如果要在函数内部修改全局变量，需要 ",[91,161802,161803],{},"global",[85,161805,161807],{"className":30361,"code":161806,"language":30363,"meta":14,"style":14},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[91,161808,161809,161817,161821,161825,161834,161842,161850,161854,161858,161863],{"__ignoreMap":14},[94,161810,161811,161813,161815],{"class":96,"line":97},[94,161812,146668],{"class":104},[94,161814,150],{"class":100},[94,161816,47316],{"class":153},[94,161818,161819],{"class":96,"line":15},[94,161820,2381],{"emptyLinePlaceholder":20},[94,161822,161823],{"class":96,"line":1160},[94,161824,2381],{"emptyLinePlaceholder":20},[94,161826,161827,161829,161832],{"class":96,"line":1175},[94,161828,31930],{"class":100},[94,161830,161831],{"class":1944}," add_count",[94,161833,31936],{"class":104},[94,161835,161836,161839],{"class":96,"line":1181},[94,161837,161838],{"class":100},"    global",[94,161840,161841],{"class":104}," count\n",[94,161843,161844,161846,161848],{"class":96,"line":1195},[94,161845,159410],{"class":104},[94,161847,9459],{"class":100},[94,161849,55676],{"class":153},[94,161851,161852],{"class":96,"line":1201},[94,161853,2381],{"emptyLinePlaceholder":20},[94,161855,161856],{"class":96,"line":1292},[94,161857,2381],{"emptyLinePlaceholder":20},[94,161859,161860],{"class":96,"line":1298},[94,161861,161862],{"class":104},"add_count()\n",[94,161864,161865,161867],{"class":96,"line":1310},[94,161866,30398],{"class":153},[94,161868,161869],{"class":104},"(count)\n",[40,161871,161872],{},"不建议大量使用全局变量，项目变大后很难维护。",[35,161874,161876],{"id":161875},"_510-函数嵌套调用","5.10 函数嵌套调用",[40,161878,161879],{},"一个函数中可以调用另一个函数。",[85,161881,161883],{"className":30361,"code":161882,"language":30363,"meta":14,"style":14},"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",[91,161884,161885,161894,161908,161912,161916,161925,161930,161950,161971,161975,161979,161983],{"__ignoreMap":14},[94,161886,161887,161889,161892],{"class":96,"line":97},[94,161888,31930],{"class":100},[94,161890,161891],{"class":1944}," print_line",[94,161893,31936],{"class":104},[94,161895,161896,161898,161900,161902,161904,161906],{"class":96,"line":15},[94,161897,31282],{"class":153},[94,161899,105],{"class":104},[94,161901,32466],{"class":209},[94,161903,6500],{"class":100},[94,161905,78642],{"class":153},[94,161907,111],{"class":104},[94,161909,161910],{"class":96,"line":1160},[94,161911,2381],{"emptyLinePlaceholder":20},[94,161913,161914],{"class":96,"line":1175},[94,161915,2381],{"emptyLinePlaceholder":20},[94,161917,161918,161920,161923],{"class":96,"line":1181},[94,161919,31930],{"class":100},[94,161921,161922],{"class":1944}," print_info",[94,161924,149352],{"class":104},[94,161926,161927],{"class":96,"line":1195},[94,161928,161929],{"class":104},"    print_line()\n",[94,161931,161932,161934,161936,161938,161940,161942,161944,161946,161948],{"class":96,"line":1201},[94,161933,31282],{"class":153},[94,161935,105],{"class":104},[94,161937,157],{"class":100},[94,161939,156659],{"class":209},[94,161941,1001],{"class":153},[94,161943,79787],{"class":104},[94,161945,1051],{"class":153},[94,161947,356],{"class":209},[94,161949,111],{"class":104},[94,161951,161952,161954,161956,161958,161961,161963,161965,161967,161969],{"class":96,"line":1292},[94,161953,31282],{"class":153},[94,161955,105],{"class":104},[94,161957,157],{"class":100},[94,161959,161960],{"class":209},"\"年龄:",[94,161962,1001],{"class":153},[94,161964,70198],{"class":104},[94,161966,1051],{"class":153},[94,161968,356],{"class":209},[94,161970,111],{"class":104},[94,161972,161973],{"class":96,"line":1298},[94,161974,161929],{"class":104},[94,161976,161977],{"class":96,"line":1310},[94,161978,2381],{"emptyLinePlaceholder":20},[94,161980,161981],{"class":96,"line":1593},[94,161982,2381],{"emptyLinePlaceholder":20},[94,161984,161985,161988,161990,161992,161994],{"class":96,"line":1598},[94,161986,161987],{"class":104},"print_info(",[94,161989,149865],{"class":209},[94,161991,12417],{"class":104},[94,161993,755],{"class":153},[94,161995,111],{"class":104},[40,161997,161998],{},"这种方式可以把小功能组合成大功能。",[35,162000,162002],{"id":162001},"_511-参数检查","5.11 参数检查",[40,162004,162005],{},"函数内部可以检查参数是否合法。",[85,162007,162009],{"className":30361,"code":162008,"language":30363,"meta":14,"style":14},"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",[91,162010,162011,162020,162032,162038,162048,162052,162056,162073,162077,162089,162100,162106],{"__ignoreMap":14},[94,162012,162013,162015,162018],{"class":96,"line":97},[94,162014,31930],{"class":100},[94,162016,162017],{"class":1944}," divide",[94,162019,151070],{"class":104},[94,162021,162022,162024,162026,162028,162030],{"class":96,"line":15},[94,162023,3082],{"class":100},[94,162025,10864],{"class":104},[94,162027,2930],{"class":100},[94,162029,4074],{"class":153},[94,162031,3720],{"class":104},[94,162033,162034,162036],{"class":96,"line":1160},[94,162035,14734],{"class":100},[94,162037,152149],{"class":153},[94,162039,162040,162042,162044,162046],{"class":96,"line":1175},[94,162041,4071],{"class":100},[94,162043,10851],{"class":104},[94,162045,689],{"class":100},[94,162047,151081],{"class":104},[94,162049,162050],{"class":96,"line":1181},[94,162051,2381],{"emptyLinePlaceholder":20},[94,162053,162054],{"class":96,"line":1195},[94,162055,2381],{"emptyLinePlaceholder":20},[94,162057,162058,162060,162062,162065,162067,162069,162071],{"class":96,"line":1201},[94,162059,161283],{"class":104},[94,162061,150],{"class":100},[94,162063,162064],{"class":104}," divide(",[94,162066,551],{"class":153},[94,162068,12417],{"class":104},[94,162070,296],{"class":153},[94,162072,111],{"class":104},[94,162074,162075],{"class":96,"line":1292},[94,162076,2381],{"emptyLinePlaceholder":20},[94,162078,162079,162081,162083,162085,162087],{"class":96,"line":1298},[94,162080,1512],{"class":100},[94,162082,161529],{"class":104},[94,162084,38910],{"class":100},[94,162086,38916],{"class":153},[94,162088,3720],{"class":104},[94,162090,162091,162093,162095,162098],{"class":96,"line":1310},[94,162092,31282],{"class":153},[94,162094,105],{"class":104},[94,162096,162097],{"class":209},"\"除数不能为0\"",[94,162099,111],{"class":104},[94,162101,162102,162104],{"class":96,"line":1593},[94,162103,1682],{"class":100},[94,162105,3720],{"class":104},[94,162107,162108,162110],{"class":96,"line":1598},[94,162109,31282],{"class":153},[94,162111,76562],{"class":104},[35,162113,162115],{"id":162114},"_512-类型提示","5.12 类型提示",[40,162117,162118],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[85,162120,162122],{"className":30361,"code":162121,"language":30363,"meta":14,"style":14},"def add(a: int, b: int) -> int:\n    return a + b\n",[91,162123,162124,162147],{"__ignoreMap":14},[94,162125,162126,162128,162130,162133,162135,162138,162140,162143,162145],{"class":96,"line":97},[94,162127,31930],{"class":100},[94,162129,5191],{"class":1944},[94,162131,162132],{"class":104},"(a: ",[94,162134,108],{"class":153},[94,162136,162137],{"class":104},", b: ",[94,162139,108],{"class":153},[94,162141,162142],{"class":104},") -> ",[94,162144,108],{"class":153},[94,162146,3720],{"class":104},[94,162148,162149,162151,162153,162155],{"class":96,"line":15},[94,162150,4071],{"class":100},[94,162152,10851],{"class":104},[94,162154,586],{"class":100},[94,162156,151081],{"class":104},[40,162158,162159],{},"字符串参数：",[85,162161,162163],{"className":30361,"code":162162,"language":30363,"meta":14,"style":14},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[91,162164,162165,162182],{"__ignoreMap":14},[94,162166,162167,162169,162171,162174,162176,162178,162180],{"class":96,"line":97},[94,162168,31930],{"class":100},[94,162170,160973],{"class":1944},[94,162172,162173],{"class":104},"(name: ",[94,162175,1280],{"class":153},[94,162177,162142],{"class":104},[94,162179,95663],{"class":153},[94,162181,3720],{"class":104},[94,162183,162184,162186,162188,162190,162192,162194,162196,162198,162200],{"class":96,"line":15},[94,162185,31282],{"class":153},[94,162187,105],{"class":104},[94,162189,157],{"class":100},[94,162191,157031],{"class":209},[94,162193,1001],{"class":153},[94,162195,79787],{"class":104},[94,162197,1051],{"class":153},[94,162199,356],{"class":209},[94,162201,111],{"class":104},[40,162203,162204],{},"列表参数：",[85,162206,162208],{"className":30361,"code":162207,"language":30363,"meta":14,"style":14},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[91,162209,162210,162229,162237,162249,162258],{"__ignoreMap":14},[94,162211,162212,162214,162217,162220,162222,162225,162227],{"class":96,"line":97},[94,162213,31930],{"class":100},[94,162215,162216],{"class":1944}," get_total",[94,162218,162219],{"class":104},"(numbers: list[",[94,162221,108],{"class":153},[94,162223,162224],{"class":104},"]) -> ",[94,162226,108],{"class":153},[94,162228,3720],{"class":104},[94,162230,162231,162233,162235],{"class":96,"line":15},[94,162232,159284],{"class":104},[94,162234,150],{"class":100},[94,162236,47316],{"class":153},[94,162238,162239,162241,162244,162246],{"class":96,"line":1160},[94,162240,3182],{"class":100},[94,162242,162243],{"class":104}," number ",[94,162245,26026],{"class":100},[94,162247,162248],{"class":104}," numbers:\n",[94,162250,162251,162253,162255],{"class":96,"line":1175},[94,162252,159959],{"class":104},[94,162254,9459],{"class":100},[94,162256,162257],{"class":104}," number\n",[94,162259,162260,162262],{"class":96,"line":1181},[94,162261,4071],{"class":100},[94,162263,162264],{"class":104}," total\n",[40,162266,162267],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[35,162269,162271],{"id":162270},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[85,162273,162275],{"className":30361,"code":162274,"language":30363,"meta":14,"style":14},"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",[91,162276,162277,162287,162291,162295,162303,162314,162324,162334,162344,162354,162358,162362,162371,162393,162397,162401,162410,162416,162436,162448,162459,162463,162472,162483,162488,162492,162496,162505,162511,162530,162542,162552,162556,162567,162577,162581,162589,162600,162604,162608,162612,162620,162625,162639,162643,162655,162660,162672,162677,162689,162694,162706,162716,162720,162726],{"__ignoreMap":14},[94,162278,162279,162282,162284],{"class":96,"line":97},[94,162280,162281],{"class":104},"balance ",[94,162283,150],{"class":100},[94,162285,162286],{"class":153}," 1000\n",[94,162288,162289],{"class":96,"line":15},[94,162290,2381],{"emptyLinePlaceholder":20},[94,162292,162293],{"class":96,"line":1160},[94,162294,2381],{"emptyLinePlaceholder":20},[94,162296,162297,162299,162301],{"class":96,"line":1175},[94,162298,31930],{"class":100},[94,162300,152010],{"class":1944},[94,162302,31936],{"class":104},[94,162304,162305,162307,162309,162312],{"class":96,"line":1181},[94,162306,31282],{"class":153},[94,162308,105],{"class":104},[94,162310,162311],{"class":209},"\"====== ATM ======\"",[94,162313,111],{"class":104},[94,162315,162316,162318,162320,162322],{"class":96,"line":1195},[94,162317,31282],{"class":153},[94,162319,105],{"class":104},[94,162321,160625],{"class":209},[94,162323,111],{"class":104},[94,162325,162326,162328,162330,162332],{"class":96,"line":1201},[94,162327,31282],{"class":153},[94,162329,105],{"class":104},[94,162331,160636],{"class":209},[94,162333,111],{"class":104},[94,162335,162336,162338,162340,162342],{"class":96,"line":1292},[94,162337,31282],{"class":153},[94,162339,105],{"class":104},[94,162341,160647],{"class":209},[94,162343,111],{"class":104},[94,162345,162346,162348,162350,162352],{"class":96,"line":1298},[94,162347,31282],{"class":153},[94,162349,105],{"class":104},[94,162351,160658],{"class":209},[94,162353,111],{"class":104},[94,162355,162356],{"class":96,"line":1310},[94,162357,2381],{"emptyLinePlaceholder":20},[94,162359,162360],{"class":96,"line":1593},[94,162361,2381],{"emptyLinePlaceholder":20},[94,162363,162364,162366,162369],{"class":96,"line":1598},[94,162365,31930],{"class":100},[94,162367,162368],{"class":1944}," show_balance",[94,162370,31936],{"class":104},[94,162372,162373,162375,162377,162379,162382,162384,162387,162389,162391],{"class":96,"line":1604},[94,162374,31282],{"class":153},[94,162376,105],{"class":104},[94,162378,157],{"class":100},[94,162380,162381],{"class":209},"\"当前余额:",[94,162383,1001],{"class":153},[94,162385,162386],{"class":104},"balance",[94,162388,1051],{"class":153},[94,162390,156989],{"class":209},[94,162392,111],{"class":104},[94,162394,162395],{"class":96,"line":1609},[94,162396,2381],{"emptyLinePlaceholder":20},[94,162398,162399],{"class":96,"line":1623},[94,162400,2381],{"emptyLinePlaceholder":20},[94,162402,162403,162405,162408],{"class":96,"line":1628},[94,162404,31930],{"class":100},[94,162406,162407],{"class":1944}," save_money",[94,162409,31936],{"class":104},[94,162411,162412,162414],{"class":96,"line":1634},[94,162413,161838],{"class":100},[94,162415,150076],{"class":104},[94,162417,162418,162421,162423,162425,162427,162429,162431,162434],{"class":96,"line":1655},[94,162419,162420],{"class":104},"    money ",[94,162422,150],{"class":100},[94,162424,109774],{"class":153},[94,162426,105],{"class":104},[94,162428,53798],{"class":153},[94,162430,105],{"class":104},[94,162432,162433],{"class":209},"\"请输入存款金额:\"",[94,162435,30480],{"class":104},[94,162437,162438,162440,162442,162444,162446],{"class":96,"line":1660},[94,162439,3082],{"class":100},[94,162441,150119],{"class":104},[94,162443,1569],{"class":100},[94,162445,4074],{"class":153},[94,162447,3720],{"class":104},[94,162449,162450,162452,162454,162457],{"class":96,"line":1674},[94,162451,32434],{"class":153},[94,162453,105],{"class":104},[94,162455,162456],{"class":209},"\"金额必须大于0\"",[94,162458,111],{"class":104},[94,162460,162461],{"class":96,"line":1679},[94,162462,152338],{"class":100},[94,162464,162465,162468,162470],{"class":96,"line":1708},[94,162466,162467],{"class":104},"    balance ",[94,162469,9459],{"class":100},[94,162471,150152],{"class":104},[94,162473,162474,162476,162478,162481],{"class":96,"line":1713},[94,162475,31282],{"class":153},[94,162477,105],{"class":104},[94,162479,162480],{"class":209},"\"存款成功\"",[94,162482,111],{"class":104},[94,162484,162485],{"class":96,"line":1730},[94,162486,162487],{"class":104},"    show_balance()\n",[94,162489,162490],{"class":96,"line":1735},[94,162491,2381],{"emptyLinePlaceholder":20},[94,162493,162494],{"class":96,"line":1740},[94,162495,2381],{"emptyLinePlaceholder":20},[94,162497,162498,162500,162503],{"class":96,"line":1745},[94,162499,31930],{"class":100},[94,162501,162502],{"class":1944}," withdraw_money",[94,162504,31936],{"class":104},[94,162506,162507,162509],{"class":96,"line":1759},[94,162508,161838],{"class":100},[94,162510,150076],{"class":104},[94,162512,162513,162515,162517,162519,162521,162523,162525,162528],{"class":96,"line":1764},[94,162514,162420],{"class":104},[94,162516,150],{"class":100},[94,162518,109774],{"class":153},[94,162520,105],{"class":104},[94,162522,53798],{"class":153},[94,162524,105],{"class":104},[94,162526,162527],{"class":209},"\"请输入取款金额:\"",[94,162529,30480],{"class":104},[94,162531,162532,162534,162536,162538,162540],{"class":96,"line":2558},[94,162533,3082],{"class":100},[94,162535,150119],{"class":104},[94,162537,1569],{"class":100},[94,162539,4074],{"class":153},[94,162541,3720],{"class":104},[94,162543,162544,162546,162548,162550],{"class":96,"line":2572},[94,162545,32434],{"class":153},[94,162547,105],{"class":104},[94,162549,162456],{"class":209},[94,162551,111],{"class":104},[94,162553,162554],{"class":96,"line":2580},[94,162555,152338],{"class":100},[94,162557,162558,162560,162562,162564],{"class":96,"line":2585},[94,162559,3082],{"class":100},[94,162561,150119],{"class":104},[94,162563,1065],{"class":100},[94,162565,162566],{"class":104}," balance:\n",[94,162568,162569,162571,162573,162575],{"class":96,"line":2591},[94,162570,32434],{"class":153},[94,162572,105],{"class":104},[94,162574,150214],{"class":209},[94,162576,111],{"class":104},[94,162578,162579],{"class":96,"line":2597},[94,162580,152338],{"class":100},[94,162582,162583,162585,162587],{"class":96,"line":2602},[94,162584,162467],{"class":104},[94,162586,150229],{"class":100},[94,162588,150152],{"class":104},[94,162590,162591,162593,162595,162598],{"class":96,"line":7930},[94,162592,31282],{"class":153},[94,162594,105],{"class":104},[94,162596,162597],{"class":209},"\"取款成功\"",[94,162599,111],{"class":104},[94,162601,162602],{"class":96,"line":7954},[94,162603,162487],{"class":104},[94,162605,162606],{"class":96,"line":7959},[94,162607,2381],{"emptyLinePlaceholder":20},[94,162609,162610],{"class":96,"line":7965},[94,162611,2381],{"emptyLinePlaceholder":20},[94,162613,162614,162616,162618],{"class":96,"line":7992},[94,162615,108640],{"class":100},[94,162617,95269],{"class":153},[94,162619,3720],{"class":104},[94,162621,162622],{"class":96,"line":7997},[94,162623,162624],{"class":104},"    show_menu()\n",[94,162626,162627,162629,162631,162633,162635,162637],{"class":96,"line":8003},[94,162628,160669],{"class":104},[94,162630,150],{"class":100},[94,162632,60582],{"class":153},[94,162634,105],{"class":104},[94,162636,153050],{"class":209},[94,162638,111],{"class":104},[94,162640,162641],{"class":96,"line":8015},[94,162642,2381],{"emptyLinePlaceholder":20},[94,162644,162645,162647,162649,162651,162653],{"class":96,"line":8027},[94,162646,3082],{"class":100},[94,162648,153063],{"class":104},[94,162650,2930],{"class":100},[94,162652,153068],{"class":209},[94,162654,3720],{"class":104},[94,162656,162657],{"class":96,"line":8039},[94,162658,162659],{"class":104},"        show_balance()\n",[94,162661,162662,162664,162666,162668,162670],{"class":96,"line":9698},[94,162663,39276],{"class":100},[94,162665,153063],{"class":104},[94,162667,2930],{"class":100},[94,162669,153087],{"class":209},[94,162671,3720],{"class":104},[94,162673,162674],{"class":96,"line":9723},[94,162675,162676],{"class":104},"        save_money()\n",[94,162678,162679,162681,162683,162685,162687],{"class":96,"line":9746},[94,162680,39276],{"class":100},[94,162682,153063],{"class":104},[94,162684,2930],{"class":100},[94,162686,153105],{"class":209},[94,162688,3720],{"class":104},[94,162690,162691],{"class":96,"line":9770},[94,162692,162693],{"class":104},"        withdraw_money()\n",[94,162695,162696,162698,162700,162702,162704],{"class":96,"line":9775},[94,162697,39276],{"class":100},[94,162699,153063],{"class":104},[94,162701,2930],{"class":100},[94,162703,153159],{"class":209},[94,162705,3720],{"class":104},[94,162707,162708,162710,162712,162714],{"class":96,"line":9780},[94,162709,32434],{"class":153},[94,162711,105],{"class":104},[94,162713,153170],{"class":209},[94,162715,111],{"class":104},[94,162717,162718],{"class":96,"line":9785},[94,162719,31610],{"class":100},[94,162721,162722,162724],{"class":96,"line":9794},[94,162723,157999],{"class":100},[94,162725,3720],{"class":104},[94,162727,162728,162730,162732,162734],{"class":96,"line":9799},[94,162729,32434],{"class":153},[94,162731,105],{"class":104},[94,162733,153191],{"class":209},[94,162735,111],{"class":104},[40,162737,162738],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[35,162740,162742],{"id":162741},"_514-易错点","5.14 易错点",[48,162744,162745,162748,162751,162756,162761,162764],{},[51,162746,162747],{},"函数定义后必须调用才会执行。",[51,162749,162750],{},"函数名后面有括号才是调用。",[51,162752,162753,162755],{},[91,162754,17028],{}," 后面的代码不会执行。",[51,162757,162758,162759,28368],{},"没有返回值的函数默认返回 ",[91,162760,95663],{},[51,162762,162763],{},"局部变量不能在函数外部访问。",[51,162765,162766,162767,162769],{},"不要滥用 ",[91,162768,161803],{},"，更好的方式是让函数返回新值。",[40,162771,162772,162773,162775],{},"例如不用 ",[91,162774,161803],{}," 改写存款：",[85,162777,162779],{"className":30361,"code":162778,"language":30363,"meta":14,"style":14},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[91,162780,162781,162790,162801,162805,162809,162817,162830],{"__ignoreMap":14},[94,162782,162783,162785,162787],{"class":96,"line":97},[94,162784,31930],{"class":100},[94,162786,162407],{"class":1944},[94,162788,162789],{"class":104},"(balance, money):\n",[94,162791,162792,162794,162797,162799],{"class":96,"line":15},[94,162793,4071],{"class":100},[94,162795,162796],{"class":104}," balance ",[94,162798,586],{"class":100},[94,162800,150152],{"class":104},[94,162802,162803],{"class":96,"line":1160},[94,162804,2381],{"emptyLinePlaceholder":20},[94,162806,162807],{"class":96,"line":1175},[94,162808,2381],{"emptyLinePlaceholder":20},[94,162810,162811,162813,162815],{"class":96,"line":1181},[94,162812,162281],{"class":104},[94,162814,150],{"class":100},[94,162816,162286],{"class":153},[94,162818,162819,162821,162823,162826,162828],{"class":96,"line":1195},[94,162820,162281],{"class":104},[94,162822,150],{"class":100},[94,162824,162825],{"class":104}," save_money(balance, ",[94,162827,1703],{"class":153},[94,162829,111],{"class":104},[94,162831,162832,162834],{"class":96,"line":1201},[94,162833,30398],{"class":153},[94,162835,162836],{"class":104},"(balance)\n",[35,162838,162840],{"id":162839},"_515-本章练习","5.15 本章练习",[48,162842,162843,162850,162856,162862,162868],{},[51,162844,162845,162846,162849],{},"定义函数 ",[91,162847,162848],{},"print_student(name, age)","，输出学生信息。",[51,162851,162845,162852,162855],{},[91,162853,162854],{},"get_max(a, b, c)","，返回三个数中的最大值。",[51,162857,162845,162858,162861],{},[91,162859,162860],{},"is_even(num)","，判断一个数是否为偶数。",[51,162863,162845,162864,162867],{},[91,162865,162866],{},"calculate_bmi(weight, height)","，返回 BMI。",[51,162869,162870],{},"把第 4 章的菜单程序拆分成多个函数。",[5108,162872,162873],{},"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":14,"searchDepth":15,"depth":15,"links":162875},[162876,162877,162878,162879,162880,162881,162882,162883,162884,162888,162889,162890,162891,162892,162893],{"id":160896,"depth":15,"text":160897},{"id":160937,"depth":15,"text":160938},{"id":161027,"depth":15,"text":161028},{"id":161108,"depth":15,"text":161109},{"id":161241,"depth":15,"text":161242},{"id":161363,"depth":15,"text":161364},{"id":161485,"depth":15,"text":161486},{"id":161562,"depth":15,"text":161563},{"id":161684,"depth":15,"text":161685,"children":162885},[162886,162887],{"id":161688,"depth":1160,"text":161689},{"id":161746,"depth":1160,"text":161747},{"id":161875,"depth":15,"text":161876},{"id":162001,"depth":15,"text":162002},{"id":162114,"depth":15,"text":162115},{"id":162270,"depth":15,"text":162271},{"id":162741,"depth":15,"text":162742},{"id":162839,"depth":15,"text":162840},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160888,"description":17},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162900,"title":162901,"body":162902,"description":17,"extension":18,"meta":165946,"navigation":20,"path":165947,"seo":165948,"stem":165949,"__hash__":165950},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162903,"toc":165927},[162904,162907,162911,162914,162917,163021,163024,163028,163031,163111,163114,163118,163121,163181,163184,163220,163223,163238,163242,163315,163318,163373,163376,163446,163449,163533,163543,163601,163605,163650,163653,163679,163682,163788,163792,163795,163837,163840,163904,163907,163911,163914,163975,163978,164008,164011,164049,164053,164056,164065,164068,164192,164195,164236,164240,164243,164254,164294,164297,164312,164317,164320,164387,164390,164480,164484,164487,164535,164538,164565,164567,164597,164600,164620,164623,164654,164657,164690,164694,164697,164721,164724,164748,164751,164775,164779,164782,164912,164915,164995,164998,165073,165077,165080,165130,165133,165175,165178,165202,165204,165228,165231,165286,165289,165355,165359,165362,165365,165403,165406,165459,165462,165508,165511,165544,165547,165551,165870,165874,165903,165907,165924],[10,162905,162901],{"id":162906},"_6-数据容器",[35,162908,162910],{"id":162909},"_61-什么是数据容器","6.1 什么是数据容器",[40,162912,162913],{},"数据容器用于一次保存多个数据。",[40,162915,162916],{},"常见容器：",[242,162918,162919,162936],{},[245,162920,162921],{},[248,162922,162923,162925,162928,162931,162934],{},[251,162924,25754],{},[251,162926,162927],{},"是否有序",[251,162929,162930],{},"是否可变",[251,162932,162933],{},"是否允许重复",[251,162935,27475],{},[289,162937,162938,162956,162972,162987,163004],{},[248,162939,162940,162943,162946,162949,162952],{},[294,162941,162942],{},"list列表",[294,162944,162945],{},"有序",[294,162947,162948],{},"可变",[294,162950,162951],{},"允许",[294,162953,162954],{},[91,162955,155234],{},[248,162957,162958,162961,162963,162966,162968],{},[294,162959,162960],{},"tuple元组",[294,162962,162945],{},[294,162964,162965],{},"不可变",[294,162967,162951],{},[294,162969,162970],{},[91,162971,155247],{},[248,162973,162974,162977,162979,162981,162983],{},[294,162975,162976],{},"str字符串",[294,162978,162945],{},[294,162980,162965],{},[294,162982,162951],{},[294,162984,162985],{},[91,162986,155857],{},[248,162988,162989,162992,162995,162997,163000],{},[294,162990,162991],{},"set集合",[294,162993,162994],{},"无序",[294,162996,162948],{},[294,162998,162999],{},"不允许",[294,163001,163002],{},[91,163003,155272],{},[248,163005,163006,163009,163011,163013,163016],{},[294,163007,163008],{},"dict字典",[294,163010,162945],{},[294,163012,162948],{},[294,163014,163015],{},"key不允许重复",[294,163017,163018],{},[91,163019,163020],{},"{\"name\": \"小明\"}",[40,163022,163023],{},"Python 3.7 之后，字典保持插入顺序。",[35,163025,163027],{"id":163026},"_62-列表list","6.2 列表list",[40,163029,163030],{},"列表用于保存一组有顺序的数据。",[85,163032,163034],{"className":30361,"code":163033,"language":30363,"meta":14,"style":14},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[91,163035,163036,163056,163081,163102],{"__ignoreMap":14},[94,163037,163038,163040,163042,163044,163046,163048,163050,163052,163054],{"class":96,"line":97},[94,163039,160357],{"class":104},[94,163041,150],{"class":100},[94,163043,52203],{"class":104},[94,163045,149865],{"class":209},[94,163047,12417],{"class":104},[94,163049,150913],{"class":209},[94,163051,12417],{"class":104},[94,163053,159708],{"class":209},[94,163055,33229],{"class":104},[94,163057,163058,163061,163063,163065,163067,163069,163071,163073,163075,163077,163079],{"class":96,"line":15},[94,163059,163060],{"class":104},"numbers ",[94,163062,150],{"class":100},[94,163064,52203],{"class":104},[94,163066,322],{"class":153},[94,163068,12417],{"class":104},[94,163070,182],{"class":153},[94,163072,12417],{"class":104},[94,163074,176],{"class":153},[94,163076,12417],{"class":104},[94,163078,398],{"class":153},[94,163080,33229],{"class":104},[94,163082,163083,163086,163088,163090,163092,163094,163096,163098,163100],{"class":96,"line":1160},[94,163084,163085],{"class":104},"mixed ",[94,163087,150],{"class":100},[94,163089,52203],{"class":104},[94,163091,149865],{"class":209},[94,163093,12417],{"class":104},[94,163095,755],{"class":153},[94,163097,12417],{"class":104},[94,163099,31459],{"class":153},[94,163101,33229],{"class":104},[94,163103,163104,163107,163109],{"class":96,"line":1175},[94,163105,163106],{"class":104},"empty ",[94,163108,150],{"class":100},[94,163110,51815],{"class":104},[40,163112,163113],{},"推荐一个列表中保存同类数据，代码更清晰。",[35,163115,163117],{"id":163116},"_63-列表索引","6.3 列表索引",[40,163119,163120],{},"正向索引从 0 开始：",[85,163122,163124],{"className":30361,"code":163123,"language":30363,"meta":14,"style":14},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[91,163125,163126,163146,163150,163161,163171],{"__ignoreMap":14},[94,163127,163128,163130,163132,163134,163136,163138,163140,163142,163144],{"class":96,"line":97},[94,163129,160357],{"class":104},[94,163131,150],{"class":100},[94,163133,52203],{"class":104},[94,163135,149865],{"class":209},[94,163137,12417],{"class":104},[94,163139,150913],{"class":209},[94,163141,12417],{"class":104},[94,163143,159708],{"class":209},[94,163145,33229],{"class":104},[94,163147,163148],{"class":96,"line":15},[94,163149,2381],{"emptyLinePlaceholder":20},[94,163151,163152,163154,163157,163159],{"class":96,"line":1160},[94,163153,30398],{"class":153},[94,163155,163156],{"class":104},"(names[",[94,163158,296],{"class":153},[94,163160,4638],{"class":104},[94,163162,163163,163165,163167,163169],{"class":96,"line":1175},[94,163164,30398],{"class":153},[94,163166,163156],{"class":104},[94,163168,322],{"class":153},[94,163170,4638],{"class":104},[94,163172,163173,163175,163177,163179],{"class":96,"line":1181},[94,163174,30398],{"class":153},[94,163176,163156],{"class":104},[94,163178,182],{"class":153},[94,163180,4638],{"class":104},[40,163182,163183],{},"反向索引从 -1 开始：",[85,163185,163187],{"className":30361,"code":163186,"language":30363,"meta":14,"style":14},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[91,163188,163189,163205],{"__ignoreMap":14},[94,163190,163191,163193,163195,163197,163199,163202],{"class":96,"line":97},[94,163192,30398],{"class":153},[94,163194,163156],{"class":104},[94,163196,637],{"class":100},[94,163198,322],{"class":153},[94,163200,163201],{"class":104},"])  ",[94,163203,163204],{"class":163},"# 小刚\n",[94,163206,163207,163209,163211,163213,163215,163217],{"class":96,"line":15},[94,163208,30398],{"class":153},[94,163210,163156],{"class":104},[94,163212,637],{"class":100},[94,163214,182],{"class":153},[94,163216,163201],{"class":104},[94,163218,163219],{"class":163},"# 小红\n",[40,163221,163222],{},"索引越界会报错：",[85,163224,163226],{"className":30361,"code":163225,"language":30363,"meta":14,"style":14},"print(names[3])\n",[91,163227,163228],{"__ignoreMap":14},[94,163229,163230,163232,163234,163236],{"class":96,"line":97},[94,163231,30398],{"class":153},[94,163233,163156],{"class":104},[94,163235,176],{"class":153},[94,163237,4638],{"class":104},[35,163239,163241],{"id":163240},"_64-列表常用方法","6.4 列表常用方法",[85,163243,163245],{"className":30361,"code":163244,"language":30363,"meta":14,"style":14},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[91,163246,163247,163263,163267,163276,163290,163304,163308],{"__ignoreMap":14},[94,163248,163249,163251,163253,163255,163257,163259,163261],{"class":96,"line":97},[94,163250,160357],{"class":104},[94,163252,150],{"class":100},[94,163254,52203],{"class":104},[94,163256,149865],{"class":209},[94,163258,12417],{"class":104},[94,163260,150913],{"class":209},[94,163262,33229],{"class":104},[94,163264,163265],{"class":96,"line":15},[94,163266,2381],{"emptyLinePlaceholder":20},[94,163268,163269,163272,163274],{"class":96,"line":1160},[94,163270,163271],{"class":104},"names.append(",[94,163273,159708],{"class":209},[94,163275,111],{"class":104},[94,163277,163278,163281,163283,163285,163288],{"class":96,"line":1175},[94,163279,163280],{"class":104},"names.insert(",[94,163282,322],{"class":153},[94,163284,12417],{"class":104},[94,163286,163287],{"class":209},"\"小李\"",[94,163289,111],{"class":104},[94,163291,163292,163295,163297,163299,163302],{"class":96,"line":1181},[94,163293,163294],{"class":104},"names.extend([",[94,163296,8665],{"class":209},[94,163298,12417],{"class":104},[94,163300,163301],{"class":209},"\"小赵\"",[94,163303,4638],{"class":104},[94,163305,163306],{"class":96,"line":1195},[94,163307,2381],{"emptyLinePlaceholder":20},[94,163309,163310,163312],{"class":96,"line":1201},[94,163311,30398],{"class":153},[94,163313,163314],{"class":104},"(names)\n",[40,163316,163317],{},"删除元素：",[85,163319,163321],{"className":30361,"code":163320,"language":30363,"meta":14,"style":14},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[91,163322,163323,163332,163342,163356,163368],{"__ignoreMap":14},[94,163324,163325,163328,163330],{"class":96,"line":97},[94,163326,163327],{"class":104},"names.remove(",[94,163329,150913],{"class":209},[94,163331,111],{"class":104},[94,163333,163334,163337,163339],{"class":96,"line":15},[94,163335,163336],{"class":104},"last ",[94,163338,150],{"class":100},[94,163340,163341],{"class":104}," names.pop()\n",[94,163343,163344,163347,163349,163352,163354],{"class":96,"line":1160},[94,163345,163346],{"class":104},"first ",[94,163348,150],{"class":100},[94,163350,163351],{"class":104}," names.pop(",[94,163353,296],{"class":153},[94,163355,111],{"class":104},[94,163357,163358,163361,163364,163366],{"class":96,"line":1175},[94,163359,163360],{"class":100},"del",[94,163362,163363],{"class":104}," names[",[94,163365,296],{"class":153},[94,163367,33229],{"class":104},[94,163369,163370],{"class":96,"line":1181},[94,163371,163372],{"class":104},"names.clear()\n",[40,163374,163375],{},"查询和统计：",[85,163377,163379],{"className":30361,"code":163378,"language":30363,"meta":14,"style":14},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[91,163380,163381,163409,163413,163424,163435],{"__ignoreMap":14},[94,163382,163383,163385,163387,163389,163391,163393,163395,163397,163399,163401,163403,163405,163407],{"class":96,"line":97},[94,163384,163060],{"class":104},[94,163386,150],{"class":100},[94,163388,52203],{"class":104},[94,163390,322],{"class":153},[94,163392,12417],{"class":104},[94,163394,182],{"class":153},[94,163396,12417],{"class":104},[94,163398,176],{"class":153},[94,163400,12417],{"class":104},[94,163402,182],{"class":153},[94,163404,12417],{"class":104},[94,163406,398],{"class":153},[94,163408,33229],{"class":104},[94,163410,163411],{"class":96,"line":15},[94,163412,2381],{"emptyLinePlaceholder":20},[94,163414,163415,163417,163420,163422],{"class":96,"line":1160},[94,163416,30398],{"class":153},[94,163418,163419],{"class":104},"(numbers.index(",[94,163421,176],{"class":153},[94,163423,30480],{"class":104},[94,163425,163426,163428,163431,163433],{"class":96,"line":1175},[94,163427,30398],{"class":153},[94,163429,163430],{"class":104},"(numbers.count(",[94,163432,182],{"class":153},[94,163434,30480],{"class":104},[94,163436,163437,163439,163441,163443],{"class":96,"line":1181},[94,163438,30398],{"class":153},[94,163440,105],{"class":104},[94,163442,7340],{"class":153},[94,163444,163445],{"class":104},"(numbers))\n",[40,163447,163448],{},"排序：",[85,163450,163452],{"className":30361,"code":163451,"language":30363,"meta":14,"style":14},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[91,163453,163454,163478,163482,163487,163494,163498,163512,163518,163522,163527],{"__ignoreMap":14},[94,163455,163456,163458,163460,163462,163464,163466,163468,163470,163472,163474,163476],{"class":96,"line":97},[94,163457,163060],{"class":104},[94,163459,150],{"class":100},[94,163461,52203],{"class":104},[94,163463,176],{"class":153},[94,163465,12417],{"class":104},[94,163467,322],{"class":153},[94,163469,12417],{"class":104},[94,163471,424],{"class":153},[94,163473,12417],{"class":104},[94,163475,182],{"class":153},[94,163477,33229],{"class":104},[94,163479,163480],{"class":96,"line":15},[94,163481,2381],{"emptyLinePlaceholder":20},[94,163483,163484],{"class":96,"line":1160},[94,163485,163486],{"class":104},"numbers.sort()\n",[94,163488,163489,163491],{"class":96,"line":1175},[94,163490,30398],{"class":153},[94,163492,163493],{"class":104},"(numbers)\n",[94,163495,163496],{"class":96,"line":1181},[94,163497,2381],{"emptyLinePlaceholder":20},[94,163499,163500,163503,163506,163508,163510],{"class":96,"line":1195},[94,163501,163502],{"class":104},"numbers.sort(",[94,163504,163505],{"class":5198},"reverse",[94,163507,150],{"class":100},[94,163509,31459],{"class":153},[94,163511,111],{"class":104},[94,163513,163514,163516],{"class":96,"line":1201},[94,163515,30398],{"class":153},[94,163517,163493],{"class":104},[94,163519,163520],{"class":96,"line":1292},[94,163521,2381],{"emptyLinePlaceholder":20},[94,163523,163524],{"class":96,"line":1298},[94,163525,163526],{"class":104},"numbers.reverse()\n",[94,163528,163529,163531],{"class":96,"line":1310},[94,163530,30398],{"class":153},[94,163532,163493],{"class":104},[40,163534,163535,163538,163539,163542],{},[91,163536,163537],{},"sort()"," 会修改原列表，",[91,163540,163541],{},"sorted()"," 返回新列表。",[85,163544,163546],{"className":30361,"code":163545,"language":30363,"meta":14,"style":14},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[91,163547,163548,163572,163584,163588,163594],{"__ignoreMap":14},[94,163549,163550,163552,163554,163556,163558,163560,163562,163564,163566,163568,163570],{"class":96,"line":97},[94,163551,163060],{"class":104},[94,163553,150],{"class":100},[94,163555,52203],{"class":104},[94,163557,176],{"class":153},[94,163559,12417],{"class":104},[94,163561,322],{"class":153},[94,163563,12417],{"class":104},[94,163565,424],{"class":153},[94,163567,12417],{"class":104},[94,163569,182],{"class":153},[94,163571,33229],{"class":104},[94,163573,163574,163577,163579,163582],{"class":96,"line":15},[94,163575,163576],{"class":104},"new_numbers ",[94,163578,150],{"class":100},[94,163580,163581],{"class":153}," sorted",[94,163583,163493],{"class":104},[94,163585,163586],{"class":96,"line":1160},[94,163587,2381],{"emptyLinePlaceholder":20},[94,163589,163590,163592],{"class":96,"line":1175},[94,163591,30398],{"class":153},[94,163593,163493],{"class":104},[94,163595,163596,163598],{"class":96,"line":1181},[94,163597,30398],{"class":153},[94,163599,163600],{"class":104},"(new_numbers)\n",[35,163602,163604],{"id":163603},"_65-列表遍历","6.5 列表遍历",[85,163606,163608],{"className":30361,"code":163607,"language":30363,"meta":14,"style":14},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[91,163609,163610,163630,163634,163644],{"__ignoreMap":14},[94,163611,163612,163614,163616,163618,163620,163622,163624,163626,163628],{"class":96,"line":97},[94,163613,160357],{"class":104},[94,163615,150],{"class":100},[94,163617,52203],{"class":104},[94,163619,149865],{"class":209},[94,163621,12417],{"class":104},[94,163623,150913],{"class":209},[94,163625,12417],{"class":104},[94,163627,159708],{"class":209},[94,163629,33229],{"class":104},[94,163631,163632],{"class":96,"line":15},[94,163633,2381],{"emptyLinePlaceholder":20},[94,163635,163636,163638,163640,163642],{"class":96,"line":1160},[94,163637,3006],{"class":100},[94,163639,160393],{"class":104},[94,163641,26026],{"class":100},[94,163643,160398],{"class":104},[94,163645,163646,163648],{"class":96,"line":1175},[94,163647,31282],{"class":153},[94,163649,150637],{"class":104},[40,163651,163652],{},"需要索引时：",[85,163654,163656],{"className":30361,"code":163655,"language":30363,"meta":14,"style":14},"for index, name in enumerate(names):\n    print(index, name)\n",[91,163657,163658,163672],{"__ignoreMap":14},[94,163659,163660,163662,163665,163667,163669],{"class":96,"line":97},[94,163661,3006],{"class":100},[94,163663,163664],{"class":104}," index, name ",[94,163666,26026],{"class":100},[94,163668,31589],{"class":153},[94,163670,163671],{"class":104},"(names):\n",[94,163673,163674,163676],{"class":96,"line":15},[94,163675,31282],{"class":153},[94,163677,163678],{"class":104},"(index, name)\n",[40,163680,163681],{},"统计总分：",[85,163683,163685],{"className":30361,"code":163684,"language":30363,"meta":14,"style":14},"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",[91,163686,163687,163712,163720,163724,163735,163743,163747,163764],{"__ignoreMap":14},[94,163688,163689,163692,163694,163696,163698,163700,163702,163704,163706,163708,163710],{"class":96,"line":97},[94,163690,163691],{"class":104},"scores ",[94,163693,150],{"class":100},[94,163695,52203],{"class":104},[94,163697,967],{"class":153},[94,163699,12417],{"class":104},[94,163701,841],{"class":153},[94,163703,12417],{"class":104},[94,163705,359],{"class":153},[94,163707,12417],{"class":104},[94,163709,666],{"class":153},[94,163711,33229],{"class":104},[94,163713,163714,163716,163718],{"class":96,"line":15},[94,163715,157237],{"class":104},[94,163717,150],{"class":100},[94,163719,47316],{"class":153},[94,163721,163722],{"class":96,"line":1160},[94,163723,2381],{"emptyLinePlaceholder":20},[94,163725,163726,163728,163730,163732],{"class":96,"line":1175},[94,163727,3006],{"class":100},[94,163729,157760],{"class":104},[94,163731,26026],{"class":100},[94,163733,163734],{"class":104}," scores:\n",[94,163736,163737,163739,163741],{"class":96,"line":1181},[94,163738,159284],{"class":104},[94,163740,9459],{"class":100},[94,163742,1560],{"class":104},[94,163744,163745],{"class":96,"line":1195},[94,163746,2381],{"emptyLinePlaceholder":20},[94,163748,163749,163752,163754,163757,163759,163761],{"class":96,"line":1201},[94,163750,163751],{"class":104},"avg ",[94,163753,150],{"class":100},[94,163755,163756],{"class":104}," total ",[94,163758,689],{"class":100},[94,163760,7313],{"class":153},[94,163762,163763],{"class":104},"(scores)\n",[94,163765,163766,163768,163770,163772,163775,163777,163780,163782,163784,163786],{"class":96,"line":1292},[94,163767,30398],{"class":153},[94,163769,105],{"class":104},[94,163771,157],{"class":100},[94,163773,163774],{"class":209},"\"平均分:",[94,163776,1001],{"class":153},[94,163778,163779],{"class":104},"avg",[94,163781,157136],{"class":100},[94,163783,1051],{"class":153},[94,163785,356],{"class":209},[94,163787,111],{"class":104},[35,163789,163791],{"id":163790},"_66-元组tuple","6.6 元组tuple",[40,163793,163794],{},"元组和列表类似，但不可修改。",[85,163796,163798],{"className":30361,"code":163797,"language":30363,"meta":14,"style":14},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[91,163799,163800,163817],{"__ignoreMap":14},[94,163801,163802,163805,163807,163809,163811,163813,163815],{"class":96,"line":97},[94,163803,163804],{"class":104},"point ",[94,163806,150],{"class":100},[94,163808,1639],{"class":104},[94,163810,551],{"class":153},[94,163812,12417],{"class":104},[94,163814,805],{"class":153},[94,163816,111],{"class":104},[94,163818,163819,163821,163823,163825,163827,163829,163831,163833,163835],{"class":96,"line":15},[94,163820,116291],{"class":104},[94,163822,150],{"class":100},[94,163824,1639],{"class":104},[94,163826,149865],{"class":209},[94,163828,12417],{"class":104},[94,163830,755],{"class":153},[94,163832,12417],{"class":104},[94,163834,69246],{"class":209},[94,163836,111],{"class":104},[40,163838,163839],{},"单元素元组必须加逗号：",[85,163841,163843],{"className":30361,"code":163842,"language":30363,"meta":14,"style":14},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[91,163844,163845,163859,163872,163876,163890],{"__ignoreMap":14},[94,163846,163847,163850,163852,163854,163856],{"class":96,"line":97},[94,163848,163849],{"class":104},"t1 ",[94,163851,150],{"class":100},[94,163853,1639],{"class":104},[94,163855,551],{"class":153},[94,163857,163858],{"class":104},",)\n",[94,163860,163861,163864,163866,163868,163870],{"class":96,"line":15},[94,163862,163863],{"class":104},"t2 ",[94,163865,150],{"class":100},[94,163867,1639],{"class":104},[94,163869,551],{"class":153},[94,163871,111],{"class":104},[94,163873,163874],{"class":96,"line":1160},[94,163875,2381],{"emptyLinePlaceholder":20},[94,163877,163878,163880,163882,163884,163887],{"class":96,"line":1175},[94,163879,30398],{"class":153},[94,163881,105],{"class":104},[94,163883,103084],{"class":153},[94,163885,163886],{"class":104},"(t1))  ",[94,163888,163889],{"class":163},"# tuple\n",[94,163891,163892,163894,163896,163898,163901],{"class":96,"line":1181},[94,163893,30398],{"class":153},[94,163895,105],{"class":104},[94,163897,103084],{"class":153},[94,163899,163900],{"class":104},"(t2))  ",[94,163902,163903],{"class":163},"# int\n",[40,163905,163906],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[35,163908,163910],{"id":163909},"_67-字符串str","6.7 字符串str",[40,163912,163913],{},"字符串也是序列，可以索引、切片和遍历。",[85,163915,163917],{"className":30361,"code":163916,"language":30363,"meta":14,"style":14},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[91,163918,163919,163927,163931,163942,163954,163958,163969],{"__ignoreMap":14},[94,163920,163921,163923,163925],{"class":96,"line":97},[94,163922,156421],{"class":104},[94,163924,150],{"class":100},[94,163926,159658],{"class":209},[94,163928,163929],{"class":96,"line":15},[94,163930,2381],{"emptyLinePlaceholder":20},[94,163932,163933,163935,163938,163940],{"class":96,"line":1160},[94,163934,30398],{"class":153},[94,163936,163937],{"class":104},"(text[",[94,163939,296],{"class":153},[94,163941,4638],{"class":104},[94,163943,163944,163946,163948,163950,163952],{"class":96,"line":1175},[94,163945,30398],{"class":153},[94,163947,163937],{"class":104},[94,163949,637],{"class":100},[94,163951,322],{"class":153},[94,163953,4638],{"class":104},[94,163955,163956],{"class":96,"line":1181},[94,163957,2381],{"emptyLinePlaceholder":20},[94,163959,163960,163962,163964,163966],{"class":96,"line":1195},[94,163961,3006],{"class":100},[94,163963,159669],{"class":104},[94,163965,26026],{"class":100},[94,163967,163968],{"class":104}," text:\n",[94,163970,163971,163973],{"class":96,"line":1201},[94,163972,31282],{"class":153},[94,163974,159680],{"class":104},[40,163976,163977],{},"字符串不可变：",[85,163979,163981],{"className":30361,"code":163980,"language":30363,"meta":14,"style":14},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[91,163982,163983,163991],{"__ignoreMap":14},[94,163984,163985,163987,163989],{"class":96,"line":97},[94,163986,156421],{"class":104},[94,163988,150],{"class":100},[94,163990,159658],{"class":209},[94,163992,163993,163996,163998,164000,164002,164005],{"class":96,"line":15},[94,163994,163995],{"class":104},"text[",[94,163997,296],{"class":153},[94,163999,4424],{"class":104},[94,164001,150],{"class":100},[94,164003,164004],{"class":209}," \"P\"",[94,164006,164007],{"class":163},"  # 报错\n",[40,164009,164010],{},"如果要得到新字符串：",[85,164012,164014],{"className":30361,"code":164013,"language":30363,"meta":14,"style":14},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[91,164015,164016,164024,164042],{"__ignoreMap":14},[94,164017,164018,164020,164022],{"class":96,"line":97},[94,164019,156421],{"class":104},[94,164021,150],{"class":100},[94,164023,159658],{"class":209},[94,164025,164026,164028,164030,164032,164034,164037,164039],{"class":96,"line":15},[94,164027,156421],{"class":104},[94,164029,150],{"class":100},[94,164031,164004],{"class":209},[94,164033,45549],{"class":100},[94,164035,164036],{"class":104}," text[",[94,164038,322],{"class":153},[94,164040,164041],{"class":104},":]\n",[94,164043,164044,164046],{"class":96,"line":1160},[94,164045,30398],{"class":153},[94,164047,164048],{"class":104},"(text)\n",[35,164050,164052],{"id":164051},"_68-切片","6.8 切片",[40,164054,164055],{},"切片用于从序列中取一部分。",[85,164057,164059],{"className":30361,"code":164058,"language":30363,"meta":14,"style":14},"序列[开始:结束:步长]\n",[91,164060,164061],{"__ignoreMap":14},[94,164062,164063],{"class":96,"line":97},[94,164064,164058],{"class":104},[40,164066,164067],{},"结束位置不包含。",[85,164069,164071],{"className":30361,"code":164070,"language":30363,"meta":14,"style":14},"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",[91,164072,164073,164110,164114,164133,164148,164162,164176],{"__ignoreMap":14},[94,164074,164075,164078,164080,164082,164084,164086,164088,164090,164092,164094,164096,164098,164100,164102,164104,164106,164108],{"class":96,"line":97},[94,164076,164077],{"class":104},"nums ",[94,164079,150],{"class":100},[94,164081,52203],{"class":104},[94,164083,296],{"class":153},[94,164085,12417],{"class":104},[94,164087,322],{"class":153},[94,164089,12417],{"class":104},[94,164091,182],{"class":153},[94,164093,12417],{"class":104},[94,164095,176],{"class":153},[94,164097,12417],{"class":104},[94,164099,398],{"class":153},[94,164101,12417],{"class":104},[94,164103,424],{"class":153},[94,164105,12417],{"class":104},[94,164107,449],{"class":153},[94,164109,33229],{"class":104},[94,164111,164112],{"class":96,"line":15},[94,164113,2381],{"emptyLinePlaceholder":20},[94,164115,164116,164118,164121,164123,164125,164127,164130],{"class":96,"line":1160},[94,164117,30398],{"class":153},[94,164119,164120],{"class":104},"(nums[",[94,164122,322],{"class":153},[94,164124,964],{"class":104},[94,164126,398],{"class":153},[94,164128,164129],{"class":104},"])    ",[94,164131,164132],{"class":163},"# [1, 2, 3]\n",[94,164134,164135,164137,164140,164142,164145],{"class":96,"line":1175},[94,164136,30398],{"class":153},[94,164138,164139],{"class":104},"(nums[:",[94,164141,176],{"class":153},[94,164143,164144],{"class":104},"])     ",[94,164146,164147],{"class":163},"# [0, 1, 2]\n",[94,164149,164150,164152,164154,164156,164159],{"class":96,"line":1181},[94,164151,30398],{"class":153},[94,164153,164120],{"class":104},[94,164155,176],{"class":153},[94,164157,164158],{"class":104},":])     ",[94,164160,164161],{"class":163},"# [3, 4, 5, 6]\n",[94,164163,164164,164166,164169,164171,164173],{"class":96,"line":1195},[94,164165,30398],{"class":153},[94,164167,164168],{"class":104},"(nums[::",[94,164170,182],{"class":153},[94,164172,164129],{"class":104},[94,164174,164175],{"class":163},"# [0, 2, 4, 6]\n",[94,164177,164178,164180,164182,164184,164186,164189],{"class":96,"line":1201},[94,164179,30398],{"class":153},[94,164181,164168],{"class":104},[94,164183,637],{"class":100},[94,164185,322],{"class":153},[94,164187,164188],{"class":104},"])   ",[94,164190,164191],{"class":163},"# 反转\n",[40,164193,164194],{},"字符串切片：",[85,164196,164198],{"className":30361,"code":164197,"language":30363,"meta":14,"style":14},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[91,164199,164200,164209,164223],{"__ignoreMap":14},[94,164201,164202,164204,164206],{"class":96,"line":97},[94,164203,156421],{"class":104},[94,164205,150],{"class":100},[94,164207,164208],{"class":209}," \"abcdef\"\n",[94,164210,164211,164213,164215,164217,164219,164221],{"class":96,"line":15},[94,164212,30398],{"class":153},[94,164214,163937],{"class":104},[94,164216,322],{"class":153},[94,164218,964],{"class":104},[94,164220,398],{"class":153},[94,164222,4638],{"class":104},[94,164224,164225,164227,164230,164232,164234],{"class":96,"line":1160},[94,164226,30398],{"class":153},[94,164228,164229],{"class":104},"(text[::",[94,164231,637],{"class":100},[94,164233,322],{"class":153},[94,164235,4638],{"class":104},[35,164237,164239],{"id":164238},"_69-集合set","6.9 集合set",[40,164241,164242],{},"集合特点：",[48,164244,164245,164248,164251],{},[51,164246,164247],{},"无序。",[51,164249,164250],{},"元素不重复。",[51,164252,164253],{},"可以做交集、并集、差集。",[85,164255,164257],{"className":30361,"code":164256,"language":30363,"meta":14,"style":14},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[91,164258,164259,164287],{"__ignoreMap":14},[94,164260,164261,164263,164265,164267,164269,164271,164273,164275,164277,164279,164281,164283,164285],{"class":96,"line":97},[94,164262,164077],{"class":104},[94,164264,150],{"class":100},[94,164266,4429],{"class":104},[94,164268,322],{"class":153},[94,164270,12417],{"class":104},[94,164272,182],{"class":153},[94,164274,12417],{"class":104},[94,164276,176],{"class":153},[94,164278,12417],{"class":104},[94,164280,176],{"class":153},[94,164282,12417],{"class":104},[94,164284,398],{"class":153},[94,164286,1546],{"class":104},[94,164288,164289,164291],{"class":96,"line":15},[94,164290,30398],{"class":153},[94,164292,164293],{"class":104},"(nums)\n",[40,164295,164296],{},"创建空集合：",[85,164298,164300],{"className":30361,"code":164299,"language":30363,"meta":14,"style":14},"s = set()\n",[91,164301,164302],{"__ignoreMap":14},[94,164303,164304,164306,164308,164310],{"class":96,"line":97},[94,164305,10561],{"class":104},[94,164307,150],{"class":100},[94,164309,119699],{"class":153},[94,164311,1957],{"class":104},[40,164313,9007,164314,164316],{},[91,164315,32442],{}," 是空字典，不是空集合。",[40,164318,164319],{},"集合常用操作：",[85,164321,164323],{"className":30361,"code":164322,"language":30363,"meta":14,"style":14},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[91,164324,164325,164345,164349,164358,164367,164376],{"__ignoreMap":14},[94,164326,164327,164329,164331,164333,164335,164337,164339,164341,164343],{"class":96,"line":97},[94,164328,10561],{"class":104},[94,164330,150],{"class":100},[94,164332,4429],{"class":104},[94,164334,322],{"class":153},[94,164336,12417],{"class":104},[94,164338,182],{"class":153},[94,164340,12417],{"class":104},[94,164342,176],{"class":153},[94,164344,1546],{"class":104},[94,164346,164347],{"class":96,"line":15},[94,164348,2381],{"emptyLinePlaceholder":20},[94,164350,164351,164354,164356],{"class":96,"line":1160},[94,164352,164353],{"class":104},"s.add(",[94,164355,398],{"class":153},[94,164357,111],{"class":104},[94,164359,164360,164363,164365],{"class":96,"line":1175},[94,164361,164362],{"class":104},"s.remove(",[94,164364,182],{"class":153},[94,164366,111],{"class":104},[94,164368,164369,164372,164374],{"class":96,"line":1181},[94,164370,164371],{"class":104},"s.discard(",[94,164373,551],{"class":153},[94,164375,111],{"class":104},[94,164377,164378,164380,164382,164384],{"class":96,"line":1195},[94,164379,30398],{"class":153},[94,164381,105],{"class":104},[94,164383,7340],{"class":153},[94,164385,164386],{"class":104},"(s))\n",[40,164388,164389],{},"交并差：",[85,164391,164393],{"className":30361,"code":164392,"language":30363,"meta":14,"style":14},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[91,164394,164395,164415,164435,164439,164454,164467],{"__ignoreMap":14},[94,164396,164397,164399,164401,164403,164405,164407,164409,164411,164413],{"class":96,"line":97},[94,164398,10901],{"class":104},[94,164400,150],{"class":100},[94,164402,4429],{"class":104},[94,164404,322],{"class":153},[94,164406,12417],{"class":104},[94,164408,182],{"class":153},[94,164410,12417],{"class":104},[94,164412,176],{"class":153},[94,164414,1546],{"class":104},[94,164416,164417,164419,164421,164423,164425,164427,164429,164431,164433],{"class":96,"line":15},[94,164418,10927],{"class":104},[94,164420,150],{"class":100},[94,164422,4429],{"class":104},[94,164424,176],{"class":153},[94,164426,12417],{"class":104},[94,164428,398],{"class":153},[94,164430,12417],{"class":104},[94,164432,424],{"class":153},[94,164434,1546],{"class":104},[94,164436,164437],{"class":96,"line":1160},[94,164438,2381],{"emptyLinePlaceholder":20},[94,164440,164441,164443,164446,164448,164451],{"class":96,"line":1175},[94,164442,30398],{"class":153},[94,164444,164445],{"class":104},"(a ",[94,164447,458],{"class":100},[94,164449,164450],{"class":104}," b)  ",[94,164452,164453],{"class":163},"# 交集\n",[94,164455,164456,164458,164460,164462,164464],{"class":96,"line":1181},[94,164457,30398],{"class":153},[94,164459,164445],{"class":104},[94,164461,1026],{"class":100},[94,164463,164450],{"class":104},[94,164465,164466],{"class":163},"# 并集\n",[94,164468,164469,164471,164473,164475,164477],{"class":96,"line":1195},[94,164470,30398],{"class":153},[94,164472,164445],{"class":104},[94,164474,637],{"class":100},[94,164476,164450],{"class":104},[94,164478,164479],{"class":163},"# 差集\n",[35,164481,164483],{"id":164482},"_610-字典dict","6.10 字典dict",[40,164485,164486],{},"字典通过 key-value 保存数据。",[85,164488,164490],{"className":30361,"code":164489,"language":30363,"meta":14,"style":14},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[91,164491,164492,164500,164510,164521,164531],{"__ignoreMap":14},[94,164493,164494,164496,164498],{"class":96,"line":97},[94,164495,149458],{"class":104},[94,164497,150],{"class":100},[94,164499,15554],{"class":104},[94,164501,164502,164504,164506,164508],{"class":96,"line":15},[94,164503,146997],{"class":209},[94,164505,51414],{"class":104},[94,164507,149865],{"class":209},[94,164509,31449],{"class":104},[94,164511,164512,164515,164517,164519],{"class":96,"line":1160},[94,164513,164514],{"class":209},"    \"age\"",[94,164516,51414],{"class":104},[94,164518,755],{"class":153},[94,164520,31449],{"class":104},[94,164522,164523,164526,164528],{"class":96,"line":1175},[94,164524,164525],{"class":209},"    \"score\"",[94,164527,51414],{"class":104},[94,164529,164530],{"class":153},"95\n",[94,164532,164533],{"class":96,"line":1181},[94,164534,1546],{"class":104},[40,164536,164537],{},"获取值：",[85,164539,164541],{"className":30361,"code":164540,"language":30363,"meta":14,"style":14},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[91,164542,164543,164554],{"__ignoreMap":14},[94,164544,164545,164547,164550,164552],{"class":96,"line":97},[94,164546,30398],{"class":153},[94,164548,164549],{"class":104},"(student[",[94,164551,62656],{"class":209},[94,164553,4638],{"class":104},[94,164555,164556,164558,164561,164563],{"class":96,"line":15},[94,164557,30398],{"class":153},[94,164559,164560],{"class":104},"(student.get(",[94,164562,62656],{"class":209},[94,164564,30480],{"class":104},[40,164566,15370],{},[85,164568,164570],{"className":30361,"code":164569,"language":30363,"meta":14,"style":14},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[91,164571,164572,164585],{"__ignoreMap":14},[94,164573,164574,164576,164579,164582],{"class":96,"line":97},[94,164575,152836],{"class":104},[94,164577,164578],{"class":209},"\"address\"",[94,164580,164581],{"class":104},"]     ",[94,164583,164584],{"class":163},"# key不存在会报错\n",[94,164586,164587,164590,164592,164594],{"class":96,"line":15},[94,164588,164589],{"class":104},"student.get(",[94,164591,164578],{"class":209},[94,164593,13696],{"class":104},[94,164595,164596],{"class":163},"# key不存在返回None\n",[40,164598,164599],{},"设置默认值：",[85,164601,164603],{"className":30361,"code":164602,"language":30363,"meta":14,"style":14},"print(student.get(\"address\", \"未知\"))\n",[91,164604,164605],{"__ignoreMap":14},[94,164606,164607,164609,164611,164613,164615,164618],{"class":96,"line":97},[94,164608,30398],{"class":153},[94,164610,164560],{"class":104},[94,164612,164578],{"class":209},[94,164614,12417],{"class":104},[94,164616,164617],{"class":209},"\"未知\"",[94,164619,30480],{"class":104},[40,164621,164622],{},"新增和修改：",[85,164624,164626],{"className":30361,"code":164625,"language":30363,"meta":14,"style":14},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[91,164627,164628,164641],{"__ignoreMap":14},[94,164629,164630,164632,164634,164636,164638],{"class":96,"line":97},[94,164631,152836],{"class":104},[94,164633,69101],{"class":209},[94,164635,4424],{"class":104},[94,164637,150],{"class":100},[94,164639,164640],{"class":153}," 19\n",[94,164642,164643,164645,164647,164649,164651],{"class":96,"line":15},[94,164644,152836],{"class":104},[94,164646,164578],{"class":209},[94,164648,4424],{"class":104},[94,164650,150],{"class":100},[94,164652,164653],{"class":209}," \"北京\"\n",[40,164655,164656],{},"删除：",[85,164658,164660],{"className":30361,"code":164659,"language":30363,"meta":14,"style":14},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[91,164661,164662,164675,164685],{"__ignoreMap":14},[94,164663,164664,164666,164668,164671,164673],{"class":96,"line":97},[94,164665,155335],{"class":104},[94,164667,150],{"class":100},[94,164669,164670],{"class":104}," student.pop(",[94,164672,151449],{"class":209},[94,164674,111],{"class":104},[94,164676,164677,164679,164681,164683],{"class":96,"line":15},[94,164678,163360],{"class":100},[94,164680,152126],{"class":104},[94,164682,69101],{"class":209},[94,164684,33229],{"class":104},[94,164686,164687],{"class":96,"line":1160},[94,164688,164689],{"class":104},"student.clear()\n",[35,164691,164693],{"id":164692},"_611-字典遍历","6.11 字典遍历",[40,164695,164696],{},"遍历 key：",[85,164698,164700],{"className":30361,"code":164699,"language":30363,"meta":14,"style":14},"for key in student:\n    print(key, student[key])\n",[91,164701,164702,164714],{"__ignoreMap":14},[94,164703,164704,164706,164709,164711],{"class":96,"line":97},[94,164705,3006],{"class":100},[94,164707,164708],{"class":104}," key ",[94,164710,26026],{"class":100},[94,164712,164713],{"class":104}," student:\n",[94,164715,164716,164718],{"class":96,"line":15},[94,164717,31282],{"class":153},[94,164719,164720],{"class":104},"(key, student[key])\n",[40,164722,164723],{},"遍历 value：",[85,164725,164727],{"className":30361,"code":164726,"language":30363,"meta":14,"style":14},"for value in student.values():\n    print(value)\n",[91,164728,164729,164741],{"__ignoreMap":14},[94,164730,164731,164733,164736,164738],{"class":96,"line":97},[94,164732,3006],{"class":100},[94,164734,164735],{"class":104}," value ",[94,164737,26026],{"class":100},[94,164739,164740],{"class":104}," student.values():\n",[94,164742,164743,164745],{"class":96,"line":15},[94,164744,31282],{"class":153},[94,164746,164747],{"class":104},"(value)\n",[40,164749,164750],{},"遍历 key 和 value：",[85,164752,164754],{"className":30361,"code":164753,"language":30363,"meta":14,"style":14},"for key, value in student.items():\n    print(key, value)\n",[91,164755,164756,164768],{"__ignoreMap":14},[94,164757,164758,164760,164763,164765],{"class":96,"line":97},[94,164759,3006],{"class":100},[94,164761,164762],{"class":104}," key, value ",[94,164764,26026],{"class":100},[94,164766,164767],{"class":104}," student.items():\n",[94,164769,164770,164772],{"class":96,"line":15},[94,164771,31282],{"class":153},[94,164773,164774],{"class":104},"(key, value)\n",[35,164776,164778],{"id":164777},"_612-嵌套容器","6.12 嵌套容器",[40,164780,164781],{},"列表中保存字典，是项目中最常见的结构之一。",[85,164783,164785],{"className":30361,"code":164784,"language":30363,"meta":14,"style":14},"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",[91,164786,164787,164795,164823,164851,164879,164883,164887,164897],{"__ignoreMap":14},[94,164788,164789,164791,164793],{"class":96,"line":97},[94,164790,159693],{"class":104},[94,164792,150],{"class":100},[94,164794,55424],{"class":104},[94,164796,164797,164799,164801,164803,164805,164807,164809,164811,164813,164815,164817,164819,164821],{"class":96,"line":15},[94,164798,148362],{"class":104},[94,164800,62656],{"class":209},[94,164802,51414],{"class":104},[94,164804,149865],{"class":209},[94,164806,12417],{"class":104},[94,164808,69101],{"class":209},[94,164810,51414],{"class":104},[94,164812,755],{"class":153},[94,164814,12417],{"class":104},[94,164816,151449],{"class":209},[94,164818,51414],{"class":104},[94,164820,1094],{"class":153},[94,164822,4911],{"class":104},[94,164824,164825,164827,164829,164831,164833,164835,164837,164839,164841,164843,164845,164847,164849],{"class":96,"line":1160},[94,164826,148362],{"class":104},[94,164828,62656],{"class":209},[94,164830,51414],{"class":104},[94,164832,150913],{"class":209},[94,164834,12417],{"class":104},[94,164836,69101],{"class":209},[94,164838,51414],{"class":104},[94,164840,730],{"class":153},[94,164842,12417],{"class":104},[94,164844,151449],{"class":209},[94,164846,51414],{"class":104},[94,164848,916],{"class":153},[94,164850,4911],{"class":104},[94,164852,164853,164855,164857,164859,164861,164863,164865,164867,164869,164871,164873,164875,164877],{"class":96,"line":1175},[94,164854,148362],{"class":104},[94,164856,62656],{"class":209},[94,164858,51414],{"class":104},[94,164860,159708],{"class":209},[94,164862,12417],{"class":104},[94,164864,69101],{"class":209},[94,164866,51414],{"class":104},[94,164868,780],{"class":153},[94,164870,12417],{"class":104},[94,164872,151449],{"class":209},[94,164874,51414],{"class":104},[94,164876,511],{"class":153},[94,164878,4911],{"class":104},[94,164880,164881],{"class":96,"line":1181},[94,164882,33229],{"class":104},[94,164884,164885],{"class":96,"line":1195},[94,164886,2381],{"emptyLinePlaceholder":20},[94,164888,164889,164891,164893,164895],{"class":96,"line":1201},[94,164890,3006],{"class":100},[94,164892,152114],{"class":104},[94,164894,26026],{"class":100},[94,164896,152119],{"class":104},[94,164898,164899,164901,164903,164905,164908,164910],{"class":96,"line":1292},[94,164900,31282],{"class":153},[94,164902,164549],{"class":104},[94,164904,62656],{"class":209},[94,164906,164907],{"class":104},"], student[",[94,164909,151449],{"class":209},[94,164911,4638],{"class":104},[40,164913,164914],{},"统计平均分：",[85,164916,164918],{"className":30361,"code":164917,"language":30363,"meta":14,"style":14},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[91,164919,164920,164928,164932,164942,164954,164958,164973],{"__ignoreMap":14},[94,164921,164922,164924,164926],{"class":96,"line":97},[94,164923,157237],{"class":104},[94,164925,150],{"class":100},[94,164927,47316],{"class":153},[94,164929,164930],{"class":96,"line":15},[94,164931,2381],{"emptyLinePlaceholder":20},[94,164933,164934,164936,164938,164940],{"class":96,"line":1160},[94,164935,3006],{"class":100},[94,164937,152114],{"class":104},[94,164939,26026],{"class":100},[94,164941,152119],{"class":104},[94,164943,164944,164946,164948,164950,164952],{"class":96,"line":1175},[94,164945,159284],{"class":104},[94,164947,9459],{"class":100},[94,164949,152126],{"class":104},[94,164951,151449],{"class":209},[94,164953,33229],{"class":104},[94,164955,164956],{"class":96,"line":1181},[94,164957,2381],{"emptyLinePlaceholder":20},[94,164959,164960,164962,164964,164966,164968,164970],{"class":96,"line":1195},[94,164961,163751],{"class":104},[94,164963,150],{"class":100},[94,164965,163756],{"class":104},[94,164967,689],{"class":100},[94,164969,7313],{"class":153},[94,164971,164972],{"class":104},"(students)\n",[94,164974,164975,164977,164979,164981,164983,164985,164987,164989,164991,164993],{"class":96,"line":1201},[94,164976,30398],{"class":153},[94,164978,105],{"class":104},[94,164980,157],{"class":100},[94,164982,163774],{"class":209},[94,164984,1001],{"class":153},[94,164986,163779],{"class":104},[94,164988,157136],{"class":100},[94,164990,1051],{"class":153},[94,164992,356],{"class":209},[94,164994,111],{"class":104},[40,164996,164997],{},"查找学生：",[85,164999,165001],{"className":30361,"code":165000,"language":30363,"meta":14,"style":14},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[91,165002,165003,165018,165022,165032,165046,165052,165056,165062],{"__ignoreMap":14},[94,165004,165005,165007,165009,165011,165013,165016],{"class":96,"line":97},[94,165006,111555],{"class":104},[94,165008,150],{"class":100},[94,165010,60582],{"class":153},[94,165012,105],{"class":104},[94,165014,165015],{"class":209},"\"请输入学生姓名:\"",[94,165017,111],{"class":104},[94,165019,165020],{"class":96,"line":15},[94,165021,2381],{"emptyLinePlaceholder":20},[94,165023,165024,165026,165028,165030],{"class":96,"line":1160},[94,165025,3006],{"class":100},[94,165027,152114],{"class":104},[94,165029,26026],{"class":100},[94,165031,152119],{"class":104},[94,165033,165034,165036,165038,165040,165042,165044],{"class":96,"line":1175},[94,165035,3082],{"class":100},[94,165037,152126],{"class":104},[94,165039,62656],{"class":209},[94,165041,4424],{"class":104},[94,165043,2930],{"class":100},[94,165045,160409],{"class":104},[94,165047,165048,165050],{"class":96,"line":1181},[94,165049,32434],{"class":153},[94,165051,150019],{"class":104},[94,165053,165054],{"class":96,"line":1195},[94,165055,31610],{"class":100},[94,165057,165058,165060],{"class":96,"line":1201},[94,165059,1682],{"class":100},[94,165061,3720],{"class":104},[94,165063,165064,165066,165068,165071],{"class":96,"line":1292},[94,165065,31282],{"class":153},[94,165067,105],{"class":104},[94,165069,165070],{"class":209},"\"没有找到\"",[94,165072,111],{"class":104},[35,165074,165076],{"id":165075},"_613-容器通用操作","6.13 容器通用操作",[40,165078,165079],{},"长度：",[85,165081,165083],{"className":30361,"code":165082,"language":30363,"meta":14,"style":14},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[91,165084,165085,165104,165114],{"__ignoreMap":14},[94,165086,165087,165089,165092,165094,165096,165098,165100,165102],{"class":96,"line":97},[94,165088,7340],{"class":153},[94,165090,165091],{"class":104},"([",[94,165093,322],{"class":153},[94,165095,12417],{"class":104},[94,165097,182],{"class":153},[94,165099,12417],{"class":104},[94,165101,176],{"class":153},[94,165103,4638],{"class":104},[94,165105,165106,165108,165110,165112],{"class":96,"line":15},[94,165107,7340],{"class":153},[94,165109,105],{"class":104},[94,165111,155857],{"class":209},[94,165113,111],{"class":104},[94,165115,165116,165118,165121,165123,165125,165127],{"class":96,"line":1160},[94,165117,7340],{"class":153},[94,165119,165120],{"class":104},"({",[94,165122,62656],{"class":209},[94,165124,51414],{"class":104},[94,165126,149865],{"class":209},[94,165128,165129],{"class":104},"})\n",[40,165131,165132],{},"最大最小：",[85,165134,165136],{"className":30361,"code":165135,"language":30363,"meta":14,"style":14},"max([1, 2, 3])\nmin([1, 2, 3])\n",[91,165137,165138,165156],{"__ignoreMap":14},[94,165139,165140,165142,165144,165146,165148,165150,165152,165154],{"class":96,"line":97},[94,165141,5997],{"class":153},[94,165143,165091],{"class":104},[94,165145,322],{"class":153},[94,165147,12417],{"class":104},[94,165149,182],{"class":153},[94,165151,12417],{"class":104},[94,165153,176],{"class":153},[94,165155,4638],{"class":104},[94,165157,165158,165161,165163,165165,165167,165169,165171,165173],{"class":96,"line":15},[94,165159,165160],{"class":153},"min",[94,165162,165091],{"class":104},[94,165164,322],{"class":153},[94,165166,12417],{"class":104},[94,165168,182],{"class":153},[94,165170,12417],{"class":104},[94,165172,176],{"class":153},[94,165174,4638],{"class":104},[40,165176,165177],{},"求和：",[85,165179,165181],{"className":30361,"code":165180,"language":30363,"meta":14,"style":14},"sum([1, 2, 3])\n",[91,165182,165183],{"__ignoreMap":14},[94,165184,165185,165188,165190,165192,165194,165196,165198,165200],{"class":96,"line":97},[94,165186,165187],{"class":153},"sum",[94,165189,165091],{"class":104},[94,165191,322],{"class":153},[94,165193,12417],{"class":104},[94,165195,182],{"class":153},[94,165197,12417],{"class":104},[94,165199,176],{"class":153},[94,165201,4638],{"class":104},[40,165203,163448],{},[85,165205,165207],{"className":30361,"code":165206,"language":30363,"meta":14,"style":14},"sorted([3, 1, 2])\n",[91,165208,165209],{"__ignoreMap":14},[94,165210,165211,165214,165216,165218,165220,165222,165224,165226],{"class":96,"line":97},[94,165212,165213],{"class":153},"sorted",[94,165215,165091],{"class":104},[94,165217,176],{"class":153},[94,165219,12417],{"class":104},[94,165221,322],{"class":153},[94,165223,12417],{"class":104},[94,165225,182],{"class":153},[94,165227,4638],{"class":104},[40,165229,165230],{},"类型转换：",[85,165232,165234],{"className":30361,"code":165233,"language":30363,"meta":14,"style":14},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[91,165235,165236,165246,165264],{"__ignoreMap":14},[94,165237,165238,165240,165242,165244],{"class":96,"line":97},[94,165239,154047],{"class":153},[94,165241,105],{"class":104},[94,165243,155857],{"class":209},[94,165245,111],{"class":104},[94,165247,165248,165250,165252,165254,165256,165258,165260,165262],{"class":96,"line":15},[94,165249,155242],{"class":153},[94,165251,165091],{"class":104},[94,165253,322],{"class":153},[94,165255,12417],{"class":104},[94,165257,182],{"class":153},[94,165259,12417],{"class":104},[94,165261,176],{"class":153},[94,165263,4638],{"class":104},[94,165265,165266,165268,165270,165272,165274,165276,165278,165280,165282,165284],{"class":96,"line":1160},[94,165267,155267],{"class":153},[94,165269,165091],{"class":104},[94,165271,322],{"class":153},[94,165273,12417],{"class":104},[94,165275,322],{"class":153},[94,165277,12417],{"class":104},[94,165279,182],{"class":153},[94,165281,12417],{"class":104},[94,165283,176],{"class":153},[94,165285,4638],{"class":104},[40,165287,165288],{},"成员判断：",[85,165290,165292],{"className":30361,"code":165291,"language":30363,"meta":14,"style":14},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[91,165293,165294,165311,165335],{"__ignoreMap":14},[94,165295,165296,165298,165300,165303,165306,165309],{"class":96,"line":97},[94,165297,30398],{"class":153},[94,165299,105],{"class":104},[94,165301,165302],{"class":209},"\"a\"",[94,165304,165305],{"class":100}," in",[94,165307,165308],{"class":209}," \"abc\"",[94,165310,111],{"class":104},[94,165312,165313,165315,165317,165319,165321,165323,165325,165327,165329,165331,165333],{"class":96,"line":15},[94,165314,30398],{"class":153},[94,165316,105],{"class":104},[94,165318,322],{"class":153},[94,165320,165305],{"class":100},[94,165322,52203],{"class":104},[94,165324,322],{"class":153},[94,165326,12417],{"class":104},[94,165328,182],{"class":153},[94,165330,12417],{"class":104},[94,165332,176],{"class":153},[94,165334,4638],{"class":104},[94,165336,165337,165339,165341,165343,165345,165347,165349,165351,165353],{"class":96,"line":1160},[94,165338,30398],{"class":153},[94,165340,105],{"class":104},[94,165342,62656],{"class":209},[94,165344,165305],{"class":100},[94,165346,4429],{"class":104},[94,165348,62656],{"class":209},[94,165350,51414],{"class":104},[94,165352,149865],{"class":209},[94,165354,165129],{"class":104},[35,165356,165358],{"id":165357},"_614-推导式","6.14 推导式",[40,165360,165361],{},"推导式用于快速生成容器。",[40,165363,165364],{},"列表推导式：",[85,165366,165368],{"className":30361,"code":165367,"language":30363,"meta":14,"style":14},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[91,165369,165370,165397],{"__ignoreMap":14},[94,165371,165372,165374,165376,165379,165381,165383,165385,165387,165389,165391,165393,165395],{"class":96,"line":97},[94,165373,164077],{"class":104},[94,165375,150],{"class":100},[94,165377,165378],{"class":104}," [i ",[94,165380,3006],{"class":100},[94,165382,9420],{"class":104},[94,165384,26026],{"class":100},[94,165386,32426],{"class":153},[94,165388,105],{"class":104},[94,165390,322],{"class":153},[94,165392,12417],{"class":104},[94,165394,449],{"class":153},[94,165396,97277],{"class":104},[94,165398,165399,165401],{"class":96,"line":15},[94,165400,30398],{"class":153},[94,165402,164293],{"class":104},[40,165404,165405],{},"带条件：",[85,165407,165409],{"className":30361,"code":165408,"language":30363,"meta":14,"style":14},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[91,165410,165411,165452],{"__ignoreMap":14},[94,165412,165413,165416,165418,165420,165422,165424,165426,165428,165430,165432,165434,165436,165438,165440,165442,165444,165446,165448,165450],{"class":96,"line":97},[94,165414,165415],{"class":104},"even_nums ",[94,165417,150],{"class":100},[94,165419,165378],{"class":104},[94,165421,3006],{"class":100},[94,165423,9420],{"class":104},[94,165425,26026],{"class":100},[94,165427,32426],{"class":153},[94,165429,105],{"class":104},[94,165431,322],{"class":153},[94,165433,12417],{"class":104},[94,165435,442],{"class":153},[94,165437,13696],{"class":104},[94,165439,1512],{"class":100},[94,165441,9420],{"class":104},[94,165443,433],{"class":100},[94,165445,14737],{"class":153},[94,165447,101536],{"class":100},[94,165449,4074],{"class":153},[94,165451,33229],{"class":104},[94,165453,165454,165456],{"class":96,"line":15},[94,165455,30398],{"class":153},[94,165457,165458],{"class":104},"(even_nums)\n",[40,165460,165461],{},"字典推导式：",[85,165463,165465],{"className":30361,"code":165464,"language":30363,"meta":14,"style":14},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[91,165466,165467,165501],{"__ignoreMap":14},[94,165468,165469,165472,165474,165477,165479,165481,165484,165486,165488,165490,165492,165494,165496,165498],{"class":96,"line":97},[94,165470,165471],{"class":104},"squares ",[94,165473,150],{"class":100},[94,165475,165476],{"class":104}," {i: i ",[94,165478,10643],{"class":100},[94,165480,14737],{"class":153},[94,165482,165483],{"class":100}," for",[94,165485,9420],{"class":104},[94,165487,26026],{"class":100},[94,165489,32426],{"class":153},[94,165491,105],{"class":104},[94,165493,322],{"class":153},[94,165495,12417],{"class":104},[94,165497,449],{"class":153},[94,165499,165500],{"class":104},")}\n",[94,165502,165503,165505],{"class":96,"line":15},[94,165504,30398],{"class":153},[94,165506,165507],{"class":104},"(squares)\n",[40,165509,165510],{},"集合推导式：",[85,165512,165514],{"className":30361,"code":165513,"language":30363,"meta":14,"style":14},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[91,165515,165516,165537],{"__ignoreMap":14},[94,165517,165518,165521,165523,165526,165528,165530,165532,165535],{"class":96,"line":97},[94,165519,165520],{"class":104},"chars ",[94,165522,150],{"class":100},[94,165524,165525],{"class":104}," {ch ",[94,165527,3006],{"class":100},[94,165529,159669],{"class":104},[94,165531,26026],{"class":100},[94,165533,165534],{"class":209}," \"hello\"",[94,165536,1546],{"class":104},[94,165538,165539,165541],{"class":96,"line":15},[94,165540,30398],{"class":153},[94,165542,165543],{"class":104},"(chars)\n",[40,165545,165546],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[35,165548,165550],{"id":165549},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[85,165552,165554],{"className":30361,"code":165553,"language":30363,"meta":14,"style":14},"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",[91,165555,165556,165564,165584,165604,165624,165644,165648,165652,165660,165674,165683,165687,165697,165709,165713,165733,165742,165746,165762,165767,165771,165785,165789,165811,165847],{"__ignoreMap":14},[94,165557,165558,165560,165562],{"class":96,"line":97},[94,165559,159693],{"class":104},[94,165561,150],{"class":100},[94,165563,55424],{"class":104},[94,165565,165566,165568,165570,165572,165574,165576,165578,165580,165582],{"class":96,"line":15},[94,165567,148362],{"class":104},[94,165569,62656],{"class":209},[94,165571,51414],{"class":104},[94,165573,149865],{"class":209},[94,165575,12417],{"class":104},[94,165577,151449],{"class":209},[94,165579,51414],{"class":104},[94,165581,1094],{"class":153},[94,165583,4911],{"class":104},[94,165585,165586,165588,165590,165592,165594,165596,165598,165600,165602],{"class":96,"line":1160},[94,165587,148362],{"class":104},[94,165589,62656],{"class":209},[94,165591,51414],{"class":104},[94,165593,150913],{"class":209},[94,165595,12417],{"class":104},[94,165597,151449],{"class":209},[94,165599,51414],{"class":104},[94,165601,916],{"class":153},[94,165603,4911],{"class":104},[94,165605,165606,165608,165610,165612,165614,165616,165618,165620,165622],{"class":96,"line":1175},[94,165607,148362],{"class":104},[94,165609,62656],{"class":209},[94,165611,51414],{"class":104},[94,165613,159708],{"class":209},[94,165615,12417],{"class":104},[94,165617,151449],{"class":209},[94,165619,51414],{"class":104},[94,165621,511],{"class":153},[94,165623,4911],{"class":104},[94,165625,165626,165628,165630,165632,165634,165636,165638,165640,165642],{"class":96,"line":1181},[94,165627,148362],{"class":104},[94,165629,62656],{"class":209},[94,165631,51414],{"class":104},[94,165633,163287],{"class":209},[94,165635,12417],{"class":104},[94,165637,151449],{"class":209},[94,165639,51414],{"class":104},[94,165641,987],{"class":153},[94,165643,4911],{"class":104},[94,165645,165646],{"class":96,"line":1195},[94,165647,33229],{"class":104},[94,165649,165650],{"class":96,"line":1201},[94,165651,2381],{"emptyLinePlaceholder":20},[94,165653,165654,165656,165658],{"class":96,"line":1292},[94,165655,157237],{"class":104},[94,165657,150],{"class":100},[94,165659,47316],{"class":153},[94,165661,165662,165665,165667,165670,165672],{"class":96,"line":1298},[94,165663,165664],{"class":104},"max_student ",[94,165666,150],{"class":100},[94,165668,165669],{"class":104}," students[",[94,165671,296],{"class":153},[94,165673,33229],{"class":104},[94,165675,165676,165679,165681],{"class":96,"line":1310},[94,165677,165678],{"class":104},"passed ",[94,165680,150],{"class":100},[94,165682,51815],{"class":104},[94,165684,165685],{"class":96,"line":1593},[94,165686,2381],{"emptyLinePlaceholder":20},[94,165688,165689,165691,165693,165695],{"class":96,"line":1598},[94,165690,3006],{"class":100},[94,165692,152114],{"class":104},[94,165694,26026],{"class":100},[94,165696,152119],{"class":104},[94,165698,165699,165701,165703,165705,165707],{"class":96,"line":1604},[94,165700,159284],{"class":104},[94,165702,9459],{"class":100},[94,165704,152126],{"class":104},[94,165706,151449],{"class":209},[94,165708,33229],{"class":104},[94,165710,165711],{"class":96,"line":1609},[94,165712,2381],{"emptyLinePlaceholder":20},[94,165714,165715,165717,165719,165721,165723,165725,165728,165730],{"class":96,"line":1623},[94,165716,3082],{"class":100},[94,165718,152126],{"class":104},[94,165720,151449],{"class":209},[94,165722,4424],{"class":104},[94,165724,1065],{"class":100},[94,165726,165727],{"class":104}," max_student[",[94,165729,151449],{"class":209},[94,165731,165732],{"class":104},"]:\n",[94,165734,165735,165738,165740],{"class":96,"line":1628},[94,165736,165737],{"class":104},"        max_student ",[94,165739,150],{"class":100},[94,165741,152142],{"class":104},[94,165743,165744],{"class":96,"line":1634},[94,165745,2381],{"emptyLinePlaceholder":20},[94,165747,165748,165750,165752,165754,165756,165758,165760],{"class":96,"line":1655},[94,165749,3082],{"class":100},[94,165751,152126],{"class":104},[94,165753,151449],{"class":209},[94,165755,4424],{"class":104},[94,165757,1691],{"class":100},[94,165759,157814],{"class":153},[94,165761,3720],{"class":104},[94,165763,165764],{"class":96,"line":1660},[94,165765,165766],{"class":104},"        passed.append(student)\n",[94,165768,165769],{"class":96,"line":1674},[94,165770,2381],{"emptyLinePlaceholder":20},[94,165772,165773,165775,165777,165779,165781,165783],{"class":96,"line":1679},[94,165774,163751],{"class":104},[94,165776,150],{"class":100},[94,165778,163756],{"class":104},[94,165780,689],{"class":100},[94,165782,7313],{"class":153},[94,165784,164972],{"class":104},[94,165786,165787],{"class":96,"line":1708},[94,165788,2381],{"emptyLinePlaceholder":20},[94,165790,165791,165793,165795,165797,165799,165801,165803,165805,165807,165809],{"class":96,"line":1713},[94,165792,30398],{"class":153},[94,165794,105],{"class":104},[94,165796,157],{"class":100},[94,165798,163774],{"class":209},[94,165800,1001],{"class":153},[94,165802,163779],{"class":104},[94,165804,157136],{"class":100},[94,165806,1051],{"class":153},[94,165808,356],{"class":209},[94,165810,111],{"class":104},[94,165812,165813,165815,165817,165819,165822,165824,165827,165829,165831,165833,165835,165837,165839,165841,165843,165845],{"class":96,"line":1730},[94,165814,30398],{"class":153},[94,165816,105],{"class":104},[94,165818,157],{"class":100},[94,165820,165821],{"class":209},"\"最高分学生:",[94,165823,1001],{"class":153},[94,165825,165826],{"class":104},"max_student[",[94,165828,152859],{"class":209},[94,165830,1045],{"class":104},[94,165832,1051],{"class":153},[94,165834,4429],{"class":153},[94,165836,165826],{"class":104},[94,165838,152897],{"class":209},[94,165840,1045],{"class":104},[94,165842,1051],{"class":153},[94,165844,356],{"class":209},[94,165846,111],{"class":104},[94,165848,165849,165851,165853,165855,165858,165861,165864,165866,165868],{"class":96,"line":1735},[94,165850,30398],{"class":153},[94,165852,105],{"class":104},[94,165854,157],{"class":100},[94,165856,165857],{"class":209},"\"及格人数:",[94,165859,165860],{"class":153},"{len",[94,165862,165863],{"class":104},"(passed)",[94,165865,1051],{"class":153},[94,165867,356],{"class":209},[94,165869,111],{"class":104},[35,165871,165873],{"id":165872},"_616-易错点","6.16 易错点",[48,165875,165876,165879,165882,165885,165891,165900],{},[51,165877,165878],{},"列表可变，元组和字符串不可变。",[51,165880,165881],{},"切片结束位置不包含。",[51,165883,165884],{},"字典通过 key 取值，不是通过索引。",[51,165886,165887,165888,28368],{},"空集合要用 ",[91,165889,165890],{},"set()",[51,165892,104343,165893,165896,165897,28368],{},[91,165894,165895],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[91,165898,165899],{},"get()",[51,165901,165902],{},"嵌套容器要先看清楚每一层是什么类型。",[35,165904,165906],{"id":165905},"_617-本章练习","6.17 本章练习",[48,165908,165909,165912,165915,165918,165921],{},[51,165910,165911],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[51,165913,165914],{},"输入一句话，统计每个字符出现次数。",[51,165916,165917],{},"使用集合去除列表中的重复元素。",[51,165919,165920],{},"使用字典保存一个学生的信息，并实现修改成绩。",[51,165922,165923],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5108,165925,165926],{},"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":14,"searchDepth":15,"depth":15,"links":165928},[165929,165930,165931,165932,165933,165934,165935,165936,165937,165938,165939,165940,165941,165942,165943,165944,165945],{"id":162909,"depth":15,"text":162910},{"id":163026,"depth":15,"text":163027},{"id":163116,"depth":15,"text":163117},{"id":163240,"depth":15,"text":163241},{"id":163603,"depth":15,"text":163604},{"id":163790,"depth":15,"text":163791},{"id":163909,"depth":15,"text":163910},{"id":164051,"depth":15,"text":164052},{"id":164238,"depth":15,"text":164239},{"id":164482,"depth":15,"text":164483},{"id":164692,"depth":15,"text":164693},{"id":164777,"depth":15,"text":164778},{"id":165075,"depth":15,"text":165076},{"id":165357,"depth":15,"text":165358},{"id":165549,"depth":15,"text":165550},{"id":165872,"depth":15,"text":165873},{"id":165905,"depth":15,"text":165906},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162901,"description":17},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165952,"title":165953,"body":165954,"description":17,"extension":18,"meta":168126,"navigation":20,"path":168127,"seo":168128,"stem":168129,"__hash__":168130},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165955,"toc":168101},[165956,165959,165963,165966,166046,166049,166070,166073,166077,166080,166142,166145,166162,166166,166169,166214,166216,166224,166228,166231,166313,166316,166319,166344,166347,166370,166374,166377,166379,166441,166444,166446,166497,166501,166505,166511,166616,166620,166626,166697,166701,166704,166772,166775,166855,166859,166865,166901,166904,166907,167017,167023,167027,167030,167102,167105,167109,167113,167118,167180,167184,167189,167257,167261,167266,167382,167386,167389,167469,167472,167476,167479,167583,167585,167600,167603,167607,167745,167753,167757,167759,167770,167772,168030,168034,168066,168070,168098],[10,165957,165953],{"id":165958},"_7-函数进阶",[35,165960,165962],{"id":165961},"_71-多返回值","7.1 多返回值",[40,165964,165965],{},"Python 函数可以返回多个值，本质上返回的是元组。",[85,165967,165969],{"className":30361,"code":165968,"language":30363,"meta":14,"style":14},"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",[91,165970,165971,165980,165988,165996,166005,166012,166016,166020,166029,166035],{"__ignoreMap":14},[94,165972,165973,165975,165978],{"class":96,"line":97},[94,165974,31930],{"class":100},[94,165976,165977],{"class":1944}," get_info",[94,165979,31936],{"class":104},[94,165981,165982,165984,165986],{"class":96,"line":15},[94,165983,152347],{"class":104},[94,165985,150],{"class":100},[94,165987,149330],{"class":209},[94,165989,165990,165992,165994],{"class":96,"line":1160},[94,165991,152363],{"class":104},[94,165993,150],{"class":100},[94,165995,146528],{"class":153},[94,165997,165998,166000,166002],{"class":96,"line":1175},[94,165999,152378],{"class":104},[94,166001,150],{"class":100},[94,166003,166004],{"class":153}," 95\n",[94,166006,166007,166009],{"class":96,"line":1181},[94,166008,4071],{"class":100},[94,166010,166011],{"class":104}," name, age, score\n",[94,166013,166014],{"class":96,"line":1195},[94,166015,2381],{"emptyLinePlaceholder":20},[94,166017,166018],{"class":96,"line":1201},[94,166019,2381],{"emptyLinePlaceholder":20},[94,166021,166022,166024,166026],{"class":96,"line":1292},[94,166023,161283],{"class":104},[94,166025,150],{"class":100},[94,166027,166028],{"class":104}," get_info()\n",[94,166030,166031,166033],{"class":96,"line":1298},[94,166032,30398],{"class":153},[94,166034,76562],{"class":104},[94,166036,166037,166039,166041,166043],{"class":96,"line":1310},[94,166038,30398],{"class":153},[94,166040,105],{"class":104},[94,166042,103084],{"class":153},[94,166044,166045],{"class":104},"(result))\n",[40,166047,166048],{},"可以直接解包：",[85,166050,166052],{"className":30361,"code":166051,"language":30363,"meta":14,"style":14},"name, age, score = get_info()\nprint(name, age, score)\n",[91,166053,166054,166063],{"__ignoreMap":14},[94,166055,166056,166059,166061],{"class":96,"line":97},[94,166057,166058],{"class":104},"name, age, score ",[94,166060,150],{"class":100},[94,166062,166028],{"class":104},[94,166064,166065,166067],{"class":96,"line":15},[94,166066,30398],{"class":153},[94,166068,166069],{"class":104},"(name, age, score)\n",[40,166071,166072],{},"返回多个值适合函数需要同时给出多个结果时使用。",[35,166074,166076],{"id":166075},"_72-位置参数","7.2 位置参数",[40,166078,166079],{},"位置参数按顺序传递。",[85,166081,166083],{"className":30361,"code":166082,"language":30363,"meta":14,"style":14},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[91,166084,166085,166093,166121,166125,166129],{"__ignoreMap":14},[94,166086,166087,166089,166091],{"class":96,"line":97},[94,166088,31930],{"class":100},[94,166090,149349],{"class":1944},[94,166092,149352],{"class":104},[94,166094,166095,166097,166099,166101,166103,166105,166107,166109,166111,166113,166115,166117,166119],{"class":96,"line":15},[94,166096,31282],{"class":153},[94,166098,105],{"class":104},[94,166100,157],{"class":100},[94,166102,149363],{"class":209},[94,166104,1001],{"class":153},[94,166106,79787],{"class":104},[94,166108,1051],{"class":153},[94,166110,149372],{"class":209},[94,166112,1001],{"class":153},[94,166114,70198],{"class":104},[94,166116,1051],{"class":153},[94,166118,149381],{"class":209},[94,166120,111],{"class":104},[94,166122,166123],{"class":96,"line":1160},[94,166124,2381],{"emptyLinePlaceholder":20},[94,166126,166127],{"class":96,"line":1175},[94,166128,2381],{"emptyLinePlaceholder":20},[94,166130,166131,166134,166136,166138,166140],{"class":96,"line":1181},[94,166132,166133],{"class":104},"introduce(",[94,166135,149865],{"class":209},[94,166137,12417],{"class":104},[94,166139,755],{"class":153},[94,166141,111],{"class":104},[40,166143,166144],{},"顺序错了就会得到错误含义：",[85,166146,166148],{"className":30361,"code":166147,"language":30363,"meta":14,"style":14},"introduce(18, \"小明\")\n",[91,166149,166150],{"__ignoreMap":14},[94,166151,166152,166154,166156,166158,166160],{"class":96,"line":97},[94,166153,166133],{"class":104},[94,166155,755],{"class":153},[94,166157,12417],{"class":104},[94,166159,149865],{"class":209},[94,166161,111],{"class":104},[35,166163,166165],{"id":166164},"_73-关键字参数","7.3 关键字参数",[40,166167,166168],{},"关键字参数按参数名传递。",[85,166170,166172],{"className":30361,"code":166171,"language":30363,"meta":14,"style":14},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[91,166173,166174,166194],{"__ignoreMap":14},[94,166175,166176,166178,166180,166182,166184,166186,166188,166190,166192],{"class":96,"line":97},[94,166177,166133],{"class":104},[94,166179,79787],{"class":5198},[94,166181,150],{"class":100},[94,166183,149865],{"class":209},[94,166185,12417],{"class":104},[94,166187,70198],{"class":5198},[94,166189,150],{"class":100},[94,166191,755],{"class":153},[94,166193,111],{"class":104},[94,166195,166196,166198,166200,166202,166204,166206,166208,166210,166212],{"class":96,"line":15},[94,166197,166133],{"class":104},[94,166199,70198],{"class":5198},[94,166201,150],{"class":100},[94,166203,755],{"class":153},[94,166205,12417],{"class":104},[94,166207,79787],{"class":5198},[94,166209,150],{"class":100},[94,166211,149865],{"class":209},[94,166213,111],{"class":104},[40,166215,117911],{},[48,166217,166218,166221],{},[51,166219,166220],{},"顺序不容易错。",[51,166222,166223],{},"调用时可读性更强。",[35,166225,166227],{"id":166226},"_74-默认参数","7.4 默认参数",[40,166229,166230],{},"默认参数给参数设置默认值。",[85,166232,166234],{"className":30361,"code":166233,"language":30363,"meta":14,"style":14},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[91,166235,166236,166252,166282,166286,166290,166300],{"__ignoreMap":14},[94,166237,166238,166240,166242,166245,166247,166250],{"class":96,"line":97},[94,166239,31930],{"class":100},[94,166241,122070],{"class":1944},[94,166243,166244],{"class":104},"(host, port",[94,166246,150],{"class":100},[94,166248,166249],{"class":153},"3306",[94,166251,30769],{"class":104},[94,166253,166254,166256,166258,166260,166263,166265,166267,166269,166271,166273,166276,166278,166280],{"class":96,"line":15},[94,166255,31282],{"class":153},[94,166257,105],{"class":104},[94,166259,157],{"class":100},[94,166261,166262],{"class":209},"\"连接",[94,166264,1001],{"class":153},[94,166266,27378],{"class":104},[94,166268,1051],{"class":153},[94,166270,964],{"class":209},[94,166272,1001],{"class":153},[94,166274,166275],{"class":104},"port",[94,166277,1051],{"class":153},[94,166279,356],{"class":209},[94,166281,111],{"class":104},[94,166283,166284],{"class":96,"line":1160},[94,166285,2381],{"emptyLinePlaceholder":20},[94,166287,166288],{"class":96,"line":1175},[94,166289,2381],{"emptyLinePlaceholder":20},[94,166291,166292,166295,166298],{"class":96,"line":1181},[94,166293,166294],{"class":104},"connect(",[94,166296,166297],{"class":209},"\"localhost\"",[94,166299,111],{"class":104},[94,166301,166302,166304,166306,166308,166311],{"class":96,"line":1195},[94,166303,166294],{"class":104},[94,166305,166297],{"class":209},[94,166307,12417],{"class":104},[94,166309,166310],{"class":153},"6379",[94,166312,111],{"class":104},[40,166314,166315],{},"注意：默认参数必须放在非默认参数后面。",[40,166317,166318],{},"错误：",[85,166320,166322],{"className":30361,"code":166321,"language":30363,"meta":14,"style":14},"def connect(port=3306, host):\n    pass\n",[91,166323,166324,166340],{"__ignoreMap":14},[94,166325,166326,166328,166330,166333,166335,166337],{"class":96,"line":97},[94,166327,31930],{"class":100},[94,166329,122070],{"class":1944},[94,166331,166332],{"class":104},"(port",[94,166334,150],{"class":100},[94,166336,166249],{"class":153},[94,166338,166339],{"class":104},", host):\n",[94,166341,166342],{"class":96,"line":15},[94,166343,149514],{"class":100},[40,166345,166346],{},"正确：",[85,166348,166350],{"className":30361,"code":166349,"language":30363,"meta":14,"style":14},"def connect(host, port=3306):\n    pass\n",[91,166351,166352,166366],{"__ignoreMap":14},[94,166353,166354,166356,166358,166360,166362,166364],{"class":96,"line":97},[94,166355,31930],{"class":100},[94,166357,122070],{"class":1944},[94,166359,166244],{"class":104},[94,166361,150],{"class":100},[94,166363,166249],{"class":153},[94,166365,30769],{"class":104},[94,166367,166368],{"class":96,"line":15},[94,166369,149514],{"class":100},[35,166371,166373],{"id":166372},"_75-默认参数的坑","7.5 默认参数的坑",[40,166375,166376],{},"不要使用可变对象作为默认参数。",[40,166378,157600],{},[85,166380,166382],{"className":30361,"code":166381,"language":30363,"meta":14,"style":14},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[91,166383,166384,166399,166404,166411,166415,166419,166430],{"__ignoreMap":14},[94,166385,166386,166388,166391,166394,166396],{"class":96,"line":97},[94,166387,31930],{"class":100},[94,166389,166390],{"class":1944}," add_item",[94,166392,166393],{"class":104},"(item, items",[94,166395,150],{"class":100},[94,166397,166398],{"class":104},"[]):\n",[94,166400,166401],{"class":96,"line":15},[94,166402,166403],{"class":104},"    items.append(item)\n",[94,166405,166406,166408],{"class":96,"line":1160},[94,166407,4071],{"class":100},[94,166409,166410],{"class":104}," items\n",[94,166412,166413],{"class":96,"line":1175},[94,166414,2381],{"emptyLinePlaceholder":20},[94,166416,166417],{"class":96,"line":1181},[94,166418,2381],{"emptyLinePlaceholder":20},[94,166420,166421,166423,166426,166428],{"class":96,"line":1195},[94,166422,30398],{"class":153},[94,166424,166425],{"class":104},"(add_item(",[94,166427,165302],{"class":209},[94,166429,30480],{"class":104},[94,166431,166432,166434,166436,166439],{"class":96,"line":1201},[94,166433,30398],{"class":153},[94,166435,166425],{"class":104},[94,166437,166438],{"class":209},"\"b\"",[94,166440,30480],{"class":104},[40,166442,166443],{},"第二次调用会复用第一次的列表。",[40,166445,155865],{},[85,166447,166449],{"className":30361,"code":166448,"language":30363,"meta":14,"style":14},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[91,166450,166451,166465,166478,166487,166491],{"__ignoreMap":14},[94,166452,166453,166455,166457,166459,166461,166463],{"class":96,"line":97},[94,166454,31930],{"class":100},[94,166456,166390],{"class":1944},[94,166458,166393],{"class":104},[94,166460,150],{"class":100},[94,166462,95663],{"class":153},[94,166464,30769],{"class":104},[94,166466,166467,166469,166472,166474,166476],{"class":96,"line":15},[94,166468,3082],{"class":100},[94,166470,166471],{"class":104}," items ",[94,166473,38910],{"class":100},[94,166475,38916],{"class":153},[94,166477,3720],{"class":104},[94,166479,166480,166483,166485],{"class":96,"line":1160},[94,166481,166482],{"class":104},"        items ",[94,166484,150],{"class":100},[94,166486,51815],{"class":104},[94,166488,166489],{"class":96,"line":1175},[94,166490,166403],{"class":104},[94,166492,166493,166495],{"class":96,"line":1181},[94,166494,4071],{"class":100},[94,166496,166410],{"class":104},[35,166498,166500],{"id":166499},"_76-不定长参数","7.6 不定长参数",[65,166502,166504],{"id":166503},"_761-args","7.6.1 *args",[40,166506,166507,166510],{},[91,166508,166509],{},"*args"," 接收任意数量的位置参数，得到元组。",[85,166512,166514],{"className":30361,"code":166513,"language":30363,"meta":14,"style":14},"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",[91,166515,166516,166529,166537,166548,166557,166563,166567,166571,166590],{"__ignoreMap":14},[94,166517,166518,166520,166522,166524,166526],{"class":96,"line":97},[94,166519,31930],{"class":100},[94,166521,5191],{"class":1944},[94,166523,105],{"class":104},[94,166525,560],{"class":100},[94,166527,166528],{"class":104},"args):\n",[94,166530,166531,166533,166535],{"class":96,"line":15},[94,166532,159284],{"class":104},[94,166534,150],{"class":100},[94,166536,47316],{"class":153},[94,166538,166539,166541,166543,166545],{"class":96,"line":1160},[94,166540,3182],{"class":100},[94,166542,156157],{"class":104},[94,166544,26026],{"class":100},[94,166546,166547],{"class":104}," args:\n",[94,166549,166550,166552,166554],{"class":96,"line":1175},[94,166551,159959],{"class":104},[94,166553,9459],{"class":100},[94,166555,166556],{"class":104}," num\n",[94,166558,166559,166561],{"class":96,"line":1181},[94,166560,4071],{"class":100},[94,166562,162264],{"class":104},[94,166564,166565],{"class":96,"line":1195},[94,166566,2381],{"emptyLinePlaceholder":20},[94,166568,166569],{"class":96,"line":1201},[94,166570,2381],{"emptyLinePlaceholder":20},[94,166572,166573,166575,166578,166580,166582,166584,166586,166588],{"class":96,"line":1292},[94,166574,30398],{"class":153},[94,166576,166577],{"class":104},"(add(",[94,166579,322],{"class":153},[94,166581,12417],{"class":104},[94,166583,182],{"class":153},[94,166585,12417],{"class":104},[94,166587,176],{"class":153},[94,166589,30480],{"class":104},[94,166591,166592,166594,166596,166598,166600,166602,166604,166606,166608,166610,166612,166614],{"class":96,"line":1298},[94,166593,30398],{"class":153},[94,166595,166577],{"class":104},[94,166597,322],{"class":153},[94,166599,12417],{"class":104},[94,166601,182],{"class":153},[94,166603,12417],{"class":104},[94,166605,176],{"class":153},[94,166607,12417],{"class":104},[94,166609,398],{"class":153},[94,166611,12417],{"class":104},[94,166613,424],{"class":153},[94,166615,30480],{"class":104},[65,166617,166619],{"id":166618},"_762-kwargs","7.6.2 **kwargs",[40,166621,166622,166625],{},[91,166623,166624],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[85,166627,166629],{"className":30361,"code":166628,"language":30363,"meta":14,"style":14},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[91,166630,166631,166644,166655,166661,166665,166669],{"__ignoreMap":14},[94,166632,166633,166635,166637,166639,166641],{"class":96,"line":97},[94,166634,31930],{"class":100},[94,166636,161922],{"class":1944},[94,166638,105],{"class":104},[94,166640,10643],{"class":100},[94,166642,166643],{"class":104},"kwargs):\n",[94,166645,166646,166648,166650,166652],{"class":96,"line":15},[94,166647,3182],{"class":100},[94,166649,164762],{"class":104},[94,166651,26026],{"class":100},[94,166653,166654],{"class":104}," kwargs.items():\n",[94,166656,166657,166659],{"class":96,"line":1160},[94,166658,32434],{"class":153},[94,166660,164774],{"class":104},[94,166662,166663],{"class":96,"line":1175},[94,166664,2381],{"emptyLinePlaceholder":20},[94,166666,166667],{"class":96,"line":1181},[94,166668,2381],{"emptyLinePlaceholder":20},[94,166670,166671,166673,166675,166677,166679,166681,166683,166685,166687,166689,166691,166693,166695],{"class":96,"line":1195},[94,166672,161987],{"class":104},[94,166674,79787],{"class":5198},[94,166676,150],{"class":100},[94,166678,149865],{"class":209},[94,166680,12417],{"class":104},[94,166682,70198],{"class":5198},[94,166684,150],{"class":100},[94,166686,755],{"class":153},[94,166688,12417],{"class":104},[94,166690,70249],{"class":5198},[94,166692,150],{"class":100},[94,166694,69246],{"class":209},[94,166696,111],{"class":104},[35,166698,166700],{"id":166699},"_77-参数解包","7.7 参数解包",[40,166702,166703],{},"列表或元组解包为位置参数：",[85,166705,166707],{"className":30361,"code":166706,"language":30363,"meta":14,"style":14},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[91,166708,166709,166718,166733,166737,166741,166761],{"__ignoreMap":14},[94,166710,166711,166713,166715],{"class":96,"line":97},[94,166712,31930],{"class":100},[94,166714,5191],{"class":1944},[94,166716,166717],{"class":104},"(a, b, c):\n",[94,166719,166720,166722,166724,166726,166728,166730],{"class":96,"line":15},[94,166721,4071],{"class":100},[94,166723,10851],{"class":104},[94,166725,586],{"class":100},[94,166727,10864],{"class":104},[94,166729,586],{"class":100},[94,166731,166732],{"class":104}," c\n",[94,166734,166735],{"class":96,"line":1160},[94,166736,2381],{"emptyLinePlaceholder":20},[94,166738,166739],{"class":96,"line":1175},[94,166740,2381],{"emptyLinePlaceholder":20},[94,166742,166743,166745,166747,166749,166751,166753,166755,166757,166759],{"class":96,"line":1181},[94,166744,164077],{"class":104},[94,166746,150],{"class":100},[94,166748,52203],{"class":104},[94,166750,322],{"class":153},[94,166752,12417],{"class":104},[94,166754,182],{"class":153},[94,166756,12417],{"class":104},[94,166758,176],{"class":153},[94,166760,33229],{"class":104},[94,166762,166763,166765,166767,166769],{"class":96,"line":1195},[94,166764,30398],{"class":153},[94,166766,166577],{"class":104},[94,166768,560],{"class":100},[94,166770,166771],{"class":104},"nums))\n",[40,166773,166774],{},"字典解包为关键字参数：",[85,166776,166778],{"className":30361,"code":166777,"language":30363,"meta":14,"style":14},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[91,166779,166780,166788,166814,166818,166822,166846],{"__ignoreMap":14},[94,166781,166782,166784,166786],{"class":96,"line":97},[94,166783,31930],{"class":100},[94,166785,149349],{"class":1944},[94,166787,149352],{"class":104},[94,166789,166790,166792,166794,166796,166798,166800,166802,166804,166806,166808,166810,166812],{"class":96,"line":15},[94,166791,31282],{"class":153},[94,166793,105],{"class":104},[94,166795,157],{"class":100},[94,166797,356],{"class":209},[94,166799,1001],{"class":153},[94,166801,79787],{"class":104},[94,166803,1051],{"class":153},[94,166805,4429],{"class":153},[94,166807,70198],{"class":104},[94,166809,1051],{"class":153},[94,166811,356],{"class":209},[94,166813,111],{"class":104},[94,166815,166816],{"class":96,"line":1160},[94,166817,2381],{"emptyLinePlaceholder":20},[94,166819,166820],{"class":96,"line":1175},[94,166821,2381],{"emptyLinePlaceholder":20},[94,166823,166824,166826,166828,166830,166832,166834,166836,166838,166840,166842,166844],{"class":96,"line":1181},[94,166825,116291],{"class":104},[94,166827,150],{"class":100},[94,166829,4429],{"class":104},[94,166831,62656],{"class":209},[94,166833,51414],{"class":104},[94,166835,149865],{"class":209},[94,166837,12417],{"class":104},[94,166839,69101],{"class":209},[94,166841,51414],{"class":104},[94,166843,755],{"class":153},[94,166845,1546],{"class":104},[94,166847,166848,166850,166852],{"class":96,"line":1195},[94,166849,166133],{"class":104},[94,166851,10643],{"class":100},[94,166853,166854],{"class":104},"info)\n",[35,166856,166858],{"id":166857},"_78-匿名函数lambda","7.8 匿名函数lambda",[40,166860,166861,166864],{},[91,166862,166863],{},"lambda"," 用于定义简单匿名函数。",[85,166866,166868],{"className":30361,"code":166867,"language":30363,"meta":14,"style":14},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[91,166869,166870,166887],{"__ignoreMap":14},[94,166871,166872,166875,166877,166880,166883,166885],{"class":96,"line":97},[94,166873,166874],{"class":104},"add ",[94,166876,150],{"class":100},[94,166878,166879],{"class":100}," lambda",[94,166881,166882],{"class":104}," a, b: a ",[94,166884,586],{"class":100},[94,166886,151081],{"class":104},[94,166888,166889,166891,166893,166895,166897,166899],{"class":96,"line":15},[94,166890,30398],{"class":153},[94,166892,166577],{"class":104},[94,166894,322],{"class":153},[94,166896,12417],{"class":104},[94,166898,182],{"class":153},[94,166900,30480],{"class":104},[40,166902,166903],{},"常和排序、过滤等函数一起使用。",[40,166905,166906],{},"按分数排序：",[85,166908,166910],{"className":30361,"code":166909,"language":30363,"meta":14,"style":14},"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",[91,166911,166912,166920,166940,166960,166980,166984,166988,167011],{"__ignoreMap":14},[94,166913,166914,166916,166918],{"class":96,"line":97},[94,166915,159693],{"class":104},[94,166917,150],{"class":100},[94,166919,55424],{"class":104},[94,166921,166922,166924,166926,166928,166930,166932,166934,166936,166938],{"class":96,"line":15},[94,166923,148362],{"class":104},[94,166925,62656],{"class":209},[94,166927,51414],{"class":104},[94,166929,149865],{"class":209},[94,166931,12417],{"class":104},[94,166933,151449],{"class":209},[94,166935,51414],{"class":104},[94,166937,1094],{"class":153},[94,166939,4911],{"class":104},[94,166941,166942,166944,166946,166948,166950,166952,166954,166956,166958],{"class":96,"line":1160},[94,166943,148362],{"class":104},[94,166945,62656],{"class":209},[94,166947,51414],{"class":104},[94,166949,150913],{"class":209},[94,166951,12417],{"class":104},[94,166953,151449],{"class":209},[94,166955,51414],{"class":104},[94,166957,916],{"class":153},[94,166959,4911],{"class":104},[94,166961,166962,166964,166966,166968,166970,166972,166974,166976,166978],{"class":96,"line":1175},[94,166963,148362],{"class":104},[94,166965,62656],{"class":209},[94,166967,51414],{"class":104},[94,166969,159708],{"class":209},[94,166971,12417],{"class":104},[94,166973,151449],{"class":209},[94,166975,51414],{"class":104},[94,166977,511],{"class":153},[94,166979,4911],{"class":104},[94,166981,166982],{"class":96,"line":1181},[94,166983,33229],{"class":104},[94,166985,166986],{"class":96,"line":1195},[94,166987,2381],{"emptyLinePlaceholder":20},[94,166989,166990,166993,166995,166997,166999,167001,167003,167005,167007,167009],{"class":96,"line":1201},[94,166991,166992],{"class":104},"students.sort(",[94,166994,153923],{"class":5198},[94,166996,153926],{"class":100},[94,166998,153929],{"class":104},[94,167000,151449],{"class":209},[94,167002,112179],{"class":104},[94,167004,163505],{"class":5198},[94,167006,150],{"class":100},[94,167008,31459],{"class":153},[94,167010,111],{"class":104},[94,167012,167013,167015],{"class":96,"line":1292},[94,167014,30398],{"class":153},[94,167016,164972],{"class":104},[40,167018,167019,167020,167022],{},"如果逻辑复杂，不要硬写 ",[91,167021,166863],{},"，定义普通函数更清晰。",[35,167024,167026],{"id":167025},"_79-函数作为参数","7.9 函数作为参数",[40,167028,167029],{},"函数可以作为参数传给另一个函数。",[85,167031,167033],{"className":30361,"code":167032,"language":30363,"meta":14,"style":14},"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",[91,167034,167035,167043,167053,167057,167061,167071,167078,167082,167086],{"__ignoreMap":14},[94,167036,167037,167039,167041],{"class":96,"line":97},[94,167038,31930],{"class":100},[94,167040,5191],{"class":1944},[94,167042,151070],{"class":104},[94,167044,167045,167047,167049,167051],{"class":96,"line":15},[94,167046,4071],{"class":100},[94,167048,10851],{"class":104},[94,167050,586],{"class":100},[94,167052,151081],{"class":104},[94,167054,167055],{"class":96,"line":1160},[94,167056,2381],{"emptyLinePlaceholder":20},[94,167058,167059],{"class":96,"line":1175},[94,167060,2381],{"emptyLinePlaceholder":20},[94,167062,167063,167065,167068],{"class":96,"line":1181},[94,167064,31930],{"class":100},[94,167066,167067],{"class":1944}," calculate",[94,167069,167070],{"class":104},"(a, b, func):\n",[94,167072,167073,167075],{"class":96,"line":1195},[94,167074,4071],{"class":100},[94,167076,167077],{"class":104}," func(a, b)\n",[94,167079,167080],{"class":96,"line":1201},[94,167081,2381],{"emptyLinePlaceholder":20},[94,167083,167084],{"class":96,"line":1292},[94,167085,2381],{"emptyLinePlaceholder":20},[94,167087,167088,167090,167093,167095,167097,167099],{"class":96,"line":1298},[94,167089,30398],{"class":153},[94,167091,167092],{"class":104},"(calculate(",[94,167094,551],{"class":153},[94,167096,12417],{"class":104},[94,167098,805],{"class":153},[94,167100,167101],{"class":104},", add))\n",[40,167103,167104],{},"这种思想在排序、回调、框架中经常出现。",[35,167106,167108],{"id":167107},"_710-mapfiltersorted","7.10 map、filter、sorted",[65,167110,167112],{"id":167111},"_7101-map","7.10.1 map",[40,167114,167115,167117],{},[91,167116,74021],{}," 对每个元素执行函数。",[85,167119,167121],{"className":30361,"code":167120,"language":30363,"meta":14,"style":14},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[91,167122,167123,167147,167170],{"__ignoreMap":14},[94,167124,167125,167127,167129,167131,167133,167135,167137,167139,167141,167143,167145],{"class":96,"line":97},[94,167126,164077],{"class":104},[94,167128,150],{"class":100},[94,167130,52203],{"class":104},[94,167132,322],{"class":153},[94,167134,12417],{"class":104},[94,167136,182],{"class":153},[94,167138,12417],{"class":104},[94,167140,176],{"class":153},[94,167142,12417],{"class":104},[94,167144,398],{"class":153},[94,167146,33229],{"class":104},[94,167148,167149,167151,167153,167156,167158,167160,167163,167165,167167],{"class":96,"line":15},[94,167150,161283],{"class":104},[94,167152,150],{"class":100},[94,167154,167155],{"class":153}," map",[94,167157,105],{"class":104},[94,167159,166863],{"class":100},[94,167161,167162],{"class":104}," x: x ",[94,167164,560],{"class":100},[94,167166,14737],{"class":153},[94,167168,167169],{"class":104},", nums)\n",[94,167171,167172,167174,167176,167178],{"class":96,"line":1160},[94,167173,30398],{"class":153},[94,167175,105],{"class":104},[94,167177,154047],{"class":153},[94,167179,166045],{"class":104},[65,167181,167183],{"id":167182},"_7102-filter","7.10.2 filter",[40,167185,167186,167188],{},[91,167187,80028],{}," 保留满足条件的元素。",[85,167190,167192],{"className":30361,"code":167191,"language":30363,"meta":14,"style":14},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[91,167193,167194,167222,167247],{"__ignoreMap":14},[94,167195,167196,167198,167200,167202,167204,167206,167208,167210,167212,167214,167216,167218,167220],{"class":96,"line":97},[94,167197,164077],{"class":104},[94,167199,150],{"class":100},[94,167201,52203],{"class":104},[94,167203,322],{"class":153},[94,167205,12417],{"class":104},[94,167207,182],{"class":153},[94,167209,12417],{"class":104},[94,167211,176],{"class":153},[94,167213,12417],{"class":104},[94,167215,398],{"class":153},[94,167217,12417],{"class":104},[94,167219,424],{"class":153},[94,167221,33229],{"class":104},[94,167223,167224,167226,167228,167231,167233,167235,167237,167239,167241,167243,167245],{"class":96,"line":15},[94,167225,161283],{"class":104},[94,167227,150],{"class":100},[94,167229,167230],{"class":153}," filter",[94,167232,105],{"class":104},[94,167234,166863],{"class":100},[94,167236,167162],{"class":104},[94,167238,433],{"class":100},[94,167240,14737],{"class":153},[94,167242,101536],{"class":100},[94,167244,4074],{"class":153},[94,167246,167169],{"class":104},[94,167248,167249,167251,167253,167255],{"class":96,"line":1160},[94,167250,30398],{"class":153},[94,167252,105],{"class":104},[94,167254,154047],{"class":153},[94,167256,166045],{"class":104},[65,167258,167260],{"id":167259},"_7103-sorted","7.10.3 sorted",[40,167262,167263,167265],{},[91,167264,165213],{}," 返回排序后的新列表。",[85,167267,167269],{"className":30361,"code":167268,"language":30363,"meta":14,"style":14},"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",[91,167270,167271,167279,167299,167319,167339,167343,167347,167376],{"__ignoreMap":14},[94,167272,167273,167275,167277],{"class":96,"line":97},[94,167274,159693],{"class":104},[94,167276,150],{"class":100},[94,167278,55424],{"class":104},[94,167280,167281,167283,167285,167287,167289,167291,167293,167295,167297],{"class":96,"line":15},[94,167282,148362],{"class":104},[94,167284,62656],{"class":209},[94,167286,51414],{"class":104},[94,167288,149865],{"class":209},[94,167290,12417],{"class":104},[94,167292,151449],{"class":209},[94,167294,51414],{"class":104},[94,167296,1094],{"class":153},[94,167298,4911],{"class":104},[94,167300,167301,167303,167305,167307,167309,167311,167313,167315,167317],{"class":96,"line":1160},[94,167302,148362],{"class":104},[94,167304,62656],{"class":209},[94,167306,51414],{"class":104},[94,167308,150913],{"class":209},[94,167310,12417],{"class":104},[94,167312,151449],{"class":209},[94,167314,51414],{"class":104},[94,167316,916],{"class":153},[94,167318,4911],{"class":104},[94,167320,167321,167323,167325,167327,167329,167331,167333,167335,167337],{"class":96,"line":1175},[94,167322,148362],{"class":104},[94,167324,62656],{"class":209},[94,167326,51414],{"class":104},[94,167328,159708],{"class":209},[94,167330,12417],{"class":104},[94,167332,151449],{"class":209},[94,167334,51414],{"class":104},[94,167336,511],{"class":153},[94,167338,4911],{"class":104},[94,167340,167341],{"class":96,"line":1181},[94,167342,33229],{"class":104},[94,167344,167345],{"class":96,"line":1195},[94,167346,2381],{"emptyLinePlaceholder":20},[94,167348,167349,167351,167353,167355,167358,167360,167362,167364,167366,167368,167370,167372,167374],{"class":96,"line":1201},[94,167350,161283],{"class":104},[94,167352,150],{"class":100},[94,167354,163581],{"class":153},[94,167356,167357],{"class":104},"(students, ",[94,167359,153923],{"class":5198},[94,167361,153926],{"class":100},[94,167363,153929],{"class":104},[94,167365,151449],{"class":209},[94,167367,112179],{"class":104},[94,167369,163505],{"class":5198},[94,167371,150],{"class":100},[94,167373,31459],{"class":153},[94,167375,111],{"class":104},[94,167377,167378,167380],{"class":96,"line":1292},[94,167379,30398],{"class":153},[94,167381,76562],{"class":104},[35,167383,167385],{"id":167384},"_711-闭包入门","7.11 闭包入门",[40,167387,167388],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[85,167390,167392],{"className":30361,"code":167391,"language":30363,"meta":14,"style":14},"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",[91,167393,167394,167404,167414,167425,167429,167436,167440,167444,167458],{"__ignoreMap":14},[94,167395,167396,167398,167401],{"class":96,"line":97},[94,167397,31930],{"class":100},[94,167399,167400],{"class":1944}," outer",[94,167402,167403],{"class":104},"(base):\n",[94,167405,167406,167408,167411],{"class":96,"line":15},[94,167407,30784],{"class":100},[94,167409,167410],{"class":1944}," inner",[94,167412,167413],{"class":104},"(num):\n",[94,167415,167416,167418,167421,167423],{"class":96,"line":1160},[94,167417,14734],{"class":100},[94,167419,167420],{"class":104}," base ",[94,167422,586],{"class":100},[94,167424,166556],{"class":104},[94,167426,167427],{"class":96,"line":1175},[94,167428,2381],{"emptyLinePlaceholder":20},[94,167430,167431,167433],{"class":96,"line":1181},[94,167432,4071],{"class":100},[94,167434,167435],{"class":104}," inner\n",[94,167437,167438],{"class":96,"line":1195},[94,167439,2381],{"emptyLinePlaceholder":20},[94,167441,167442],{"class":96,"line":1201},[94,167443,2381],{"emptyLinePlaceholder":20},[94,167445,167446,167449,167451,167454,167456],{"class":96,"line":1292},[94,167447,167448],{"class":104},"add_10 ",[94,167450,150],{"class":100},[94,167452,167453],{"class":104}," outer(",[94,167455,551],{"class":153},[94,167457,111],{"class":104},[94,167459,167460,167462,167465,167467],{"class":96,"line":1298},[94,167461,30398],{"class":153},[94,167463,167464],{"class":104},"(add_10(",[94,167466,424],{"class":153},[94,167468,30480],{"class":104},[40,167470,167471],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[35,167473,167475],{"id":167474},"_712-装饰器入门","7.12 装饰器入门",[40,167477,167478],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[85,167480,167482],{"className":30361,"code":167481,"language":30363,"meta":14,"style":14},"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",[91,167483,167484,167493,167502,167513,167518,167529,167533,167540,167544,167548,167553,167561,167571,167575,167579],{"__ignoreMap":14},[94,167485,167486,167488,167490],{"class":96,"line":97},[94,167487,31930],{"class":100},[94,167489,87168],{"class":1944},[94,167491,167492],{"class":104},"(func):\n",[94,167494,167495,167497,167500],{"class":96,"line":15},[94,167496,30784],{"class":100},[94,167498,167499],{"class":1944}," wrapper",[94,167501,31936],{"class":104},[94,167503,167504,167506,167508,167511],{"class":96,"line":1160},[94,167505,32434],{"class":153},[94,167507,105],{"class":104},[94,167509,167510],{"class":209},"\"函数开始执行\"",[94,167512,111],{"class":104},[94,167514,167515],{"class":96,"line":1175},[94,167516,167517],{"class":104},"        func()\n",[94,167519,167520,167522,167524,167527],{"class":96,"line":1181},[94,167521,32434],{"class":153},[94,167523,105],{"class":104},[94,167525,167526],{"class":209},"\"函数执行结束\"",[94,167528,111],{"class":104},[94,167530,167531],{"class":96,"line":1195},[94,167532,2381],{"emptyLinePlaceholder":20},[94,167534,167535,167537],{"class":96,"line":1201},[94,167536,4071],{"class":100},[94,167538,167539],{"class":104}," wrapper\n",[94,167541,167542],{"class":96,"line":1292},[94,167543,2381],{"emptyLinePlaceholder":20},[94,167545,167546],{"class":96,"line":1298},[94,167547,2381],{"emptyLinePlaceholder":20},[94,167549,167550],{"class":96,"line":1310},[94,167551,167552],{"class":1944},"@log\n",[94,167554,167555,167557,167559],{"class":96,"line":1593},[94,167556,31930],{"class":100},[94,167558,160973],{"class":1944},[94,167560,31936],{"class":104},[94,167562,167563,167565,167567,167569],{"class":96,"line":1598},[94,167564,31282],{"class":153},[94,167566,105],{"class":104},[94,167568,5826],{"class":209},[94,167570,111],{"class":104},[94,167572,167573],{"class":96,"line":1604},[94,167574,2381],{"emptyLinePlaceholder":20},[94,167576,167577],{"class":96,"line":1609},[94,167578,2381],{"emptyLinePlaceholder":20},[94,167580,167581],{"class":96,"line":1623},[94,167582,161008],{"class":104},[40,167584,158251],{},[85,167586,167588],{"className":30361,"code":167587,"language":30363,"meta":14,"style":14},"say_hello = log(say_hello)\n",[91,167589,167590],{"__ignoreMap":14},[94,167591,167592,167595,167597],{"class":96,"line":97},[94,167593,167594],{"class":104},"say_hello ",[94,167596,150],{"class":100},[94,167598,167599],{"class":104}," log(say_hello)\n",[40,167601,167602],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[35,167604,167606],{"id":167605},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[85,167608,167610],{"className":30361,"code":167609,"language":30363,"meta":14,"style":14},"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",[91,167611,167612,167620,167637,167647,167666,167676,167683,167687,167693,167697,167701,167705,167713,167723,167727,167731],{"__ignoreMap":14},[94,167613,167614,167616,167618],{"class":96,"line":97},[94,167615,31930],{"class":100},[94,167617,87168],{"class":1944},[94,167619,167492],{"class":104},[94,167621,167622,167624,167626,167628,167630,167633,167635],{"class":96,"line":15},[94,167623,30784],{"class":100},[94,167625,167499],{"class":1944},[94,167627,105],{"class":104},[94,167629,560],{"class":100},[94,167631,167632],{"class":104},"args, ",[94,167634,10643],{"class":100},[94,167636,166643],{"class":104},[94,167638,167639,167641,167643,167645],{"class":96,"line":1160},[94,167640,32434],{"class":153},[94,167642,105],{"class":104},[94,167644,167510],{"class":209},[94,167646,111],{"class":104},[94,167648,167649,167652,167654,167657,167659,167661,167663],{"class":96,"line":1175},[94,167650,167651],{"class":104},"        result ",[94,167653,150],{"class":100},[94,167655,167656],{"class":104}," func(",[94,167658,560],{"class":100},[94,167660,167632],{"class":104},[94,167662,10643],{"class":100},[94,167664,167665],{"class":104},"kwargs)\n",[94,167667,167668,167670,167672,167674],{"class":96,"line":1181},[94,167669,32434],{"class":153},[94,167671,105],{"class":104},[94,167673,167526],{"class":209},[94,167675,111],{"class":104},[94,167677,167678,167680],{"class":96,"line":1195},[94,167679,14734],{"class":100},[94,167681,167682],{"class":104}," result\n",[94,167684,167685],{"class":96,"line":1201},[94,167686,2381],{"emptyLinePlaceholder":20},[94,167688,167689,167691],{"class":96,"line":1292},[94,167690,4071],{"class":100},[94,167692,167539],{"class":104},[94,167694,167695],{"class":96,"line":1298},[94,167696,2381],{"emptyLinePlaceholder":20},[94,167698,167699],{"class":96,"line":1310},[94,167700,2381],{"emptyLinePlaceholder":20},[94,167702,167703],{"class":96,"line":1593},[94,167704,167552],{"class":1944},[94,167706,167707,167709,167711],{"class":96,"line":1598},[94,167708,31930],{"class":100},[94,167710,5191],{"class":1944},[94,167712,151070],{"class":104},[94,167714,167715,167717,167719,167721],{"class":96,"line":1604},[94,167716,4071],{"class":100},[94,167718,10851],{"class":104},[94,167720,586],{"class":100},[94,167722,151081],{"class":104},[94,167724,167725],{"class":96,"line":1609},[94,167726,2381],{"emptyLinePlaceholder":20},[94,167728,167729],{"class":96,"line":1623},[94,167730,2381],{"emptyLinePlaceholder":20},[94,167732,167733,167735,167737,167739,167741,167743],{"class":96,"line":1628},[94,167734,30398],{"class":153},[94,167736,166577],{"class":104},[94,167738,551],{"class":153},[94,167740,12417],{"class":104},[94,167742,805],{"class":153},[94,167744,30480],{"class":104},[40,167746,167747,167748,100995,167750,167752],{},"这个写法使用 ",[91,167749,166509],{},[91,167751,166624],{}," 接收原函数的所有参数。",[35,167754,167756],{"id":167755},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[40,167758,123269],{},[48,167760,167761,167764,167767],{},[51,167762,167763],{},"给定一组学生数据。",[51,167765,167766],{},"封装函数，根据传入规则筛选学生。",[51,167768,167769],{},"筛选及格、优秀、未成年学生。",[40,167771,10017],{},[85,167773,167775],{"className":30361,"code":167774,"language":30363,"meta":14,"style":14},"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",[91,167776,167777,167785,167813,167841,167869,167873,167877,167881,167891,167899,167909,167916,167921,167927,167931,167935,167959,167982,168005,168009,168016,168023],{"__ignoreMap":14},[94,167778,167779,167781,167783],{"class":96,"line":97},[94,167780,159693],{"class":104},[94,167782,150],{"class":100},[94,167784,55424],{"class":104},[94,167786,167787,167789,167791,167793,167795,167797,167799,167801,167803,167805,167807,167809,167811],{"class":96,"line":15},[94,167788,148362],{"class":104},[94,167790,62656],{"class":209},[94,167792,51414],{"class":104},[94,167794,149865],{"class":209},[94,167796,12417],{"class":104},[94,167798,69101],{"class":209},[94,167800,51414],{"class":104},[94,167802,755],{"class":153},[94,167804,12417],{"class":104},[94,167806,151449],{"class":209},[94,167808,51414],{"class":104},[94,167810,1094],{"class":153},[94,167812,4911],{"class":104},[94,167814,167815,167817,167819,167821,167823,167825,167827,167829,167831,167833,167835,167837,167839],{"class":96,"line":1160},[94,167816,148362],{"class":104},[94,167818,62656],{"class":209},[94,167820,51414],{"class":104},[94,167822,150913],{"class":209},[94,167824,12417],{"class":104},[94,167826,69101],{"class":209},[94,167828,51414],{"class":104},[94,167830,730],{"class":153},[94,167832,12417],{"class":104},[94,167834,151449],{"class":209},[94,167836,51414],{"class":104},[94,167838,916],{"class":153},[94,167840,4911],{"class":104},[94,167842,167843,167845,167847,167849,167851,167853,167855,167857,167859,167861,167863,167865,167867],{"class":96,"line":1175},[94,167844,148362],{"class":104},[94,167846,62656],{"class":209},[94,167848,51414],{"class":104},[94,167850,159708],{"class":209},[94,167852,12417],{"class":104},[94,167854,69101],{"class":209},[94,167856,51414],{"class":104},[94,167858,780],{"class":153},[94,167860,12417],{"class":104},[94,167862,151449],{"class":209},[94,167864,51414],{"class":104},[94,167866,987],{"class":153},[94,167868,4911],{"class":104},[94,167870,167871],{"class":96,"line":1181},[94,167872,33229],{"class":104},[94,167874,167875],{"class":96,"line":1195},[94,167876,2381],{"emptyLinePlaceholder":20},[94,167878,167879],{"class":96,"line":1201},[94,167880,2381],{"emptyLinePlaceholder":20},[94,167882,167883,167885,167888],{"class":96,"line":1292},[94,167884,31930],{"class":100},[94,167886,167887],{"class":1944}," filter_students",[94,167889,167890],{"class":104},"(students, condition):\n",[94,167892,167893,167895,167897],{"class":96,"line":1298},[94,167894,161200],{"class":104},[94,167896,150],{"class":100},[94,167898,51815],{"class":104},[94,167900,167901,167903,167905,167907],{"class":96,"line":1310},[94,167902,3182],{"class":100},[94,167904,152114],{"class":104},[94,167906,26026],{"class":100},[94,167908,152119],{"class":104},[94,167910,167911,167913],{"class":96,"line":1593},[94,167912,2478],{"class":100},[94,167914,167915],{"class":104}," condition(student):\n",[94,167917,167918],{"class":96,"line":1598},[94,167919,167920],{"class":104},"            result.append(student)\n",[94,167922,167923,167925],{"class":96,"line":1604},[94,167924,4071],{"class":100},[94,167926,167682],{"class":104},[94,167928,167929],{"class":96,"line":1609},[94,167930,2381],{"emptyLinePlaceholder":20},[94,167932,167933],{"class":96,"line":1623},[94,167934,2381],{"emptyLinePlaceholder":20},[94,167936,167937,167939,167941,167944,167946,167949,167951,167953,167955,167957],{"class":96,"line":1628},[94,167938,165678],{"class":104},[94,167940,150],{"class":100},[94,167942,167943],{"class":104}," filter_students(students, ",[94,167945,166863],{"class":100},[94,167947,167948],{"class":104}," s: s[",[94,167950,151449],{"class":209},[94,167952,4424],{"class":104},[94,167954,1691],{"class":100},[94,167956,157814],{"class":153},[94,167958,111],{"class":104},[94,167960,167961,167964,167966,167968,167970,167972,167974,167976,167978,167980],{"class":96,"line":1634},[94,167962,167963],{"class":104},"excellent ",[94,167965,150],{"class":100},[94,167967,167943],{"class":104},[94,167969,166863],{"class":100},[94,167971,167948],{"class":104},[94,167973,151449],{"class":209},[94,167975,4424],{"class":104},[94,167977,1691],{"class":100},[94,167979,157765],{"class":153},[94,167981,111],{"class":104},[94,167983,167984,167987,167989,167991,167993,167995,167997,167999,168001,168003],{"class":96,"line":1655},[94,167985,167986],{"class":104},"under_age ",[94,167988,150],{"class":100},[94,167990,167943],{"class":104},[94,167992,166863],{"class":100},[94,167994,167948],{"class":104},[94,167996,69101],{"class":209},[94,167998,4424],{"class":104},[94,168000,1015],{"class":100},[94,168002,156262],{"class":153},[94,168004,111],{"class":104},[94,168006,168007],{"class":96,"line":1660},[94,168008,2381],{"emptyLinePlaceholder":20},[94,168010,168011,168013],{"class":96,"line":1674},[94,168012,30398],{"class":153},[94,168014,168015],{"class":104},"(passed)\n",[94,168017,168018,168020],{"class":96,"line":1679},[94,168019,30398],{"class":153},[94,168021,168022],{"class":104},"(excellent)\n",[94,168024,168025,168027],{"class":96,"line":1708},[94,168026,30398],{"class":153},[94,168028,168029],{"class":104},"(under_age)\n",[35,168031,168033],{"id":168032},"_715-易错点","7.15 易错点",[48,168035,168036,168039,168047,168052,168063],{},[51,168037,168038],{},"默认参数不要写可变对象。",[51,168040,168041,168043,168044,168046],{},[91,168042,166509],{}," 是元组，",[91,168045,166624],{}," 是字典。",[51,168048,168049,168051],{},[91,168050,166863],{}," 只适合简单表达式。",[51,168053,168054,100995,168056,168058,168059,168062],{},[91,168055,74021],{},[91,168057,80028],{}," 的结果是迭代器，常用 ",[91,168060,168061],{},"list()"," 转换查看。",[51,168064,168065],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[35,168067,168069],{"id":168068},"_716-本章练习","7.16 本章练习",[48,168071,168072,168079,168085,168090,168095],{},[51,168073,168074,168075,168078],{},"写函数 ",[91,168076,168077],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[51,168080,168074,168081,168084],{},[91,168082,168083],{},"print_user(**kwargs)","，输出用户所有字段。",[51,168086,104343,168087,168089],{},[91,168088,166863],{}," 对学生列表按年龄排序。",[51,168091,104343,168092,168094],{},[91,168093,80028],{}," 找出成绩不及格的学生。",[51,168096,168097],{},"写一个装饰器，统计函数执行前后的提示信息。",[5108,168099,168100],{},"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":14,"searchDepth":15,"depth":15,"links":168102},[168103,168104,168105,168106,168107,168108,168112,168113,168114,168115,168120,168121,168122,168123,168124,168125],{"id":165961,"depth":15,"text":165962},{"id":166075,"depth":15,"text":166076},{"id":166164,"depth":15,"text":166165},{"id":166226,"depth":15,"text":166227},{"id":166372,"depth":15,"text":166373},{"id":166499,"depth":15,"text":166500,"children":168109},[168110,168111],{"id":166503,"depth":1160,"text":166504},{"id":166618,"depth":1160,"text":166619},{"id":166699,"depth":15,"text":166700},{"id":166857,"depth":15,"text":166858},{"id":167025,"depth":15,"text":167026},{"id":167107,"depth":15,"text":167108,"children":168116},[168117,168118,168119],{"id":167111,"depth":1160,"text":167112},{"id":167182,"depth":1160,"text":167183},{"id":167259,"depth":1160,"text":167260},{"id":167384,"depth":15,"text":167385},{"id":167474,"depth":15,"text":167475},{"id":167605,"depth":15,"text":167606},{"id":167755,"depth":15,"text":167756},{"id":168032,"depth":15,"text":168033},{"id":168068,"depth":15,"text":168069},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165953,"description":17},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168132,"title":168133,"body":168134,"description":17,"extension":18,"meta":170653,"navigation":20,"path":170654,"seo":170655,"stem":170656,"__hash__":170657},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168135,"toc":170628},[168136,168139,168143,168146,168149,168180,168184,168188,168191,168218,168222,168225,168276,168279,168294,168297,168332,168336,168338,168362,168365,168425,168429,168433,168436,168493,168496,168516,168520,168523,168586,168590,168593,168649,168656,168680,168684,168687,168750,168754,168759,168810,168813,168817,168822,168889,168892,168974,168978,168983,169034,169037,169041,169044,169047,169055,169058,169104,169107,169153,169157,169163,169207,169210,169256,169259,169299,169302,169363,169367,169370,169460,169463,169605,169608,169675,169679,169682,169685,169826,169829,169907,169910,170086,170090,170092,170103,170105,170304,170308,170552,170556,170590,170594,170625],[10,168137,168133],{"id":168138},"_8-文件操作",[35,168140,168142],{"id":168141},"_81-文件操作的意义","8.1 文件操作的意义",[40,168144,168145],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[40,168147,168148],{},"常见文件类型：",[48,168150,168151,168157,168163,168169,168175],{},[51,168152,168153,168156],{},[91,168154,168155],{},".txt","：普通文本。",[51,168158,168159,168162],{},[91,168160,168161],{},".csv","：表格文本。",[51,168164,168165,168168],{},[91,168166,168167],{},".json","：结构化数据。",[51,168170,168171,168174],{},[91,168172,168173],{},".log","：日志文件。",[51,168176,168177,168179],{},[91,168178,146329],{},"：Python 源代码。",[35,168181,168183],{"id":168182},"_82-路径","8.2 路径",[65,168185,168187],{"id":168186},"_821-相对路径","8.2.1 相对路径",[40,168189,168190],{},"相对当前运行目录：",[85,168192,168194],{"className":30361,"code":168193,"language":30363,"meta":14,"style":14},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[91,168195,168196],{"__ignoreMap":14},[94,168197,168198,168200,168202,168204,168206,168208,168210,168212,168214,168216],{"class":96,"line":97},[94,168199,86892],{"class":153},[94,168201,105],{"class":104},[94,168203,146773],{"class":209},[94,168205,12417],{"class":104},[94,168207,146778],{"class":209},[94,168209,12417],{"class":104},[94,168211,146783],{"class":5198},[94,168213,150],{"class":100},[94,168215,146788],{"class":209},[94,168217,111],{"class":104},[65,168219,168221],{"id":168220},"_822-绝对路径","8.2.2 绝对路径",[40,168223,168224],{},"从根目录或盘符开始：",[85,168226,168228],{"className":30361,"code":168227,"language":30363,"meta":14,"style":14},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[91,168229,168230,168253],{"__ignoreMap":14},[94,168231,168232,168234,168236,168239,168241,168243,168245,168247,168249,168251],{"class":96,"line":97},[94,168233,86892],{"class":153},[94,168235,105],{"class":104},[94,168237,168238],{"class":209},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[94,168240,12417],{"class":104},[94,168242,146778],{"class":209},[94,168244,12417],{"class":104},[94,168246,146783],{"class":5198},[94,168248,150],{"class":100},[94,168250,146788],{"class":209},[94,168252,111],{"class":104},[94,168254,168255,168257,168259,168262,168264,168266,168268,168270,168272,168274],{"class":96,"line":15},[94,168256,86892],{"class":153},[94,168258,105],{"class":104},[94,168260,168261],{"class":209},"\"D:\u002Fdata\u002Fdata.txt\"",[94,168263,12417],{"class":104},[94,168265,146778],{"class":209},[94,168267,12417],{"class":104},[94,168269,146783],{"class":5198},[94,168271,150],{"class":100},[94,168273,146788],{"class":209},[94,168275,111],{"class":104},[40,168277,168278],{},"Windows 路径建议写成：",[85,168280,168282],{"className":30361,"code":168281,"language":30363,"meta":14,"style":14},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[91,168283,168284],{"__ignoreMap":14},[94,168285,168286,168289,168291],{"class":96,"line":97},[94,168287,168288],{"class":104},"path ",[94,168290,150],{"class":100},[94,168292,168293],{"class":209}," \"D:\u002Fdata\u002Fdata.txt\"\n",[40,168295,168296],{},"或原始字符串：",[85,168298,168300],{"className":30361,"code":168299,"language":30363,"meta":14,"style":14},"path = r\"D:\\data\\data.txt\"\n",[91,168301,168302],{"__ignoreMap":14},[94,168303,168304,168306,168308,168310,168312,168315,168318,168321,168323,168325,168327,168330],{"class":96,"line":97},[94,168305,168288],{"class":104},[94,168307,150],{"class":100},[94,168309,17103],{"class":100},[94,168311,356],{"class":209},[94,168313,168314],{"class":47960},"D:",[94,168316,168317],{"class":153},"\\d",[94,168319,168320],{"class":47960},"ata",[94,168322,168317],{"class":153},[94,168324,168320],{"class":47960},[94,168326,663],{"class":153},[94,168328,168329],{"class":47960},"txt",[94,168331,25116],{"class":209},[35,168333,168335],{"id":168334},"_83-open函数","8.3 open函数",[40,168337,5163],{},[85,168339,168341],{"className":30361,"code":168340,"language":30363,"meta":14,"style":14},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[91,168342,168343],{"__ignoreMap":14},[94,168344,168345,168347,168349,168351,168354,168356,168358,168360],{"class":96,"line":97},[94,168346,45337],{"class":5198},[94,168348,13546],{"class":100},[94,168350,146768],{"class":153},[94,168352,168353],{"class":104},"(文件路径, 打开模式, ",[94,168355,146783],{"class":5198},[94,168357,150],{"class":100},[94,168359,146788],{"class":209},[94,168361,111],{"class":104},[40,168363,168364],{},"常见模式：",[242,168366,168367,168376],{},[245,168368,168369],{},[248,168370,168371,168374],{},[251,168372,168373],{},"模式",[251,168375,25852],{},[289,168377,168378,168387,168396,168405,168415],{},[248,168379,168380,168384],{},[294,168381,168382],{},[91,168383,775],{},[294,168385,168386],{},"只读，文件不存在会报错",[248,168388,168389,168393],{},[294,168390,168391],{},[91,168392,900],{},[294,168394,168395],{},"只写，文件不存在会创建，存在会清空",[248,168397,168398,168402],{},[294,168399,168400],{},[91,168401,343],{},[294,168403,168404],{},"追加，文件不存在会创建",[248,168406,168407,168412],{},[294,168408,168409],{},[91,168410,168411],{},"rb",[294,168413,168414],{},"二进制只读",[248,168416,168417,168422],{},[294,168418,168419],{},[91,168420,168421],{},"wb",[294,168423,168424],{},"二进制只写",[35,168426,168428],{"id":168427},"_84-读取文件","8.4 读取文件",[65,168430,168432],{"id":168431},"_841-read","8.4.1 read",[40,168434,168435],{},"一次读取全部内容：",[85,168437,168439],{"className":30361,"code":168438,"language":30363,"meta":14,"style":14},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[91,168440,168441,168467,168479,168486],{"__ignoreMap":14},[94,168442,168443,168445,168447,168449,168451,168453,168455,168457,168459,168461,168463,168465],{"class":96,"line":97},[94,168444,45337],{"class":5198},[94,168446,13546],{"class":100},[94,168448,146768],{"class":153},[94,168450,105],{"class":104},[94,168452,146773],{"class":209},[94,168454,12417],{"class":104},[94,168456,146778],{"class":209},[94,168458,12417],{"class":104},[94,168460,146783],{"class":5198},[94,168462,150],{"class":100},[94,168464,146788],{"class":209},[94,168466,111],{"class":104},[94,168468,168469,168472,168474,168476],{"class":96,"line":15},[94,168470,168471],{"class":104},"content ",[94,168473,150],{"class":100},[94,168475,148130],{"class":5198},[94,168477,168478],{"class":104},".read()\n",[94,168480,168481,168483],{"class":96,"line":1160},[94,168482,30398],{"class":153},[94,168484,168485],{"class":104},"(content)\n",[94,168487,168488,168490],{"class":96,"line":1175},[94,168489,45337],{"class":5198},[94,168491,168492],{"class":104},".close()\n",[40,168494,168495],{},"可以指定读取字符数：",[85,168497,168499],{"className":30361,"code":168498,"language":30363,"meta":14,"style":14},"content = file.read(10)\n",[91,168500,168501],{"__ignoreMap":14},[94,168502,168503,168505,168507,168509,168512,168514],{"class":96,"line":97},[94,168504,168471],{"class":104},[94,168506,150],{"class":100},[94,168508,148130],{"class":5198},[94,168510,168511],{"class":104},".read(",[94,168513,551],{"class":153},[94,168515,111],{"class":104},[65,168517,168519],{"id":168518},"_842-readline","8.4.2 readline",[40,168521,168522],{},"一次读取一行：",[85,168524,168526],{"className":30361,"code":168525,"language":30363,"meta":14,"style":14},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[91,168527,168528,168554,168558,168569,168576,168580],{"__ignoreMap":14},[94,168529,168530,168532,168534,168536,168538,168540,168542,168544,168546,168548,168550,168552],{"class":96,"line":97},[94,168531,45337],{"class":5198},[94,168533,13546],{"class":100},[94,168535,146768],{"class":153},[94,168537,105],{"class":104},[94,168539,146773],{"class":209},[94,168541,12417],{"class":104},[94,168543,146778],{"class":209},[94,168545,12417],{"class":104},[94,168547,146783],{"class":5198},[94,168549,150],{"class":100},[94,168551,146788],{"class":209},[94,168553,111],{"class":104},[94,168555,168556],{"class":96,"line":15},[94,168557,2381],{"emptyLinePlaceholder":20},[94,168559,168560,168562,168564,168566],{"class":96,"line":1160},[94,168561,147229],{"class":104},[94,168563,150],{"class":100},[94,168565,148130],{"class":5198},[94,168567,168568],{"class":104},".readline()\n",[94,168570,168571,168573],{"class":96,"line":1175},[94,168572,30398],{"class":153},[94,168574,168575],{"class":104},"(line)\n",[94,168577,168578],{"class":96,"line":1181},[94,168579,2381],{"emptyLinePlaceholder":20},[94,168581,168582,168584],{"class":96,"line":1195},[94,168583,45337],{"class":5198},[94,168585,168492],{"class":104},[65,168587,168589],{"id":168588},"_843-readlines","8.4.3 readlines",[40,168591,168592],{},"读取所有行，返回列表：",[85,168594,168596],{"className":30361,"code":168595,"language":30363,"meta":14,"style":14},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[91,168597,168598,168624,168636,168643],{"__ignoreMap":14},[94,168599,168600,168602,168604,168606,168608,168610,168612,168614,168616,168618,168620,168622],{"class":96,"line":97},[94,168601,45337],{"class":5198},[94,168603,13546],{"class":100},[94,168605,146768],{"class":153},[94,168607,105],{"class":104},[94,168609,146773],{"class":209},[94,168611,12417],{"class":104},[94,168613,146778],{"class":209},[94,168615,12417],{"class":104},[94,168617,146783],{"class":5198},[94,168619,150],{"class":100},[94,168621,146788],{"class":209},[94,168623,111],{"class":104},[94,168625,168626,168629,168631,168633],{"class":96,"line":15},[94,168627,168628],{"class":104},"lines ",[94,168630,150],{"class":100},[94,168632,148130],{"class":5198},[94,168634,168635],{"class":104},".readlines()\n",[94,168637,168638,168640],{"class":96,"line":1160},[94,168639,30398],{"class":153},[94,168641,168642],{"class":104},"(lines)\n",[94,168644,168645,168647],{"class":96,"line":1175},[94,168646,45337],{"class":5198},[94,168648,168492],{"class":104},[40,168650,168651,168652,168655],{},"每一行通常带有换行符，可以用 ",[91,168653,168654],{},"strip()"," 去掉：",[85,168657,168659],{"className":30361,"code":168658,"language":30363,"meta":14,"style":14},"for line in lines:\n    print(line.strip())\n",[91,168660,168661,168673],{"__ignoreMap":14},[94,168662,168663,168665,168668,168670],{"class":96,"line":97},[94,168664,3006],{"class":100},[94,168666,168667],{"class":104}," line ",[94,168669,26026],{"class":100},[94,168671,168672],{"class":104}," lines:\n",[94,168674,168675,168677],{"class":96,"line":15},[94,168676,31282],{"class":153},[94,168678,168679],{"class":104},"(line.strip())\n",[65,168681,168683],{"id":168682},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[40,168685,168686],{},"推荐读取大文件时使用：",[85,168688,168690],{"className":30361,"code":168689,"language":30363,"meta":14,"style":14},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[91,168691,168692,168718,168722,168734,168740,168744],{"__ignoreMap":14},[94,168693,168694,168696,168698,168700,168702,168704,168706,168708,168710,168712,168714,168716],{"class":96,"line":97},[94,168695,45337],{"class":5198},[94,168697,13546],{"class":100},[94,168699,146768],{"class":153},[94,168701,105],{"class":104},[94,168703,146773],{"class":209},[94,168705,12417],{"class":104},[94,168707,146778],{"class":209},[94,168709,12417],{"class":104},[94,168711,146783],{"class":5198},[94,168713,150],{"class":100},[94,168715,146788],{"class":209},[94,168717,111],{"class":104},[94,168719,168720],{"class":96,"line":15},[94,168721,2381],{"emptyLinePlaceholder":20},[94,168723,168724,168726,168728,168730,168732],{"class":96,"line":1160},[94,168725,3006],{"class":100},[94,168727,168667],{"class":104},[94,168729,26026],{"class":100},[94,168731,148130],{"class":5198},[94,168733,3720],{"class":104},[94,168735,168736,168738],{"class":96,"line":1175},[94,168737,31282],{"class":153},[94,168739,168679],{"class":104},[94,168741,168742],{"class":96,"line":1181},[94,168743,2381],{"emptyLinePlaceholder":20},[94,168745,168746,168748],{"class":96,"line":1195},[94,168747,45337],{"class":5198},[94,168749,168492],{"class":104},[35,168751,168753],{"id":168752},"_85-with语句","8.5 with语句",[40,168755,168756,168758],{},[91,168757,107810],{}," 会自动关闭文件，推荐使用。",[85,168760,168762],{"className":30361,"code":168761,"language":30363,"meta":14,"style":14},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[91,168763,168764,168794,168804],{"__ignoreMap":14},[94,168765,168766,168768,168770,168772,168774,168776,168778,168780,168782,168784,168786,168788,168790,168792],{"class":96,"line":97},[94,168767,107810],{"class":100},[94,168769,146768],{"class":153},[94,168771,105],{"class":104},[94,168773,146773],{"class":209},[94,168775,12417],{"class":104},[94,168777,146778],{"class":209},[94,168779,12417],{"class":104},[94,168781,146783],{"class":5198},[94,168783,150],{"class":100},[94,168785,146788],{"class":209},[94,168787,13696],{"class":104},[94,168789,31366],{"class":100},[94,168791,148130],{"class":5198},[94,168793,3720],{"class":104},[94,168795,168796,168798,168800,168802],{"class":96,"line":15},[94,168797,146800],{"class":104},[94,168799,150],{"class":100},[94,168801,148130],{"class":5198},[94,168803,168478],{"class":104},[94,168805,168806,168808],{"class":96,"line":1160},[94,168807,31282],{"class":153},[94,168809,168485],{"class":104},[40,168811,168812],{},"等价于打开文件、读取、最后关闭，但更安全。",[35,168814,168816],{"id":168815},"_86-写入文件","8.6 写入文件",[40,168818,168819,168821],{},[91,168820,900],{}," 模式会清空原文件。",[85,168823,168825],{"className":30361,"code":168824,"language":30363,"meta":14,"style":14},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[91,168826,168827,168857,168874],{"__ignoreMap":14},[94,168828,168829,168831,168833,168835,168837,168839,168841,168843,168845,168847,168849,168851,168853,168855],{"class":96,"line":97},[94,168830,107810],{"class":100},[94,168832,146768],{"class":153},[94,168834,105],{"class":104},[94,168836,146773],{"class":209},[94,168838,12417],{"class":104},[94,168840,151953],{"class":209},[94,168842,12417],{"class":104},[94,168844,146783],{"class":5198},[94,168846,150],{"class":100},[94,168848,146788],{"class":209},[94,168850,13696],{"class":104},[94,168852,31366],{"class":100},[94,168854,148130],{"class":5198},[94,168856,3720],{"class":104},[94,168858,168859,168862,168865,168868,168870,168872],{"class":96,"line":15},[94,168860,168861],{"class":5198},"    file",[94,168863,168864],{"class":104},".write(",[94,168866,168867],{"class":209},"\"hello",[94,168869,156502],{"class":153},[94,168871,356],{"class":209},[94,168873,111],{"class":104},[94,168875,168876,168878,168880,168883,168885,168887],{"class":96,"line":1160},[94,168877,168861],{"class":5198},[94,168879,168864],{"class":104},[94,168881,168882],{"class":209},"\"python",[94,168884,156502],{"class":153},[94,168886,356],{"class":209},[94,168888,111],{"class":104},[40,168890,168891],{},"写入多行：",[85,168893,168895],{"className":30361,"code":168894,"language":30363,"meta":14,"style":14},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[91,168896,168897,168932,168936,168967],{"__ignoreMap":14},[94,168898,168899,168901,168903,168905,168908,168910,168912,168914,168917,168919,168921,168923,168926,168928,168930],{"class":96,"line":97},[94,168900,168628],{"class":104},[94,168902,150],{"class":100},[94,168904,52203],{"class":104},[94,168906,168907],{"class":209},"\"小明,18",[94,168909,156502],{"class":153},[94,168911,356],{"class":209},[94,168913,12417],{"class":104},[94,168915,168916],{"class":209},"\"小红,17",[94,168918,156502],{"class":153},[94,168920,356],{"class":209},[94,168922,12417],{"class":104},[94,168924,168925],{"class":209},"\"小刚,19",[94,168927,156502],{"class":153},[94,168929,356],{"class":209},[94,168931,33229],{"class":104},[94,168933,168934],{"class":96,"line":15},[94,168935,2381],{"emptyLinePlaceholder":20},[94,168937,168938,168940,168942,168944,168947,168949,168951,168953,168955,168957,168959,168961,168963,168965],{"class":96,"line":1160},[94,168939,107810],{"class":100},[94,168941,146768],{"class":153},[94,168943,105],{"class":104},[94,168945,168946],{"class":209},"\"students.txt\"",[94,168948,12417],{"class":104},[94,168950,151953],{"class":209},[94,168952,12417],{"class":104},[94,168954,146783],{"class":5198},[94,168956,150],{"class":100},[94,168958,146788],{"class":209},[94,168960,13696],{"class":104},[94,168962,31366],{"class":100},[94,168964,148130],{"class":5198},[94,168966,3720],{"class":104},[94,168968,168969,168971],{"class":96,"line":1175},[94,168970,168861],{"class":5198},[94,168972,168973],{"class":104},".writelines(lines)\n",[35,168975,168977],{"id":168976},"_87-追加文件","8.7 追加文件",[40,168979,168980,168982],{},[91,168981,343],{}," 模式不会清空原内容，而是在末尾追加。",[85,168984,168986],{"className":30361,"code":168985,"language":30363,"meta":14,"style":14},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[91,168987,168988,169019],{"__ignoreMap":14},[94,168989,168990,168992,168994,168996,168999,169001,169003,169005,169007,169009,169011,169013,169015,169017],{"class":96,"line":97},[94,168991,107810],{"class":100},[94,168993,146768],{"class":153},[94,168995,105],{"class":104},[94,168997,168998],{"class":209},"\"log.txt\"",[94,169000,12417],{"class":104},[94,169002,165302],{"class":209},[94,169004,12417],{"class":104},[94,169006,146783],{"class":5198},[94,169008,150],{"class":100},[94,169010,146788],{"class":209},[94,169012,13696],{"class":104},[94,169014,31366],{"class":100},[94,169016,148130],{"class":5198},[94,169018,3720],{"class":104},[94,169020,169021,169023,169025,169028,169030,169032],{"class":96,"line":15},[94,169022,168861],{"class":5198},[94,169024,168864],{"class":104},[94,169026,169027],{"class":209},"\"程序启动",[94,169029,156502],{"class":153},[94,169031,356],{"class":209},[94,169033,111],{"class":104},[40,169035,169036],{},"日志类文件常用追加模式。",[35,169038,169040],{"id":169039},"_88-文件编码","8.8 文件编码",[40,169042,169043],{},"编码决定文字如何保存为字节。",[40,169045,169046],{},"常见编码：",[48,169048,169049,169052],{},[51,169050,169051],{},"UTF-8：推荐。",[51,169053,169054],{},"GBK：部分 Windows 中文文件常见。",[40,169056,169057],{},"读取文件乱码时，可以尝试：",[85,169059,169061],{"className":30361,"code":169060,"language":30363,"meta":14,"style":14},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[91,169062,169063,169094],{"__ignoreMap":14},[94,169064,169065,169067,169069,169071,169073,169075,169077,169079,169081,169083,169086,169088,169090,169092],{"class":96,"line":97},[94,169066,107810],{"class":100},[94,169068,146768],{"class":153},[94,169070,105],{"class":104},[94,169072,146773],{"class":209},[94,169074,12417],{"class":104},[94,169076,146778],{"class":209},[94,169078,12417],{"class":104},[94,169080,146783],{"class":5198},[94,169082,150],{"class":100},[94,169084,169085],{"class":209},"\"gbk\"",[94,169087,13696],{"class":104},[94,169089,31366],{"class":100},[94,169091,148130],{"class":5198},[94,169093,3720],{"class":104},[94,169095,169096,169098,169100,169102],{"class":96,"line":15},[94,169097,146800],{"class":104},[94,169099,150],{"class":100},[94,169101,148130],{"class":5198},[94,169103,168478],{"class":104},[40,169105,169106],{},"写文件时建议统一 UTF-8：",[85,169108,169110],{"className":30361,"code":169109,"language":30363,"meta":14,"style":14},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[91,169111,169112,169142],{"__ignoreMap":14},[94,169113,169114,169116,169118,169120,169122,169124,169126,169128,169130,169132,169134,169136,169138,169140],{"class":96,"line":97},[94,169115,107810],{"class":100},[94,169117,146768],{"class":153},[94,169119,105],{"class":104},[94,169121,146773],{"class":209},[94,169123,12417],{"class":104},[94,169125,151953],{"class":209},[94,169127,12417],{"class":104},[94,169129,146783],{"class":5198},[94,169131,150],{"class":100},[94,169133,146788],{"class":209},[94,169135,13696],{"class":104},[94,169137,31366],{"class":100},[94,169139,148130],{"class":5198},[94,169141,3720],{"class":104},[94,169143,169144,169146,169148,169151],{"class":96,"line":15},[94,169145,168861],{"class":5198},[94,169147,168864],{"class":104},[94,169149,169150],{"class":209},"\"中文内容\"",[94,169152,111],{"class":104},[35,169154,169156],{"id":169155},"_89-pathlib","8.9 pathlib",[40,169158,169159,169162],{},[91,169160,169161],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[85,169164,169166],{"className":30361,"code":169165,"language":30363,"meta":14,"style":14},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[91,169167,169168,169178,169182,169200],{"__ignoreMap":14},[94,169169,169170,169172,169174,169176],{"class":96,"line":97},[94,169171,30720],{"class":100},[94,169173,108288],{"class":104},[94,169175,30375],{"class":100},[94,169177,108293],{"class":104},[94,169179,169180],{"class":96,"line":15},[94,169181,2381],{"emptyLinePlaceholder":20},[94,169183,169184,169186,169188,169190,169193,169195,169197],{"class":96,"line":1160},[94,169185,168288],{"class":104},[94,169187,150],{"class":100},[94,169189,108522],{"class":104},[94,169191,169192],{"class":209},"\"data\"",[94,169194,13696],{"class":104},[94,169196,689],{"class":100},[94,169198,169199],{"class":209}," \"students.txt\"\n",[94,169201,169202,169204],{"class":96,"line":1175},[94,169203,30398],{"class":153},[94,169205,169206],{"class":104},"(path)\n",[40,169208,169209],{},"创建目录：",[85,169211,169213],{"className":30361,"code":169212,"language":30363,"meta":14,"style":14},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[91,169214,169215,169225,169229,169242],{"__ignoreMap":14},[94,169216,169217,169219,169221,169223],{"class":96,"line":97},[94,169218,30720],{"class":100},[94,169220,108288],{"class":104},[94,169222,30375],{"class":100},[94,169224,108293],{"class":104},[94,169226,169227],{"class":96,"line":15},[94,169228,2381],{"emptyLinePlaceholder":20},[94,169230,169231,169234,169236,169238,169240],{"class":96,"line":1160},[94,169232,169233],{"class":104},"data_dir ",[94,169235,150],{"class":100},[94,169237,108522],{"class":104},[94,169239,169192],{"class":209},[94,169241,111],{"class":104},[94,169243,169244,169247,169250,169252,169254],{"class":96,"line":1175},[94,169245,169246],{"class":104},"data_dir.mkdir(",[94,169248,169249],{"class":5198},"exist_ok",[94,169251,150],{"class":100},[94,169253,31459],{"class":153},[94,169255,111],{"class":104},[40,169257,169258],{},"判断文件是否存在：",[85,169260,169262],{"className":30361,"code":169261,"language":30363,"meta":14,"style":14},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[91,169263,169264,169277,169281,169288],{"__ignoreMap":14},[94,169265,169266,169268,169270,169272,169275],{"class":96,"line":97},[94,169267,168288],{"class":104},[94,169269,150],{"class":100},[94,169271,108522],{"class":104},[94,169273,169274],{"class":209},"\"data\u002Fstudents.txt\"",[94,169276,111],{"class":104},[94,169278,169279],{"class":96,"line":15},[94,169280,2381],{"emptyLinePlaceholder":20},[94,169282,169283,169285],{"class":96,"line":1160},[94,169284,1512],{"class":100},[94,169286,169287],{"class":104}," path.exists():\n",[94,169289,169290,169292,169294,169297],{"class":96,"line":1175},[94,169291,31282],{"class":153},[94,169293,105],{"class":104},[94,169295,169296],{"class":209},"\"文件存在\"",[94,169298,111],{"class":104},[40,169300,169301],{},"读写文本：",[85,169303,169305],{"className":30361,"code":169304,"language":30363,"meta":14,"style":14},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[91,169306,169307,169319,169323,169340,169357],{"__ignoreMap":14},[94,169308,169309,169311,169313,169315,169317],{"class":96,"line":97},[94,169310,168288],{"class":104},[94,169312,150],{"class":100},[94,169314,108522],{"class":104},[94,169316,146773],{"class":209},[94,169318,111],{"class":104},[94,169320,169321],{"class":96,"line":15},[94,169322,2381],{"emptyLinePlaceholder":20},[94,169324,169325,169328,169330,169332,169334,169336,169338],{"class":96,"line":1160},[94,169326,169327],{"class":104},"path.write_text(",[94,169329,145853],{"class":209},[94,169331,12417],{"class":104},[94,169333,146783],{"class":5198},[94,169335,150],{"class":100},[94,169337,146788],{"class":209},[94,169339,111],{"class":104},[94,169341,169342,169344,169346,169349,169351,169353,169355],{"class":96,"line":1175},[94,169343,168471],{"class":104},[94,169345,150],{"class":100},[94,169347,169348],{"class":104}," path.read_text(",[94,169350,146783],{"class":5198},[94,169352,150],{"class":100},[94,169354,146788],{"class":209},[94,169356,111],{"class":104},[94,169358,169359,169361],{"class":96,"line":1181},[94,169360,30398],{"class":153},[94,169362,168485],{"class":104},[35,169364,169366],{"id":169365},"_810-json文件","8.10 JSON文件",[40,169368,169369],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[85,169371,169373],{"className":30361,"code":169372,"language":30363,"meta":14,"style":14},"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",[91,169374,169375,169381,169385,169393,169403,169413,169421,169425,169429,169454],{"__ignoreMap":14},[94,169376,169377,169379],{"class":96,"line":97},[94,169378,30375],{"class":100},[94,169380,147068],{"class":104},[94,169382,169383],{"class":96,"line":15},[94,169384,2381],{"emptyLinePlaceholder":20},[94,169386,169387,169389,169391],{"class":96,"line":1160},[94,169388,149458],{"class":104},[94,169390,150],{"class":100},[94,169392,15554],{"class":104},[94,169394,169395,169397,169399,169401],{"class":96,"line":1175},[94,169396,146997],{"class":209},[94,169398,51414],{"class":104},[94,169400,149865],{"class":209},[94,169402,31449],{"class":104},[94,169404,169405,169407,169409,169411],{"class":96,"line":1181},[94,169406,164514],{"class":209},[94,169408,51414],{"class":104},[94,169410,755],{"class":153},[94,169412,31449],{"class":104},[94,169414,169415,169417,169419],{"class":96,"line":1195},[94,169416,164525],{"class":209},[94,169418,51414],{"class":104},[94,169420,164530],{"class":153},[94,169422,169423],{"class":96,"line":1201},[94,169424,1546],{"class":104},[94,169426,169427],{"class":96,"line":1292},[94,169428,2381],{"emptyLinePlaceholder":20},[94,169430,169431,169433,169435,169438,169440,169442,169444,169446,169448,169450,169452],{"class":96,"line":1298},[94,169432,156421],{"class":104},[94,169434,150],{"class":100},[94,169436,169437],{"class":104}," json.dumps(student, ",[94,169439,147114],{"class":5198},[94,169441,150],{"class":100},[94,169443,33970],{"class":153},[94,169445,12417],{"class":104},[94,169447,151989],{"class":5198},[94,169449,150],{"class":100},[94,169451,182],{"class":153},[94,169453,111],{"class":104},[94,169455,169456,169458],{"class":96,"line":1310},[94,169457,30398],{"class":153},[94,169459,164048],{"class":104},[40,169461,169462],{},"写入 JSON 文件：",[85,169464,169466],{"className":30361,"code":169465,"language":30363,"meta":14,"style":14},"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",[91,169467,169468,169474,169478,169486,169514,169542,169546,169550,169580],{"__ignoreMap":14},[94,169469,169470,169472],{"class":96,"line":97},[94,169471,30375],{"class":100},[94,169473,147068],{"class":104},[94,169475,169476],{"class":96,"line":15},[94,169477,2381],{"emptyLinePlaceholder":20},[94,169479,169480,169482,169484],{"class":96,"line":1160},[94,169481,159693],{"class":104},[94,169483,150],{"class":100},[94,169485,55424],{"class":104},[94,169487,169488,169490,169492,169494,169496,169498,169500,169502,169504,169506,169508,169510,169512],{"class":96,"line":1175},[94,169489,148362],{"class":104},[94,169491,62656],{"class":209},[94,169493,51414],{"class":104},[94,169495,149865],{"class":209},[94,169497,12417],{"class":104},[94,169499,69101],{"class":209},[94,169501,51414],{"class":104},[94,169503,755],{"class":153},[94,169505,12417],{"class":104},[94,169507,151449],{"class":209},[94,169509,51414],{"class":104},[94,169511,1094],{"class":153},[94,169513,4911],{"class":104},[94,169515,169516,169518,169520,169522,169524,169526,169528,169530,169532,169534,169536,169538,169540],{"class":96,"line":1181},[94,169517,148362],{"class":104},[94,169519,62656],{"class":209},[94,169521,51414],{"class":104},[94,169523,150913],{"class":209},[94,169525,12417],{"class":104},[94,169527,69101],{"class":209},[94,169529,51414],{"class":104},[94,169531,730],{"class":153},[94,169533,12417],{"class":104},[94,169535,151449],{"class":209},[94,169537,51414],{"class":104},[94,169539,916],{"class":153},[94,169541,4911],{"class":104},[94,169543,169544],{"class":96,"line":1195},[94,169545,33229],{"class":104},[94,169547,169548],{"class":96,"line":1201},[94,169549,2381],{"emptyLinePlaceholder":20},[94,169551,169552,169554,169556,169558,169560,169562,169564,169566,169568,169570,169572,169574,169576,169578],{"class":96,"line":1292},[94,169553,107810],{"class":100},[94,169555,146768],{"class":153},[94,169557,105],{"class":104},[94,169559,151808],{"class":209},[94,169561,12417],{"class":104},[94,169563,151953],{"class":209},[94,169565,12417],{"class":104},[94,169567,146783],{"class":5198},[94,169569,150],{"class":100},[94,169571,146788],{"class":209},[94,169573,13696],{"class":104},[94,169575,31366],{"class":100},[94,169577,148130],{"class":5198},[94,169579,3720],{"class":104},[94,169581,169582,169585,169587,169589,169591,169593,169595,169597,169599,169601,169603],{"class":96,"line":1298},[94,169583,169584],{"class":104},"    json.dump(students, ",[94,169586,45337],{"class":5198},[94,169588,12417],{"class":104},[94,169590,147114],{"class":5198},[94,169592,150],{"class":100},[94,169594,33970],{"class":153},[94,169596,12417],{"class":104},[94,169598,151989],{"class":5198},[94,169600,150],{"class":100},[94,169602,182],{"class":153},[94,169604,111],{"class":104},[40,169606,169607],{},"读取 JSON 文件：",[85,169609,169611],{"className":30361,"code":169610,"language":30363,"meta":14,"style":14},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[91,169612,169613,169619,169623,169653,169665,169669],{"__ignoreMap":14},[94,169614,169615,169617],{"class":96,"line":97},[94,169616,30375],{"class":100},[94,169618,147068],{"class":104},[94,169620,169621],{"class":96,"line":15},[94,169622,2381],{"emptyLinePlaceholder":20},[94,169624,169625,169627,169629,169631,169633,169635,169637,169639,169641,169643,169645,169647,169649,169651],{"class":96,"line":1160},[94,169626,107810],{"class":100},[94,169628,146768],{"class":153},[94,169630,105],{"class":104},[94,169632,151808],{"class":209},[94,169634,12417],{"class":104},[94,169636,146778],{"class":209},[94,169638,12417],{"class":104},[94,169640,146783],{"class":5198},[94,169642,150],{"class":100},[94,169644,146788],{"class":209},[94,169646,13696],{"class":104},[94,169648,31366],{"class":100},[94,169650,148130],{"class":5198},[94,169652,3720],{"class":104},[94,169654,169655,169657,169659,169661,169663],{"class":96,"line":1175},[94,169656,153014],{"class":104},[94,169658,150],{"class":100},[94,169660,148141],{"class":104},[94,169662,45337],{"class":5198},[94,169664,111],{"class":104},[94,169666,169667],{"class":96,"line":1181},[94,169668,2381],{"emptyLinePlaceholder":20},[94,169670,169671,169673],{"class":96,"line":1195},[94,169672,30398],{"class":153},[94,169674,164972],{"class":104},[35,169676,169678],{"id":169677},"_811-csv文件","8.11 CSV文件",[40,169680,169681],{},"CSV 是逗号分隔值，常用于表格数据。",[40,169683,169684],{},"写入 CSV：",[85,169686,169688],{"className":30361,"code":169687,"language":30363,"meta":14,"style":14},"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",[91,169689,169690,169697,169701,169709,169727,169743,169759,169763,169767,169807,169821],{"__ignoreMap":14},[94,169691,169692,169694],{"class":96,"line":97},[94,169693,30375],{"class":100},[94,169695,169696],{"class":104}," csv\n",[94,169698,169699],{"class":96,"line":15},[94,169700,2381],{"emptyLinePlaceholder":20},[94,169702,169703,169705,169707],{"class":96,"line":1160},[94,169704,159693],{"class":104},[94,169706,150],{"class":100},[94,169708,55424],{"class":104},[94,169710,169711,169714,169716,169718,169720,169722,169725],{"class":96,"line":1175},[94,169712,169713],{"class":104},"    [",[94,169715,73076],{"class":209},[94,169717,12417],{"class":104},[94,169719,73109],{"class":209},[94,169721,12417],{"class":104},[94,169723,169724],{"class":209},"\"成绩\"",[94,169726,87813],{"class":104},[94,169728,169729,169731,169733,169735,169737,169739,169741],{"class":96,"line":1181},[94,169730,169713],{"class":104},[94,169732,149865],{"class":209},[94,169734,12417],{"class":104},[94,169736,755],{"class":153},[94,169738,12417],{"class":104},[94,169740,1094],{"class":153},[94,169742,87813],{"class":104},[94,169744,169745,169747,169749,169751,169753,169755,169757],{"class":96,"line":1195},[94,169746,169713],{"class":104},[94,169748,150913],{"class":209},[94,169750,12417],{"class":104},[94,169752,730],{"class":153},[94,169754,12417],{"class":104},[94,169756,916],{"class":153},[94,169758,87813],{"class":104},[94,169760,169761],{"class":96,"line":1201},[94,169762,33229],{"class":104},[94,169764,169765],{"class":96,"line":1292},[94,169766,2381],{"emptyLinePlaceholder":20},[94,169768,169769,169771,169773,169775,169778,169780,169782,169784,169786,169788,169790,169792,169795,169797,169799,169801,169803,169805],{"class":96,"line":1298},[94,169770,107810],{"class":100},[94,169772,146768],{"class":153},[94,169774,105],{"class":104},[94,169776,169777],{"class":209},"\"students.csv\"",[94,169779,12417],{"class":104},[94,169781,151953],{"class":209},[94,169783,12417],{"class":104},[94,169785,146783],{"class":5198},[94,169787,150],{"class":100},[94,169789,146788],{"class":209},[94,169791,12417],{"class":104},[94,169793,169794],{"class":5198},"newline",[94,169796,150],{"class":100},[94,169798,7634],{"class":209},[94,169800,13696],{"class":104},[94,169802,31366],{"class":100},[94,169804,148130],{"class":5198},[94,169806,3720],{"class":104},[94,169808,169809,169812,169814,169817,169819],{"class":96,"line":1310},[94,169810,169811],{"class":104},"    writer ",[94,169813,150],{"class":100},[94,169815,169816],{"class":104}," csv.writer(",[94,169818,45337],{"class":5198},[94,169820,111],{"class":104},[94,169822,169823],{"class":96,"line":1593},[94,169824,169825],{"class":104},"    writer.writerows(students)\n",[40,169827,169828],{},"读取 CSV：",[85,169830,169832],{"className":30361,"code":169831,"language":30363,"meta":14,"style":14},"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",[91,169833,169834,169840,169844,169874,169888,169900],{"__ignoreMap":14},[94,169835,169836,169838],{"class":96,"line":97},[94,169837,30375],{"class":100},[94,169839,169696],{"class":104},[94,169841,169842],{"class":96,"line":15},[94,169843,2381],{"emptyLinePlaceholder":20},[94,169845,169846,169848,169850,169852,169854,169856,169858,169860,169862,169864,169866,169868,169870,169872],{"class":96,"line":1160},[94,169847,107810],{"class":100},[94,169849,146768],{"class":153},[94,169851,105],{"class":104},[94,169853,169777],{"class":209},[94,169855,12417],{"class":104},[94,169857,146778],{"class":209},[94,169859,12417],{"class":104},[94,169861,146783],{"class":5198},[94,169863,150],{"class":100},[94,169865,146788],{"class":209},[94,169867,13696],{"class":104},[94,169869,31366],{"class":100},[94,169871,148130],{"class":5198},[94,169873,3720],{"class":104},[94,169875,169876,169879,169881,169884,169886],{"class":96,"line":1175},[94,169877,169878],{"class":104},"    reader ",[94,169880,150],{"class":100},[94,169882,169883],{"class":104}," csv.reader(",[94,169885,45337],{"class":5198},[94,169887,111],{"class":104},[94,169889,169890,169892,169895,169897],{"class":96,"line":1181},[94,169891,3182],{"class":100},[94,169893,169894],{"class":104}," row ",[94,169896,26026],{"class":100},[94,169898,169899],{"class":104}," reader:\n",[94,169901,169902,169904],{"class":96,"line":1195},[94,169903,32434],{"class":153},[94,169905,169906],{"class":104},"(row)\n",[40,169908,169909],{},"使用字典写入：",[85,169911,169913],{"className":30361,"code":169912,"language":30363,"meta":14,"style":14},"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",[91,169914,169915,169921,169925,169933,169961,169989,169993,169997,170035,170056,170077,170082],{"__ignoreMap":14},[94,169916,169917,169919],{"class":96,"line":97},[94,169918,30375],{"class":100},[94,169920,169696],{"class":104},[94,169922,169923],{"class":96,"line":15},[94,169924,2381],{"emptyLinePlaceholder":20},[94,169926,169927,169929,169931],{"class":96,"line":1160},[94,169928,159693],{"class":104},[94,169930,150],{"class":100},[94,169932,55424],{"class":104},[94,169934,169935,169937,169939,169941,169943,169945,169947,169949,169951,169953,169955,169957,169959],{"class":96,"line":1175},[94,169936,148362],{"class":104},[94,169938,62656],{"class":209},[94,169940,51414],{"class":104},[94,169942,149865],{"class":209},[94,169944,12417],{"class":104},[94,169946,69101],{"class":209},[94,169948,51414],{"class":104},[94,169950,755],{"class":153},[94,169952,12417],{"class":104},[94,169954,151449],{"class":209},[94,169956,51414],{"class":104},[94,169958,1094],{"class":153},[94,169960,4911],{"class":104},[94,169962,169963,169965,169967,169969,169971,169973,169975,169977,169979,169981,169983,169985,169987],{"class":96,"line":1181},[94,169964,148362],{"class":104},[94,169966,62656],{"class":209},[94,169968,51414],{"class":104},[94,169970,150913],{"class":209},[94,169972,12417],{"class":104},[94,169974,69101],{"class":209},[94,169976,51414],{"class":104},[94,169978,730],{"class":153},[94,169980,12417],{"class":104},[94,169982,151449],{"class":209},[94,169984,51414],{"class":104},[94,169986,916],{"class":153},[94,169988,4911],{"class":104},[94,169990,169991],{"class":96,"line":1195},[94,169992,33229],{"class":104},[94,169994,169995],{"class":96,"line":1201},[94,169996,2381],{"emptyLinePlaceholder":20},[94,169998,169999,170001,170003,170005,170007,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027,170029,170031,170033],{"class":96,"line":1292},[94,170000,107810],{"class":100},[94,170002,146768],{"class":153},[94,170004,105],{"class":104},[94,170006,169777],{"class":209},[94,170008,12417],{"class":104},[94,170010,151953],{"class":209},[94,170012,12417],{"class":104},[94,170014,146783],{"class":5198},[94,170016,150],{"class":100},[94,170018,146788],{"class":209},[94,170020,12417],{"class":104},[94,170022,169794],{"class":5198},[94,170024,150],{"class":100},[94,170026,7634],{"class":209},[94,170028,13696],{"class":104},[94,170030,31366],{"class":100},[94,170032,148130],{"class":5198},[94,170034,3720],{"class":104},[94,170036,170037,170040,170042,170044,170046,170048,170050,170052,170054],{"class":96,"line":1298},[94,170038,170039],{"class":104},"    fieldnames ",[94,170041,150],{"class":100},[94,170043,52203],{"class":104},[94,170045,62656],{"class":209},[94,170047,12417],{"class":104},[94,170049,69101],{"class":209},[94,170051,12417],{"class":104},[94,170053,151449],{"class":209},[94,170055,33229],{"class":104},[94,170057,170058,170060,170062,170065,170067,170069,170072,170074],{"class":96,"line":1310},[94,170059,169811],{"class":104},[94,170061,150],{"class":100},[94,170063,170064],{"class":104}," csv.DictWriter(",[94,170066,45337],{"class":5198},[94,170068,12417],{"class":104},[94,170070,170071],{"class":5198},"fieldnames",[94,170073,150],{"class":100},[94,170075,170076],{"class":104},"fieldnames)\n",[94,170078,170079],{"class":96,"line":1593},[94,170080,170081],{"class":104},"    writer.writeheader()\n",[94,170083,170084],{"class":96,"line":1598},[94,170085,169825],{"class":104},[35,170087,170089],{"id":170088},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[40,170091,123269],{},[48,170093,170094,170097,170100],{},[51,170095,170096],{},"读取文本文件。",[51,170098,170099],{},"统计每个单词出现次数。",[51,170101,170102],{},"输出出现次数最多的前 10 个单词。",[40,170104,10017],{},[85,170106,170108],{"className":30361,"code":170107,"language":30363,"meta":14,"style":14},"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",[91,170109,170110,170120,170124,170137,170153,170157,170167,170176,170180,170192,170212,170221,170225,170243,170247,170277,170281,170297],{"__ignoreMap":14},[94,170111,170112,170114,170116,170118],{"class":96,"line":97},[94,170113,30720],{"class":100},[94,170115,108288],{"class":104},[94,170117,30375],{"class":100},[94,170119,108293],{"class":104},[94,170121,170122],{"class":96,"line":15},[94,170123,2381],{"emptyLinePlaceholder":20},[94,170125,170126,170128,170130,170132,170135],{"class":96,"line":1160},[94,170127,168288],{"class":104},[94,170129,150],{"class":100},[94,170131,108522],{"class":104},[94,170133,170134],{"class":209},"\"article.txt\"",[94,170136,111],{"class":104},[94,170138,170139,170141,170143,170145,170147,170149,170151],{"class":96,"line":1175},[94,170140,168471],{"class":104},[94,170142,150],{"class":100},[94,170144,169348],{"class":104},[94,170146,146783],{"class":5198},[94,170148,150],{"class":100},[94,170150,146788],{"class":209},[94,170152,111],{"class":104},[94,170154,170155],{"class":96,"line":1181},[94,170156,2381],{"emptyLinePlaceholder":20},[94,170158,170159,170162,170164],{"class":96,"line":1195},[94,170160,170161],{"class":104},"words ",[94,170163,150],{"class":100},[94,170165,170166],{"class":104}," content.lower().split()\n",[94,170168,170169,170172,170174],{"class":96,"line":1201},[94,170170,170171],{"class":104},"counter ",[94,170173,150],{"class":100},[94,170175,87845],{"class":104},[94,170177,170178],{"class":96,"line":1292},[94,170179,2381],{"emptyLinePlaceholder":20},[94,170181,170182,170184,170187,170189],{"class":96,"line":1298},[94,170183,3006],{"class":100},[94,170185,170186],{"class":104}," word ",[94,170188,26026],{"class":100},[94,170190,170191],{"class":104}," words:\n",[94,170193,170194,170197,170199,170202,170205,170207,170210],{"class":96,"line":1310},[94,170195,170196],{"class":104},"    word ",[94,170198,150],{"class":100},[94,170200,170201],{"class":104}," word.strip(",[94,170203,170204],{"class":209},"\".,!?;:",[94,170206,156472],{"class":153},[94,170208,170209],{"class":209},"'()[]\"",[94,170211,111],{"class":104},[94,170213,170214,170216,170218],{"class":96,"line":1593},[94,170215,3082],{"class":100},[94,170217,38913],{"class":100},[94,170219,170220],{"class":104}," word:\n",[94,170222,170223],{"class":96,"line":1598},[94,170224,148489],{"class":100},[94,170226,170227,170230,170232,170235,170237,170239,170241],{"class":96,"line":1604},[94,170228,170229],{"class":104},"    counter[word] ",[94,170231,150],{"class":100},[94,170233,170234],{"class":104}," counter.get(word, ",[94,170236,296],{"class":153},[94,170238,13696],{"class":104},[94,170240,586],{"class":100},[94,170242,55676],{"class":153},[94,170244,170245],{"class":96,"line":1609},[94,170246,2381],{"emptyLinePlaceholder":20},[94,170248,170249,170252,170254,170256,170259,170261,170263,170265,170267,170269,170271,170273,170275],{"class":96,"line":1623},[94,170250,170251],{"class":104},"items ",[94,170253,150],{"class":100},[94,170255,163581],{"class":153},[94,170257,170258],{"class":104},"(counter.items(), ",[94,170260,153923],{"class":5198},[94,170262,153926],{"class":100},[94,170264,153929],{"class":104},[94,170266,322],{"class":153},[94,170268,112179],{"class":104},[94,170270,163505],{"class":5198},[94,170272,150],{"class":100},[94,170274,31459],{"class":153},[94,170276,111],{"class":104},[94,170278,170279],{"class":96,"line":1628},[94,170280,2381],{"emptyLinePlaceholder":20},[94,170282,170283,170285,170288,170290,170293,170295],{"class":96,"line":1634},[94,170284,3006],{"class":100},[94,170286,170287],{"class":104}," word, count ",[94,170289,26026],{"class":100},[94,170291,170292],{"class":104}," items[:",[94,170294,551],{"class":153},[94,170296,165732],{"class":104},[94,170298,170299,170301],{"class":96,"line":1655},[94,170300,31282],{"class":153},[94,170302,170303],{"class":104},"(word, count)\n",[35,170305,170307],{"id":170306},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[85,170309,170311],{"className":30361,"code":170310,"language":30363,"meta":14,"style":14},"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",[91,170312,170313,170319,170329,170333,170345,170349,170353,170361,170371,170377,170381,170411,170421,170425,170429,170437,170467,170491,170495,170499,170507,170536,170541],{"__ignoreMap":14},[94,170314,170315,170317],{"class":96,"line":97},[94,170316,30375],{"class":100},[94,170318,147068],{"class":104},[94,170320,170321,170323,170325,170327],{"class":96,"line":15},[94,170322,30720],{"class":100},[94,170324,108288],{"class":104},[94,170326,30375],{"class":100},[94,170328,108293],{"class":104},[94,170330,170331],{"class":96,"line":1160},[94,170332,2381],{"emptyLinePlaceholder":20},[94,170334,170335,170337,170339,170341,170343],{"class":96,"line":1175},[94,170336,151801],{"class":153},[94,170338,13546],{"class":100},[94,170340,108522],{"class":104},[94,170342,151808],{"class":209},[94,170344,111],{"class":104},[94,170346,170347],{"class":96,"line":1181},[94,170348,2381],{"emptyLinePlaceholder":20},[94,170350,170351],{"class":96,"line":1195},[94,170352,2381],{"emptyLinePlaceholder":20},[94,170354,170355,170357,170359],{"class":96,"line":1201},[94,170356,31930],{"class":100},[94,170358,151825],{"class":1944},[94,170360,31936],{"class":104},[94,170362,170363,170365,170367,170369],{"class":96,"line":1292},[94,170364,3082],{"class":100},[94,170366,38913],{"class":100},[94,170368,151836],{"class":153},[94,170370,151839],{"class":104},[94,170372,170373,170375],{"class":96,"line":1298},[94,170374,14734],{"class":100},[94,170376,51815],{"class":104},[94,170378,170379],{"class":96,"line":1310},[94,170380,2381],{"emptyLinePlaceholder":20},[94,170382,170383,170385,170387,170389,170391,170393,170395,170397,170399,170401,170403,170405,170407,170409],{"class":96,"line":1593},[94,170384,34161],{"class":100},[94,170386,146768],{"class":153},[94,170388,105],{"class":104},[94,170390,151801],{"class":153},[94,170392,12417],{"class":104},[94,170394,146778],{"class":209},[94,170396,12417],{"class":104},[94,170398,146783],{"class":5198},[94,170400,150],{"class":100},[94,170402,146788],{"class":209},[94,170404,13696],{"class":104},[94,170406,31366],{"class":100},[94,170408,148130],{"class":5198},[94,170410,3720],{"class":104},[94,170412,170413,170415,170417,170419],{"class":96,"line":1598},[94,170414,14734],{"class":100},[94,170416,148141],{"class":104},[94,170418,45337],{"class":5198},[94,170420,111],{"class":104},[94,170422,170423],{"class":96,"line":1604},[94,170424,2381],{"emptyLinePlaceholder":20},[94,170426,170427],{"class":96,"line":1609},[94,170428,2381],{"emptyLinePlaceholder":20},[94,170430,170431,170433,170435],{"class":96,"line":1623},[94,170432,31930],{"class":100},[94,170434,151935],{"class":1944},[94,170436,151938],{"class":104},[94,170438,170439,170441,170443,170445,170447,170449,170451,170453,170455,170457,170459,170461,170463,170465],{"class":96,"line":1628},[94,170440,34161],{"class":100},[94,170442,146768],{"class":153},[94,170444,105],{"class":104},[94,170446,151801],{"class":153},[94,170448,12417],{"class":104},[94,170450,151953],{"class":209},[94,170452,12417],{"class":104},[94,170454,146783],{"class":5198},[94,170456,150],{"class":100},[94,170458,146788],{"class":209},[94,170460,13696],{"class":104},[94,170462,31366],{"class":100},[94,170464,148130],{"class":5198},[94,170466,3720],{"class":104},[94,170468,170469,170471,170473,170475,170477,170479,170481,170483,170485,170487,170489],{"class":96,"line":1634},[94,170470,151974],{"class":104},[94,170472,45337],{"class":5198},[94,170474,12417],{"class":104},[94,170476,147114],{"class":5198},[94,170478,150],{"class":100},[94,170480,33970],{"class":153},[94,170482,12417],{"class":104},[94,170484,151989],{"class":5198},[94,170486,150],{"class":100},[94,170488,182],{"class":153},[94,170490,111],{"class":104},[94,170492,170493],{"class":96,"line":1655},[94,170494,2381],{"emptyLinePlaceholder":20},[94,170496,170497],{"class":96,"line":1660},[94,170498,2381],{"emptyLinePlaceholder":20},[94,170500,170501,170503,170505],{"class":96,"line":1674},[94,170502,159693],{"class":104},[94,170504,150],{"class":100},[94,170506,153019],{"class":104},[94,170508,170509,170512,170514,170516,170518,170520,170522,170524,170526,170528,170530,170532,170534],{"class":96,"line":1679},[94,170510,170511],{"class":104},"students.append({",[94,170513,62656],{"class":209},[94,170515,51414],{"class":104},[94,170517,149865],{"class":209},[94,170519,12417],{"class":104},[94,170521,69101],{"class":209},[94,170523,51414],{"class":104},[94,170525,755],{"class":153},[94,170527,12417],{"class":104},[94,170529,151449],{"class":209},[94,170531,51414],{"class":104},[94,170533,1094],{"class":153},[94,170535,165129],{"class":104},[94,170537,170538],{"class":96,"line":1708},[94,170539,170540],{"class":104},"save_students(students)\n",[94,170542,170543,170545,170547,170550],{"class":96,"line":1713},[94,170544,30398],{"class":153},[94,170546,105],{"class":104},[94,170548,170549],{"class":209},"\"保存成功\"",[94,170551,111],{"class":104},[35,170553,170555],{"id":170554},"_814-易错点","8.14 易错点",[48,170557,170558,170562,170568,170573,170580,170587],{},[51,170559,170560,168821],{},[91,170561,900],{},[51,170563,170564,170565,28368],{},"读写中文要指定 ",[91,170566,170567],{},"encoding=\"utf-8\"",[51,170569,170570,170571,28368],{},"打开文件后要关闭，推荐使用 ",[91,170572,107810],{},[51,170574,170575,170576,170579],{},"读取大文件不要直接 ",[91,170577,170578],{},"read()"," 全部内容。",[51,170581,170582,170583,170586],{},"Windows 写 CSV 时建议加 ",[91,170584,170585],{},"newline=\"\"","，避免空行。",[51,170588,170589],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[35,170591,170593],{"id":170592},"_815-本章练习","8.15 本章练习",[48,170595,170596,170603,170608,170611,170614],{},[51,170597,170598,170599,170602],{},"写入一个 ",[91,170600,170601],{},"students.txt","，每行保存一个学生姓名。",[51,170604,104332,170605,170607],{},[91,170606,170601],{}," 并输出所有学生。",[51,170609,170610],{},"把学生列表保存为 JSON 文件。",[51,170612,170613],{},"从 JSON 文件读取学生数据，计算平均分。",[51,170615,170616,170617,170620,170621,170624],{},"写一个日志函数 ",[91,170618,170619],{},"write_log(message)","，每次调用向 ",[91,170622,170623],{},"app.log"," 追加一行。",[5108,170626,170627],{},"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":14,"searchDepth":15,"depth":15,"links":170629},[170630,170631,170635,170636,170642,170643,170644,170645,170646,170647,170648,170649,170650,170651,170652],{"id":168141,"depth":15,"text":168142},{"id":168182,"depth":15,"text":168183,"children":170632},[170633,170634],{"id":168186,"depth":1160,"text":168187},{"id":168220,"depth":1160,"text":168221},{"id":168334,"depth":15,"text":168335},{"id":168427,"depth":15,"text":168428,"children":170637},[170638,170639,170640,170641],{"id":168431,"depth":1160,"text":168432},{"id":168518,"depth":1160,"text":168519},{"id":168588,"depth":1160,"text":168589},{"id":168682,"depth":1160,"text":168683},{"id":168752,"depth":15,"text":168753},{"id":168815,"depth":15,"text":168816},{"id":168976,"depth":15,"text":168977},{"id":169039,"depth":15,"text":169040},{"id":169155,"depth":15,"text":169156},{"id":169365,"depth":15,"text":169366},{"id":169677,"depth":15,"text":169678},{"id":170088,"depth":15,"text":170089},{"id":170306,"depth":15,"text":170307},{"id":170554,"depth":15,"text":170555},{"id":170592,"depth":15,"text":170593},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168133,"description":17},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170659,"title":170660,"body":170661,"description":17,"extension":18,"meta":172847,"navigation":20,"path":172848,"seo":172849,"stem":172850,"__hash__":172851},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170662,"toc":172814},[170663,170666,170670,170673,170676,170768,170770,170789,170794,170798,170801,170804,170833,170840,170843,170847,170850,170879,170881,170933,170939,170992,170996,171094,171097,171164,171168,171225,171227,171233,171237,171242,171248,171339,171344,171348,171351,171429,171432,171470,171474,171592,171595,171599,171602,171647,171650,171654,171659,171665,171715,171718,171749,171753,171757,171787,171791,171826,171830,171865,171905,171909,171925,171928,171932,171936,172015,172019,172060,172064,172119,172123,172157,172161,172191,172200,172207,172213,172270,172273,172281,172284,172288,172295,172298,172304,172307,172324,172329,172333,172339,172352,172355,172392,172395,172406,172409,172423,172426,172440,172444,172451,172484,172487,172489,172495,172498,172502,172504,172510,172515,172688,172692,172755,172759,172783,172787,172811],[10,170664,170660],{"id":170665},"_9-异常模块与包",[35,170667,170669],{"id":170668},"_91-什么是异常","9.1 什么是异常",[40,170671,170672],{},"异常是程序运行过程中出现的错误。",[40,170674,170675],{},"常见异常：",[242,170677,170678,170687],{},[245,170679,170680],{},[248,170681,170682,170685],{},[251,170683,170684],{},"异常",[251,170686,25852],{},[289,170688,170689,170699,170709,170718,170728,170738,170748,170758],{},[248,170690,170691,170696],{},[294,170692,170693],{},[91,170694,170695],{},"NameError",[294,170697,170698],{},"使用了未定义变量",[248,170700,170701,170706],{},[294,170702,170703],{},[91,170704,170705],{},"TypeError",[294,170707,170708],{},"类型不匹配",[248,170710,170711,170715],{},[294,170712,170713],{},[91,170714,154811],{},[294,170716,170717],{},"值不合法",[248,170719,170720,170725],{},[294,170721,170722],{},[91,170723,170724],{},"IndexError",[294,170726,170727],{},"列表索引越界",[248,170729,170730,170735],{},[294,170731,170732],{},[91,170733,170734],{},"KeyError",[294,170736,170737],{},"字典 key 不存在",[248,170739,170740,170745],{},[294,170741,170742],{},[91,170743,170744],{},"FileNotFoundError",[294,170746,170747],{},"文件不存在",[248,170749,170750,170755],{},[294,170751,170752],{},[91,170753,170754],{},"ZeroDivisionError",[294,170756,170757],{},"除数为 0",[248,170759,170760,170765],{},[294,170761,170762],{},[91,170763,170764],{},"ImportError",[294,170766,170767],{},"导入失败",[40,170769,15117],{},[85,170771,170773],{"className":30361,"code":170772,"language":30363,"meta":14,"style":14},"num = int(\"abc\")\n",[91,170774,170775],{"__ignoreMap":14},[94,170776,170777,170779,170781,170783,170785,170787],{"class":96,"line":97},[94,170778,155764],{"class":104},[94,170780,150],{"class":100},[94,170782,2363],{"class":153},[94,170784,105],{"class":104},[94,170786,155857],{"class":209},[94,170788,111],{"class":104},[40,170790,170791,170792,28368],{},"会触发 ",[91,170793,154811],{},[35,170795,170797],{"id":170796},"_92-为什么要处理异常","9.2 为什么要处理异常",[40,170799,170800],{},"如果不处理异常，程序会直接终止。",[40,170802,170803],{},"例如用户输入年龄：",[85,170805,170807],{"className":30361,"code":170806,"language":30363,"meta":14,"style":14},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[91,170808,170809,170827],{"__ignoreMap":14},[94,170810,170811,170813,170815,170817,170819,170821,170823,170825],{"class":96,"line":97},[94,170812,146523],{"class":104},[94,170814,150],{"class":100},[94,170816,2363],{"class":153},[94,170818,105],{"class":104},[94,170820,53798],{"class":153},[94,170822,105],{"class":104},[94,170824,152371],{"class":209},[94,170826,30480],{"class":104},[94,170828,170829,170831],{"class":96,"line":15},[94,170830,30398],{"class":153},[94,170832,155738],{"class":104},[40,170834,170835,170836,170839],{},"用户输入 ",[91,170837,170838],{},"abc","，程序就会报错退出。",[40,170841,170842],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[35,170844,170846],{"id":170845},"_93-try-except","9.3 try except",[40,170848,170849],{},"基础语法：",[85,170851,170853],{"className":30361,"code":170852,"language":30363,"meta":14,"style":14},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[91,170854,170855,170862,170867,170874],{"__ignoreMap":14},[94,170856,170857,170860],{"class":96,"line":97},[94,170858,170859],{"class":100},"try",[94,170861,3720],{"class":104},[94,170863,170864],{"class":96,"line":15},[94,170865,170866],{"class":104},"    可能出错的代码\n",[94,170868,170869,170872],{"class":96,"line":1160},[94,170870,170871],{"class":100},"except",[94,170873,3720],{"class":104},[94,170875,170876],{"class":96,"line":1175},[94,170877,170878],{"class":104},"    出错后的处理代码\n",[40,170880,15117],{},[85,170882,170884],{"className":30361,"code":170883,"language":30363,"meta":14,"style":14},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[91,170885,170886,170892,170910,170916,170922],{"__ignoreMap":14},[94,170887,170888,170890],{"class":96,"line":97},[94,170889,170859],{"class":100},[94,170891,3720],{"class":104},[94,170893,170894,170896,170898,170900,170902,170904,170906,170908],{"class":96,"line":15},[94,170895,152363],{"class":104},[94,170897,150],{"class":100},[94,170899,2363],{"class":153},[94,170901,105],{"class":104},[94,170903,53798],{"class":153},[94,170905,105],{"class":104},[94,170907,152371],{"class":209},[94,170909,30480],{"class":104},[94,170911,170912,170914],{"class":96,"line":1160},[94,170913,31282],{"class":153},[94,170915,155738],{"class":104},[94,170917,170918,170920],{"class":96,"line":1175},[94,170919,170871],{"class":100},[94,170921,3720],{"class":104},[94,170923,170924,170926,170928,170931],{"class":96,"line":1181},[94,170925,31282],{"class":153},[94,170927,105],{"class":104},[94,170929,170930],{"class":209},"\"年龄必须是数字\"",[94,170932,111],{"class":104},[40,170934,170935,170936,170938],{},"不建议裸写 ",[91,170937,170871],{},"，最好指定异常类型。",[85,170940,170942],{"className":30361,"code":170941,"language":30363,"meta":14,"style":14},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[91,170943,170944,170950,170968,170974,170982],{"__ignoreMap":14},[94,170945,170946,170948],{"class":96,"line":97},[94,170947,170859],{"class":100},[94,170949,3720],{"class":104},[94,170951,170952,170954,170956,170958,170960,170962,170964,170966],{"class":96,"line":15},[94,170953,152363],{"class":104},[94,170955,150],{"class":100},[94,170957,2363],{"class":153},[94,170959,105],{"class":104},[94,170961,53798],{"class":153},[94,170963,105],{"class":104},[94,170965,152371],{"class":209},[94,170967,30480],{"class":104},[94,170969,170970,170972],{"class":96,"line":1160},[94,170971,31282],{"class":153},[94,170973,155738],{"class":104},[94,170975,170976,170978,170980],{"class":96,"line":1175},[94,170977,170871],{"class":100},[94,170979,152203],{"class":153},[94,170981,3720],{"class":104},[94,170983,170984,170986,170988,170990],{"class":96,"line":1181},[94,170985,31282],{"class":153},[94,170987,105],{"class":104},[94,170989,170930],{"class":209},[94,170991,111],{"class":104},[35,170993,170995],{"id":170994},"_94-捕获多个异常","9.4 捕获多个异常",[85,170997,170999],{"className":30361,"code":170998,"language":30363,"meta":14,"style":14},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[91,171000,171001,171007,171028,171048,171055,171063,171074,171083],{"__ignoreMap":14},[94,171002,171003,171005],{"class":96,"line":97},[94,171004,170859],{"class":100},[94,171006,3720],{"class":104},[94,171008,171009,171012,171014,171016,171018,171020,171022,171024,171026],{"class":96,"line":15},[94,171010,171011],{"class":104},"    nums ",[94,171013,150],{"class":100},[94,171015,52203],{"class":104},[94,171017,322],{"class":153},[94,171019,12417],{"class":104},[94,171021,182],{"class":153},[94,171023,12417],{"class":104},[94,171025,176],{"class":153},[94,171027,33229],{"class":104},[94,171029,171030,171033,171035,171037,171039,171041,171043,171046],{"class":96,"line":1160},[94,171031,171032],{"class":104},"    index ",[94,171034,150],{"class":100},[94,171036,2363],{"class":153},[94,171038,105],{"class":104},[94,171040,53798],{"class":153},[94,171042,105],{"class":104},[94,171044,171045],{"class":209},"\"请输入索引:\"",[94,171047,30480],{"class":104},[94,171049,171050,171052],{"class":96,"line":1175},[94,171051,31282],{"class":153},[94,171053,171054],{"class":104},"(nums[index])\n",[94,171056,171057,171059,171061],{"class":96,"line":1181},[94,171058,170871],{"class":100},[94,171060,152203],{"class":153},[94,171062,3720],{"class":104},[94,171064,171065,171067,171069,171072],{"class":96,"line":1195},[94,171066,31282],{"class":153},[94,171068,105],{"class":104},[94,171070,171071],{"class":209},"\"索引必须是整数\"",[94,171073,111],{"class":104},[94,171075,171076,171078,171081],{"class":96,"line":1201},[94,171077,170871],{"class":100},[94,171079,171080],{"class":153}," IndexError",[94,171082,3720],{"class":104},[94,171084,171085,171087,171089,171092],{"class":96,"line":1292},[94,171086,31282],{"class":153},[94,171088,105],{"class":104},[94,171090,171091],{"class":209},"\"索引越界\"",[94,171093,111],{"class":104},[40,171095,171096],{},"多个异常使用相同处理逻辑：",[85,171098,171100],{"className":30361,"code":171099,"language":30363,"meta":14,"style":14},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[91,171101,171102,171108,171126,171139,171153],{"__ignoreMap":14},[94,171103,171104,171106],{"class":96,"line":97},[94,171105,170859],{"class":100},[94,171107,3720],{"class":104},[94,171109,171110,171112,171114,171116,171118,171120,171122,171124],{"class":96,"line":15},[94,171111,45576],{"class":104},[94,171113,150],{"class":100},[94,171115,2363],{"class":153},[94,171117,105],{"class":104},[94,171119,53798],{"class":153},[94,171121,105],{"class":104},[94,171123,155773],{"class":209},[94,171125,30480],{"class":104},[94,171127,171128,171130,171132,171134,171136],{"class":96,"line":1160},[94,171129,31282],{"class":153},[94,171131,105],{"class":104},[94,171133,551],{"class":153},[94,171135,156023],{"class":100},[94,171137,171138],{"class":104}," num)\n",[94,171140,171141,171143,171145,171147,171149,171151],{"class":96,"line":1175},[94,171142,170871],{"class":100},[94,171144,1639],{"class":104},[94,171146,154811],{"class":153},[94,171148,12417],{"class":104},[94,171150,170754],{"class":153},[94,171152,30769],{"class":104},[94,171154,171155,171157,171159,171162],{"class":96,"line":1181},[94,171156,31282],{"class":153},[94,171158,105],{"class":104},[94,171160,171161],{"class":209},"\"输入不合法\"",[94,171163,111],{"class":104},[35,171165,171167],{"id":171166},"_95-获取异常信息","9.5 获取异常信息",[85,171169,171171],{"className":30361,"code":171170,"language":30363,"meta":14,"style":14},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[91,171172,171173,171179,171193,171204],{"__ignoreMap":14},[94,171174,171175,171177],{"class":96,"line":97},[94,171176,170859],{"class":100},[94,171178,3720],{"class":104},[94,171180,171181,171183,171185,171187,171189,171191],{"class":96,"line":15},[94,171182,45576],{"class":104},[94,171184,150],{"class":100},[94,171186,2363],{"class":153},[94,171188,105],{"class":104},[94,171190,155857],{"class":209},[94,171192,111],{"class":104},[94,171194,171195,171197,171199,171201],{"class":96,"line":1160},[94,171196,170871],{"class":100},[94,171198,152203],{"class":153},[94,171200,64581],{"class":100},[94,171202,171203],{"class":104}," e:\n",[94,171205,171206,171208,171210,171212,171215,171217,171219,171221,171223],{"class":96,"line":1175},[94,171207,31282],{"class":153},[94,171209,105],{"class":104},[94,171211,157],{"class":100},[94,171213,171214],{"class":209},"\"出错了:",[94,171216,1001],{"class":153},[94,171218,179],{"class":104},[94,171220,1051],{"class":153},[94,171222,356],{"class":209},[94,171224,111],{"class":104},[40,171226,146434],{},[85,171228,171231],{"className":171229,"code":171230,"language":5169,"meta":14},[5167],"出错了:invalid literal for int() with base 10: 'abc'\n",[91,171232,171230],{"__ignoreMap":14},[35,171234,171236],{"id":171235},"_96-else和finally","9.6 else和finally",[40,171238,171239,171241],{},[91,171240,1682],{},"：没有异常时执行。",[40,171243,171244,171247],{},[91,171245,171246],{},"finally","：无论是否异常都会执行。",[85,171249,171251],{"className":30361,"code":171250,"language":30363,"meta":14,"style":14},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[91,171252,171253,171259,171277,171285,171295,171301,171322,171328],{"__ignoreMap":14},[94,171254,171255,171257],{"class":96,"line":97},[94,171256,170859],{"class":100},[94,171258,3720],{"class":104},[94,171260,171261,171263,171265,171267,171269,171271,171273,171275],{"class":96,"line":15},[94,171262,45576],{"class":104},[94,171264,150],{"class":100},[94,171266,2363],{"class":153},[94,171268,105],{"class":104},[94,171270,53798],{"class":153},[94,171272,105],{"class":104},[94,171274,155773],{"class":209},[94,171276,30480],{"class":104},[94,171278,171279,171281,171283],{"class":96,"line":1160},[94,171280,170871],{"class":100},[94,171282,152203],{"class":153},[94,171284,3720],{"class":104},[94,171286,171287,171289,171291,171293],{"class":96,"line":1175},[94,171288,31282],{"class":153},[94,171290,105],{"class":104},[94,171292,153191],{"class":209},[94,171294,111],{"class":104},[94,171296,171297,171299],{"class":96,"line":1181},[94,171298,1682],{"class":100},[94,171300,3720],{"class":104},[94,171302,171303,171305,171307,171309,171312,171314,171316,171318,171320],{"class":96,"line":1195},[94,171304,31282],{"class":153},[94,171306,105],{"class":104},[94,171308,157],{"class":100},[94,171310,171311],{"class":209},"\"输入正确:",[94,171313,1001],{"class":153},[94,171315,1646],{"class":104},[94,171317,1051],{"class":153},[94,171319,356],{"class":209},[94,171321,111],{"class":104},[94,171323,171324,171326],{"class":96,"line":1201},[94,171325,171246],{"class":100},[94,171327,3720],{"class":104},[94,171329,171330,171332,171334,171337],{"class":96,"line":1292},[94,171331,31282],{"class":153},[94,171333,105],{"class":104},[94,171335,171336],{"class":209},"\"程序结束\"",[94,171338,111],{"class":104},[40,171340,171341,171343],{},[91,171342,171246],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[35,171345,171347],{"id":171346},"_97-抛出异常","9.7 抛出异常",[40,171349,171350],{},"程序可以主动抛出异常。",[85,171352,171354],{"className":30361,"code":171353,"language":30363,"meta":14,"style":14},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[91,171355,171356,171365,171377,171390,171410,171414,171418],{"__ignoreMap":14},[94,171357,171358,171360,171363],{"class":96,"line":97},[94,171359,31930],{"class":100},[94,171361,171362],{"class":1944}," set_age",[94,171364,161392],{"class":104},[94,171366,171367,171369,171371,171373,171375],{"class":96,"line":15},[94,171368,3082],{"class":100},[94,171370,15689],{"class":104},[94,171372,1015],{"class":100},[94,171374,4074],{"class":153},[94,171376,3720],{"class":104},[94,171378,171379,171381,171383,171385,171388],{"class":96,"line":1160},[94,171380,103409],{"class":100},[94,171382,152203],{"class":153},[94,171384,105],{"class":104},[94,171386,171387],{"class":209},"\"年龄不能为负数\"",[94,171389,111],{"class":104},[94,171391,171392,171394,171396,171398,171400,171402,171404,171406,171408],{"class":96,"line":1175},[94,171393,31282],{"class":153},[94,171395,105],{"class":104},[94,171397,157],{"class":100},[94,171399,161960],{"class":209},[94,171401,1001],{"class":153},[94,171403,70198],{"class":104},[94,171405,1051],{"class":153},[94,171407,356],{"class":209},[94,171409,111],{"class":104},[94,171411,171412],{"class":96,"line":1181},[94,171413,2381],{"emptyLinePlaceholder":20},[94,171415,171416],{"class":96,"line":1195},[94,171417,2381],{"emptyLinePlaceholder":20},[94,171419,171420,171423,171425,171427],{"class":96,"line":1201},[94,171421,171422],{"class":104},"set_age(",[94,171424,637],{"class":100},[94,171426,322],{"class":153},[94,171428,111],{"class":104},[40,171430,171431],{},"调用者可以捕获：",[85,171433,171435],{"className":30361,"code":171434,"language":30363,"meta":14,"style":14},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[91,171436,171437,171443,171454,171464],{"__ignoreMap":14},[94,171438,171439,171441],{"class":96,"line":97},[94,171440,170859],{"class":100},[94,171442,3720],{"class":104},[94,171444,171445,171448,171450,171452],{"class":96,"line":15},[94,171446,171447],{"class":104},"    set_age(",[94,171449,637],{"class":100},[94,171451,322],{"class":153},[94,171453,111],{"class":104},[94,171455,171456,171458,171460,171462],{"class":96,"line":1160},[94,171457,170871],{"class":100},[94,171459,152203],{"class":153},[94,171461,64581],{"class":100},[94,171463,171203],{"class":104},[94,171465,171466,171468],{"class":96,"line":1175},[94,171467,31282],{"class":153},[94,171469,66976],{"class":104},[35,171471,171473],{"id":171472},"_98-自定义异常","9.8 自定义异常",[85,171475,171477],{"className":30361,"code":171476,"language":30363,"meta":14,"style":14},"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",[91,171478,171479,171493,171497,171501,171505,171513,171523,171534,171544,171548,171552,171558,171575,171586],{"__ignoreMap":14},[94,171480,171481,171483,171486,171488,171491],{"class":96,"line":97},[94,171482,14676],{"class":100},[94,171484,171485],{"class":1944}," BalanceNotEnoughError",[94,171487,105],{"class":104},[94,171489,171490],{"class":153},"Exception",[94,171492,30769],{"class":104},[94,171494,171495],{"class":96,"line":15},[94,171496,149514],{"class":100},[94,171498,171499],{"class":96,"line":1160},[94,171500,2381],{"emptyLinePlaceholder":20},[94,171502,171503],{"class":96,"line":1175},[94,171504,2381],{"emptyLinePlaceholder":20},[94,171506,171507,171509,171511],{"class":96,"line":1181},[94,171508,31930],{"class":100},[94,171510,150163],{"class":1944},[94,171512,162789],{"class":104},[94,171514,171515,171517,171519,171521],{"class":96,"line":1195},[94,171516,3082],{"class":100},[94,171518,150119],{"class":104},[94,171520,1065],{"class":100},[94,171522,162566],{"class":104},[94,171524,171525,171527,171530,171532],{"class":96,"line":1201},[94,171526,103409],{"class":100},[94,171528,171529],{"class":104}," BalanceNotEnoughError(",[94,171531,150214],{"class":209},[94,171533,111],{"class":104},[94,171535,171536,171538,171540,171542],{"class":96,"line":1292},[94,171537,4071],{"class":100},[94,171539,162796],{"class":104},[94,171541,637],{"class":100},[94,171543,150152],{"class":104},[94,171545,171546],{"class":96,"line":1298},[94,171547,2381],{"emptyLinePlaceholder":20},[94,171549,171550],{"class":96,"line":1310},[94,171551,2381],{"emptyLinePlaceholder":20},[94,171553,171554,171556],{"class":96,"line":1593},[94,171555,170859],{"class":100},[94,171557,3720],{"class":104},[94,171559,171560,171562,171564,171567,171569,171571,171573],{"class":96,"line":1598},[94,171561,162467],{"class":104},[94,171563,150],{"class":100},[94,171565,171566],{"class":104}," withdraw(",[94,171568,416],{"class":153},[94,171570,12417],{"class":104},[94,171572,1703],{"class":153},[94,171574,111],{"class":104},[94,171576,171577,171579,171582,171584],{"class":96,"line":1604},[94,171578,170871],{"class":100},[94,171580,171581],{"class":104}," BalanceNotEnoughError ",[94,171583,31366],{"class":100},[94,171585,171203],{"class":104},[94,171587,171588,171590],{"class":96,"line":1609},[94,171589,31282],{"class":153},[94,171591,66976],{"class":104},[40,171593,171594],{},"入门阶段大多数情况使用内置异常即可。",[35,171596,171598],{"id":171597},"_99-traceback","9.9 traceback",[40,171600,171601],{},"调试时可以输出完整异常堆栈。",[85,171603,171605],{"className":30361,"code":171604,"language":30363,"meta":14,"style":14},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[91,171606,171607,171614,171618,171624,171634,171642],{"__ignoreMap":14},[94,171608,171609,171611],{"class":96,"line":97},[94,171610,30375],{"class":100},[94,171612,171613],{"class":104}," traceback\n",[94,171615,171616],{"class":96,"line":15},[94,171617,2381],{"emptyLinePlaceholder":20},[94,171619,171620,171622],{"class":96,"line":1160},[94,171621,170859],{"class":100},[94,171623,3720],{"class":104},[94,171625,171626,171628,171630,171632],{"class":96,"line":1175},[94,171627,1966],{"class":153},[94,171629,105],{"class":104},[94,171631,155857],{"class":209},[94,171633,111],{"class":104},[94,171635,171636,171638,171640],{"class":96,"line":1181},[94,171637,170871],{"class":100},[94,171639,152203],{"class":153},[94,171641,3720],{"class":104},[94,171643,171644],{"class":96,"line":1195},[94,171645,171646],{"class":104},"    traceback.print_exc()\n",[40,171648,171649],{},"日志系统中常把异常堆栈记录到文件。",[35,171651,171653],{"id":171652},"_910-什么是模块","9.10 什么是模块",[40,171655,171656,171657,125960],{},"模块就是一个 ",[91,171658,146329],{},[40,171660,171661,171662,24601],{},"例如创建 ",[91,171663,171664],{},"my_math.py",[85,171666,171668],{"className":30361,"code":171667,"language":30363,"meta":14,"style":14},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[91,171669,171670,171678,171688,171692,171696,171705],{"__ignoreMap":14},[94,171671,171672,171674,171676],{"class":96,"line":97},[94,171673,31930],{"class":100},[94,171675,5191],{"class":1944},[94,171677,151070],{"class":104},[94,171679,171680,171682,171684,171686],{"class":96,"line":15},[94,171681,4071],{"class":100},[94,171683,10851],{"class":104},[94,171685,586],{"class":100},[94,171687,151081],{"class":104},[94,171689,171690],{"class":96,"line":1160},[94,171691,2381],{"emptyLinePlaceholder":20},[94,171693,171694],{"class":96,"line":1175},[94,171695,2381],{"emptyLinePlaceholder":20},[94,171697,171698,171700,171703],{"class":96,"line":1181},[94,171699,31930],{"class":100},[94,171701,171702],{"class":1944}," sub",[94,171704,151070],{"class":104},[94,171706,171707,171709,171711,171713],{"class":96,"line":1195},[94,171708,4071],{"class":100},[94,171710,10851],{"class":104},[94,171712,637],{"class":100},[94,171714,151081],{"class":104},[40,171716,171717],{},"在另一个文件中导入：",[85,171719,171721],{"className":30361,"code":171720,"language":30363,"meta":14,"style":14},"import my_math\n\nprint(my_math.add(1, 2))\n",[91,171722,171723,171730,171734],{"__ignoreMap":14},[94,171724,171725,171727],{"class":96,"line":97},[94,171726,30375],{"class":100},[94,171728,171729],{"class":104}," my_math\n",[94,171731,171732],{"class":96,"line":15},[94,171733,2381],{"emptyLinePlaceholder":20},[94,171735,171736,171738,171741,171743,171745,171747],{"class":96,"line":1160},[94,171737,30398],{"class":153},[94,171739,171740],{"class":104},"(my_math.add(",[94,171742,322],{"class":153},[94,171744,12417],{"class":104},[94,171746,182],{"class":153},[94,171748,30480],{"class":104},[35,171750,171752],{"id":171751},"_911-import导入","9.11 import导入",[65,171754,171756],{"id":171755},"_9111-导入模块","9.11.1 导入模块",[85,171758,171760],{"className":30361,"code":171759,"language":30363,"meta":14,"style":14},"import random\n\nprint(random.randint(1, 10))\n",[91,171761,171762,171768,171772],{"__ignoreMap":14},[94,171763,171764,171766],{"class":96,"line":97},[94,171765,30375],{"class":100},[94,171767,45311],{"class":104},[94,171769,171770],{"class":96,"line":15},[94,171771,2381],{"emptyLinePlaceholder":20},[94,171773,171774,171776,171779,171781,171783,171785],{"class":96,"line":1160},[94,171775,30398],{"class":153},[94,171777,171778],{"class":104},"(random.randint(",[94,171780,322],{"class":153},[94,171782,12417],{"class":104},[94,171784,551],{"class":153},[94,171786,30480],{"class":104},[65,171788,171790],{"id":171789},"_9112-导入指定内容","9.11.2 导入指定内容",[85,171792,171794],{"className":30361,"code":171793,"language":30363,"meta":14,"style":14},"from random import randint\n\nprint(randint(1, 10))\n",[91,171795,171796,171807,171811],{"__ignoreMap":14},[94,171797,171798,171800,171802,171804],{"class":96,"line":97},[94,171799,30720],{"class":100},[94,171801,57773],{"class":104},[94,171803,30375],{"class":100},[94,171805,171806],{"class":104}," randint\n",[94,171808,171809],{"class":96,"line":15},[94,171810,2381],{"emptyLinePlaceholder":20},[94,171812,171813,171815,171818,171820,171822,171824],{"class":96,"line":1160},[94,171814,30398],{"class":153},[94,171816,171817],{"class":104},"(randint(",[94,171819,322],{"class":153},[94,171821,12417],{"class":104},[94,171823,551],{"class":153},[94,171825,30480],{"class":104},[65,171827,171829],{"id":171828},"_9113-起别名","9.11.3 起别名",[85,171831,171833],{"className":30361,"code":171832,"language":30363,"meta":14,"style":14},"import random as rd\n\nprint(rd.randint(1, 10))\n",[91,171834,171835,171846,171850],{"__ignoreMap":14},[94,171836,171837,171839,171841,171843],{"class":96,"line":97},[94,171838,30375],{"class":100},[94,171840,57773],{"class":104},[94,171842,31366],{"class":100},[94,171844,171845],{"class":104}," rd\n",[94,171847,171848],{"class":96,"line":15},[94,171849,2381],{"emptyLinePlaceholder":20},[94,171851,171852,171854,171857,171859,171861,171863],{"class":96,"line":1160},[94,171853,30398],{"class":153},[94,171855,171856],{"class":104},"(rd.randint(",[94,171858,322],{"class":153},[94,171860,12417],{"class":104},[94,171862,551],{"class":153},[94,171864,30480],{"class":104},[85,171866,171868],{"className":30361,"code":171867,"language":30363,"meta":14,"style":14},"from random import randint as rint\n\nprint(rint(1, 10))\n",[91,171869,171870,171886,171890],{"__ignoreMap":14},[94,171871,171872,171874,171876,171878,171881,171883],{"class":96,"line":97},[94,171873,30720],{"class":100},[94,171875,57773],{"class":104},[94,171877,30375],{"class":100},[94,171879,171880],{"class":104}," randint ",[94,171882,31366],{"class":100},[94,171884,171885],{"class":104}," rint\n",[94,171887,171888],{"class":96,"line":15},[94,171889,2381],{"emptyLinePlaceholder":20},[94,171891,171892,171894,171897,171899,171901,171903],{"class":96,"line":1160},[94,171893,30398],{"class":153},[94,171895,171896],{"class":104},"(rint(",[94,171898,322],{"class":153},[94,171900,12417],{"class":104},[94,171902,551],{"class":153},[94,171904,30480],{"class":104},[65,171906,171908],{"id":171907},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[85,171910,171912],{"className":30361,"code":171911,"language":30363,"meta":14,"style":14},"from random import *\n",[91,171913,171914],{"__ignoreMap":14},[94,171915,171916,171918,171920,171922],{"class":96,"line":97},[94,171917,30720],{"class":100},[94,171919,57773],{"class":104},[94,171921,30375],{"class":100},[94,171923,171924],{"class":100}," *\n",[40,171926,171927],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[35,171929,171931],{"id":171930},"_912-常用内置模块","9.12 常用内置模块",[65,171933,171935],{"id":171934},"_9121-random","9.12.1 random",[85,171937,171939],{"className":30361,"code":171938,"language":30363,"meta":14,"style":14},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[91,171940,171941,171947,171951,171965,171984],{"__ignoreMap":14},[94,171942,171943,171945],{"class":96,"line":97},[94,171944,30375],{"class":100},[94,171946,45311],{"class":104},[94,171948,171949],{"class":96,"line":15},[94,171950,2381],{"emptyLinePlaceholder":20},[94,171952,171953,171955,171957,171959,171961,171963],{"class":96,"line":1160},[94,171954,30398],{"class":153},[94,171956,171778],{"class":104},[94,171958,322],{"class":153},[94,171960,12417],{"class":104},[94,171962,551],{"class":153},[94,171964,30480],{"class":104},[94,171966,171967,171969,171972,171974,171976,171978,171980,171982],{"class":96,"line":1175},[94,171968,30398],{"class":153},[94,171970,171971],{"class":104},"(random.choice([",[94,171973,149865],{"class":209},[94,171975,12417],{"class":104},[94,171977,150913],{"class":209},[94,171979,12417],{"class":104},[94,171981,159708],{"class":209},[94,171983,33126],{"class":104},[94,171985,171986,171988,171991,171993,171995,171997,171999,172001,172003,172005,172007,172009,172011,172013],{"class":96,"line":1181},[94,171987,30398],{"class":153},[94,171989,171990],{"class":104},"(random.sample([",[94,171992,322],{"class":153},[94,171994,12417],{"class":104},[94,171996,182],{"class":153},[94,171998,12417],{"class":104},[94,172000,176],{"class":153},[94,172002,12417],{"class":104},[94,172004,398],{"class":153},[94,172006,12417],{"class":104},[94,172008,424],{"class":153},[94,172010,112179],{"class":104},[94,172012,182],{"class":153},[94,172014,30480],{"class":104},[65,172016,172018],{"id":172017},"_9122-time","9.12.2 time",[85,172020,172022],{"className":30361,"code":172021,"language":30363,"meta":14,"style":14},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[91,172023,172024,172030,172034,172041,172049],{"__ignoreMap":14},[94,172025,172026,172028],{"class":96,"line":97},[94,172027,30375],{"class":100},[94,172029,31812],{"class":104},[94,172031,172032],{"class":96,"line":15},[94,172033,2381],{"emptyLinePlaceholder":20},[94,172035,172036,172038],{"class":96,"line":1160},[94,172037,30398],{"class":153},[94,172039,172040],{"class":104},"(time.time())\n",[94,172042,172043,172045,172047],{"class":96,"line":1175},[94,172044,95048],{"class":104},[94,172046,322],{"class":153},[94,172048,111],{"class":104},[94,172050,172051,172053,172055,172058],{"class":96,"line":1181},[94,172052,30398],{"class":153},[94,172054,105],{"class":104},[94,172056,172057],{"class":209},"\"1秒后执行\"",[94,172059,111],{"class":104},[65,172061,172063],{"id":172062},"_9123-datetime","9.12.3 datetime",[85,172065,172067],{"className":30361,"code":172066,"language":30363,"meta":14,"style":14},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[91,172068,172069,172081,172085,172095,172102],{"__ignoreMap":14},[94,172070,172071,172073,172076,172078],{"class":96,"line":97},[94,172072,30720],{"class":100},[94,172074,172075],{"class":104}," datetime ",[94,172077,30375],{"class":100},[94,172079,172080],{"class":104}," datetime\n",[94,172082,172083],{"class":96,"line":15},[94,172084,2381],{"emptyLinePlaceholder":20},[94,172086,172087,172090,172092],{"class":96,"line":1160},[94,172088,172089],{"class":104},"now ",[94,172091,150],{"class":100},[94,172093,172094],{"class":104}," datetime.now()\n",[94,172096,172097,172099],{"class":96,"line":1175},[94,172098,30398],{"class":153},[94,172100,172101],{"class":104},"(now)\n",[94,172103,172104,172106,172109,172112,172114,172117],{"class":96,"line":1181},[94,172105,30398],{"class":153},[94,172107,172108],{"class":104},"(now.strftime(",[94,172110,172111],{"class":209},"\"%Y-%m-",[94,172113,156668],{"class":153},[94,172115,172116],{"class":209}," %H:%M:%S\"",[94,172118,30480],{"class":104},[65,172120,172122],{"id":172121},"_9124-os","9.12.4 os",[85,172124,172126],{"className":30361,"code":172125,"language":30363,"meta":14,"style":14},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[91,172127,172128,172134,172138,172145],{"__ignoreMap":14},[94,172129,172130,172132],{"class":96,"line":97},[94,172131,30375],{"class":100},[94,172133,45288],{"class":104},[94,172135,172136],{"class":96,"line":15},[94,172137,2381],{"emptyLinePlaceholder":20},[94,172139,172140,172142],{"class":96,"line":1160},[94,172141,30398],{"class":153},[94,172143,172144],{"class":104},"(os.getcwd())\n",[94,172146,172147,172149,172152,172155],{"class":96,"line":1175},[94,172148,30398],{"class":153},[94,172150,172151],{"class":104},"(os.listdir(",[94,172153,172154],{"class":209},"\".\"",[94,172156,30480],{"class":104},[65,172158,172160],{"id":172159},"_9125-sys","9.12.5 sys",[85,172162,172164],{"className":30361,"code":172163,"language":30363,"meta":14,"style":14},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[91,172165,172166,172173,172177,172184],{"__ignoreMap":14},[94,172167,172168,172170],{"class":96,"line":97},[94,172169,30375],{"class":100},[94,172171,172172],{"class":104}," sys\n",[94,172174,172175],{"class":96,"line":15},[94,172176,2381],{"emptyLinePlaceholder":20},[94,172178,172179,172181],{"class":96,"line":1160},[94,172180,30398],{"class":153},[94,172182,172183],{"class":104},"(sys.version)\n",[94,172185,172186,172188],{"class":96,"line":1175},[94,172187,30398],{"class":153},[94,172189,172190],{"class":104},"(sys.path)\n",[35,172192,172194,172195,172197,172198,356],{"id":172193},"_913-if-name-main","9.13 if ",[254,172196,79787],{}," == \"",[254,172199,102035],{},[40,172201,172202,172203,172206],{},"模块被直接运行和被导入时，",[91,172204,172205],{},"__name__"," 的值不同。",[40,172208,172209,172210,24601],{},"创建 ",[91,172211,172212],{},"my_module.py",[85,172214,172216],{"className":30361,"code":172215,"language":30363,"meta":14,"style":14},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[91,172217,172218,172226,172236,172240,172244,172256],{"__ignoreMap":14},[94,172219,172220,172222,172224],{"class":96,"line":97},[94,172221,31930],{"class":100},[94,172223,5191],{"class":1944},[94,172225,151070],{"class":104},[94,172227,172228,172230,172232,172234],{"class":96,"line":15},[94,172229,4071],{"class":100},[94,172231,10851],{"class":104},[94,172233,586],{"class":100},[94,172235,151081],{"class":104},[94,172237,172238],{"class":96,"line":1160},[94,172239,2381],{"emptyLinePlaceholder":20},[94,172241,172242],{"class":96,"line":1175},[94,172243,2381],{"emptyLinePlaceholder":20},[94,172245,172246,172248,172250,172252,172254],{"class":96,"line":1181},[94,172247,1512],{"class":100},[94,172249,31203],{"class":153},[94,172251,101536],{"class":100},[94,172253,101539],{"class":209},[94,172255,3720],{"class":104},[94,172257,172258,172260,172262,172264,172266,172268],{"class":96,"line":1195},[94,172259,31282],{"class":153},[94,172261,166577],{"class":104},[94,172263,322],{"class":153},[94,172265,12417],{"class":104},[94,172267,182],{"class":153},[94,172269,30480],{"class":104},[40,172271,172272],{},"作用：",[48,172274,172275,172278],{},[51,172276,172277],{},"直接运行该文件时，执行测试代码。",[51,172279,172280],{},"被其他文件导入时，不执行测试代码。",[40,172282,172283],{},"这是写模块时很常用的习惯。",[35,172285,172287],{"id":172286},"_914-包","9.14 包",[40,172289,172290,172291,172294],{},"包是包含 ",[91,172292,172293],{},"__init__.py"," 的目录，用于组织多个模块。",[40,172296,172297],{},"目录结构：",[85,172299,172302],{"className":172300,"code":172301,"language":5169,"meta":14},[5167],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[91,172303,172301],{"__ignoreMap":14},[40,172305,172306],{},"导入：",[85,172308,172310],{"className":30361,"code":172309,"language":30363,"meta":14,"style":14},"from utils.file_utils import read_file\n",[91,172311,172312],{"__ignoreMap":14},[94,172313,172314,172316,172319,172321],{"class":96,"line":97},[94,172315,30720],{"class":100},[94,172317,172318],{"class":104}," utils.file_utils ",[94,172320,30375],{"class":100},[94,172322,172323],{"class":104}," read_file\n",[40,172325,172326,172328],{},[91,172327,172293],{}," 可以为空，也可以写包初始化逻辑。",[35,172330,172332],{"id":172331},"_915-第三方包","9.15 第三方包",[40,172334,172335,172336,172338],{},"第三方包通过 ",[91,172337,23813],{}," 安装。",[85,172340,172342],{"className":23804,"code":172341,"language":23806,"meta":14,"style":14},"pip install requests\n",[91,172343,172344],{"__ignoreMap":14},[94,172345,172346,172348,172350],{"class":96,"line":97},[94,172347,23813],{"class":1944},[94,172349,23816],{"class":209},[94,172351,146075],{"class":209},[40,172353,172354],{},"使用：",[85,172356,172358],{"className":30361,"code":172357,"language":30363,"meta":14,"style":14},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[91,172359,172360,172366,172370,172385],{"__ignoreMap":14},[94,172361,172362,172364],{"class":96,"line":97},[94,172363,30375],{"class":100},[94,172365,146075],{"class":104},[94,172367,172368],{"class":96,"line":15},[94,172369,2381],{"emptyLinePlaceholder":20},[94,172371,172372,172375,172377,172380,172383],{"class":96,"line":1160},[94,172373,172374],{"class":104},"response ",[94,172376,150],{"class":100},[94,172378,172379],{"class":104}," requests.get(",[94,172381,172382],{"class":209},"\"https:\u002F\u002Fwww.example.com\"",[94,172384,111],{"class":104},[94,172386,172387,172389],{"class":96,"line":1175},[94,172388,30398],{"class":153},[94,172390,172391],{"class":104},"(response.status_code)\n",[40,172393,172394],{},"查看已安装包：",[85,172396,172398],{"className":23804,"code":172397,"language":23806,"meta":14,"style":14},"pip list\n",[91,172399,172400],{"__ignoreMap":14},[94,172401,172402,172404],{"class":96,"line":97},[94,172403,23813],{"class":1944},[94,172405,118932],{"class":209},[40,172407,172408],{},"导出项目依赖：",[85,172410,172411],{"className":23804,"code":146270,"language":23806,"meta":14,"style":14},[91,172412,172413],{"__ignoreMap":14},[94,172414,172415,172417,172419,172421],{"class":96,"line":97},[94,172416,23813],{"class":1944},[94,172418,146279],{"class":209},[94,172420,26205],{"class":100},[94,172422,146284],{"class":209},[40,172424,172425],{},"安装项目依赖：",[85,172427,172428],{"className":23804,"code":146290,"language":23806,"meta":14,"style":14},[91,172429,172430],{"__ignoreMap":14},[94,172431,172432,172434,172436,172438],{"class":96,"line":97},[94,172433,23813],{"class":1944},[94,172435,23816],{"class":209},[94,172437,119616],{"class":153},[94,172439,146284],{"class":209},[35,172441,172443],{"id":172442},"_916-模块搜索路径","9.16 模块搜索路径",[40,172445,172446,172447,172450],{},"Python 导入模块时会在 ",[91,172448,172449],{},"sys.path"," 中查找。",[85,172452,172454],{"className":30361,"code":172453,"language":30363,"meta":14,"style":14},"import sys\n\nfor path in sys.path:\n    print(path)\n",[91,172455,172456,172462,172466,172478],{"__ignoreMap":14},[94,172457,172458,172460],{"class":96,"line":97},[94,172459,30375],{"class":100},[94,172461,172172],{"class":104},[94,172463,172464],{"class":96,"line":15},[94,172465,2381],{"emptyLinePlaceholder":20},[94,172467,172468,172470,172473,172475],{"class":96,"line":1160},[94,172469,3006],{"class":100},[94,172471,172472],{"class":104}," path ",[94,172474,26026],{"class":100},[94,172476,172477],{"class":104}," sys.path:\n",[94,172479,172480,172482],{"class":96,"line":1175},[94,172481,31282],{"class":153},[94,172483,169206],{"class":104},[40,172485,172486],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[40,172488,157600],{},[85,172490,172493],{"className":172491,"code":172492,"language":5169,"meta":14},[5167],"random.py\njson.py\ntime.py\n",[91,172494,172492],{"__ignoreMap":14},[40,172496,172497],{},"这些文件名可能导致导入异常。",[35,172499,172501],{"id":172500},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[40,172503,172297],{},[85,172505,172508],{"className":172506,"code":172507,"language":5169,"meta":14},[5167],"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",[91,172509,172507],{"__ignoreMap":14},[40,172511,172512,24601],{},[91,172513,172514],{},"utils\u002Ffile_utils.py",[85,172516,172518],{"className":30361,"code":172517,"language":30363,"meta":14,"style":14},"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",[91,172519,172520,172526,172536,172540,172544,172554,172564,172572,172578,172582,172609,172619,172623,172627,172637,172663],{"__ignoreMap":14},[94,172521,172522,172524],{"class":96,"line":97},[94,172523,30375],{"class":100},[94,172525,147068],{"class":104},[94,172527,172528,172530,172532,172534],{"class":96,"line":15},[94,172529,30720],{"class":100},[94,172531,108288],{"class":104},[94,172533,30375],{"class":100},[94,172535,108293],{"class":104},[94,172537,172538],{"class":96,"line":1160},[94,172539,2381],{"emptyLinePlaceholder":20},[94,172541,172542],{"class":96,"line":1175},[94,172543,2381],{"emptyLinePlaceholder":20},[94,172545,172546,172548,172551],{"class":96,"line":1181},[94,172547,31930],{"class":100},[94,172549,172550],{"class":1944}," read_json",[94,172552,172553],{"class":104},"(path):\n",[94,172555,172556,172559,172561],{"class":96,"line":1195},[94,172557,172558],{"class":104},"    path ",[94,172560,150],{"class":100},[94,172562,172563],{"class":104}," Path(path)\n",[94,172565,172566,172568,172570],{"class":96,"line":1201},[94,172567,3082],{"class":100},[94,172569,38913],{"class":100},[94,172571,169287],{"class":104},[94,172573,172574,172576],{"class":96,"line":1292},[94,172575,14734],{"class":100},[94,172577,51815],{"class":104},[94,172579,172580],{"class":96,"line":1298},[94,172581,2381],{"emptyLinePlaceholder":20},[94,172583,172584,172586,172588,172591,172593,172595,172597,172599,172601,172603,172605,172607],{"class":96,"line":1310},[94,172585,34161],{"class":100},[94,172587,146768],{"class":153},[94,172589,172590],{"class":104},"(path, ",[94,172592,146778],{"class":209},[94,172594,12417],{"class":104},[94,172596,146783],{"class":5198},[94,172598,150],{"class":100},[94,172600,146788],{"class":209},[94,172602,13696],{"class":104},[94,172604,31366],{"class":100},[94,172606,148130],{"class":5198},[94,172608,3720],{"class":104},[94,172610,172611,172613,172615,172617],{"class":96,"line":1593},[94,172612,14734],{"class":100},[94,172614,148141],{"class":104},[94,172616,45337],{"class":5198},[94,172618,111],{"class":104},[94,172620,172621],{"class":96,"line":1598},[94,172622,2381],{"emptyLinePlaceholder":20},[94,172624,172625],{"class":96,"line":1604},[94,172626,2381],{"emptyLinePlaceholder":20},[94,172628,172629,172631,172634],{"class":96,"line":1609},[94,172630,31930],{"class":100},[94,172632,172633],{"class":1944}," write_json",[94,172635,172636],{"class":104},"(path, data):\n",[94,172638,172639,172641,172643,172645,172647,172649,172651,172653,172655,172657,172659,172661],{"class":96,"line":1623},[94,172640,34161],{"class":100},[94,172642,146768],{"class":153},[94,172644,172590],{"class":104},[94,172646,151953],{"class":209},[94,172648,12417],{"class":104},[94,172650,146783],{"class":5198},[94,172652,150],{"class":100},[94,172654,146788],{"class":209},[94,172656,13696],{"class":104},[94,172658,31366],{"class":100},[94,172660,148130],{"class":5198},[94,172662,3720],{"class":104},[94,172664,172665,172668,172670,172672,172674,172676,172678,172680,172682,172684,172686],{"class":96,"line":1628},[94,172666,172667],{"class":104},"        json.dump(data, ",[94,172669,45337],{"class":5198},[94,172671,12417],{"class":104},[94,172673,147114],{"class":5198},[94,172675,150],{"class":100},[94,172677,33970],{"class":153},[94,172679,12417],{"class":104},[94,172681,151989],{"class":5198},[94,172683,150],{"class":100},[94,172685,182],{"class":153},[94,172687,111],{"class":104},[40,172689,172690,24601],{},[91,172691,154584],{},[85,172693,172695],{"className":30361,"code":172694,"language":30363,"meta":14,"style":14},"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",[91,172696,172697,172708,172712,172725,172745],{"__ignoreMap":14},[94,172698,172699,172701,172703,172705],{"class":96,"line":97},[94,172700,30720],{"class":100},[94,172702,172318],{"class":104},[94,172704,30375],{"class":100},[94,172706,172707],{"class":104}," read_json, write_json\n",[94,172709,172710],{"class":96,"line":15},[94,172711,2381],{"emptyLinePlaceholder":20},[94,172713,172714,172716,172718,172721,172723],{"class":96,"line":1160},[94,172715,159693],{"class":104},[94,172717,150],{"class":100},[94,172719,172720],{"class":104}," read_json(",[94,172722,151808],{"class":209},[94,172724,111],{"class":104},[94,172726,172727,172729,172731,172733,172735,172737,172739,172741,172743],{"class":96,"line":1175},[94,172728,170511],{"class":104},[94,172730,62656],{"class":209},[94,172732,51414],{"class":104},[94,172734,149865],{"class":209},[94,172736,12417],{"class":104},[94,172738,151449],{"class":209},[94,172740,51414],{"class":104},[94,172742,1094],{"class":153},[94,172744,165129],{"class":104},[94,172746,172747,172750,172752],{"class":96,"line":1181},[94,172748,172749],{"class":104},"write_json(",[94,172751,151808],{"class":209},[94,172753,172754],{"class":104},", students)\n",[35,172756,172758],{"id":172757},"_918-易错点","9.18 易错点",[48,172760,172761,172764,172769,172774,172777,172780],{},[51,172762,172763],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[51,172765,172766,172767,28368],{},"能指定异常类型就不要裸写 ",[91,172768,170871],{},[51,172770,172771,172773],{},[91,172772,171246],{}," 无论是否出错都会执行。",[51,172775,172776],{},"模块文件名不要和标准库重名。",[51,172778,172779],{},"导入自己写的模块时，要注意运行目录。",[51,172781,172782],{},"第三方包要安装到当前解释器或虚拟环境中。",[35,172784,172786],{"id":172785},"_919-本章练习","9.19 本章练习",[48,172788,172789,172792,172795,172801,172808],{},[51,172790,172791],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[51,172793,172794],{},"写函数读取文件，如果文件不存在则返回空字符串。",[51,172796,172209,172797,172800],{},[91,172798,172799],{},"math_utils.py","，实现加减乘除函数并导入使用。",[51,172802,172803,172804,172807],{},"创建一个 ",[91,172805,172806],{},"utils"," 包，把 JSON 读写函数放进去。",[51,172809,172810],{},"写一个程序，捕获除零异常和输入格式异常。",[5108,172812,172813],{},"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":14,"searchDepth":15,"depth":15,"links":172815},[172816,172817,172818,172819,172820,172821,172822,172823,172824,172825,172826,172832,172839,172841,172842,172843,172844,172845,172846],{"id":170668,"depth":15,"text":170669},{"id":170796,"depth":15,"text":170797},{"id":170845,"depth":15,"text":170846},{"id":170994,"depth":15,"text":170995},{"id":171166,"depth":15,"text":171167},{"id":171235,"depth":15,"text":171236},{"id":171346,"depth":15,"text":171347},{"id":171472,"depth":15,"text":171473},{"id":171597,"depth":15,"text":171598},{"id":171652,"depth":15,"text":171653},{"id":171751,"depth":15,"text":171752,"children":172827},[172828,172829,172830,172831],{"id":171755,"depth":1160,"text":171756},{"id":171789,"depth":1160,"text":171790},{"id":171828,"depth":1160,"text":171829},{"id":171907,"depth":1160,"text":171908},{"id":171930,"depth":15,"text":171931,"children":172833},[172834,172835,172836,172837,172838],{"id":171934,"depth":1160,"text":171935},{"id":172017,"depth":1160,"text":172018},{"id":172062,"depth":1160,"text":172063},{"id":172121,"depth":1160,"text":172122},{"id":172159,"depth":1160,"text":172160},{"id":172193,"depth":15,"text":172840},"9.13 if name == \"main\"",{"id":172286,"depth":15,"text":172287},{"id":172331,"depth":15,"text":172332},{"id":172442,"depth":15,"text":172443},{"id":172500,"depth":15,"text":172501},{"id":172757,"depth":15,"text":172758},{"id":172785,"depth":15,"text":172786},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170660,"description":17},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172853,"title":172854,"body":172855,"description":173018,"extension":18,"meta":173019,"navigation":20,"path":173020,"seo":173021,"stem":173022,"__hash__":173023},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172856,"toc":173013},[172857,172860,172863,172866,172877,172879,172953,172956,172959,172962,172965,172968,172971,172974,172977,172980,172983],[10,172858,172854],{"id":172859},"python教程",[40,172861,172862],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[40,172864,172865],{},"建议学习环境：",[48,172867,172868,172871,172874],{},[51,172869,172870],{},"Python 版本：Python 3.10 及以上。",[51,172872,172873],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[51,172875,172876],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[35,172878,117055],{"id":117055},[48,172880,172881,172887,172893,172899,172905,172911,172917,172923,172929,172935,172941,172947],{},[51,172882,172883],{},[343,172884,172886],{"href":172885},".\u002Fch1-Python","Python环境与第一个程序",[51,172888,172889],{},[343,172890,172892],{"href":172891},".\u002Fch2","基础语法、变量与字符串",[51,172894,172895],{},[343,172896,172898],{"href":172897},".\u002Fch3","判断语句",[51,172900,172901],{},[343,172902,172904],{"href":172903},".\u002Fch4","循环语句",[51,172906,172907],{},[343,172908,172910],{"href":172909},".\u002Fch5","函数基础",[51,172912,172913],{},[343,172914,172916],{"href":172915},".\u002Fch6","数据容器",[51,172918,172919],{},[343,172920,172922],{"href":172921},".\u002Fch7","函数进阶",[51,172924,172925],{},[343,172926,172928],{"href":172927},".\u002Fch8","文件操作",[51,172930,172931],{},[343,172932,172934],{"href":172933},".\u002Fch9","异常、模块与包",[51,172936,172937],{},[343,172938,172940],{"href":172939},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[51,172942,172943],{},[343,172944,172946],{"href":172945},".\u002Fch11","面向对象基础",[51,172948,172949],{},[343,172950,172952],{"href":172951},".\u002Fch12","综合案例与复习路线",[35,172954,172955],{"id":172955},"学习路线",[40,172957,172958],{},"第一阶段：能运行程序。",[40,172960,172961],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[40,172963,172964],{},"第二阶段：能组织数据。",[40,172966,172967],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[40,172969,172970],{},"第三阶段：能封装逻辑。",[40,172972,172973],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[40,172975,172976],{},"第四阶段：能做小项目。",[40,172978,172979],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[35,172981,172982],{"id":172982},"参考资料",[48,172984,172985,172992,172999,173006],{},[51,172986,172987,172988],{},"黑马程序员 Python 入门教程推荐：",[343,172989,172990],{"href":172990,"rel":172991},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23847],[51,172993,172994,172995],{},"Python 官方中文教程：",[343,172996,172997],{"href":172997,"rel":172998},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23847],[51,173000,173001,173002],{},"Python 标准库文档：",[343,173003,173004],{"href":173004,"rel":173005},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23847],[51,173007,173008,173009],{},"pyecharts 文档：",[343,173010,173011],{"href":173011,"rel":173012},"https:\u002F\u002Fpyecharts.org\u002F",[23847],{"title":14,"searchDepth":15,"depth":15,"links":173014},[173015,173016,173017],{"id":117055,"depth":15,"text":117055},{"id":172955,"depth":15,"text":172955},{"id":172982,"depth":15,"text":172982},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23360},"\u002Fwiki\u002F2024-10-10-python",{"title":172854,"description":173018},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379207]